-- ============================================================
-- 物业人员管理系统 - 数据库建表SQL
-- 适用数据库: MySQL 5.7+
-- 功能: 定位轨迹、上下班打卡、保安巡更、保洁作业、维修工单
-- ============================================================

CREATE DATABASE IF NOT EXISTS property_staff DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE property_staff;

-- ============================================================
-- 1. 用户表（扩展物业人员信息）
-- ============================================================
DROP TABLE IF EXISTS `property_user`;
CREATE TABLE `property_user` (
  `user_id`        VARCHAR(32)  NOT NULL COMMENT '用户ID',
  `name`           VARCHAR(64)  NOT NULL COMMENT '姓名',
  `tel`            VARCHAR(20)  NOT NULL COMMENT '手机号',
  `work_type`      VARCHAR(16)  NOT NULL COMMENT '工种: CLEANING=保洁 SECURITY=保安 ENGINEERING=工程维修',
  `role`           VARCHAR(16)  NOT NULL DEFAULT 'STAFF' COMMENT '角色: ADMIN=管理员 STAFF=员工',
  `status`         VARCHAR(8)   NOT NULL DEFAULT 'ON' COMMENT '状态: ON=在职 OFF=离职',
  `device_id`      VARCHAR(128)  DEFAULT NULL COMMENT '绑定设备ID',
  `store_id`       VARCHAR(32)   DEFAULT NULL COMMENT '商户ID',
  `community_id`   VARCHAR(32)   DEFAULT NULL COMMENT '所属项目ID',
  `create_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`user_id`),
  KEY `idx_work_type` (`work_type`),
  KEY `idx_tel` (`tel`),
  KEY `idx_store_id` (`store_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物业人员表';

-- ============================================================
-- 2. 定位轨迹表
-- ============================================================
DROP TABLE IF EXISTS `location_track`;
CREATE TABLE `location_track` (
  `id`             BIGINT       NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id`        VARCHAR(32)  NOT NULL COMMENT '用户ID',
  `longitude`      DECIMAL(10,7) NOT NULL COMMENT '经度',
  `latitude`       DECIMAL(10,7) NOT NULL COMMENT '纬度',
  `report_time`    DATETIME     NOT NULL COMMENT '上报时间',
  `bind_relation`  VARCHAR(32)   DEFAULT NULL COMMENT '绑定关系(工单ID/巡更ID/作业ID)',
  `loc_status`     VARCHAR(8)   NOT NULL DEFAULT 'NORMAL' COMMENT '定位状态: NORMAL=正常 ABNORMAL=异常',
  `create_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_report_time` (`report_time`),
  KEY `idx_user_time` (`user_id`, `report_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定位轨迹表';

-- ============================================================
-- 3. 上下班打卡表
-- ============================================================
DROP TABLE IF EXISTS `attendance_record`;
CREATE TABLE `attendance_record` (
  `id`             VARCHAR(32)  NOT NULL COMMENT '打卡记录ID',
  `user_id`        VARCHAR(32)  NOT NULL COMMENT '用户ID',
  `user_name`      VARCHAR(64)  NOT NULL COMMENT '用户姓名',
  `work_type`      VARCHAR(16)  NOT NULL COMMENT '工种',
  `punch_type`     VARCHAR(8)   NOT NULL COMMENT '打卡类型: ON=上班 OFF=下班',
  `punch_time`     DATETIME     NOT NULL COMMENT '打卡时间',
  `punch_address`  VARCHAR(256)  DEFAULT NULL COMMENT '打卡地点描述',
  `longitude`      DECIMAL(10,7) NOT NULL COMMENT '打卡经度',
  `latitude`       DECIMAL(10,7) NOT NULL COMMENT '打卡纬度',
  `store_id`       VARCHAR(32)   DEFAULT NULL COMMENT '商户ID',
  `create_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_punch_time` (`punch_time`),
  KEY `idx_work_type` (`work_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='上下班打卡记录表';

-- ============================================================
-- 4. 保安巡更记录表
-- ============================================================
DROP TABLE IF EXISTS `patrol_record`;
CREATE TABLE `patrol_record` (
  `id`             VARCHAR(32)  NOT NULL COMMENT '巡更记录ID',
  `user_id`        VARCHAR(32)  NOT NULL COMMENT '巡更人ID',
  `user_name`      VARCHAR(64)  NOT NULL COMMENT '巡更人姓名',
  `patrol_location` VARCHAR(256) NOT NULL COMMENT '巡更地点',
  `patrol_content` TEXT          DEFAULT NULL COMMENT '巡更内容',
  `patrol_time`    DATETIME     NOT NULL COMMENT '巡更时间',
  `longitude`      DECIMAL(10,7) NOT NULL COMMENT '巡更经度',
  `latitude`       DECIMAL(10,7) NOT NULL COMMENT '巡更纬度',
  `images`         TEXT          DEFAULT NULL COMMENT '图片URL列表(JSON数组)',
  `remark`         VARCHAR(512)  DEFAULT NULL COMMENT '备注',
  `store_id`       VARCHAR(32)   DEFAULT NULL COMMENT '商户ID',
  `create_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_patrol_time` (`patrol_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保安巡更记录表';

-- ============================================================
-- 5. 保洁作业记录表
-- ============================================================
DROP TABLE IF EXISTS `cleaning_record`;
CREATE TABLE `cleaning_record` (
  `id`             VARCHAR(32)  NOT NULL COMMENT '作业记录ID',
  `user_id`        VARCHAR(32)  NOT NULL COMMENT '作业人ID',
  `user_name`      VARCHAR(64)  NOT NULL COMMENT '作业人姓名',
  `work_area`      VARCHAR(256) NOT NULL COMMENT '作业区域',
  `work_content`   TEXT          DEFAULT NULL COMMENT '作业内容',
  `work_time`      DATETIME     NOT NULL COMMENT '作业时间',
  `longitude`      DECIMAL(10,7) NOT NULL COMMENT '作业经度',
  `latitude`       DECIMAL(10,7) NOT NULL COMMENT '作业纬度',
  `images`         TEXT          DEFAULT NULL COMMENT '图片URL列表(JSON数组)',
  `remark`         VARCHAR(512)  DEFAULT NULL COMMENT '备注',
  `store_id`       VARCHAR(32)   DEFAULT NULL COMMENT '商户ID',
  `create_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_work_time` (`work_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='保洁作业记录表';

-- ============================================================
-- 6. 维修工单表
-- ============================================================
DROP TABLE IF EXISTS `repair_order`;
CREATE TABLE `repair_order` (
  `id`             VARCHAR(32)  NOT NULL COMMENT '工单ID',
  `submitter_id`   VARCHAR(32)  NOT NULL COMMENT '提交人ID',
  `submitter_name` VARCHAR(64)  NOT NULL COMMENT '提交人姓名',
  `title`          VARCHAR(256) NOT NULL COMMENT '工单标题',
  `description`    TEXT          DEFAULT NULL COMMENT '工单描述',
  `repair_location` VARCHAR(256) NOT NULL COMMENT '报修位置',
  `longitude`      DECIMAL(10,7) NOT NULL COMMENT '报修经度',
  `latitude`       DECIMAL(10,7) NOT NULL COMMENT '报修纬度',
  `repairer_id`    VARCHAR(32)   DEFAULT NULL COMMENT '维修人ID（工程维修人员）',
  `repairer_name`  VARCHAR(64)   DEFAULT NULL COMMENT '维修人姓名',
  `status`         VARCHAR(16)  NOT NULL DEFAULT 'PENDING' COMMENT '工单状态: PENDING=待接单 REPAIRING=维修中 COMPLETED=已完成 CANCELLED=已取消',
  `images`         TEXT          DEFAULT NULL COMMENT '报修图片URL列表(JSON数组)',
  `repair_result`  TEXT          DEFAULT NULL COMMENT '维修结果',
  `result_images`  TEXT          DEFAULT NULL COMMENT '维修结果图片(JSON数组)',
  `create_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `accept_time`    DATETIME      DEFAULT NULL COMMENT '接单时间',
  `complete_time`  DATETIME      DEFAULT NULL COMMENT '完成时间',
  `store_id`       VARCHAR(32)   DEFAULT NULL COMMENT '商户ID',
  PRIMARY KEY (`id`),
  KEY `idx_submitter_id` (`submitter_id`),
  KEY `idx_repairer_id` (`repairer_id`),
  KEY `idx_status` (`status`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维修工单表';

-- ============================================================
-- 7. 消息通知表
-- ============================================================
DROP TABLE IF EXISTS `message_notify`;
CREATE TABLE `message_notify` (
  `id`             VARCHAR(32)  NOT NULL COMMENT '通知ID',
  `user_id`        VARCHAR(32)  NOT NULL COMMENT '接收人ID',
  `title`          VARCHAR(256) NOT NULL COMMENT '通知标题',
  `content`        TEXT          DEFAULT NULL COMMENT '通知内容',
  `msg_type`       VARCHAR(32)  NOT NULL COMMENT '通知类型: REPAIR_STATUS=工单状态 REPAIR_COMPLETE=维修完成',
  `relate_id`      VARCHAR(32)   DEFAULT NULL COMMENT '关联业务ID',
  `is_read`        TINYINT(1)   NOT NULL DEFAULT 0 COMMENT '是否已读: 0=未读 1=已读',
  `create_time`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_is_read` (`is_read`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知表';
