feat(ops): 新增安保模块数据模型与 Mapper
新增安保区域人员绑定表 ops_area_security_user 和安保工单扩展表 ops_order_security_ext,以及对应的 DO 和 Mapper 接口。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
16
sql/mysql/ops_area_security_user.sql
Normal file
16
sql/mysql/ops_area_security_user.sql
Normal file
@@ -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 '区域-安保人员绑定表';
|
||||
41
sql/mysql/ops_order_security_ext.sql
Normal file
41
sql/mysql/ops_order_security_ext.sql
Normal file
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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<OpsAreaSecurityUserDO> {
|
||||
|
||||
/**
|
||||
* 查询区域内所有启用的安保人员
|
||||
*/
|
||||
default List<OpsAreaSecurityUserDO> selectListByAreaId(Long areaId) {
|
||||
return selectList(new LambdaQueryWrapper<OpsAreaSecurityUserDO>()
|
||||
.eq(OpsAreaSecurityUserDO::getAreaId, areaId)
|
||||
.eq(OpsAreaSecurityUserDO::getEnabled, true)
|
||||
.orderByAsc(OpsAreaSecurityUserDO::getSort));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据区域ID和用户ID查询(唯一性校验用)
|
||||
*/
|
||||
default OpsAreaSecurityUserDO selectByAreaIdAndUserId(Long areaId, Long userId) {
|
||||
return selectOne(new LambdaQueryWrapper<OpsAreaSecurityUserDO>()
|
||||
.eq(OpsAreaSecurityUserDO::getAreaId, areaId)
|
||||
.eq(OpsAreaSecurityUserDO::getUserId, userId));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<OpsOrderSecurityExtDO> {
|
||||
|
||||
/**
|
||||
* 根据工单ID查询扩展信息
|
||||
*/
|
||||
default OpsOrderSecurityExtDO selectByOpsOrderId(Long opsOrderId) {
|
||||
return selectOne(OpsOrderSecurityExtDO::getOpsOrderId, opsOrderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入或选择性更新扩展信息
|
||||
* <p>
|
||||
* 已存在时按 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user