feat(sis): 电梯授权增加楼层选择功能

This commit is contained in:
zcxlsm 2025-07-22 11:40:00 +08:00
parent 800a2de30f
commit b95f99532f
7 changed files with 47 additions and 19 deletions

View File

@ -35,7 +35,7 @@ public class SisElevatorFloorRef extends TenantEntity {
/** /**
* 楼层层数 * 楼层层数
*/ */
private Long floorNum; private Long floorId;
} }

View File

@ -9,7 +9,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.util.Collection; import java.util.List;
/** /**
* 授权记录业务对象 sis_auth_record * 授权记录业务对象 sis_auth_record
@ -38,5 +38,5 @@ public class SisAuthRecordBo extends BaseEntity {
* 授权设备idList * 授权设备idList
*/ */
@NotEmpty(message = "授权设备idList不能为空", groups = {AddGroup.class, EditGroup.class}) @NotEmpty(message = "授权设备idList不能为空", groups = {AddGroup.class, EditGroup.class})
private Collection<Long> deviceIds; private List<List<Long>> deviceIds;
} }

View File

@ -38,7 +38,9 @@ public class SisElevatorFloorRefBo extends BaseEntity {
* 楼层层数 * 楼层层数
*/ */
@NotEmpty(message = "楼层层数不能为空", groups = { AddGroup.class, EditGroup.class }) @NotEmpty(message = "楼层层数不能为空", groups = { AddGroup.class, EditGroup.class })
private Collection<Long> floorNums; private Collection<Long> floorIds;
} }

View File

@ -38,10 +38,10 @@ public class SisElevatorFloorRefVo implements Serializable {
private Long elevatorId; private Long elevatorId;
/** /**
* 楼层层数 * 楼层id
*/ */
@ExcelProperty(value = "楼层层数") @ExcelProperty(value = "楼层id")
private Long floorNum; private Long floorId;
} }

View File

