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