-- =============================================
-- 任务状态变更历史记录表
-- 专门记录任务状态的每一次流转，便于审计与追溯
-- =============================================

DROP TABLE IF EXISTS `sys_task_status_history`;
CREATE TABLE `sys_task_status_history` (
    `id`              BIGINT        NOT NULL AUTO_INCREMENT              COMMENT '主键ID',
    `task_id`         BIGINT        NOT NULL                             COMMENT '任务ID',
    `task_code`       VARCHAR(64)   DEFAULT NULL                        COMMENT '任务编号（冗余，方便查询）',
    `from_status`     VARCHAR(32)   DEFAULT NULL                        COMMENT '变更前状态码（NULL表示初始创建）',
    `from_status_name` VARCHAR(64)  DEFAULT NULL                        COMMENT '变更前状态名称',
    `to_status`       VARCHAR(32)   NOT NULL                            COMMENT '变更后状态码',
    `to_status_name`  VARCHAR(64)   DEFAULT NULL                        COMMENT '变更后状态名称',
    `change_reason`   VARCHAR(500)  DEFAULT NULL                        COMMENT '变更原因/备注',
    `change_source`   VARCHAR(32)   DEFAULT 'APP'                       COMMENT '触发来源：APP-移动端，ADMIN-管理后台，SYSTEM-系统自动，LEGACY-旧系统同步',
    `operator_id`     BIGINT        DEFAULT NULL                        COMMENT '操作人ID',
    `operator_name`   VARCHAR(64)   DEFAULT NULL                        COMMENT '操作人姓名',
    `change_time`     DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP  COMMENT '变更时间',
    `longitude`       DOUBLE        DEFAULT NULL                        COMMENT '操作时的经度（GPS定位）',
    `latitude`        DOUBLE        DEFAULT NULL                        COMMENT '操作时的纬度（GPS定位）',
    `location_address` VARCHAR(255) DEFAULT NULL                        COMMENT '操作时的位置地址',
    `ip_address`      VARCHAR(128)  DEFAULT NULL                        COMMENT '操作IP地址',
    `remark`          VARCHAR(500)  DEFAULT NULL                        COMMENT '备注',
    PRIMARY KEY (`id`),
    INDEX `idx_task_id`    (`task_id`),
    INDEX `idx_task_code`  (`task_code`),
    INDEX `idx_to_status`  (`to_status`),
    INDEX `idx_change_time`(`change_time`),
    INDEX `idx_operator_id`(`operator_id`),
    CONSTRAINT `fk_status_history_task` FOREIGN KEY (`task_id`) REFERENCES `sys_task`(`task_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务状态变更历史记录表';