@ -25,6 +25,7 @@ import java.text.SimpleDateFormat;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import static org.dromara.sis.sdk.hik.HCNetSDK.*; import static org.dromara.sis.sdk.hik.HCNetSDK.*;
@ -356,11 +357,11 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
// 获取电梯楼层关联信息 // 获取电梯楼层关联信息
List<SisElevatorFloorRefVo> floorRefList = elevatorFloorRefService.queryByElevatorId(deviceId); List<SisElevatorFloorRefVo> floorRefList = elevatorFloorRefService.queryByElevatorId(deviceId);
// 获取楼层数组 // 获取楼层数组
List<Long> layerArray = floorInfo.stream().map(RemoteFloorVo::getFloorNumber).sorted().toList(); List<Long> layerArray = floorInfo.stream().map(RemoteFloorVo::getId).sorted().toList();
layerArray.forEach(layer -> { layerArray.forEach(layer -> {
SisElevatorFloorRefVo floorRef = floorRefList.stream() SisElevatorFloorRefVo floorRef = floorRefList.stream()
.filter(vo -> vo.getFloorNum().intValue() == layer) // 直接使用 layer .filter(vo -> Objects.equals(vo.getFloorId(), layer)) // 直接使用 layer
.findFirst() .findFirst()
.orElse(null); .orElse(null);
if (floorRef == null) { if (floorRef == null) {

View File

@ -15,10 +15,12 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.property.api.RemoteFloorService; import org.dromara.property.api.RemoteFloorService;
import org.dromara.property.api.domain.vo.RemoteFloorVo; import org.dromara.property.api.domain.vo.RemoteFloorVo;
import org.dromara.sis.domain.bo.SisAccessControlBo; import org.dromara.sis.domain.bo.SisAccessControlBo;
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
import org.dromara.sis.domain.bo.SisElevatorInfoBo; import org.dromara.sis.domain.bo.SisElevatorInfoBo;
import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.domain.vo.SisElevatorInfoVo; import org.dromara.sis.domain.vo.SisElevatorInfoVo;
import org.dromara.sis.service.ISisAccessControlService; import org.dromara.sis.service.ISisAccessControlService;
import org.dromara.sis.service.ISisElevatorFloorRefService;
import org.dromara.sis.service.ISisElevatorInfoService; import org.dromara.sis.service.ISisElevatorInfoService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAuthRecordBo; import org.dromara.sis.domain.bo.SisAuthRecordBo;
@ -46,6 +48,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
private final SisAuthRecordMapper baseMapper; private final SisAuthRecordMapper baseMapper;
private final ISisElevatorFloorRefService elevatorFloorRefService;
private final ISisAccessControlService accessControlService; private final ISisAccessControlService accessControlService;
private final ISisElevatorInfoService elevatorInfoService; private final ISisElevatorInfoService elevatorInfoService;
@ -113,11 +116,18 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
// 每次授权先删除上一次授权信息 // 每次授权先删除上一次授权信息
deleteByLibId(bo.getLibId()); deleteByLibId(bo.getLibId());
//取出需要授权的门禁id电梯id楼层id
List<Long> acIds = bo.getDeviceIds().get(0);
List<Long> eleIds = bo.getDeviceIds().get(1);
List<Long> floorIds = bo.getDeviceIds().get(2);
// 过滤不是设备的节点数据 // 过滤不是设备的节点数据
// 门禁设备 // 门禁设备
List<SisAccessControlVo> acVoList = accessControlService.queryListByIds(bo.getDeviceIds()); List<SisAccessControlVo> acVoList = accessControlService.queryListByIds(acIds);
// 电梯设备 // 电梯设备
List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(bo.getDeviceIds()); List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(eleIds);
// 楼层信息
if (CollUtil.isEmpty(acVoList) || CollUtil.isEmpty(eleVoList)) { if (CollUtil.isEmpty(acVoList) || CollUtil.isEmpty(eleVoList)) {
return false; return false;
} }
@ -139,12 +149,24 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
log.info("开始写入电梯授权记录eleIds{}", eleVoList); log.info("开始写入电梯授权记录eleIds{}", eleVoList);
for (SisElevatorInfoVo ele : eleVoList) { for (SisElevatorInfoVo ele : eleVoList) {
SisAuthRecord authRecord = new SisAuthRecord(); SisAuthRecord authRecord = new SisAuthRecord();
SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo();
authRecord.setDeviceType(2); authRecord.setDeviceType(2);
authRecord.setLibId(bo.getLibId()); authRecord.setLibId(bo.getLibId());
authRecord.setDeviceId(ele.getElevatorId()); authRecord.setDeviceId(ele.getElevatorId());
flag = baseMapper.insert(authRecord) > 0; flag = baseMapper.insert(authRecord) > 0;
Assert.isTrue(flag, "写入电梯授权记录失败!"); Assert.isTrue(flag, "写入电梯授权记录失败!");
log.info("开始写入电梯⇄楼层关联关系");
// 获取该电梯所在单元的楼层信息
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();
refBo.setElevatorId(ele.getElevatorId());
refBo.setFloorIds(authFloors);
elevatorFloorRefService.insertByBo(refBo);
} }
log.info("写入电梯授权记录完成"); log.info("写入电梯授权记录完成");
@ -224,21 +246,21 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
root.setLevel(0); root.setLevel(0);
root.setCode(0L); root.setCode(0L);
root.setParentCode(-1L); root.setParentCode(-1L);
root.setLabel("授权设备"); root.setTitle("授权设备");
// 创建门禁设备父节点 // 创建门禁设备父节点
TreeNode<Long> accessNode = new TreeNode<>(); TreeNode<Long> accessNode = new TreeNode<>();
accessNode.setLevel(1); accessNode.setLevel(1);
accessNode.setCode(1L); accessNode.setCode(1L);
accessNode.setParentCode(0L); accessNode.setParentCode(0L);
accessNode.setLabel("门禁设备"); accessNode.setTitle("门禁设备");
// 创建电梯父节点 // 创建电梯父节点
TreeNode<Long> elevatorNode = new TreeNode<>(); TreeNode<Long> elevatorNode = new TreeNode<>();
elevatorNode.setLevel(1); elevatorNode.setLevel(1);
elevatorNode.setCode(2L); elevatorNode.setCode(2L);
elevatorNode.setParentCode(0L); elevatorNode.setParentCode(0L);
elevatorNode.setLabel("电梯设备"); elevatorNode.setTitle("电梯设备");
List<SisAccessControlVo> acVoList = accessControlService.queryList(new SisAccessControlBo()); List<SisAccessControlVo> acVoList = accessControlService.queryList(new SisAccessControlBo());
@ -250,7 +272,8 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
node.setLevel(2); node.setLevel(2);
node.setCode(item.getId()); node.setCode(item.getId());
node.setParentCode(1L); node.setParentCode(1L);
node.setLabel(item.getAccessName()); node.setLabel("accessControl");
node.setTitle(item.getAccessName());
return node; return node;
}).toList(); }).toList();
@ -260,8 +283,9 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
TreeNode<Long> eleNode = new TreeNode<>(); TreeNode<Long> eleNode = new TreeNode<>();
eleNode.setLevel(2); eleNode.setLevel(2);
eleNode.setParentCode(2L); eleNode.setParentCode(2L);
eleNode.setLabel("elevator");
eleNode.setCode(item.getElevatorId()); eleNode.setCode(item.getElevatorId());
eleNode.setLabel(item.getElevatorName()); eleNode.setTitle(item.getElevatorName());
// 楼层节点 // 楼层节点
List<TreeNode<Long>> floorTree = new ArrayList<>(); List<TreeNode<Long>> floorTree = new ArrayList<>();
@ -270,8 +294,9 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
floorInfoList.forEach(floor -> { floorInfoList.forEach(floor -> {
TreeNode<Long> floorNode = new TreeNode<>(); TreeNode<Long> floorNode = new TreeNode<>();
floorNode.setLevel(3); floorNode.setLevel(3);
floorNode.setLabel("floor");
floorNode.setCode(floor.getId()); floorNode.setCode(floor.getId());
floorNode.setLabel(floor.getFloorName()); floorNode.setTitle(floor.getFloorName());
floorNode.setParentCode(item.getElevatorId()); floorNode.setParentCode(item.getElevatorId());
floorTree.add(floorNode); floorTree.add(floorNode);
}); });

View File

@ -94,9 +94,9 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
baseMapper.deleteByIds(ids); baseMapper.deleteByIds(ids);
boolean flag = false; boolean flag = false;
for (Long num : bo.getFloorNums()){ for (Long num : bo.getFloorIds()){
SisElevatorFloorRef add = new SisElevatorFloorRef(); SisElevatorFloorRef add = new SisElevatorFloorRef();
add.setFloorNum(num); add.setFloorId(num);
add.setElevatorId(bo.getElevatorId()); add.setElevatorId(bo.getElevatorId());
flag = baseMapper.insert(add) > 0; flag = baseMapper.insert(add) > 0;
} }