Merge branch 'master' of http://47.109.37.87:3000/by2025/SmartParks
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
# Conflicts: # ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java # ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java
This commit is contained in:
@@ -118,6 +118,11 @@
|
||||
<version>2.4.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.rocketmq</groupId>
|
||||
<artifactId>rocketmq-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.hik</groupId>
|
||||
<artifactId>examples</artifactId>
|
||||
|
@@ -0,0 +1,60 @@
|
||||
package org.dromara.sis.consumer;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.common.message.MessageExt;
|
||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
|
||||
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
|
||||
import org.dromara.sis.sdk.hik.HikApiService;
|
||||
import org.dromara.sis.service.ISisElevatorFloorRefService;
|
||||
import org.dromara.sis.service.ISisElevatorInfoService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author lsm
|
||||
* @apiNote CleanLiftAuthRocketConsumer
|
||||
* @since 2025/8/5
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@RocketMQMessageListener(topic = "lift-topic", consumerGroup = "lift-consumer-group")
|
||||
public class CleanLiftAuthRocketConsumer implements RocketMQListener<MessageExt> {
|
||||
|
||||
private final ISisElevatorInfoService sisElevatorInfoService;
|
||||
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
|
||||
|
||||
@Override
|
||||
public void onMessage(MessageExt ext) {
|
||||
log.info("【消费者】接收消息:消息体 => {}", new String(ext.getBody()));
|
||||
|
||||
Long deviceId = Long.parseLong(ext.getUserProperty("deviceId"));
|
||||
Long groupId = Long.parseLong(ext.getUserProperty("groupId"));
|
||||
Long deviceFloorId = Long.parseLong(ext.getUserProperty("deviceFloorId"));
|
||||
|
||||
// 获取当前电梯信息
|
||||
SisElevatorInfoVo ele = sisElevatorInfoService.queryById(deviceId);
|
||||
|
||||
// 获取权限组下电梯⇄楼层关联信息
|
||||
List<SisElevatorFloorRefVo> groupRef = sisElevatorFloorRefService.queryByAuthGroupId(groupId);
|
||||
|
||||
// 取出当前电梯的楼层授权信息
|
||||
List<SisElevatorFloorRefVo> eleRef = groupRef.stream().filter(o -> Objects.equals(o.getElevatorId(), deviceId)).toList();
|
||||
|
||||
for (SisElevatorFloorRefVo ref : eleRef){
|
||||
if (ref.getOutChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){
|
||||
HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getOutChannel().intValue(), 3);
|
||||
}
|
||||
|
||||
if (ref.getInChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){
|
||||
HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getInChannel().intValue(), 3);
|
||||
}
|
||||
}
|
||||
log.info("梯控清除权限完成");
|
||||
}
|
||||
}
|
@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.sis.domain.bo.SisAccessControlBo;
|
||||
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
||||
import org.dromara.sis.service.ISisAccessControlService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@@ -126,4 +127,16 @@ public class SisAccessControlController extends BaseController {
|
||||
return R.ok(sisAccessControlService.syncE8());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 远程开门
|
||||
*
|
||||
* @param req 远程开门参数
|
||||
*/
|
||||
@PostMapping("/e8/remoteOpenDoor")
|
||||
public R<Boolean> remoteOpenDoor(@RequestBody RemoteOpenDoorReq req) {
|
||||
return R.ok(sisAccessControlService.remoteOpenDoor(req));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -6,9 +6,6 @@ import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
|
||||
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
|
||||
import org.dromara.sis.service.ISisElevatorFloorRefService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
@@ -40,8 +37,6 @@ public class SisElevatorInfoController extends BaseController {
|
||||
|
||||
private final ISisElevatorInfoService sisElevatorInfoService;
|
||||
|
||||
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
|
||||
|
||||
/**
|
||||
* 查询电梯基本信息列表
|
||||
*/
|
||||
@@ -108,26 +103,4 @@ public class SisElevatorInfoController extends BaseController {
|
||||
@PathVariable("elevatorIds") Long[] elevatorIds) {
|
||||
return toAjax(sisElevatorInfoService.deleteWithValidByIds(List.of(elevatorIds), true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增电梯⇄楼层关联
|
||||
*
|
||||
* @param bo 电梯⇄楼层关联
|
||||
*/
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/ref/add")
|
||||
public R<Void> addRef(@Validated(AddGroup.class) @RequestBody SisElevatorFloorRefBo bo) {
|
||||
return toAjax(sisElevatorFloorRefService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询电梯⇄楼层关联
|
||||
*
|
||||
* @param id 电梯id
|
||||
*/
|
||||
@GetMapping("/ref/{id}")
|
||||
public R<List<SisElevatorFloorRefVo>> queryRef(@NotNull(message = "电梯id不能为空")
|
||||
@PathVariable("id") Long id) {
|
||||
return R.ok(sisElevatorFloorRefService.queryByAuthGroupId(id));
|
||||
}
|
||||
}
|
||||
|
@@ -45,5 +45,9 @@ public class SisDeviceBindRef extends TenantEntity {
|
||||
*/
|
||||
private Integer controlType;
|
||||
|
||||
/**
|
||||
* 楼层id
|
||||
*/
|
||||
private Long deviceFloorId;
|
||||
|
||||
}
|
||||
|
@@ -80,4 +80,9 @@ public class SisDeviceManage extends BaseEntity {
|
||||
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 楼层id
|
||||
*/
|
||||
private Long floorId;
|
||||
|
||||
}
|
||||
|
@@ -46,5 +46,8 @@ public class SisDeviceBindRefBo extends BaseEntity {
|
||||
@NotNull(message = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Integer controlType;
|
||||
|
||||
|
||||
/**
|
||||
* 楼层id
|
||||
*/
|
||||
private Long deviceFloorId;
|
||||
}
|
||||
|
@@ -62,6 +62,12 @@ public class SisDeviceManageBo extends BaseEntity {
|
||||
@NotBlank(message = "设备密码不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String devicePwd;
|
||||
|
||||
/**
|
||||
* 楼层id
|
||||
*/
|
||||
@NotNull(message = "楼层id不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long floorId;
|
||||
|
||||
/**
|
||||
* 设备类型
|
||||
*/
|
||||
|
@@ -10,6 +10,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@@ -18,7 +19,7 @@ import java.util.Date;
|
||||
* 授权组视图对象 sis_auth_group
|
||||
*
|
||||
* @author lsm
|
||||
* @date 2025-07-23
|
||||
* @since 2025-07-23
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@@ -52,5 +53,19 @@ public class SisAuthGroupVo implements Serializable {
|
||||
@ExcelProperty(value = "是否启用(0:禁用,1启用)")
|
||||
private Boolean isEnable;
|
||||
|
||||
/**
|
||||
* 门禁id
|
||||
*/
|
||||
private Collection<Long> acIds;
|
||||
|
||||
/**
|
||||
* 电梯
|
||||
*/
|
||||
private Collection<Long> eleIds;
|
||||
|
||||
/**
|
||||
* 门禁id
|
||||
*/
|
||||
private Collection<Long> floorIds;
|
||||
|
||||
}
|
||||
|
@@ -53,6 +53,9 @@ public class SisDeviceBindRefVo implements Serializable {
|
||||
@ExcelProperty(value = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控")
|
||||
private Integer controlType;
|
||||
|
||||
|
||||
/**
|
||||
* 楼层id
|
||||
*/
|
||||
private Long deviceFloorId;
|
||||
|
||||
}
|
||||
|
@@ -77,6 +77,11 @@ public class SisDeviceManageVo implements Serializable {
|
||||
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "deviceType", other = "sis_ipc_device_type")
|
||||
private Integer deviceTypeName;
|
||||
|
||||
/**
|
||||
* 楼层id
|
||||
*/
|
||||
private Long floorId;
|
||||
|
||||
/**
|
||||
* 设备厂商编号
|
||||
*/
|
||||
@@ -90,5 +95,4 @@ public class SisDeviceManageVo implements Serializable {
|
||||
private Long groupId;
|
||||
|
||||
private String groupName;
|
||||
|
||||
}
|
||||
|
@@ -50,5 +50,14 @@ public class SisElevatorFloorRefVo implements Serializable {
|
||||
@ExcelProperty(value = "授权组id")
|
||||
private Long authGroupId;
|
||||
|
||||
/**
|
||||
* 内部通道号
|
||||
*/
|
||||
private Long inChannel;
|
||||
|
||||
/**
|
||||
* 外部通道号
|
||||
*/
|
||||
private Long outChannel;
|
||||
|
||||
}
|
||||
|
@@ -1,35 +0,0 @@
|
||||
//package org.dromara.sis.dubbo;
|
||||
//
|
||||
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
//import lombok.RequiredArgsConstructor;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.apache.dubbo.config.annotation.DubboService;
|
||||
//import org.dromara.sis.api.RemotePrecautionary;
|
||||
//import org.dromara.sis.api.domain.RemotePrecautionaryVo;
|
||||
//
|
||||
//import java.util.List;
|
||||
//import java.util.Map;
|
||||
//import java.util.stream.Stream;
|
||||
//
|
||||
//@Slf4j
|
||||
//@DubboService
|
||||
//@RequiredArgsConstructor
|
||||
//public class RemotePrecautionaryImpl implements RemotePrecautionary {
|
||||
// private final PrecautionaryMapper precautionaryMapper;
|
||||
//
|
||||
// @Override
|
||||
// public List<RemotePrecautionaryVo> getList() {
|
||||
// Page<Precautionary> Page = new Page<>(1, 10);
|
||||
// QueryWrapper<Precautionary> wrapper = new QueryWrapper<>();
|
||||
// wrapper.orderByAsc("time");
|
||||
// return precautionaryMapper.selectVoPage(Page, wrapper);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Map count() {
|
||||
// List<Precautionary> precautionaries = precautionaryMapper.selectList();
|
||||
// Stream<Long> longStream = precautionaries.stream().map(Precautionary::getType);
|
||||
// return Map.of();
|
||||
// }
|
||||
//}
|
@@ -1,5 +1,6 @@
|
||||
package org.dromara.sis.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.sis.domain.SisAccessControl;
|
||||
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||
@@ -8,8 +9,9 @@ import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||
* 门禁设备Mapper接口
|
||||
*
|
||||
* @author lxj
|
||||
* @date 2025-06-25
|
||||
* @since 2025-06-25
|
||||
*/
|
||||
@Mapper
|
||||
public interface SisAccessControlMapper extends BaseMapperPlus<SisAccessControl, SisAccessControlVo> {
|
||||
|
||||
SisAccessControlVo queryById(Long id);
|
||||
|
@@ -0,0 +1,39 @@
|
||||
package org.dromara.sis.producer;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.common.message.Message;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author lsm
|
||||
* @apiNote CleanLiftAuthRocketProducer
|
||||
* @since 2025/8/5
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class CleanLiftAuthRocketProducer {
|
||||
|
||||
@Resource
|
||||
private RocketMQTemplate rocketMQTemplate;
|
||||
|
||||
public void sendMessage(Long deviceId, Long groupId, Long deviceFloorId, String info, Integer lay) {
|
||||
// 发送延迟消息
|
||||
// RocketMQ预定义了一些延迟等级,每个等级对应不同的延迟时间范围。这些等级从1到18,分别对应1s、5s、10s、30s、1m、2m、3m、4m、5m、6m、7m、8m、9m、10m、20m、30m、1h、2h的延迟时间。
|
||||
org.apache.rocketmq.common.message.Message msg = new Message("lift-topic", "lift-tag", info.getBytes());
|
||||
msg.putUserProperty("deviceId", deviceId.toString());
|
||||
msg.putUserProperty("groupId", groupId.toString());
|
||||
msg.putUserProperty("deviceFloorId", deviceFloorId.toString());
|
||||
msg.setDelayTimeLevel(lay);
|
||||
try {
|
||||
rocketMQTemplate.getProducer().send(msg);
|
||||
log.info("发送RocketMQ消息成功");
|
||||
} catch (Exception e) {
|
||||
log.error("发送RocketMQ消息失败", e);
|
||||
}
|
||||
}
|
||||
}
|
@@ -2,6 +2,7 @@ package org.dromara.sis.sdk.e8.domain.accessControl.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -27,6 +28,11 @@ public class RemoteOpenDoorReq {
|
||||
*/
|
||||
private Long operatorId;
|
||||
|
||||
/**
|
||||
* 门禁IDs
|
||||
*/
|
||||
private Collection<Long> acIds;
|
||||
|
||||
/**
|
||||
* 门操作数据
|
||||
*/
|
||||
|
@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.sis.domain.bo.SisAccessControlBo;
|
||||
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -78,7 +79,7 @@ public interface ISisAccessControlService {
|
||||
/**
|
||||
* 查询门禁树
|
||||
*
|
||||
* @return
|
||||
* @return 树
|
||||
*/
|
||||
List<TreeNode<Long>> queryAcTree();
|
||||
|
||||
@@ -89,4 +90,11 @@ public interface ISisAccessControlService {
|
||||
*/
|
||||
Boolean syncE8();
|
||||
|
||||
/**
|
||||
* 远程开门
|
||||
*
|
||||
* @param req 远程开门参数
|
||||
*/
|
||||
Boolean remoteOpenDoor(RemoteOpenDoorReq req);
|
||||
|
||||
}
|
||||
|
@@ -79,7 +79,7 @@ public interface ISisAuthGroupRefService {
|
||||
/**
|
||||
* 通过权限组id,删除授权设备列表
|
||||
*
|
||||
* @param groupId 权限id
|
||||
* @param groupIds 权限id
|
||||
*/
|
||||
Boolean deleteByGroupId(Long groupId);
|
||||
Boolean deleteByGroupId(Collection<Long> groupIds);
|
||||
}
|
||||
|
@@ -109,9 +109,17 @@ public interface ISisAuthRecordService {
|
||||
/**
|
||||
* 批量删除授权记录
|
||||
*
|
||||
* @param ids 入驻员工ids
|
||||
* @param ids 入驻员工ids
|
||||
* @param e8Ids e8id
|
||||
*/
|
||||
Boolean deleteByPersonIds(Collection<Long> ids, Collection<Long> e8Ids);
|
||||
|
||||
/**
|
||||
* 根据权限组ID,查询授权记录
|
||||
*
|
||||
* @param groupIds 权限组ID
|
||||
*/
|
||||
Boolean queryByGroupIds(Collection<Long> groupIds);
|
||||
|
||||
|
||||
}
|
||||
|
@@ -75,4 +75,12 @@ public interface ISisElevatorFloorChannelRefService {
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
Boolean batchInsert(Long elevatorId, Collection<SisElevatorFloorChannelRef> bo);
|
||||
|
||||
|
||||
/**
|
||||
* 通过楼层id,查询通道信息
|
||||
*
|
||||
* @param floorIds 楼层ids
|
||||
*/
|
||||
List<SisElevatorFloorChannelRefVo> queryByFloorIds(Collection<Long> floorIds);
|
||||
}
|
||||
|
@@ -74,6 +74,13 @@ public interface ISisElevatorFloorRefService {
|
||||
*/
|
||||
List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId);
|
||||
|
||||
/**
|
||||
* 根据权限组id,删除电梯⇄楼层关联信息
|
||||
*
|
||||
* @param authGroupIds 权限组ids
|
||||
*/
|
||||
Boolean deleteByAuthGroupId(Collection<Long> authGroupIds);
|
||||
|
||||
/**
|
||||
* 批量更新电梯⇄楼层通道关联信息
|
||||
*
|
||||
|
@@ -26,6 +26,7 @@ import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||
import org.dromara.sis.domain.vo.SisDeviceManageVo;
|
||||
import org.dromara.sis.mapper.SisAccessControlMapper;
|
||||
import org.dromara.sis.sdk.e8.E8PlatformApi;
|
||||
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
||||
import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes;
|
||||
import org.dromara.sis.service.ISisAcDeviceRefService;
|
||||
import org.dromara.sis.service.ISisAccessControlService;
|
||||
@@ -149,6 +150,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
|
||||
SisDeviceBindRef sisDeviceBindRef = new SisDeviceBindRef();
|
||||
sisDeviceBindRef.setDeviceId(sisDeviceManageVo.getId());
|
||||
sisDeviceBindRef.setDeviceIp(sisDeviceManageVo.getDeviceIp());
|
||||
sisDeviceBindRef.setDeviceFloorId(sisDeviceManageVo.getFloorId());
|
||||
sisDeviceBindRef.setBindId(bo.getId());
|
||||
sisDeviceBindRef.setControlType(ControlTypeEnum.ACCESS_CONTROL.getCode());
|
||||
// 删除绑定关系
|
||||
@@ -281,4 +283,24 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
|
||||
}
|
||||
return baseMapper.insertBatch(sisACBos);
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程开门
|
||||
*
|
||||
* @param req 远程开门参数
|
||||
*/
|
||||
@Override
|
||||
public Boolean remoteOpenDoor(RemoteOpenDoorReq req) {
|
||||
List<SisAccessControlVo> vo = baseMapper.selectVoByIds(req.getAcIds());
|
||||
|
||||
List<RemoteOpenDoorReq.ControlData> list = new ArrayList<>();
|
||||
for (SisAccessControlVo item : vo) {
|
||||
RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData();
|
||||
data.setDoorId(Long.parseLong(item.getOutDoorCode()));
|
||||
data.setDeviceId(Long.parseLong(item.getOutCode()));
|
||||
list.add(data);
|
||||
}
|
||||
req.setControlList(list);
|
||||
return e8PlatformApi.remoteOpenDoor(req);
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +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;
|
||||
@@ -32,7 +33,7 @@ import java.util.Collection;
|
||||
* 权限组⇄设备关联Service业务层处理
|
||||
*
|
||||
* @author lsm
|
||||
* @date 2025-07-23
|
||||
* @since 2025-07-23
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@@ -107,10 +108,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
|
||||
@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);
|
||||
this.deleteByGroupId(List.of(authGroupId));
|
||||
|
||||
log.info("开始写入授权组门禁,acIds:{}", acIds);
|
||||
boolean check = false;
|
||||
@@ -124,30 +122,34 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
|
||||
}
|
||||
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, "写入授权组电梯失败!");
|
||||
if (CollUtil.isNotEmpty(eleIds)) {
|
||||
// 电梯设备
|
||||
List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(eleIds);
|
||||
|
||||
log.info("开始写入授权组电梯楼层,floorIds:{}", floorIds);
|
||||
// 获取该电梯所在单元的楼层信息
|
||||
List<RemoteFloorVo> floorVoList = remoteFloorService.queryByBuildingId(ele.getBuildingId());
|
||||
// 该单元所有楼层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("开始写入授权组电梯,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.queryByBuildingId(ele.getBuildingId());
|
||||
// 该单元所有楼层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("写入授权组电梯完成");
|
||||
}
|
||||
log.info("写入授权组电梯完成");
|
||||
|
||||
return check;
|
||||
}
|
||||
|
||||
@@ -201,12 +203,13 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
|
||||
/**
|
||||
* 通过权限组id,删除授权设备列表
|
||||
*
|
||||
* @param groupId 权限id
|
||||
* @param groupIds 权限id
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteByGroupId(Long groupId) {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteByGroupId(Collection<Long> groupIds) {
|
||||
LambdaQueryWrapper<SisAuthGroupRef> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId);
|
||||
lqw.in(SisAuthGroupRef::getAuthGroupId, groupIds);
|
||||
return baseMapper.delete(lqw) > 0;
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,9 @@ 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.SisElevatorFloorRef;
|
||||
import org.dromara.sis.domain.vo.SisAuthGroupRefVo;
|
||||
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
|
||||
import org.dromara.sis.service.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.sis.domain.bo.SisAuthGroupBo;
|
||||
@@ -35,8 +38,9 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
|
||||
|
||||
private final SisAuthGroupMapper baseMapper;
|
||||
|
||||
private final ISisAuthRecordService sisAuthRecordService;
|
||||
private final ISisAuthGroupRefService sisAuthGroupRefService;
|
||||
|
||||
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
|
||||
|
||||
|
||||
/**
|
||||
@@ -47,7 +51,21 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
|
||||
*/
|
||||
@Override
|
||||
public SisAuthGroupVo queryById(Long id) {
|
||||
return baseMapper.selectVoById(id);
|
||||
|
||||
// 门禁设备
|
||||
List<SisAuthGroupRefVo> groupRefs = sisAuthGroupRefService.queryListByGroupId(id);
|
||||
Collection<Long> acIds = groupRefs.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList();
|
||||
|
||||
// 楼层
|
||||
List<SisElevatorFloorRefVo> floorRefs = sisElevatorFloorRefService.queryByAuthGroupId(id);
|
||||
Collection<Long> floorIds = floorRefs.stream().map(SisElevatorFloorRefVo::getFloorId).toList();
|
||||
|
||||
SisAuthGroupVo vo = baseMapper.selectVoById(id);
|
||||
|
||||
vo.setAcIds(acIds);
|
||||
vo.setFloorIds(floorIds);
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -122,6 +140,7 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
|
||||
Assert.isTrue(flag, "修改授权组失败");
|
||||
|
||||
if (flag) {
|
||||
assert update != null;
|
||||
flag = sisAuthGroupRefService.insertByBo(update.getId(), bo.getAcIds(), bo.getEleIds(), bo.getFloorIds());
|
||||
}
|
||||
|
||||
@@ -143,10 +162,25 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if (isValid) {
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
boolean auth = sisAuthRecordService.queryByGroupIds(ids);
|
||||
Assert.isTrue(!auth, "授权组已分配");
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
|
||||
boolean flag = baseMapper.deleteByIds(ids) > 0;
|
||||
Assert.isTrue(flag, "删除授权组失败");
|
||||
|
||||
if (flag) {
|
||||
// 删除授权组⇄授权设备关联表
|
||||
Boolean ref = sisAuthGroupRefService.deleteByGroupId(ids);
|
||||
Assert.isTrue(ref, "删除授权组⇄授权设备失败");
|
||||
|
||||
// 删除授权组⇄电梯⇄楼层
|
||||
Boolean floor = sisElevatorFloorRefService.deleteByAuthGroupId(ids);
|
||||
Assert.isTrue(floor, "删除授权组⇄电梯⇄楼层失败");
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
|
@@ -320,6 +320,10 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
|
||||
*/
|
||||
@Override
|
||||
public SisAuthRecordVo checkAuth(Long personId) {
|
||||
List<SisAuthRecordVo> authVoList = baseMapper.checkAuth(personId);
|
||||
if (CollUtil.isEmpty(authVoList)) {
|
||||
return null;
|
||||
}
|
||||
return baseMapper.checkAuth(personId).get(0);
|
||||
}
|
||||
|
||||
@@ -371,4 +375,17 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据权限组ID,查询授权记录
|
||||
*
|
||||
* @param groupIds 权限组IDs
|
||||
*/
|
||||
@Override
|
||||
public Boolean queryByGroupIds(Collection<Long> groupIds){
|
||||
LambdaQueryWrapper<SisAuthRecord> lqw = Wrappers.lambdaQuery();
|
||||
lqw.in(SisAuthRecord::getGroupId, groupIds);
|
||||
List<SisAuthRecordVo> authVoList = baseMapper.selectVoList(lqw);
|
||||
return CollUtil.isNotEmpty(authVoList);
|
||||
}
|
||||
}
|
||||
|
@@ -50,7 +50,11 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService {
|
||||
*/
|
||||
@Override
|
||||
public SisDeviceManageVo queryById(Long id) {
|
||||
return baseMapper.selectVoById(id);
|
||||
SisDeviceManageVo deviceManageVo = baseMapper.selectVoById(id);
|
||||
|
||||
log.info("查询设备管理:{}", deviceManageVo);
|
||||
|
||||
return deviceManageVo;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -2,7 +2,6 @@ package org.dromara.sis.service.impl;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
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;
|
||||
@@ -26,7 +25,7 @@ import java.util.Collection;
|
||||
* 电梯⇄楼层⇄通道关联Service业务层处理
|
||||
*
|
||||
* @author lsm
|
||||
* @date 2025-08-04
|
||||
* @since 2025-08-04
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@@ -155,4 +154,16 @@ public class SisElevatorFloorChannelRefServiceImpl implements ISisElevatorFloorC
|
||||
Assert.isTrue(flag, "批量增加电梯⇄楼层⇄通道关联信息失败");
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过楼层id,查询通道信息
|
||||
*
|
||||
* @param floorIds 楼层ids
|
||||
*/
|
||||
@Override
|
||||
public List<SisElevatorFloorChannelRefVo> queryByFloorIds(Collection<Long> floorIds){
|
||||
LambdaQueryWrapper<SisElevatorFloorChannelRef> lqw = Wrappers.lambdaQuery();
|
||||
lqw.in(SisElevatorFloorChannelRef::getFloorId, floorIds);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.domain.SisElevatorFloorChannelRef;
|
||||
import org.dromara.sis.domain.vo.SisElevatorFloorChannelRefVo;
|
||||
import org.dromara.sis.service.ISisElevatorFloorChannelRefService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
|
||||
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
|
||||
@@ -18,9 +20,12 @@ import org.dromara.sis.mapper.SisElevatorFloorRefMapper;
|
||||
import org.dromara.sis.service.ISisElevatorFloorRefService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 电梯⇄楼层关联Service业务层处理
|
||||
@@ -34,6 +39,7 @@ import java.util.Collection;
|
||||
public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefService {
|
||||
|
||||
private final SisElevatorFloorRefMapper baseMapper;
|
||||
private final ISisElevatorFloorChannelRefService sisElevatorFloorChannelRefService;
|
||||
|
||||
/**
|
||||
* 查询电梯⇄楼层关联
|
||||
@@ -94,15 +100,33 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
|
||||
Collection<Long> ids = list.stream().map(SisElevatorFloorRefVo::getId).toList();
|
||||
baseMapper.deleteByIds(ids);
|
||||
|
||||
boolean flag = false;
|
||||
for (Long num : bo.getFloorIds()){
|
||||
// 通道关系
|
||||
List<SisElevatorFloorChannelRefVo> channelInfo = sisElevatorFloorChannelRefService.queryByFloorIds(bo.getFloorIds());
|
||||
|
||||
// 创建Map提高查找效率,避免在循环中重复流操作
|
||||
Map<Long, SisElevatorFloorChannelRefVo> channelInfoMap = channelInfo.stream()
|
||||
.collect(Collectors.toMap(SisElevatorFloorChannelRefVo::getFloorId, Function.identity()));
|
||||
|
||||
List<SisElevatorFloorRef> refInfo = new ArrayList<>();
|
||||
|
||||
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, "新增电梯⇄楼层关联关系失败");
|
||||
|
||||
// 存在通道关系同时写入
|
||||
SisElevatorFloorChannelRefVo channelRef = channelInfoMap.get(num);
|
||||
if (channelRef != null) {
|
||||
add.setOutChannel(channelRef.getOutChannel());
|
||||
add.setInChannel(channelRef.getInChannel());
|
||||
}
|
||||
|
||||
refInfo.add(add);
|
||||
}
|
||||
|
||||
boolean flag = baseMapper.insertBatch(refInfo);
|
||||
Assert.isTrue(flag, "电梯楼层关联关系写入失败!");
|
||||
return flag;
|
||||
}
|
||||
|
||||
@@ -142,34 +166,53 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据电梯id,获取电梯⇄楼层关联信息
|
||||
* 根据权限组id,获取电梯⇄楼层关联信息
|
||||
*
|
||||
* @param authGroupId 电梯id
|
||||
*/
|
||||
@Override
|
||||
public List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId) {
|
||||
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(SisElevatorFloorRef::getElevatorId, authGroupId);
|
||||
lqw.eq(SisElevatorFloorRef::getAuthGroupId, authGroupId);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据权限组id,删除电梯⇄楼层关联信息
|
||||
*
|
||||
* @param authGroupIds 权限组ids
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteByAuthGroupId(Collection<Long> authGroupIds) {
|
||||
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
|
||||
lqw.in(SisElevatorFloorRef::getAuthGroupId, authGroupIds);
|
||||
return baseMapper.delete(lqw) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量更新电梯⇄楼层通道关联信息
|
||||
*
|
||||
* @param info 通道信息
|
||||
* @param info 通道信息
|
||||
*/
|
||||
@Override
|
||||
public Boolean batchUpdateChannel(Collection<SisElevatorFloorChannelRef> info){
|
||||
public Boolean batchUpdateChannel(Collection<SisElevatorFloorChannelRef> info) {
|
||||
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
|
||||
lqw.in(SisElevatorFloorRef::getFloorId, info.stream().map(SisElevatorFloorChannelRef::getFloorId).toList());
|
||||
List<SisElevatorFloorRef> list = baseMapper.selectList(lqw);
|
||||
|
||||
// 创建Map提高查找效率,避免在循环中重复流操作
|
||||
Map<Long, SisElevatorFloorChannelRef> floorInfoMap = info.stream()
|
||||
.collect(Collectors.toMap(SisElevatorFloorChannelRef::getFloorId, Function.identity()));
|
||||
|
||||
for (SisElevatorFloorRef item : list){
|
||||
item.setInChannel(info.stream().filter(x -> x.getFloorId().equals(item.getFloorId())).findFirst().get().getInChannel());
|
||||
for (SisElevatorFloorRef item : list) {
|
||||
SisElevatorFloorChannelRef floorInfo = floorInfoMap.get(item.getFloorId());
|
||||
if (floorInfo != null) {
|
||||
item.setInChannel(floorInfo.getInChannel());
|
||||
item.setOutChannel(floorInfo.getOutChannel());
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
return baseMapper.updateBatchById(list);
|
||||
}
|
||||
}
|
||||
|
@@ -20,12 +20,10 @@ import org.dromara.sis.domain.SisElevatorFloorChannelRef;
|
||||
import org.dromara.sis.domain.SisElevatorInfo;
|
||||
import org.dromara.sis.domain.bo.SisElevatorInfoBo;
|
||||
import org.dromara.sis.domain.enums.ControlTypeEnum;
|
||||
import org.dromara.sis.domain.vo.SisDeviceManageVo;
|
||||
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
|
||||
import org.dromara.sis.mapper.SisElevatorInfoMapper;
|
||||
import org.dromara.sis.service.ISisDeviceBindRefService;
|
||||
import org.dromara.sis.service.ISisElevatorFloorChannelRefService;
|
||||
import org.dromara.sis.service.ISisElevatorFloorRefService;
|
||||
import org.dromara.sis.service.ISisElevatorInfoService;
|
||||
import org.dromara.sis.service.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -45,6 +43,7 @@ import static org.dromara.common.core.constant.CodePrefixConstants.ELEVATOR_CONT
|
||||
public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService {
|
||||
|
||||
private final SisElevatorInfoMapper baseMapper;
|
||||
private final ISisDeviceManageService deviceManageService;
|
||||
private final ISisDeviceBindRefService deviceBindRefService;
|
||||
private final ISisElevatorFloorRefService elevatorFloorRefService;
|
||||
private final ISisElevatorFloorChannelRefService elevatorFloorChannelRefService;
|
||||
@@ -201,20 +200,26 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService {
|
||||
List<SisDeviceBindRef> ls = new ArrayList<>();
|
||||
// 梯控
|
||||
if (bo.getElevatorControlDeviceId() != null) {
|
||||
SisDeviceManageVo vo = deviceManageService.queryById(bo.getElevatorControlDeviceId().getDeviceId());
|
||||
|
||||
SisDeviceBindRef ref = new SisDeviceBindRef();
|
||||
ref.setDeviceId(bo.getElevatorControlDeviceId().getDeviceId());
|
||||
ref.setDeviceIp(bo.getElevatorControlDeviceId().getDeviceIp());
|
||||
ref.setBindId(bo.getElevatorId());
|
||||
ref.setDeviceFloorId(vo.getFloorId());
|
||||
ref.setControlType(ControlTypeEnum.ELEVATOR_CONTROL.getCode());
|
||||
ls.add(ref);
|
||||
}
|
||||
// 远程呼叫
|
||||
if (bo.getRemoteCallElevatorDeviceId() != null && !bo.getRemoteCallElevatorDeviceId().isEmpty()) {
|
||||
for (SisElevatorInfoBo.DeviceInfo deviceInfo : bo.getRemoteCallElevatorDeviceId()) {
|
||||
SisDeviceManageVo vo = deviceManageService.queryById(deviceInfo.getDeviceId());
|
||||
|
||||
SisDeviceBindRef ref = new SisDeviceBindRef();
|
||||
ref.setDeviceId(deviceInfo.getDeviceId());
|
||||
ref.setDeviceIp(deviceInfo.getDeviceIp());
|
||||
ref.setBindId(bo.getElevatorId());
|
||||
ref.setDeviceFloorId(vo.getFloorId());
|
||||
ref.setControlType(ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode());
|
||||
ls.add(ref);
|
||||
}
|
||||
|
@@ -43,4 +43,9 @@ spring:
|
||||
- optional:nacos:datasource.yml
|
||||
- optional:nacos:${spring.application.name}.yml
|
||||
|
||||
|
||||
--- # rocketmq 配置
|
||||
rocketmq:
|
||||
name-server: 192.168.24.101:9876
|
||||
producer:
|
||||
# 生产者组
|
||||
group: dist-test
|
||||
|
Reference in New Issue
Block a user