refactor(auth): 权限组⇄设备关联功能完善
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run

This commit is contained in:
2025-07-26 23:25:22 +08:00
parent f4dbcba15f
commit 5ad0f652fe
6 changed files with 114 additions and 84 deletions

View File

@@ -63,11 +63,8 @@ public class AuthTimer {
/**
* 每两分钟执行一次
*/
@Scheduled(cron = "0 */1 * * * ?")
// @Scheduled(cron = "0 */1 * * * ?")
public void autoAuth() {
// TenantHelper.setDynamic("000000", true);
List<RemoteResidentPersonVo> unAuthPerson = remoteResidentPersonService.queryUnAuthPerson();
// if (CollUtil.isNotEmpty(unAuthPerson)) {
//

View File

@@ -1,5 +1,6 @@
package org.dromara.sis.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.sis.domain.SisAuthGroupRef;
import org.dromara.sis.domain.vo.SisAuthGroupRefVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@@ -8,8 +9,9 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* 权限组⇄设备关联Mapper接口
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Mapper
public interface SisAuthGroupRefMapper extends BaseMapperPlus<SisAuthGroupRef, SisAuthGroupRefVo> {
}

View File

@@ -346,8 +346,8 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
acIds.forEach(id -> {
// controlType 1-门禁
Long deviceId = bindRefList.stream().filter(vo -> vo.getBindId().equals(id) && vo.getControlType() == 1).findFirst().map(SisDeviceBindRefVo::getBindId).orElse(null);
SisAccessControlVo ac = accessControlService.queryById(deviceId);
if (ac != null) {
if (deviceId != null) {
SisAccessControlVo ac = accessControlService.queryById(deviceId);
log.info("调用门禁服务远程开门doorName:{}", ac.getAccessName());
RemoteOpenDoorReq req = new RemoteOpenDoorReq();
req.setType(0);

View File

@@ -44,10 +44,13 @@ public interface ISisAuthGroupRefService {
/**
* 新增权限组⇄设备关联
*
* @param bo 权限组⇄设备关联
* @param authGroupId 权限组id
* @param acIds 门禁id
* @param eleIds 电梯id
* @param floorIds 楼层id
* @return 是否新增成功
*/
Boolean insertByBo(SisAuthGroupRefBo bo);
Boolean insertByBo(Long authGroupId, Collection<Long> acIds, Collection<Long> eleIds, Collection<Long> floorIds);
/**
* 修改权限组⇄设备关联
@@ -66,12 +69,17 @@ public interface ISisAuthGroupRefService {
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 通过权限组id查询授权设备列表
*
* @param groupId 权限id
*/
List<SisAuthGroupRefVo> queryListByGroupId(Long groupId);
/**
* 通过权限组id删除授权设备列表
*
* @param groupId 权限id
*/
Boolean deleteByGroupId(Long groupId);
}

View File

@@ -1,7 +1,8 @@
package org.dromara.sis.service.impl;
import cn.hutool.core.lang.Assert;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,12 +10,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.api.RemoteFloorService;
import org.dromara.property.api.domain.vo.RemoteFloorVo;
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
import org.dromara.sis.service.ISisElevatorFloorRefService;
import org.dromara.sis.service.ISisElevatorInfoService;
import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAuthGroupRefBo;
import org.dromara.sis.domain.vo.SisAuthGroupRefVo;
import org.dromara.sis.domain.SisAuthGroupRef;
import org.dromara.sis.mapper.SisAuthGroupRefMapper;
import org.dromara.sis.service.ISisAuthGroupRefService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@@ -27,12 +35,18 @@ import java.util.Collection;
* @date 2025-07-23
*/
@Slf4j
@RequiredArgsConstructor
@Service
@RequiredArgsConstructor
public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
private final SisAuthGroupRefMapper baseMapper;
private final ISisElevatorInfoService elevatorInfoService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
@DubboReference
private RemoteFloorService remoteFloorService;
/**
* 查询权限组⇄设备关联
*
@@ -40,7 +54,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
* @return 权限组⇄设备关联
*/
@Override
public SisAuthGroupRefVo queryById(Long id){
public SisAuthGroupRefVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@@ -83,18 +97,58 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
/**
* 新增权限组⇄设备关联
*
* @param bo 权限组⇄设备关联
* @param authGroupId 权限组id
* @param acIds 门禁id
* @param eleIds 电梯id
* @param floorIds 授权楼层id
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(SisAuthGroupRefBo bo) {
SisAuthGroupRef add = MapstructUtils.convert(bo, SisAuthGroupRef.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(Long authGroupId, Collection<Long> acIds, Collection<Long> eleIds, Collection<Long> floorIds) {
// 删除权限组⇄设备关联关系
this.deleteByGroupId(authGroupId);
// 电梯设备
List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(eleIds);
log.info("开始写入授权组门禁acIds{}", acIds);
boolean check = false;
for (Long ac : acIds) {
SisAuthGroupRef groupRef = new SisAuthGroupRef();
groupRef.setAuthGroupId(authGroupId);
groupRef.setDeviceType(1L);
groupRef.setDeviceId(ac);
check = baseMapper.insert(groupRef) > 0;
Assert.isTrue(check, "写入授权组门禁失败!");
}
return flag;
log.info("写入授权组门禁完成");
log.info("开始写入授权组电梯eleIds{}", eleIds);
for (SisElevatorInfoVo ele : eleVoList) {
SisAuthGroupRef groupRef = new SisAuthGroupRef();
groupRef.setAuthGroupId(authGroupId);
groupRef.setDeviceType(2L);
groupRef.setDeviceId(ele.getElevatorId());
check = baseMapper.insert(groupRef) > 0;
Assert.isTrue(check, "写入授权组电梯失败!");
log.info("开始写入授权组电梯楼层floorIds{}", floorIds);
// 获取该电梯所在单元的楼层信息
List<RemoteFloorVo> floorVoList = remoteFloorService.queryByUnitId(ele.getUnitId());
// 该单元所有楼层id
List<Long> allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList();
// 对比找出授权楼层id
List<Long> authFloors = floorIds.stream().filter(allFloors::contains).toList();
SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo();
refBo.setAuthGroupId(authGroupId);
refBo.setElevatorId(ele.getElevatorId());
refBo.setFloorIds(authFloors);
sisElevatorFloorRefService.insertByBo(refBo);
}
log.info("写入授权组电梯完成");
return check;
}
/**
@@ -113,7 +167,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SisAuthGroupRef entity){
private void validEntityBeforeSave(SisAuthGroupRef entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -126,7 +180,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
@@ -138,9 +192,21 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
* @param groupId 权限id
*/
@Override
public List<SisAuthGroupRefVo> queryListByGroupId(Long groupId){
public List<SisAuthGroupRefVo> queryListByGroupId(Long groupId) {
LambdaQueryWrapper<SisAuthGroupRef> lqw = Wrappers.lambdaQuery();
lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId);
return baseMapper.selectVoList(lqw);
}
/**
* 通过权限组id删除授权设备列表
*
* @param groupId 权限id
*/
@Override
public Boolean deleteByGroupId(Long groupId) {
LambdaQueryWrapper<SisAuthGroupRef> lqw = Wrappers.lambdaQuery();
lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId);
return baseMapper.delete(lqw) > 0;
}
}

View File

@@ -1,8 +1,6 @@
package org.dromara.sis.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -12,12 +10,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.api.RemoteFloorService;
import org.dromara.property.api.domain.vo.RemoteFloorVo;
import org.dromara.sis.domain.bo.SisAuthGroupRefBo;
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
import org.dromara.sis.service.*;
import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAuthGroupBo;
@@ -43,13 +35,10 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
private final SisAuthGroupMapper baseMapper;
private final ISisElevatorInfoService elevatorInfoService;
private final ISisAccessControlService accessControlService;
private final ISisAuthGroupRefService sisAuthGroupRefService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
@DubboReference
private RemoteFloorService remoteFloorService;
/**
* 查询授权组
*
@@ -57,7 +46,7 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
* @return 授权组
*/
@Override
public SisAuthGroupVo queryById(Long id){
public SisAuthGroupVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@@ -109,51 +98,11 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
add.setName(bo.getName());
add.setGroupType(bo.getGroupType());
// 电梯设备
List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(bo.getEleIds());
if (CollUtil.isEmpty(eleVoList)) {
return false;
}
boolean flag = baseMapper.insert(add) > 0;
Assert.isTrue(flag, "新增授权组失败");
if (flag) {
log.info("开始写入授权组门禁acIds{}", bo.getAcIds());
boolean check;
for(Long ac : bo.getAcIds()){
SisAuthGroupRefBo groupRef = new SisAuthGroupRefBo();
groupRef.setAuthGroupId(add.getId());
groupRef.setDeviceType(1L);
groupRef.setDeviceId(ac);
check = sisAuthGroupRefService.insertByBo(groupRef);
Assert.isTrue(check, "写入授权组门禁失败!");
}
log.info("写入授权组门禁完成");
log.info("开始写入授权组电梯eleIds{}", bo.getEleIds());
for (SisElevatorInfoVo ele : eleVoList) {
SisAuthGroupRefBo groupRef = new SisAuthGroupRefBo();
groupRef.setAuthGroupId(add.getId());
groupRef.setDeviceType(2L);
groupRef.setDeviceId(ele.getElevatorId());
check = sisAuthGroupRefService.insertByBo(groupRef);
Assert.isTrue(check, "写入授权组电梯失败!");
log.info("开始写入授权组电梯楼层floorIds{}", bo.getFloorIds());
// 获取该电梯所在单元的楼层信息
List<RemoteFloorVo> floorVoList = remoteFloorService.queryByUnitId(ele.getUnitId());
// 该单元所有楼层id
List<Long> allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList();
// 对比找出授权楼层id
List<Long> authFloors = bo.getFloorIds().stream().filter(allFloors::contains).toList();
SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo();
refBo.setAuthGroupId(add.getId());
refBo.setElevatorId(ele.getElevatorId());
refBo.setFloorIds(authFloors);
sisElevatorFloorRefService.insertByBo(refBo);
}
log.info("写入授权组电梯完成");
flag = sisAuthGroupRefService.insertByBo(add.getId(), bo.getAcIds(), bo.getEleIds(), bo.getFloorIds());
}
return flag;
}
@@ -165,16 +114,24 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(SisAuthGroupBo bo) {
SisAuthGroup update = MapstructUtils.convert(bo, SisAuthGroup.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
Assert.notNull(update, "数据转换错误");
boolean flag = baseMapper.updateById(update) > 0;
Assert.isTrue(flag, "修改授权组失败");
if (flag) {
flag = sisAuthGroupRefService.insertByBo(update.getId(), bo.getAcIds(), bo.getEleIds(), bo.getFloorIds());
}
return flag;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SisAuthGroup entity){
private void validEntityBeforeSave(SisAuthGroup entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -187,7 +144,7 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;