-- 定时折扣活动模块数据库表
-- 创建时间：2026-03-19
-- 功能说明：针对售卖机中白天未售罄的餐品（特别是自制餐品）在指定时间自动打折销售

-- 1. 定时折扣活动配置表
CREATE TABLE IF NOT EXISTS `t_timed_discount_activity` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_name` varchar(100) NOT NULL COMMENT '活动名称',
  `activity_desc` varchar(500) DEFAULT NULL COMMENT '活动描述',
  `start_time` time NOT NULL COMMENT '每日开始时间（如20:00:00）',
  `end_time` time DEFAULT NULL COMMENT '每日结束时间（如23:59:59，NULL表示到次日营业开始）',
  `discount_type` tinyint NOT NULL DEFAULT 1 COMMENT '折扣类型：1-固定折扣 2-阶梯折扣 3-固定价格',
  `discount_value` decimal(10,2) NOT NULL COMMENT '折扣值（折扣比例如0.7表示7折，或固定价格）',
  `min_discount_price` decimal(10,2) DEFAULT NULL COMMENT '最低折扣价（防止价格过低）',
  `apply_scope` tinyint NOT NULL DEFAULT 1 COMMENT '适用范围：1-全部门店 2-指定门店',
  `device_scope` tinyint NOT NULL DEFAULT 1 COMMENT '设备范围：1-全部设备 2-指定设备',
  `product_scope` tinyint NOT NULL DEFAULT 1 COMMENT '商品范围：1-全部商品 2-指定分类 3-指定商品',
  `product_types` varchar(500) DEFAULT NULL COMMENT '适用商品分类（逗号分隔，如：自制餐品,盒饭）',
  `priority_product_types` varchar(500) DEFAULT NULL COMMENT '优先商品分类（自制餐品等，逗号分隔）',
  `min_stock` int NOT NULL DEFAULT 1 COMMENT '最低库存阈值（低于此数量不参与优惠）',
  `max_stock` int DEFAULT NULL COMMENT '最高库存阈值（高于此数量不参与优惠，NULL不限制）',
  `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：0-禁用 1-启用',
  `auto_execute` tinyint NOT NULL DEFAULT 1 COMMENT '是否自动执行：0-否 1-是',
  `notify_on_execute` tinyint NOT NULL DEFAULT 0 COMMENT '执行时是否通知：0-否 1-是',
  `creator_id` bigint NOT NULL COMMENT '创建人ID',
  `creator_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记：0-正常 1-已删除',
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`),
  KEY `idx_time` (`start_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时折扣活动配置表';

-- 2. 定时折扣活动门店关联表
CREATE TABLE IF NOT EXISTS `t_timed_discount_shop` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `shop_id` bigint NOT NULL COMMENT '门店ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_shop` (`activity_id`, `shop_id`),
  KEY `idx_shop` (`shop_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时折扣活动门店关联表';

-- 2.1 定时折扣活动设备关联表
CREATE TABLE IF NOT EXISTS `t_timed_discount_device` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `device_id` varchar(50) NOT NULL COMMENT '设备ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_device` (`activity_id`, `device_id`),
  KEY `idx_device` (`device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时折扣活动设备关联表';

-- 3. 定时折扣活动商品关联表
CREATE TABLE IF NOT EXISTS `t_timed_discount_product` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `product_id` bigint NOT NULL COMMENT '商品ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_product` (`activity_id`, `product_id`),
  KEY `idx_product` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时折扣活动商品关联表';

-- 4. 定时折扣执行记录表
CREATE TABLE IF NOT EXISTS `t_timed_discount_record` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `activity_name` varchar(100) NOT NULL COMMENT '活动名称',
  `execute_date` date NOT NULL COMMENT '执行日期',
  `execute_time` datetime NOT NULL COMMENT '执行时间',
  `shop_id` bigint DEFAULT NULL COMMENT '门店ID',
  `shop_name` varchar(100) DEFAULT NULL COMMENT '门店名称',
  `device_id` varchar(50) DEFAULT NULL COMMENT '设备ID',
  `device_name` varchar(100) DEFAULT NULL COMMENT '设备名称',
  `total_products` int NOT NULL DEFAULT 0 COMMENT '处理商品总数',
  `priority_products` int NOT NULL DEFAULT 0 COMMENT '优先商品数（自制餐品等）',
  `total_stock` int NOT NULL DEFAULT 0 COMMENT '总库存数量',
  `original_value` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '原价总价值',
  `discount_value` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '折扣后总价值',
  `saved_value` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '优惠金额',
  `status` tinyint NOT NULL DEFAULT 1 COMMENT '执行状态：1-成功 2-部分成功 3-失败',
  `error_message` varchar(500) DEFAULT NULL COMMENT '错误信息',
  `execute_duration` int DEFAULT NULL COMMENT '执行耗时（毫秒）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_activity` (`activity_id`),
  KEY `idx_date` (`execute_date`),
  KEY `idx_shop` (`shop_id`),
  KEY `idx_device` (`device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时折扣执行记录表';

-- 5. 价格调整明细表
CREATE TABLE IF NOT EXISTS `t_price_adjustment_log` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `record_id` bigint NOT NULL COMMENT '执行记录ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `shop_id` bigint DEFAULT NULL COMMENT '门店ID',
  `shop_name` varchar(100) DEFAULT NULL COMMENT '门店名称',
  `device_id` varchar(50) NOT NULL COMMENT '设备ID',
  `device_name` varchar(100) DEFAULT NULL COMMENT '设备名称',
  `product_id` bigint NOT NULL COMMENT '商品ID',
  `product_name` varchar(100) NOT NULL COMMENT '商品名称',
  `product_type` varchar(50) DEFAULT NULL COMMENT '商品分类',
  `stock` int NOT NULL COMMENT '当前库存',
  `original_price` decimal(10,2) NOT NULL COMMENT '原价',
  `discount_type` tinyint NOT NULL COMMENT '折扣类型',
  `discount_value` decimal(10,2) NOT NULL COMMENT '折扣值',
  `discounted_price` decimal(10,2) NOT NULL COMMENT '折扣后价格',
  `is_priority` tinyint NOT NULL DEFAULT 0 COMMENT '是否优先商品（自制餐品等）',
  `adjust_time` datetime NOT NULL COMMENT '调整时间',
  `restore_time` datetime DEFAULT NULL COMMENT '恢复时间',
  `restore_status` tinyint NOT NULL DEFAULT 0 COMMENT '恢复状态：0-未恢复 1-已恢复 2-已售出',
  `sale_quantity` int NOT NULL DEFAULT 0 COMMENT '售出数量',
  `sale_amount` decimal(12,2) DEFAULT NULL COMMENT '销售金额',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_record` (`record_id`),
  KEY `idx_activity` (`activity_id`),
  KEY `idx_device_product` (`device_id`, `product_id`),
  KEY `idx_adjust_time` (`adjust_time`),
  KEY `idx_restore_status` (`restore_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='价格调整明细表';

-- 6. 定时折扣销售统计表
CREATE TABLE IF NOT EXISTS `t_timed_discount_statistics` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `stat_date` date NOT NULL COMMENT '统计日期',
  `shop_id` bigint DEFAULT NULL COMMENT '门店ID',
  `shop_name` varchar(100) DEFAULT NULL COMMENT '门店名称',
  `total_adjusted_products` int NOT NULL DEFAULT 0 COMMENT '调价商品总数',
  `priority_products` int NOT NULL DEFAULT 0 COMMENT '优先商品数（自制餐品）',
  `total_adjusted_stock` int NOT NULL DEFAULT 0 COMMENT '调价库存总量',
  `total_sold_quantity` int NOT NULL DEFAULT 0 COMMENT '售出总量',
  `priority_sold_quantity` int NOT NULL DEFAULT 0 COMMENT '优先商品售出量',
  `original_value` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '原价总价值',
  `actual_sales` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '实际销售额',
  `saved_amount` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '优惠金额',
  `waste_reduction_rate` decimal(5,2) DEFAULT NULL COMMENT '浪费减少率（%）',
  `sell_through_rate` decimal(5,2) DEFAULT NULL COMMENT '售罄率（%）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_date_shop` (`activity_id`, `stat_date`, `shop_id`),
  KEY `idx_stat_date` (`stat_date`),
  KEY `idx_shop` (`shop_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时折扣销售统计表';

-- 插入默认活动配置示例
INSERT INTO `t_timed_discount_activity` 
(`activity_name`, `activity_desc`, `start_time`, `end_time`, `discount_type`, `discount_value`, 
 `min_discount_price`, `apply_scope`, `product_scope`, `product_types`, `priority_product_types`, 
 `min_stock`, `status`, `auto_execute`, `creator_id`, `creator_name`)
VALUES 
('晚间餐品优惠', '每日晚间对未售罄餐品进行折扣销售，减少浪费', '20:00:00', '23:59:59', 1, 0.50, 
 1.00, 1, 2, '自制餐品,盒饭,水饮,副食', '自制餐品,盒饭', 
 1, 1, 1, 1, '系统管理员');
