kcode-pi 0.1.0

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.
Files changed (219) hide show
  1. package/README.md +358 -0
  2. package/dist/cli/kcode.d.ts +15 -0
  3. package/dist/cli/kcode.js +153 -0
  4. package/dist/cli/main.d.ts +2 -0
  5. package/dist/cli/main.js +7 -0
  6. package/docs/KCODE_DISTRIBUTION.md +91 -0
  7. package/extensions/kingdee-harness.ts +180 -0
  8. package/extensions/kingdee-header.ts +122 -0
  9. package/extensions/kingdee-tools.ts +379 -0
  10. package/knowledge/.backup/v1.0.0/version.json +10 -0
  11. package/knowledge/cangqiong/product-notes.md +15 -0
  12. package/knowledge/common/business-flows.md +115 -0
  13. package/knowledge/common/config-guides.md +110 -0
  14. package/knowledge/common/error-patterns.md +170 -0
  15. package/knowledge/common/implementation.md +144 -0
  16. package/knowledge/cosmic/hard-constraints.md +38 -0
  17. package/knowledge/cosmic/ksql-datafix.md +34 -0
  18. package/knowledge/cosmic/platform-baseline.md +32 -0
  19. package/knowledge/cosmic/plugin-decision-matrix.md +40 -0
  20. package/knowledge/cosmic/review-checklist.md +40 -0
  21. package/knowledge/cosmic/unittest.md +35 -0
  22. package/knowledge/enterprise/api-reference.md +186 -0
  23. package/knowledge/enterprise/code-patterns.md +217 -0
  24. package/knowledge/enterprise/plugin-lifecycle.md +188 -0
  25. package/knowledge/enterprise/tables.json +159 -0
  26. package/knowledge/flagship/api-reference.md +237 -0
  27. package/knowledge/flagship/code-patterns.md +246 -0
  28. package/knowledge/flagship/cosmic-platform-note.md +15 -0
  29. package/knowledge/flagship/plugin-lifecycle.md +248 -0
  30. package/knowledge/flagship/tables.json +159 -0
  31. package/knowledge/version.json +10 -0
  32. package/knowledge/xinghan/product-notes.md +15 -0
  33. package/package.json +71 -0
  34. package/prompts/kd-discuss.md +11 -0
  35. package/prompts/kd-execute.md +12 -0
  36. package/prompts/kd-plan.md +12 -0
  37. package/prompts/kd-ship.md +12 -0
  38. package/prompts/kd-spec.md +12 -0
  39. package/prompts/kd-verify.md +12 -0
  40. package/skills/kd-check/SKILL.md +26 -0
  41. package/skills/kd-cosmic-dev/SKILL.md +82 -0
  42. package/skills/kd-cosmic-review/SKILL.md +90 -0
  43. package/skills/kd-cosmic-unittest/SKILL.md +92 -0
  44. package/skills/kd-debug/SKILL.md +30 -0
  45. package/skills/kd-discuss/SKILL.md +24 -0
  46. package/skills/kd-execute/SKILL.md +22 -0
  47. package/skills/kd-gen/SKILL.md +34 -0
  48. package/skills/kd-ksql/SKILL.md +86 -0
  49. package/skills/kd-plan/SKILL.md +24 -0
  50. package/skills/kd-ship/SKILL.md +22 -0
  51. package/skills/kd-spec/SKILL.md +24 -0
  52. package/skills/kd-verify/SKILL.md +22 -0
  53. package/themes/kcode-dark.json +81 -0
  54. package/vendor/kingdee-skills/cosmic-unittest/SKILL.md +788 -0
  55. package/vendor/kingdee-skills/cosmic-unittest/author-cache.json +5 -0
  56. package/vendor/kingdee-skills/cosmic-unittest/cosmic-unittest-skill-overview.html +746 -0
  57. package/vendor/kingdee-skills/cosmic-unittest/examples/business-test.md +205 -0
  58. package/vendor/kingdee-skills/cosmic-unittest/examples/common-test.md +257 -0
  59. package/vendor/kingdee-skills/cosmic-unittest/examples/formplugin-test.md +560 -0
  60. package/vendor/kingdee-skills/cosmic-unittest/examples/op-plugin-test.md +231 -0
  61. package/vendor/kingdee-skills/cosmic-unittest/examples/validator-test.md +232 -0
  62. package/vendor/kingdee-skills/cosmic-unittest/patterns/business-helper.md +184 -0
  63. package/vendor/kingdee-skills/cosmic-unittest/patterns/common-module.md +355 -0
  64. package/vendor/kingdee-skills/cosmic-unittest/patterns/convert-plugin.md +130 -0
  65. package/vendor/kingdee-skills/cosmic-unittest/patterns/formplugin.md +235 -0
  66. package/vendor/kingdee-skills/cosmic-unittest/patterns/op-plugin.md +226 -0
  67. package/vendor/kingdee-skills/cosmic-unittest/patterns/validator.md +206 -0
  68. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/SKILL.md +674 -0
  69. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/advanced-scenario-checklist.md +307 -0
  70. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/algox-performance-checklist.md +129 -0
  71. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/coding-standard-checklist.md +491 -0
  72. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/cosmic-api-checklist.md +285 -0
  73. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/data-access-checklist.md +261 -0
  74. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/data-transaction-checklist.md +390 -0
  75. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/domain-logic-checklist.md +295 -0
  76. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/form-plugin-checklist.md +508 -0
  77. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/infra-checklist.md +254 -0
  78. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/ksql-checklist.md +305 -0
  79. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/lifecycle-checklist.md +298 -0
  80. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/operation-plugin-checklist.md +442 -0
  81. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/test-mock-checklist.md +120 -0
  82. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/references/ui-performance-checklist.md +320 -0
  83. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/scripts/pattern-matcher.py +336 -0
  84. package/vendor/kingdee-skills/kingdee-cosmic-reviewer/scripts/review-score-calculator.py +121 -0
  85. package/vendor/kingdee-skills/ok-cosmic/CHANGELOG.md +295 -0
  86. package/vendor/kingdee-skills/ok-cosmic/README.md +460 -0
  87. package/vendor/kingdee-skills/ok-cosmic/SKILL.md +287 -0
  88. package/vendor/kingdee-skills/ok-cosmic/agents/openai.yaml +17 -0
  89. package/vendor/kingdee-skills/ok-cosmic/assets/BatchImportPluginTemplate.java +93 -0
  90. package/vendor/kingdee-skills/ok-cosmic/assets/BillPlugInTemplate.java +156 -0
  91. package/vendor/kingdee-skills/ok-cosmic/assets/ConvertPlugInTemplate.java +255 -0
  92. package/vendor/kingdee-skills/ok-cosmic/assets/FormPluginTemplate.java +597 -0
  93. package/vendor/kingdee-skills/ok-cosmic/assets/IWorkflowPluginTemplate.java +91 -0
  94. package/vendor/kingdee-skills/ok-cosmic/assets/ListPluginTemplate.java +194 -0
  95. package/vendor/kingdee-skills/ok-cosmic/assets/OpPluginTemplate.java +201 -0
  96. package/vendor/kingdee-skills/ok-cosmic/assets/OpenApiControllerTemplate.java +103 -0
  97. package/vendor/kingdee-skills/ok-cosmic/assets/PrintPluginTemplate.java +95 -0
  98. package/vendor/kingdee-skills/ok-cosmic/assets/ReportFormPluginTemplate.java +257 -0
  99. package/vendor/kingdee-skills/ok-cosmic/assets/ReportListDataPluginTemplate.java +70 -0
  100. package/vendor/kingdee-skills/ok-cosmic/assets/StandardTreeListPluginTemplate.java +130 -0
  101. package/vendor/kingdee-skills/ok-cosmic/assets/TaskTemplate.java +80 -0
  102. package/vendor/kingdee-skills/ok-cosmic/assets/TreeListPluginTemplate.java +152 -0
  103. package/vendor/kingdee-skills/ok-cosmic/assets/WriteBackPlugInTemplate.java +286 -0
  104. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/attachment/AttachmentUploadBindSample.java +93 -0
  105. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/botp/BotpTracePushSample.java +168 -0
  106. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/botp/SampleConvertPlugin.java +223 -0
  107. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/cache/SampleCacheUsage.java +218 -0
  108. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/concurrent/SampleThreadPoolBatch.java +156 -0
  109. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/data/DynamicObjectCrudSample.java +205 -0
  110. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/data/DynamicObjectOpsSample.java +100 -0
  111. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/BeforeOperationConfirmSample.java +217 -0
  112. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ConfirmDialogSample.java +131 -0
  113. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/EntryRowCalculateSample.java +116 -0
  114. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/F7FilterSample.java +134 -0
  115. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/GetAndSetValueSample.java +176 -0
  116. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/HyperlinkJumpSample.java +124 -0
  117. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/OpenBillModalSample.java +253 -0
  118. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ReturnParentDataSample.java +295 -0
  119. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/TreeControlSample.java +140 -0
  120. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/form/ViewControlOpsSample.java +132 -0
  121. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/list/ListPluginBasicSample.java +170 -0
  122. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/list/ListPreOpenFilterSample.java +68 -0
  123. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/message/MessageNotifySample.java +95 -0
  124. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/mq/SampleMQConsumer.java +198 -0
  125. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/mq/sample_mq.xml +15 -0
  126. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/operation/OpAddValidatorsSample.java +137 -0
  127. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/operation/OperationOptionBridgeSample.java +228 -0
  128. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/package-info.java +19 -0
  129. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/BaseDataQuerySample.java +194 -0
  130. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/BatchQuerySample.java +368 -0
  131. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/query/DataSetQueryStatSample.java +131 -0
  132. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/report/SampleReportFormPlugin.java +179 -0
  133. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/report/SampleReportListDataPlugin.java +616 -0
  134. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/snippets-guide.md +64 -0
  135. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/task/ScheduleTaskSample.java +160 -0
  136. package/vendor/kingdee-skills/ok-cosmic/assets/snippets/workflow/SampleWorkflowPlugin.java +302 -0
  137. package/vendor/kingdee-skills/ok-cosmic/manifest.json +78 -0
  138. package/vendor/kingdee-skills/ok-cosmic/ok-cosmic-intro.html +903 -0
  139. package/vendor/kingdee-skills/ok-cosmic/references/adv/attachment-api.md +114 -0
  140. package/vendor/kingdee-skills/ok-cosmic/references/adv/botp-convert.md +98 -0
  141. package/vendor/kingdee-skills/ok-cosmic/references/adv/dynamic-object.md +113 -0
  142. package/vendor/kingdee-skills/ok-cosmic/references/adv/entity-metadata.md +123 -0
  143. package/vendor/kingdee-skills/ok-cosmic/references/adv/event-lifecycle.md +184 -0
  144. package/vendor/kingdee-skills/ok-cosmic/references/adv/flex-prop.md +114 -0
  145. package/vendor/kingdee-skills/ok-cosmic/references/adv/form-utils.md +133 -0
  146. package/vendor/kingdee-skills/ok-cosmic/references/adv/operate-chain.md +159 -0
  147. package/vendor/kingdee-skills/ok-cosmic/references/adv/plugin-base.md +218 -0
  148. package/vendor/kingdee-skills/ok-cosmic/references/adv/query-dataset.md +149 -0
  149. package/vendor/kingdee-skills/ok-cosmic/references/adv/request-context.md +88 -0
  150. package/vendor/kingdee-skills/ok-cosmic/references/adv/view-handler.md +157 -0
  151. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-bill.md +76 -0
  152. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-botp.md +70 -0
  153. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-form.md +165 -0
  154. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-import.md +69 -0
  155. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-list.md +227 -0
  156. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-openapi.md +112 -0
  157. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-operation.md +135 -0
  158. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-print.md +65 -0
  159. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-report-data.md +64 -0
  160. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-report-form.md +90 -0
  161. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-task.md +62 -0
  162. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-tree-list.md +71 -0
  163. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-workflow.md +82 -0
  164. package/vendor/kingdee-skills/ok-cosmic/references/base/plugin/plugin-writeback.md +71 -0
  165. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-algo.md +67 -0
  166. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-cache.md +63 -0
  167. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-dynamic-model-svc.md +82 -0
  168. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-dynamic-object.md +70 -0
  169. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-entity-model.md +61 -0
  170. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-exception.md +64 -0
  171. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-file.md +63 -0
  172. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-id.md +47 -0
  173. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-lock.md +61 -0
  174. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-log.md +63 -0
  175. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-network-control.md +70 -0
  176. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-orm-access.md +78 -0
  177. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-request-context.md +62 -0
  178. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-threadpool.md +63 -0
  179. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-tx.md +64 -0
  180. package/vendor/kingdee-skills/ok-cosmic/references/base/sdk/sdk-utils.md +67 -0
  181. package/vendor/kingdee-skills/ok-cosmic/requirements.txt +2 -0
  182. package/vendor/kingdee-skills/ok-cosmic/rules/a-layer-rules.json +24 -0
  183. package/vendor/kingdee-skills/ok-cosmic/rules/anti-patterns.md +48 -0
  184. package/vendor/kingdee-skills/ok-cosmic/rules/cheat-sheet.md +256 -0
  185. package/vendor/kingdee-skills/ok-cosmic/rules/coding-preferences.md +140 -0
  186. package/vendor/kingdee-skills/ok-cosmic/rules/constraints.md +61 -0
  187. package/vendor/kingdee-skills/ok-cosmic/rules/decision-matrix.md +222 -0
  188. package/vendor/kingdee-skills/ok-cosmic/rules/intent-routing.md +94 -0
  189. package/vendor/kingdee-skills/ok-cosmic/rules/platform-baseline.md +69 -0
  190. package/vendor/kingdee-skills/ok-cosmic/rules/post-check.md +109 -0
  191. package/vendor/kingdee-skills/ok-cosmic/scripts/config_loader.py +204 -0
  192. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-api-knowledge.py +910 -0
  193. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-basedata-query.py +359 -0
  194. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-config-check.py +181 -0
  195. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-extpoints-query.py +389 -0
  196. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-form-metadata.py +856 -0
  197. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-post-check.py +262 -0
  198. package/vendor/kingdee-skills/ok-cosmic/scripts/cosmic-post-lint.py +293 -0
  199. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/__init__.py +2 -0
  200. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/base.py +393 -0
  201. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/resource_check.py +176 -0
  202. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/scene_check.py +375 -0
  203. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/style_check.py +434 -0
  204. package/vendor/kingdee-skills/ok-cosmic/scripts/lint/verify_check.py +36 -0
  205. package/vendor/kingdee-skills/ok-cosmic/scripts/route_client.py +186 -0
  206. package/vendor/kingdee-skills/ok-cosmic/scripts/script_utils.py +40 -0
  207. package/vendor/kingdee-skills/ok-cosmic/scripts/sqlite_cache.py +142 -0
  208. package/vendor/kingdee-skills/ok-cosmic/setup/cuslib/kd-cd-cosmic-commons.jar +0 -0
  209. package/vendor/kingdee-skills/ok-cosmic/setup/cuslib/kd-cd-cosmic-features.jar +0 -0
  210. package/vendor/kingdee-skills/ok-cosmic/setup/ok-cosmic-docs.db +0 -0
  211. package/vendor/kingdee-skills/ok-cosmic/setup/ok-cosmic.json +13 -0
  212. package/vendor/kingdee-skills/ok-cosmic/setup/setup-mac.sh +18 -0
  213. package/vendor/kingdee-skills/ok-cosmic/setup/setup-windows.bat +53 -0
  214. package/vendor/kingdee-skills/ok-cosmic/setup/setup.jar +0 -0
  215. package/vendor/kingdee-skills/ok-ksql/SKILL.md +81 -0
  216. package/vendor/kingdee-skills/ok-ksql/agents/openai.yaml +7 -0
  217. package/vendor/kingdee-skills/ok-ksql/manifest.json +14 -0
  218. package/vendor/kingdee-skills/ok-ksql/references/ksql-datafix.md +452 -0
  219. package/vendor/kingdee-skills/ok-ksql/scripts/ksql_lint.py +363 -0
