Commit b14e72d368e8685e07ba218c1cff4f62af282d92

Authored by 朱焱飞
1 parent 70aa7f12

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

README.md
... ... @@ -22,8 +22,7 @@ graph LR
22 22 B --> C[FetchPartRatio]
23 23 C --> D[SQLAgent<br/>LLM分析]
24 24 D --> E[AllocateBudget]
25   - E --> F[GenerateReport<br/>LLM]
26   - F --> G[SaveResult]
  25 + E --> G[SaveResult]
27 26 ```
28 27  
29 28 详细架构图见 [docs/architecture.md](docs/architecture.md)
... ... @@ -36,7 +35,6 @@ graph LR
36 35 |------|------|------|
37 36 | **SQL Agent** | LLM 分析 | 直接分析 part_ratio 数据生成补货建议 |
38 37 | **补货分配** | Replenishment | 转换 LLM 建议为补货明细 |
39   -| **分析报告** | Report | LLM 生成库存分析报告 |
40 38  
41 39 ### 🚧 计划中
42 40  
... ... @@ -97,8 +95,7 @@ fw-pms-ai/
97 95 1. FetchPartRatio - 从 part_ratio 表获取库销比数据
98 96 2. SQLAgent - LLM 分析数据,生成补货建议
99 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 113 | `part_ratio` | 配件库销比数据(来源表) |
117 114 | `ai_replenishment_task` | 任务记录 |
118 115 | `ai_replenishment_detail` | 配件级别补货建议 |
119   -| `ai_replenishment_report` | 分析报告 |
  116 +| `ai_replenishment_part_summary` | 配件汇总表 |
120 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 139  
144 140 ```bash
145 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 144 ### 4. 运行
... ... @@ -167,7 +162,6 @@ Prompt 文件存放在 `prompts/` 目录:
167 162 |------|------|
168 163 | `suggestion.md` | 补货建议生成(含业务术语定义) |
169 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 9 DROP TABLE IF EXISTS ai_replenishment_task;
42 10 CREATE TABLE ai_replenishment_task (
43 11 id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
... ... @@ -63,7 +31,7 @@ CREATE TABLE ai_replenishment_task (
63 31 INDEX idx_dealer_grouping (dealer_grouping_id)
64 32 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI补货任务表-记录每次补货建议任务执行';
65 33  
66   --- 3. AI补货建议明细表
  34 +-- 2. AI补货建议明细表
67 35 DROP TABLE IF EXISTS ai_replenishment_detail;
68 36 CREATE TABLE ai_replenishment_detail (
69 37 id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
... ... @@ -93,38 +61,61 @@ CREATE TABLE ai_replenishment_detail (
93 61 INDEX idx_shop_part (shop_id, part_code)
94 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 117 INDEX idx_task_no (task_no),
  118 + INDEX idx_part_code (part_code),
129 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分析报告表';