ai-engineering-init 1.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 (313) hide show
  1. package/.claude/agents/code-reviewer.md +139 -0
  2. package/.claude/agents/project-manager.md +159 -0
  3. package/.claude/audio/completed.wav +0 -0
  4. package/.claude/commands/add-todo.md +255 -0
  5. package/.claude/commands/check.md +210 -0
  6. package/.claude/commands/crud.md +454 -0
  7. package/.claude/commands/dev.md +503 -0
  8. package/.claude/commands/init-docs.md +681 -0
  9. package/.claude/commands/next.md +251 -0
  10. package/.claude/commands/progress.md +242 -0
  11. package/.claude/commands/start.md +199 -0
  12. package/.claude/commands/sync.md +307 -0
  13. package/.claude/commands/update-status.md +428 -0
  14. package/.claude/docs/Mixin/344/275/277/347/224/250/346/214/207/345/215/227.md +299 -0
  15. package/.claude/docs/README.md +167 -0
  16. package/.claude/docs//345/211/215/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +599 -0
  17. package/.claude/docs//345/220/216/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +726 -0
  18. package/.claude/docs//345/267/245/344/275/234/346/265/201/345/274/200/345/217/221/346/214/207/345/215/227.md +714 -0
  19. package/.claude/docs//345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/346/214/207/345/215/227.md +463 -0
  20. package/.claude/docs//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +390 -0
  21. package/.claude/docs//346/226/260/345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213/350/247/204/350/214/203.md +688 -0
  22. package/.claude/docs//346/226/260/351/241/271/347/233/256/345/274/200/345/217/221/346/265/201/347/250/213.md +365 -0
  23. package/.claude/docs//346/241/206/346/236/266/350/257/264/346/230/216.md +393 -0
  24. package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md +246 -0
  25. package/.claude/framework-config.json +73 -0
  26. package/.claude/hooks/pre-tool-use.js +117 -0
  27. package/.claude/hooks/skill-forced-eval.js +167 -0
  28. package/.claude/hooks/stop.js +58 -0
  29. package/.claude/settings.json +41 -0
  30. package/.claude/skills/add-skill/SKILL.md +352 -0
  31. package/.claude/skills/api-development/SKILL.md +560 -0
  32. package/.claude/skills/architecture-design/SKILL.md +756 -0
  33. package/.claude/skills/backend-annotations/SKILL.md +674 -0
  34. package/.claude/skills/banana-image/CHANGELOG.md +37 -0
  35. package/.claude/skills/banana-image/README.md +146 -0
  36. package/.claude/skills/banana-image/SKILL.md +164 -0
  37. package/.claude/skills/banana-image/assets/logo.png +0 -0
  38. package/.claude/skills/banana-image/references/advanced-usage.md +189 -0
  39. package/.claude/skills/banana-image/scripts/apply_template.py +125 -0
  40. package/.claude/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  41. package/.claude/skills/banana-image/scripts/batch_prep.py +82 -0
  42. package/.claude/skills/banana-image/scripts/package-lock.json +1437 -0
  43. package/.claude/skills/banana-image/scripts/package.json +18 -0
  44. package/.claude/skills/banana-image/scripts/requirements.txt +10 -0
  45. package/.claude/skills/banana-image/templates/poster.json +22 -0
  46. package/.claude/skills/banana-image/templates/product.json +17 -0
  47. package/.claude/skills/banana-image/templates/social.json +22 -0
  48. package/.claude/skills/banana-image/templates/thumbnail.json +17 -0
  49. package/.claude/skills/brainstorm/SKILL.md +648 -0
  50. package/.claude/skills/bug-detective/SKILL.md +1206 -0
  51. package/.claude/skills/code-patterns/SKILL.md +590 -0
  52. package/.claude/skills/collaborating-with-codex/SKILL.md +174 -0
  53. package/.claude/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  54. package/.claude/skills/collaborating-with-gemini/SKILL.md +194 -0
  55. package/.claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  56. package/.claude/skills/crud-development/SKILL.md +649 -0
  57. package/.claude/skills/data-permission/SKILL.md +599 -0
  58. package/.claude/skills/database-ops/SKILL.md +407 -0
  59. package/.claude/skills/error-handler/SKILL.md +371 -0
  60. package/.claude/skills/file-oss-management/SKILL.md +863 -0
  61. package/.claude/skills/git-workflow/SKILL.md +375 -0
  62. package/.claude/skills/json-serialization/SKILL.md +357 -0
  63. package/.claude/skills/leniu-api-development/SKILL.md +803 -0
  64. package/.claude/skills/leniu-architecture-design/SKILL.md +598 -0
  65. package/.claude/skills/leniu-backend-annotations/SKILL.md +664 -0
  66. package/.claude/skills/leniu-code-patterns/SKILL.md +365 -0
  67. package/.claude/skills/leniu-crud-development/SKILL.md +1110 -0
  68. package/.claude/skills/leniu-data-permission/SKILL.md +256 -0
  69. package/.claude/skills/leniu-database-ops/SKILL.md +426 -0
  70. package/.claude/skills/leniu-error-handler/SKILL.md +462 -0
  71. package/.claude/skills/leniu-java-amount-handling/SKILL.md +461 -0
  72. package/.claude/skills/leniu-java-code-style/SKILL.md +510 -0
  73. package/.claude/skills/leniu-java-concurrent/SKILL.md +400 -0
  74. package/.claude/skills/leniu-java-entity/SKILL.md +751 -0
  75. package/.claude/skills/leniu-java-export/SKILL.md +560 -0
  76. package/.claude/skills/leniu-java-logging/SKILL.md +832 -0
  77. package/.claude/skills/leniu-java-mq/SKILL.md +338 -0
  78. package/.claude/skills/leniu-java-mybatis/SKILL.md +640 -0
  79. package/.claude/skills/leniu-java-report-query-param/SKILL.md +291 -0
  80. package/.claude/skills/leniu-java-task/SKILL.md +367 -0
  81. package/.claude/skills/leniu-java-total-line/SKILL.md +195 -0
  82. package/.claude/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  83. package/.claude/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  84. package/.claude/skills/leniu-mealtime/SKILL.md +215 -0
  85. package/.claude/skills/leniu-redis-cache/SKILL.md +316 -0
  86. package/.claude/skills/leniu-security-guard/SKILL.md +520 -0
  87. package/.claude/skills/leniu-utils-toolkit/SKILL.md +380 -0
  88. package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
  89. package/.claude/skills/openspec-archive-change/SKILL.md +114 -0
  90. package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  91. package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
  92. package/.claude/skills/openspec-explore/SKILL.md +290 -0
  93. package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
  94. package/.claude/skills/openspec-new-change/SKILL.md +74 -0
  95. package/.claude/skills/openspec-onboard/SKILL.md +529 -0
  96. package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
  97. package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
  98. package/.claude/skills/performance-doctor/SKILL.md +627 -0
  99. package/.claude/skills/project-navigator/SKILL.md +305 -0
  100. package/.claude/skills/redis-cache/SKILL.md +839 -0
  101. package/.claude/skills/scheduled-jobs/SKILL.md +633 -0
  102. package/.claude/skills/security-guard/SKILL.md +748 -0
  103. package/.claude/skills/sms-mail/SKILL.md +766 -0
  104. package/.claude/skills/social-login/SKILL.md +668 -0
  105. package/.claude/skills/store-pc/SKILL.md +366 -0
  106. package/.claude/skills/task-tracker/SKILL.md +307 -0
  107. package/.claude/skills/tech-decision/SKILL.md +393 -0
  108. package/.claude/skills/tenant-management/SKILL.md +603 -0
  109. package/.claude/skills/test-development/SKILL.md +755 -0
  110. package/.claude/skills/ui-pc/SKILL.md +438 -0
  111. package/.claude/skills/utils-toolkit/SKILL.md +615 -0
  112. package/.claude/skills/websocket-sse/SKILL.md +716 -0
  113. package/.claude/skills/workflow-engine/SKILL.md +676 -0
  114. package/.claude/templates//345/276/205/345/212/236/346/270/205/345/215/225/346/250/241/346/235/277.md +56 -0
  115. package/.claude/templates//351/234/200/346/261/202/346/226/207/346/241/243/346/250/241/346/235/277.md +85 -0
  116. package/.claude/templates//351/241/271/347/233/256/347/212/266/346/200/201/346/250/241/346/235/277.md +43 -0
  117. package/.codex/skills/add-skill/SKILL.md +352 -0
  118. package/.codex/skills/add-todo/SKILL.md +269 -0
  119. package/.codex/skills/api-development/SKILL.md +693 -0
  120. package/.codex/skills/architecture-design/SKILL.md +628 -0
  121. package/.codex/skills/backend-annotations/SKILL.md +664 -0
  122. package/.codex/skills/banana-image/CHANGELOG.md +37 -0
  123. package/.codex/skills/banana-image/README.md +146 -0
  124. package/.codex/skills/banana-image/SKILL.md +164 -0
  125. package/.codex/skills/banana-image/assets/logo.png +0 -0
  126. package/.codex/skills/banana-image/references/advanced-usage.md +189 -0
  127. package/.codex/skills/banana-image/scripts/apply_template.py +125 -0
  128. package/.codex/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  129. package/.codex/skills/banana-image/scripts/batch_prep.py +82 -0
  130. package/.codex/skills/banana-image/scripts/package-lock.json +1437 -0
  131. package/.codex/skills/banana-image/scripts/package.json +18 -0
  132. package/.codex/skills/banana-image/scripts/requirements.txt +10 -0
  133. package/.codex/skills/banana-image/templates/poster.json +22 -0
  134. package/.codex/skills/banana-image/templates/product.json +17 -0
  135. package/.codex/skills/banana-image/templates/social.json +22 -0
  136. package/.codex/skills/banana-image/templates/thumbnail.json +17 -0
  137. package/.codex/skills/brainstorm/SKILL.md +648 -0
  138. package/.codex/skills/bug-detective/SKILL.md +1206 -0
  139. package/.codex/skills/check/SKILL.md +367 -0
  140. package/.codex/skills/code-patterns/SKILL.md +442 -0
  141. package/.codex/skills/collaborating-with-codex/SKILL.md +174 -0
  142. package/.codex/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  143. package/.codex/skills/collaborating-with-gemini/SKILL.md +194 -0
  144. package/.codex/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  145. package/.codex/skills/crud/SKILL.md +265 -0
  146. package/.codex/skills/crud-development/SKILL.md +637 -0
  147. package/.codex/skills/data-permission/SKILL.md +591 -0
  148. package/.codex/skills/database-ops/SKILL.md +553 -0
  149. package/.codex/skills/dev/SKILL.md +187 -0
  150. package/.codex/skills/error-handler/SKILL.md +361 -0
  151. package/.codex/skills/file-oss-management/SKILL.md +863 -0
  152. package/.codex/skills/git-workflow/SKILL.md +375 -0
  153. package/.codex/skills/init-docs/SKILL.md +194 -0
  154. package/.codex/skills/json-serialization/SKILL.md +357 -0
  155. package/.codex/skills/leniu-api-development/SKILL.md +803 -0
  156. package/.codex/skills/leniu-architecture-design/SKILL.md +594 -0
  157. package/.codex/skills/leniu-backend-annotations/SKILL.md +662 -0
  158. package/.codex/skills/leniu-code-patterns/SKILL.md +365 -0
  159. package/.codex/skills/leniu-crud-development/SKILL.md +1110 -0
  160. package/.codex/skills/leniu-data-permission/SKILL.md +256 -0
  161. package/.codex/skills/leniu-database-ops/SKILL.md +426 -0
  162. package/.codex/skills/leniu-error-handler/SKILL.md +462 -0
  163. package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
  164. package/.codex/skills/leniu-java-code-style/SKILL.md +510 -0
  165. package/.codex/skills/leniu-java-concurrent/SKILL.md +400 -0
  166. package/.codex/skills/leniu-java-entity/SKILL.md +751 -0
  167. package/.codex/skills/leniu-java-export/SKILL.md +560 -0
  168. package/.codex/skills/leniu-java-logging/SKILL.md +832 -0
  169. package/.codex/skills/leniu-java-mq/SKILL.md +338 -0
  170. package/.codex/skills/leniu-java-mybatis/SKILL.md +640 -0
  171. package/.codex/skills/leniu-java-report-query-param/SKILL.md +291 -0
  172. package/.codex/skills/leniu-java-task/SKILL.md +367 -0
  173. package/.codex/skills/leniu-java-total-line/SKILL.md +195 -0
  174. package/.codex/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  175. package/.codex/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  176. package/.codex/skills/leniu-mealtime/SKILL.md +215 -0
  177. package/.codex/skills/leniu-redis-cache/SKILL.md +316 -0
  178. package/.codex/skills/leniu-security-guard/SKILL.md +520 -0
  179. package/.codex/skills/leniu-utils-toolkit/SKILL.md +378 -0
  180. package/.codex/skills/next/SKILL.md +137 -0
  181. package/.codex/skills/openspec-apply-change/SKILL.md +156 -0
  182. package/.codex/skills/openspec-archive-change/SKILL.md +114 -0
  183. package/.codex/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  184. package/.codex/skills/openspec-continue-change/SKILL.md +118 -0
  185. package/.codex/skills/openspec-explore/SKILL.md +290 -0
  186. package/.codex/skills/openspec-ff-change/SKILL.md +101 -0
  187. package/.codex/skills/openspec-new-change/SKILL.md +74 -0
  188. package/.codex/skills/openspec-onboard/SKILL.md +529 -0
  189. package/.codex/skills/openspec-sync-specs/SKILL.md +138 -0
  190. package/.codex/skills/openspec-verify-change/SKILL.md +168 -0
  191. package/.codex/skills/performance-doctor/SKILL.md +627 -0
  192. package/.codex/skills/progress/SKILL.md +193 -0
  193. package/.codex/skills/project-navigator/SKILL.md +286 -0
  194. package/.codex/skills/redis-cache/SKILL.md +829 -0
  195. package/.codex/skills/scheduled-jobs/SKILL.md +633 -0
  196. package/.codex/skills/security-guard/SKILL.md +739 -0
  197. package/.codex/skills/sms-mail/SKILL.md +766 -0
  198. package/.codex/skills/social-login/SKILL.md +668 -0
  199. package/.codex/skills/start/SKILL.md +154 -0
  200. package/.codex/skills/store-pc/SKILL.md +491 -0
  201. package/.codex/skills/sync/SKILL.md +149 -0
  202. package/.codex/skills/task-tracker/SKILL.md +307 -0
  203. package/.codex/skills/tech-decision/SKILL.md +393 -0
  204. package/.codex/skills/tenant-management/SKILL.md +603 -0
  205. package/.codex/skills/test-development/SKILL.md +755 -0
  206. package/.codex/skills/ui-pc/SKILL.md +475 -0
  207. package/.codex/skills/update-status/SKILL.md +159 -0
  208. package/.codex/skills/utils-toolkit/SKILL.md +593 -0
  209. package/.codex/skills/websocket-sse/SKILL.md +716 -0
  210. package/.codex/skills/workflow-engine/SKILL.md +676 -0
  211. package/.cursor/agents/code-reviewer.md +139 -0
  212. package/.cursor/agents/project-manager.md +159 -0
  213. package/.cursor/commands/opsx-apply.md +152 -0
  214. package/.cursor/commands/opsx-archive.md +157 -0
  215. package/.cursor/commands/opsx-bulk-archive.md +242 -0
  216. package/.cursor/commands/opsx-continue.md +114 -0
  217. package/.cursor/commands/opsx-explore.md +174 -0
  218. package/.cursor/commands/opsx-ff.md +94 -0
  219. package/.cursor/commands/opsx-new.md +69 -0
  220. package/.cursor/commands/opsx-onboard.md +525 -0
  221. package/.cursor/commands/opsx-sync.md +134 -0
  222. package/.cursor/commands/opsx-verify.md +164 -0
  223. package/.cursor/mcp.json +22 -0
  224. package/.cursor/skills/add-skill/SKILL.md +352 -0
  225. package/.cursor/skills/api-development/SKILL.md +560 -0
  226. package/.cursor/skills/architecture-design/SKILL.md +756 -0
  227. package/.cursor/skills/backend-annotations/SKILL.md +674 -0
  228. package/.cursor/skills/banana-image/CHANGELOG.md +37 -0
  229. package/.cursor/skills/banana-image/README.md +146 -0
  230. package/.cursor/skills/banana-image/SKILL.md +164 -0
  231. package/.cursor/skills/banana-image/assets/logo.png +0 -0
  232. package/.cursor/skills/banana-image/references/advanced-usage.md +189 -0
  233. package/.cursor/skills/banana-image/scripts/apply_template.py +125 -0
  234. package/.cursor/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  235. package/.cursor/skills/banana-image/scripts/batch_prep.py +82 -0
  236. package/.cursor/skills/banana-image/scripts/package-lock.json +1437 -0
  237. package/.cursor/skills/banana-image/scripts/package.json +18 -0
  238. package/.cursor/skills/banana-image/scripts/requirements.txt +10 -0
  239. package/.cursor/skills/banana-image/templates/poster.json +22 -0
  240. package/.cursor/skills/banana-image/templates/product.json +17 -0
  241. package/.cursor/skills/banana-image/templates/social.json +22 -0
  242. package/.cursor/skills/banana-image/templates/thumbnail.json +17 -0
  243. package/.cursor/skills/brainstorm/SKILL.md +648 -0
  244. package/.cursor/skills/bug-detective/SKILL.md +1206 -0
  245. package/.cursor/skills/code-patterns/SKILL.md +590 -0
  246. package/.cursor/skills/collaborating-with-codex/SKILL.md +174 -0
  247. package/.cursor/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  248. package/.cursor/skills/collaborating-with-gemini/SKILL.md +194 -0
  249. package/.cursor/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  250. package/.cursor/skills/crud-development/SKILL.md +649 -0
  251. package/.cursor/skills/data-permission/SKILL.md +599 -0
  252. package/.cursor/skills/database-ops/SKILL.md +407 -0
  253. package/.cursor/skills/error-handler/SKILL.md +371 -0
  254. package/.cursor/skills/file-oss-management/SKILL.md +863 -0
  255. package/.cursor/skills/git-workflow/SKILL.md +375 -0
  256. package/.cursor/skills/json-serialization/SKILL.md +357 -0
  257. package/.cursor/skills/leniu-api-development/SKILL.md +803 -0
  258. package/.cursor/skills/leniu-architecture-design/SKILL.md +598 -0
  259. package/.cursor/skills/leniu-backend-annotations/SKILL.md +664 -0
  260. package/.cursor/skills/leniu-code-patterns/SKILL.md +365 -0
  261. package/.cursor/skills/leniu-crud-development/SKILL.md +1110 -0
  262. package/.cursor/skills/leniu-data-permission/SKILL.md +256 -0
  263. package/.cursor/skills/leniu-database-ops/SKILL.md +426 -0
  264. package/.cursor/skills/leniu-error-handler/SKILL.md +462 -0
  265. package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
  266. package/.cursor/skills/leniu-java-code-style/SKILL.md +510 -0
  267. package/.cursor/skills/leniu-java-concurrent/SKILL.md +400 -0
  268. package/.cursor/skills/leniu-java-entity/SKILL.md +751 -0
  269. package/.cursor/skills/leniu-java-export/SKILL.md +560 -0
  270. package/.cursor/skills/leniu-java-logging/SKILL.md +832 -0
  271. package/.cursor/skills/leniu-java-mq/SKILL.md +338 -0
  272. package/.cursor/skills/leniu-java-mybatis/SKILL.md +640 -0
  273. package/.cursor/skills/leniu-java-report-query-param/SKILL.md +291 -0
  274. package/.cursor/skills/leniu-java-task/SKILL.md +367 -0
  275. package/.cursor/skills/leniu-java-total-line/SKILL.md +195 -0
  276. package/.cursor/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  277. package/.cursor/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  278. package/.cursor/skills/leniu-mealtime/SKILL.md +215 -0
  279. package/.cursor/skills/leniu-redis-cache/SKILL.md +316 -0
  280. package/.cursor/skills/leniu-security-guard/SKILL.md +520 -0
  281. package/.cursor/skills/leniu-utils-toolkit/SKILL.md +380 -0
  282. package/.cursor/skills/openspec-apply-change/SKILL.md +156 -0
  283. package/.cursor/skills/openspec-archive-change/SKILL.md +114 -0
  284. package/.cursor/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  285. package/.cursor/skills/openspec-continue-change/SKILL.md +118 -0
  286. package/.cursor/skills/openspec-explore/SKILL.md +290 -0
  287. package/.cursor/skills/openspec-ff-change/SKILL.md +101 -0
  288. package/.cursor/skills/openspec-new-change/SKILL.md +74 -0
  289. package/.cursor/skills/openspec-onboard/SKILL.md +529 -0
  290. package/.cursor/skills/openspec-sync-specs/SKILL.md +138 -0
  291. package/.cursor/skills/openspec-verify-change/SKILL.md +168 -0
  292. package/.cursor/skills/performance-doctor/SKILL.md +627 -0
  293. package/.cursor/skills/project-navigator/SKILL.md +305 -0
  294. package/.cursor/skills/redis-cache/SKILL.md +839 -0
  295. package/.cursor/skills/scheduled-jobs/SKILL.md +633 -0
  296. package/.cursor/skills/security-guard/SKILL.md +748 -0
  297. package/.cursor/skills/sms-mail/SKILL.md +766 -0
  298. package/.cursor/skills/social-login/SKILL.md +668 -0
  299. package/.cursor/skills/store-pc/SKILL.md +366 -0
  300. package/.cursor/skills/task-tracker/SKILL.md +307 -0
  301. package/.cursor/skills/tech-decision/SKILL.md +393 -0
  302. package/.cursor/skills/tenant-management/SKILL.md +603 -0
  303. package/.cursor/skills/test-development/SKILL.md +755 -0
  304. package/.cursor/skills/ui-pc/SKILL.md +438 -0
  305. package/.cursor/skills/utils-toolkit/SKILL.md +615 -0
  306. package/.cursor/skills/websocket-sse/SKILL.md +716 -0
  307. package/.cursor/skills/workflow-engine/SKILL.md +676 -0
  308. package/AGENTS.md +669 -0
  309. package/CLAUDE.md +205 -0
  310. package/README.md +205 -0
  311. package/bin/index.js +179 -0
  312. package/init.sh +178 -0
  313. package/package.json +27 -0