@@ -0,0 +1,452 @@
1
+ # KSQL 数据修复 / 批量数据变更
2
+
3
+ ## 目录
4
+
5
+ - [强制流程](#强制流程)
6
+ - [默认数据库语法](#默认数据库语法)
7
+ - [SQL 风格偏好](#sql-风格偏好)
8
+ - [0. 拆解用户自然语言意图](#0-拆解用户自然语言意图)
9
+ - [1. 元数据字段确认(依赖 `$ok-cosmic`,必须带 `--sql`)](#1-元数据字段确认依赖-ok-cosmic必须带---sql)
10
+ - [2. 字段全部确认后才进入 KSQL](#2-字段全部确认后才进入-ksql)
11
+ - [3. 常见主键/关联约定](#3-常见主键关联约定)
12
+ - [推荐输出结构](#推荐输出结构)
13
+ - [最终生成模板(给 AI)](#最终生成模板给-ai)
14
+ - [生成 SQL 示例](#生成-sql-示例)
15
+ - [安全红线](#安全红线)
16
+ - [最小模板](#最小模板)
17
+
18
+ ## 强制流程
19
+
20
+ ### 默认数据库语法
21
+
22
+ - 默认使用 PostgreSQL 语法生成 SQL。
23
+ - 除非用户明确指定其他数据库方言,否则不要输出 Oracle / SQL Server / MySQL 等方言写法。
24
+ - 备份仍统一使用 PostgreSQL 支持的 `select * into <备份表> from <原表>;`。
25
+ - 生成前若用户给出的语法明显不是 PostgreSQL,要先说明将按 PostgreSQL 改写。
26
+
27
+ ### SQL 风格偏好
28
+
29
+ - SQL 关键字统一大写,表别名保持简短且语义稳定(如主表 `h`、分录 `e`、备份表 `b`)。
30
+ - 成员关系/半连接条件默认使用 `IN`(值列表或子查询),避免使用 `EXISTS`;只有 `IN` 会改变语义或无法表达时才保留 `EXISTS`,并说明原因。
31
+ - 使用 `NOT IN` 前必须确认子查询结果不含 `NULL`;无法确认时,应在子查询内过滤 `IS NOT NULL` 或改用更安全的反关联写法,并说明原因。
32
+ - 多表更新默认使用 PostgreSQL 的 `UPDATE ... SET ... FROM ... WHERE ...`,不要使用 MySQL 风格的 `UPDATE ... JOIN ...`。
33
+ - `NULL` 判断必须使用 `IS NULL` / `IS NOT NULL`;需要 NULL 安全比较时优先使用 PostgreSQL 的 `IS DISTINCT FROM` / `IS NOT DISTINCT FROM`。
34
+ - 条件值较多时使用多行 `IN (...)`,每行一个或少量值,避免把长值列表挤在一行。
35
+ - 批量更新/删除前除样本查询外,应增加 `COUNT(1) AS affected_count` 影响行数查询,便于执行前确认。
36
+
37
+ ### 0. 拆解用户自然语言意图
38
+
39
+ 先把用户需求拆成:
40
+
41
+ | 项 | 必须明确的内容 |
42
+ |---|---|
43
+ | 目标对象 | 涉及哪些单据/基础资料/分录,是否已知 `formId` 或 `billName` |
44
+ | 操作类型 | 查询影响范围 / 更新 / 回填 / 删除 / 插入 / 备份 / 回滚 |
45
+ | 目标字段 | 要改哪些字段,用户给的是中文名还是英文标识都不能直接信 |
46
+ | 条件字段 | 用哪些字段限定影响范围 |
47
+ | 新值来源 | 固定值 / 来源字段 / 关联表 / 计算表达式 / 枚举值 |
48
+ | 风险边界 | 是否跨组织、跨期间、跨分录、多表关联、大批量 |
49
+
50
+ 如果目标单据/表单不明确,先问用户确认;不要直接生成 KSQL。
51
+
52
+ ### 1. 元数据字段确认(依赖 `$ok-cosmic`,必须带 `--sql`)
53
+
54
+ 本 Skill 不自带元数据脚本;用 `$ok-cosmic` 的元数据查询能力精确确认每个单据的表名和每个数据库字段名。具体命令以 `$ok-cosmic` 的脚本路由为准,但必须满足:
55
+
56
+ - 调用 `$ok-cosmic` 的表单元数据查询能力;
57
+ - 查询参数必须带 `--sql`;
58
+ - 多单据/多对象优先一次性合并查询;
59
+ - 用户给中文字段名或英文字段标识,都必须查询确认。
60
+
61
+ 必须从脚本结果中整理;数据库名只在“表所在数据库”里记录,字段明细不再逐行记录数据库名。分录/子分录表数据库名通常与单头表 `dbName` 一致,除非元数据明确返回不同库名:
62
+
63
+ 表所在数据库:
64
+
65
+ | 单据/实体 | 所属实体 | 表名(dbTableName) | 数据库名(dbName) | 备注 |
66
+ |---|---|---|---|---|
67
+
68
+ 字段明细:
69
+
70
+ | 业务含义 | 单据/实体 | 所属实体 | 表名(dbTableName) | 字段Key | 数据库字段(dbKey) | 字段类型 | 备注 |
71
+ |---|---|---|---|---|---|---|---|
72
+
73
+ ### 2. 字段全部确认后才进入 KSQL
74
+
75
+ 所有参与 KSQL 的数据库对象必须确认:
76
+
77
+ - 主表表名
78
+ - 主表数据库名 `dbName`
79
+ - 分录表表名
80
+ - 分录/子分录表数据库名(一般同单头表 `dbName`)
81
+ - 每个查询字段的 `dbKey`
82
+ - 每个更新字段的 `dbKey`
83
+ - 每个条件字段的 `dbKey`
84
+ - 枚举/状态字段真实值
85
+ - 基础资料字段应确认实际落库列和业务含义
86
+
87
+ 写 SQL 前必须先做 `dbName` 一致性判断:
88
+
89
+ - 收集所有参与表的 `dbName`;
90
+ - 如果所有 `dbName` 相同,按普通单库 SQL 生成;
91
+ - 如果存在多个不同 `dbName`,就是分库/跨库场景;
92
+ - 分库/跨库场景不得直接生成普通更新 SQL,必须先让用户确认使用 `dblink`、`postgres_fdw`、导出导入临时表或其他方案;
93
+ - 在用户确认跨库方案前,只输出待确认项,不生成最终 SQL,不生成桌面 `.txt` 文件。
94
+
95
+ 任何一个字段、表名或枚举值未确认时:
96
+
97
+ 1. 不生成最终 KSQL;
98
+ 2. 输出“待用户确认项”;
99
+ 3. 等用户补充或允许人工确认后再继续。
100
+
101
+ ### 3. 常见主键/关联约定
102
+
103
+ - 单据主表主键一般是 `fid`。
104
+ - 分录表主键一般是 `fentryid`。
105
+ - 分录表一般通过 `fid` 字段与单据主表关联。
106
+ - 即使符合上述约定,涉及多表更新/删除前仍要用影响范围查询验证关联结果。
107
+
108
+ ## 推荐输出结构
109
+
110
+ 生成数据修复 KSQL 时固定按以下结构输出:
111
+
112
+ 1. **意图拆解**
113
+ 2. **元数据确认结果表**
114
+ 3. **待确认项**(如果为空才继续给最终 KSQL)
115
+ 4. **影响范围查询**
116
+ 5. **备份语句**(统一整表备份;备份表名必须以 `bak_` 开头、以当前生成时间 `yyyyMMddHHmm` 结尾,精确到分钟)
117
+ 6. **更新前确认查询**(每条 `update` 前必须先写对应 `select`)
118
+ 7. **正式执行语句**
119
+ 8. **执行后验证语句**
120
+ 9. **回滚语句**
121
+ 10. **风险点与执行顺序**
122
+ 11. **桌面文件产物**(所有确认卡片均为 `✔️` 后,在用户桌面生成 SQL `.txt` 文件)
123
+
124
+ ## 最终生成模板(给 AI)
125
+
126
+ 字段、表名、枚举值全部确认后,按下面模板输出最终结果;如果“待确认项”非空,只输出到第 3 节并停止,不生成最终 KSQL。
127
+
128
+ ````markdown
129
+ ## 确认卡片 1:意图拆解
130
+
131
+ - 确认状态:✔️/✖️
132
+ - 目标对象:
133
+ - 操作类型:
134
+ - 目标字段:
135
+ - 条件字段:
136
+ - 新值来源:
137
+ - 风险边界:
138
+ - 自检结论:是否足以判断需要查询哪些元数据和字段?
139
+
140
+ ## 确认卡片 2:元数据确认
141
+
142
+ - 确认状态:✔️/✖️
143
+ - 已通过 `$ok-cosmic` 元数据能力确认:`cosmic-form-metadata.py --sql`
144
+ - 实际查询命令/依据:
145
+ - 确认结果:
146
+
147
+ 表所在数据库:
148
+
149
+ | 单据/实体 | 所属实体 | 表名(dbTableName) | 数据库名(dbName) | 备注 |
150
+ |---|---|---|---|---|
151
+
152
+ 字段明细:
153
+
154
+ | 业务含义 | 单据/实体 | 所属实体 | 表名(dbTableName) | 字段Key | 数据库字段(dbKey) | 字段类型 | 备注 |
155
+ |---|---|---|---|---|---|---|---|
156
+
157
+ - dbName 一致性检查:
158
+ - 参与表:
159
+ - dbName 集合:
160
+ - 判断结果:同库 / 分库跨库
161
+ - 跨库处理方式:不涉及 / 待用户确认 / dblink / postgres_fdw / 导出导入临时表
162
+ - 自检结论:`dbName`、表名、`dbKey`、字段类型、枚举/状态值、基础资料落库字段是否全部确认?分录/子分录表数据库是否已注明(一般同单头表 `dbName`)?若 `dbName` 不一致,是否已按分库/跨库场景停止生成或确认跨库方案?
163
+
164
+ ## 确认卡片 3:待确认项
165
+
166
+ - 确认状态:✔️/✖️
167
+ - 待确认项:
168
+ - 无
169
+ - 自检结论:若存在未确认字段、表名、枚举值或基础资料落库字段,必须在本卡片列出并停止,不输出后续 SQL。
170
+
171
+ ## 确认卡片 4:影响范围查询
172
+
173
+ ```sql
174
+ -- 只查询必要字段,禁止 select *
175
+ ```
176
+
177
+ - 确认状态:✔️/✖️
178
+ - 自检结论:是否已限定 `where`,且查询字段足以让用户确认影响范围?
179
+
180
+ ## 确认卡片 5:备份语句
181
+
182
+ 备份表:`bak_<原表或业务缩写>_<当前生成时间yyyyMMddHHmm>`
183
+
184
+ ```sql
185
+ -- 备份必须使用 select * into 做整表备份,不使用 create table as
186
+ -- 备份语句不加 where
187
+ -- 备份表名必须以 bak_ 开头、以当前生成时间 yyyyMMddHHmm 结尾
188
+ ```
189
+
190
+ - 确认状态:✔️/✖️
191
+ - 自检结论:备份语句是否使用 `select * into` 做整表备份、是否没有 `where`、备份表名是否使用当前生成时间精确到分钟?
192
+
193
+ ## 确认卡片 6:更新前确认查询
194
+
195
+ ```sql
196
+ -- 每条 update 前必须先写对应查询语句
197
+ -- 查询条件和关联范围必须与 update 保持一致
198
+ ```
199
+
200
+ - 确认状态:✔️/✖️
201
+ - 自检结论:是否展示主键、单据编号、待更新字段旧值和新值来源?
202
+
203
+ ## 确认卡片 7:正式执行语句
204
+
205
+ ```sql
206
+ -- 禁止无 where 的 update/delete
207
+ ```
208
+
209
+ - 确认状态:✔️/✖️
210
+ - 自检结论:`where` 条件和关联范围是否与更新前确认查询一致?
211
+
212
+ ## 确认卡片 8:执行后验证语句
213
+
214
+ ```sql
215
+ -- 验证更新结果是否符合预期
216
+ ```
217
+
218
+ - 确认状态:✔️/✖️
219
+ - 自检结论:是否能验证更新结果、记录数和关键字段值?
220
+
221
+ ## 确认卡片 9:回滚语句
222
+
223
+ ```sql
224
+ -- 基于备份表回滚
225
+ ```
226
+
227
+ - 确认状态:✔️/✖️
228
+ - 自检结论:是否完全基于备份表恢复,且回滚范围可控?
229
+
230
+ ## 确认卡片 10:风险点与执行顺序
231
+
232
+ - 确认状态:✔️/✖️
233
+ - 风险点:
234
+ -
235
+ - 执行顺序:
236
+ 1. 先执行影响范围查询,确认记录数和样本数据。
237
+ 2. 再执行整表备份语句,确认备份表记录数与原表一致。
238
+ 3. 再执行更新前确认查询,确认旧值和新值来源。
239
+ 4. 最后执行正式更新,并用验证语句复核。
240
+ 5. 如结果异常,使用回滚语句恢复。
241
+ - 自检结论:是否已说明执行顺序、风险点和回滚方式?
242
+
243
+ > 最终自检:所有确认卡片均为 ✔️ 后,才允许输出最终 KSQL;任一卡片为 ✖️ 时,停止并说明需要补充的信息。
244
+
245
+ ## 确认卡片 11:桌面文件产物
246
+
247
+ - 确认状态:✔️/✖️
248
+ - 目标文件:`~/Desktop/ksql_<业务缩写>_<当前生成时间yyyyMMddHHmm>.txt`
249
+ - 文件内容:完整 SQL 执行脚本(影响范围查询、整表备份、更新前确认查询、正式执行、执行后验证、回滚)
250
+ - 自检结论:文件名时间戳是否取当前生成时间,且与备份表名时间戳一致?
251
+
252
+ > 文件生成规则:只有所有确认卡片均为 ✔️ 时,才在用户桌面生成 `.txt` 文件;任一卡片为 ✖️ 或待确认项非空时,不生成文件。
253
+ ````
254
+
255
+ ## 生成 SQL 示例
256
+
257
+ > 示例仅用于展示输出形态。示例里的表名、字段名、枚举值均假设已通过 `$ok-cosmic` 元数据能力(`cosmic-form-metadata.py --sql`)确认,真实生成时不得照搬。示例假设当前生成时间为 `202604301148`。
258
+
259
+ ### SQL 风格约定
260
+
261
+ - 使用 `-- ============================================` 分隔章节。
262
+ - 文件开头写业务标题、关键条件、执行前提醒。
263
+ - SQL 关键字统一大写。
264
+ - 成员关系/半连接条件默认使用 `IN`(值列表或子查询),避免使用 `EXISTS`;只有 `IN` 会改变语义或无法表达时才保留 `EXISTS`,并说明原因。
265
+ - 多表更新使用 PostgreSQL `UPDATE ... FROM`;`NULL` 判断使用 `IS NULL` / `IS NOT NULL`。
266
+ - 每个更新块前必须有对应的“更新前确认查询”块。
267
+ - 文件末尾补充“字段映射(来自元数据)”。
268
+
269
+ 场景:将应付单主表 `t_ap_paybill` 中指定单据的同步状态字段 `f_abc_syncstatus` 从 `FAIL` 修复为 `WAIT`。
270
+
271
+ ```sql
272
+ -- ============================================
273
+ -- 应付单同步状态修复
274
+ -- 单据编号:AP202604300001、AP202604300002
275
+ -- 执行前请确认目标环境数据库
276
+ -- 备份表时间戳:202604301148
277
+ -- ============================================
278
+
279
+ -- ============================================
280
+ -- 1. 影响范围确认
281
+ -- ============================================
282
+ SELECT
283
+ h.fid,
284
+ h.fbillno,
285
+ h.f_abc_syncstatus AS old_syncstatus,
286
+ 'WAIT' AS new_syncstatus
287
+ FROM t_ap_paybill h
288
+ WHERE h.fbillno IN (
289
+ 'AP202604300001',
290
+ 'AP202604300002'
291
+ )
292
+ AND h.f_abc_syncstatus = 'FAIL';
293
+
294
+ -- ============================================
295
+ -- 2. 备份
296
+ -- 整表备份,不加 WHERE
297
+ -- ============================================
298
+ SELECT * INTO bak_t_ap_paybill_202604301148 FROM t_ap_paybill;
299
+
300
+ -- ============================================
301
+ -- 3. 更新前确认查询
302
+ -- 条件和关联范围必须与 UPDATE 对应
303
+ -- ============================================
304
+ SELECT
305
+ h.fid,
306
+ h.fbillno,
307
+ h.f_abc_syncstatus AS old_syncstatus,
308
+ 'WAIT' AS new_syncstatus
309
+ FROM t_ap_paybill h
310
+ WHERE h.fbillno IN (
311
+ 'AP202604300001',
312
+ 'AP202604300002'
313
+ )
314
+ AND h.f_abc_syncstatus = 'FAIL';
315
+
316
+ -- ============================================
317
+ -- 4. 正式更新
318
+ -- 同步状态:FAIL -> WAIT
319
+ -- ============================================
320
+ UPDATE t_ap_paybill h
321
+ SET
322
+ f_abc_syncstatus = 'WAIT'
323
+ WHERE h.fbillno IN (
324
+ 'AP202604300001',
325
+ 'AP202604300002'
326
+ )
327
+ AND h.f_abc_syncstatus = 'FAIL';
328
+
329
+ -- ============================================
330
+ -- 5. 执行后验证
331
+ -- ============================================
332
+ SELECT
333
+ h.fid,
334
+ h.fbillno,
335
+ h.f_abc_syncstatus
336
+ FROM t_ap_paybill h
337
+ WHERE h.fbillno IN (
338
+ 'AP202604300001',
339
+ 'AP202604300002'
340
+ );
341
+
342
+ -- ============================================
343
+ -- 6. 回滚
344
+ -- 从整表备份恢复同步状态
345
+ -- ============================================
346
+ UPDATE t_ap_paybill h
347
+ SET
348
+ f_abc_syncstatus = b.f_abc_syncstatus
349
+ FROM bak_t_ap_paybill_202604301148 b
350
+ WHERE b.fid = h.fid
351
+ AND h.fbillno IN (
352
+ 'AP202604300001',
353
+ 'AP202604300002'
354
+ );
355
+
356
+ -- ============================================
357
+ -- 字段映射(来自元数据)
358
+ -- ============================================
359
+ -- 应付单主表: t_ap_paybill
360
+ -- fid <- fid (单据主键)
361
+ -- fbillno <- billno (单据编号)
362
+ -- f_abc_syncstatus <- abc_syncstatus (同步状态)
363
+ -- ============================================
364
+ ```
365
+
366
+ ## 安全红线
367
+
368
+ - 默认使用 PostgreSQL 语法;用户未明确指定其他数据库时,不要混用其他数据库方言。
369
+ - 禁止无 `where` 的 `update` / `delete`。
370
+ - 查询/验证语句禁止 `select *`,只查必要字段;备份语句例外,必须使用 `select * into` 做整表备份且不加 `where`。
371
+ - 禁止字段名、表名未确认就生成最终 KSQL。
372
+ - 禁止在多个参与表 `dbName` 不一致时按普通单库 SQL 直接生成更新;这属于分库/跨库场景,必须先确认跨库处理方式。
373
+ - 禁止猜枚举值、状态值、基础资料实际落库字段。
374
+ - 批量更新前必须先给影响范围查询和备份语句;备份必须使用 `select * into` 做整表备份且不加 `where`,备份表名必须以 `bak_` 开头、以当前生成时间 `yyyyMMddHHmm` 结尾(精确到分钟),例如 `bak_t_ap_paybill_202604301148`。
375
+ - 每条 `update` 语句前必须先写对应的查询语句,查询条件和关联范围应与 `update` 保持一致,并尽量展示主键、单据编号、待更新字段旧值和新值来源。
376
+ - 最终 SQL 必须写入用户桌面的 `.txt` 文件,文件名时间戳取当前生成时间,并与备份表名时间戳一致;待确认项非空时禁止生成文件。
377
+ - 修改分录表时必须说明与主表的 `fid` 关联条件。
378
+ - 涉及删除时必须优先给“逻辑作废/状态修复”替代方案;用户坚持删除时才给 `delete`。
379
+
380
+ ## 最小模板
381
+
382
+ ```sql
383
+ -- ============================================
384
+ -- <业务标题>
385
+ -- <关键条件说明>
386
+ -- 执行前请确认目标环境数据库
387
+ -- 备份表时间戳:<当前生成时间yyyyMMddHHmm>
388
+ -- ============================================
389
+
390
+ -- ============================================
391
+ -- 1. 影响范围确认
392
+ -- ============================================
393
+ SELECT
394
+ h.fid,
395
+ h.fbillno,
396
+ h.<字段> AS old_value,
397
+ <新值> AS new_value
398
+ FROM <主表> h
399
+ WHERE <条件>;
400
+
401
+ -- ============================================
402
+ -- 2. 备份
403
+ -- 整表备份,不加 WHERE
404
+ -- ============================================
405
+ SELECT * INTO bak_<原表或业务缩写>_<当前生成时间yyyyMMddHHmm> FROM <主表>;
406
+
407
+ -- ============================================
408
+ -- 3. 更新前确认查询
409
+ -- 条件和关联范围必须与 UPDATE 对应
410
+ -- ============================================
411
+ SELECT
412
+ h.fid,
413
+ h.fbillno,
414
+ h.<字段> AS old_value,
415
+ <新值> AS new_value
416
+ FROM <主表> h
417
+ WHERE <条件>;
418
+
419
+ -- ============================================
420
+ -- 4. 正式更新
421
+ -- ============================================
422
+ UPDATE <主表> h
423
+ SET
424
+ <字段> = <新值>
425
+ WHERE <条件>;
426
+
427
+ -- ============================================
428
+ -- 5. 执行后验证
429
+ -- ============================================
430
+ SELECT
431
+ <必要字段>
432
+ FROM <主表> h
433
+ WHERE <条件>;
434
+
435
+ -- ============================================
436
+ -- 6. 回滚
437
+ -- 从整表备份恢复
438
+ -- ============================================
439
+ UPDATE <主表> h
440
+ SET
441
+ <字段> = b.<字段>
442
+ FROM bak_<原表或业务缩写>_<当前生成时间yyyyMMddHHmm> b
443
+ WHERE b.fid = h.fid
444
+ AND <稳定回滚范围条件>;
445
+
446
+ -- ============================================
447
+ -- 字段映射(来自元数据)
448
+ -- ============================================
449
+ -- <业务表说明>: <表名>
450
+ -- <数据库字段> <- <字段Key> (<字段中文名>)
451
+ -- ============================================
452
+ ```