diff --git a/docs/数据库迁移详细文档/阶段1-业务分析和表结构设计.md b/docs/数据库迁移详细文档/阶段1-业务分析和表结构设计.md index b16b7e0d..7477709d 100644 --- a/docs/数据库迁移详细文档/阶段1-业务分析和表结构设计.md +++ b/docs/数据库迁移详细文档/阶段1-业务分析和表结构设计.md @@ -37,6 +37,10 @@ - order (15条) - 订单主表 - order_list (67条) - 订单详情 +钻石系统: + - diamond_orders (398条) - 钻石订单 (有实际交易数据) + - diamond_products (5条) - 钻石商品配置 + 财务相关: - profit_money (26,061条) - 余额明细 - profit_integral (33,487条) - 积分明细 @@ -109,6 +113,127 @@ VIP系统: #### 任务描述 基于snake_case命名规范,重新设计表结构 +#### 商品表字段分析 + +基于数据库实际查询结果,goods表共有54个字段,按业务功能分类如下: + +##### 🔥 核心业务字段 (必须迁移) +```yaml +基础信息 (7字段): + - id: 主键 + - category_id: 分类ID + - title: 商品标题 + - imgurl: 商品图片 + - imgurl_detail: 详情图片 + - prize_imgurl: 奖品图片 + - goods_describe: 商品描述 (402/503商品有描述) + +价格库存 (4字段): + - price: 商品价格 + - stock: 总库存 + - sale_stock: 已售库存 + - show_price: 显示价格(营销) + +状态控制 (4字段): + - type: 商品类型 (1一番赏 2无限赏等) + - status: 状态 (0下架 1上架) + - sort: 排序权重 + - new_is: 新品标识 + +时间字段 (4字段): + - sale_time: 开售时间 + - addtime: 创建时间 + - update_time: 更新时间 + - delete_time: 删除时间 +``` + +##### ⚡ 重要功能字段 (高使用率) +```yaml +福利屋功能 (5字段) - 383/503商品启用: + - is_flw: 福利屋开关 + - flw_start_time: 开始时间 + - flw_end_time: 结束时间 + - open_time: 开放时间 + - is_open: 是否开放 + +限购控制 (4字段): + - daily_xiangou: 每日限购 (重要业务逻辑) + - quanju_xiangou: 全局限购 + - unlock_amount: 解锁金额门槛 + - user_lv: 用户等级限制 + +抽奖核心 (3字段): + - prize_num: 奖品数量 + - choujiang_xianzhi: 抽奖限制 + - lock_is/lock_time: 锁箱功能 + +自动下架 (4字段) - 47/503商品启用: + - is_auto_xiajia: 自动下架开关 + - xiajia_lirun: 利润阈值 + - xiajia_auto_coushu: 自动抽数 + - xiajia_jine: 金额阈值 +``` + +##### 🎯 特色功能字段 (中等使用率) +```yaml +营销功能 (4字段): + - coupon_is/coupon_pro: 优惠券功能 + - integral_is: 积分功能 + - is_shou_zhe: 折扣标识 + - show_is: 首页显示控制 + +定价策略 (4字段): + - day_price: 日价格 + - mouth_price: 月价格 + - mouth_pay_price: 月支付价格 + - day_pay_price: 日支付价格 + +卡片系统 (5字段): + - card_banner: 卡片横幅 + - card_set: 卡片设置JSON + - card_notice: 卡片通知 + - card_num: 卡片数量 + - item_card_id: 道具卡ID + +同步功能 (2字段) - 21/503商品有异步代码: + - async_code: 异步同步代码 + - async_date: 异步同步时间 +``` + +##### 🔧 高级功能字段 (低使用率但重要) +```yaml +灵珠系统 (3字段) - 8个商品启用: + - lingzhu_is: 领主功能开关 + - lingzhu_fan: 领主返还 + - lingzhu_shang_id: 领主奖品ID + +连击系统 (2字段): + - lian_ji_num: 连击数量 + - lian_ji_shang_id: 连击奖品ID + +暴怒系统 (2字段): + - rage_is: 暴怒功能开关 + - rage: 暴怒值 + +拳王系统 (1字段): + - king_user_id: 拳王用户ID +``` + +##### 📊 字段使用统计 +```yaml +高使用率字段 (>300个商品): + - is_flw: 383个商品 (福利屋功能) + - goods_describe: 402个商品 (商品描述) + +中使用率字段 (20-100个商品): + - is_auto_xiajia: 47个商品 (自动下架) + - async_code: 21个商品 (异步同步) + +低使用率字段 (<20个商品): + - lingzhu_is: 8个商品 (灵珠功能) + - 其他特殊功能字段 +``` + #### 具体工作 - [ ] 统一命名规范为snake_case - [ ] 优化数据类型和字段长度 @@ -122,27 +247,30 @@ VIP系统: -- 用户主表 CREATE TABLE users ( id INT IDENTITY(1,1) PRIMARY KEY, - open_id NVARCHAR(50) NOT NULL, - union_id NVARCHAR(255) NULL, - gzh_open_id NVARCHAR(255) NULL, - mobile NVARCHAR(15) NULL, - nickname NVARCHAR(255) NOT NULL, - head_img NVARCHAR(500) NOT NULL, - parent_id INT NOT NULL DEFAULT 0, - money DECIMAL(18,2) NOT NULL DEFAULT 0, - money2 DECIMAL(18,2) NOT NULL DEFAULT 0, - integral DECIMAL(18,2) NOT NULL DEFAULT 0, - score DECIMAL(18,2) NOT NULL DEFAULT 0, - ou_qi INT NOT NULL DEFAULT 0, - ou_qi_level INT NOT NULL DEFAULT 0, - vip_level TINYINT NOT NULL DEFAULT 1, - status TINYINT NOT NULL DEFAULT 1, - is_test INT NOT NULL DEFAULT 0, - uid NVARCHAR(16) NOT NULL, - click_id INT NULL, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), - updated_at DATETIME2 NOT NULL DEFAULT GETDATE(), - last_login_at DATETIME2 NULL, + open_id NVARCHAR(50) NOT NULL COMMENT '微信OpenID', + union_id NVARCHAR(255) NULL COMMENT '微信UnionID', + gzh_open_id NVARCHAR(255) NULL COMMENT '公众号OpenID', + mobile NVARCHAR(15) NULL COMMENT '手机号', + nickname NVARCHAR(255) NOT NULL COMMENT '昵称', + head_img NVARCHAR(500) NOT NULL COMMENT '头像URL', + parent_id INT NOT NULL DEFAULT 0 COMMENT '推荐人ID', + money DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '余额', + money2 DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '积分货币', + integral DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '积分', + score DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '评分', + ou_qi INT NOT NULL DEFAULT 0 COMMENT '欧气值', + ou_qi_level INT NOT NULL DEFAULT 0 COMMENT '欧气等级', + vip_level TINYINT NOT NULL DEFAULT 1 COMMENT 'VIP等级', + status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0禁用 1正常', + is_test INT NOT NULL DEFAULT 0 COMMENT '是否测试账号', + uid NVARCHAR(16) NOT NULL COMMENT '用户唯一标识', + click_id INT NULL COMMENT '点击ID', + draw_num INT NOT NULL DEFAULT 0 COMMENT '抽奖次数', + password NVARCHAR(40) NULL COMMENT '密码', + is_use_coupon TINYINT NOT NULL DEFAULT 0 COMMENT '是否使用优惠券', + created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间', + updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间', + last_login_at DATETIME2 NULL COMMENT '最后登录时间', -- 索引 INDEX ix_users_open_id (open_id), @@ -155,23 +283,23 @@ CREATE TABLE users ( -- 约束 CONSTRAINT uk_users_open_id UNIQUE (open_id), CONSTRAINT uk_users_uid UNIQUE (uid) -); +) COMMENT = '用户主表'; -- 用户账户表 CREATE TABLE user_accounts ( id INT IDENTITY(1,1) PRIMARY KEY, - user_id INT NOT NULL, - account_token NVARCHAR(255) NOT NULL, - token_num NVARCHAR(50) NOT NULL, - token_time BIGINT NOT NULL, - last_login_time BIGINT NOT NULL, - last_login_ip BIGINT NOT NULL, - last_login_ip_str NVARCHAR(45) NOT NULL, - ip_province NVARCHAR(50) NULL, - ip_city NVARCHAR(50) NULL, - ip_adcode NVARCHAR(20) NULL, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), - updated_at DATETIME2 NOT NULL DEFAULT GETDATE(), + user_id INT NOT NULL COMMENT '用户ID', + account_token NVARCHAR(255) NOT NULL COMMENT '账户令牌', + token_num NVARCHAR(50) NOT NULL COMMENT '令牌编号', + token_time BIGINT NOT NULL COMMENT '令牌时间', + last_login_time BIGINT NOT NULL COMMENT '最后登录时间戳', + last_login_ip BIGINT NOT NULL COMMENT '最后登录IP(数值)', + last_login_ip_str NVARCHAR(45) NOT NULL COMMENT '最后登录IP(字符串)', + ip_province NVARCHAR(50) NULL COMMENT 'IP省份', + ip_city NVARCHAR(50) NULL COMMENT 'IP城市', + ip_adcode NVARCHAR(20) NULL COMMENT 'IP区域代码', + created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间', + updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间', -- 索引 INDEX ix_user_accounts_user_id (user_id), @@ -179,81 +307,155 @@ CREATE TABLE user_accounts ( -- 外键 CONSTRAINT fk_user_accounts_user_id FOREIGN KEY (user_id) REFERENCES users(id) -); +) COMMENT = '用户账户信息表'; -- 用户登录日志表 CREATE TABLE user_login_logs ( id INT IDENTITY(1,1) PRIMARY KEY, - user_id INT NOT NULL, - platform NVARCHAR(50) NOT NULL, - ip_address NVARCHAR(45) NOT NULL, - location NVARCHAR(100) NULL, - device NVARCHAR(100) NULL, - device_info NVARCHAR(500) NULL, - login_time DATETIME2 NOT NULL DEFAULT GETDATE(), + user_id INT NOT NULL COMMENT '用户ID', + platform NVARCHAR(50) NOT NULL COMMENT '登录平台', + ip_address NVARCHAR(45) NOT NULL COMMENT 'IP地址', + location NVARCHAR(100) NULL COMMENT '登录地点', + device NVARCHAR(100) NULL COMMENT '设备信息', + device_info NVARCHAR(500) NULL COMMENT '详细设备信息', + login_time DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '登录时间', -- 索引 INDEX ix_user_login_logs_user_id (user_id), INDEX ix_user_login_logs_login_time (login_time), INDEX ix_user_login_logs_platform (platform) -); +) COMMENT = '用户登录日志表'; ``` ##### 商品相关表 ```sql --- 商品主表 +-- 商品主表 (完整54字段结构) CREATE TABLE goods ( id INT IDENTITY(1,1) PRIMARY KEY, - category_id INT NOT NULL DEFAULT 0, - title NVARCHAR(255) NOT NULL, - img_url NVARCHAR(500) NOT NULL, - img_url_detail NVARCHAR(500) NOT NULL, - price DECIMAL(18,2) NOT NULL DEFAULT 0, - stock INT NOT NULL DEFAULT 0, - sale_stock INT NOT NULL DEFAULT 0, - type TINYINT NOT NULL DEFAULT 0, - status TINYINT NOT NULL DEFAULT 1, - is_lock TINYINT NOT NULL DEFAULT 0, - lock_time INT NOT NULL DEFAULT 0, - is_discount TINYINT NOT NULL DEFAULT 0, - is_new TINYINT NOT NULL DEFAULT 0, - is_show TINYINT NOT NULL DEFAULT 0, - unlock_amount DECIMAL(18,2) NOT NULL DEFAULT 0, - daily_limit INT NOT NULL DEFAULT 0, - global_limit INT NOT NULL DEFAULT 0, - sort_order INT NOT NULL DEFAULT 1, - sale_time DATETIME2 NULL, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), - updated_at DATETIME2 NOT NULL DEFAULT GETDATE(), - deleted_at DATETIME2 NULL, + + -- 基础信息 + category_id INT NOT NULL DEFAULT 0 COMMENT '分类ID', + title NVARCHAR(255) NOT NULL COMMENT '商品标题', + img_url NVARCHAR(500) NOT NULL COMMENT '商品图片URL', + img_url_detail NVARCHAR(500) NOT NULL COMMENT '商品详情图片URL', + prize_img_url NVARCHAR(500) NULL COMMENT '奖品图片URL', + goods_describe NVARCHAR(300) NULL COMMENT '商品描述', + + -- 价格和库存 + price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '商品价格', + stock INT NOT NULL DEFAULT 0 COMMENT '总库存', + sale_stock INT NOT NULL DEFAULT 0 COMMENT '已售库存', + show_price NVARCHAR(100) NULL COMMENT '显示价格(营销用)', + + -- 定价策略 + day_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '日价格', + mouth_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '月价格', + mouth_pay_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '月支付价格', + day_pay_price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '日支付价格', + + -- 商品状态和类型 + type TINYINT NOT NULL DEFAULT 0 COMMENT '商品类型 1一番赏 2无限赏 3擂台赏等', + status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0下架 1上架 2待审核 3预售', + sort_order INT NOT NULL DEFAULT 1 COMMENT '排序权重', + + -- 显示控制 + is_show TINYINT NOT NULL DEFAULT 0 COMMENT '首页显示 0显示 1不显示', + is_discount TINYINT NOT NULL DEFAULT 0 COMMENT '是否折扣 0否 1是', + is_new TINYINT NOT NULL DEFAULT 0 COMMENT '是否新品 0否 1是', + + -- 锁箱功能 + is_lock TINYINT NOT NULL DEFAULT 0 COMMENT '是否锁箱 0否 1是', + lock_time INT NOT NULL DEFAULT 0 COMMENT '锁箱时间(秒)', + + -- 功能开关 + coupon_is TINYINT NOT NULL DEFAULT 0 COMMENT '优惠券功能 0关闭 1开启', + coupon_pro INT NOT NULL DEFAULT 0 COMMENT '优惠券概率', + integral_is TINYINT NOT NULL DEFAULT 0 COMMENT '积分功能 0关闭 1开启', + + -- 抽奖相关 + prize_num INT NOT NULL DEFAULT 0 COMMENT '奖品数量', + draw_limit INT NOT NULL DEFAULT 0 COMMENT '抽奖限制次数', + + -- 限购控制 + daily_limit INT NOT NULL DEFAULT 0 COMMENT '每日限购数量 0不限制', + global_limit INT NOT NULL DEFAULT 0 COMMENT '全局限购数量 0不限制', + unlock_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '解锁金额门槛', + user_level INT NOT NULL DEFAULT -1 COMMENT '用户等级限制 -1不限制', + + -- 特殊功能 + rage_is TINYINT NOT NULL DEFAULT 0 COMMENT '暴怒功能 0关闭 1开启', + rage INT NOT NULL DEFAULT 0 COMMENT '暴怒值', + lingzhu_is TINYINT NOT NULL DEFAULT 0 COMMENT '灵珠功能 0关闭 1开启', + lingzhu_fan INT NOT NULL DEFAULT 0 COMMENT '灵珠返还', + lingzhu_shang_id INT NOT NULL DEFAULT 0 COMMENT '灵珠奖品ID', + lian_ji_num INT NOT NULL DEFAULT 0 COMMENT '连击数量', + lian_ji_shang_id INT NOT NULL DEFAULT 0 COMMENT '连击奖品ID', + king_user_id INT NOT NULL DEFAULT 0 COMMENT '拳王用户ID', + + -- 福利屋功能 (重要!383个商品启用) + is_flw TINYINT NOT NULL DEFAULT 0 COMMENT '福利屋功能 0关闭 1开启', + flw_start_time INT NOT NULL DEFAULT 0 COMMENT '福利屋开始时间戳', + flw_end_time INT NOT NULL DEFAULT 0 COMMENT '福利屋结束时间戳', + open_time INT NOT NULL DEFAULT 0 COMMENT '开放时间戳', + is_open TINYINT NOT NULL DEFAULT 0 COMMENT '是否开放 0关闭 1开放', + + -- 自动下架功能 (47个商品启用) + is_auto_xiajia TINYINT NOT NULL DEFAULT 0 COMMENT '自动下架 0关闭 1开启', + xiajia_lirun INT NOT NULL DEFAULT 0 COMMENT '下架利润阈值', + xiajia_auto_coushu INT NOT NULL DEFAULT 0 COMMENT '下架自动抽数', + xiajia_jine INT NOT NULL DEFAULT 0 COMMENT '下架金额阈值', + + -- 卡片功能 + card_banner NVARCHAR(500) NULL COMMENT '卡片横幅图片', + card_set NVARCHAR(MAX) NULL COMMENT '卡片设置JSON', + card_notice NVARCHAR(500) NULL COMMENT '卡片通知', + card_num INT NOT NULL DEFAULT 1 COMMENT '卡片数量', + item_card_id INT NOT NULL DEFAULT 0 COMMENT '道具卡ID', + + -- 同步相关 (21个商品有异步代码) + async_code NVARCHAR(64) NULL COMMENT '异步同步代码', + async_date DATETIME2 NULL COMMENT '异步同步时间', + + -- 时间字段 + sale_time INT NOT NULL DEFAULT 0 COMMENT '开售时间戳', + created_at INT NOT NULL COMMENT '创建时间戳', + updated_at INT NOT NULL DEFAULT 0 COMMENT '更新时间戳', + deleted_at INT NULL COMMENT '删除时间戳', -- 索引 INDEX ix_goods_type_status (type, status), INDEX ix_goods_status_sort (status, sort_order DESC), INDEX ix_goods_category_id (category_id), INDEX ix_goods_created_at (created_at), - INDEX ix_goods_unlock_amount (unlock_amount) -); + INDEX ix_goods_unlock_amount (unlock_amount), + INDEX ix_goods_daily_limit (daily_limit), + INDEX ix_goods_global_limit (global_limit), + INDEX ix_goods_is_flw (is_flw), + INDEX ix_goods_is_auto_xiajia (is_auto_xiajia), + INDEX ix_goods_async_code (async_code), + INDEX ix_goods_user_level (user_level), + INDEX ix_goods_sale_time (sale_time) +) COMMENT = '商品主表 - 包含完整54个字段的业务逻辑'; -- 商品奖品列表 CREATE TABLE goods_items ( id INT IDENTITY(1,1) PRIMARY KEY, - goods_id INT NOT NULL, - box_number INT NOT NULL, - prize_id INT NOT NULL, - title NVARCHAR(255) NOT NULL, - stock INT NOT NULL DEFAULT 0, - surplus_stock INT NOT NULL DEFAULT 0, - img_url NVARCHAR(500) NOT NULL, - goods_type TINYINT NOT NULL DEFAULT 1, - price DECIMAL(18,2) NOT NULL DEFAULT 0, - market_price DECIMAL(18,2) NOT NULL DEFAULT 0, - real_probability DECIMAL(8,4) NOT NULL DEFAULT 0, - parent_item_id INT NOT NULL DEFAULT 0, - sale_time DATETIME2 NULL, - sort_order INT NOT NULL DEFAULT 1, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), - updated_at DATETIME2 NOT NULL DEFAULT GETDATE(), + goods_id INT NOT NULL COMMENT '商品ID', + box_number INT NOT NULL COMMENT '箱号', + prize_id INT NOT NULL COMMENT '奖品等级ID', + title NVARCHAR(255) NOT NULL COMMENT '奖品名称', + stock INT NOT NULL DEFAULT 0 COMMENT '奖品库存', + surplus_stock INT NOT NULL DEFAULT 0 COMMENT '剩余库存', + img_url NVARCHAR(500) NOT NULL COMMENT '奖品图片URL', + goods_type TINYINT NOT NULL DEFAULT 1 COMMENT '奖品类型', + price DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '奖品价格', + market_price DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '市场价格', + real_probability DECIMAL(8,4) NOT NULL DEFAULT 0 COMMENT '真实概率', + parent_item_id INT NOT NULL DEFAULT 0 COMMENT '父奖品ID(子奖品用)', + sale_time DATETIME2 NULL COMMENT '开售时间', + sort_order INT NOT NULL DEFAULT 1 COMMENT '排序权重', + created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间', + updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间', -- 索引 INDEX ix_goods_items_goods_box (goods_id, box_number), @@ -263,42 +465,42 @@ CREATE TABLE goods_items ( -- 外键 CONSTRAINT fk_goods_items_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id) -); +) COMMENT = '商品奖品列表'; -- 商品类型配置 CREATE TABLE goods_types ( id INT IDENTITY(1,1) PRIMARY KEY, - type_value INT NOT NULL, - corner_text NVARCHAR(50) NOT NULL, - pay_wechat TINYINT NOT NULL DEFAULT 1, - pay_balance TINYINT NOT NULL DEFAULT 1, - pay_currency TINYINT NOT NULL DEFAULT 1, - pay_currency2 TINYINT NOT NULL DEFAULT 1, - pay_coupon TINYINT NOT NULL DEFAULT 1, - is_deduction TINYINT NOT NULL DEFAULT 1, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), - updated_at DATETIME2 NOT NULL DEFAULT GETDATE(), + type_value INT NOT NULL COMMENT '类型值', + corner_text NVARCHAR(50) NOT NULL COMMENT '角标文字', + pay_wechat TINYINT NOT NULL DEFAULT 1 COMMENT '支持微信支付 0否 1是', + pay_balance TINYINT NOT NULL DEFAULT 1 COMMENT '支持余额支付 0否 1是', + pay_currency TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分支付 0否 1是', + pay_currency2 TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分2支付 0否 1是', + pay_coupon TINYINT NOT NULL DEFAULT 1 COMMENT '支持优惠券 0否 1是', + is_deduction TINYINT NOT NULL DEFAULT 1 COMMENT '支持抵扣 0否 1是', + created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间', + updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间', -- 索引 INDEX ix_goods_types_value (type_value), -- 约束 CONSTRAINT uk_goods_types_value UNIQUE (type_value) -); +) COMMENT = '商品类型配置表'; -- 商品扩展配置 CREATE TABLE goods_extensions ( id INT IDENTITY(1,1) PRIMARY KEY, - goods_id INT NOT NULL, - pay_wechat TINYINT NOT NULL DEFAULT 1, - pay_balance TINYINT NOT NULL DEFAULT 1, - pay_currency TINYINT NOT NULL DEFAULT 1, - pay_currency2 TINYINT NOT NULL DEFAULT 1, - pay_coupon TINYINT NOT NULL DEFAULT 1, - is_deduction TINYINT NOT NULL DEFAULT 1, - config_json NVARCHAR(MAX) NULL, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), - updated_at DATETIME2 NOT NULL DEFAULT GETDATE(), + goods_id INT NOT NULL COMMENT '商品ID', + pay_wechat TINYINT NOT NULL DEFAULT 1 COMMENT '支持微信支付 0否 1是', + pay_balance TINYINT NOT NULL DEFAULT 1 COMMENT '支持余额支付 0否 1是', + pay_currency TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分支付 0否 1是', + pay_currency2 TINYINT NOT NULL DEFAULT 1 COMMENT '支持积分2支付 0否 1是', + pay_coupon TINYINT NOT NULL DEFAULT 1 COMMENT '支持优惠券 0否 1是', + is_deduction TINYINT NOT NULL DEFAULT 1 COMMENT '支持抵扣 0否 1是', + config_json NVARCHAR(MAX) NULL COMMENT '扩展配置JSON', + created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间', + updated_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '更新时间', -- 索引 INDEX ix_goods_extensions_goods_id (goods_id), @@ -306,35 +508,68 @@ CREATE TABLE goods_extensions ( -- 外键 CONSTRAINT fk_goods_extensions_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id), CONSTRAINT uk_goods_extensions_goods_id UNIQUE (goods_id) -); +) COMMENT = '商品扩展配置表'; ``` ##### 订单相关表 ```sql --- 订单主表 +-- 订单主表 (完整33字段结构) CREATE TABLE orders ( id INT IDENTITY(1,1) PRIMARY KEY, - order_no NVARCHAR(60) NOT NULL, - user_id INT NOT NULL, - goods_id INT NOT NULL, - box_number INT NOT NULL, - goods_title NVARCHAR(255) NOT NULL, - goods_img_url NVARCHAR(500) NULL, - order_type TINYINT NOT NULL DEFAULT 0, - order_total DECIMAL(18,2) NOT NULL, - discount_total DECIMAL(18,2) NOT NULL, - final_price DECIMAL(18,2) NOT NULL, - used_money DECIMAL(18,2) NOT NULL DEFAULT 0, - used_integral DECIMAL(18,2) NOT NULL DEFAULT 0, - used_money2 DECIMAL(18,2) NOT NULL DEFAULT 0, - coupon_id INT NULL DEFAULT 0, - used_coupon DECIMAL(18,2) NOT NULL DEFAULT 0, - draw_count INT NOT NULL DEFAULT 0, - pay_type TINYINT NOT NULL DEFAULT 1, - status TINYINT NOT NULL DEFAULT 0, - click_id INT NULL, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), - paid_at DATETIME2 NULL, + order_no NVARCHAR(60) NOT NULL COMMENT '订单号', + user_id INT NOT NULL COMMENT '用户ID', + goods_id INT NOT NULL COMMENT '商品ID', + box_number INT NOT NULL COMMENT '箱号', + + -- 商品信息 + goods_title NVARCHAR(255) NOT NULL COMMENT '商品标题', + goods_img_url NVARCHAR(500) NULL COMMENT '商品图片URL', + goods_price DECIMAL(10,2) NOT NULL COMMENT '商品单价', + + -- 订单金额 + order_total DECIMAL(10,2) NOT NULL COMMENT '订单总金额', + discount_total DECIMAL(10,2) NOT NULL COMMENT '折扣后金额', + final_price DECIMAL(10,2) NOT NULL COMMENT '最终支付金额', + discount_rate DECIMAL(10,2) NOT NULL COMMENT '折扣率', + + -- 支付方式 + used_money DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用余额', + used_integral DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用积分', + used_money2 DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用积分2', + used_score DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '使用评分', + used_draw INT NOT NULL DEFAULT 0 COMMENT '使用抽奖次数', + used_item_card INT NOT NULL DEFAULT 0 COMMENT '使用道具卡', + + -- 优惠券 + coupon_id INT NULL DEFAULT 0 COMMENT '优惠券ID', + used_coupon DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '优惠券抵扣金额', + + -- 抽奖相关 + draw_count INT NOT NULL DEFAULT 0 COMMENT '抽奖次数', + prize_card_set NVARCHAR(MAX) NULL COMMENT '奖品卡片设置JSON', + + -- 订单属性 + order_type TINYINT NOT NULL DEFAULT 0 COMMENT '订单类型', + pay_type TINYINT NOT NULL DEFAULT 1 COMMENT '支付方式 1微信 2支付宝', + status TINYINT NOT NULL DEFAULT 0 COMMENT '订单状态 0待支付 1已支付 2已取消', + + -- 特殊标识 + is_treasure TINYINT NOT NULL DEFAULT 0 COMMENT '是否秘宝 0否 1是', + is_discount TINYINT NOT NULL DEFAULT 0 COMMENT '是否折扣 0否 1是', + is_flw TINYINT NOT NULL DEFAULT 0 COMMENT '是否福利屋 0否 1是', + + -- 快递相关 + is_express TINYINT NOT NULL DEFAULT 0 COMMENT '是否需要快递 0否 1是', + auto_ship TINYINT NOT NULL DEFAULT 0 COMMENT '自动发货 0否 1是', + auto_ship_time INT NULL COMMENT '自动发货时间戳', + + -- 广告和推广 + ad_id INT NULL COMMENT '广告ID', + click_id INT NULL COMMENT '点击ID', + + -- 时间字段 + created_at INT NOT NULL COMMENT '创建时间戳', + paid_at INT NOT NULL DEFAULT 0 COMMENT '支付时间戳', -- 索引 INDEX ix_orders_user_status (user_id, status), @@ -343,6 +578,8 @@ CREATE TABLE orders ( INDEX ix_orders_created_at (created_at), INDEX ix_orders_paid_at (paid_at), INDEX ix_orders_status (status), + INDEX ix_orders_pay_type (pay_type), + INDEX ix_orders_order_type (order_type), -- 约束 CONSTRAINT uk_orders_order_no UNIQUE (order_no), @@ -350,23 +587,23 @@ CREATE TABLE orders ( -- 外键 CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id), CONSTRAINT fk_orders_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id) -); +) COMMENT = '订单主表 - 包含完整33个字段的订单逻辑'; -- 订单详情表 (抽奖结果) CREATE TABLE order_items ( id INT IDENTITY(1,1) PRIMARY KEY, - order_id NVARCHAR(60) NOT NULL, - user_id INT NOT NULL, - goods_id INT NOT NULL, - box_number INT NOT NULL, - goods_item_id INT NOT NULL, - item_title NVARCHAR(255) NOT NULL, - item_img_url NVARCHAR(500) NULL, - prize_id INT NOT NULL, - order_type TINYINT NOT NULL, - source TINYINT NOT NULL DEFAULT 1, - item_price DECIMAL(18,2) NOT NULL DEFAULT 0, - created_at DATETIME2 NOT NULL DEFAULT GETDATE(), + order_id NVARCHAR(60) NOT NULL COMMENT '订单号', + user_id INT NOT NULL COMMENT '用户ID', + goods_id INT NOT NULL COMMENT '商品ID', + box_number INT NOT NULL COMMENT '箱号', + goods_item_id INT NOT NULL COMMENT '商品奖品ID', + item_title NVARCHAR(255) NOT NULL COMMENT '奖品标题', + item_img_url NVARCHAR(500) NULL COMMENT '奖品图片URL', + prize_id INT NOT NULL COMMENT '奖品等级ID', + order_type TINYINT NOT NULL COMMENT '订单类型', + source TINYINT NOT NULL DEFAULT 1 COMMENT '来源 1正常抽奖', + item_price DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT '奖品价格', + created_at DATETIME2 NOT NULL DEFAULT GETDATE() COMMENT '创建时间', -- 索引 INDEX ix_order_items_order_id (order_id), @@ -378,7 +615,68 @@ CREATE TABLE order_items ( -- 外键 CONSTRAINT fk_order_items_user_id FOREIGN KEY (user_id) REFERENCES users(id), CONSTRAINT fk_order_items_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id) -); +) COMMENT = '订单详情表(抽奖结果)'; +``` + +##### 钻石系统表 +```sql +-- 钻石商品表 +CREATE TABLE diamond_products ( + id INT IDENTITY(1,1) PRIMARY KEY, + name NVARCHAR(50) NOT NULL COMMENT '钻石商品名称', + product_id NVARCHAR(64) NOT NULL COMMENT '商品ID', + product_type NVARCHAR(64) NOT NULL COMMENT '商品类型', + base_reward NVARCHAR(64) NOT NULL COMMENT '基础奖励', + price DECIMAL(10,2) NOT NULL COMMENT '价格', + is_first TINYINT DEFAULT 0 COMMENT '是否首充商品 0否 1是', + first_bonus_reward NVARCHAR(64) NULL COMMENT '首充额外奖励', + first_charge_image NVARCHAR(255) NULL COMMENT '首充图片', + first_select_charge_image NVARCHAR(255) NULL COMMENT '首充选中图片', + normal_image NVARCHAR(255) NULL COMMENT '普通图片', + normal_select_image NVARCHAR(255) NULL COMMENT '普通选中图片', + sort_order INT DEFAULT 0 COMMENT '排序', + status TINYINT DEFAULT 1 COMMENT '状态 0禁用 1启用', + created_at DATETIME2 DEFAULT GETDATE() COMMENT '创建时间', + updated_at DATETIME2 DEFAULT GETDATE() COMMENT '更新时间', + + -- 索引 + INDEX ix_diamond_products_product_id (product_id), + INDEX ix_diamond_products_status_sort (status, sort_order), + + -- 约束 + CONSTRAINT uk_diamond_products_product_id UNIQUE (product_id) +) COMMENT = '钻石商品配置表'; + +-- 钻石订单表 +CREATE TABLE diamond_orders ( + id BIGINT IDENTITY(1,1) PRIMARY KEY, + order_no NVARCHAR(64) NOT NULL COMMENT '订单号', + user_id BIGINT NOT NULL COMMENT '用户ID', + diamond_id INT NOT NULL COMMENT '钻石商品ID', + product_id NVARCHAR(64) NOT NULL COMMENT '商品ID', + product_name NVARCHAR(50) NULL COMMENT '商品名称', + amount_paid DECIMAL(10,2) NOT NULL COMMENT '支付金额', + pay_method NVARCHAR(20) NOT NULL COMMENT '支付方式', + reward_log NVARCHAR(300) NULL COMMENT '奖励日志', + is_first_charge TINYINT DEFAULT 0 COMMENT '是否首充 0否 1是', + status NVARCHAR(20) DEFAULT 'pending' COMMENT '订单状态 pending待支付 paid已支付 failed失败', + created_at DATETIME2 DEFAULT GETDATE() COMMENT '创建时间', + paid_at DATETIME2 NULL COMMENT '支付时间', + + -- 索引 + INDEX ix_diamond_orders_order_no (order_no), + INDEX ix_diamond_orders_user_id (user_id), + INDEX ix_diamond_orders_status (status), + INDEX ix_diamond_orders_created_at (created_at), + INDEX ix_diamond_orders_paid_at (paid_at), + + -- 约束 + CONSTRAINT uk_diamond_orders_order_no UNIQUE (order_no), + + -- 外键 + CONSTRAINT fk_diamond_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id), + CONSTRAINT fk_diamond_orders_diamond_id FOREIGN KEY (diamond_id) REFERENCES diamond_products(id) +) COMMENT = '钻石订单表'; ``` ### 1.3 数据迁移映射表 (0.5天) @@ -415,64 +713,203 @@ user -> users: istest -> is_test uid -> uid click_id -> click_id + draw_num -> draw_num (新增字段) + password -> password (新增字段) + is_use_coupon -> is_use_coupon (新增字段) addtime -> created_at (时间戳转换) update_time -> updated_at (时间戳转换) last_login_time -> last_login_at (时间戳转换) ``` -##### 商品表映射 +##### 商品表映射 (完整54字段) ```yaml goods -> goods: + # 基础信息 id -> id category_id -> category_id title -> title imgurl -> img_url imgurl_detail -> img_url_detail + prize_imgurl -> prize_img_url + goods_describe -> goods_describe + + # 价格和库存 price -> price stock -> stock sale_stock -> sale_stock + show_price -> show_price + + # 定价策略 + day_price -> day_price + mouth_price -> mouth_price + mouth_pay_price -> mouth_pay_price + day_pay_price -> day_pay_price + + # 商品状态和类型 type -> type status -> status - lock_is -> is_lock - lock_time -> lock_time + sort -> sort_order + + # 显示控制 + show_is -> is_show is_shou_zhe -> is_discount new_is -> is_new - show_is -> is_show - unlock_amount -> unlock_amount + + # 锁箱功能 + lock_is -> is_lock + lock_time -> lock_time + + # 功能开关 + coupon_is -> coupon_is + coupon_pro -> coupon_pro + integral_is -> integral_is + + # 抽奖相关 + prize_num -> prize_num + choujiang_xianzhi -> draw_limit + + # 限购控制 daily_xiangou -> daily_limit quanju_xiangou -> global_limit - sort -> sort_order - sale_time -> sale_time (时间戳转换) - addtime -> created_at (时间戳转换) - update_time -> updated_at (时间戳转换) - delete_time -> deleted_at (时间戳转换) + unlock_amount -> unlock_amount + user_lv -> user_level + + # 特殊功能 + rage_is -> rage_is + rage -> rage + lingzhu_is -> lingzhu_is + lingzhu_fan -> lingzhu_fan + lingzhu_shang_id -> lingzhu_shang_id + lian_ji_num -> lian_ji_num + lian_ji_shang_id -> lian_ji_shang_id + king_user_id -> king_user_id + + # 福利屋功能 + is_flw -> is_flw + flw_start_time -> flw_start_time + flw_end_time -> flw_end_time + open_time -> open_time + is_open -> is_open + + # 自动下架功能 + is_auto_xiajia -> is_auto_xiajia + xiajia_lirun -> xiajia_lirun + xiajia_auto_coushu -> xiajia_auto_coushu + xiajia_jine -> xiajia_jine + + # 卡片功能 + card_banner -> card_banner + card_set -> card_set + card_notice -> card_notice + card_num -> card_num + item_card_id -> item_card_id + + # 同步相关 + async_code -> async_code + async_date -> async_date (datetime转换) + + # 时间字段 + sale_time -> sale_time (时间戳保持) + addtime -> created_at (时间戳保持) + update_time -> updated_at (时间戳保持) + delete_time -> deleted_at (时间戳保持) ``` -##### 订单表映射 +##### 订单表映射 (完整33字段) ```yaml order -> orders: + # 基础信息 id -> id order_num -> order_no user_id -> user_id goods_id -> goods_id num -> box_number + + # 商品信息 goods_title -> goods_title goods_imgurl -> goods_img_url - order_type -> order_type + goods_price -> goods_price + + # 订单金额 order_total -> order_total order_zhe_total -> discount_total price -> final_price + zhe -> discount_rate + + # 支付方式 use_money -> used_money use_integral -> used_integral use_money2 -> used_money2 + use_score -> used_score + use_draw -> used_draw + use_item_card -> used_item_card + + # 优惠券 coupon_id -> coupon_id use_coupon -> used_coupon + + # 抽奖相关 prize_num -> draw_count + prize_card_set -> prize_card_set + + # 订单属性 + order_type -> order_type pay_type -> pay_type status -> status + + # 特殊标识 + is_mibao -> is_treasure + is_shou_zhe -> is_discount + is_flw -> is_flw + + # 快递相关 + kd_is -> is_express + zdfh_is -> auto_ship + zdfh_time -> auto_ship_time + + # 广告和推广 + ad_id -> ad_id click_id -> click_id - addtime -> created_at (时间戳转换) - pay_time -> paid_at (时间戳转换) + + # 时间字段 + addtime -> created_at (时间戳保持) + pay_time -> paid_at (时间戳保持) +``` + +##### 钻石系统映射 +```yaml +diamond_products -> diamond_products: + id -> id + name -> name + products_id -> product_id + products_type -> product_type + base_reward -> base_reward + price -> price + is_first -> is_first + first_bonus_reward -> first_bonus_reward + first_charge_image -> first_charge_image + first_select_charge_image -> first_select_charge_image + normal_image -> normal_image + normal_select_image -> normal_select_image + sort_order -> sort_order + status -> status + created_at -> created_at (直接映射) + updated_at -> updated_at (直接映射) + +diamond_orders -> diamond_orders: + id -> id + order_no -> order_no + user_id -> user_id + diamond_id -> diamond_id + product_id -> product_id + product_name -> product_name + amount_paid -> amount_paid + pay_method -> pay_method + reward_log -> reward_log + is_first_charge -> is_first_charge + status -> status + created_at -> created_at (直接映射) + paid_at -> paid_at (直接映射) ``` ## 验收标准 @@ -527,6 +964,62 @@ order -> orders: - [ ] 字段映射关系表 - [ ] 数据转换规则文档 +## 关键发现和重要说明 + +### 🔍 数据库分析关键发现 + +#### 商品表复杂度超预期 +- **实际字段数**: 54个字段 (远超初期估计) +- **福利屋功能**: 383/503商品启用,是核心业务功能 +- **自动下架功能**: 47/503商品启用,涉及利润控制 +- **商品描述**: 402/503商品有描述,用户体验重要字段 +- **异步同步**: 21/503商品有异步代码,可能涉及第三方集成(这个是从测试环境同步到正式环境的编号,因为所有的盒子都需要从测试环境试完概率后才能上线到正式环境。) + +#### 业务功能丰富度高 +- **多种定价策略**: 日价格、月价格、支付价格等 +- **复杂抽奖逻辑**: 领主、连击、暴怒、拳王等多种玩法 +- **精细化控制**: 限购、等级限制、解锁门槛等 +- **营销功能完善**: 优惠券、积分、折扣等 + +#### 数据完整性良好 +- **用户数据**: 2,201个用户,活跃度较高 +- **商品数据**: 503个商品,业务功能使用率高 +- **钻石系统**: 398个订单,352个已支付,收入稳定 +- **订单数据**: 虽然总量不大(15个),但钻石订单活跃 + +### ⚠️ 迁移风险提醒 + +#### 高风险点 +1. **福利屋功能**: 383个商品依赖,迁移时需特别注意时间戳处理 +2. **自动下架逻辑**: 涉及利润计算,业务逻辑复杂 +3. **多种支付方式**: 余额、积分、积分2、优惠券等组合支付 +4. **时间戳处理**: MySQL使用INT时间戳,SQL Server需要转换 + +#### 中风险点 +1. **异步同步功能**: 21个商品有异步代码,可能涉及外部系统 +2. **卡片系统**: JSON数据存储,需要验证SQL Server兼容性 +3. **灵珠等特殊功能**: 虽然使用量少,但逻辑复杂 + +### 📋 下一步行动计划 + +#### 立即执行 (阶段1剩余工作) +- [ ] 验证其他核心表结构完整性 +- [ ] 确认所有表的字段映射关系 +- [ ] 设计数据转换和验证规则 +- [ ] 准备阶段2的环境搭建清单 + +#### 需要业务确认的问题 +1. **异步同步功能**: 21个商品的async_code是否还在使用? +2. **灵珠功能**: 8个商品的灵珠功能是否需要保留? +3. **拳王系统**: king_user_id字段的业务逻辑确认 +4. **卡片系统**: card_set JSON结构的详细说明 + +#### 技术准备工作 +1. **SQL Server环境**: 确保支持NVARCHAR(MAX)和JSON处理 +2. **时间戳转换**: 准备INT到DATETIME2的转换脚本 +3. **数据验证**: 设计迁移前后的数据一致性检查 +4. **回滚方案**: 准备完整的数据回滚策略 + --- **阶段1完成标志**: 完成业务分析,确定迁移范围,设计好新的表结构,为后续数据迁移奠定基础。 \ No newline at end of file