@@ -0,0 +1,291 @@
1
+ ---
2
+ name: leniu-java-report-query-param
3
+ description: |
4
+ leniu-tengyun-core / leniu-yunshitang 项目报表查询入参规范。当创建报表Controller接口的查询入参Param类时使用此skill。
5
+
6
+ 触发场景:
7
+ - 创建报表查询入参Param类(分页、时间范围、组织筛选)
8
+ - 设计报表接口的基类继承结构
9
+ - 配置导出列开关(exportColumns)
10
+ - 报表查询参数标准化
11
+
12
+ 适用项目:
13
+ - leniu-tengyun-core:/Users/xujiajun/Developer/gongsi_proj/leniu-api/leniu-tengyun-core
14
+ - leniu-yunshitang:/Users/xujiajun/Developer/gongsi_proj/leniu-api/leniu-tengyun/leniu-yunshitang
15
+
16
+ 触发词:leniu-报表查询、leniu-Param类、leniu-查询入参、leniu-分页参数、leniu-时间范围、leniu-ReportBaseParam、leniu-exportCols、net.xnzn、leniu-yunshitang
17
+ ---
18
+
19
+ # leniu-tengyun-core 报表查询入参规范
20
+
21
+ ## 项目特征
22
+
23
+ | 特征 | 说明 |
24
+ |------|------|
25
+ | **包名前缀** | `net.xnzn.core.*` |
26
+ | **JDK 版本** | 21 |
27
+ | **请求封装** | `LeRequest<T>` |
28
+ | **分页参数** | `PageDTO` |
29
+ | **基类** | `ReportBaseParam` |
30
+ | **校验框架** | Jakarta Validation |
31
+
32
+ ## 核心结构
33
+
34
+ ### 1. Controller层接收入参
35
+
36
+ ```java
37
+ import com.pig4cloud.pigx.common.core.util.LeRequest;
38
+
39
+ @PostMapping("/page")
40
+ public ReportBaseTotalVO<XxxVO> pageXxxSummary(@RequestBody LeRequest<XxxParam> request) {
41
+ XxxParam param = request.getContent();
42
+ return xxxService.pageSummary(param);
43
+ }
44
+ ```
45
+
46
+ ### 2. Param类基类继承
47
+
48
+ 报表查询Param类**必须继承** `ReportBaseParam`:
49
+
50
+ ```java
51
+ import lombok.Data;
52
+ import lombok.EqualsAndHashCode;
53
+ import io.swagger.annotations.ApiModel;
54
+ import io.swagger.annotations.ApiModelProperty;
55
+ import net.xnzn.core.common.page.PageDTO;
56
+ import net.xnzn.core.common.param.ReportBaseParam;
57
+
58
+ import java.time.LocalDate;
59
+ import java.util.List;
60
+
61
+ @Data
62
+ @EqualsAndHashCode(callSuper = true)
63
+ @ApiModel(value = "XXX查询入参")
64
+ public class XxxParam extends ReportBaseParam {
65
+
66
+ @ApiModelProperty("关键字")
67
+ private String keyword;
68
+
69
+ @ApiModelProperty("状态")
70
+ private Integer status;
71
+ }
72
+ ```
73
+
74
+ ### 3. ReportBaseParam 提供的通用字段
75
+
76
+ | 字段名 | 类型 | 说明 |
77
+ |--------|------|------|
78
+ | `page` | `PageDTO` | 分页参数 |
79
+ | `startDate` | `LocalDate` | 开始时间 |
80
+ | `endDate` | `LocalDate` | 结束时间 |
81
+ | `exportCols` | `List<String>` | 需要导出的列 |
82
+ | `sumType` | `Integer` | 汇总类型 |
83
+ | `sumDimension` | `Integer` | 统计维度 |
84
+
85
+ ## 常用查询字段模式
86
+
87
+ ### 时间范围查询
88
+
89
+ ```java
90
+ @Data
91
+ @EqualsAndHashCode(callSuper = true)
92
+ @ApiModel("订单报表查询参数")
93
+ public class OrderReportParam extends ReportBaseParam {
94
+
95
+ // 基类已有 startDate, endDate
96
+
97
+ @ApiModelProperty("开始时间(精确到秒)")
98
+ private LocalDateTime startTime;
99
+
100
+ @ApiModelProperty("结束时间(精确到秒)")
101
+ private LocalDateTime endTime;
102
+ }
103
+ ```
104
+
105
+ ### 组织筛选
106
+
107
+ ```java
108
+ @Data
109
+ @EqualsAndHashCode(callSuper = true)
110
+ @ApiModel("组织报表查询参数")
111
+ public class OrgReportParam extends ReportBaseParam {
112
+
113
+ @ApiModelProperty("组织ID")
114
+ private Long orgId;
115
+
116
+ @ApiModelProperty("组织ID列表")
117
+ private List<Long> orgIds;
118
+
119
+ @ApiModelProperty("食堂ID")
120
+ private Long canteenId;
121
+
122
+ @ApiModelProperty("食堂ID列表")
123
+ private List<Long> canteenIds;
124
+ }
125
+ ```
126
+
127
+ ### 餐次筛选
128
+
129
+ ```java
130
+ @Data
131
+ @EqualsAndHashCode(callSuper = true)
132
+ @ApiModel("餐次报表查询参数")
133
+ public class MealtimeReportParam extends ReportBaseParam {
134
+
135
+ @ApiModelProperty("餐次类型列表")
136
+ private List<Integer> mealtimeTypes;
137
+
138
+ @ApiModelProperty("是否只查正餐")
139
+ private Boolean onlyMainMeal;
140
+ }
141
+ ```
142
+
143
+ ### 金额范围
144
+
145
+ ```java
146
+ @Data
147
+ @EqualsAndHashCode(callSuper = true)
148
+ @ApiModel("金额报表查询参数")
149
+ public class AmountReportParam extends ReportBaseParam {
150
+
151
+ @ApiModelProperty("最小金额(分)")
152
+ private Long minAmount;
153
+
154
+ @ApiModelProperty("最大金额(分)")
155
+ private Long maxAmount;
156
+ }
157
+ ```
158
+
159
+ ## PageDTO 结构
160
+
161
+ ```java
162
+ @Data
163
+ @ApiModel("分页参数")
164
+ public class PageDTO {
165
+
166
+ @ApiModelProperty("当前页码")
167
+ private Integer current = 1;
168
+
169
+ @ApiModelProperty("每页条数")
170
+ private Integer size = 10;
171
+
172
+ @ApiModelProperty("是否查询总数")
173
+ private Boolean ifCount = true;
174
+
175
+ @ApiModelProperty("页数为0时的处理")
176
+ private Boolean ifPageSizeZero = false;
177
+ }
178
+ ```
179
+
180
+ ## 完整示例
181
+
182
+ ```java
183
+ @Data
184
+ @EqualsAndHashCode(callSuper = true)
185
+ @ApiModel("销售报表查询参数")
186
+ public class SalesReportParam extends ReportBaseParam {
187
+
188
+ @ApiModelProperty(value = "关键字")
189
+ private String keyword;
190
+
191
+ @ApiModelProperty(value = "组织ID列表")
192
+ private List<Long> orgIds;
193
+
194
+ @ApiModelProperty(value = "食堂ID列表")
195
+ private List<Long> canteenIds;
196
+
197
+ @ApiModelProperty(value = "餐次类型列表")
198
+ private List<Integer> mealtimeTypes;
199
+
200
+ @ApiModelProperty(value = "支付方式列表")
201
+ private List<Integer> payTypes;
202
+
203
+ @ApiModelProperty(value = "最小金额(分)")
204
+ private Long minAmount;
205
+
206
+ @ApiModelProperty(value = "最大金额(分)")
207
+ private Long maxAmount;
208
+
209
+ @ApiModelProperty(value = "是否查询合计行")
210
+ private Boolean ifQueryTotal = true;
211
+ }
212
+ ```
213
+
214
+ ## 两层继承结构(实际生产代码模式)
215
+
216
+ 报表 Param 存在两层继承结构,以订单分析报表为例:
217
+
218
+ ```
219
+ ReportAnalysisParam(大类基类:订单分析类报表通用字段)
220
+ └── ReportAnalysisTurnoverParam(具体报表 Param,加业务字段)
221
+ ```
222
+
223
+ ### ReportAnalysisParam(中间基类)
224
+
225
+ ```java
226
+ import lombok.Data;
227
+ import net.xnzn.core.common.page.PageDTO;
228
+
229
+ import java.time.LocalDate;
230
+ import java.util.List;
231
+
232
+ @Data
233
+ public class ReportAnalysisParam {
234
+
235
+ /** 分页参数 */
236
+ private PageDTO page;
237
+
238
+ /** 开始日期 */
239
+ private LocalDate startDate;
240
+
241
+ /** 结束日期 */
242
+ private LocalDate endDate;
243
+
244
+ /** 日期维度:1=按月 2=按日 */
245
+ private Integer dateType;
246
+
247
+ /** 食堂摊位ID列表(多选) */
248
+ private List<Long> canteenStallIds;
249
+ }
250
+ ```
251
+
252
+ ### ReportAnalysisTurnoverParam(具体 Param,继承中间基类)
253
+
254
+ ```java
255
+ import lombok.Data;
256
+ import lombok.EqualsAndHashCode;
257
+
258
+ import java.util.List;
259
+
260
+ @Data
261
+ @EqualsAndHashCode(callSuper = true)
262
+ public class ReportAnalysisTurnoverParam extends ReportAnalysisParam {
263
+
264
+ /** 餐次类型(单选) */
265
+ private Integer mealtimeType;
266
+
267
+ /** 餐次类型列表(多选) */
268
+ private List<Integer> mealtimeTypeList;
269
+
270
+ /** 排序类型:1=按金额降序(默认) */
271
+ private Integer sortType = 1;
272
+
273
+ /** 食堂ID(单选) */
274
+ private Long canteenId;
275
+
276
+ /** 摊位ID(单选) */
277
+ private Long stallId;
278
+ }
279
+ ```
280
+
281
+ **选择继承层级的判断依据**:
282
+ - 若报表是"订单分析"大类报表 → 继承 `ReportAnalysisParam`(含 `dateType`)
283
+ - 若是通用报表 → 直接继承 `ReportBaseParam`(含 `page/startDate/endDate/exportCols`)
284
+
285
+ ## 注意事项
286
+
287
+ - 报表Param类必须继承 `ReportBaseParam` 或其子类(如 `ReportAnalysisParam`)
288
+ - 时间字段使用 `LocalDate` 或 `LocalDateTime`
289
+ - `dateType` 字段含义:1=按月汇总,2=按日汇总
290
+ - 金额查询参数类型与业务域保持一致:钱包/账户用 `Long`(分),订单用 `BigDecimal`(分);见 leniu-java-amount-handling
291
+ - 导出时通过 `exportCols` 控制导出列
@@ -0,0 +1,367 @@
1
+ ---
2
+ name: leniu-java-task
3
+ description: |
4
+ leniu-tengyun-core / leniu-yunshitang 项目定时任务规范。当编写定时任务时使用此skill,包括XXL-Job使用和任务调度规范。
5
+
6
+ 触发场景:
7
+ - 使用XXL-Job实现分布式定时任务
8
+ - 编写任务处理器(@XxlJob)
9
+ - 商户遍历任务模式
10
+ - 任务并发控制和监控
11
+
12
+ 适用项目:
13
+ - leniu-tengyun-core:/Users/xujiajun/Developer/gongsi_proj/leniu-api/leniu-tengyun-core
14
+ - leniu-yunshitang:/Users/xujiajun/Developer/gongsi_proj/leniu-api/leniu-tengyun/leniu-yunshitang
15
+
16
+ 触发词:leniu-定时任务、leniu-XXL-Job、leniu-@XxlJob、leniu-TenantLoader、leniu-TenantContextHolder、leniu-分布式锁、net.xnzn、leniu-yunshitang
17
+ ---
18
+
19
+ # leniu-tengyun-core 定时任务规范
20
+
21
+ ## 项目特征
22
+
23
+ | 特征 | 说明 |
24
+ |------|------|
25
+ | **包名前缀** | `net.xnzn.core.*` |
26
+ | **JDK 版本** | 21 |
27
+ | **任务框架** | XXL-Job |
28
+ | **任务注解** | `@XxlJob` |
29
+ | **租户上下文** | `TenantContextHolder` |
30
+ | **租户加载器** | `TenantLoader` |
31
+ | **跨租户工具** | `Executors` |
32
+ | **Redis工具** | `RedisUtil` |
33
+ | **异常类** | `LeException` |
34
+ | **国际化** | `I18n` |
35
+
36
+ ## 基础使用
37
+
38
+ ### 定时任务模板
39
+
40
+ ```java
41
+ import com.xxl.job.core.handler.annotation.XxlJob;
42
+ import net.xnzn.framework.data.tenant.TenantContextHolder;
43
+ import net.xnzn.core.common.loader.TenantLoader;
44
+ import org.springframework.beans.factory.annotation.Autowired;
45
+ import org.springframework.context.annotation.Lazy;
46
+ import org.springframework.stereotype.Component;
47
+ import lombok.extern.slf4j.Slf4j;
48
+
49
+ @Component
50
+ @Slf4j
51
+ public class DataSyncTask {
52
+
53
+ @Autowired
54
+ @Lazy
55
+ private DataSyncService dataSyncService;
56
+
57
+ /**
58
+ * 数据同步任务
59
+ */
60
+ @XxlJob(value = "dataSyncJob")
61
+ public void syncData() {
62
+ log.info("【定时任务】数据同步任务开始执行");
63
+
64
+ try {
65
+ int count = dataSyncService.sync();
66
+ log.info("【定时任务】数据同步任务执行完成,同步数量:{}", count);
67
+ } catch (Exception e) {
68
+ log.error("【定时任务】数据同步任务执行失败", e);
69
+ throw e; // 重新抛出,XXL-Job会记录失败
70
+ }
71
+ }
72
+ }
73
+ ```
74
+
75
+ ## 商户遍历模式
76
+
77
+ ### 模式一: 直接使用 TenantLoader(最常用)
78
+
79
+ ```java
80
+ @Component
81
+ @Slf4j
82
+ public class AccSubTimeTask {
83
+
84
+ @Autowired
85
+ @Lazy
86
+ private TenantLoader tenantLoader;
87
+
88
+ @Autowired
89
+ @Lazy
90
+ private AccSubTimeService accSubTimeService;
91
+
92
+ /**
93
+ * 补贴定时发放任务
94
+ */
95
+ @XxlJob("accSubTimeSendHandle")
96
+ public void accSubTimeSendHandle() {
97
+ log.info("[补贴定时规则]定时任务,开始时间:{}", LocalDateTime.now());
98
+
99
+ // 遍历所有商户
100
+ tenantLoader.listTenant().forEach(merchantId -> {
101
+ try {
102
+ // 设置租户上下文
103
+ TenantContextHolder.setTenantId(merchantId);
104
+
105
+ // 并发控制
106
+ this.checkTask(merchantId);
107
+
108
+ // 执行业务逻辑
109
+ accSubTimeService.accSubRuleTask();
110
+ } catch (Exception e) {
111
+ log.error("[补贴定时规则]定时任务异常,商家={}", merchantId, e);
112
+ }
113
+ });
114
+
115
+ log.info("[补贴定时规则]定时任务,结束时间:{}", LocalDateTime.now());
116
+ }
117
+
118
+ /**
119
+ * 并发控制检查
120
+ */
121
+ protected void checkTask(Long tenantId) {
122
+ String key = "yst:task:name:" + tenantId;
123
+ boolean ifFirst = RedisUtil.setNx(key, LeConstants.COMMON_YES, 6);
124
+ if (!ifFirst) {
125
+ throw new LeException(I18n.getMessage("acc_operate_exits_task"));
126
+ }
127
+ }
128
+ }
129
+ ```
130
+
131
+ ### 模式二: 使用 Executors 工具类
132
+
133
+ ```java
134
+ import net.xnzn.framework.data.executor.Executors;
135
+
136
+ @Component
137
+ @Slf4j
138
+ public class CouponTask {
139
+
140
+ @Autowired
141
+ @Lazy
142
+ private CouponService couponService;
143
+
144
+ /**
145
+ * 餐券状态自动处理
146
+ */
147
+ @XxlJob("couponStateAutoHandler")
148
+ public void couponStateAutoHandler() {
149
+ log.info("[餐券状态]定时任务开始执行");
150
+
151
+ // 使用工具类遍历商户
152
+ Executors.doInAllTenant(tenantId -> {
153
+ try {
154
+ TenantContextHolder.setTenantId(tenantId);
155
+ couponService.autoHandleState();
156
+ } catch (Exception e) {
157
+ log.error("[餐券状态]定时任务异常,商家={}", tenantId, e);
158
+ }
159
+ });
160
+
161
+ log.info("[餐券状态]定时任务执行完成");
162
+ }
163
+ }
164
+ ```
165
+
166
+ ### 模式三: 商户遍历 + 分布式锁
167
+
168
+ ```java
169
+ import org.redisson.api.RLock;
170
+
171
+ @Component
172
+ @Slf4j
173
+ public class PayTask {
174
+
175
+ @Autowired
176
+ @Lazy
177
+ private TenantLoader tenantLoader;
178
+
179
+ private static final String LOCK_KEY_PAYING = "pay:paying:lock";
180
+
181
+ /**
182
+ * 处理支付中的交易记录
183
+ */
184
+ @XxlJob("payingTradeRecordHandler")
185
+ public void payingTradeRecordHandler() {
186
+ // 获取分布式锁
187
+ RLock lock = RedisUtil.getLock(LOCK_KEY_PAYING);
188
+ if (!lock.tryLock()) {
189
+ log.warn("[支付定时任务]上一个任务进行中");
190
+ return;
191
+ }
192
+
193
+ try {
194
+ log.info("[支付定时任务]处理支付中的交易开始执行");
195
+
196
+ for (Long tenantId : tenantLoader.listTenant()) {
197
+ try {
198
+ TenantContextHolder.setTenantId(tenantId);
199
+ // 处理交易记录
200
+ tradeRecordService.handlePayingRecords();
201
+ } catch (Exception e) {
202
+ log.error("[支付定时任务]商户处理异常,tenantId={}", tenantId, e);
203
+ }
204
+ }
205
+ } finally {
206
+ if (lock.isHeldByCurrentThread() && lock.isLocked()) {
207
+ lock.unlock();
208
+ }
209
+ }
210
+ }
211
+ }
212
+ ```
213
+
214
+ ## 并发控制
215
+
216
+ ### 方式一: Redis setNx 简单锁(商户级)
217
+
218
+ ```java
219
+ /**
220
+ * 商户级别的并发控制
221
+ */
222
+ protected void checkTask(Long tenantId) {
223
+ String key = "yst:task:name:" + tenantId;
224
+ boolean ifFirst = RedisUtil.setNx(key, "1", 6);
225
+ if (!ifFirst) {
226
+ throw new LeException("任务正在执行");
227
+ }
228
+ }
229
+ ```
230
+
231
+ ### 方式二: Redisson 分布式锁(全局级)
232
+
233
+ ```java
234
+ @XxlJob("globalTaskJob")
235
+ public void globalTask() {
236
+ RLock lock = RedisUtil.getLock("task:global:lock");
237
+ if (!lock.tryLock()) {
238
+ log.warn("[全局任务]上一个任务进行中,跳过");
239
+ return;
240
+ }
241
+
242
+ try {
243
+ doTask();
244
+ } finally {
245
+ if (lock.isHeldByCurrentThread() && lock.isLocked()) {
246
+ lock.unlock();
247
+ }
248
+ }
249
+ }
250
+ ```
251
+
252
+ ## 任务参数
253
+
254
+ ### 使用任务参数
255
+
256
+ ```java
257
+ import com.xxl.job.core.context.XxlJobHelper;
258
+
259
+ @XxlJob("dataCleanJob")
260
+ public void cleanData() {
261
+ // 获取任务参数
262
+ String param = XxlJobHelper.getJobParam();
263
+ log.info("【定时任务】数据清理任务开始执行,参数:{}", param);
264
+
265
+ try {
266
+ // 解析参数
267
+ DataCleanParam cleanParam = JacksonUtil.readValue(param, DataCleanParam.class);
268
+ int count = dataService.clean(cleanParam);
269
+ log.info("【定时任务】数据清理任务执行完成,清理数量:{}", count);
270
+ } catch (Exception e) {
271
+ log.error("【定时任务】数据清理任务执行失败", e);
272
+ throw e;
273
+ }
274
+ }
275
+ ```
276
+
277
+ ## 任务分片
278
+
279
+ ```java
280
+ @XxlJob("userDataSyncJob")
281
+ public void syncUserData() {
282
+ // 获取分片参数
283
+ int shardIndex = XxlJobHelper.getShardIndex(); // 当前分片索引
284
+ int shardTotal = XxlJobHelper.getShardTotal(); // 总分片数
285
+
286
+ log.info("【定时任务】用户数据同步,分片:{}/{}", shardIndex, shardTotal);
287
+
288
+ // 查询当前分片的数据
289
+ List<User> users = userService.listBySharding(shardIndex, shardTotal);
290
+ // 处理数据...
291
+ }
292
+ ```
293
+
294
+ ## 最佳实践
295
+
296
+ ### 1. 依赖注入使用 @Autowired @Lazy
297
+
298
+ ```java
299
+ @Component
300
+ @Slf4j
301
+ public class XxxTask {
302
+
303
+ @Autowired
304
+ @Lazy
305
+ private XxxService xxxService;
306
+
307
+ @Autowired
308
+ @Lazy
309
+ private TenantLoader tenantLoader;
310
+ }
311
+ ```
312
+
313
+ ### 2. 商户遍历必须设置租户上下文
314
+
315
+ ```java
316
+ tenantLoader.listTenant().forEach(merchantId -> {
317
+ try {
318
+ // ⚠️ 必须设置租户上下文
319
+ TenantContextHolder.setTenantId(merchantId);
320
+ doSomething();
321
+ } catch (Exception e) {
322
+ log.error("[任务]处理异常,商家={}", merchantId, e);
323
+ }
324
+ });
325
+ ```
326
+
327
+ ### 3. 单个商户失败不影响其他商户
328
+
329
+ ```java
330
+ // ✅ 推荐
331
+ tenantLoader.listTenant().forEach(merchantId -> {
332
+ try {
333
+ TenantContextHolder.setTenantId(merchantId);
334
+ doBusiness();
335
+ } catch (Exception e) {
336
+ log.error("[任务]商户处理异常", e); // 捕获异常,继续执行
337
+ }
338
+ });
339
+
340
+ // ❌ 避免
341
+ for (Long merchantId : tenantLoader.listTenant()) {
342
+ TenantContextHolder.setTenantId(merchantId);
343
+ doBusiness(); // 异常会导致后续商户无法执行
344
+ }
345
+ ```
346
+
347
+ ### 4. 任务日志完整
348
+
349
+ ```java
350
+ @XxlJob("dataSyncJob")
351
+ public void syncData() {
352
+ log.info("[任务名称]定时任务开始执行");
353
+ try {
354
+ int count = doSync();
355
+ log.info("[任务名称]定时任务执行完成,数量:{}", count);
356
+ } catch (Exception e) {
357
+ log.error("[任务名称]定时任务执行失败", e);
358
+ throw e;
359
+ }
360
+ }
361
+ ```
362
+
363
+ ## 注意事项
364
+
365
+ - 与 `scheduled-jobs` 技能不同,本技能侧重 XXL-Job 使用规范
366
+ - 商户遍历任务必须设置 `TenantContextHolder.setTenantId()`
367
+ - 注意控制任务并发,避免重复执行