diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java index 1611e080..3caf3a45 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.domain.TreeNode; +import org.dromara.sis.domain.SisAuthRecord; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -73,7 +75,7 @@ public class SisAuthRecordController extends BaseController { * 新增授权记录 */ @SaCheckPermission("sis:authRecord:add") - @Log(title = "授权记录", businessType = BusinessType.INSERT) + @Log(title = "人员库授权", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody SisAuthRecordBo bo) { @@ -103,4 +105,24 @@ public class SisAuthRecordController extends BaseController { @PathVariable("ids") Long[] ids) { return toAjax(sisAuthRecordService.deleteWithValidByIds(List.of(ids), true)); } + + /** + * 查询库id授权的设备 + * + * @param libId 人像库id + */ + @GetMapping("/authDevice/{libId}") + public R> queryAuthDevice(@PathVariable("libId") String libId) { + return R.ok(sisAuthRecordService.queryAuthDevice(libId)); + } + + /** + * 查询所有可授权设备 + * + * @return List> + */ + @GetMapping("/authDevice/tree") + public R>> tree() { + return R.ok(sisAuthRecordService.authDeviceTree()); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/AuthLibBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/AuthLibBo.java deleted file mode 100644 index a8373f3b..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/AuthLibBo.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.dromara.sis.domain.bo; - -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -import java.util.List; - -/** - * 人像库授权 - * - * @author lxj - */ -@Data -public class AuthLibBo { - - @NotNull(message = "人像库id不能为空") - private Long libId; - - @NotNull(message = "设备列表不能为空") - private List deviceIds; - -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SingleAuthRecordBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SingleAuthRecordBo.java deleted file mode 100644 index 9c71ee8b..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SingleAuthRecordBo.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.dromara.sis.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.sis.domain.SisAuthRecord; - -import java.util.List; - -/** - * 授权记录业务对象 sis_auth_record - * - * @author lxj - * @since 2025-06-28 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SisAuthRecord.class, reverseConvertGenerate = false) -public class SingleAuthRecordBo extends BaseEntity { - - - /** - * 图像库Id - */ - @NotNull(message = "图像库Id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long libId; - - /** - * 图像id列表 - */ - @NotNull(message = "图像id列表不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long imgId; - - /** - * 门禁id列表 - */ - @NotNull(message = "门禁id列表能为空", groups = {AddGroup.class, EditGroup.class}) - private List acIds; - -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java index 13fd3d4e..555c120f 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java @@ -35,14 +35,8 @@ public class SisAuthRecordBo extends BaseEntity { private Long libId; /** - * 门禁idList + * 授权设备idList */ - @NotEmpty(message = "门禁idList不能为空", groups = {AddGroup.class, EditGroup.class}) - private Collection acIdList; - - /** - * 电梯idList - */ - @NotEmpty(message = "电梯idList不能为空", groups = {AddGroup.class, EditGroup.class}) - private Collection eleIdList; + @NotEmpty(message = "授权设备idList不能为空", groups = {AddGroup.class, EditGroup.class}) + private Collection deviceIds; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java index b47a346c..57c24ee3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAuthRecordService.java @@ -1,5 +1,7 @@ package org.dromara.sis.service; +import org.dromara.common.core.domain.TreeNode; +import org.dromara.sis.domain.SisAuthRecord; import org.dromara.sis.domain.vo.SisAuthRecordVo; import org.dromara.sis.domain.bo.SisAuthRecordBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -65,4 +67,26 @@ public interface ISisAuthRecordService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询库id授权的设备 + * + * @param libId 人像库id + * @return List + */ + List queryAuthDevice(String libId); + + /** + * 根据人像库id删除授权记录 + * + * @param libId 人像库id + */ + Boolean deleteByLibId(Long libId); + + /** + * 查询所有可授权设备树 + * + * @return List> + */ + List> authDeviceTree(); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java index 657bc1df..c1ab87f9 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java @@ -71,4 +71,12 @@ public interface ISisElevatorInfoService { * @return 返回电梯列表 */ List queryAll(); + + /** + * 根据查询列表 + * + * @param ids 电梯id + * @return 列表 + */ + List queryListByIds(Collection ids); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java index e9534c49..f9f49304 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java @@ -1,6 +1,8 @@ package org.dromara.sis.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; +import org.dromara.common.core.domain.TreeNode; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -9,6 +11,12 @@ 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.sis.domain.bo.SisAccessControlBo; +import org.dromara.sis.domain.bo.SisElevatorInfoBo; +import org.dromara.sis.domain.vo.SisAccessControlVo; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.service.ISisAccessControlService; +import org.dromara.sis.service.ISisElevatorInfoService; import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisAuthRecordBo; import org.dromara.sis.domain.vo.SisAuthRecordVo; @@ -34,6 +42,9 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { private final SisAuthRecordMapper baseMapper; + private final ISisAccessControlService accessControlService; + private final ISisElevatorInfoService elevatorInfoService; + /** * 查询授权记录 * @@ -88,27 +99,44 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisAuthRecordBo bo) { - boolean flag = false; - log.info("开始写入门禁授权记录,acIds:{}", bo.getAcIdList()); - for (Long acId : bo.getAcIdList()) { - SisAuthRecord add = MapstructUtils.convert(bo, SisAuthRecord.class); - Assert.notNull(add, "数据处理失败"); + if (CollUtil.isEmpty(bo.getDeviceIds())) { + return false; + } - add.setDeviceType(1); - add.setDeviceId(acId); - flag = baseMapper.insert(add) > 0; + // 每次授权先删除上一次授权信息 + deleteByLibId(bo.getLibId()); + + // 过滤不是设备的节点数据 + // 门禁设备 + List acVoList = accessControlService.queryListByIds(bo.getDeviceIds()); + // 电梯设备 + List eleVoList = elevatorInfoService.queryListByIds(bo.getDeviceIds()); + if (CollUtil.isEmpty(acVoList) || CollUtil.isEmpty(eleVoList)) { + return false; + } + + // 批量写入授权数据 + boolean flag = false; + log.info("开始写入门禁授权记录,acIds:{}", acVoList); + for (SisAccessControlVo ac : acVoList) { + SisAuthRecord authRecord = new SisAuthRecord(); + + authRecord.setDeviceType(1); + authRecord.setDeviceId(ac.getId()); + authRecord.setLibId(bo.getLibId()); + flag = baseMapper.insert(authRecord) > 0; Assert.isTrue(flag, "写入门禁授权记录失败!"); } log.info("写入门禁授权记录完成"); - log.info("开始写入电梯授权记录,eleIds:{}", bo.getEleIdList()); - for (Long ele : bo.getEleIdList()) { - SisAuthRecord add = MapstructUtils.convert(bo, SisAuthRecord.class); - Assert.notNull(add, "数据处理失败"); + log.info("开始写入电梯授权记录,eleIds:{}", eleVoList); + for (SisElevatorInfoVo ele : eleVoList) { + SisAuthRecord authRecord = new SisAuthRecord(); - add.setDeviceType(2); - add.setDeviceId(ele); - flag = baseMapper.insert(add) > 0; + authRecord.setDeviceType(2); + authRecord.setLibId(bo.getLibId()); + authRecord.setDeviceId(ele.getElevatorId()); + flag = baseMapper.insert(authRecord) > 0; Assert.isTrue(flag, "写入电梯授权记录失败!"); } log.info("写入电梯授权记录完成"); @@ -150,4 +178,91 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 查询库id授权的设备 + * + * @param libId 人像库id + * @return List + */ + @Override + public List queryAuthDevice(String libId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAuthRecord::getLibId, libId); + return baseMapper.selectList(lqw); + } + + /** + * 根据人像库id删除授权记录 + * + * @param libId 人像库id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteByLibId(Long libId){ + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAuthRecord::getLibId, libId); + return baseMapper.delete(lqw) > 0; + } + + /** + * 查询所有可授权设备树 + * + * @return List> + */ + @Override + public List> authDeviceTree(){ + // 暂时将所有数据放入写死的根节点中 + TreeNode root = new TreeNode<>(); + root.setLevel(0); + root.setCode(0L); + root.setParentCode(-1L); + root.setLabel("授权设备"); + + // 创建门禁设备父节点 + TreeNode accessNode = new TreeNode<>(); + accessNode.setLevel(1); + accessNode.setCode(1L); + accessNode.setParentCode(0L); + accessNode.setLabel("门禁设备"); + + // 创建电梯父节点 + TreeNode elevatorNode = new TreeNode<>(); + elevatorNode.setLevel(1); + elevatorNode.setCode(2L); + elevatorNode.setParentCode(0L); + elevatorNode.setLabel("电梯设备"); + + + List acVoList = accessControlService.queryList(new SisAccessControlBo()); + List eleVoList = elevatorInfoService.queryList(new SisElevatorInfoBo()); + + + + List> acChildrenList = acVoList.stream().map(item -> { + TreeNode node = new TreeNode<>(); + node.setLevel(2); + node.setCode(item.getId()); + node.setParentCode(1L); + node.setLabel(item.getAccessName()); + return node; + }).toList(); + + List> eleChildrenList = eleVoList.stream().map(item -> { + TreeNode node = new TreeNode<>(); + node.setLevel(2); + node.setCode(item.getElevatorId()); + node.setParentCode(2L); + node.setLabel(item.getElevatorName()); + return node; + }).toList(); + + // 将子节点列表分别添加到对应的父节点 + accessNode.setChildren(acChildrenList); + elevatorNode.setChildren(eleChildrenList); + + // 最后将两个父节点添加到根节点 + root.setChildren(List.of(accessNode, elevatorNode)); + return List.of(root); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java index 139b88ee..78363c16 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java @@ -253,4 +253,15 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { public List queryAll() { return baseMapper.selectVoList(); } + + /** + * 根据查询列表 + * + * @param ids 电梯id + * @return 列表 + */ + @Override + public List queryListByIds(Collection ids){ + return baseMapper.selectVoByIds(ids); + } }