ai-engineering-init 1.16.2 → 1.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/code-patterns/SKILL.md +0 -119
- package/.claude/skills/codex-code-review/SKILL.md +0 -39
- package/.claude/skills/fix-bug/SKILL.md +57 -0
- package/.claude/skills/leniu-code-patterns/SKILL.md +2 -179
- package/.claude/skills/leniu-crud-development/SKILL.md +7 -26
- package/.claude/skills/leniu-java-amount-handling/SKILL.md +461 -0
- package/.claude/skills/leniu-java-export/SKILL.md +570 -0
- package/.claude/skills/leniu-java-mybatis/SKILL.md +16 -25
- package/.claude/skills/leniu-java-report-query-param/SKILL.md +291 -0
- package/.claude/skills/leniu-java-total-line/SKILL.md +196 -0
- package/.claude/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
- package/.claude/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
- package/.claude/skills/leniu-mealtime/SKILL.md +215 -0
- package/.claude/skills/leniu-report-customization/SKILL.md +415 -0
- package/.claude/skills/leniu-report-customization/references/table-fields.md +93 -0
- package/.claude/skills/leniu-report-standard-customization/SKILL.md +391 -0
- package/.claude/skills/leniu-report-standard-customization/references/analysis-module.md +64 -0
- package/.claude/skills/leniu-report-standard-customization/references/table-fields.md +113 -0
- package/.claude/skills/loki-log-query/SKILL.md +30 -33
- package/.claude/skills/mysql-debug/SKILL.md +17 -35
- package/.codex/skills/code-patterns/SKILL.md +0 -119
- package/.codex/skills/fix-bug/SKILL.md +57 -0
- package/.codex/skills/leniu-code-patterns/SKILL.md +2 -179
- package/.codex/skills/leniu-crud-development/SKILL.md +7 -26
- package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
- package/.codex/skills/leniu-java-export/SKILL.md +570 -0
- package/.codex/skills/leniu-java-mybatis/SKILL.md +16 -25
- package/.codex/skills/leniu-java-report-query-param/SKILL.md +291 -0
- package/.codex/skills/leniu-java-total-line/SKILL.md +196 -0
- package/.codex/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
- package/.codex/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
- package/.codex/skills/leniu-mealtime/SKILL.md +215 -0
- package/.codex/skills/leniu-report-customization/SKILL.md +415 -0
- package/.codex/skills/leniu-report-customization/references/table-fields.md +93 -0
- package/.codex/skills/leniu-report-standard-customization/SKILL.md +391 -0
- package/.codex/skills/leniu-report-standard-customization/references/analysis-module.md +64 -0
- package/.codex/skills/leniu-report-standard-customization/references/table-fields.md +113 -0
- package/.codex/skills/loki-log-query/SKILL.md +55 -25
- package/.codex/skills/mysql-debug/SKILL.md +12 -6
- package/.cursor/skills/code-patterns/SKILL.md +0 -119
- package/.cursor/skills/fix-bug/SKILL.md +57 -0
- package/.cursor/skills/leniu-code-patterns/SKILL.md +2 -179
- package/.cursor/skills/leniu-crud-development/SKILL.md +7 -26
- package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
- package/.cursor/skills/leniu-java-export/SKILL.md +570 -0
- package/.cursor/skills/leniu-java-mybatis/SKILL.md +16 -25
- package/.cursor/skills/leniu-java-report-query-param/SKILL.md +291 -0
- package/.cursor/skills/leniu-java-total-line/SKILL.md +196 -0
- package/.cursor/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
- package/.cursor/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
- package/.cursor/skills/leniu-mealtime/SKILL.md +215 -0
- package/.cursor/skills/leniu-report-customization/SKILL.md +415 -0
- package/.cursor/skills/leniu-report-customization/references/table-fields.md +93 -0
- package/.cursor/skills/leniu-report-standard-customization/SKILL.md +391 -0
- package/.cursor/skills/leniu-report-standard-customization/references/analysis-module.md +64 -0
- package/.cursor/skills/leniu-report-standard-customization/references/table-fields.md +113 -0
- package/.cursor/skills/loki-log-query/SKILL.md +30 -33
- package/.cursor/skills/mysql-debug/SKILL.md +20 -36
- package/CLAUDE.md +34 -0
- package/package.json +1 -1
- package/src/skills/fix-bug/SKILL.md +57 -0
|
@@ -30,10 +30,10 @@ description: |
|
|
|
30
30
|
```
|
|
31
31
|
1. 本地项目:.claude/loki-config.json(新格式)
|
|
32
32
|
2. 本地项目:.claude/skills/loki-log-query/environments.json(旧格式,兼容)
|
|
33
|
-
3. 全局配置:~/.claude/loki-config.json
|
|
33
|
+
3. 全局配置:~/.claude/loki-config.json(或 ~/.cursor/loki-config.json)
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
本地优先。全局配置用 `npx ai-engineering-init config --type loki --scope global` 创建。
|
|
37
37
|
|
|
38
38
|
### 配置结构(支持 range 范围匹配)
|
|
39
39
|
|
|
@@ -47,32 +47,32 @@ description: |
|
|
|
47
47
|
"token": "glsa_xxx",
|
|
48
48
|
"aliases": ["mdev", "dev"],
|
|
49
49
|
"range": "dev1~15",
|
|
50
|
-
"projects": ["dev01","dev02","
|
|
50
|
+
"projects": ["dev01","dev02","...","dev15"]
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
###
|
|
56
|
+
### 环境列表(默认)
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
| 环境别名 | 名称 | URL | 快捷词 |
|
|
59
|
+
|----------|------|-----|--------|
|
|
60
|
+
| `test13` | 测试13(主测试环境) | `https://test13.xnzn.net/grafana` | test13, 13 |
|
|
61
|
+
| `monitor-test` | Monitor 测试环境 | `https://monitor-test.xnzn.net/grafana` | mtest |
|
|
62
|
+
| `monitor-dev` | Monitor 开发环境 | `https://monitor-dev.xnzn.net/grafana` | mdev, dev |
|
|
63
|
+
| `monitor02-dev` | Monitor02 开发环境 | `https://monitor02-dev.xnzn.net/grafana` | m02, monitor02 |
|
|
64
|
+
| `monitor-tyy-dev` | Monitor 体验园开发环境 | `https://monitor-tyy-dev.xnzn.net/grafana` | tyy, 体验园 |
|
|
65
|
+
|
|
66
|
+
### 环境匹配规则(含 range)
|
|
59
67
|
|
|
60
68
|
| 用户说法 | 匹配方式 | 结果 |
|
|
61
69
|
|---------|---------|------|
|
|
62
|
-
| "查 test13 的日志" | 精确匹配 key
|
|
63
|
-
| "去 dev10 查" | **range 匹配**:dev10 在 monitor-dev 的 projects 中 | `monitor-dev
|
|
70
|
+
| "查 test13 的日志" | 精确匹配 key/aliases | `test13` 环境 |
|
|
71
|
+
| "去 dev10 查" | **range 匹配**:dev10 在 monitor-dev 的 projects 中 | `monitor-dev`,`project="dev10"` |
|
|
64
72
|
| "去 monitor-dev 查" | 精确匹配 key | `monitor-dev` 环境 |
|
|
65
73
|
| "切到体验园" | aliases 匹配 | `monitor-tyy-dev` 环境 |
|
|
66
74
|
| 未指定环境 | 使用 `active` 字段 | 默认活跃环境 |
|
|
67
75
|
|
|
68
|
-
**range 匹配算法**:
|
|
69
|
-
```
|
|
70
|
-
1. 用户输入 "dev10"
|
|
71
|
-
2. 先精确匹配 key / aliases → 未命中
|
|
72
|
-
3. 遍历所有环境的 projects 列表,检查是否包含 "dev10"
|
|
73
|
-
4. 命中 → 使用该环境,并自动添加 project="dev10" 标签过滤
|
|
74
|
-
```
|
|
75
|
-
|
|
76
76
|
### 读取配置(含全局降级 + range 匹配)
|
|
77
77
|
|
|
78
78
|
```bash
|
|
@@ -82,10 +82,10 @@ find_config() {
|
|
|
82
82
|
for f in \
|
|
83
83
|
"${PROJECT_DIR}/.claude/loki-config.json" \
|
|
84
84
|
"${PROJECT_DIR}/.claude/skills/loki-log-query/environments.json" \
|
|
85
|
-
"${HOME}/.claude/loki-config.json"
|
|
85
|
+
"${HOME}/.claude/loki-config.json" \
|
|
86
|
+
"${HOME}/.cursor/loki-config.json"; do
|
|
86
87
|
[ -f "$f" ] && echo "$f" && return
|
|
87
88
|
done
|
|
88
|
-
echo ""
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
ENV_FILE=$(find_config)
|
|
@@ -93,46 +93,43 @@ ENV_FILE=$(find_config)
|
|
|
93
93
|
# 通过别名或 range 查找环境 key + project
|
|
94
94
|
find_env() {
|
|
95
95
|
python3 -c "
|
|
96
|
-
import json
|
|
96
|
+
import json
|
|
97
97
|
data = json.load(open('${ENV_FILE}'))
|
|
98
98
|
alias = '${1}'.lower()
|
|
99
|
-
# 1. 精确匹配 key 或 aliases
|
|
100
99
|
for key, env in data['environments'].items():
|
|
101
100
|
if alias == key or alias in env.get('aliases', []):
|
|
102
|
-
print(f'{key}|')
|
|
103
|
-
exit()
|
|
104
|
-
# 2. range 匹配:在 projects 列表中查找
|
|
101
|
+
print(f'{key}|'); exit()
|
|
105
102
|
for key, env in data['environments'].items():
|
|
106
103
|
if alias in env.get('projects', []):
|
|
107
|
-
print(f'{key}|{alias}')
|
|
108
|
-
exit()
|
|
109
|
-
# 3. 未命中,返回默认
|
|
104
|
+
print(f'{key}|{alias}'); exit()
|
|
110
105
|
print(f'{data[\"active\"]}|')
|
|
111
106
|
"
|
|
112
107
|
}
|
|
113
|
-
|
|
114
|
-
# 使用示例:
|
|
115
|
-
# result=$(find_env "dev10")
|
|
116
|
-
# ENV_KEY=$(echo "$result" | cut -d'|' -f1) # monitor-dev
|
|
117
|
-
# PROJECT=$(echo "$result" | cut -d'|' -f2) # dev10
|
|
118
|
-
# 查询时:{app="yunshitang",project="${PROJECT}"}
|
|
119
108
|
```
|
|
120
109
|
|
|
121
|
-
### 切换活跃环境
|
|
110
|
+
### 切换活跃环境
|
|
122
111
|
|
|
123
112
|
```bash
|
|
113
|
+
# 切换默认环境为 monitor-dev
|
|
124
114
|
python3 -c "
|
|
125
115
|
import json
|
|
126
116
|
data = json.load(open('${ENV_FILE}'))
|
|
127
117
|
data['active'] = 'monitor-dev'
|
|
128
118
|
json.dump(data, open('${ENV_FILE}', 'w'), indent=2, ensure_ascii=False)
|
|
119
|
+
print('Switched to:', data['active'])
|
|
129
120
|
"
|
|
121
|
+
```
|
|
130
122
|
|
|
123
|
+
### 更新 Token
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# 为某个环境设置 Token
|
|
131
127
|
python3 -c "
|
|
132
128
|
import json
|
|
133
129
|
data = json.load(open('${ENV_FILE}'))
|
|
134
|
-
data['environments']['monitor-dev']['token'] = 'glsa_
|
|
130
|
+
data['environments']['monitor-dev']['token'] = 'glsa_新的token值'
|
|
135
131
|
json.dump(data, open('${ENV_FILE}', 'w'), indent=2, ensure_ascii=False)
|
|
132
|
+
print('Token updated for monitor-dev')
|
|
136
133
|
"
|
|
137
134
|
```
|
|
138
135
|
|
|
@@ -42,9 +42,10 @@ description: |
|
|
|
42
42
|
|
|
43
43
|
项目目录下的配置文件,优先于全局配置。
|
|
44
44
|
|
|
45
|
-
### 优先级 3
|
|
45
|
+
### 优先级 3:全局配置(所有项目共享)
|
|
46
46
|
|
|
47
|
-
全局配置文件(通过 `npx ai-engineering-init config --scope global`
|
|
47
|
+
全局配置文件(通过 `npx ai-engineering-init config --scope global` 创建)。
|
|
48
|
+
查找路径:`~/.claude/mysql-config.json` 或 `~/.cursor/mysql-config.json`(取决于使用的工具)。
|
|
48
49
|
**推荐**:公司统一的数据库连接信息放全局,项目特定的覆盖放本地。
|
|
49
50
|
|
|
50
51
|
### 优先级 4:工程配置文件(零配置,本地开发默认)
|
|
@@ -112,60 +113,43 @@ brew install mysql-client
|
|
|
112
113
|
|
|
113
114
|
## 多环境支持
|
|
114
115
|
|
|
115
|
-
###
|
|
116
|
+
### 配置文件结构
|
|
116
117
|
|
|
117
|
-
|
|
118
|
-
1. 本地项目:.claude/mysql-config.json
|
|
119
|
-
2. 全局配置:~/.claude/mysql-config.json
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
本地配置优先。如果本地无配置,使用全局。两者都存在时,本地覆盖全局(同名环境取本地值)。
|
|
123
|
-
|
|
124
|
-
### 配置文件结构(支持 range 范围匹配)
|
|
118
|
+
`.claude/mysql-config.json` 支持多环境配置:
|
|
125
119
|
|
|
126
120
|
```json
|
|
127
121
|
{
|
|
128
122
|
"environments": {
|
|
129
|
-
"local": { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "xxx"
|
|
130
|
-
"dev": { "host": "dev-db.example.com", "port": 3306, "user": "dev_user", "password": "xxx"
|
|
131
|
-
"test": { "host": "test-db.example.com", "port": 3306, "user": "test_user", "password": "xxx", "range": "1~30", "_desc": "覆盖 test1→test30" },
|
|
123
|
+
"local": { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "xxx" },
|
|
124
|
+
"dev": { "host": "dev-db.example.com", "port": 3306, "user": "dev_user", "password": "xxx" },
|
|
132
125
|
"prod": { "host": "prod-db.example.com", "port": 3306, "user": "readonly", "password": "xxx" }
|
|
133
126
|
},
|
|
134
127
|
"default": "local"
|
|
135
128
|
}
|
|
136
129
|
```
|
|
137
130
|
|
|
138
|
-
### 环境范围匹配(range)
|
|
139
|
-
|
|
140
|
-
`range` 字段支持 `起始~结束` 格式,用于一个配置覆盖多个编号环境:
|
|
141
|
-
|
|
142
|
-
| 用户说法 | 匹配逻辑 | 结果 |
|
|
143
|
-
|---------|---------|------|
|
|
144
|
-
| "去 dev10 查" | 提取前缀 `dev`、编号 `10`,检查 dev 环境 range "1~15",10 在范围内 | 使用 dev 配置 |
|
|
145
|
-
| "连 test25" | 提取前缀 `test`、编号 `25`,检查 test 环境 range "1~30",25 在范围内 | 使用 test 配置 |
|
|
146
|
-
| "连 prod" | 精确匹配 prod 环境 | 使用 prod 配置 |
|
|
147
|
-
|
|
148
|
-
**匹配算法**:
|
|
149
|
-
```
|
|
150
|
-
1. 用户输入的环境名(如 "dev10")
|
|
151
|
-
2. 先精确匹配环境 key(environments["dev10"])
|
|
152
|
-
3. 未命中 → 拆分为前缀+编号("dev" + 10)
|
|
153
|
-
4. 查找有 range 字段的环境,前缀匹配 + 编号在范围内
|
|
154
|
-
5. 命中 → 使用该环境的 host/port/user/password
|
|
155
|
-
```
|
|
156
|
-
|
|
157
131
|
### 环境选择规则
|
|
158
132
|
|
|
159
133
|
| 优先级 | 来源 | 示例 |
|
|
160
134
|
|--------|------|------|
|
|
161
|
-
| 1(最高) | 用户对话中指定 | "连
|
|
135
|
+
| 1(最高) | 用户对话中指定 | "连 dev 环境查一下"、"用生产库看看" |
|
|
162
136
|
| 2 | 配置文件 `default` 字段 | `"default": "local"` |
|
|
163
137
|
|
|
138
|
+
### 环境关键词映射
|
|
139
|
+
|
|
140
|
+
用户说的话 → 对应环境名:
|
|
141
|
+
|
|
142
|
+
| 用户说法 | 环境 |
|
|
143
|
+
|---------|------|
|
|
144
|
+
| "本地"、"local"、"本地环境" | `local` |
|
|
145
|
+
| "开发"、"dev"、"测试环境"、"开发环境" | `dev` |
|
|
146
|
+
| "生产"、"prod"、"线上"、"正式环境" | `prod` |
|
|
147
|
+
|
|
164
148
|
### 连接示例
|
|
165
149
|
|
|
166
150
|
```bash
|
|
167
|
-
# 用户说"连
|
|
168
|
-
# →
|
|
151
|
+
# 用户说"连 dev 环境查一下 order_info"
|
|
152
|
+
# → 读取 environments.dev 的连接信息 + 日志提取的数据库名
|
|
169
153
|
mysql -h dev-db.example.com -P 3306 -u dev_user -p'xxx' 546198574447230976 -e "SELECT ..."
|
|
170
154
|
```
|
|
171
155
|
|
package/CLAUDE.md
CHANGED
|
@@ -219,6 +219,7 @@ CREATE TABLE [表名] (
|
|
|
219
219
|
| **轻量** | 单表 CRUD、字段增删、简单查询 | `/dev` 或 `/crud` 直接开发 | 无需需求拆解 |
|
|
220
220
|
| **中等** | 2-3 张表联动、跨 Service 调用、状态流转 | `/dev` 开发(可选 OpenSpec) | 建议先理清逻辑再编码 |
|
|
221
221
|
| **复杂** | 多模块协作、复杂业务流程、需要设计评审 | OpenSpec → `/dev` | 先用 `/opsx:ff` 生成制品,再按 tasks 逐步实现 |
|
|
222
|
+
| **大型项目** | 新项目从零开始、10+ 文件重构、多阶段里程碑 | `/gsd:new-project` 或 `/gsd:plan-phase` | GSD 编排 + Skills 执行 |
|
|
222
223
|
|
|
223
224
|
### 开发类型路由
|
|
224
225
|
|
|
@@ -249,3 +250,36 @@ tasks.md ────→ /progress(跟踪进度)
|
|
|
249
250
|
| `/check` | 代码规范检查 |
|
|
250
251
|
| `/next` | 下一步建议(含 OpenSpec 变更扫描) |
|
|
251
252
|
| `/progress` | 项目进度(含 OpenSpec 状态) |
|
|
253
|
+
|
|
254
|
+
## GSD 集成(大型任务编排)
|
|
255
|
+
|
|
256
|
+
本框架与 [GSD (Get Shit Done)](https://github.com/gsd-build/get-shit-done) 深度集成。GSD 负责项目编排,Skills 负责代码执行。
|
|
257
|
+
|
|
258
|
+
### GSD + Skills 协作模式
|
|
259
|
+
|
|
260
|
+
| GSD 阶段 | 自动激活的 Skills/Agents |
|
|
261
|
+
|----------|------------------------|
|
|
262
|
+
| `/gsd:debug` | 优先使用 `loki-runner` 查日志 + `mysql-runner` 查数据库 + `bug-analyzer` 根因分析 |
|
|
263
|
+
| `/gsd:execute-phase` | 读取 `.claude/skills/` 自动应用项目编码规范(CRUD、API、数据库等) |
|
|
264
|
+
| `/gsd:plan-phase` | 参考 Skills 中的架构设计和模块划分规范 |
|
|
265
|
+
| `/gsd:verify-work` | 可调用 `auto-test-generator` 生成接口测试验证 |
|
|
266
|
+
|
|
267
|
+
### 可用的领域 Agents(GSD 子 agent 可调用)
|
|
268
|
+
|
|
269
|
+
| Agent | 能力 | 适用场景 |
|
|
270
|
+
|-------|------|---------|
|
|
271
|
+
| `loki-runner` | 查 Grafana Loki 线上日志 | debug 时查错误日志、traceId 链路 |
|
|
272
|
+
| `mysql-runner` | 查 MySQL 数据库验证数据 | debug 时验证数据状态 |
|
|
273
|
+
| `bug-analyzer` | 根因分析(含日志+数据库联动) | 复杂 Bug 的多维度排查 |
|
|
274
|
+
| `code-scanner` | 快速扫描代码库定位文件 | 大型代码库的文件定位 |
|
|
275
|
+
| `auto-test-generator` | 生成 Hurl 接口测试 | verify-work 阶段验证 |
|
|
276
|
+
| `image-reader` | 读取 Axure 原型截图 | 需求分析阶段 |
|
|
277
|
+
| `task-fetcher` | 获取云效任务信息 | 任务管理联动 |
|
|
278
|
+
| `code-reviewer` | 代码审查(含 leniu 规范) | 执行完成后质量检查 |
|
|
279
|
+
|
|
280
|
+
### 环境配置(GSD agent 共享)
|
|
281
|
+
|
|
282
|
+
GSD 子 agent 可读取以下配置(全局或本地):
|
|
283
|
+
- `mysql-config.json` — 数据库连接(支持 range 环境匹配)
|
|
284
|
+
- `loki-config.json` — Grafana Loki Token
|
|
285
|
+
- 初始化:`npx ai-engineering-init config --type all --scope global`
|
package/package.json
CHANGED
|
@@ -197,6 +197,62 @@ Agent(mysql-runner, "根据日志发现涉及 order_info 表,查询 id=xxx 的
|
|
|
197
197
|
| Bug 描述 + DB 信息 | bug-analyzer + mysql-runner | — |
|
|
198
198
|
| Bug 描述 + traceId + DB 信息 | 全部 | 日志中有新表/ID → mysql-runner 追加查询 |
|
|
199
199
|
|
|
200
|
+
## SQL 报表 Bug 专项流程
|
|
201
|
+
|
|
202
|
+
当 Bug 涉及 **SQL 查询逻辑错误**(SUM/GROUP BY/CASE WHEN/金额计算等),启用以下验证流程:
|
|
203
|
+
|
|
204
|
+
### 修复前:建立基线
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
1. 读取当前 Mapper XML,理解现有 SQL 逻辑
|
|
208
|
+
2. 如果有已修复的参考查询(如同模块的明细查询),先读取其 SQL 逻辑作为正确参考
|
|
209
|
+
3. 查库获取当前错误结果作为"修复前基线"(可选,用户提供 DB 时执行)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 修复后:交叉验证(必须执行)
|
|
213
|
+
|
|
214
|
+
**两步验证法**(以本项目销售汇总修复为典型案例):
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
步骤 1:直接执行修改后的 SQL,验证基本逻辑
|
|
218
|
+
- 检查各记录类型是否正确处理(称重/按份、正向/逆向、入库/出库)
|
|
219
|
+
- 检查特殊值:NULL 处理、除零保护、边界条件
|
|
220
|
+
|
|
221
|
+
步骤 2:交叉对比验证
|
|
222
|
+
- 方法 A:用已修复的明细查询做 SUM 汇总
|
|
223
|
+
- 方法 B:执行修改后的汇总查询
|
|
224
|
+
- 对比 A vs B:总计必须完全一致
|
|
225
|
+
- 按维度对比(按商品/按门店等):逐行 MATCH/DIFF
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 验证 SQL 模板
|
|
229
|
+
|
|
230
|
+
```sql
|
|
231
|
+
-- 交叉验证:明细汇总 vs 汇总查询
|
|
232
|
+
SELECT '明细汇总' as source, SUM(saleNum), SUM(cost), ...
|
|
233
|
+
FROM (/* 明细查询逐行 */) detail
|
|
234
|
+
UNION ALL
|
|
235
|
+
SELECT '汇总查询' as source, ...
|
|
236
|
+
FROM /* 汇总查询 */;
|
|
237
|
+
|
|
238
|
+
-- 按维度逐行对比
|
|
239
|
+
SELECT COALESCE(d.name, s.name) as name,
|
|
240
|
+
d.detail_value, s.summary_value,
|
|
241
|
+
CASE WHEN d.detail_value = s.summary_value THEN 'MATCH' ELSE 'DIFF' END as result
|
|
242
|
+
FROM (/* 明细按维度 GROUP BY */) d
|
|
243
|
+
LEFT JOIN (/* 汇总按维度 GROUP BY */) s ON d.id = s.id;
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### SQL 修改注意事项
|
|
247
|
+
|
|
248
|
+
| 规则 | 说明 |
|
|
249
|
+
|------|------|
|
|
250
|
+
| **保留 WHERE 条件** | 新增/修改查询必须包含与现有查询相同的过滤条件 |
|
|
251
|
+
| **GROUP BY 优先** | 优先添加字段到 GROUP BY,不用 ANY_VALUE() |
|
|
252
|
+
| **JOIN 一致性** | 主查询和合计查询的 JOIN 必须一致(如 drp_unit) |
|
|
253
|
+
| **IFNULL 保护** | 除法运算中的分母必须用 IFNULL 防止除零 |
|
|
254
|
+
| **业务类型分支** | CASE WHEN 必须覆盖所有业务类型(称重/按份、入库/出库等) |
|
|
255
|
+
|
|
200
256
|
## 提交规则
|
|
201
257
|
|
|
202
258
|
修复完成后,**必须调用 `Skill(git-workflow)` 再执行 git 操作**。
|
|
@@ -210,3 +266,4 @@ Agent(mysql-runner, "根据日志发现涉及 order_info 表,查询 id=xxx 的
|
|
|
210
266
|
- 简单 Bug 不要过度编排,直接修就行(但仍需先报告再修复)
|
|
211
267
|
- 如果用户没提供 DB/Loki 信息但 Bug 涉及数据问题,主动询问
|
|
212
268
|
- 与 `bug-detective` 技能的区别:`bug-detective` 是排查指南,`fix-bug` 是全流程编排(包含排查+修复+提交)
|
|
269
|
+
- SQL 报表 Bug 修复后**必须执行交叉验证**,不能只看"能跑"就提交
|