130 lines
6.0 KiB
SQL
130 lines
6.0 KiB
SQL
-- ============================================================
|
||
-- 安保工单体系 - 数据库表结构
|
||
-- 数据库: aiot-alarm(与 alarm_event 同库)
|
||
-- ============================================================
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 1. 安保人员表
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `security_user` (
|
||
`id` INT NOT NULL AUTO_INCREMENT,
|
||
`user_id` VARCHAR(64) NOT NULL COMMENT '人员唯一ID',
|
||
`name` VARCHAR(100) NOT NULL COMMENT '姓名',
|
||
`phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
|
||
`wechat_uid` VARCHAR(100) DEFAULT NULL COMMENT '企微userid',
|
||
`role` VARCHAR(50) DEFAULT 'guard' COMMENT '角色: guard(保安) / supervisor(主管) / manager(经理)',
|
||
`team_id` VARCHAR(64) DEFAULT NULL COMMENT '班组ID',
|
||
`status` VARCHAR(20) DEFAULT 'active' COMMENT '状态: active / inactive',
|
||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_user_id` (`user_id`),
|
||
KEY `idx_team_id` (`team_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='安保人员表';
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 2. 安保工单表
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `security_work_order` (
|
||
`order_id` VARCHAR(64) NOT NULL COMMENT '工单ID: WO + 时间戳 + uuid',
|
||
|
||
-- 来源告警(告警工单必填,手动工单可空)
|
||
`alarm_id` VARCHAR(64) DEFAULT NULL COMMENT '关联 alarm_event.alarm_id',
|
||
|
||
-- 工单内容
|
||
`title` VARCHAR(200) NOT NULL COMMENT '工单标题',
|
||
`description` TEXT DEFAULT NULL COMMENT '工单描述',
|
||
`priority` SMALLINT DEFAULT 2 COMMENT '优先级: 1低 2中 3高 4紧急',
|
||
|
||
-- 设备/区域信息(冗余,方便查询和责任追溯)
|
||
`camera_id` VARCHAR(64) DEFAULT NULL COMMENT '摄像头ID',
|
||
`roi_id` VARCHAR(64) DEFAULT NULL COMMENT 'ROI区域ID',
|
||
`alarm_type` VARCHAR(50) DEFAULT NULL COMMENT '告警类型: intrusion / leave_post',
|
||
`image_url` VARCHAR(512) DEFAULT NULL COMMENT '截图URL',
|
||
|
||
-- 派发信息(生成时写入,确保责任可追溯)
|
||
`assigned_user_id` VARCHAR(64) DEFAULT NULL COMMENT '处理人user_id → security_user.user_id',
|
||
`assigned_user_name` VARCHAR(100) DEFAULT NULL COMMENT '处理人姓名(冗余)',
|
||
`assigned_team_id` VARCHAR(64) DEFAULT NULL COMMENT '班组ID',
|
||
|
||
-- 状态
|
||
`status` VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '工单状态: PENDING / DISPATCHED / PROCESSING / DONE / CLOSED',
|
||
|
||
-- 处理结果
|
||
`result` TEXT DEFAULT NULL COMMENT '处理结果描述',
|
||
|
||
-- 创建人
|
||
`created_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
|
||
|
||
-- 时间
|
||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
`dispatch_time` DATETIME DEFAULT NULL COMMENT '派单时间',
|
||
`finish_time` DATETIME DEFAULT NULL COMMENT '完成时间',
|
||
|
||
PRIMARY KEY (`order_id`),
|
||
UNIQUE KEY `uk_alarm_id` (`alarm_id`) COMMENT '一个告警只能生成一个工单',
|
||
KEY `idx_swo_status` (`status`),
|
||
KEY `idx_swo_assigned` (`assigned_user_id`),
|
||
KEY `idx_swo_created_at` (`created_at`),
|
||
KEY `idx_swo_camera_roi_type` (`camera_id`, `roi_id`, `alarm_type`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='安保工单表';
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 3. 工单操作记录表
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `work_order_log` (
|
||
`id` INT NOT NULL AUTO_INCREMENT,
|
||
`order_id` VARCHAR(64) NOT NULL COMMENT '关联工单ID → security_work_order.order_id',
|
||
`action` VARCHAR(50) NOT NULL COMMENT '操作: CREATE / DISPATCH / ACCEPT / FINISH / CLOSE',
|
||
`operator_id` VARCHAR(64) DEFAULT NULL COMMENT '操作人ID',
|
||
`operator_name` VARCHAR(100) DEFAULT NULL COMMENT '操作人姓名',
|
||
`remark` TEXT DEFAULT NULL COMMENT '备注',
|
||
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_wol_order_id` (`order_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工单操作记录表';
|
||
|
||
|
||
-- ============================================================
|
||
-- 状态流转说明
|
||
-- ============================================================
|
||
--
|
||
-- 工单状态机:
|
||
--
|
||
-- PENDING ──派单──→ DISPATCHED ──接单──→ PROCESSING ──完成──→ DONE
|
||
-- │ │
|
||
-- └────────关闭────────→ CLOSED ←──────────关闭──────────────┘
|
||
--
|
||
-- 工单来源:
|
||
-- 1. 告警自动生成(alarm_id 不为空)
|
||
-- 告警确认 → 查询值班人员 → 生成工单 → 派单通知
|
||
--
|
||
-- 2. 手动创建(alarm_id 为空)
|
||
-- 管理员/主管手动创建 → 指定处理人 → 派单通知
|
||
--
|
||
-- 告警合并规则:
|
||
-- 同一 camera_id + roi_id + alarm_type,5分钟内只生成1个工单
|
||
-- 通过 idx_swo_camera_roi_type 索引 + 服务层逻辑实现
|
||
--
|
||
-- ============================================================
|
||
-- 关联关系
|
||
-- ============================================================
|
||
--
|
||
-- alarm_event (告警)
|
||
-- │
|
||
-- │ alarm_id (一对一,UNIQUE)
|
||
-- ▼
|
||
-- security_work_order (工单)
|
||
-- │
|
||
-- │ assigned_user_id
|
||
-- ▼
|
||
-- security_user (安保人员)
|
||
--
|
||
-- security_work_order (工单)
|
||
-- │
|
||
-- │ order_id (一对多)
|
||
-- ▼
|
||
-- work_order_log (操作记录)
|
||
--
|