-- 派单评分记录表
-- 用于记录所有师傅的评分详情和各个影响因素的分值
-- 每天晚上12点定时任务更新

CREATE TABLE `dispatch_score_record` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `worker_id` bigint(20) NOT NULL COMMENT '师傅ID',
  `worker_name` varchar(100) NOT NULL COMMENT '师傅姓名',
  `worker_phone` varchar(20) DEFAULT NULL COMMENT '师傅电话',
  `order_id` bigint(20) DEFAULT NULL COMMENT '订单ID（如果是在派单过程中记录）',
  `service_id` bigint(20) DEFAULT NULL COMMENT '服务ID',
  `user_address_id` bigint(20) DEFAULT NULL COMMENT '用户地址ID',
  
  -- 各项评分
  `distance_score` decimal(5,4) DEFAULT 0.0000 COMMENT '距离评分',
  `skill_match_score` decimal(5,4) DEFAULT 0.0000 COMMENT '技能匹配评分',
  `experience_score` decimal(5,4) DEFAULT 0.0000 COMMENT '经验评分',
  `rating_score` decimal(5,4) DEFAULT 0.0000 COMMENT '评分权重',
  `availability_score` decimal(5,4) DEFAULT 0.0000 COMMENT '可用性评分',
  `new_worker_bonus_score` decimal(5,4) DEFAULT 0.0000 COMMENT '新师傅奖励评分',
  `total_score` decimal(5,4) DEFAULT 0.0000 COMMENT '综合评分',
  
  -- 各项权重
  `weight_distance` decimal(5,4) DEFAULT 0.1500 COMMENT '距离权重',
  `weight_skill_match` decimal(5,4) DEFAULT 0.2500 COMMENT '技能匹配权重',
  `weight_experience` decimal(5,4) DEFAULT 0.1500 COMMENT '经验权重',
  `weight_rating` decimal(5,4) DEFAULT 0.2000 COMMENT '评分权重',
  `weight_availability` decimal(5,4) DEFAULT 0.1500 COMMENT '可用性权重',
  `weight_new_worker_bonus` decimal(5,4) DEFAULT 0.1000 COMMENT '新师傅奖励权重',
  
  -- 详细数据
  `distance_km` decimal(10,2) DEFAULT NULL COMMENT '实际距离（公里）',
  `skill_match_count` int(11) DEFAULT 0 COMMENT '匹配技能数量',
  `total_skills_count` int(11) DEFAULT 0 COMMENT '总技能数量',
  `completed_orders_count` int(11) DEFAULT 0 COMMENT '已完成订单数量',
  `current_orders_count` int(11) DEFAULT 0 COMMENT '当前进行中订单数量',
  `is_new_worker` tinyint(1) DEFAULT 0 COMMENT '是否新师傅（1是，0否）',
  `registration_days` int(11) DEFAULT 0 COMMENT '注册天数',
  
  -- 位置信息
  `worker_latitude` varchar(20) DEFAULT NULL COMMENT '师傅纬度',
  `worker_longitude` varchar(20) DEFAULT NULL COMMENT '师傅经度',
  `user_latitude` varchar(20) DEFAULT NULL COMMENT '用户纬度',
  `user_longitude` varchar(20) DEFAULT NULL COMMENT '用户经度',
  `city_code` varchar(20) DEFAULT NULL COMMENT '城市编码',
  `district_code` varchar(20) DEFAULT NULL COMMENT '区县编码',
  
  -- 状态信息
  `worker_status` int(11) DEFAULT 1 COMMENT '师傅状态（1启用，0禁用）',
  `is_work` int(11) DEFAULT 1 COMMENT '是否工作（1是，0否）',
  `is_stop` int(11) DEFAULT 0 COMMENT '是否停止（1是，0否）',
  `has_unfinished_orders` tinyint(1) DEFAULT 0 COMMENT '是否有未完成订单（1是，0否）',
  `is_available` tinyint(1) DEFAULT 1 COMMENT '是否可用（1是，0否）',
  
  -- 排名信息
  `rank_position` int(11) DEFAULT 0 COMMENT '排名位置',
  `total_candidates` int(11) DEFAULT 0 COMMENT '总候选人数',
  `is_selected` tinyint(1) DEFAULT 0 COMMENT '是否被选中（1是，0否）',
  `selection_reason` varchar(500) DEFAULT NULL COMMENT '选中原因',
  
  -- 时间信息
  `score_calculation_time` datetime DEFAULT NULL COMMENT '评分计算时间',
  `last_update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  
  -- 备注
  `remark` varchar(1000) DEFAULT NULL COMMENT '备注信息',
  
  PRIMARY KEY (`id`),
  KEY `idx_worker_id` (`worker_id`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_total_score` (`total_score`),
  KEY `idx_rank_position` (`rank_position`),
  KEY `idx_is_selected` (`is_selected`),
  KEY `idx_score_calculation_time` (`score_calculation_time`),
  KEY `idx_worker_status` (`worker_status`),
  KEY `idx_is_available` (`is_available`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='派单评分记录表';

-- 创建索引优化查询性能
CREATE INDEX `idx_worker_score_time` ON `dispatch_score_record` (`worker_id`, `score_calculation_time`);
CREATE INDEX `idx_score_rank` ON `dispatch_score_record` (`total_score` DESC, `rank_position`);
CREATE INDEX `idx_available_workers` ON `dispatch_score_record` (`is_available`, `total_score` DESC); 