diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java index 40e71f2e..04f08c89 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/config/timer/AuthTimer.java @@ -63,11 +63,8 @@ public class AuthTimer { /** * 每两分钟执行一次 */ - @Scheduled(cron = "0 */1 * * * ?") +// @Scheduled(cron = "0 */1 * * * ?") public void autoAuth() { - -// TenantHelper.setDynamic("000000", true); - List unAuthPerson = remoteResidentPersonService.queryUnAuthPerson(); // if (CollUtil.isNotEmpty(unAuthPerson)) { // diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java index ac1e6b26..42cf832a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupRefMapper.java @@ -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 { } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java index 64b8864c..d5097877 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java @@ -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); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java index 5c406fd6..c6cbd785 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthGroupRefService.java @@ -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 acIds, Collection eleIds, Collection floorIds); /** * 修改权限组⇄设备关联 @@ -66,12 +69,17 @@ public interface ISisAuthGroupRefService { */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** * 通过权限组id,查询授权设备列表 * * @param groupId 权限id */ List queryListByGroupId(Long groupId); + + /** + * 通过权限组id,删除授权设备列表 + * + * @param groupId 权限id + */ + Boolean deleteByGroupId(Long groupId); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java index 71ce0061..251b0826 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupRefServiceImpl.java @@ -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 acIds, Collection eleIds, Collection floorIds) { + // 删除权限组⇄设备关联关系 + this.deleteByGroupId(authGroupId); + + // 电梯设备 + List 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 floorVoList = remoteFloorService.queryByUnitId(ele.getUnitId()); + // 该单元所有楼层id + List allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList(); + // 对比找出授权楼层id + List 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 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 queryListByGroupId(Long groupId){ + public List queryListByGroupId(Long groupId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId); return baseMapper.selectVoList(lqw); } + + /** + * 通过权限组id,删除授权设备列表 + * + * @param groupId 权限id + */ + @Override + public Boolean deleteByGroupId(Long groupId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId); + return baseMapper.delete(lqw) > 0; + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java index fd997a3c..0d5b3640 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthGroupServiceImpl.java @@ -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 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 floorVoList = remoteFloorService.queryByUnitId(ele.getUnitId()); - // 该单元所有楼层id - List allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList(); - // 对比找出授权楼层id - List 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 ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0;