Files
iot-device-management-service/docs/work_order_schema.sql
2026-03-18 16:41:02 +08:00

130 lines
6.0 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================
-- 安保工单体系 - 数据库表结构
-- 数据库: 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_type5分钟内只生成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 (操作记录)
--