Commit b14e72d368e8685e07ba218c1cff4f62af282d92

Authored by 朱焱飞
1 parent 70aa7f12

chore: 整合 SQL 模式文件并更新 `README.md` 和 `init.sql`。

README.md
@@ -22,8 +22,7 @@ graph LR @@ -22,8 +22,7 @@ graph LR
22 B --> C[FetchPartRatio] 22 B --> C[FetchPartRatio]
23 C --> D[SQLAgent<br/>LLM分析] 23 C --> D[SQLAgent<br/>LLM分析]
24 D --> E[AllocateBudget] 24 D --> E[AllocateBudget]
25 - E --> F[GenerateReport<br/>LLM]  
26 - F --> G[SaveResult] 25 + E --> G[SaveResult]
27 ``` 26 ```
28 27
29 详细架构图见 [docs/architecture.md](docs/architecture.md) 28 详细架构图见 [docs/architecture.md](docs/architecture.md)
@@ -36,7 +35,6 @@ graph LR @@ -36,7 +35,6 @@ graph LR
36 |------|------|------| 35 |------|------|------|
37 | **SQL Agent** | LLM 分析 | 直接分析 part_ratio 数据生成补货建议 | 36 | **SQL Agent** | LLM 分析 | 直接分析 part_ratio 数据生成补货建议 |
38 | **补货分配** | Replenishment | 转换 LLM 建议为补货明细 | 37 | **补货分配** | Replenishment | 转换 LLM 建议为补货明细 |
39 -| **分析报告** | Report | LLM 生成库存分析报告 |  
40 38
41 ### 🚧 计划中 39 ### 🚧 计划中
42 40
@@ -97,8 +95,7 @@ fw-pms-ai/ @@ -97,8 +95,7 @@ fw-pms-ai/
97 1. FetchPartRatio - 从 part_ratio 表获取库销比数据 95 1. FetchPartRatio - 从 part_ratio 表获取库销比数据
98 2. SQLAgent - LLM 分析数据,生成补货建议 96 2. SQLAgent - LLM 分析数据,生成补货建议
99 3. AllocateBudget - 转换建议为补货明细 97 3. AllocateBudget - 转换建议为补货明细
100 -4. GenerateReport - LLM 生成分析报告  
101 -5. SaveResult - 写入数据库 98 +4. SaveResult - 写入数据库
102 ``` 99 ```
103 100
104 ### 业务术语 101 ### 业务术语
@@ -116,9 +113,8 @@ fw-pms-ai/ @@ -116,9 +113,8 @@ fw-pms-ai/
116 | `part_ratio` | 配件库销比数据(来源表) | 113 | `part_ratio` | 配件库销比数据(来源表) |
117 | `ai_replenishment_task` | 任务记录 | 114 | `ai_replenishment_task` | 任务记录 |
118 | `ai_replenishment_detail` | 配件级别补货建议 | 115 | `ai_replenishment_detail` | 配件级别补货建议 |
119 -| `ai_replenishment_report` | 分析报告 | 116 +| `ai_replenishment_part_summary` | 配件汇总表 |
120 | `ai_task_execution_log` | 任务执行日志 | 117 | `ai_task_execution_log` | 任务执行日志 |
121 -| `ai_llm_suggestion_detail` | LLM 建议明细 |  
122 118
123 ## 快速开始 119 ## 快速开始
124 120
@@ -143,7 +139,6 @@ cp .env.example .env @@ -143,7 +139,6 @@ cp .env.example .env
143 139
144 ```bash 140 ```bash
145 mysql -u root -p fw_pms < sql/init.sql 141 mysql -u root -p fw_pms < sql/init.sql
146 -mysql -u root -p fw_pms < sql/v2_add_log_tables.sql  
147 ``` 142 ```
148 143
149 ### 4. 运行 144 ### 4. 运行
@@ -167,7 +162,6 @@ Prompt 文件存放在 `prompts/` 目录: @@ -167,7 +162,6 @@ Prompt 文件存放在 `prompts/` 目录:
167 |------|------| 162 |------|------|
168 | `suggestion.md` | 补货建议生成(含业务术语定义) | 163 | `suggestion.md` | 补货建议生成(含业务术语定义) |
169 | `analyze_inventory.md` | 库存分析 | 164 | `analyze_inventory.md` | 库存分析 |
170 -| `generate_report.md` | 报告生成 |  
171 165
172 ## 开发 166 ## 开发
173 167
sql/final_schema.sql deleted
1 --- ============================================================================  
2 --- AI 补货建议系统 - 表结构  
3 --- ============================================================================  
4 --- 版本: 1.0.0  
5 --- 更新日期: 2026-01-31  
6 --- ============================================================================  
7 -  
8 --- 1. AI补货任务表  
9 -DROP TABLE IF EXISTS ai_replenishment_task;  
10 -CREATE TABLE ai_replenishment_task (  
11 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
12 - task_no VARCHAR(32) NOT NULL UNIQUE COMMENT '任务编号(AI-开头)',  
13 - group_id BIGINT NOT NULL COMMENT '集团ID',  
14 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
15 - dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',  
16 - brand_grouping_id BIGINT COMMENT '品牌组合ID',  
17 - plan_amount DECIMAL(14,2) DEFAULT 0 COMMENT '计划采购金额(预算)',  
18 - actual_amount DECIMAL(14,2) DEFAULT 0 COMMENT '实际分配金额',  
19 - part_count INT DEFAULT 0 COMMENT '分配配件数量',  
20 - base_ratio DECIMAL(10,4) COMMENT '基准库销比',  
21 - status TINYINT DEFAULT 0 COMMENT '状态: 0-运行中 1-成功 2-失败',  
22 - error_message TEXT COMMENT '错误信息',  
23 - llm_provider VARCHAR(32) COMMENT 'LLM提供商',  
24 - llm_model VARCHAR(64) COMMENT 'LLM模型名称',  
25 - llm_total_tokens INT DEFAULT 0 COMMENT 'LLM总Token数',  
26 - statistics_date VARCHAR(16) COMMENT '统计日期',  
27 - start_time DATETIME COMMENT '任务开始时间',  
28 - end_time DATETIME COMMENT '任务结束时间',  
29 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
30 - INDEX idx_group_date (group_id, statistics_date),  
31 - INDEX idx_dealer_grouping (dealer_grouping_id)  
32 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货任务表-记录每次补货建议任务执行';  
33 -  
34 --- 2. AI补货建议明细表  
35 -DROP TABLE IF EXISTS ai_replenishment_detail;  
36 -CREATE TABLE ai_replenishment_detail (  
37 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
38 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
39 - group_id BIGINT NOT NULL COMMENT '集团ID',  
40 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
41 - brand_grouping_id BIGINT COMMENT '品牌组合ID',  
42 - shop_id BIGINT NOT NULL COMMENT '库房ID',  
43 - shop_name VARCHAR(128) COMMENT '库房名称',  
44 - part_code VARCHAR(64) NOT NULL COMMENT '配件编码',  
45 - part_name VARCHAR(256) COMMENT '配件名称',  
46 - unit VARCHAR(32) COMMENT '单位',  
47 - cost_price DECIMAL(14,2) DEFAULT 0 COMMENT '成本价',  
48 - current_ratio DECIMAL(10,4) COMMENT '当前库销比',  
49 - base_ratio DECIMAL(10,4) COMMENT '基准库销比',  
50 - post_plan_ratio DECIMAL(10,4) COMMENT '计划后预计库销比',  
51 - valid_storage_cnt DECIMAL(14,2) DEFAULT 0 COMMENT '有效库存数量',  
52 - avg_sales_cnt DECIMAL(14,2) DEFAULT 0 COMMENT '平均销量(月)',  
53 - suggest_cnt INT DEFAULT 0 COMMENT '建议采购数量',  
54 - suggest_amount DECIMAL(14,2) DEFAULT 0 COMMENT '建议采购金额',  
55 - suggestion_reason TEXT COMMENT '补货建议理由',  
56 - priority INT NOT NULL DEFAULT 2 COMMENT '优先级: 1-高, 2-中, 3-低',  
57 - llm_confidence FLOAT DEFAULT 0.8 COMMENT 'LLM置信度',  
58 - statistics_date VARCHAR(16) COMMENT '统计日期',  
59 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
60 - INDEX idx_task_no (task_no),  
61 - INDEX idx_shop_part (shop_id, part_code)  
62 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货建议明细表-存储每次任务的配件分配结果';  
63 -  
64 --- 3. AI补货分析报告表  
65 -DROP TABLE IF EXISTS ai_replenishment_report;  
66 -CREATE TABLE ai_replenishment_report (  
67 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
68 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
69 - group_id BIGINT NOT NULL COMMENT '集团ID',  
70 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
71 - dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',  
72 - total_storage_amount DECIMAL(16,2) COMMENT '总库存金额',  
73 - total_sales_amount DECIMAL(16,2) COMMENT '总销售金额(90天)',  
74 - overall_ratio DECIMAL(10,4) COMMENT '整体库销比',  
75 - target_ratio DECIMAL(10,4) COMMENT '目标库销比',  
76 - total_part_count INT DEFAULT 0 COMMENT '配件总数',  
77 - shortage_part_count INT DEFAULT 0 COMMENT '缺货配件数',  
78 - overstock_part_count INT DEFAULT 0 COMMENT '超标配件数',  
79 - normal_part_count INT DEFAULT 0 COMMENT '正常配件数',  
80 - stagnant_part_count INT DEFAULT 0 COMMENT '呆滞配件数',  
81 - suggest_total_amount DECIMAL(14,2) COMMENT '建议采购总金额',  
82 - suggest_part_count INT DEFAULT 0 COMMENT '建议采购配件数',  
83 - top_priority_parts TEXT COMMENT '重点关注配件(JSON数组)',  
84 - report_content JSON COMMENT '结构化报告内容(JSON)',  
85 - llm_provider VARCHAR(32) COMMENT 'LLM提供商',  
86 - llm_model VARCHAR(64) COMMENT 'LLM模型',  
87 - generation_tokens INT DEFAULT 0 COMMENT '生成Token数',  
88 - statistics_date VARCHAR(16) COMMENT '统计日期',  
89 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
90 - INDEX idx_task_no (task_no),  
91 - INDEX idx_dealer_grouping (dealer_grouping_id)  
92 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货分析报告表-存储LLM生成的分析报告';  
93 -  
94 --- 4. AI任务执行日志表  
95 -DROP TABLE IF EXISTS ai_task_execution_log;  
96 -CREATE TABLE ai_task_execution_log (  
97 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
98 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
99 - group_id BIGINT NOT NULL COMMENT '集团ID',  
100 - brand_grouping_id BIGINT COMMENT '品牌组合ID',  
101 - brand_grouping_name VARCHAR(128) COMMENT '品牌组合名称',  
102 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
103 - dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',  
104 - step_name VARCHAR(64) NOT NULL COMMENT '步骤名称',  
105 - step_order INT DEFAULT 0 COMMENT '步骤顺序',  
106 - status TINYINT DEFAULT 0 COMMENT '状态: 0-进行中 1-成功 2-失败 3-跳过',  
107 - input_data TEXT COMMENT '输入数据(JSON)',  
108 - output_data TEXT COMMENT '输出数据(JSON)',  
109 - error_message TEXT COMMENT '错误信息',  
110 - retry_count INT DEFAULT 0 COMMENT '重试次数',  
111 - sql_query TEXT COMMENT 'SQL查询语句(如有)',  
112 - llm_prompt TEXT COMMENT 'LLM提示词(如有)',  
113 - llm_response TEXT COMMENT 'LLM响应(如有)',  
114 - llm_tokens INT DEFAULT 0 COMMENT 'LLM Token消耗',  
115 - execution_time_ms INT DEFAULT 0 COMMENT '执行耗时(毫秒)',  
116 - start_time DATETIME COMMENT '开始时间',  
117 - end_time DATETIME COMMENT '结束时间',  
118 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
119 - INDEX idx_task_no (task_no),  
120 - INDEX idx_group_date (group_id, create_time),  
121 - INDEX idx_dealer_grouping (dealer_grouping_id)  
122 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI任务执行日志表-记录每个步骤的执行详情';  
123 -  
124 --- 5. AI补货配件汇总表  
125 -DROP TABLE IF EXISTS ai_replenishment_part_summary;  
126 -CREATE TABLE ai_replenishment_part_summary (  
127 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
128 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
129 - group_id BIGINT NOT NULL COMMENT '集团ID',  
130 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
131 - part_code VARCHAR(64) NOT NULL COMMENT '配件编码',  
132 - part_name VARCHAR(256) COMMENT '配件名称',  
133 - unit VARCHAR(32) COMMENT '单位',  
134 - cost_price DECIMAL(14,2) DEFAULT 0.00 COMMENT '成本价',  
135 - total_storage_cnt DECIMAL(14,2) DEFAULT 0.00 COMMENT '商家组合内总库存数量',  
136 - total_avg_sales_cnt DECIMAL(14,2) DEFAULT 0.00 COMMENT '商家组合内总月均销量',  
137 - group_current_ratio DECIMAL(10,4) COMMENT '商家组合级库销比',  
138 - total_suggest_cnt INT DEFAULT 0 COMMENT '总建议数量',  
139 - total_suggest_amount DECIMAL(14,2) DEFAULT 0.00 COMMENT '总建议金额',  
140 - shop_count INT DEFAULT 0 COMMENT '涉及门店数',  
141 - need_replenishment_shop_count INT DEFAULT 0 COMMENT '需要补货的门店数',  
142 - part_decision_reason TEXT COMMENT '配件级补货决策理由',  
143 - priority INT NOT NULL DEFAULT 2 COMMENT '优先级: 1=高, 2=中, 3=低',  
144 - llm_confidence FLOAT DEFAULT 0.8 COMMENT 'LLM置信度',  
145 - statistics_date VARCHAR(16) COMMENT '统计日期',  
146 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
147 - INDEX idx_task_no (task_no),  
148 - INDEX idx_part_code (part_code),  
149 - INDEX idx_dealer_grouping (dealer_grouping_id)  
150 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货建议-配件汇总表';  
151 -  
sql/init.sql
1 --- AI 补货建议系统表结构  
2 --- 版本: 2.0  
3 --- 更新: 2026-01-27 1 +-- ============================================================================
  2 +-- AI 补货建议系统 - 表结构
  3 +-- ============================================================================
  4 +-- 版本: 1.0.0
  5 +-- 更新日期: 2026-01-31
  6 +-- ============================================================================
4 7
5 --- 1. AI预计划明细表  
6 -DROP TABLE IF EXISTS ai_pre_plan_detail;  
7 -CREATE TABLE ai_pre_plan_detail (  
8 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
9 - group_id BIGINT NOT NULL COMMENT '集团ID',  
10 - brand_grouping_id BIGINT COMMENT '品牌组合ID',  
11 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
12 - dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',  
13 - dealer_id BIGINT COMMENT '商家ID',  
14 - dealer_name VARCHAR(128) COMMENT '商家名称',  
15 - area_id BIGINT COMMENT '区域ID',  
16 - area_name VARCHAR(128) COMMENT '区域名称',  
17 - shop_id BIGINT NOT NULL COMMENT '库房ID',  
18 - shop_name VARCHAR(128) COMMENT '库房名称',  
19 - part_id BIGINT COMMENT '配件ID',  
20 - part_code VARCHAR(64) NOT NULL COMMENT '配件编码',  
21 - part_name VARCHAR(256) COMMENT '配件名称',  
22 - unit VARCHAR(32) COMMENT '单位',  
23 - cost_price DECIMAL(14,2) DEFAULT 0 COMMENT '成本价',  
24 - base_ratio DECIMAL(10,4) COMMENT '基准库销比',  
25 - current_ratio DECIMAL(10,4) COMMENT '当前库销比',  
26 - valid_storage_cnt DECIMAL(14,2) DEFAULT 0 COMMENT '有效库存数量(在库未锁+在途+计划数+调拨在途)',  
27 - avg_sales_cnt DECIMAL(14,2) DEFAULT 0 COMMENT '平均销量(月)',  
28 - target_storage_cnt DECIMAL(14,2) DEFAULT 0 COMMENT '目标库存数量',  
29 - plan_cnt INT DEFAULT 0 COMMENT '建议计划数量',  
30 - plan_amount DECIMAL(14,2) DEFAULT 0 COMMENT '建议计划金额',  
31 - part_biz_type TINYINT DEFAULT 1 COMMENT '配件业务类型: 1-配件 2-装饰',  
32 - statistics_date VARCHAR(16) NOT NULL COMMENT '统计日期(yyyy-MM-dd)',  
33 - yn TINYINT DEFAULT 1 COMMENT '是否有效: 1-是 0-否',  
34 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
35 - INDEX idx_group_date (group_id, statistics_date),  
36 - INDEX idx_dealer_grouping (dealer_grouping_id),  
37 - INDEX idx_shop (shop_id)  
38 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI预计划明细表-存储每日计算的配件补货建议';  
39 -  
40 --- 2. AI补货任务表 8 +-- 1. AI补货任务表
41 DROP TABLE IF EXISTS ai_replenishment_task; 9 DROP TABLE IF EXISTS ai_replenishment_task;
42 CREATE TABLE ai_replenishment_task ( 10 CREATE TABLE ai_replenishment_task (
43 id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', 11 id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
@@ -63,7 +31,7 @@ CREATE TABLE ai_replenishment_task ( @@ -63,7 +31,7 @@ CREATE TABLE ai_replenishment_task (
63 INDEX idx_dealer_grouping (dealer_grouping_id) 31 INDEX idx_dealer_grouping (dealer_grouping_id)
64 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货任务表-记录每次补货建议任务执行'; 32 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货任务表-记录每次补货建议任务执行';
65 33
66 --- 3. AI补货建议明细表 34 +-- 2. AI补货建议明细表
67 DROP TABLE IF EXISTS ai_replenishment_detail; 35 DROP TABLE IF EXISTS ai_replenishment_detail;
68 CREATE TABLE ai_replenishment_detail ( 36 CREATE TABLE ai_replenishment_detail (
69 id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', 37 id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
@@ -93,38 +61,61 @@ CREATE TABLE ai_replenishment_detail ( @@ -93,38 +61,61 @@ CREATE TABLE ai_replenishment_detail (
93 INDEX idx_shop_part (shop_id, part_code) 61 INDEX idx_shop_part (shop_id, part_code)
94 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货建议明细表-存储每次任务的配件分配结果'; 62 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货建议明细表-存储每次任务的配件分配结果';
95 63
96 --- 4. AI补货报告表  
97 -DROP TABLE IF EXISTS ai_replenishment_report;  
98 -CREATE TABLE ai_replenishment_report (  
99 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
100 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
101 - group_id BIGINT NOT NULL COMMENT '集团ID',  
102 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
103 - dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',  
104 - total_storage_amount DECIMAL(16,2) COMMENT '总库存金额',  
105 - total_sales_amount DECIMAL(16,2) COMMENT '总销售金额(90天)',  
106 - overall_ratio DECIMAL(10,4) COMMENT '整体库销比',  
107 - target_ratio DECIMAL(10,4) COMMENT '目标库销比',  
108 - total_part_count INT DEFAULT 0 COMMENT '配件总数',  
109 - shortage_part_count INT DEFAULT 0 COMMENT '缺货配件数',  
110 - overstock_part_count INT DEFAULT 0 COMMENT '超标配件数',  
111 - normal_part_count INT DEFAULT 0 COMMENT '正常配件数',  
112 - stagnant_part_count INT DEFAULT 0 COMMENT '呆滞配件数',  
113 - suggest_total_amount DECIMAL(14,2) COMMENT '建议采购总金额',  
114 - suggest_part_count INT DEFAULT 0 COMMENT '建议采购配件数',  
115 - top_priority_parts TEXT COMMENT '重点关注配件(JSON数组)',  
116 - report_title VARCHAR(256) COMMENT '报告标题',  
117 - executive_summary TEXT COMMENT '执行摘要',  
118 - inventory_analysis TEXT COMMENT '库存分析',  
119 - risk_assessment TEXT COMMENT '风险评估',  
120 - purchase_recommendations TEXT COMMENT '采购建议',  
121 - optimization_suggestions TEXT COMMENT '优化建议',  
122 - full_report_markdown LONGTEXT COMMENT '完整报告(Markdown)',  
123 - llm_provider VARCHAR(32) COMMENT 'LLM提供商',  
124 - llm_model VARCHAR(64) COMMENT 'LLM模型',  
125 - generation_tokens INT DEFAULT 0 COMMENT '生成Token数',  
126 - statistics_date VARCHAR(16) COMMENT '统计日期',  
127 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 64 +-- 3. AI任务执行日志表
  65 +DROP TABLE IF EXISTS ai_task_execution_log;
  66 +CREATE TABLE ai_task_execution_log (
  67 + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  68 + task_no VARCHAR(32) NOT NULL COMMENT '任务编号',
  69 + group_id BIGINT NOT NULL COMMENT '集团ID',
  70 + brand_grouping_id BIGINT COMMENT '品牌组合ID',
  71 + brand_grouping_name VARCHAR(128) COMMENT '品牌组合名称',
  72 + dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',
  73 + dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',
  74 + step_name VARCHAR(64) NOT NULL COMMENT '步骤名称',
  75 + step_order INT DEFAULT 0 COMMENT '步骤顺序',
  76 + status TINYINT DEFAULT 0 COMMENT '状态: 0-进行中 1-成功 2-失败 3-跳过',
  77 + input_data TEXT COMMENT '输入数据(JSON)',
  78 + output_data TEXT COMMENT '输出数据(JSON)',
  79 + error_message TEXT COMMENT '错误信息',
  80 + retry_count INT DEFAULT 0 COMMENT '重试次数',
  81 + sql_query TEXT COMMENT 'SQL查询语句(如有)',
  82 + llm_prompt TEXT COMMENT 'LLM提示词(如有)',
  83 + llm_response TEXT COMMENT 'LLM响应(如有)',
  84 + llm_tokens INT DEFAULT 0 COMMENT 'LLM Token消耗',
  85 + execution_time_ms INT DEFAULT 0 COMMENT '执行耗时(毫秒)',
  86 + start_time DATETIME COMMENT '开始时间',
  87 + end_time DATETIME COMMENT '结束时间',
  88 + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  89 + INDEX idx_task_no (task_no),
  90 + INDEX idx_group_date (group_id, create_time),
  91 + INDEX idx_dealer_grouping (dealer_grouping_id)
  92 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI任务执行日志表-记录每个步骤的执行详情';
  93 +
  94 +-- 4. AI补货配件汇总表
  95 +DROP TABLE IF EXISTS ai_replenishment_part_summary;
  96 +CREATE TABLE ai_replenishment_part_summary (
  97 + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
  98 + task_no VARCHAR(32) NOT NULL COMMENT '任务编号',
  99 + group_id BIGINT NOT NULL COMMENT '集团ID',
  100 + dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',
  101 + part_code VARCHAR(64) NOT NULL COMMENT '配件编码',
  102 + part_name VARCHAR(256) COMMENT '配件名称',
  103 + unit VARCHAR(32) COMMENT '单位',
  104 + cost_price DECIMAL(14,2) DEFAULT 0.00 COMMENT '成本价',
  105 + total_storage_cnt DECIMAL(14,2) DEFAULT 0.00 COMMENT '商家组合内总库存数量',
  106 + total_avg_sales_cnt DECIMAL(14,2) DEFAULT 0.00 COMMENT '商家组合内总月均销量',
  107 + group_current_ratio DECIMAL(10,4) COMMENT '商家组合级库销比',
  108 + total_suggest_cnt INT DEFAULT 0 COMMENT '总建议数量',
  109 + total_suggest_amount DECIMAL(14,2) DEFAULT 0.00 COMMENT '总建议金额',
  110 + shop_count INT DEFAULT 0 COMMENT '涉及门店数',
  111 + need_replenishment_shop_count INT DEFAULT 0 COMMENT '需要补货的门店数',
  112 + part_decision_reason TEXT COMMENT '配件级补货决策理由',
  113 + priority INT NOT NULL DEFAULT 2 COMMENT '优先级: 1=高, 2=中, 3=低',
  114 + llm_confidence FLOAT DEFAULT 0.8 COMMENT 'LLM置信度',
  115 + statistics_date VARCHAR(16) COMMENT '统计日期',
  116 + create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
128 INDEX idx_task_no (task_no), 117 INDEX idx_task_no (task_no),
  118 + INDEX idx_part_code (part_code),
129 INDEX idx_dealer_grouping (dealer_grouping_id) 119 INDEX idx_dealer_grouping (dealer_grouping_id)
130 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货分析报告表-存储LLM生成的分析报告'; 120 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货建议-配件汇总表';
  121 +
sql/v2_add_log_tables.sql deleted
1 --- AI 任务执行日志表  
2 --- 版本: 1.0  
3 --- 创建日期: 2026-01-28  
4 -  
5 --- 任务执行日志表  
6 -CREATE TABLE IF NOT EXISTS ai_task_execution_log (  
7 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
8 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
9 - group_id BIGINT NOT NULL COMMENT '集团ID',  
10 - brand_grouping_id BIGINT COMMENT '品牌组合ID',  
11 - brand_grouping_name VARCHAR(128) COMMENT '品牌组合名称',  
12 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
13 - dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',  
14 - step_name VARCHAR(64) NOT NULL COMMENT '步骤名称',  
15 - step_order INT DEFAULT 0 COMMENT '步骤顺序',  
16 - status TINYINT DEFAULT 0 COMMENT '状态: 0-进行中 1-成功 2-失败 3-跳过',  
17 - input_data TEXT COMMENT '输入数据(JSON)',  
18 - output_data TEXT COMMENT '输出数据(JSON)',  
19 - error_message TEXT COMMENT '错误信息',  
20 - retry_count INT DEFAULT 0 COMMENT '重试次数',  
21 - sql_query TEXT COMMENT 'SQL查询语句(如有)',  
22 - llm_prompt TEXT COMMENT 'LLM提示词(如有)',  
23 - llm_response TEXT COMMENT 'LLM响应(如有)',  
24 - llm_tokens INT DEFAULT 0 COMMENT 'LLM Token消耗',  
25 - execution_time_ms INT DEFAULT 0 COMMENT '执行耗时(毫秒)',  
26 - start_time DATETIME COMMENT '开始时间',  
27 - end_time DATETIME COMMENT '结束时间',  
28 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
29 - INDEX idx_task_no (task_no),  
30 - INDEX idx_group_date (group_id, create_time),  
31 - INDEX idx_dealer_grouping (dealer_grouping_id)  
32 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI任务执行日志表-记录每个步骤的执行详情';  
33 -  
34 --- LLM补货建议明细表(商家组合维度)  
35 -CREATE TABLE IF NOT EXISTS ai_llm_suggestion_detail (  
36 - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',  
37 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
38 - group_id BIGINT NOT NULL COMMENT '集团ID',  
39 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
40 - dealer_grouping_name VARCHAR(128) COMMENT '商家组合名称',  
41 - shop_id BIGINT NOT NULL COMMENT '库房ID',  
42 - shop_name VARCHAR(128) COMMENT '库房名称',  
43 - part_code VARCHAR(64) NOT NULL COMMENT '配件编码',  
44 - part_name VARCHAR(256) COMMENT '配件名称',  
45 - unit VARCHAR(32) COMMENT '单位',  
46 - cost_price DECIMAL(14,2) DEFAULT 0 COMMENT '成本价',  
47 - current_storage_cnt DECIMAL(14,2) DEFAULT 0 COMMENT '当前库存数量',  
48 - avg_sales_cnt DECIMAL(14,2) DEFAULT 0 COMMENT '平均销量(月)',  
49 - current_ratio DECIMAL(10,4) COMMENT '当前库销比',  
50 - suggest_cnt INT DEFAULT 0 COMMENT 'LLM建议采购数量',  
51 - suggest_amount DECIMAL(14,2) DEFAULT 0 COMMENT 'LLM建议采购金额',  
52 - suggestion_reason TEXT COMMENT 'LLM建议依据/理由',  
53 - priority INT DEFAULT 0 COMMENT '优先级(1-高 2-中 3-低)',  
54 - llm_confidence DECIMAL(5,2) COMMENT 'LLM置信度(0-1)',  
55 - statistics_date VARCHAR(16) COMMENT '统计日期',  
56 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
57 - INDEX idx_task_no (task_no),  
58 - INDEX idx_dealer_grouping (dealer_grouping_id),  
59 - INDEX idx_shop_part (shop_id, part_code)  
60 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='LLM补货建议明细表-存储LLM生成的商家组合维度配件补货建议及依据';  
sql/v3_add_suggestion_reason.sql deleted
1 --- AI补货建议明细表 - 添加建议理由字段  
2 --- 版本: 3.0  
3 --- 创建日期: 2026-01-29  
4 -  
5 -ALTER TABLE ai_replenishment_detail  
6 -ADD COLUMN suggestion_reason TEXT COMMENT 'LLM建议理由' AFTER suggest_amount;  
sql/v4_cleanup_unused_tables.sql deleted
1 --- 清理无效的 AI 业务表  
2 --- 版本: 4.0  
3 --- 创建日期: 2026-01-30  
4 --- 描述: 删除不再使用的 ai_llm_suggestion_detail 和 ai_pre_plan_detail 表  
5 -  
6 -DROP TABLE IF EXISTS ai_llm_suggestion_detail;  
7 -DROP TABLE IF EXISTS ai_pre_plan_detail;  
sql/v4_report_json_structure.sql deleted
1 --- 报告结构化重构 - 将 Markdown 字段改为 JSON  
2 --- 版本: 4.0  
3 --- 日期: 2026-01-30  
4 -  
5 --- 1. 新增 JSON 字段  
6 -ALTER TABLE ai_replenishment_report  
7 -ADD COLUMN report_content JSON COMMENT '结构化报告内容(JSON)' AFTER top_priority_parts;  
8 -  
9 --- 2. 删除旧的 Markdown 字段  
10 -ALTER TABLE ai_replenishment_report  
11 -DROP COLUMN report_title,  
12 -DROP COLUMN executive_summary,  
13 -DROP COLUMN inventory_analysis,  
14 -DROP COLUMN risk_assessment,  
15 -DROP COLUMN purchase_recommendations,  
16 -DROP COLUMN optimization_suggestions,  
17 -DROP COLUMN full_report_markdown;  
sql/v5_add_priority_and_confidence.sql deleted
1 --- 5. 添加优先级和置信度字段  
2 --- 时间: 2026-01-30  
3 -  
4 -ALTER TABLE ai_replenishment_detail  
5 -ADD COLUMN priority INT NOT NULL DEFAULT 2 COMMENT '优先级: 1-高, 2-中, 3-低' AFTER suggestion_reason,  
6 -ADD COLUMN llm_confidence FLOAT DEFAULT 0.8 COMMENT 'LLM置信度' AFTER priority;  
sql/v6_add_part_summary.sql deleted
1 --- v6: 新增配件汇总表  
2 --- 用于存储配件在商家组合维度的汇总补货建议  
3 -  
4 -CREATE TABLE IF NOT EXISTS ai_replenishment_part_summary (  
5 - id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',  
6 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
7 - group_id BIGINT NOT NULL COMMENT '集团ID',  
8 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
9 - part_code VARCHAR(64) NOT NULL COMMENT '配件编码',  
10 - part_name VARCHAR(256) COMMENT '配件名称',  
11 - unit VARCHAR(32) COMMENT '单位',  
12 - cost_price DECIMAL(14,2) DEFAULT 0.00 COMMENT '成本价',  
13 -  
14 - -- 商家组合级别汇总数据  
15 - total_storage_cnt DECIMAL(14,2) DEFAULT 0.00 COMMENT '商家组合内总库存数量',  
16 - total_avg_sales_cnt DECIMAL(14,2) DEFAULT 0.00 COMMENT '商家组合内总月均销量',  
17 - group_current_ratio DECIMAL(10,4) COMMENT '商家组合级库销比',  
18 -  
19 - -- 补货建议汇总  
20 - total_suggest_cnt INT DEFAULT 0 COMMENT '总建议数量',  
21 - total_suggest_amount DECIMAL(14,2) DEFAULT 0.00 COMMENT '总建议金额',  
22 - shop_count INT DEFAULT 0 COMMENT '涉及门店数',  
23 - need_replenishment_shop_count INT DEFAULT 0 COMMENT '需要补货的门店数',  
24 -  
25 - -- LLM分析结果  
26 - part_decision_reason TEXT COMMENT '配件级补货决策理由',  
27 - priority INT NOT NULL DEFAULT 2 COMMENT '优先级: 1=高, 2=中, 3=低',  
28 - llm_confidence FLOAT DEFAULT 0.8 COMMENT 'LLM置信度',  
29 -  
30 - -- 元数据  
31 - statistics_date VARCHAR(16) COMMENT '统计日期',  
32 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
33 -  
34 - INDEX idx_task_no (task_no),  
35 - INDEX idx_part_code (part_code),  
36 - INDEX idx_dealer_grouping (dealer_grouping_id)  
37 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货建议-配件汇总表';  
sql/v7_add_low_frequency_count.sql deleted
1 --- v7: 添加低频件统计字段  
2 --- 用于记录出库次数<3 或 平均出库间隔>=30天的配件数量  
3 -  
4 -ALTER TABLE ai_replenishment_report  
5 -ADD COLUMN low_frequency_part_count INT DEFAULT 0 COMMENT '低频件数量'  
6 -AFTER stagnant_part_count;  
sql/v8_analysis_report.sql deleted
1 --- v8_analysis_report.sql  
2 --- 分析报告表,支持按品牌组合分组的分析数据持久化  
3 --- 分析内容由 LLM 生成  
4 -  
5 -CREATE TABLE IF NOT EXISTS ai_analysis_report (  
6 - id BIGINT AUTO_INCREMENT PRIMARY KEY,  
7 - task_no VARCHAR(32) NOT NULL COMMENT '任务编号',  
8 - group_id BIGINT NOT NULL COMMENT '集团ID',  
9 - dealer_grouping_id BIGINT NOT NULL COMMENT '商家组合ID',  
10 - brand_grouping_id BIGINT DEFAULT NULL COMMENT '品牌组合ID,NULL表示全部品牌',  
11 - brand_grouping_name VARCHAR(256) DEFAULT NULL COMMENT '品牌组合名称',  
12 -  
13 - -- 风险管控统计(数量)  
14 - total_count INT DEFAULT 0 COMMENT '配件总数',  
15 - shortage_count INT DEFAULT 0 COMMENT '缺货数量',  
16 - overstock_count INT DEFAULT 0 COMMENT '超标数量',  
17 - normal_count INT DEFAULT 0 COMMENT '正常数量',  
18 - low_frequency_count INT DEFAULT 0 COMMENT '低频数量',  
19 - stagnant_count INT DEFAULT 0 COMMENT '呆滞数量',  
20 -  
21 - -- 风险管控统计(金额)  
22 - total_amount DECIMAL(16,2) DEFAULT 0 COMMENT '总金额',  
23 - shortage_amount DECIMAL(16,2) DEFAULT 0 COMMENT '缺货金额',  
24 - overstock_amount DECIMAL(16,2) DEFAULT 0 COMMENT '超标金额',  
25 - normal_amount DECIMAL(16,2) DEFAULT 0 COMMENT '正常金额',  
26 - low_frequency_amount DECIMAL(16,2) DEFAULT 0 COMMENT '低频金额',  
27 - stagnant_amount DECIMAL(16,2) DEFAULT 0 COMMENT '呆滞金额',  
28 -  
29 - -- LLM 生成的分析内容  
30 - overview_analysis TEXT COMMENT '核心经营综述(LLM生成)',  
31 - risk_analysis TEXT COMMENT '风险管控分析(LLM生成)',  
32 - action_plan TEXT COMMENT '行动计划分析(LLM生成)',  
33 - report_content JSON COMMENT '结构化报告内容',  
34 -  
35 - llm_provider VARCHAR(32) COMMENT 'LLM提供商',  
36 - llm_model VARCHAR(64) COMMENT 'LLM模型名称',  
37 - generation_tokens INT DEFAULT 0 COMMENT '生成token数',  
38 - statistics_date VARCHAR(16) COMMENT '统计日期',  
39 - create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  
40 -  
41 - INDEX idx_task_no (task_no),  
42 - INDEX idx_task_brand (task_no, brand_grouping_id),  
43 - INDEX idx_dealer_grouping (dealer_grouping_id)  
44 -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI分析报告表';