Files
iot-device-management-service/docs/work_order_schema.sql

130 lines
6.0 KiB
MySQL
Raw Normal View History

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