From d53d1c4584c2d3d6c902a4fb206a636f2a6f3f65 Mon Sep 17 00:00:00 2001 From: lzh Date: Wed, 11 Mar 2026 17:32:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(ops):=20=E6=96=B0=E5=A2=9E=E5=AE=89?= =?UTF-8?q?=E4=BF=9D=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=B8=8E=20Mapper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增安保区域人员绑定表 ops_area_security_user 和安保工单扩展表 ops_order_security_ext,以及对应的 DO 和 Mapper 接口。 Co-Authored-By: Claude Opus 4.6 --- sql/mysql/ops_area_security_user.sql | 16 +++ sql/mysql/ops_order_security_ext.sql | 41 +++++++ .../area/OpsAreaSecurityUserDO.java | 58 ++++++++++ .../workorder/OpsOrderSecurityExtDO.java | 100 ++++++++++++++++++ .../mysql/area/OpsAreaSecurityUserMapper.java | 37 +++++++ .../workorder/OpsOrderSecurityExtMapper.java | 37 +++++++ 6 files changed, 289 insertions(+) create mode 100644 sql/mysql/ops_area_security_user.sql create mode 100644 sql/mysql/ops_order_security_ext.sql create mode 100644 viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/area/OpsAreaSecurityUserDO.java create mode 100644 viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/workorder/OpsOrderSecurityExtDO.java create mode 100644 viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/area/OpsAreaSecurityUserMapper.java create mode 100644 viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/workorder/OpsOrderSecurityExtMapper.java diff --git a/sql/mysql/ops_area_security_user.sql b/sql/mysql/ops_area_security_user.sql new file mode 100644 index 0000000..eaee0ef --- /dev/null +++ b/sql/mysql/ops_area_security_user.sql @@ -0,0 +1,16 @@ +CREATE TABLE ops_area_security_user ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + area_id BIGINT NOT NULL COMMENT '区域ID,关联 ops_bus_area.id', + user_id BIGINT NOT NULL COMMENT '安保人员用户ID,关联 system_users.id', + user_name VARCHAR(64) DEFAULT '' COMMENT '安保人员姓名(冗余)', + team_id BIGINT DEFAULT NULL COMMENT '所属班组ID', + enabled BIT DEFAULT 1 COMMENT '是否启用', + sort INT DEFAULT 0 COMMENT '排序值', + creator VARCHAR(64) DEFAULT '', + create_time DATETIME DEFAULT CURRENT_TIMESTAMP, + updater VARCHAR(64) DEFAULT '', + update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + deleted BIT DEFAULT 0, + tenant_id BIGINT DEFAULT 0, + UNIQUE KEY uk_area_user (area_id, user_id, deleted) +) COMMENT '区域-安保人员绑定表'; diff --git a/sql/mysql/ops_order_security_ext.sql b/sql/mysql/ops_order_security_ext.sql new file mode 100644 index 0000000..983fad0 --- /dev/null +++ b/sql/mysql/ops_order_security_ext.sql @@ -0,0 +1,41 @@ +-- ---------------------------- +-- Table structure for ops_order_security_ext +-- ---------------------------- +DROP TABLE IF EXISTS `ops_order_security_ext`; +CREATE TABLE `ops_order_security_ext` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `ops_order_id` bigint NOT NULL COMMENT '工单ID,关联 ops_order.id', + + -- 告警来源(告警工单必填,手动工单可空) + `alarm_id` varchar(64) DEFAULT NULL COMMENT '关联告警ID', + `alarm_type` varchar(50) DEFAULT NULL COMMENT '告警类型: intrusion/leave_post/fire/fence', + `camera_id` varchar(64) DEFAULT NULL COMMENT '摄像头ID', + `roi_id` varchar(64) DEFAULT NULL COMMENT 'ROI区域ID', + `image_url` varchar(512) DEFAULT NULL COMMENT '告警截图URL', + + -- 处理人(冗余快照,创建时写入) + `assigned_user_id` bigint DEFAULT NULL COMMENT '处理人user_id', + `assigned_user_name` varchar(100) DEFAULT NULL COMMENT '处理人姓名', + `assigned_team_id` bigint DEFAULT NULL COMMENT '班组ID', + + -- 处理结果(完成时提交) + `result` text DEFAULT NULL COMMENT '处理结果描述', + `result_img_urls` varchar(2048) DEFAULT NULL COMMENT '处理结果图片URL,JSON数组', + + -- 关键时间点 + `dispatched_time` datetime DEFAULT NULL COMMENT '派单时间', + `confirmed_time` datetime DEFAULT NULL COMMENT '确认时间', + `completed_time` datetime DEFAULT NULL COMMENT '完成时间', + + -- 审计字段 + `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号', + + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_ops_order_id` (`ops_order_id`, `deleted`) USING BTREE, + INDEX `idx_alarm_id` (`alarm_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '安保工单扩展表' ROW_FORMAT = Dynamic; diff --git a/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/area/OpsAreaSecurityUserDO.java b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/area/OpsAreaSecurityUserDO.java new file mode 100644 index 0000000..ea9fa78 --- /dev/null +++ b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/area/OpsAreaSecurityUserDO.java @@ -0,0 +1,58 @@ +package com.viewsh.module.ops.security.dal.dataobject.area; + +import com.viewsh.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 区域-安保人员绑定 DO + * + * @author lzh + */ +@TableName("ops_area_security_user") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OpsAreaSecurityUserDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 区域ID,关联 ops_bus_area.id + */ + private Long areaId; + + /** + * 安保人员用户ID,关联 system_users.id + */ + private Long userId; + + /** + * 安保人员姓名(冗余) + */ + private String userName; + + /** + * 所属班组ID + */ + private Long teamId; + + /** + * 是否启用 + */ + private Boolean enabled; + + /** + * 排序值 + */ + private Integer sort; + +} diff --git a/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/workorder/OpsOrderSecurityExtDO.java b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/workorder/OpsOrderSecurityExtDO.java new file mode 100644 index 0000000..5073164 --- /dev/null +++ b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/dataobject/workorder/OpsOrderSecurityExtDO.java @@ -0,0 +1,100 @@ +package com.viewsh.module.ops.security.dal.dataobject.workorder; + +import com.viewsh.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * 安保工单扩展 DO + * + * @author lzh + */ +@TableName("ops_order_security_ext") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OpsOrderSecurityExtDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + /** + * 工单ID + * + * 关联 {@link com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO#getId()} + */ + private Long opsOrderId; + + // ==================== 告警来源 ==================== + + /** + * 关联告警ID(告警工单必填,手动工单可空) + */ + private String alarmId; + /** + * 告警类型(intrusion=入侵/leave_post=离岗/fire=火灾/fence=越界) + */ + private String alarmType; + /** + * 摄像头ID + */ + private String cameraId; + /** + * ROI区域ID + */ + private String roiId; + /** + * 告警截图URL + */ + private String imageUrl; + + // ==================== 处理人信息(冗余快照) ==================== + + /** + * 处理人user_id + */ + private Long assignedUserId; + /** + * 处理人姓名 + */ + private String assignedUserName; + /** + * 班组ID + */ + private Long assignedTeamId; + + // ==================== 处理结果(完成时提交) ==================== + + /** + * 处理结果描述 + */ + private String result; + /** + * 处理结果图片URL,JSON数组 + */ + private String resultImgUrls; + + // ==================== 关键时间点 ==================== + + /** + * 派单时间 + */ + private LocalDateTime dispatchedTime; + /** + * 确认时间 + */ + private LocalDateTime confirmedTime; + /** + * 完成时间 + */ + private LocalDateTime completedTime; + +} diff --git a/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/area/OpsAreaSecurityUserMapper.java b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/area/OpsAreaSecurityUserMapper.java new file mode 100644 index 0000000..fc6ac9b --- /dev/null +++ b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/area/OpsAreaSecurityUserMapper.java @@ -0,0 +1,37 @@ +package com.viewsh.module.ops.security.dal.mysql.area; + +import com.viewsh.framework.mybatis.core.mapper.BaseMapperX; +import com.viewsh.module.ops.security.dal.dataobject.area.OpsAreaSecurityUserDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 区域-安保人员绑定 Mapper + * + * @author lzh + */ +@Mapper +public interface OpsAreaSecurityUserMapper extends BaseMapperX { + + /** + * 查询区域内所有启用的安保人员 + */ + default List selectListByAreaId(Long areaId) { + return selectList(new LambdaQueryWrapper() + .eq(OpsAreaSecurityUserDO::getAreaId, areaId) + .eq(OpsAreaSecurityUserDO::getEnabled, true) + .orderByAsc(OpsAreaSecurityUserDO::getSort)); + } + + /** + * 根据区域ID和用户ID查询(唯一性校验用) + */ + default OpsAreaSecurityUserDO selectByAreaIdAndUserId(Long areaId, Long userId) { + return selectOne(new LambdaQueryWrapper() + .eq(OpsAreaSecurityUserDO::getAreaId, areaId) + .eq(OpsAreaSecurityUserDO::getUserId, userId)); + } + +} diff --git a/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/workorder/OpsOrderSecurityExtMapper.java b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/workorder/OpsOrderSecurityExtMapper.java new file mode 100644 index 0000000..8c934a3 --- /dev/null +++ b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/dal/mysql/workorder/OpsOrderSecurityExtMapper.java @@ -0,0 +1,37 @@ +package com.viewsh.module.ops.security.dal.mysql.workorder; + +import com.viewsh.framework.mybatis.core.mapper.BaseMapperX; +import com.viewsh.module.ops.security.dal.dataobject.workorder.OpsOrderSecurityExtDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 安保工单扩展 Mapper + * + * @author lzh + */ +@Mapper +public interface OpsOrderSecurityExtMapper extends BaseMapperX { + + /** + * 根据工单ID查询扩展信息 + */ + default OpsOrderSecurityExtDO selectByOpsOrderId(Long opsOrderId) { + return selectOne(OpsOrderSecurityExtDO::getOpsOrderId, opsOrderId); + } + + /** + * 插入或选择性更新扩展信息 + *

+ * 已存在时按 ID 更新,不存在时插入 + */ + default int insertOrUpdateSelective(OpsOrderSecurityExtDO entity) { + OpsOrderSecurityExtDO existing = selectByOpsOrderId(entity.getOpsOrderId()); + if (existing == null) { + return insert(entity); + } else { + entity.setId(existing.getId()); + return updateById(entity); + } + } + +}