From 399f48f1b418c312fc32b5f46b3b1a3227434167 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Thu, 24 Jul 2025 11:20:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth-group):=20=E6=96=B0=E5=A2=9E=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=BB=84=E9=97=A8=E7=A6=81=E5=92=8C=E7=94=B5=E6=A2=AF?= =?UTF-8?q?=E5=85=B3=E8=81=94=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SisElevatorInfoController.java | 2 +- .../org/dromara/sis/domain/SisAuthGroup.java | 4 +- .../sis/domain/SisElevatorFloorRef.java | 7 +- .../dromara/sis/domain/bo/SisAuthGroupBo.java | 23 ++++-- .../sis/domain/bo/SisElevatorFloorRefBo.java | 10 ++- .../sis/domain/vo/SisElevatorFloorRefVo.java | 6 ++ .../sis/mapper/SisAuthGroupMapper.java | 4 +- .../sis/sdk/hik/calback/HikAlarmCallBack.java | 2 +- .../service/ISisElevatorFloorRefService.java | 6 +- .../service/impl/SisAuthGroupServiceImpl.java | 73 +++++++++++++++++-- .../impl/SisElevatorFloorRefServiceImpl.java | 11 +-- 11 files changed, 119 insertions(+), 29 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java index 73a4f70..b4ab49e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java @@ -128,6 +128,6 @@ public class SisElevatorInfoController extends BaseController { @GetMapping("/ref/{id}") public R> queryRef(@NotNull(message = "电梯id不能为空") @PathVariable("id") Long id) { - return R.ok(sisElevatorFloorRefService.queryByElevatorId(id)); + return R.ok(sisElevatorFloorRefService.queryByAuthGroupId(id)); } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroup.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroup.java index 15a061a..9ac999a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroup.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthGroup.java @@ -11,7 +11,7 @@ import java.io.Serial; * 授权组对象 sis_auth_group * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ @Data @EqualsAndHashCode(callSuper = true) @@ -41,6 +41,4 @@ public class SisAuthGroup extends TenantEntity { * 是否启用(0:禁用,1启用) */ private Boolean isEnable; - - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java index 88ab627..6df2a47 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java @@ -33,9 +33,14 @@ public class SisElevatorFloorRef extends TenantEntity { private Long elevatorId; /** - * 楼层层数 + * 楼层id */ private Long floorId; + /** + * 授权组id + */ + private Long authGroupId; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupBo.java index 141d348..5c5934c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthGroupBo.java @@ -9,11 +9,13 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import java.util.Collection; + /** * 授权组业务对象 sis_auth_group * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ @Data @EqualsAndHashCode(callSuper = true) @@ -23,25 +25,34 @@ public class SisAuthGroupBo extends BaseEntity { /** * 主键id */ - @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) private Long id; /** * 权限名称 */ - @NotBlank(message = "权限名称不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotBlank(message = "权限名称不能为空", groups = {AddGroup.class, EditGroup.class}) private String name; /** * 面向对象(1-单位、2-个人) */ - @NotNull(message = "面向对象(1-单位、2-个人)不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "面向对象不能为空", groups = {AddGroup.class, EditGroup.class}) private Long groupType; /** - * 是否启用(0:禁用,1启用) + * 门禁id */ - private Boolean isEnable; + private Collection acIds; + /** + * 电梯 + */ + private Collection eleIds; + + /** + * 门禁id + */ + private Collection floorIds; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorFloorRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorFloorRefBo.java index 921a38d..08352d4 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorFloorRefBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorFloorRefBo.java @@ -35,11 +35,17 @@ public class SisElevatorFloorRefBo extends BaseEntity { private Long elevatorId; /** - * 楼层层数 + * 楼层id */ - @NotEmpty(message = "楼层层数不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotEmpty(message = "楼层id不能为空", groups = { AddGroup.class, EditGroup.class }) private Collection floorIds; + /** + * 授权组id + */ + @NotNull(message = "授权组id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long authGroupId; + diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java index 7558689..8e09308 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorFloorRefVo.java @@ -43,5 +43,11 @@ public class SisElevatorFloorRefVo implements Serializable { @ExcelProperty(value = "楼层id") private Long floorId; + /** + * 授权组id + */ + @ExcelProperty(value = "授权组id") + private Long authGroupId; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupMapper.java index e049b0b..d5b94bd 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupMapper.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAuthGroupMapper.java @@ -1,5 +1,6 @@ package org.dromara.sis.mapper; +import org.apache.ibatis.annotations.Mapper; import org.dromara.sis.domain.SisAuthGroup; import org.dromara.sis.domain.vo.SisAuthGroupVo; 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 SisAuthGroupMapper 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 150de39..ed05168 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 @@ -355,7 +355,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { // 根据单元ID获取楼层信息 List floorInfo = remoteFloorService.queryByUnitId(ele.getUnitId()); // 获取电梯⇄楼层关联信息 - List floorRefList = elevatorFloorRefService.queryByElevatorId(deviceId); + List floorRefList = elevatorFloorRefService.queryByAuthGroupId(deviceId); // 获取楼层数组 List layerArray = floorInfo.stream().map(RemoteFloorVo::getId).sorted().toList(); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java index fdca3de..d8e39b1 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java @@ -67,9 +67,9 @@ public interface ISisElevatorFloorRefService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); /** - * 根据电梯id,获取电梯⇄楼层关联信息 + * 根据权限组id,获取电梯⇄楼层关联信息 * - * @param elevatorId 电梯id + * @param authGroupId 电梯id */ - List queryByElevatorId(Long elevatorId); + List queryByAuthGroupId(Long authGroupId); } 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 5a65277..6144401 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,5 +1,8 @@ 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; @@ -9,12 +12,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.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; import org.dromara.sis.domain.vo.SisAuthGroupVo; import org.dromara.sis.domain.SisAuthGroup; import org.dromara.sis.mapper.SisAuthGroupMapper; -import org.dromara.sis.service.ISisAuthGroupService; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @@ -24,7 +34,7 @@ import java.util.Collection; * 授权组Service业务层处理 * * @author lsm - * @date 2025-07-23 + * @since 2025-07-23 */ @Slf4j @RequiredArgsConstructor @@ -33,6 +43,13 @@ 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; /** * 查询授权组 * @@ -76,7 +93,6 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { lqw.orderByAsc(SisAuthGroup::getId); lqw.like(StringUtils.isNotBlank(bo.getName()), SisAuthGroup::getName, bo.getName()); lqw.eq(bo.getGroupType() != null, SisAuthGroup::getGroupType, bo.getGroupType()); - lqw.eq(bo.getIsEnable() != null, SisAuthGroup::getIsEnable, bo.getIsEnable()); return lqw; } @@ -87,12 +103,57 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService { * @return 是否新增成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisAuthGroupBo bo) { - SisAuthGroup add = MapstructUtils.convert(bo, SisAuthGroup.class); - validEntityBeforeSave(add); + SisAuthGroup add = new SisAuthGroup(); + 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) { - bo.setId(add.getId()); + log.info("开始写入授权组门禁,acIds:{}", bo.getAcIds()); + boolean check; + for(Long ac : bo.getAcIds()){ + SisAuthGroupRefBo groupRef = new SisAuthGroupRefBo(); + groupRef.setGroupId(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.setGroupId(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("写入授权组电梯完成"); } return flag; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java index 566104d..c7bd4ba 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java @@ -89,7 +89,7 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisElevatorFloorRefBo bo) { // 清除已有权限 - List list = this.queryByElevatorId(bo.getElevatorId()); + List list = this.queryByAuthGroupId(bo.getAuthGroupId()); Collection ids = list.stream().map(SisElevatorFloorRefVo::getId).toList(); baseMapper.deleteByIds(ids); @@ -97,10 +97,11 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi for (Long num : bo.getFloorIds()){ SisElevatorFloorRef add = new SisElevatorFloorRef(); add.setFloorId(num); + add.setAuthGroupId(bo.getAuthGroupId()); add.setElevatorId(bo.getElevatorId()); flag = baseMapper.insert(add) > 0; + Assert.isTrue(flag, "新增电梯⇄楼层关联关系失败"); } - Assert.isTrue(flag, "新增电梯⇄楼层关联关系失败"); return flag; } @@ -142,12 +143,12 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi /** * 根据电梯id,获取电梯⇄楼层关联信息 * - * @param elevatorId 电梯id + * @param authGroupId 电梯id */ @Override - public List queryByElevatorId(Long elevatorId) { + public List queryByAuthGroupId(Long authGroupId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(SisElevatorFloorRef::getElevatorId, elevatorId); + lqw.eq(SisElevatorFloorRef::getElevatorId, authGroupId); return baseMapper.selectVoList(lqw); } }