From 815fe53f1ac0a637f52ae772324b15c2dcaa77ef Mon Sep 17 00:00:00 2001 From: lxj <15683799673@163.com> Date: Thu, 10 Jul 2025 18:36:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A2=AF=E6=8E=A7=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 +- .../mybatis/core/page/TableDataInfo.java | 2 + .../dromara/sis/domain/SisAccessControl.java | 11 -- .../dromara/sis/domain/SisDeviceBindRef.java | 49 ++++++ .../sis/domain/bo/SisAccessControlBo.java | 5 - .../sis/domain/bo/SisDeviceBindRefBo.java | 50 ++++++ .../sis/domain/enums/ControlTypeEnum.java | 27 ++++ .../sis/domain/vo/SisAccessControlVo.java | 8 - .../sis/domain/vo/SisDeviceBindRefVo.java | 57 +++++++ .../sis/mapper/SisDeviceBindRefMapper.java | 15 ++ .../sdk/unview/service/VideoAlarmService.java | 77 ++++++---- .../sis/service/ISisAccessControlService.java | 17 +- .../sis/service/ISisDeviceBindRefService.java | 84 ++++++++++ .../impl/SisAccessControlServiceImpl.java | 30 ++-- .../impl/SisDeviceBindRefServiceImpl.java | 145 ++++++++++++++++++ .../impl/SisElevatorInfoServiceImpl.java | 9 +- .../mapper/sis/SisDeviceBindRefMapper.xml | 7 + 17 files changed, 508 insertions(+), 91 deletions(-) create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/ControlTypeEnum.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisDeviceBindRefMapper.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java create mode 100644 ruoyi-modules/Sis/src/main/resources/mapper/sis/SisDeviceBindRefMapper.xml diff --git a/pom.xml b/pom.xml index 12792e28..121b2d4c 100644 --- a/pom.xml +++ b/pom.xml @@ -91,10 +91,8 @@ dev - - - 47.109.37.87:8848 - 47.109.37.87:4560 + 192.168.110.207:8848 + 192.168.110.207:4560 DEFAULT_GROUP DEFAULT_GROUP nacos diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java index 8db4b3c5..9df2bb8b 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java @@ -51,6 +51,8 @@ public class TableDataInfo implements Serializable { public TableDataInfo(List list, long total) { this.rows = list; this.total = total; + this.msg = "success"; + this.code = HttpStatus.HTTP_OK; } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java index 74491b7d..f36747a6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAccessControl.java @@ -93,15 +93,4 @@ public class SisAccessControl extends TenantEntity { */ private String outCode; - /** - * 绑定设备id - */ - private Long bindDeviceId; - - /** - * 绑定设备ip - */ - private String bindDeviceIp; - - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java new file mode 100644 index 00000000..1f7dcd53 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceBindRef.java @@ -0,0 +1,49 @@ +package org.dromara.sis.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.tenant.core.TenantEntity; + +import java.io.Serial; + +/** + * 摄像头绑定(门禁,电梯)关联关系对象 sis_device_bind_ref + * + * @author lxj + * @date 2025-07-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sis_device_bind_ref") +public class SisDeviceBindRef extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 设备id(摄像头id) + */ + private Long deviceId; + + private String deviceIp; + + /** + * control_type=1,是门禁id,control_type=2,3 是电梯id + */ + private Long bindId; + + /** + * 控制类型(1:门禁,2:电梯呼梯,3:电梯梯控 + */ + private Integer controlType; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAccessControlBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAccessControlBo.java index f3c26e84..877395fb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAccessControlBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAccessControlBo.java @@ -104,9 +104,4 @@ public class SisAccessControlBo extends BaseEntity { */ private Long bindDeviceId; - /** - * 绑定设备ip - */ - private String bindDeviceIp; - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java new file mode 100644 index 00000000..8bb20811 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceBindRefBo.java @@ -0,0 +1,50 @@ +package org.dromara.sis.domain.bo; + +import org.dromara.sis.domain.SisDeviceBindRef; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 摄像头绑定(门禁,电梯)关联关系业务对象 sis_device_bind_ref + * + * @author lxj + * @date 2025-07-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SisDeviceBindRef.class, reverseConvertGenerate = false) +public class SisDeviceBindRefBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 设备id(摄像头id) + */ + @NotNull(message = "设备id(摄像头id)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long deviceId; + + private String deviceIp; + + /** + * control_type=1,是门禁id,control_type=2,3 是电梯id + */ + @NotNull(message = "control_type=1,是门禁id,control_type=2,3 是电梯id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long bindId; + + /** + * 控制类型(1:门禁,2:电梯呼梯,3:电梯梯控 + */ + @NotNull(message = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控不能为空", groups = { AddGroup.class, EditGroup.class }) + private Integer controlType; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/ControlTypeEnum.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/ControlTypeEnum.java new file mode 100644 index 00000000..96b54334 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/ControlTypeEnum.java @@ -0,0 +1,27 @@ +package org.dromara.sis.domain.enums; + +import lombok.Getter; + +@Getter +public enum ControlTypeEnum { + /** + * 门禁 + */ + ACCESS_CONTROL(1), + /** + * 远程呼梯 + */ + REMOTE_CALL_ELEVATOR(2), + /** + * 梯控 + */ + ELEVATOR_CONTROL(3); + + private final Integer code; + + ControlTypeEnum(Integer code) { + this.code = code; + } + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java index 553a6c32..08ed4e17 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAccessControlVo.java @@ -104,12 +104,4 @@ public class SisAccessControlVo implements Serializable { */ @ExcelProperty(value = "外部编码") private String outCode; - - private Long bindDeviceId; - - /** - * 绑定设备ip - */ - private String bindDeviceIp; - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java new file mode 100644 index 00000000..8661628c --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceBindRefVo.java @@ -0,0 +1,57 @@ +package org.dromara.sis.domain.vo; + +import org.dromara.sis.domain.SisDeviceBindRef; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 摄像头绑定(门禁,电梯)关联关系视图对象 sis_device_bind_ref + * + * @author lxj + * @date 2025-07-10 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SisDeviceBindRef.class) +public class SisDeviceBindRefVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 设备id(摄像头id) + */ + @ExcelProperty(value = "设备id(摄像头id)") + private Long deviceId; + + private String deviceIp; + /** + * control_type=1,是门禁id,control_type=2,3 是电梯id + */ + @ExcelProperty(value = "control_type=1,是门禁id,control_type=2,3 是电梯id") + private Long bindId; + + /** + * 控制类型(1:门禁,2:电梯呼梯,3:电梯梯控 + */ + @ExcelProperty(value = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控") + private Integer controlType; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisDeviceBindRefMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisDeviceBindRefMapper.java new file mode 100644 index 00000000..09a8a2d7 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisDeviceBindRefMapper.java @@ -0,0 +1,15 @@ +package org.dromara.sis.mapper; + +import org.dromara.sis.domain.SisDeviceBindRef; +import org.dromara.sis.domain.vo.SisDeviceBindRefVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 摄像头绑定(门禁,电梯)关联关系Mapper接口 + * + * @author lxj + * @date 2025-07-10 + */ +public interface SisDeviceBindRefMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java index efeb41a9..a3b3f2dd 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/VideoAlarmService.java @@ -3,7 +3,8 @@ package org.dromara.sis.sdk.unview.service; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.sis.domain.vo.SisAccessControlVo; +import org.dromara.sis.domain.SisDeviceBindRef; +import org.dromara.sis.domain.enums.ControlTypeEnum; import org.dromara.sis.domain.vo.SisAuthRecordVo; import org.dromara.sis.sdk.e8.AccessControlService; import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq; @@ -11,10 +12,12 @@ import org.dromara.sis.sdk.unview.model.UvModel; import org.dromara.sis.sdk.unview.model.enums.AlarmTypeEnum; import org.dromara.sis.service.ISisAccessControlService; import org.dromara.sis.service.ISisAuthRecordService; +import org.dromara.sis.service.ISisDeviceBindRefService; import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Objects; /** * 宇视人体设备告警数据处理 @@ -30,6 +33,7 @@ public class VideoAlarmService { private final ISisAuthRecordService authRecordService; private final AccessControlService accessControlService; private final ISisAccessControlService sisAccessControlService; + private final ISisDeviceBindRefService deviceBindRefService; public void handleAlarmData(UvModel.AlarmReportInfo alarmReportData) { @@ -127,37 +131,52 @@ public class VideoAlarmService { return; } compareResults.forEach(result -> { - // 查询设备是偶绑定门径 -// SisDeviceManageVo sisDeviceManageVo = deviceManageService.queryVoByDeviceIp(deviceInfo.getDevice_code()); - SisAccessControlVo controlVo = sisAccessControlService.queryByBindDeviceIp(channelInfo.getIpc_addr()); - if (controlVo == null) { - log.info("设备[{}]未和门禁绑定,不处理此条数据。", channelInfo.getIpc_addr()); + // 查询设备绑定关联关系表 + SisDeviceBindRef ref = deviceBindRefService.queryByDeviceIp(channelInfo.getIpc_addr()); + if (ref == null) { return; } - // 人像库id -// Integer libId = result.getLib_id(); - // 宇视人员id - Integer personId = result.getPerson_id(); - // 门禁id - Long accessControlId = controlVo.getId(); - // 校验人脸是偶有同行此门禁的权限 - SisAuthRecordVo recordVo = authRecordService.checkAuth(personId, accessControlId); - // 如果有通行权限,则打开门禁 - if (recordVo == null) { - log.info("此人像[{}]没有门禁[{}]的通行权限。", personId, accessControlId); + // 门禁 + if (Objects.equals(ref.getControlType(), ControlTypeEnum.ACCESS_CONTROL.getCode())) { +// SisAccessControlVo controlVo = sisAccessControlService.queryById(ref.getBindId()); +// if (controlVo == null) { +// log.info("设备[{}]未和门禁绑定,不处理此条数据。", channelInfo.getIpc_addr()); +// return; +// } + // 人像库id +// Integer libId = result.getLib_id(); + // 宇视人员id + Integer personId = result.getPerson_id(); + // 门禁id + Long accessControlId = ref.getBindId(); + // 校验人脸是偶有同行此门禁的权限 + SisAuthRecordVo recordVo = authRecordService.checkAuth(personId, accessControlId); + // 如果有通行权限,则打开门禁 + if (recordVo == null) { + log.info("此人像[{}]没有门禁[{}]的通行权限。", personId, accessControlId); + } + // 打开门禁 + RemoteOpenDoorReq remoteOpenDoorReq = new RemoteOpenDoorReq(); + remoteOpenDoorReq.setType(0); + remoteOpenDoorReq.setReason("宇视人像识别,人像id=" + recordVo.getImgId()); + remoteOpenDoorReq.setOperatorId(0L); + RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData(); + data.setDoorId(recordVo.getDoorId()); + data.setDeviceId(recordVo.getDeviceId()); + remoteOpenDoorReq.setControlList(List.of(data)); + log.info("远程开门参数,params={}", JSONObject.toJSONString(remoteOpenDoorReq)); + Boolean b = accessControlService.remoteOpenDoor(remoteOpenDoorReq); + log.info("远程开门完成, result={}", b); + } + // 远程呼梯 + if (Objects.equals(ref.getControlType(), ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode())) { + // TODO 待实现 + } + + // 梯控 + if (Objects.equals(ref.getControlType(), ControlTypeEnum.ELEVATOR_CONTROL.getCode())) { + // TODO 待实现 } - // 打开门禁 - RemoteOpenDoorReq remoteOpenDoorReq = new RemoteOpenDoorReq(); - remoteOpenDoorReq.setType(0); - remoteOpenDoorReq.setReason("宇视人像识别,人像id=" + recordVo.getImgId()); - remoteOpenDoorReq.setOperatorId(0L); - RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData(); - data.setDoorId(recordVo.getDoorId()); - data.setDeviceId(recordVo.getDeviceId()); - remoteOpenDoorReq.setControlList(List.of(data)); - log.info("远程开门参数,params={}", JSONObject.toJSONString(remoteOpenDoorReq)); - Boolean b = accessControlService.remoteOpenDoor(remoteOpenDoorReq); - log.info("远程开门完成, result={}", b); }); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java index 0a077f74..fa6b77c3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java @@ -1,11 +1,10 @@ package org.dromara.sis.service; import org.dromara.common.core.domain.TreeNode; -import org.dromara.sis.domain.SisAccessControl; -import org.dromara.sis.domain.vo.SisAccessControlVo; -import org.dromara.sis.domain.bo.SisAccessControlBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; 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 java.util.Collection; import java.util.List; @@ -76,17 +75,9 @@ public interface ISisAccessControlService { */ List queryListByIds(Collection ids); - - - /** - * 通过绑定设备ip查询门禁 - * @param deviceCode 设备ip - * @return - */ - SisAccessControlVo queryByBindDeviceIp(String deviceCode); - /** * 查询门禁树 + * * @return */ List> queryAcTree(); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java new file mode 100644 index 00000000..66161e42 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceBindRefService.java @@ -0,0 +1,84 @@ +package org.dromara.sis.service; + +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sis.domain.SisDeviceBindRef; +import org.dromara.sis.domain.bo.SisDeviceBindRefBo; +import org.dromara.sis.domain.vo.SisDeviceBindRefVo; + +import java.util.Collection; +import java.util.List; + +/** + * 摄像头绑定(门禁,电梯)关联关系Service接口 + * + * @author lxj + * @date 2025-07-10 + */ +public interface ISisDeviceBindRefService { + + /** + * 查询摄像头绑定(门禁,电梯)关联关系 + * + * @param id 主键 + * @return 摄像头绑定(门禁 , 电梯)关联关系 + */ + SisDeviceBindRefVo queryById(Long id); + + /** + * 分页查询摄像头绑定(门禁,电梯)关联关系列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 摄像头绑定(门禁 , 电梯)关联关系分页列表 + */ + TableDataInfo queryPageList(SisDeviceBindRefBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的摄像头绑定(门禁,电梯)关联关系列表 + * + * @param bo 查询条件 + * @return 摄像头绑定(门禁 , 电梯)关联关系列表 + */ + List queryList(SisDeviceBindRefBo bo); + + /** + * 新增摄像头绑定(门禁,电梯)关联关系 + * + * @param bo 摄像头绑定(门禁,电梯)关联关系 + * @return 是否新增成功 + */ + Boolean insertByBo(SisDeviceBindRefBo bo); + + /** + * 新增摄像头绑定(门禁,电梯)关联关系 + * + * @param ref 摄像头绑定(门禁,电梯)关联关系 + * @return 是否新增成功 + */ + Boolean insert(SisDeviceBindRef ref); + + /** + * 修改摄像头绑定(门禁,电梯)关联关系 + * + * @param bo 摄像头绑定(门禁,电梯)关联关系 + * @return 是否修改成功 + */ + Boolean updateByBo(SisDeviceBindRefBo bo); + + /** + * 校验并批量删除摄像头绑定(门禁,电梯)关联关系信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 通过ip查询设备关联关系 + * @param ipcAddr 设备ip + * @return 返回关联关系表 + */ + SisDeviceBindRef queryByDeviceIp(String ipcAddr); +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java index ed7057c1..cb13e973 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java @@ -17,7 +17,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.property.api.RemoteFloorService; import org.dromara.property.api.domain.vo.RemoteFloorVo; import org.dromara.sis.domain.SisAccessControl; +import org.dromara.sis.domain.SisDeviceBindRef; import org.dromara.sis.domain.bo.SisAccessControlBo; +import org.dromara.sis.domain.enums.ControlTypeEnum; import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.mapper.SisAccessControlMapper; @@ -25,6 +27,7 @@ import org.dromara.sis.sdk.e8.DoorDeviceService; import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceAddReq; import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes; import org.dromara.sis.service.ISisAccessControlService; +import org.dromara.sis.service.ISisDeviceBindRefService; import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -47,7 +50,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { private final SisAccessControlMapper baseMapper; private final DoorDeviceService doorDeviceService; private final ISisDeviceManageService sisDeviceManageService; - + private final ISisDeviceBindRefService sisDeviceBindRefService; @DubboReference private RemoteFloorService remoteFloorService; @@ -131,10 +134,18 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { add.setBuildingId(remoteFloorVo.getBuildingId()); add.setUnitId(remoteFloorVo.getUnitId()); add.setFloorId(remoteFloorVo.getId()); - add.setBindDeviceIp(sisDeviceManageVo.getDeviceIp()); Assert.notNull(add, "数据处理失败"); boolean flag = baseMapper.insert(add) > 0; if (flag) { + // 写入关联关系表中 + SisDeviceBindRef sisDeviceBindRef = new SisDeviceBindRef(); + sisDeviceBindRef.setDeviceId(sisDeviceManageVo.getId()); + sisDeviceBindRef.setDeviceIp(sisDeviceManageVo.getDeviceIp()); + sisDeviceBindRef.setBindId(add.getId()); + sisDeviceBindRef.setControlType(ControlTypeEnum.ACCESS_CONTROL.getCode()); + Boolean insert = sisDeviceBindRefService.insert(sisDeviceBindRef); + Assert.isTrue(insert, "写入设备关联表失败!"); + // 添加E8门禁设备 if (add.getControlType() == 2L) { log.info("开始同步写入E8门禁"); @@ -167,14 +178,6 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { Assert.isTrue(update, "外部编码回写失败"); log.info("E8平台写入完成!"); } - - // 摄像头不绑定门禁,让门禁去绑定摄像头 - /*if (bo.getBindDeviceId() != null) { - SisDeviceManageBo device = new SisDeviceManageBo(); - device.setId(bo.getBindDeviceId()); - device.setAccessControlId(add.getId()); - sisDeviceManageService.updateByBo(device); - }*/ } return flag; } @@ -225,13 +228,6 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { return baseMapper.selectVoByIds(ids); } - @Override - public SisAccessControlVo queryByBindDeviceIp(String deviceCode) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(SisAccessControl::getBindDeviceIp, deviceCode); - return baseMapper.selectVoOne(wrapper); - } - @Override public List> queryAcTree() { List> treeNodes = remoteFloorService.queryTreeList(); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java new file mode 100644 index 00000000..75608242 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceBindRefServiceImpl.java @@ -0,0 +1,145 @@ +package org.dromara.sis.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sis.domain.SisDeviceBindRef; +import org.dromara.sis.domain.bo.SisDeviceBindRefBo; +import org.dromara.sis.domain.vo.SisDeviceBindRefVo; +import org.dromara.sis.mapper.SisDeviceBindRefMapper; +import org.dromara.sis.service.ISisDeviceBindRefService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 摄像头绑定(门禁,电梯)关联关系Service业务层处理 + * + * @author lxj + * @date 2025-07-10 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class SisDeviceBindRefServiceImpl implements ISisDeviceBindRefService { + + private final SisDeviceBindRefMapper baseMapper; + + /** + * 查询摄像头绑定(门禁,电梯)关联关系 + * + * @param id 主键 + * @return 摄像头绑定(门禁 , 电梯)关联关系 + */ + @Override + public SisDeviceBindRefVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询摄像头绑定(门禁,电梯)关联关系列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 摄像头绑定(门禁 , 电梯)关联关系分页列表 + */ + @Override + public TableDataInfo queryPageList(SisDeviceBindRefBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的摄像头绑定(门禁,电梯)关联关系列表 + * + * @param bo 查询条件 + * @return 摄像头绑定(门禁 , 电梯)关联关系列表 + */ + @Override + public List queryList(SisDeviceBindRefBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SisDeviceBindRefBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(SisDeviceBindRef::getId); + lqw.eq(bo.getDeviceId() != null, SisDeviceBindRef::getDeviceId, bo.getDeviceId()); + lqw.eq(bo.getBindId() != null, SisDeviceBindRef::getBindId, bo.getBindId()); + lqw.eq(bo.getControlType() != null, SisDeviceBindRef::getControlType, bo.getControlType()); + return lqw; + } + + /** + * 新增摄像头绑定(门禁,电梯)关联关系 + * + * @param bo 摄像头绑定(门禁,电梯)关联关系 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SisDeviceBindRefBo bo) { + SisDeviceBindRef add = MapstructUtils.convert(bo, SisDeviceBindRef.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + @Override + public Boolean insert(SisDeviceBindRef ref) { + return baseMapper.insert(ref) > 0; + } + + /** + * 修改摄像头绑定(门禁,电梯)关联关系 + * + * @param bo 摄像头绑定(门禁,电梯)关联关系 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SisDeviceBindRefBo bo) { + SisDeviceBindRef update = MapstructUtils.convert(bo, SisDeviceBindRef.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SisDeviceBindRef entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除摄像头绑定(门禁,电梯)关联关系信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public SisDeviceBindRef queryByDeviceIp(String ipcAddr) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(SisDeviceBindRef::getDeviceIp, ipcAddr); + return baseMapper.selectOne(lqw); + } +} 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 432f35a5..3317cce2 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 @@ -128,13 +128,14 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setElevatorId(add.getElevatorId()); - // sdk 链接设备 + // hik sdk 登录 // short port = bo.getControlPort().shortValue(); // Boolean isLogin = HikApiService.getInstance().login(bo.getControlIp(), port, bo.getControlAccount(), bo.getControlPwd()); -// if (!isLogin) { -// throw new RuntimeException("电梯添加失败, 发起梯控设备连接失败."); -// } +// Assert.isTrue(isLogin, "电梯添加失败, 发起梯控设备连接失败."); // todo 发起电梯楼层信息同步 + + + } return flag; } diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisDeviceBindRefMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisDeviceBindRefMapper.xml new file mode 100644 index 00000000..3691aded --- /dev/null +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisDeviceBindRefMapper.xml @@ -0,0 +1,7 @@ + + + + +