adspecs 0.1.12
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/.adspecs/extensions/.registry +30 -0
- package/.adspecs/extensions/git/README.md +100 -0
- package/.adspecs/extensions/git/commands/adspecs.git.commit.md +48 -0
- package/.adspecs/extensions/git/commands/adspecs.git.feature.md +67 -0
- package/.adspecs/extensions/git/commands/adspecs.git.initialize.md +49 -0
- package/.adspecs/extensions/git/commands/adspecs.git.remote.md +45 -0
- package/.adspecs/extensions/git/commands/adspecs.git.validate.md +49 -0
- package/.adspecs/extensions/git/config-template.yml +62 -0
- package/.adspecs/extensions/git/extension.yml +140 -0
- package/.adspecs/extensions/git/git-config.yml +62 -0
- package/.adspecs/extensions/git/scripts/bash/auto-commit.sh +140 -0
- package/.adspecs/extensions/git/scripts/bash/create-new-feature.sh +453 -0
- package/.adspecs/extensions/git/scripts/bash/git-common.sh +54 -0
- package/.adspecs/extensions/git/scripts/bash/initialize-repo.sh +54 -0
- package/.adspecs/extensions/git/scripts/powershell/auto-commit.ps1 +169 -0
- package/.adspecs/extensions/git/scripts/powershell/create-new-feature.ps1 +403 -0
- package/.adspecs/extensions/git/scripts/powershell/git-common.ps1 +51 -0
- package/.adspecs/extensions/git/scripts/powershell/initialize-repo.ps1 +69 -0
- package/.adspecs/extensions.yml +165 -0
- package/.adspecs/feature.json +16 -0
- package/.adspecs/feature.yml +28 -0
- package/.adspecs/project.json +8 -0
- package/.adspecs/scripts/bash/check-prerequisites.sh +195 -0
- package/.adspecs/scripts/bash/common.sh +640 -0
- package/.adspecs/scripts/bash/create-new-feature.sh +301 -0
- package/.adspecs/scripts/bash/setup-plan.sh +84 -0
- package/.adspecs/scripts/bash/setup-tasks.sh +91 -0
- package/.adspecs/scripts/powershell/check-prerequisites.ps1 +149 -0
- package/.adspecs/scripts/powershell/common.ps1 +545 -0
- package/.adspecs/scripts/powershell/create-new-feature.ps1 +237 -0
- package/.adspecs/scripts/powershell/setup-plan.ps1 +64 -0
- package/.adspecs/scripts/powershell/setup-tasks.ps1 +70 -0
- package/.adspecs/scripts/python/check_prerequisites.py +207 -0
- package/.adspecs/scripts/python/common.py +210 -0
- package/.adspecs/templates/01-/344/270/232/345/212/241/351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/346/235/277.md +228 -0
- package/.adspecs/templates/02-/344/272/247/345/223/201/351/234/200/346/261/202/350/257/264/346/230/216/344/271/246/346/250/241/346/235/277.md +623 -0
- package/.adspecs/templates/03-/347/263/273/347/273/237/350/256/276/350/256/241/346/250/241/346/235/277.md +1878 -0
- package/.adspecs/templates/04-/345/211/215/347/253/257/345/212/237/350/203/275/350/256/276/350/256/241/346/250/241/346/235/277.md +176 -0
- package/.adspecs/templates/05-/345/220/216/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +724 -0
- package/.adspecs/templates/05b-/345/211/215/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +492 -0
- package/.adspecs/templates/06-/344/273/243/347/240/201/350/257/204/345/256/241/346/212/245/345/221/212/346/250/241/346/235/277.md +1012 -0
- package/.adspecs/templates/07-/345/215/225/345/205/203/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +694 -0
- package/.adspecs/templates/08-/347/263/273/347/273/237/351/233/206/346/210/220/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +1098 -0
- package/.adspecs/templates/09-/346/200/247/350/203/275/346/265/213/350/257/225/346/212/245/345/221/212/346/250/241/346/235/277.md +610 -0
- package/.adspecs/templates/10-/345/256/211/345/205/250/346/243/200/346/237/245/346/270/205/345/215/225.md +912 -0
- package/.adspecs/templates/11-/344/273/243/347/240/201/350/264/250/351/207/217/346/240/207/345/207/206.md +753 -0
- package/.adspecs/templates/13-/346/265/213/350/257/225/347/224/250/344/276/213/346/250/241/346/235/277.md +543 -0
- package/.adspecs/templates/14-/351/234/200/346/261/202/350/277/275/346/272/257/347/237/251/351/230/265/346/250/241/346/235/277.md +225 -0
- package/.adspecs/templates/15-/344/270/232/345/212/241/345/212/237/350/203/275/346/236/266/346/236/204/346/226/207/346/241/243/346/250/241/346/235/277.md +168 -0
- package/.adspecs/templates/16-/347/263/273/347/273/237/346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/346/235/277.md +608 -0
- package/.adspecs/templates/17-/345/255/220/346/250/241/345/235/227/344/276/235/350/265/226/345/205/263/347/263/273/346/250/241/346/235/277.md +308 -0
- package/.adspecs/templates/18-/347/273/237/344/270/200/346/225/260/346/215/256/346/250/241/345/236/213/346/250/241/346/235/277.md +297 -0
- package/.adspecs/templates/19-/351/241/271/347/233/256/347/233/256/345/275/225/347/273/223/346/236/204/346/250/241/346/235/277.md +468 -0
- package/.adspecs/templates/20-/345/267/245/344/275/234/350/257/264/346/230/216/344/271/246SOW/346/250/241/346/235/277.md +372 -0
- package/.adspecs/templates/21-/344/270/232/345/212/241/346/226/271/346/241/210/346/250/241/346/235/277.md +661 -0
- package/.adspecs/workflows/adspecs/workflow.yml +82 -0
- package/.adspecs/workflows/workflow-registry.json +13 -0
- package/.claude-plugin/marketplace.json +23 -0
- package/.claude-plugin/plugin.json +14 -0
- package/.qoder-plugin/plugin.json +21 -0
- package/CHANGELOG.md +1 -0
- package/CLAUDE.md +207 -0
- package/INSTALL.md +134 -0
- package/LICENSE +201 -0
- package/README.md +605 -0
- package/bin/adspecs.js +126 -0
- package/hooks/commit-queue.js +245 -0
- package/hooks/hooks.json +63 -0
- package/hooks/session-start.js +44 -0
- package/hooks/wiki-queue.js +127 -0
- package/package.json +61 -0
- package/references/ant6-front-standard/01-/345/237/272/347/241/200/350/247/204/350/214/203.md +181 -0
- package/references/ant6-front-standard/02-/347/273/204/344/273/266/350/247/204/350/214/203.md +189 -0
- package/references/ant6-front-standard/03-/345/210/227/350/241/250/350/247/204/350/214/203.md +147 -0
- package/references/ant6-front-standard/04-/350/241/250/345/215/225/350/247/204/350/214/203.md +312 -0
- package/references/ant6-front-standard/05-/345/211/215/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +1443 -0
- package/references/ant6-front-standard/05-/350/267/257/347/224/261/347/212/266/346/200/201/346/216/245/345/217/243/350/247/204/350/214/203.md +175 -0
- package/references/ant6-front-standard/06-/345/233/275/351/231/205/345/214/226/350/247/204/350/214/203.md +126 -0
- package/references/ant6-front-standard/07-/345/255/227/345/205/270/346/235/203/351/231/220/350/247/204/350/214/203.md +71 -0
- package/references/ant6-front-standard/08-/346/200/247/350/203/275/350/264/250/351/207/217/350/247/204/350/214/203.md +91 -0
- package/references/ant6-front-standard/09-/345/270/270/350/247/201/351/227/256/351/242/230/350/247/204/350/214/203.md +87 -0
- package/references/ant6-front-standard/index.md +100 -0
- package/references/ant6-front-standard/vue/350/277/201/347/247/273/345/210/260react/350/247/204/350/214/203.md +37 -0
- package/references/antd-front-demo/.env +15 -0
- package/references/antd-front-demo/.env.production +7 -0
- package/references/antd-front-demo/eslint.config.js +23 -0
- package/references/antd-front-demo/index.html +16 -0
- package/references/antd-front-demo/package-lock.json +6603 -0
- package/references/antd-front-demo/package.json +53 -0
- package/references/antd-front-demo/public/favicon.svg +4 -0
- package/references/antd-front-demo/public/mockServiceWorker.js +361 -0
- package/references/antd-front-demo/src/App.tsx +68 -0
- package/references/antd-front-demo/src/api/aps/coil.ts +42 -0
- package/references/antd-front-demo/src/api/aps/order.ts +42 -0
- package/references/antd-front-demo/src/api/aps/param.ts +19 -0
- package/references/antd-front-demo/src/api/aps/plan.ts +30 -0
- package/references/antd-front-demo/src/api/aps/task.ts +31 -0
- package/references/antd-front-demo/src/api/auth.ts +41 -0
- package/references/antd-front-demo/src/api/mdm/codeRule.ts +23 -0
- package/references/antd-front-demo/src/api/mdm/coding-system.ts +130 -0
- package/references/antd-front-demo/src/api/system/dept.ts +38 -0
- package/references/antd-front-demo/src/api/system/dict-data.ts +42 -0
- package/references/antd-front-demo/src/api/system/dict-type.ts +35 -0
- package/references/antd-front-demo/src/api/system/menu.ts +38 -0
- package/references/antd-front-demo/src/api/system/post.ts +15 -0
- package/references/antd-front-demo/src/api/system/role.ts +42 -0
- package/references/antd-front-demo/src/api/system/user.ts +48 -0
- package/references/antd-front-demo/src/components/Access/index.tsx +14 -0
- package/references/antd-front-demo/src/components/DictTag/index.tsx +29 -0
- package/references/antd-front-demo/src/components/Footer/index.tsx +35 -0
- package/references/antd-front-demo/src/components/Icon/iconMap.ts +131 -0
- package/references/antd-front-demo/src/components/Icon/index.tsx +62 -0
- package/references/antd-front-demo/src/hooks/useAccess.ts +5 -0
- package/references/antd-front-demo/src/i18n/index.ts +22 -0
- package/references/antd-front-demo/src/layouts/AdminLayout/Header.tsx +137 -0
- package/references/antd-front-demo/src/layouts/AdminLayout/Sidebar.tsx +103 -0
- package/references/antd-front-demo/src/layouts/AdminLayout/StyleSettings.tsx +165 -0
- package/references/antd-front-demo/src/layouts/AdminLayout/index.tsx +25 -0
- package/references/antd-front-demo/src/locales/en-US/aps/coil.ts +18 -0
- package/references/antd-front-demo/src/locales/en-US/aps/order.ts +27 -0
- package/references/antd-front-demo/src/locales/en-US/aps/param.ts +32 -0
- package/references/antd-front-demo/src/locales/en-US/aps/plan.ts +33 -0
- package/references/antd-front-demo/src/locales/en-US/aps/task.ts +33 -0
- package/references/antd-front-demo/src/locales/en-US/common.ts +27 -0
- package/references/antd-front-demo/src/locales/en-US/components/upload.ts +12 -0
- package/references/antd-front-demo/src/locales/en-US/dashboard.ts +18 -0
- package/references/antd-front-demo/src/locales/en-US/header.ts +27 -0
- package/references/antd-front-demo/src/locales/en-US/login.ts +42 -0
- package/references/antd-front-demo/src/locales/en-US/mdm/codeRule.ts +20 -0
- package/references/antd-front-demo/src/locales/en-US/mdm/coding-system-state-flow.ts +28 -0
- package/references/antd-front-demo/src/locales/en-US/mdm/coding-system.ts +139 -0
- package/references/antd-front-demo/src/locales/en-US/menu.ts +18 -0
- package/references/antd-front-demo/src/locales/en-US/profile.ts +38 -0
- package/references/antd-front-demo/src/locales/en-US/system/dept.ts +20 -0
- package/references/antd-front-demo/src/locales/en-US/system/dict.ts +30 -0
- package/references/antd-front-demo/src/locales/en-US/system/menu.ts +28 -0
- package/references/antd-front-demo/src/locales/en-US/system/role.ts +18 -0
- package/references/antd-front-demo/src/locales/en-US/system/user.ts +29 -0
- package/references/antd-front-demo/src/locales/zh-CN/aps/coil.ts +18 -0
- package/references/antd-front-demo/src/locales/zh-CN/aps/order.ts +27 -0
- package/references/antd-front-demo/src/locales/zh-CN/aps/param.ts +32 -0
- package/references/antd-front-demo/src/locales/zh-CN/aps/plan.ts +33 -0
- package/references/antd-front-demo/src/locales/zh-CN/aps/task.ts +33 -0
- package/references/antd-front-demo/src/locales/zh-CN/common.ts +27 -0
- package/references/antd-front-demo/src/locales/zh-CN/components/upload.ts +12 -0
- package/references/antd-front-demo/src/locales/zh-CN/dashboard.ts +18 -0
- package/references/antd-front-demo/src/locales/zh-CN/header.ts +27 -0
- package/references/antd-front-demo/src/locales/zh-CN/login.ts +42 -0
- package/references/antd-front-demo/src/locales/zh-CN/mdm/codeRule.ts +20 -0
- package/references/antd-front-demo/src/locales/zh-CN/mdm/coding-system-state-flow.ts +28 -0
- package/references/antd-front-demo/src/locales/zh-CN/mdm/coding-system.ts +154 -0
- package/references/antd-front-demo/src/locales/zh-CN/menu.ts +18 -0
- package/references/antd-front-demo/src/locales/zh-CN/profile.ts +38 -0
- package/references/antd-front-demo/src/locales/zh-CN/system/dept.ts +20 -0
- package/references/antd-front-demo/src/locales/zh-CN/system/dict.ts +30 -0
- package/references/antd-front-demo/src/locales/zh-CN/system/menu.ts +28 -0
- package/references/antd-front-demo/src/locales/zh-CN/system/role.ts +18 -0
- package/references/antd-front-demo/src/locales/zh-CN/system/user.ts +29 -0
- package/references/antd-front-demo/src/main.tsx +18 -0
- package/references/antd-front-demo/src/mocks/browser.ts +10 -0
- package/references/antd-front-demo/src/mocks/data/aps.ts +255 -0
- package/references/antd-front-demo/src/mocks/data/index.ts +382 -0
- package/references/antd-front-demo/src/mocks/handlers/apsCoil.ts +151 -0
- package/references/antd-front-demo/src/mocks/handlers/apsOrder.ts +166 -0
- package/references/antd-front-demo/src/mocks/handlers/apsParam.ts +71 -0
- package/references/antd-front-demo/src/mocks/handlers/apsPlan.ts +98 -0
- package/references/antd-front-demo/src/mocks/handlers/apsTask.ts +249 -0
- package/references/antd-front-demo/src/mocks/handlers/auth.ts +244 -0
- package/references/antd-front-demo/src/mocks/handlers/codeRule.ts +141 -0
- package/references/antd-front-demo/src/mocks/handlers/coding-system.ts +256 -0
- package/references/antd-front-demo/src/mocks/handlers/dept.ts +154 -0
- package/references/antd-front-demo/src/mocks/handlers/dict.ts +297 -0
- package/references/antd-front-demo/src/mocks/handlers/image.ts +13 -0
- package/references/antd-front-demo/src/mocks/handlers/index.ts +33 -0
- package/references/antd-front-demo/src/mocks/handlers/menu.ts +132 -0
- package/references/antd-front-demo/src/mocks/handlers/post.ts +19 -0
- package/references/antd-front-demo/src/mocks/handlers/role.ts +184 -0
- package/references/antd-front-demo/src/mocks/handlers/user.ts +223 -0
- package/references/antd-front-demo/src/pages/aps/coil/components/CoilDrawer.tsx +141 -0
- package/references/antd-front-demo/src/pages/aps/coil/index.tsx +209 -0
- package/references/antd-front-demo/src/pages/aps/optimization/index.tsx +192 -0
- package/references/antd-front-demo/src/pages/aps/order/components/OrderDrawer.tsx +251 -0
- package/references/antd-front-demo/src/pages/aps/order/index.tsx +273 -0
- package/references/antd-front-demo/src/pages/aps/param/index.tsx +153 -0
- package/references/antd-front-demo/src/pages/aps/plan/components/CuttingPlanVisualization.tsx +821 -0
- package/references/antd-front-demo/src/pages/aps/plan/index.tsx +254 -0
- package/references/antd-front-demo/src/pages/aps/task/index.tsx +190 -0
- package/references/antd-front-demo/src/pages/dashboard/index.tsx +67 -0
- package/references/antd-front-demo/src/pages/error/404/index.tsx +25 -0
- package/references/antd-front-demo/src/pages/login/components/ForgetPasswordForm.tsx +101 -0
- package/references/antd-front-demo/src/pages/login/components/LoginForm.tsx +83 -0
- package/references/antd-front-demo/src/pages/login/components/RegisterForm.tsx +69 -0
- package/references/antd-front-demo/src/pages/login/components/index.ts +3 -0
- package/references/antd-front-demo/src/pages/login/index.module.css +62 -0
- package/references/antd-front-demo/src/pages/login/index.tsx +60 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/approval/index.tsx +227 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/code-log/index.tsx +103 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/code-mapping/components/CodeMappingDrawer.tsx +120 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/code-mapping/index.tsx +170 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/code-rule/components/CodeRuleDrawer.tsx +235 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/code-rule/index.tsx +204 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/state-flow/index.tsx +101 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/sync/index.tsx +151 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/variable-dict/components/VariableDictDrawer.tsx +108 -0
- package/references/antd-front-demo/src/pages/mdm/coding-system/variable-dict/index.tsx +163 -0
- package/references/antd-front-demo/src/pages/profile/index.tsx +136 -0
- package/references/antd-front-demo/src/pages/system/dept/components/DeptDrawer.tsx +157 -0
- package/references/antd-front-demo/src/pages/system/dept/index.tsx +224 -0
- package/references/antd-front-demo/src/pages/system/dict/components/DictDataDrawer.tsx +243 -0
- package/references/antd-front-demo/src/pages/system/dict/components/DictTypeModal.tsx +102 -0
- package/references/antd-front-demo/src/pages/system/dict/index.tsx +162 -0
- package/references/antd-front-demo/src/pages/system/menu/components/MenuDrawer.tsx +215 -0
- package/references/antd-front-demo/src/pages/system/menu/index.tsx +236 -0
- package/references/antd-front-demo/src/pages/system/role/components/RoleDrawer.tsx +118 -0
- package/references/antd-front-demo/src/pages/system/role/index.tsx +142 -0
- package/references/antd-front-demo/src/pages/system/user/components/DeptTree.tsx +71 -0
- package/references/antd-front-demo/src/pages/system/user/components/UserDrawer.tsx +197 -0
- package/references/antd-front-demo/src/pages/system/user/index.tsx +189 -0
- package/references/antd-front-demo/src/router/authGuard.tsx +67 -0
- package/references/antd-front-demo/src/router/dynamicRoutes.tsx +179 -0
- package/references/antd-front-demo/src/router/index.tsx +105 -0
- package/references/antd-front-demo/src/setupTests.ts +1 -0
- package/references/antd-front-demo/src/stores/useAppStore.ts +43 -0
- package/references/antd-front-demo/src/stores/useAuthStore.ts +78 -0
- package/references/antd-front-demo/src/stores/useDictStore.ts +41 -0
- package/references/antd-front-demo/src/types/api.ts +17 -0
- package/references/antd-front-demo/src/types/aps/coil.ts +42 -0
- package/references/antd-front-demo/src/types/aps/order.ts +63 -0
- package/references/antd-front-demo/src/types/aps/param.ts +48 -0
- package/references/antd-front-demo/src/types/aps/plan.ts +59 -0
- package/references/antd-front-demo/src/types/aps/task.ts +66 -0
- package/references/antd-front-demo/src/types/auth.ts +81 -0
- package/references/antd-front-demo/src/types/mdm/codeRule.ts +43 -0
- package/references/antd-front-demo/src/types/mdm/coding-system.ts +187 -0
- package/references/antd-front-demo/src/utils/formatTime.ts +68 -0
- package/references/antd-front-demo/src/utils/menuConverter.ts +113 -0
- package/references/antd-front-demo/src/utils/messageHolder.ts +14 -0
- package/references/antd-front-demo/src/utils/permission.ts +18 -0
- package/references/antd-front-demo/src/utils/request.ts +165 -0
- package/references/antd-front-demo/src/utils/token.ts +91 -0
- package/references/antd-front-demo/tsconfig.app.json +30 -0
- package/references/antd-front-demo/tsconfig.json +7 -0
- package/references/antd-front-demo/tsconfig.node.json +24 -0
- package/references/antd-front-demo/vite.config.ts +30 -0
- package/references/ecp-end-standard/ES/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -0
- package/references/ecp-end-standard/IdToName/344/275/277/347/224/250/350/247/204/350/214/203.md +148 -0
- package/references/ecp-end-standard/Liquibase /346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/347/256/241/347/220/206/350/247/204/350/214/203.md" +197 -0
- package/references/ecp-end-standard/Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +78 -0
- package/references/ecp-end-standard/index.md +63 -0
- package/references/ecp-end-standard//345/210/206/345/270/203/345/274/217/351/224/201/350/247/204/350/214/203.md +65 -0
- package/references/ecp-end-standard//345/220/216/347/253/257/345/210/206/345/261/202/345/274/200/345/217/221/344/270/216/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +385 -0
- package/references/ecp-end-standard//345/244/232/350/257/255/350/250/200/345/217/212/345/205/250/345/261/200/345/274/202/345/270/270/345/244/204/347/220/206/350/247/204/350/214/203.md +442 -0
- package/references/ecp-end-standard//346/226/207/344/273/266/344/270/255/345/277/203/344/275/277/347/224/250/350/247/204/350/214/203.md +278 -0
- package/references/ecp-end-standard//346/265/201/347/250/213/344/270/255/345/277/203/346/216/245/345/205/245/350/247/204/350/214/203.md +464 -0
- package/references/ecp-end-standard//347/274/226/347/240/201/350/207/252/345/212/250/347/224/237/346/210/220/350/247/204/350/214/203.md +69 -0
- package/references/ecp-end-standard//351/200/232/347/224/250/345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/350/247/204/350/214/203.md +189 -0
- package/references/front-demo/.claude/rules/INDEX.md +54 -0
- package/references/front-demo/.claude/rules/api-i18n-rules.md +65 -0
- package/references/front-demo/.claude/rules/gushen-components.md +174 -0
- package/references/front-demo/.claude/rules/page-development-rules.md +262 -0
- package/references/front-demo/.claude/rules/page-template-index.md +374 -0
- package/references/front-demo/.claude/rules/project-overview.md +48 -0
- package/references/front-demo/.claude/skills/generate-vue3-page/SKILL.md +145 -0
- package/references/front-demo/.editorconfig +9 -0
- package/references/front-demo/.gitattributes +1 -0
- package/references/front-demo/.playwright-mcp/page-2026-06-10T08-21-21-503Z.yml +7 -0
- package/references/front-demo/.playwright-mcp/page-2026-06-10T10-02-33-237Z.yml +4 -0
- package/references/front-demo/.prettierrc.json +6 -0
- package/references/front-demo/README.md +39 -0
- package/references/front-demo/app-startup.png +0 -0
- package/references/front-demo/auto-imports.d.ts +10 -0
- package/references/front-demo/build-log.txt +214 -0
- package/references/front-demo/claude.md +62 -0
- package/references/front-demo/components.d.ts +95 -0
- package/references/front-demo/env.d.ts +1 -0
- package/references/front-demo/eslint.config.ts +22 -0
- package/references/front-demo/index.html +22 -0
- package/references/front-demo/package.json +77 -0
- package/references/front-demo/public/apiurls.js +70 -0
- package/references/front-demo/public/config.js +93 -0
- package/references/front-demo/public/favicon.ico +0 -0
- package/references/front-demo/src/App.vue +117 -0
- package/references/front-demo/src/api/app.ts +316 -0
- package/references/front-demo/src/api/attachment.ts +30 -0
- package/references/front-demo/src/api/base-exception/index.ts +87 -0
- package/references/front-demo/src/api/collect/index.ts +37 -0
- package/references/front-demo/src/api/comment/index.ts +44 -0
- package/references/front-demo/src/api/dashboard/index.ts +83 -0
- package/references/front-demo/src/api/dataImport.ts +97 -0
- package/references/front-demo/src/api/dingding/index.ts +43 -0
- package/references/front-demo/src/api/export.ts +25 -0
- package/references/front-demo/src/api/forecast/forecast-order.ts +42 -0
- package/references/front-demo/src/api/forecast/forecastChangeOrder.ts +54 -0
- package/references/front-demo/src/api/forecast/forecastConfig.ts +30 -0
- package/references/front-demo/src/api/forecast/forecastOrder.ts +78 -0
- package/references/front-demo/src/api/home/index.ts +78 -0
- package/references/front-demo/src/api/letters/index.ts +93 -0
- package/references/front-demo/src/api/login.ts +140 -0
- package/references/front-demo/src/api/mdmCustomer/index.ts +77 -0
- package/references/front-demo/src/api/menu/index.ts +79 -0
- package/references/front-demo/src/api/multi-login/index.ts +36 -0
- package/references/front-demo/src/api/personalInformation/index.ts +9 -0
- package/references/front-demo/src/api/portal/index.ts +95 -0
- package/references/front-demo/src/api/practice/index.ts +32 -0
- package/references/front-demo/src/api/product-master-data/__tests__/product.spec.ts +114 -0
- package/references/front-demo/src/api/product-master-data/product.ts +158 -0
- package/references/front-demo/src/api/reset-password/index.ts +16 -0
- package/references/front-demo/src/api/system-manage/dataImport/index.ts +87 -0
- package/references/front-demo/src/api/system-manage/menu/index.ts +34 -0
- package/references/front-demo/src/api/system-manage/reverse-authorization/index.ts +18 -0
- package/references/front-demo/src/api/testMenu/demo1/index.ts +14 -0
- package/references/front-demo/src/api/testMenu/demo2/index.ts +0 -0
- package/references/front-demo/src/api/testMenu/leaveApplication/index.ts +53 -0
- package/references/front-demo/src/api/testMenu/testDemo/index.ts +66 -0
- package/references/front-demo/src/api/update/index.ts +43 -0
- package/references/front-demo/src/api/worktable/agenda.ts +19 -0
- package/references/front-demo/src/api/worktable/approved.ts +32 -0
- package/references/front-demo/src/api/worktable/entrusted.ts +92 -0
- package/references/front-demo/src/api/worktable/myProcess.ts +48 -0
- package/references/front-demo/src/api/worktable/startTask.ts +56 -0
- package/references/front-demo/src/api/worktable/tobeRead.ts +28 -0
- package/references/front-demo/src/api/wx-work/index.ts +43 -0
- package/references/front-demo/src/assets/images/404.png +0 -0
- package/references/front-demo/src/assets/images/404_cloud.png +0 -0
- package/references/front-demo/src/assets/images/compact_layout.png +0 -0
- package/references/front-demo/src/assets/images/dingding.png +0 -0
- package/references/front-demo/src/assets/images/feishu.png +0 -0
- package/references/front-demo/src/assets/images/hover.png +0 -0
- package/references/front-demo/src/assets/images/login_background.jpg +0 -0
- package/references/front-demo/src/assets/images/login_banner.jpg +0 -0
- package/references/front-demo/src/assets/images/logo.png +0 -0
- package/references/front-demo/src/assets/images/noData.png +0 -0
- package/references/front-demo/src/assets/images/no_data.png +0 -0
- package/references/front-demo/src/assets/images/normal_layout.png +0 -0
- package/references/front-demo/src/assets/images/qiyeweixin.png +0 -0
- package/references/front-demo/src/assets/images/sider-open.png +0 -0
- package/references/front-demo/src/assets/images/vertical.png +0 -0
- package/references/front-demo/src/assets/png/pass.png +0 -0
- package/references/front-demo/src/components/ActionButtons.vue +193 -0
- package/references/front-demo/src/components/GsIcon/index.ts +7 -0
- package/references/front-demo/src/components/GsIcon/index.vue +47 -0
- package/references/front-demo/src/components/GsIconDialog/icons.ts +2167 -0
- package/references/front-demo/src/components/GsIconDialog/index.ts +7 -0
- package/references/front-demo/src/components/GsIconDialog/index.vue +856 -0
- package/references/front-demo/src/components/GsUpload/GsOverloadText.vue +68 -0
- package/references/front-demo/src/components/GsUpload/attachmentList.vue +241 -0
- package/references/front-demo/src/components/GsUpload/copper.vue +117 -0
- package/references/front-demo/src/components/GsUpload/imgUpload.vue +382 -0
- package/references/front-demo/src/components/GsUpload/index.vue +468 -0
- package/references/front-demo/src/components/GsUpload/preview.vue +44 -0
- package/references/front-demo/src/components/GsUpload/utils.ts +151 -0
- package/references/front-demo/src/components/StatusTag.vue +110 -0
- package/references/front-demo/src/components/SvgIcon/index.ts +7 -0
- package/references/front-demo/src/components/SvgIcon/index.vue +39 -0
- package/references/front-demo/src/components/UploadImg/index.ts +7 -0
- package/references/front-demo/src/components/UploadImg/index.vue +292 -0
- package/references/front-demo/src/components/global-register.ts +25 -0
- package/references/front-demo/src/components/utils/index.ts +12 -0
- package/references/front-demo/src/config/index.js +64 -0
- package/references/front-demo/src/core/initMain.ts +97 -0
- package/references/front-demo/src/hooks/useApsSchedule.ts +79 -0
- package/references/front-demo/src/hooks/useForecastOrderForm.ts +139 -0
- package/references/front-demo/src/hooks/usePagination.ts +40 -0
- package/references/front-demo/src/hooks/useRoleBasedVisibility.ts +35 -0
- package/references/front-demo/src/icons/index.ts +6 -0
- package/references/front-demo/src/icons/svg/AssessmentInfo.svg +1 -0
- package/references/front-demo/src/icons/svg/BasicConfig.svg +1 -0
- package/references/front-demo/src/icons/svg/DataEase.svg +86 -0
- package/references/front-demo/src/icons/svg/PDF.svg +1 -0
- package/references/front-demo/src/icons/svg/account_box.svg +5 -0
- package/references/front-demo/src/icons/svg/add.svg +1 -0
- package/references/front-demo/src/icons/svg/alert.svg +8 -0
- package/references/front-demo/src/icons/svg/alertlist.svg +18 -0
- package/references/front-demo/src/icons/svg/all-msg.svg +1 -0
- package/references/front-demo/src/icons/svg/analysis.svg +1 -0
- package/references/front-demo/src/icons/svg/app.svg +1 -0
- package/references/front-demo/src/icons/svg/assPersonnel.svg +1 -0
- package/references/front-demo/src/icons/svg/assessment.svg +1 -0
- package/references/front-demo/src/icons/svg/bar-horizontal.svg +1 -0
- package/references/front-demo/src/icons/svg/bar-stack-horizontal.svg +1 -0
- package/references/front-demo/src/icons/svg/bar-stack.svg +1 -0
- package/references/front-demo/src/icons/svg/bar.svg +1 -0
- package/references/front-demo/src/icons/svg/basicalgorithm.svg +1 -0
- package/references/front-demo/src/icons/svg/battery.svg +1 -0
- package/references/front-demo/src/icons/svg/bbgl.svg +1 -0
- package/references/front-demo/src/icons/svg/bell.svg +5 -0
- package/references/front-demo/src/icons/svg/bfcx.svg +1 -0
- package/references/front-demo/src/icons/svg/bjqd.svg +1 -0
- package/references/front-demo/src/icons/svg/bjxhtj.svg +1 -0
- package/references/front-demo/src/icons/svg/bjxhxq.svg +1 -0
- package/references/front-demo/src/icons/svg/bmll.svg +1 -0
- package/references/front-demo/src/icons/svg/bmtl.svg +1 -0
- package/references/front-demo/src/icons/svg/bqcj.svg +1 -0
- package/references/front-demo/src/icons/svg/bqmbgl.svg +1 -0
- package/references/front-demo/src/icons/svg/buddle-map.svg +1 -0
- package/references/front-demo/src/icons/svg/bug.svg +1 -0
- package/references/front-demo/src/icons/svg/bygd.svg +1 -0
- package/references/front-demo/src/icons/svg/bz.svg +1 -0
- package/references/front-demo/src/icons/svg/bzgl.svg +1 -0
- package/references/front-demo/src/icons/svg/characteristics.svg +1 -0
- package/references/front-demo/src/icons/svg/chart-mix.svg +1 -0
- package/references/front-demo/src/icons/svg/checkbox-checked.svg +5 -0
- package/references/front-demo/src/icons/svg/checkimage.svg +1 -0
- package/references/front-demo/src/icons/svg/ck.svg +1 -0
- package/references/front-demo/src/icons/svg/classifymark.svg +1 -0
- package/references/front-demo/src/icons/svg/closeEyes.svg +15 -0
- package/references/front-demo/src/icons/svg/club.svg +1 -0
- package/references/front-demo/src/icons/svg/collector.svg +1 -0
- package/references/front-demo/src/icons/svg/collectormanage.svg +1 -0
- package/references/front-demo/src/icons/svg/crkdcx.svg +1 -0
- package/references/front-demo/src/icons/svg/dashboard-collector.svg +38 -0
- package/references/front-demo/src/icons/svg/dashboard-device.svg +40 -0
- package/references/front-demo/src/icons/svg/dashboard-gateway.svg +38 -0
- package/references/front-demo/src/icons/svg/dashboard-warning.svg +40 -0
- package/references/front-demo/src/icons/svg/dashboard.svg +1 -0
- package/references/front-demo/src/icons/svg/database.svg +1 -0
- package/references/front-demo/src/icons/svg/dataset-task.svg +1 -0
- package/references/front-demo/src/icons/svg/datasource.svg +1 -0
- package/references/front-demo/src/icons/svg/db.svg +1 -0
- package/references/front-demo/src/icons/svg/ddgl.svg +1 -0
- package/references/front-demo/src/icons/svg/ddycjk.svg +1 -0
- package/references/front-demo/src/icons/svg/default.svg +1 -0
- package/references/front-demo/src/icons/svg/definition.svg +1 -0
- package/references/front-demo/src/icons/svg/depassessment.svg +1 -0
- package/references/front-demo/src/icons/svg/dept.svg +1 -0
- package/references/front-demo/src/icons/svg/device.svg +1 -0
- package/references/front-demo/src/icons/svg/devicebig.svg +1 -0
- package/references/front-demo/src/icons/svg/devicegroup.svg +1 -0
- package/references/front-demo/src/icons/svg/devicelist.svg +1 -0
- package/references/front-demo/src/icons/svg/devicemanage.svg +1 -0
- package/references/front-demo/src/icons/svg/deviceparam.svg +1 -0
- package/references/front-demo/src/icons/svg/devicetype.svg +1 -0
- package/references/front-demo/src/icons/svg/diagnose.svg +1 -0
- package/references/front-demo/src/icons/svg/diagnoseresult.svg +1 -0
- package/references/front-demo/src/icons/svg/distribution.svg +1 -0
- package/references/front-demo/src/icons/svg/doc.svg +1 -0
- package/references/front-demo/src/icons/svg/docs.svg +1 -0
- package/references/front-demo/src/icons/svg/dqby.svg +1 -0
- package/references/front-demo/src/icons/svg/dqbydb.svg +1 -0
- package/references/front-demo/src/icons/svg/dqbygc.svg +1 -0
- package/references/front-demo/src/icons/svg/dqbygd.svg +1 -0
- package/references/front-demo/src/icons/svg/dqbyjh.svg +1 -0
- package/references/front-demo/src/icons/svg/ds-api.svg +1 -0
- package/references/front-demo/src/icons/svg/ds-custom.svg +1 -0
- package/references/front-demo/src/icons/svg/ds-db.svg +1 -0
- package/references/front-demo/src/icons/svg/ds-excel.svg +1 -0
- package/references/front-demo/src/icons/svg/ds-sql.svg +1 -0
- package/references/front-demo/src/icons/svg/ds-union.svg +1 -0
- package/references/front-demo/src/icons/svg/dxjdb.svg +1 -0
- package/references/front-demo/src/icons/svg/dxjgc.svg +1 -0
- package/references/front-demo/src/icons/svg/dxjgd.svg +1 -0
- package/references/front-demo/src/icons/svg/dxjjh.svg +1 -0
- package/references/front-demo/src/icons/svg/dy.svg +1 -0
- package/references/front-demo/src/icons/svg/earth.svg +5 -0
- package/references/front-demo/src/icons/svg/echart-fullscreen.svg +1 -0
- package/references/front-demo/src/icons/svg/echart-nomalscreen.svg +1 -0
- package/references/front-demo/src/icons/svg/edit.svg +1 -0
- package/references/front-demo/src/icons/svg/email-task.svg +1 -0
- package/references/front-demo/src/icons/svg/envelop.svg +5 -0
- package/references/front-demo/src/icons/svg/equalizer.svg +5 -0
- package/references/front-demo/src/icons/svg/example.svg +1 -0
- package/references/front-demo/src/icons/svg/exclamationmark.svg +1 -0
- package/references/front-demo/src/icons/svg/exclamationmark2.svg +1 -0
- package/references/front-demo/src/icons/svg/exit-fullscreen.svg +1 -0
- package/references/front-demo/src/icons/svg/eye-open.svg +1 -0
- package/references/front-demo/src/icons/svg/eye.svg +1 -0
- package/references/front-demo/src/icons/svg/fav.svg +1 -0
- package/references/front-demo/src/icons/svg/field_location.svg +1 -0
- package/references/front-demo/src/icons/svg/field_text.svg +1 -0
- package/references/front-demo/src/icons/svg/field_time.svg +1 -0
- package/references/front-demo/src/icons/svg/field_value.svg +1 -0
- package/references/front-demo/src/icons/svg/folder.svg +1 -0
- package/references/front-demo/src/icons/svg/form.svg +1 -0
- package/references/front-demo/src/icons/svg/fullscreen.svg +1 -0
- package/references/front-demo/src/icons/svg/funnel.svg +1 -0
- package/references/front-demo/src/icons/svg/gateway.svg +1 -0
- package/references/front-demo/src/icons/svg/gatewaymanage.svg +16 -0
- package/references/front-demo/src/icons/svg/gauge.svg +1 -0
- package/references/front-demo/src/icons/svg/gdgl.svg +1 -0
- package/references/front-demo/src/icons/svg/gdll.svg +1 -0
- package/references/front-demo/src/icons/svg/gdtl.svg +1 -0
- package/references/front-demo/src/icons/svg/gdwcqk.svg +1 -0
- package/references/front-demo/src/icons/svg/gdwcxq.svg +1 -0
- package/references/front-demo/src/icons/svg/gnwz.svg +1 -0
- package/references/front-demo/src/icons/svg/gs-add.svg +14 -0
- package/references/front-demo/src/icons/svg/gs-change.svg +18 -0
- package/references/front-demo/src/icons/svg/gs-choose-icon.svg +23 -0
- package/references/front-demo/src/icons/svg/gs-close.svg +15 -0
- package/references/front-demo/src/icons/svg/gs-delete.svg +19 -0
- package/references/front-demo/src/icons/svg/gs-down.svg +12 -0
- package/references/front-demo/src/icons/svg/gs-edit.svg +23 -0
- package/references/front-demo/src/icons/svg/gs-edit2.svg +18 -0
- package/references/front-demo/src/icons/svg/gs-page.svg +14 -0
- package/references/front-demo/src/icons/svg/gs-resize.svg +12 -0
- package/references/front-demo/src/icons/svg/gs-select.svg +15 -0
- package/references/front-demo/src/icons/svg/gzbx.svg +1 -0
- package/references/front-demo/src/icons/svg/gzgd.svg +1 -0
- package/references/front-demo/src/icons/svg/gzk.svg +1 -0
- package/references/front-demo/src/icons/svg/gzzd.svg +1 -0
- package/references/front-demo/src/icons/svg/head.svg +13 -0
- package/references/front-demo/src/icons/svg/iconfont.svg +71 -0
- package/references/front-demo/src/icons/svg/im_message.svg +1 -0
- package/references/front-demo/src/icons/svg/indexdefine.svg +1 -0
- package/references/front-demo/src/icons/svg/inner-join.svg +1 -0
- package/references/front-demo/src/icons/svg/international.svg +1 -0
- package/references/front-demo/src/icons/svg/jcsj.svg +1 -0
- package/references/front-demo/src/icons/svg/jhjxgd.svg +1 -0
- package/references/front-demo/src/icons/svg/jilu.svg +1 -0
- package/references/front-demo/src/icons/svg/jldw.svg +1 -0
- package/references/front-demo/src/icons/svg/jscsfp.svg +1 -0
- package/references/front-demo/src/icons/svg/jscswh.svg +1 -0
- package/references/front-demo/src/icons/svg/kccx.svg +1 -0
- package/references/front-demo/src/icons/svg/kcpd.svg +1 -0
- package/references/front-demo/src/icons/svg/konwledgelist.svg +1 -0
- package/references/front-demo/src/icons/svg/kucun.svg +1 -0
- package/references/front-demo/src/icons/svg/language.svg +1 -0
- package/references/front-demo/src/icons/svg/left-join.svg +1 -0
- package/references/front-demo/src/icons/svg/leftBack.svg +15 -0
- package/references/front-demo/src/icons/svg/line-stack.svg +1 -0
- package/references/front-demo/src/icons/svg/line.svg +1 -0
- package/references/front-demo/src/icons/svg/link.svg +1 -0
- package/references/front-demo/src/icons/svg/liquid.svg +1 -0
- package/references/front-demo/src/icons/svg/list.svg +5 -0
- package/references/front-demo/src/icons/svg/location2.svg +5 -0
- package/references/front-demo/src/icons/svg/lock_closed.svg +1 -0
- package/references/front-demo/src/icons/svg/lock_open.svg +1 -0
- package/references/front-demo/src/icons/svg/logo.svg +32 -0
- package/references/front-demo/src/icons/svg/map.svg +1 -0
- package/references/front-demo/src/icons/svg/map_old.svg +1 -0
- package/references/front-demo/src/icons/svg/menu.svg +1 -0
- package/references/front-demo/src/icons/svg/message.svg +1 -0
- package/references/front-demo/src/icons/svg/messaged.svg +1 -0
- package/references/front-demo/src/icons/svg/meter.svg +5 -0
- package/references/front-demo/src/icons/svg/mobile.svg +5 -0
- package/references/front-demo/src/icons/svg/model.svg +1 -0
- package/references/front-demo/src/icons/svg/money.svg +1 -0
- package/references/front-demo/src/icons/svg/more_v.svg +1 -0
- package/references/front-demo/src/icons/svg/msg-setting.svg +1 -0
- package/references/front-demo/src/icons/svg/mttr&mtbf.svg +1 -0
- package/references/front-demo/src/icons/svg/multiplemp.svg +1 -0
- package/references/front-demo/src/icons/svg/myassessment.svg +1 -0
- package/references/front-demo/src/icons/svg/nested.svg +1 -0
- package/references/front-demo/src/icons/svg/new-message.svg +5 -0
- package/references/front-demo/src/icons/svg/no-join.svg +1 -0
- package/references/front-demo/src/icons/svg/normal-fx.svg +1 -0
- package/references/front-demo/src/icons/svg/notification.svg +1 -0
- package/references/front-demo/src/icons/svg/openEyes.svg +12 -0
- package/references/front-demo/src/icons/svg/openai.svg +1 -0
- package/references/front-demo/src/icons/svg/panel.svg +1 -0
- package/references/front-demo/src/icons/svg/password.svg +1 -0
- package/references/front-demo/src/icons/svg/people.svg +1 -0
- package/references/front-demo/src/icons/svg/peoples.svg +1 -0
- package/references/front-demo/src/icons/svg/pie-rose.svg +1 -0
- package/references/front-demo/src/icons/svg/pie.svg +1 -0
- package/references/front-demo/src/icons/svg/plus.svg +5 -0
- package/references/front-demo/src/icons/svg/podcast.svg +5 -0
- package/references/front-demo/src/icons/svg/preview.svg +1 -0
- package/references/front-demo/src/icons/svg/qrcode.svg +5 -0
- package/references/front-demo/src/icons/svg/radar.svg +1 -0
- package/references/front-demo/src/icons/svg/readed-msg.svg +1 -0
- package/references/front-demo/src/icons/svg/remove.svg +1 -0
- package/references/front-demo/src/icons/svg/rhdb.svg +1 -0
- package/references/front-demo/src/icons/svg/rhgc.svg +1 -0
- package/references/front-demo/src/icons/svg/rhgd.svg +1 -0
- package/references/front-demo/src/icons/svg/right-join.svg +1 -0
- package/references/front-demo/src/icons/svg/role.svg +1 -0
- package/references/front-demo/src/icons/svg/rulelist.svg +1 -0
- package/references/front-demo/src/icons/svg/runconfig.svg +1 -0
- package/references/front-demo/src/icons/svg/sbgzlbb.svg +1 -0
- package/references/front-demo/src/icons/svg/sbqy.svg +1 -0
- package/references/front-demo/src/icons/svg/sbrhjh.svg +1 -0
- package/references/front-demo/src/icons/svg/sbwhl.svg +1 -0
- package/references/front-demo/src/icons/svg/scatter.svg +1 -0
- package/references/front-demo/src/icons/svg/scene.svg +1 -0
- package/references/front-demo/src/icons/svg/shoppingCard.svg +1 -0
- package/references/front-demo/src/icons/svg/shouqi.svg +13 -0
- package/references/front-demo/src/icons/svg/singlemp.svg +1 -0
- package/references/front-demo/src/icons/svg/size.svg +1 -0
- package/references/front-demo/src/icons/svg/slimHead.svg +12 -0
- package/references/front-demo/src/icons/svg/sort-asc.svg +1 -0
- package/references/front-demo/src/icons/svg/sort-desc.svg +1 -0
- package/references/front-demo/src/icons/svg/standard.svg +1 -0
- package/references/front-demo/src/icons/svg/star.svg +1 -0
- package/references/front-demo/src/icons/svg/stats-bars.svg +5 -0
- package/references/front-demo/src/icons/svg/suffix-obj.svg +1 -0
- package/references/front-demo/src/icons/svg/sys-tools.svg +1 -0
- package/references/front-demo/src/icons/svg/system.svg +1 -0
- package/references/front-demo/src/icons/svg/table-info.svg +1 -0
- package/references/front-demo/src/icons/svg/table-normal.svg +1 -0
- package/references/front-demo/src/icons/svg/table-pivot.svg +1 -0
- package/references/front-demo/src/icons/svg/table.svg +1 -0
- package/references/front-demo/src/icons/svg/taizhang.svg +1 -0
- package/references/front-demo/src/icons/svg/task.svg +1 -0
- package/references/front-demo/src/icons/svg/tenant.svg +1 -0
- package/references/front-demo/src/icons/svg/text.svg +1 -0
- package/references/front-demo/src/icons/svg/tjqq.svg +1 -0
- package/references/front-demo/src/icons/svg/tree-company.svg +1 -0
- package/references/front-demo/src/icons/svg/tree-department.svg +1 -0
- package/references/front-demo/src/icons/svg/tree-device.svg +1 -0
- package/references/front-demo/src/icons/svg/tree-organization.svg +1 -0
- package/references/front-demo/src/icons/svg/tree.svg +1 -0
- package/references/front-demo/src/icons/svg/treemap.svg +1 -0
- package/references/front-demo/src/icons/svg/undefinedata.svg +1 -0
- package/references/front-demo/src/icons/svg/unread-msg.svg +1 -0
- package/references/front-demo/src/icons/svg/user-check.svg +6 -0
- package/references/front-demo/src/icons/svg/user.svg +1 -0
- package/references/front-demo/src/icons/svg/users.svg +6 -0
- package/references/front-demo/src/icons/svg/warn-tre.svg +1 -0
- package/references/front-demo/src/icons/svg/waterfall.svg +1 -0
- package/references/front-demo/src/icons/svg/wdgzt.svg +1 -0
- package/references/front-demo/src/icons/svg/wdlc.svg +1 -0
- package/references/front-demo/src/icons/svg/web-msg.svg +1 -0
- package/references/front-demo/src/icons/svg/wlbm.svg +1 -0
- package/references/front-demo/src/icons/svg/wlfl.svg +1 -0
- package/references/front-demo/src/icons/svg/wlgl.svg +1 -0
- package/references/front-demo/src/icons/svg/word-cloud.svg +1 -0
- package/references/front-demo/src/icons/svg/wtsp.svg +1 -0
- package/references/front-demo/src/icons/svg/wxdb.svg +1 -0
- package/references/front-demo/src/icons/svg/wxgc.svg +1 -0
- package/references/front-demo/src/icons/svg/xiaoxi.svg +13 -0
- package/references/front-demo/src/icons/svg/xyldr.svg +1 -0
- package/references/front-demo/src/icons/svg/ysp.svg +1 -0
- package/references/front-demo/src/icons/svg/yxgl.svg +1 -0
- package/references/front-demo/src/icons/svg/zcfbjzttj.svg +1 -0
- package/references/front-demo/src/icons/svg/zcfl.svg +1 -0
- package/references/front-demo/src/icons/svg/zcgl.svg +1 -0
- package/references/front-demo/src/icons/svg/zclk.svg +1 -0
- package/references/front-demo/src/icons/svg/zcll.svg +1 -0
- package/references/front-demo/src/icons/svg/zclx.svg +1 -0
- package/references/front-demo/src/icons/svg/zcpd.svg +1 -0
- package/references/front-demo/src/icons/svg/zctjbb.svg +1 -0
- package/references/front-demo/src/icons/svg/zcz.svg +1 -0
- package/references/front-demo/src/icons/svg/zhankai.svg +13 -0
- package/references/front-demo/src/icons/svg/zichan.svg +1 -0
- package/references/front-demo/src/icons/svg/zxck.svg +1 -0
- package/references/front-demo/src/icons/svg/zxrk.svg +1 -0
- package/references/front-demo/src/lang/element-lang.ts +26 -0
- package/references/front-demo/src/lang/en-us.ts +146 -0
- package/references/front-demo/src/lang/hu-hu.ts +1141 -0
- package/references/front-demo/src/lang/index.ts +108 -0
- package/references/front-demo/src/lang/modules/button/en-us.ts +158 -0
- package/references/front-demo/src/lang/modules/button/zh-cn.ts +157 -0
- package/references/front-demo/src/lang/modules/button/zh-tw.ts +157 -0
- package/references/front-demo/src/lang/modules/customizeTable/en-us.ts +56 -0
- package/references/front-demo/src/lang/modules/customizeTable/zh-cn.ts +55 -0
- package/references/front-demo/src/lang/modules/customizeTable/zh-tw.ts +55 -0
- package/references/front-demo/src/lang/modules/exportData/en-us.ts +19 -0
- package/references/front-demo/src/lang/modules/exportData/zh-cn.ts +19 -0
- package/references/front-demo/src/lang/modules/exportData/zh-tw.ts +19 -0
- package/references/front-demo/src/lang/modules/exportHistroy/en-us.ts +10 -0
- package/references/front-demo/src/lang/modules/exportHistroy/zh-cn.ts +10 -0
- package/references/front-demo/src/lang/modules/exportHistroy/zh-tw.ts +10 -0
- package/references/front-demo/src/lang/modules/forecast-order/en-us.ts +412 -0
- package/references/front-demo/src/lang/modules/forecast-order/zh-cn.ts +413 -0
- package/references/front-demo/src/lang/modules/forecast-order/zh-tw.ts +410 -0
- package/references/front-demo/src/lang/modules/gsReport/en-us.ts +41 -0
- package/references/front-demo/src/lang/modules/gsReport/zh-cn.ts +41 -0
- package/references/front-demo/src/lang/modules/gsReport/zh-tw.ts +41 -0
- package/references/front-demo/src/lang/modules/gsUploadFile/en-us.ts +10 -0
- package/references/front-demo/src/lang/modules/gsUploadFile/zh-cn.ts +10 -0
- package/references/front-demo/src/lang/modules/gsUploadFile/zh-tw.ts +10 -0
- package/references/front-demo/src/lang/modules/home/en-us.ts +19 -0
- package/references/front-demo/src/lang/modules/home/zh-cn.ts +19 -0
- package/references/front-demo/src/lang/modules/home/zh-tw.ts +19 -0
- package/references/front-demo/src/lang/modules/importData/en-us.ts +42 -0
- package/references/front-demo/src/lang/modules/importData/zh-cn.ts +42 -0
- package/references/front-demo/src/lang/modules/importData/zh-tw.ts +42 -0
- package/references/front-demo/src/lang/modules/importHistroy/en-us.ts +9 -0
- package/references/front-demo/src/lang/modules/importHistroy/zh-cn.ts +9 -0
- package/references/front-demo/src/lang/modules/importHistroy/zh-tw.ts +9 -0
- package/references/front-demo/src/lang/modules/js/en-us.ts +63 -0
- package/references/front-demo/src/lang/modules/js/zh-cn.ts +60 -0
- package/references/front-demo/src/lang/modules/js/zh-tw.ts +60 -0
- package/references/front-demo/src/lang/modules/letters/en-us.ts +21 -0
- package/references/front-demo/src/lang/modules/letters/zh-cn.ts +22 -0
- package/references/front-demo/src/lang/modules/letters/zh-tw.ts +22 -0
- package/references/front-demo/src/lang/modules/login/en-us.ts +68 -0
- package/references/front-demo/src/lang/modules/login/zh-cn.ts +64 -0
- package/references/front-demo/src/lang/modules/login/zh-tw.ts +64 -0
- package/references/front-demo/src/lang/modules/mdmCustomer/en-us.ts +81 -0
- package/references/front-demo/src/lang/modules/mdmCustomer/zh-cn.ts +92 -0
- package/references/front-demo/src/lang/modules/mdmCustomer/zh-tw.ts +81 -0
- package/references/front-demo/src/lang/modules/menu/en-us.ts +429 -0
- package/references/front-demo/src/lang/modules/menu/zh-cn.ts +423 -0
- package/references/front-demo/src/lang/modules/menu/zh-tw.ts +423 -0
- package/references/front-demo/src/lang/modules/message/en-us.ts +4 -0
- package/references/front-demo/src/lang/modules/message/zh-cn.ts +4 -0
- package/references/front-demo/src/lang/modules/message/zh-tw.ts +4 -0
- package/references/front-demo/src/lang/modules/otherLang/en-us.ts +63 -0
- package/references/front-demo/src/lang/modules/otherLang/zh-cn.ts +60 -0
- package/references/front-demo/src/lang/modules/otherLang/zh-tw.ts +58 -0
- package/references/front-demo/src/lang/modules/person/en-us.ts +27 -0
- package/references/front-demo/src/lang/modules/person/zh-cn.ts +27 -0
- package/references/front-demo/src/lang/modules/person/zh-tw.ts +27 -0
- package/references/front-demo/src/lang/modules/product-master-data/en-us.ts +65 -0
- package/references/front-demo/src/lang/modules/product-master-data/zh-cn.ts +82 -0
- package/references/front-demo/src/lang/modules/product-master-data/zh-tw.ts +82 -0
- package/references/front-demo/src/lang/modules/source_data/en-us.ts +49 -0
- package/references/front-demo/src/lang/modules/source_data/zh-cn.ts +41 -0
- package/references/front-demo/src/lang/modules/source_data/zh-tw.ts +41 -0
- package/references/front-demo/src/lang/modules/theme/en-us.ts +22 -0
- package/references/front-demo/src/lang/modules/theme/zh-cn.ts +22 -0
- package/references/front-demo/src/lang/modules/theme/zh-tw.ts +23 -0
- package/references/front-demo/src/lang/modules/third/en-us.ts +10 -0
- package/references/front-demo/src/lang/modules/third/zh-cn.ts +9 -0
- package/references/front-demo/src/lang/modules/third/zh-tw.ts +9 -0
- package/references/front-demo/src/lang/modules/toast/en-us.ts +21 -0
- package/references/front-demo/src/lang/modules/toast/zh-cn.ts +21 -0
- package/references/front-demo/src/lang/modules/toast/zh-tw.ts +21 -0
- package/references/front-demo/src/lang/modules/uploadDocument/en-us.ts +6 -0
- package/references/front-demo/src/lang/modules/uploadDocument/zh-cn.ts +6 -0
- package/references/front-demo/src/lang/modules/uploadDocument/zh-tw.ts +6 -0
- package/references/front-demo/src/lang/utils.ts +20 -0
- package/references/front-demo/src/lang/vi-vn.ts +1140 -0
- package/references/front-demo/src/lang/zh-cn.ts +180 -0
- package/references/front-demo/src/lang/zh-tw.ts +147 -0
- package/references/front-demo/src/main.ts +25 -0
- package/references/front-demo/src/mock/forecast/index.ts +1 -0
- package/references/front-demo/src/mock/forecast/router.ts +824 -0
- package/references/front-demo/src/mock/forecast/seed.ts +577 -0
- package/references/front-demo/src/mock/index.ts +74 -0
- package/references/front-demo/src/mock/mdmCustomer/index.ts +1 -0
- package/references/front-demo/src/mock/mdmCustomer/router.ts +468 -0
- package/references/front-demo/src/mock/mdmCustomer/seed.ts +359 -0
- package/references/front-demo/src/mock/platform/router.ts +119 -0
- package/references/front-demo/src/mock/platform/seed.ts +145 -0
- package/references/front-demo/src/mock/storage.ts +55 -0
- package/references/front-demo/src/permission.ts +448 -0
- package/references/front-demo/src/plugins/i18n.ts +3 -0
- package/references/front-demo/src/plugins/pinia.ts +7 -0
- package/references/front-demo/src/qiankun.js +114 -0
- package/references/front-demo/src/router/index.ts +132 -0
- package/references/front-demo/src/router/modules/forecast-order.ts +68 -0
- package/references/front-demo/src/store/index.ts +43 -0
- package/references/front-demo/src/store/modules/app/actions.ts +137 -0
- package/references/front-demo/src/store/modules/app/getters.ts +16 -0
- package/references/front-demo/src/store/modules/app/index.ts +52 -0
- package/references/front-demo/src/store/modules/app/mutations.ts +108 -0
- package/references/front-demo/src/store/modules/forecast-order/__tests__/forecastOrderDetailStore.spec.ts +379 -0
- package/references/front-demo/src/store/modules/forecast-order/__tests__/forecastOrderListStore.spec.ts +297 -0
- package/references/front-demo/src/store/modules/forecast-order/changeOrderFormStore.ts +245 -0
- package/references/front-demo/src/store/modules/forecast-order/configStore.ts +157 -0
- package/references/front-demo/src/store/modules/forecast-order/forecastOrderDetailStore.ts +243 -0
- package/references/front-demo/src/store/modules/forecast-order/forecastOrderFormStore.ts +281 -0
- package/references/front-demo/src/store/modules/forecast-order/forecastOrderListStore.ts +101 -0
- package/references/front-demo/src/store/modules/forecast-order/index.ts +5 -0
- package/references/front-demo/src/store/modules/mdmCustomer/__tests__/customerStore.spec.ts +206 -0
- package/references/front-demo/src/store/modules/mdmCustomer/customerStore.ts +303 -0
- package/references/front-demo/src/store/modules/permission/actions.ts +11 -0
- package/references/front-demo/src/store/modules/permission/getters.ts +5 -0
- package/references/front-demo/src/store/modules/permission/index.ts +14 -0
- package/references/front-demo/src/store/modules/permission/mutations.ts +13 -0
- package/references/front-demo/src/store/modules/product-master-data/__tests__/productListStore.spec.ts +378 -0
- package/references/front-demo/src/store/modules/product-master-data/productListStore.ts +333 -0
- package/references/front-demo/src/store/modules/tagsView/actions.ts +87 -0
- package/references/front-demo/src/store/modules/tagsView/getters.ts +6 -0
- package/references/front-demo/src/store/modules/tagsView/index.ts +18 -0
- package/references/front-demo/src/store/modules/tagsView/mutations.ts +118 -0
- package/references/front-demo/src/store/modules/theme/actions.ts +77 -0
- package/references/front-demo/src/store/modules/theme/getters.ts +10 -0
- package/references/front-demo/src/store/modules/theme/index.ts +27 -0
- package/references/front-demo/src/store/modules/theme/mutations.ts +28 -0
- package/references/front-demo/src/store/modules/user/actions.ts +243 -0
- package/references/front-demo/src/store/modules/user/getters.ts +10 -0
- package/references/front-demo/src/store/modules/user/index.ts +44 -0
- package/references/front-demo/src/store/modules/user/mutations.ts +104 -0
- package/references/front-demo/src/store/piniaToVuex/index.ts +283 -0
- package/references/front-demo/src/stores/counter.ts +12 -0
- package/references/front-demo/src/styles/element-plus.scss +937 -0
- package/references/front-demo/src/styles/global.scss +826 -0
- package/references/front-demo/src/styles/iconfont/demo.css +539 -0
- package/references/front-demo/src/styles/iconfont/iconfont.css +68 -0
- package/references/front-demo/src/styles/iconfont/iconfont.js +63 -0
- package/references/front-demo/src/styles/iconfont/iconfont.ttf +0 -0
- package/references/front-demo/src/styles/index.scss +116 -0
- package/references/front-demo/src/styles/mixin.scss +78 -0
- package/references/front-demo/src/styles/theme/black/content-management.scss +11 -0
- package/references/front-demo/src/styles/theme/black/dynamic-report.scss +31 -0
- package/references/front-demo/src/styles/theme/black/form-design.scss +181 -0
- package/references/front-demo/src/styles/theme/black/open-api.scss +118 -0
- package/references/front-demo/src/styles/theme/black/platform.scss +57 -0
- package/references/front-demo/src/styles/theme/black/process-manage.scss +48 -0
- package/references/front-demo/src/styles/theme/black/rent-mannage.scss +8 -0
- package/references/front-demo/src/styles/theme/black/schedule.scss +45 -0
- package/references/front-demo/src/styles/theme/black/service-management.scss +14 -0
- package/references/front-demo/src/styles/theme/black/system-manage.scss +144 -0
- package/references/front-demo/src/styles/theme/black.scss +1642 -0
- package/references/front-demo/src/styles/theme/default/index.scss +1 -0
- package/references/front-demo/src/styles/theme/default/menu.scss +199 -0
- package/references/front-demo/src/styles/transition.scss +107 -0
- package/references/front-demo/src/styles/variables.scss +66 -0
- package/references/front-demo/src/types/forecast-order/api.ts +44 -0
- package/references/front-demo/src/types/forecast-order/enums.ts +122 -0
- package/references/front-demo/src/types/forecast-order/forecastChangeOrder.ts +40 -0
- package/references/front-demo/src/types/forecast-order/forecastOrder.ts +98 -0
- package/references/front-demo/src/types/forecast-order/index.ts +43 -0
- package/references/front-demo/src/types/mdmCustomer/api.ts +26 -0
- package/references/front-demo/src/types/mdmCustomer/customer.ts +75 -0
- package/references/front-demo/src/types/product-master-data/api.ts +27 -0
- package/references/front-demo/src/types/product-master-data/product.ts +58 -0
- package/references/front-demo/src/utils/ArrayExtension.ts +175 -0
- package/references/front-demo/src/utils/app-mixin.ts +50 -0
- package/references/front-demo/src/utils/areas.ts +1712 -0
- package/references/front-demo/src/utils/auth.ts +336 -0
- package/references/front-demo/src/utils/base64.ts +231 -0
- package/references/front-demo/src/utils/browser-helper.ts +39 -0
- package/references/front-demo/src/utils/bus.ts +35 -0
- package/references/front-demo/src/utils/deprecated-utils.ts +116 -0
- package/references/front-demo/src/utils/errorHandler.ts +61 -0
- package/references/front-demo/src/utils/events.ts +59 -0
- package/references/front-demo/src/utils/forecastOrderActions.ts +117 -0
- package/references/front-demo/src/utils/i18nHelper.ts +24 -0
- package/references/front-demo/src/utils/index.ts +819 -0
- package/references/front-demo/src/utils/name-auth.ts +97 -0
- package/references/front-demo/src/utils/onlyMsgBox.ts +38 -0
- package/references/front-demo/src/utils/pinyinList.ts +417 -0
- package/references/front-demo/src/utils/request-utils.ts +277 -0
- package/references/front-demo/src/utils/request.ts +146 -0
- package/references/front-demo/src/utils/routeHelper.ts +66 -0
- package/references/front-demo/src/utils/statusTagHelper.ts +55 -0
- package/references/front-demo/src/utils/storage.ts +80 -0
- package/references/front-demo/src/utils/theme.ts +192 -0
- package/references/front-demo/src/utils/toPinYin.ts +34 -0
- package/references/front-demo/src/utils/tool.ts +7103 -0
- package/references/front-demo/src/utils/utilsFn.ts +73 -0
- package/references/front-demo/src/utils/validate.ts +110 -0
- package/references/front-demo/src/utils/watermark.ts +161 -0
- package/references/front-demo/src/utils/watermarkcompact.ts +180 -0
- package/references/front-demo/src/utils/wordRender.ts +100 -0
- package/references/front-demo/src/utils/ws.ts +42 -0
- package/references/front-demo/src/views/404.vue +245 -0
- package/references/front-demo/src/views/CollectButton/demand.vue +39 -0
- package/references/front-demo/src/views/CollectButton/dialog.vue +178 -0
- package/references/front-demo/src/views/CollectButton/index.vue +306 -0
- package/references/front-demo/src/views/FlowCharts/FormDemo.vue +236 -0
- package/references/front-demo/src/views/FlowCharts/components/ListDetailButton/index.vue +36 -0
- package/references/front-demo/src/views/FlowCharts/leaveApplication.vue +56 -0
- package/references/front-demo/src/views/FlowCharts/testForm.vue +56 -0
- package/references/front-demo/src/views/Password/index.vue +148 -0
- package/references/front-demo/src/views/authorize/components/ForgetPassword.vue +309 -0
- package/references/front-demo/src/views/authorize/components/FormLogin/components/VerificationDialog.vue +297 -0
- package/references/front-demo/src/views/authorize/components/FormLogin/index.vue +649 -0
- package/references/front-demo/src/views/authorize/index.vue +149 -0
- package/references/front-demo/src/views/dynamic-form/index.vue +42 -0
- package/references/front-demo/src/views/forecast-order/ChangeOrderEdit.vue +113 -0
- package/references/front-demo/src/views/forecast-order/ForecastOrderDetail.vue +732 -0
- package/references/front-demo/src/views/forecast-order/ForecastOrderEdit.vue +179 -0
- package/references/front-demo/src/views/forecast-order/__tests__/ChangeOrderEdit.spec.ts +157 -0
- package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderDetail.spec.ts +230 -0
- package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderE2E.spec.ts +607 -0
- package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderEdit.spec.ts +283 -0
- package/references/front-demo/src/views/forecast-order/__tests__/ForecastOrderList.spec.ts +428 -0
- package/references/front-demo/src/views/forecast-order/__tests__/Selectors.spec.ts +209 -0
- package/references/front-demo/src/views/forecast-order/components/ApproveChangeDialog.vue +165 -0
- package/references/front-demo/src/views/forecast-order/components/ChangeForm.vue +235 -0
- package/references/front-demo/src/views/forecast-order/components/CustomerSelector.vue +165 -0
- package/references/front-demo/src/views/forecast-order/components/ForecastOrderForm.vue +299 -0
- package/references/front-demo/src/views/forecast-order/components/ProductSelector.vue +167 -0
- package/references/front-demo/src/views/forecast-order/components/ReplyDialog.vue +170 -0
- package/references/front-demo/src/views/forecast-order/components/StatusFlowBar.vue +156 -0
- package/references/front-demo/src/views/forecast-order/components/TransferFoDialog.vue +97 -0
- package/references/front-demo/src/views/forecast-order/config/index.vue +205 -0
- package/references/front-demo/src/views/forecast-order/index.vue +539 -0
- package/references/front-demo/src/views/home-page/WorkTable.vue +116 -0
- package/references/front-demo/src/views/home-page/index.vue +14 -0
- package/references/front-demo/src/views/layout/Frame.vue +75 -0
- package/references/front-demo/src/views/layout/Layout.vue +186 -0
- package/references/front-demo/src/views/layout/MiddleView.vue +29 -0
- package/references/front-demo/src/views/layout/components/AppMain.vue +302 -0
- package/references/front-demo/src/views/layout/components/CompactTools/index.vue +59 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/AVue.vue +34 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Gpt.vue +51 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Help.vue +52 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Locale.vue +143 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Message.vue +495 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/NavbarMenu.vue +196 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Personal.vue +308 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Portal.vue +34 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/SystemChange.vue +133 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Tablet.vue +206 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/TenantChange.vue +186 -0
- package/references/front-demo/src/views/layout/components/Navbar/components/Theme.vue +429 -0
- package/references/front-demo/src/views/layout/components/Navbar/index.vue +220 -0
- package/references/front-demo/src/views/layout/components/Sidebar/components/CustomSliderMenu.vue +267 -0
- package/references/front-demo/src/views/layout/components/Sidebar/components/FetchMenuItem.vue +45 -0
- package/references/front-demo/src/views/layout/components/Sidebar/components/MenuItem.vue +135 -0
- package/references/front-demo/src/views/layout/components/Sidebar/components/MenuSearch.vue +102 -0
- package/references/front-demo/src/views/layout/components/Sidebar/components/SubMenu.js +190 -0
- package/references/front-demo/src/views/layout/components/Sidebar/components/SubMenu.vue +125 -0
- package/references/front-demo/src/views/layout/components/Sidebar/components/ToggleSidebar.vue +51 -0
- package/references/front-demo/src/views/layout/components/Sidebar/index.vue +464 -0
- package/references/front-demo/src/views/layout/components/TagsView.vue +683 -0
- package/references/front-demo/src/views/layout/components/chatGPT/image/chatgpt.png +0 -0
- package/references/front-demo/src/views/layout/components/chatGPT/image/knowledge_IT.png +0 -0
- package/references/front-demo/src/views/layout/components/chatGPT/image/knowledge_gushen.png +0 -0
- package/references/front-demo/src/views/layout/components/chatGPT/image/pmo_background.png +0 -0
- package/references/front-demo/src/views/layout/components/chatGPT/image/smile.png +0 -0
- package/references/front-demo/src/views/layout/components/chatGPT/image/stop.svg +1 -0
- package/references/front-demo/src/views/layout/components/chatGPT/image/titleIcon.png +0 -0
- package/references/front-demo/src/views/layout/components/chatGPT/index.js +7 -0
- package/references/front-demo/src/views/layout/components/chatGPT/index.vue +517 -0
- package/references/front-demo/src/views/layout/components/chatGPT/styles/index.scss +360 -0
- package/references/front-demo/src/views/layout/components/chatGPT/utils/gpt.js +29 -0
- package/references/front-demo/src/views/layout/components/chatGPT/utils/index.js +70 -0
- package/references/front-demo/src/views/layout/components/index.js +6 -0
- package/references/front-demo/src/views/layout/mixin/ResizeHandler.js +28 -0
- package/references/front-demo/src/views/layout/utils/dynamicFormHelper.js +44 -0
- package/references/front-demo/src/views/layout/utils/scroll.js +89 -0
- package/references/front-demo/src/views/letters/config/gridConfig.js +59 -0
- package/references/front-demo/src/views/letters/index.vue +401 -0
- package/references/front-demo/src/views/login/ForgetPassword.vue +425 -0
- package/references/front-demo/src/views/login/FormLogin.vue +1222 -0
- package/references/front-demo/src/views/login/ScanLogin.vue +256 -0
- package/references/front-demo/src/views/login/index.vue +432 -0
- package/references/front-demo/src/views/mdmCustomer/__tests__/CustomerList.spec.ts +90 -0
- package/references/front-demo/src/views/mdmCustomer/components/AddressFormDialog.vue +95 -0
- package/references/front-demo/src/views/mdmCustomer/components/ConfirmDialog.vue +37 -0
- package/references/front-demo/src/views/mdmCustomer/components/CustomerDetailDrawer.vue +118 -0
- package/references/front-demo/src/views/mdmCustomer/components/CustomerFormDialog.vue +254 -0
- package/references/front-demo/src/views/mdmCustomer/index.vue +397 -0
- package/references/front-demo/src/views/person-info/components/information.vue +99 -0
- package/references/front-demo/src/views/person-info/index.vue +28 -0
- package/references/front-demo/src/views/product-master-data/__tests__/ProductFormDialog.spec.ts +246 -0
- package/references/front-demo/src/views/product-master-data/__tests__/ProductList.spec.ts +423 -0
- package/references/front-demo/src/views/product-master-data/components/ConfirmDialog.vue +69 -0
- package/references/front-demo/src/views/product-master-data/components/ProductDetailDrawer.vue +140 -0
- package/references/front-demo/src/views/product-master-data/components/ProductFormDialog.vue +198 -0
- package/references/front-demo/src/views/product-master-data/index.vue +384 -0
- package/references/front-demo/src/views/sso/login/index.vue +128 -0
- package/references/front-demo/src/views/sso/multi-login/index.vue +95 -0
- package/references/front-demo/src/views/third-login/index.vue +73 -0
- package/references/front-demo/src/views/third-view.vue +86 -0
- package/references/front-demo/tsconfig.app.json +12 -0
- package/references/front-demo/tsconfig.json +11 -0
- package/references/front-demo/tsconfig.node.json +19 -0
- package/references/front-demo/vite.config.ts +56 -0
- package/references/front-demo/vitest.config.ts +35 -0
- package/references/python-end-standard/01-Python/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +372 -0
- package/references/python-end-standard/02-/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/344/270/216/344/275/277/347/224/250/350/247/204/350/214/203.md +226 -0
- package/references/python-end-standard/03-Celery/345/274/202/346/255/245/344/273/273/345/212/241/350/247/204/350/214/203.md +237 -0
- package/references/python-end-standard/04-Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -0
- package/references/python-end-standard/index.md +12 -0
- package/references/web-ui/.editorconfig +9 -0
- package/references/web-ui/.gitattributes +1 -0
- package/references/web-ui/.prettierrc.json +6 -0
- package/references/web-ui/README.md +39 -0
- package/references/web-ui/auto-imports.d.ts +10 -0
- package/references/web-ui/components.d.ts +78 -0
- package/references/web-ui/env.d.ts +1 -0
- package/references/web-ui/eslint.config.ts +22 -0
- package/references/web-ui/index.html +22 -0
- package/references/web-ui/package.json +57 -0
- package/references/web-ui/public/apiurls.js +69 -0
- package/references/web-ui/public/config.js +93 -0
- package/references/web-ui/public/favicon.ico +0 -0
- package/references/web-ui/src/App.vue +117 -0
- package/references/web-ui/src/api/app.ts +298 -0
- package/references/web-ui/src/api/attachment.ts +30 -0
- package/references/web-ui/src/api/base-exception/index.ts +87 -0
- package/references/web-ui/src/api/collect/index.ts +37 -0
- package/references/web-ui/src/api/comment/index.ts +44 -0
- package/references/web-ui/src/api/dashboard/index.ts +83 -0
- package/references/web-ui/src/api/dataImport.ts +97 -0
- package/references/web-ui/src/api/dingding/index.ts +43 -0
- package/references/web-ui/src/api/export.ts +25 -0
- package/references/web-ui/src/api/home/index.ts +78 -0
- package/references/web-ui/src/api/iotBaseRole/index.ts +32 -0
- package/references/web-ui/src/api/iotBaseSystem/index.ts +32 -0
- package/references/web-ui/src/api/letters/index.ts +93 -0
- package/references/web-ui/src/api/login.ts +140 -0
- package/references/web-ui/src/api/menu/index.ts +79 -0
- package/references/web-ui/src/api/multi-login/index.ts +36 -0
- package/references/web-ui/src/api/personalInformation/index.ts +9 -0
- package/references/web-ui/src/api/portal/index.ts +95 -0
- package/references/web-ui/src/api/practice/index.ts +32 -0
- package/references/web-ui/src/api/reset-password/index.ts +16 -0
- package/references/web-ui/src/api/system-manage/dataImport/index.ts +87 -0
- package/references/web-ui/src/api/system-manage/menu/index.ts +34 -0
- package/references/web-ui/src/api/system-manage/reverse-authorization/index.ts +18 -0
- package/references/web-ui/src/api/testMenu/demo1/index.ts +14 -0
- package/references/web-ui/src/api/testMenu/demo2/index.ts +0 -0
- package/references/web-ui/src/api/testMenu/leaveApplication/index.ts +53 -0
- package/references/web-ui/src/api/testMenu/testDemo/index.ts +66 -0
- package/references/web-ui/src/api/update/index.ts +43 -0
- package/references/web-ui/src/api/worktable/agenda.ts +19 -0
- package/references/web-ui/src/api/worktable/approved.ts +32 -0
- package/references/web-ui/src/api/worktable/entrusted.ts +92 -0
- package/references/web-ui/src/api/worktable/myProcess.ts +48 -0
- package/references/web-ui/src/api/worktable/startTask.ts +56 -0
- package/references/web-ui/src/api/worktable/tobeRead.ts +28 -0
- package/references/web-ui/src/api/wx-work/index.ts +43 -0
- package/references/web-ui/src/assets/images/404.png +0 -0
- package/references/web-ui/src/assets/images/404_cloud.png +0 -0
- package/references/web-ui/src/assets/images/compact_layout.png +0 -0
- package/references/web-ui/src/assets/images/dingding.png +0 -0
- package/references/web-ui/src/assets/images/feishu.png +0 -0
- package/references/web-ui/src/assets/images/hover.png +0 -0
- package/references/web-ui/src/assets/images/login_background.jpg +0 -0
- package/references/web-ui/src/assets/images/login_banner.jpg +0 -0
- package/references/web-ui/src/assets/images/logo.png +0 -0
- package/references/web-ui/src/assets/images/noData.png +0 -0
- package/references/web-ui/src/assets/images/no_data.png +0 -0
- package/references/web-ui/src/assets/images/normal_layout.png +0 -0
- package/references/web-ui/src/assets/images/qiyeweixin.png +0 -0
- package/references/web-ui/src/assets/images/sider-open.png +0 -0
- package/references/web-ui/src/assets/images/vertical.png +0 -0
- package/references/web-ui/src/assets/png/pass.png +0 -0
- package/references/web-ui/src/components/GsIcon/index.ts +7 -0
- package/references/web-ui/src/components/GsIcon/index.vue +47 -0
- package/references/web-ui/src/components/GsIconDialog/icons.ts +2167 -0
- package/references/web-ui/src/components/GsIconDialog/index.ts +7 -0
- package/references/web-ui/src/components/GsIconDialog/index.vue +856 -0
- package/references/web-ui/src/components/GsUpload/GsOverloadText.vue +68 -0
- package/references/web-ui/src/components/GsUpload/attachmentList.vue +241 -0
- package/references/web-ui/src/components/GsUpload/copper.vue +117 -0
- package/references/web-ui/src/components/GsUpload/imgUpload.vue +382 -0
- package/references/web-ui/src/components/GsUpload/index.vue +468 -0
- package/references/web-ui/src/components/GsUpload/preview.vue +44 -0
- package/references/web-ui/src/components/GsUpload/utils.ts +151 -0
- package/references/web-ui/src/components/SvgIcon/index.ts +7 -0
- package/references/web-ui/src/components/SvgIcon/index.vue +39 -0
- package/references/web-ui/src/components/UploadImg/index.ts +7 -0
- package/references/web-ui/src/components/UploadImg/index.vue +292 -0
- package/references/web-ui/src/components/global-register.ts +31 -0
- package/references/web-ui/src/components/utils/index.ts +12 -0
- package/references/web-ui/src/config/index.js +64 -0
- package/references/web-ui/src/core/initMain.ts +89 -0
- package/references/web-ui/src/icons/index.ts +5 -0
- package/references/web-ui/src/icons/svg/AssessmentInfo.svg +1 -0
- package/references/web-ui/src/icons/svg/BasicConfig.svg +1 -0
- package/references/web-ui/src/icons/svg/DataEase.svg +86 -0
- package/references/web-ui/src/icons/svg/PDF.svg +1 -0
- package/references/web-ui/src/icons/svg/account_box.svg +5 -0
- package/references/web-ui/src/icons/svg/add.svg +1 -0
- package/references/web-ui/src/icons/svg/alert.svg +8 -0
- package/references/web-ui/src/icons/svg/alertlist.svg +18 -0
- package/references/web-ui/src/icons/svg/all-msg.svg +1 -0
- package/references/web-ui/src/icons/svg/analysis.svg +1 -0
- package/references/web-ui/src/icons/svg/app.svg +1 -0
- package/references/web-ui/src/icons/svg/assPersonnel.svg +1 -0
- package/references/web-ui/src/icons/svg/assessment.svg +1 -0
- package/references/web-ui/src/icons/svg/bar-horizontal.svg +1 -0
- package/references/web-ui/src/icons/svg/bar-stack-horizontal.svg +1 -0
- package/references/web-ui/src/icons/svg/bar-stack.svg +1 -0
- package/references/web-ui/src/icons/svg/bar.svg +1 -0
- package/references/web-ui/src/icons/svg/basicalgorithm.svg +1 -0
- package/references/web-ui/src/icons/svg/battery.svg +1 -0
- package/references/web-ui/src/icons/svg/bbgl.svg +1 -0
- package/references/web-ui/src/icons/svg/bell.svg +5 -0
- package/references/web-ui/src/icons/svg/bfcx.svg +1 -0
- package/references/web-ui/src/icons/svg/bjqd.svg +1 -0
- package/references/web-ui/src/icons/svg/bjxhtj.svg +1 -0
- package/references/web-ui/src/icons/svg/bjxhxq.svg +1 -0
- package/references/web-ui/src/icons/svg/bmll.svg +1 -0
- package/references/web-ui/src/icons/svg/bmtl.svg +1 -0
- package/references/web-ui/src/icons/svg/bqcj.svg +1 -0
- package/references/web-ui/src/icons/svg/bqmbgl.svg +1 -0
- package/references/web-ui/src/icons/svg/buddle-map.svg +1 -0
- package/references/web-ui/src/icons/svg/bug.svg +1 -0
- package/references/web-ui/src/icons/svg/bygd.svg +1 -0
- package/references/web-ui/src/icons/svg/bz.svg +1 -0
- package/references/web-ui/src/icons/svg/bzgl.svg +1 -0
- package/references/web-ui/src/icons/svg/characteristics.svg +1 -0
- package/references/web-ui/src/icons/svg/chart-mix.svg +1 -0
- package/references/web-ui/src/icons/svg/checkbox-checked.svg +5 -0
- package/references/web-ui/src/icons/svg/checkimage.svg +1 -0
- package/references/web-ui/src/icons/svg/ck.svg +1 -0
- package/references/web-ui/src/icons/svg/classifymark.svg +1 -0
- package/references/web-ui/src/icons/svg/closeEyes.svg +15 -0
- package/references/web-ui/src/icons/svg/club.svg +1 -0
- package/references/web-ui/src/icons/svg/collector.svg +1 -0
- package/references/web-ui/src/icons/svg/collectormanage.svg +1 -0
- package/references/web-ui/src/icons/svg/crkdcx.svg +1 -0
- package/references/web-ui/src/icons/svg/dashboard-collector.svg +38 -0
- package/references/web-ui/src/icons/svg/dashboard-device.svg +40 -0
- package/references/web-ui/src/icons/svg/dashboard-gateway.svg +38 -0
- package/references/web-ui/src/icons/svg/dashboard-warning.svg +40 -0
- package/references/web-ui/src/icons/svg/dashboard.svg +1 -0
- package/references/web-ui/src/icons/svg/database.svg +1 -0
- package/references/web-ui/src/icons/svg/dataset-task.svg +1 -0
- package/references/web-ui/src/icons/svg/datasource.svg +1 -0
- package/references/web-ui/src/icons/svg/db.svg +1 -0
- package/references/web-ui/src/icons/svg/ddgl.svg +1 -0
- package/references/web-ui/src/icons/svg/ddycjk.svg +1 -0
- package/references/web-ui/src/icons/svg/default.svg +1 -0
- package/references/web-ui/src/icons/svg/definition.svg +1 -0
- package/references/web-ui/src/icons/svg/depassessment.svg +1 -0
- package/references/web-ui/src/icons/svg/dept.svg +1 -0
- package/references/web-ui/src/icons/svg/device.svg +1 -0
- package/references/web-ui/src/icons/svg/devicebig.svg +1 -0
- package/references/web-ui/src/icons/svg/devicegroup.svg +1 -0
- package/references/web-ui/src/icons/svg/devicelist.svg +1 -0
- package/references/web-ui/src/icons/svg/devicemanage.svg +1 -0
- package/references/web-ui/src/icons/svg/deviceparam.svg +1 -0
- package/references/web-ui/src/icons/svg/devicetype.svg +1 -0
- package/references/web-ui/src/icons/svg/diagnose.svg +1 -0
- package/references/web-ui/src/icons/svg/diagnoseresult.svg +1 -0
- package/references/web-ui/src/icons/svg/distribution.svg +1 -0
- package/references/web-ui/src/icons/svg/doc.svg +1 -0
- package/references/web-ui/src/icons/svg/docs.svg +1 -0
- package/references/web-ui/src/icons/svg/dqby.svg +1 -0
- package/references/web-ui/src/icons/svg/dqbydb.svg +1 -0
- package/references/web-ui/src/icons/svg/dqbygc.svg +1 -0
- package/references/web-ui/src/icons/svg/dqbygd.svg +1 -0
- package/references/web-ui/src/icons/svg/dqbyjh.svg +1 -0
- package/references/web-ui/src/icons/svg/ds-api.svg +1 -0
- package/references/web-ui/src/icons/svg/ds-custom.svg +1 -0
- package/references/web-ui/src/icons/svg/ds-db.svg +1 -0
- package/references/web-ui/src/icons/svg/ds-excel.svg +1 -0
- package/references/web-ui/src/icons/svg/ds-sql.svg +1 -0
- package/references/web-ui/src/icons/svg/ds-union.svg +1 -0
- package/references/web-ui/src/icons/svg/dxjdb.svg +1 -0
- package/references/web-ui/src/icons/svg/dxjgc.svg +1 -0
- package/references/web-ui/src/icons/svg/dxjgd.svg +1 -0
- package/references/web-ui/src/icons/svg/dxjjh.svg +1 -0
- package/references/web-ui/src/icons/svg/dy.svg +1 -0
- package/references/web-ui/src/icons/svg/earth.svg +5 -0
- package/references/web-ui/src/icons/svg/echart-fullscreen.svg +1 -0
- package/references/web-ui/src/icons/svg/echart-nomalscreen.svg +1 -0
- package/references/web-ui/src/icons/svg/edit.svg +1 -0
- package/references/web-ui/src/icons/svg/email-task.svg +1 -0
- package/references/web-ui/src/icons/svg/envelop.svg +5 -0
- package/references/web-ui/src/icons/svg/equalizer.svg +5 -0
- package/references/web-ui/src/icons/svg/example.svg +1 -0
- package/references/web-ui/src/icons/svg/exclamationmark.svg +1 -0
- package/references/web-ui/src/icons/svg/exclamationmark2.svg +1 -0
- package/references/web-ui/src/icons/svg/exit-fullscreen.svg +1 -0
- package/references/web-ui/src/icons/svg/eye-open.svg +1 -0
- package/references/web-ui/src/icons/svg/eye.svg +1 -0
- package/references/web-ui/src/icons/svg/fav.svg +1 -0
- package/references/web-ui/src/icons/svg/field_location.svg +1 -0
- package/references/web-ui/src/icons/svg/field_text.svg +1 -0
- package/references/web-ui/src/icons/svg/field_time.svg +1 -0
- package/references/web-ui/src/icons/svg/field_value.svg +1 -0
- package/references/web-ui/src/icons/svg/folder.svg +1 -0
- package/references/web-ui/src/icons/svg/form.svg +1 -0
- package/references/web-ui/src/icons/svg/fullscreen.svg +1 -0
- package/references/web-ui/src/icons/svg/funnel.svg +1 -0
- package/references/web-ui/src/icons/svg/gateway.svg +1 -0
- package/references/web-ui/src/icons/svg/gatewaymanage.svg +16 -0
- package/references/web-ui/src/icons/svg/gauge.svg +1 -0
- package/references/web-ui/src/icons/svg/gdgl.svg +1 -0
- package/references/web-ui/src/icons/svg/gdll.svg +1 -0
- package/references/web-ui/src/icons/svg/gdtl.svg +1 -0
- package/references/web-ui/src/icons/svg/gdwcqk.svg +1 -0
- package/references/web-ui/src/icons/svg/gdwcxq.svg +1 -0
- package/references/web-ui/src/icons/svg/gnwz.svg +1 -0
- package/references/web-ui/src/icons/svg/gs-add.svg +14 -0
- package/references/web-ui/src/icons/svg/gs-change.svg +18 -0
- package/references/web-ui/src/icons/svg/gs-choose-icon.svg +23 -0
- package/references/web-ui/src/icons/svg/gs-close.svg +15 -0
- package/references/web-ui/src/icons/svg/gs-delete.svg +19 -0
- package/references/web-ui/src/icons/svg/gs-down.svg +12 -0
- package/references/web-ui/src/icons/svg/gs-edit.svg +23 -0
- package/references/web-ui/src/icons/svg/gs-edit2.svg +18 -0
- package/references/web-ui/src/icons/svg/gs-page.svg +14 -0
- package/references/web-ui/src/icons/svg/gs-resize.svg +12 -0
- package/references/web-ui/src/icons/svg/gs-select.svg +15 -0
- package/references/web-ui/src/icons/svg/gzbx.svg +1 -0
- package/references/web-ui/src/icons/svg/gzgd.svg +1 -0
- package/references/web-ui/src/icons/svg/gzk.svg +1 -0
- package/references/web-ui/src/icons/svg/gzzd.svg +1 -0
- package/references/web-ui/src/icons/svg/head.svg +13 -0
- package/references/web-ui/src/icons/svg/iconfont.svg +71 -0
- package/references/web-ui/src/icons/svg/im_message.svg +1 -0
- package/references/web-ui/src/icons/svg/indexdefine.svg +1 -0
- package/references/web-ui/src/icons/svg/inner-join.svg +1 -0
- package/references/web-ui/src/icons/svg/international.svg +1 -0
- package/references/web-ui/src/icons/svg/jcsj.svg +1 -0
- package/references/web-ui/src/icons/svg/jhjxgd.svg +1 -0
- package/references/web-ui/src/icons/svg/jilu.svg +1 -0
- package/references/web-ui/src/icons/svg/jldw.svg +1 -0
- package/references/web-ui/src/icons/svg/jscsfp.svg +1 -0
- package/references/web-ui/src/icons/svg/jscswh.svg +1 -0
- package/references/web-ui/src/icons/svg/kccx.svg +1 -0
- package/references/web-ui/src/icons/svg/kcpd.svg +1 -0
- package/references/web-ui/src/icons/svg/konwledgelist.svg +1 -0
- package/references/web-ui/src/icons/svg/kucun.svg +1 -0
- package/references/web-ui/src/icons/svg/language.svg +1 -0
- package/references/web-ui/src/icons/svg/left-join.svg +1 -0
- package/references/web-ui/src/icons/svg/leftBack.svg +15 -0
- package/references/web-ui/src/icons/svg/line-stack.svg +1 -0
- package/references/web-ui/src/icons/svg/line.svg +1 -0
- package/references/web-ui/src/icons/svg/link.svg +1 -0
- package/references/web-ui/src/icons/svg/liquid.svg +1 -0
- package/references/web-ui/src/icons/svg/list.svg +5 -0
- package/references/web-ui/src/icons/svg/location2.svg +5 -0
- package/references/web-ui/src/icons/svg/lock_closed.svg +1 -0
- package/references/web-ui/src/icons/svg/lock_open.svg +1 -0
- package/references/web-ui/src/icons/svg/logo.svg +32 -0
- package/references/web-ui/src/icons/svg/map.svg +1 -0
- package/references/web-ui/src/icons/svg/map_old.svg +1 -0
- package/references/web-ui/src/icons/svg/menu.svg +1 -0
- package/references/web-ui/src/icons/svg/message.svg +1 -0
- package/references/web-ui/src/icons/svg/messaged.svg +1 -0
- package/references/web-ui/src/icons/svg/meter.svg +5 -0
- package/references/web-ui/src/icons/svg/mobile.svg +5 -0
- package/references/web-ui/src/icons/svg/model.svg +1 -0
- package/references/web-ui/src/icons/svg/money.svg +1 -0
- package/references/web-ui/src/icons/svg/more_v.svg +1 -0
- package/references/web-ui/src/icons/svg/msg-setting.svg +1 -0
- package/references/web-ui/src/icons/svg/mttr&mtbf.svg +1 -0
- package/references/web-ui/src/icons/svg/multiplemp.svg +1 -0
- package/references/web-ui/src/icons/svg/myassessment.svg +1 -0
- package/references/web-ui/src/icons/svg/nested.svg +1 -0
- package/references/web-ui/src/icons/svg/new-message.svg +5 -0
- package/references/web-ui/src/icons/svg/no-join.svg +1 -0
- package/references/web-ui/src/icons/svg/normal-fx.svg +1 -0
- package/references/web-ui/src/icons/svg/notification.svg +1 -0
- package/references/web-ui/src/icons/svg/openEyes.svg +12 -0
- package/references/web-ui/src/icons/svg/openai.svg +1 -0
- package/references/web-ui/src/icons/svg/panel.svg +1 -0
- package/references/web-ui/src/icons/svg/password.svg +1 -0
- package/references/web-ui/src/icons/svg/people.svg +1 -0
- package/references/web-ui/src/icons/svg/peoples.svg +1 -0
- package/references/web-ui/src/icons/svg/pie-rose.svg +1 -0
- package/references/web-ui/src/icons/svg/pie.svg +1 -0
- package/references/web-ui/src/icons/svg/plus.svg +5 -0
- package/references/web-ui/src/icons/svg/podcast.svg +5 -0
- package/references/web-ui/src/icons/svg/preview.svg +1 -0
- package/references/web-ui/src/icons/svg/qrcode.svg +5 -0
- package/references/web-ui/src/icons/svg/radar.svg +1 -0
- package/references/web-ui/src/icons/svg/readed-msg.svg +1 -0
- package/references/web-ui/src/icons/svg/remove.svg +1 -0
- package/references/web-ui/src/icons/svg/rhdb.svg +1 -0
- package/references/web-ui/src/icons/svg/rhgc.svg +1 -0
- package/references/web-ui/src/icons/svg/rhgd.svg +1 -0
- package/references/web-ui/src/icons/svg/right-join.svg +1 -0
- package/references/web-ui/src/icons/svg/role.svg +1 -0
- package/references/web-ui/src/icons/svg/rulelist.svg +1 -0
- package/references/web-ui/src/icons/svg/runconfig.svg +1 -0
- package/references/web-ui/src/icons/svg/sbgzlbb.svg +1 -0
- package/references/web-ui/src/icons/svg/sbqy.svg +1 -0
- package/references/web-ui/src/icons/svg/sbrhjh.svg +1 -0
- package/references/web-ui/src/icons/svg/sbwhl.svg +1 -0
- package/references/web-ui/src/icons/svg/scatter.svg +1 -0
- package/references/web-ui/src/icons/svg/scene.svg +1 -0
- package/references/web-ui/src/icons/svg/shoppingCard.svg +1 -0
- package/references/web-ui/src/icons/svg/shouqi.svg +13 -0
- package/references/web-ui/src/icons/svg/singlemp.svg +1 -0
- package/references/web-ui/src/icons/svg/size.svg +1 -0
- package/references/web-ui/src/icons/svg/slimHead.svg +12 -0
- package/references/web-ui/src/icons/svg/sort-asc.svg +1 -0
- package/references/web-ui/src/icons/svg/sort-desc.svg +1 -0
- package/references/web-ui/src/icons/svg/standard.svg +1 -0
- package/references/web-ui/src/icons/svg/star.svg +1 -0
- package/references/web-ui/src/icons/svg/stats-bars.svg +5 -0
- package/references/web-ui/src/icons/svg/suffix-obj.svg +1 -0
- package/references/web-ui/src/icons/svg/sys-tools.svg +1 -0
- package/references/web-ui/src/icons/svg/system.svg +1 -0
- package/references/web-ui/src/icons/svg/table-info.svg +1 -0
- package/references/web-ui/src/icons/svg/table-normal.svg +1 -0
- package/references/web-ui/src/icons/svg/table-pivot.svg +1 -0
- package/references/web-ui/src/icons/svg/table.svg +1 -0
- package/references/web-ui/src/icons/svg/taizhang.svg +1 -0
- package/references/web-ui/src/icons/svg/task.svg +1 -0
- package/references/web-ui/src/icons/svg/tenant.svg +1 -0
- package/references/web-ui/src/icons/svg/text.svg +1 -0
- package/references/web-ui/src/icons/svg/tjqq.svg +1 -0
- package/references/web-ui/src/icons/svg/tree-company.svg +1 -0
- package/references/web-ui/src/icons/svg/tree-department.svg +1 -0
- package/references/web-ui/src/icons/svg/tree-device.svg +1 -0
- package/references/web-ui/src/icons/svg/tree-organization.svg +1 -0
- package/references/web-ui/src/icons/svg/tree.svg +1 -0
- package/references/web-ui/src/icons/svg/treemap.svg +1 -0
- package/references/web-ui/src/icons/svg/undefinedata.svg +1 -0
- package/references/web-ui/src/icons/svg/unread-msg.svg +1 -0
- package/references/web-ui/src/icons/svg/user-check.svg +6 -0
- package/references/web-ui/src/icons/svg/user.svg +1 -0
- package/references/web-ui/src/icons/svg/users.svg +6 -0
- package/references/web-ui/src/icons/svg/warn-tre.svg +1 -0
- package/references/web-ui/src/icons/svg/waterfall.svg +1 -0
- package/references/web-ui/src/icons/svg/wdgzt.svg +1 -0
- package/references/web-ui/src/icons/svg/wdlc.svg +1 -0
- package/references/web-ui/src/icons/svg/web-msg.svg +1 -0
- package/references/web-ui/src/icons/svg/wlbm.svg +1 -0
- package/references/web-ui/src/icons/svg/wlfl.svg +1 -0
- package/references/web-ui/src/icons/svg/wlgl.svg +1 -0
- package/references/web-ui/src/icons/svg/word-cloud.svg +1 -0
- package/references/web-ui/src/icons/svg/wtsp.svg +1 -0
- package/references/web-ui/src/icons/svg/wxdb.svg +1 -0
- package/references/web-ui/src/icons/svg/wxgc.svg +1 -0
- package/references/web-ui/src/icons/svg/xiaoxi.svg +13 -0
- package/references/web-ui/src/icons/svg/xyldr.svg +1 -0
- package/references/web-ui/src/icons/svg/ysp.svg +1 -0
- package/references/web-ui/src/icons/svg/yxgl.svg +1 -0
- package/references/web-ui/src/icons/svg/zcfbjzttj.svg +1 -0
- package/references/web-ui/src/icons/svg/zcfl.svg +1 -0
- package/references/web-ui/src/icons/svg/zcgl.svg +1 -0
- package/references/web-ui/src/icons/svg/zclk.svg +1 -0
- package/references/web-ui/src/icons/svg/zcll.svg +1 -0
- package/references/web-ui/src/icons/svg/zclx.svg +1 -0
- package/references/web-ui/src/icons/svg/zcpd.svg +1 -0
- package/references/web-ui/src/icons/svg/zctjbb.svg +1 -0
- package/references/web-ui/src/icons/svg/zcz.svg +1 -0
- package/references/web-ui/src/icons/svg/zhankai.svg +13 -0
- package/references/web-ui/src/icons/svg/zichan.svg +1 -0
- package/references/web-ui/src/icons/svg/zxck.svg +1 -0
- package/references/web-ui/src/icons/svg/zxrk.svg +1 -0
- package/references/web-ui/src/lang/element-lang.ts +26 -0
- package/references/web-ui/src/lang/en-us.ts +146 -0
- package/references/web-ui/src/lang/hu-hu.ts +1141 -0
- package/references/web-ui/src/lang/index.ts +109 -0
- package/references/web-ui/src/lang/iotBaseRole/en-us.ts +28 -0
- package/references/web-ui/src/lang/iotBaseRole/zh-cn.ts +28 -0
- package/references/web-ui/src/lang/iotBaseSystem/en-us.ts +35 -0
- package/references/web-ui/src/lang/iotBaseSystem/zh-cn.ts +35 -0
- package/references/web-ui/src/lang/modules/button/en-us.ts +158 -0
- package/references/web-ui/src/lang/modules/button/zh-cn.ts +157 -0
- package/references/web-ui/src/lang/modules/button/zh-tw.ts +157 -0
- package/references/web-ui/src/lang/modules/customizeTable/en-us.ts +56 -0
- package/references/web-ui/src/lang/modules/customizeTable/zh-cn.ts +55 -0
- package/references/web-ui/src/lang/modules/customizeTable/zh-tw.ts +55 -0
- package/references/web-ui/src/lang/modules/exportData/en-us.ts +19 -0
- package/references/web-ui/src/lang/modules/exportData/zh-cn.ts +19 -0
- package/references/web-ui/src/lang/modules/exportData/zh-tw.ts +19 -0
- package/references/web-ui/src/lang/modules/exportHistroy/en-us.ts +10 -0
- package/references/web-ui/src/lang/modules/exportHistroy/zh-cn.ts +10 -0
- package/references/web-ui/src/lang/modules/exportHistroy/zh-tw.ts +10 -0
- package/references/web-ui/src/lang/modules/gsReport/en-us.ts +41 -0
- package/references/web-ui/src/lang/modules/gsReport/zh-cn.ts +41 -0
- package/references/web-ui/src/lang/modules/gsReport/zh-tw.ts +41 -0
- package/references/web-ui/src/lang/modules/gsUploadFile/en-us.ts +10 -0
- package/references/web-ui/src/lang/modules/gsUploadFile/zh-cn.ts +10 -0
- package/references/web-ui/src/lang/modules/gsUploadFile/zh-tw.ts +10 -0
- package/references/web-ui/src/lang/modules/home/en-us.ts +19 -0
- package/references/web-ui/src/lang/modules/home/zh-cn.ts +19 -0
- package/references/web-ui/src/lang/modules/home/zh-tw.ts +19 -0
- package/references/web-ui/src/lang/modules/importData/en-us.ts +42 -0
- package/references/web-ui/src/lang/modules/importData/zh-cn.ts +42 -0
- package/references/web-ui/src/lang/modules/importData/zh-tw.ts +42 -0
- package/references/web-ui/src/lang/modules/importHistroy/en-us.ts +9 -0
- package/references/web-ui/src/lang/modules/importHistroy/zh-cn.ts +9 -0
- package/references/web-ui/src/lang/modules/importHistroy/zh-tw.ts +9 -0
- package/references/web-ui/src/lang/modules/js/en-us.ts +63 -0
- package/references/web-ui/src/lang/modules/js/zh-cn.ts +60 -0
- package/references/web-ui/src/lang/modules/js/zh-tw.ts +60 -0
- package/references/web-ui/src/lang/modules/letters/en-us.ts +21 -0
- package/references/web-ui/src/lang/modules/letters/zh-cn.ts +22 -0
- package/references/web-ui/src/lang/modules/letters/zh-tw.ts +22 -0
- package/references/web-ui/src/lang/modules/login/en-us.ts +68 -0
- package/references/web-ui/src/lang/modules/login/zh-cn.ts +64 -0
- package/references/web-ui/src/lang/modules/login/zh-tw.ts +64 -0
- package/references/web-ui/src/lang/modules/menu/en-us.ts +429 -0
- package/references/web-ui/src/lang/modules/menu/zh-cn.ts +423 -0
- package/references/web-ui/src/lang/modules/menu/zh-tw.ts +423 -0
- package/references/web-ui/src/lang/modules/message/en-us.ts +4 -0
- package/references/web-ui/src/lang/modules/message/zh-cn.ts +4 -0
- package/references/web-ui/src/lang/modules/message/zh-tw.ts +4 -0
- package/references/web-ui/src/lang/modules/otherLang/en-us.ts +63 -0
- package/references/web-ui/src/lang/modules/otherLang/zh-cn.ts +60 -0
- package/references/web-ui/src/lang/modules/otherLang/zh-tw.ts +58 -0
- package/references/web-ui/src/lang/modules/person/en-us.ts +27 -0
- package/references/web-ui/src/lang/modules/person/zh-cn.ts +27 -0
- package/references/web-ui/src/lang/modules/person/zh-tw.ts +27 -0
- package/references/web-ui/src/lang/modules/source_data/en-us.ts +49 -0
- package/references/web-ui/src/lang/modules/source_data/zh-cn.ts +41 -0
- package/references/web-ui/src/lang/modules/source_data/zh-tw.ts +41 -0
- package/references/web-ui/src/lang/modules/theme/en-us.ts +22 -0
- package/references/web-ui/src/lang/modules/theme/zh-cn.ts +22 -0
- package/references/web-ui/src/lang/modules/theme/zh-tw.ts +23 -0
- package/references/web-ui/src/lang/modules/third/en-us.ts +10 -0
- package/references/web-ui/src/lang/modules/third/zh-cn.ts +9 -0
- package/references/web-ui/src/lang/modules/third/zh-tw.ts +9 -0
- package/references/web-ui/src/lang/modules/toast/en-us.ts +21 -0
- package/references/web-ui/src/lang/modules/toast/zh-cn.ts +21 -0
- package/references/web-ui/src/lang/modules/toast/zh-tw.ts +21 -0
- package/references/web-ui/src/lang/modules/uploadDocument/en-us.ts +6 -0
- package/references/web-ui/src/lang/modules/uploadDocument/zh-cn.ts +6 -0
- package/references/web-ui/src/lang/modules/uploadDocument/zh-tw.ts +6 -0
- package/references/web-ui/src/lang/utils.ts +20 -0
- package/references/web-ui/src/lang/vi-vn.ts +1140 -0
- package/references/web-ui/src/lang/zh-cn.ts +180 -0
- package/references/web-ui/src/lang/zh-tw.ts +147 -0
- package/references/web-ui/src/main.ts +25 -0
- package/references/web-ui/src/permission.ts +407 -0
- package/references/web-ui/src/plugins/i18n.ts +3 -0
- package/references/web-ui/src/plugins/pinia.ts +7 -0
- package/references/web-ui/src/qiankun.js +114 -0
- package/references/web-ui/src/router/index.ts +119 -0
- package/references/web-ui/src/store/index.ts +43 -0
- package/references/web-ui/src/store/modules/app/actions.ts +137 -0
- package/references/web-ui/src/store/modules/app/getters.ts +17 -0
- package/references/web-ui/src/store/modules/app/index.ts +52 -0
- package/references/web-ui/src/store/modules/app/mutations.ts +108 -0
- package/references/web-ui/src/store/modules/permission/actions.ts +11 -0
- package/references/web-ui/src/store/modules/permission/getters.ts +5 -0
- package/references/web-ui/src/store/modules/permission/index.ts +14 -0
- package/references/web-ui/src/store/modules/permission/mutations.ts +13 -0
- package/references/web-ui/src/store/modules/tagsView/actions.ts +87 -0
- package/references/web-ui/src/store/modules/tagsView/getters.ts +6 -0
- package/references/web-ui/src/store/modules/tagsView/index.ts +18 -0
- package/references/web-ui/src/store/modules/tagsView/mutations.ts +118 -0
- package/references/web-ui/src/store/modules/theme/actions.ts +38 -0
- package/references/web-ui/src/store/modules/theme/getters.ts +10 -0
- package/references/web-ui/src/store/modules/theme/index.ts +26 -0
- package/references/web-ui/src/store/modules/theme/mutations.ts +28 -0
- package/references/web-ui/src/store/modules/user/actions.ts +243 -0
- package/references/web-ui/src/store/modules/user/getters.ts +10 -0
- package/references/web-ui/src/store/modules/user/index.ts +44 -0
- package/references/web-ui/src/store/modules/user/mutations.ts +104 -0
- package/references/web-ui/src/store/piniaToVuex/index.ts +179 -0
- package/references/web-ui/src/stores/counter.ts +12 -0
- package/references/web-ui/src/styles/element-plus.scss +937 -0
- package/references/web-ui/src/styles/global.scss +826 -0
- package/references/web-ui/src/styles/iconfont/demo.css +539 -0
- package/references/web-ui/src/styles/iconfont/iconfont.css +68 -0
- package/references/web-ui/src/styles/iconfont/iconfont.js +63 -0
- package/references/web-ui/src/styles/iconfont/iconfont.ttf +0 -0
- package/references/web-ui/src/styles/index.scss +116 -0
- package/references/web-ui/src/styles/mixin.scss +78 -0
- package/references/web-ui/src/styles/theme/black/content-management.scss +11 -0
- package/references/web-ui/src/styles/theme/black/dynamic-report.scss +31 -0
- package/references/web-ui/src/styles/theme/black/form-design.scss +181 -0
- package/references/web-ui/src/styles/theme/black/open-api.scss +118 -0
- package/references/web-ui/src/styles/theme/black/platform.scss +57 -0
- package/references/web-ui/src/styles/theme/black/process-manage.scss +48 -0
- package/references/web-ui/src/styles/theme/black/rent-mannage.scss +8 -0
- package/references/web-ui/src/styles/theme/black/schedule.scss +45 -0
- package/references/web-ui/src/styles/theme/black/service-management.scss +14 -0
- package/references/web-ui/src/styles/theme/black/system-manage.scss +144 -0
- package/references/web-ui/src/styles/theme/black.scss +1642 -0
- package/references/web-ui/src/styles/theme/default/index.scss +1 -0
- package/references/web-ui/src/styles/theme/default/menu.scss +199 -0
- package/references/web-ui/src/styles/transition.scss +107 -0
- package/references/web-ui/src/styles/variables.scss +66 -0
- package/references/web-ui/src/utils/ArrayExtension.ts +175 -0
- package/references/web-ui/src/utils/app-mixin.ts +50 -0
- package/references/web-ui/src/utils/areas.ts +1712 -0
- package/references/web-ui/src/utils/auth.ts +329 -0
- package/references/web-ui/src/utils/base64.ts +231 -0
- package/references/web-ui/src/utils/browser-helper.ts +39 -0
- package/references/web-ui/src/utils/bus.ts +35 -0
- package/references/web-ui/src/utils/deprecated-utils.ts +116 -0
- package/references/web-ui/src/utils/events.ts +59 -0
- package/references/web-ui/src/utils/index.ts +790 -0
- package/references/web-ui/src/utils/name-auth.ts +97 -0
- package/references/web-ui/src/utils/onlyMsgBox.ts +38 -0
- package/references/web-ui/src/utils/pinyinList.ts +417 -0
- package/references/web-ui/src/utils/request-utils.ts +277 -0
- package/references/web-ui/src/utils/request.ts +100 -0
- package/references/web-ui/src/utils/routeHelper.ts +66 -0
- package/references/web-ui/src/utils/storage.ts +80 -0
- package/references/web-ui/src/utils/theme.ts +192 -0
- package/references/web-ui/src/utils/toPinYin.ts +34 -0
- package/references/web-ui/src/utils/tool.ts +7103 -0
- package/references/web-ui/src/utils/utilsFn.ts +73 -0
- package/references/web-ui/src/utils/validate.ts +110 -0
- package/references/web-ui/src/utils/watermark.ts +161 -0
- package/references/web-ui/src/utils/watermarkcompact.ts +180 -0
- package/references/web-ui/src/utils/wordRender.ts +100 -0
- package/references/web-ui/src/utils/ws.ts +42 -0
- package/references/web-ui/src/views/404.vue +245 -0
- package/references/web-ui/src/views/CollectButton/demand.vue +39 -0
- package/references/web-ui/src/views/CollectButton/dialog.vue +178 -0
- package/references/web-ui/src/views/CollectButton/index.vue +306 -0
- package/references/web-ui/src/views/FlowCharts/FormDemo.vue +236 -0
- package/references/web-ui/src/views/FlowCharts/components/ListDetailButton/index.vue +36 -0
- package/references/web-ui/src/views/FlowCharts/leaveApplication.vue +56 -0
- package/references/web-ui/src/views/FlowCharts/testForm.vue +56 -0
- package/references/web-ui/src/views/Password/index.vue +147 -0
- package/references/web-ui/src/views/authorize/components/ForgetPassword.vue +309 -0
- package/references/web-ui/src/views/authorize/components/FormLogin/components/VerificationDialog.vue +297 -0
- package/references/web-ui/src/views/authorize/components/FormLogin/index.vue +649 -0
- package/references/web-ui/src/views/authorize/index.vue +149 -0
- package/references/web-ui/src/views/dynamic-form/index.vue +42 -0
- package/references/web-ui/src/views/home-page/WorkTable.vue +116 -0
- package/references/web-ui/src/views/home-page/index.vue +14 -0
- package/references/web-ui/src/views/iotBaseRole/AddDrawer.vue +320 -0
- package/references/web-ui/src/views/iotBaseRole/EditTable.vue +373 -0
- package/references/web-ui/src/views/iotBaseRole/index.vue +313 -0
- package/references/web-ui/src/views/iotBaseSystem/AddDrawer.vue +305 -0
- package/references/web-ui/src/views/iotBaseSystem/index.vue +385 -0
- package/references/web-ui/src/views/layout/Frame.vue +75 -0
- package/references/web-ui/src/views/layout/Layout.vue +186 -0
- package/references/web-ui/src/views/layout/MiddleView.vue +29 -0
- package/references/web-ui/src/views/layout/components/AppMain.vue +302 -0
- package/references/web-ui/src/views/layout/components/CompactTools/index.vue +59 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/AVue.vue +34 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Gpt.vue +49 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Help.vue +52 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Locale.vue +99 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Message.vue +495 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/NavbarMenu.vue +196 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Personal.vue +308 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Portal.vue +34 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/SystemChange.vue +133 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Tablet.vue +206 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/TenantChange.vue +186 -0
- package/references/web-ui/src/views/layout/components/Navbar/components/Theme.vue +367 -0
- package/references/web-ui/src/views/layout/components/Navbar/index.vue +181 -0
- package/references/web-ui/src/views/layout/components/Sidebar/components/CustomSliderMenu.vue +267 -0
- package/references/web-ui/src/views/layout/components/Sidebar/components/FetchMenuItem.vue +45 -0
- package/references/web-ui/src/views/layout/components/Sidebar/components/MenuItem.vue +135 -0
- package/references/web-ui/src/views/layout/components/Sidebar/components/MenuSearch.vue +74 -0
- package/references/web-ui/src/views/layout/components/Sidebar/components/SubMenu.js +190 -0
- package/references/web-ui/src/views/layout/components/Sidebar/components/SubMenu.vue +125 -0
- package/references/web-ui/src/views/layout/components/Sidebar/components/ToggleSidebar.vue +51 -0
- package/references/web-ui/src/views/layout/components/Sidebar/index.vue +464 -0
- package/references/web-ui/src/views/layout/components/TagsView.vue +683 -0
- package/references/web-ui/src/views/layout/components/chatGPT/image/chatgpt.png +0 -0
- package/references/web-ui/src/views/layout/components/chatGPT/image/knowledge_IT.png +0 -0
- package/references/web-ui/src/views/layout/components/chatGPT/image/knowledge_gushen.png +0 -0
- package/references/web-ui/src/views/layout/components/chatGPT/image/pmo_background.png +0 -0
- package/references/web-ui/src/views/layout/components/chatGPT/image/smile.png +0 -0
- package/references/web-ui/src/views/layout/components/chatGPT/image/stop.svg +1 -0
- package/references/web-ui/src/views/layout/components/chatGPT/image/titleIcon.png +0 -0
- package/references/web-ui/src/views/layout/components/chatGPT/index.js +7 -0
- package/references/web-ui/src/views/layout/components/chatGPT/index.vue +517 -0
- package/references/web-ui/src/views/layout/components/chatGPT/styles/index.scss +360 -0
- package/references/web-ui/src/views/layout/components/chatGPT/utils/gpt.js +29 -0
- package/references/web-ui/src/views/layout/components/chatGPT/utils/index.js +70 -0
- package/references/web-ui/src/views/layout/components/index.js +6 -0
- package/references/web-ui/src/views/layout/mixin/ResizeHandler.js +28 -0
- package/references/web-ui/src/views/layout/utils/dynamicFormHelper.js +44 -0
- package/references/web-ui/src/views/layout/utils/scroll.js +89 -0
- package/references/web-ui/src/views/letters/config/gridConfig.js +59 -0
- package/references/web-ui/src/views/letters/index.vue +401 -0
- package/references/web-ui/src/views/login/ForgetPassword.vue +425 -0
- package/references/web-ui/src/views/login/FormLogin.vue +1219 -0
- package/references/web-ui/src/views/login/ScanLogin.vue +256 -0
- package/references/web-ui/src/views/login/index.vue +432 -0
- package/references/web-ui/src/views/person-info/components/information.vue +99 -0
- package/references/web-ui/src/views/person-info/index.vue +28 -0
- package/references/web-ui/src/views/sso/login/index.vue +128 -0
- package/references/web-ui/src/views/sso/multi-login/index.vue +95 -0
- package/references/web-ui/src/views/third-login/index.vue +73 -0
- package/references/web-ui/src/views/third-view.vue +86 -0
- package/references/web-ui/tsconfig.app.json +12 -0
- package/references/web-ui/tsconfig.json +11 -0
- package/references/web-ui/tsconfig.node.json +19 -0
- package/references/web-ui/vite.config.ts +42 -0
- package/references/yudaocloud-end-standard/04-Java/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +1095 -0
- package/references/yudaocloud-end-standard/index.md +12 -0
- package/scripts/postinstall.js +107 -0
- package/scripts/sync-version.js +109 -0
- package/skills/.claude/.wiki-update-queue +26 -0
- package/skills/adspecs-adversarial-review/SKILL.md +486 -0
- package/skills/adspecs-analyze/SKILL.md +573 -0
- package/skills/adspecs-architecture-planning/SKILL.md +875 -0
- package/skills/adspecs-biz-blueprint/SKILL.md +554 -0
- package/skills/adspecs-clarify/SKILL.md +299 -0
- package/skills/adspecs-export-word/SKILL.md +498 -0
- package/skills/adspecs-export-word/references/md-to-docx.js +862 -0
- package/skills/adspecs-export-word/references/package-lock.json +220 -0
- package/skills/adspecs-export-word/references/package.json +10 -0
- package/skills/adspecs-front-spec/SKILL.md +502 -0
- package/skills/adspecs-front-tasks/SKILL.md +611 -0
- package/skills/adspecs-git-commit/SKILL.md +53 -0
- package/skills/adspecs-new-requirement/SKILL.md +608 -0
- package/skills/adspecs-plan/SKILL.md +429 -0
- package/skills/adspecs-prd/SKILL.md +404 -0
- package/skills/adspecs-requirement-research/02-/351/234/200/346/261/202/346/235/245/346/272/220/344/270/216/351/207/207/351/233/206/350/256/260/345/275/225.md +85 -0
- package/skills/adspecs-requirement-research/SKILL.md +184 -0
- package/skills/adspecs-tasks/SKILL.md +630 -0
- package/skills/adspecs-update-status/SKILL.md +382 -0
- package/skills/adspecs-utest/SKILL.md +390 -0
- package/skills/adspecs-write-planning-report/SKILL.md +93 -0
- package/skills/adspecs-write-roadmap/SKILL.md +83 -0
- package/skills/adspecs-write-sow/SKILL.md +351 -0
- package/skills/project-init/SKILL.md +1289 -0
- package/skills/sie-front-code-review/SKILL.md +152 -0
- package/skills/wiki-update/SKILL.md +232 -0
- package/src/commands/doctor.js +197 -0
- package/src/commands/init.js +83 -0
- package/src/commands/plugin.js +145 -0
- package/src/commands/update.js +87 -0
- package/src/lib/area-scanner.js +129 -0
- package/src/lib/copier.js +104 -0
- package/src/lib/dir-utils.js +133 -0
- package/src/lib/json-merge.js +114 -0
- package/src/lib/paths-defaults.js +37 -0
- package/src/lib/prompts.js +345 -0
- package/src/lib/readme-gen.js +143 -0
- package/src/lib/report.js +327 -0
- package/src/lib/scaffolder.js +518 -0
- package/src/lib/short-name.js +36 -0
- package/src/utils.js +80 -0
|
@@ -0,0 +1,1878 @@
|
|
|
1
|
+
# 系统设计统一模板(OOA + OOD)
|
|
2
|
+
|
|
3
|
+
> **所属模块**:{{一级模块名称}}
|
|
4
|
+
> **服务名称**:{{微服务名称,来自于02-crm_system_architecture.md 二、技术架构章节}} |**端口**:3103
|
|
5
|
+
> **版本**: v1.1
|
|
6
|
+
> **创建日期**: 2026-06-12
|
|
7
|
+
> **修订日期**: 2026-06-13(§5.2 重构:Controller 代码骨架精简为方法路由 + Service 调用表;§5.3 新增 5 个标准端点的成功/错误响应 JSON 示例;§5.4 权限矩阵调整)
|
|
8
|
+
> **适用人员**: 需求分析师、系统设计师、AI助手
|
|
9
|
+
> **目的**: 基于 PRD / 原始需求,一次性完成需求分析(OOA)和系统设计(OOD),输出可直接编码的设计文档。本文件包含完整的项目约定、模板结构、填写示例和追溯关系。
|
|
10
|
+
|
|
11
|
+
### 修订记录
|
|
12
|
+
|
|
13
|
+
| 版本号 | 修订日期 | 修订人 | 修订内容 |
|
|
14
|
+
| ------ | ---------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| v1.0 | 2026-06-12 | AI | 初始版本:合并项目约定 + 两阶段导航 + 追溯关系,引用 04/05 外部文件 |
|
|
16
|
+
| v1.1 | 2026-06-13 | AI | **单阶段重构**:统一流程模板。按业务关注点组织(实体→数据→行为→接口→异常…),每个部分从分析自然过渡到设计,消除实体字段/接口/异常在 OOA 和 OOD 中的重复定义。合并前 21 个部分,合并后 13 个部分。 |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 使用说明
|
|
21
|
+
|
|
22
|
+
本模板将需求分析(OOA:"做什么")和系统设计(OOD:"怎么做")合并为**单阶段一体化流程**——按业务关注点组织,每个部分从"分析"出发、直接落地到"设计",一次完成一个完整关注点。
|
|
23
|
+
|
|
24
|
+
**使用方式**:
|
|
25
|
+
|
|
26
|
+
1. 读取 PRD 文件(`docs/20-prd/`)
|
|
27
|
+
2. 按本文结构,依次完成 §1~§13(全部必填,无对应需求时填写"无"并说明原因)
|
|
28
|
+
3. 输出文件:`{模块编号}-{模块名}_system-design.md` + `{模块编号}-{模块名}_schema.sql`,保存到 `docs/30-system-design/{crm|mom}/`
|
|
29
|
+
|
|
30
|
+
**设计原则**:
|
|
31
|
+
- 每个部分从分析直接落地到设计,不再分两个阶段来回切换
|
|
32
|
+
- 每个设计条目标注 `**来源需求**:` 引用 PRD ID,支撑全链路追溯
|
|
33
|
+
- 避免重复:同一实体字段只在 §2 定义一次,§3 直接引用;同一接口只在 §5 定义一次
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 项目约定
|
|
38
|
+
|
|
39
|
+
> 以下约定基于 `docs/40-project_conventions/end-integration/` 全部 11 份规范 + `gushen-demo/` 实际代码 + `CLAUDE.md`。
|
|
40
|
+
> **本文所有设计内容均遵循本节约定。**
|
|
41
|
+
|
|
42
|
+
### 架构概览
|
|
43
|
+
|
|
44
|
+
本项目采用 **ECP 端集成平台** Spring Cloud 微服务架构,每个业务模块由 `{port}-{service}-api` + `{port}-{service}-model` + `{port}-{service}-application` 三个子模块组成:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
{port}-{service}/ # 如 2051-demo/
|
|
48
|
+
├── {port}-{service}-api/ # Feign 接口 + DTO(契约层)
|
|
49
|
+
│ └── src/main/java/com/sie/gushen/{service}/api/
|
|
50
|
+
│ ├── client/ # @FeignClient 接口
|
|
51
|
+
│ └── dto/ # DTO(继承 ReqeustCommonDataBean,注意平台拼写)
|
|
52
|
+
├── {port}-{service}-model/ # Entity + DAO + Mapper XML + Ro(数据层)
|
|
53
|
+
│ └── src/main/java/com/sie/gushen/{service}/model/
|
|
54
|
+
│ ├── entity/ # Entity(继承 BaseEntity<Entity>)
|
|
55
|
+
│ │ └── readonly/ # Ro 只读视图对象(implements Serializable)
|
|
56
|
+
│ └── dao/ # DAO 接口 + MyBatis XML Mapper(同包路径)
|
|
57
|
+
└── {port}-{service}-application/ # Service + Controller + Config(实现层)
|
|
58
|
+
└── src/main/java/com/sie/gushen/{service}/
|
|
59
|
+
├── {Service}Application.java # 启动类(继承 CommonApplication)
|
|
60
|
+
├── api/controller/ # Controller(继承 CommonAbstractService)
|
|
61
|
+
├── model/service/ # Service 接口(II{Entity}, 双I前缀)
|
|
62
|
+
│ └── impl/ # Service 实现(继承 BaseCommonServer)
|
|
63
|
+
├── app/consume/ # Kafka Consumer
|
|
64
|
+
└── infra/
|
|
65
|
+
├── config/ # DataSource/MybatisPlus/SpringDoc 配置
|
|
66
|
+
├── constant/ # 常量
|
|
67
|
+
├── enumeration/ # 枚举
|
|
68
|
+
├── interceptor/ # 拦截器
|
|
69
|
+
└── utils/ # 工具类
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 工程结构与分层
|
|
73
|
+
|
|
74
|
+
| 约定项 | 规则 | 来源 |
|
|
75
|
+
| -------- | ------------------------------------------------------------------------------------------------ | ------------------- |
|
|
76
|
+
| 工程结构 | 三模块 Maven:`{port}-{service}-api` + `{port}-{service}-model` + `{port}-{service}-application` | 后端分层规范 §1 |
|
|
77
|
+
| 包根路径 | `com.sie.{产品线}.{服务名}` | 后端分层规范 §1 |
|
|
78
|
+
| 父 POM | `com.sie.irradiator:sie-irradiator:3.0.2` | gushen-demo/pom.xml |
|
|
79
|
+
|
|
80
|
+
### 对象与命名
|
|
81
|
+
|
|
82
|
+
| 约定项 | 规则 | 来源 |
|
|
83
|
+
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- |
|
|
84
|
+
| **Entity** | 继承 `BaseEntity<T>`,实现 `Serializable`。`@TableName` 用反引号,每字段 `@TableField` + `@Schema`。主键 `Long`,策略 `IdType.ASSIGN_ID`。**BaseEntity 已含审计字段(creationDate/createdBy 等),Entity 中禁止重复声明** | 后端分层规范 §2 |
|
|
85
|
+
| **DTO** | 继承 `ReqeustCommonDataBean`(注意平台拼写 Reqeust)。Date 字段 `@JSONField(format = "yyyy-MM-dd HH:mm:ss")`。校验分组定义为 DTO 内部接口 `save{Entity}` / `update{Entity}`。校验 message 格式 `{port}_{table_snake}_{三位序号}` | 后端分层规范 §3 |
|
|
86
|
+
| **Ro** | 简单 POJO,`implements Serializable` + `serialVersionUID`。手动声明所有字段(不继承 BaseEntity)。日期用 `@DateTimeFormat` + `@JsonFormat`。位于 `model/entity/readonly/` | 后端分层规范 §4 |
|
|
87
|
+
|
|
88
|
+
### 数据访问
|
|
89
|
+
|
|
90
|
+
| 约定项 | 规则 | 来源 |
|
|
91
|
+
| --------------- | ---------------------------------------------------------------------------------------- | ------------------ |
|
|
92
|
+
| **DAO** | 接口继承 `BaseCommonDAO_HI<Entity>`,注解 `@Component("{camel}DAO")`。XML 与接口同包同名 | 后端分层规范 §5 |
|
|
93
|
+
| **MyBatis XML** | **所有数据库操作必须使用 MyBatis XML,禁止使用 QueryWrapper / LambdaQueryWrapper** | 后端分层规范 §5 |
|
|
94
|
+
| **软删除** | 所有 SELECT 必须包含 `WHERE delete_flag = 0`。删除调用 `this.deleteById(id, true)` | 后端分层规范 §5/§7 |
|
|
95
|
+
| **resultMap** | 必须显式映射所有字段(含审计字段) | 后端分层规范 §5 |
|
|
96
|
+
| **名称字段** | LIKE 查询(`CONCAT('%', #{params.xxx}, '%')`) | 后端分层规范 §5 |
|
|
97
|
+
| **编码字段** | 精确匹配(`= #{params.xxx}`) | 后端分层规范 §5 |
|
|
98
|
+
| **时间范围** | 固定模板,直接复制 | 后端分层规范 §5 |
|
|
99
|
+
|
|
100
|
+
### 业务逻辑
|
|
101
|
+
|
|
102
|
+
| 约定项 | 规则 | 来源 |
|
|
103
|
+
| ---------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------- |
|
|
104
|
+
| **Service 接口** | 命名 `II{Entity}`(双 I 前缀),继承 `IBaseCommon<Entity>` | 后端分层规范 §6 |
|
|
105
|
+
| **Service 实现** | 注解 `@Component("{camel}Service")`,继承 `BaseCommonServer<Entity>` | 后端分层规范 §7 |
|
|
106
|
+
| **Save 转换** | **使用 FastJSON 转换**:`JSONObject.parseObject(JSONObject.toJSONString(dto), Entity.class)` | 后端分层规范 §7 |
|
|
107
|
+
| **Update 合并** | **使用 Spring BeanUtils**:`BeanUtils.copyProperties(dto, entity, "createdBy", "creationDate", "versionNum")`,排除审计字段 | 后端分层规范 §7 |
|
|
108
|
+
| **分页排序** | 默认 `creation_date DESC`(orderByBean 为 null 时自动设置) | 后端分层规范 §7 |
|
|
109
|
+
| **DTO→Map** | `BeanUtil.beanToMap(paramBean, new LinkedHashMap<>(), false, false)` | 后端分层规范 §7 |
|
|
110
|
+
| **注入方式** | `@Autowired`(Spring),配合 `@Component("{camel}Name")` 显式命名 | gushen-demo |
|
|
111
|
+
|
|
112
|
+
### 主子表级联
|
|
113
|
+
|
|
114
|
+
| 约定项 | 规则 | 来源 |
|
|
115
|
+
| ---------------- | ------------------------------------------------------------------------------------------------ | --------------- |
|
|
116
|
+
| **Save** | 先保存主表拿到 ID,遍历子表设父 ID、清空子表主键、逐条 save | 后端分层规范 §7 |
|
|
117
|
+
| **Update** | 子表采用"先删后增":先 `deleteBy{父}Id(id)` 删旧数据,再 `saveListBy{父}Id(id, list)` 保存新数据 | 后端分层规范 §7 |
|
|
118
|
+
| **Delete** | 主表软删除 + 子表级联软删除(先查子表列表,再逐个 `deleteById(subId, true)`) | 后端分层规范 §7 |
|
|
119
|
+
| **子表 Service** | 额外声明 `findListBy{父}Id` / `saveListBy{父}Id` / `updateListBy{父}Id` / `deleteBy{父}Id` | 后端分层规范 §6 |
|
|
120
|
+
|
|
121
|
+
### Controller
|
|
122
|
+
|
|
123
|
+
| 约定项 | 规则 | 来源 |
|
|
124
|
+
| ------------- | ---------------------------------------------------------------------------------------- | --------------- |
|
|
125
|
+
| **基类** | 继承 `CommonAbstractService`,重写 `getBaseCommonServer()` | 后端分层规范 §8 |
|
|
126
|
+
| **认证** | 所有端点加 `@CheckToken` | 后端分层规范 §8 |
|
|
127
|
+
| **请求包装** | 普通:`RequestData<Dto>`,分页:`PaginationRequestData<Dto>` | 后端分层规范 §8 |
|
|
128
|
+
| **响应包装** | `ResponseData.data(...)` / `ResponseData.fail(...)` / `ResponseData.success()` | 后端分层规范 §8 |
|
|
129
|
+
| **参数获取** | Controller 取参用 `requestData.getParams()`(不是 `getData()`) | 后端分层规范 §8 |
|
|
130
|
+
| **空参数** | Controller 返回 `ResponseData.fail(ResponseMsgCode.NOT_NULL_PARAM.msgCode)` | 后端分层规范 §8 |
|
|
131
|
+
| **标准端点** | `/get-id`(GET), `/find-pagination`(POST), `/save`(POST), `/update`(POST), `/delete`(GET) | 后端分层规范 §8 |
|
|
132
|
+
| **SpringDoc** | `@Tag(name = "{Entity}Controller控制器")` + `@Operation(summary = "xxx")` | gushen-demo |
|
|
133
|
+
|
|
134
|
+
### 异常处理
|
|
135
|
+
|
|
136
|
+
| 约定项 | 规则 | 来源 |
|
|
137
|
+
| -------------- | ------------------------------------------------------------------------------------------------------ | ----------------------- |
|
|
138
|
+
| **异常位置** | **Service 层抛出**,Controller 仅做参数空校验 | 多语言与异常处理规范 §1 |
|
|
139
|
+
| **异常类** | 使用 `GushenRuntimeException`、`RecordNotExistsException`、`ParameterNotValidException` 等平台异常类 | 多语言与异常处理规范 §1 |
|
|
140
|
+
| **消息码** | 使用 `ResponseMsgCode` 枚举的 `.msgCode`,格式 `{port}_{table_snake}_{三位序号}`,**禁止硬编码字符串** | 多语言与异常处理规范 §1 |
|
|
141
|
+
| **服务层函数** | `RecordNotExistsException`:`throw new RecordNotExistsException(msgCode, List.of(id))` | 多语言与异常处理规范 |
|
|
142
|
+
|
|
143
|
+
### 国际化 i18n
|
|
144
|
+
|
|
145
|
+
| 约定项 | 规则 | 来源 |
|
|
146
|
+
| ------------ | ------------------------------------------------------------------------------------------------------------------------ | ----------------------- |
|
|
147
|
+
| **文件数量** | 每个模块 **7 个** `.properties` 文件 | 多语言与异常处理规范 §2 |
|
|
148
|
+
| **文件命名** | `{port}-{module}-application.properties` (默认Unicode) + `_zh_CN` / `_zh_TW` / `_en_US` / `_vi_VN` / `_th_TH` / `_hu_HU` | 多语言与异常处理规范 §2 |
|
|
149
|
+
| **内容要求** | 每个语言文件必须包含**该语言的实际翻译内容**,禁止不同语言文件混放同一语言内容 | 多语言与异常处理规范 §2 |
|
|
150
|
+
|
|
151
|
+
### 其他平台基础设施
|
|
152
|
+
|
|
153
|
+
| 约定项 | 规则 | 来源 |
|
|
154
|
+
| ------------- | -------------------------------------------------------------------------------------------- | ---------------- |
|
|
155
|
+
| **Redis** | 使用 `DawnRedis`,键格式 `{module}:{business}:{identifier}`,通过 `ICacheKey` 枚举统一管理 | Redis使用规范 |
|
|
156
|
+
| **EasyTrans** | 数据翻译使用 easy-trans(VO 自动将 ID 翻译为名称) | 通用工具类规范 |
|
|
157
|
+
| **分布式锁** | 使用 `@Klock` 注解,`keys` 必须包含业务标识(SpEL 表达式),禁止空 keys | 分布式锁规范 |
|
|
158
|
+
| **ES** | 使用 `Es.chainLambdaQuery(Entity.class)`,深度分页(>5000)用 `EsPaginationUtil` | ES使用规范 |
|
|
159
|
+
| **文件中心** | 使用 `IotBaseAttachmentClient`,业务类型命名 `{module}_{entity}_{type}` | 文件中心规范 |
|
|
160
|
+
| **BPM 流程** | 使用 `BpmHelper.startProcess(procDefKey, businessKey)`,回调通过 `BpmFlowConsumer` 消费 | 流程中心规范 |
|
|
161
|
+
| **编码生成** | 统一使用 `AutoCodeRuleService.generate(prefix, length)`,禁止自编编码 | 编码自动生成规范 |
|
|
162
|
+
| **IdToName** | `@IdToName(alias="nameField", type=IdToNameType.USER)` + `@EnableIdToName`,仅注解 Long 字段 | IdToName使用规范 |
|
|
163
|
+
| **Liquibase** | 所有数据库变更通过 Liquibase 管理(DDL/DML 幂等),禁止直接执行 SQL | Liquibase规范 |
|
|
164
|
+
| **工具类** | Hutool 优先(StrUtil/CollUtil/BeanUtil/ObjectUtil),JSON 用 FastJSON,日志用 SLF4J | 通用工具类规范 |
|
|
165
|
+
| **加密** | `EncryUtil.encrypt(plainText)` / `decrypt(cipherText)`,自动兼容 RSA 和 DES | 通用工具类规范 |
|
|
166
|
+
| **配置** | `ServerConfigConmonUtil.get(key, tenantId, redisTemplate, defaultValue)` | 通用工具类规范 |
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 部分清单
|
|
171
|
+
|
|
172
|
+
| 部分 | 标题 | 必填/选填 | 关注点 |
|
|
173
|
+
| ---- | ------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
174
|
+
| §1 | 需求 ID 映射与模块上下文 | **必填** | 分析:从 PRD 提取 ID 映射,明确模块边界 |
|
|
175
|
+
| §2 | 业务实体与领域对象 | **必填** | 分析→设计:实体清单 → Entity/DTO/Ro 字段表 |
|
|
176
|
+
| §3 | 数据模型 | **必填** | 设计:UML 类图 → DDL 字段表 → MyBatis XML 结构 |
|
|
177
|
+
| §4 | 业务行为与 Service 设计 | **必填** | 分析→设计:行为清单 → Service 接口/实现 + 事务标注 |
|
|
178
|
+
| §5 | 接口与 Controller 设计 | **必填** | 设计:端点清单 → Controller 完整代码骨架 → 权限矩阵 + 响应示例 |
|
|
179
|
+
| §6 | 枚举与数据字典 | **必填** | 分析→设计:枚举值定义 → Java 枚举类 → 数据校验规则 |
|
|
180
|
+
| §7 | 异常处理 | **必填** | 分析→设计:异常清单 → 消息码 → 抛出方式 → 流程图 |
|
|
181
|
+
| §8 | 缓存与性能 | **必填** | 设计:DawnRedis 键管理 + 索引优化 + 并发控制。如无缓存需求,填写"无"。 |
|
|
182
|
+
| §9 | 领域事件 | **必填** | 分析→设计:发布事件 + 消费事件 + Payload 结构 + 事件流程图。如无事件,填写"无"。 |
|
|
183
|
+
| §10 | 跨模块依赖 | **必填** | 分析→设计:被依赖清单(本模块对外提供)+ 依赖清单(本模块调用外部)+ 依赖关系图。如无依赖,填写"无"。 |
|
|
184
|
+
| §11 | 非功能性需求 | **必填** | 分析:性能/安全/兼容性/数据一致性/审计日志/可扩展性等非功能维度。如无特殊要求,至少保留数据一致性和审计日志两项。 |
|
|
185
|
+
| §12 | 测试场景 | **必填** | 分析:正常/异常/边界场景。如无复杂场景,至少列出基础 CRUD 的 2 条场景。 |
|
|
186
|
+
| §13 | 总结 | **必填** | 总结:成果汇总 + 后续工作 + 注意事项 |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## §1 需求 ID 映射与模块上下文(必填)
|
|
191
|
+
|
|
192
|
+
> **关注点**:分析。从 PRD 提取 ID 映射关系,建立全链路追溯起点。明确模块的上下文边界和核心职责。
|
|
193
|
+
|
|
194
|
+
```markdown
|
|
195
|
+
## 1. 需求 ID 映射与模块上下文
|
|
196
|
+
|
|
197
|
+
### 1.1 需求 ID 映射
|
|
198
|
+
|
|
199
|
+
> 本表记录了 PRD 中每个可测试条目与需求 ID 的对应关系。
|
|
200
|
+
> ID 由 AI 在生成设计文档时自动赋予,PRD 本身不包含 ID。
|
|
201
|
+
|
|
202
|
+
#### 1.1.1 用户故事映射
|
|
203
|
+
|
|
204
|
+
| 需求 ID | PRD 位置 | 故事简述 |
|
|
205
|
+
| ------- | -------- | ---------- |
|
|
206
|
+
| US-01 | §2.1.1 | {故事标题} |
|
|
207
|
+
| US-02 | §2.1.2 | {故事标题} |
|
|
208
|
+
|
|
209
|
+
#### 1.1.2 验收场景映射
|
|
210
|
+
|
|
211
|
+
| 需求 ID | PRD 位置 | 故事 ID | 场景简述 |
|
|
212
|
+
| --------- | ---------------- | ------- | ---------- |
|
|
213
|
+
| US-01-AC1 | §2.1.1 验收场景1 | US-01 | {场景描述} |
|
|
214
|
+
| US-01-AC2 | §2.1.1 验收场景2 | US-01 | {场景描述} |
|
|
215
|
+
|
|
216
|
+
#### 1.1.3 业务规则映射
|
|
217
|
+
|
|
218
|
+
| 需求 ID | PRD 位置 | 规则简述 |
|
|
219
|
+
| ------- | -------- | ---------- |
|
|
220
|
+
| BR-01 | §3.2.1 | {规则标题} |
|
|
221
|
+
| BR-02 | §3.2.2 | {规则标题} |
|
|
222
|
+
|
|
223
|
+
#### 1.1.4 功能条目映射
|
|
224
|
+
|
|
225
|
+
| 需求 ID | PRD 位置(功能编号) | 功能简述 |
|
|
226
|
+
| ------- | ---------------------------------------------- | ---------- |
|
|
227
|
+
| FUNC-01 | §4.3.x P{模块}-{子模块}-{序号}(如 P05-01-01) | {功能简述} |
|
|
228
|
+
| FUNC-02 | §4.3.x P{模块}-{子模块}-{序号}(如 P05-01-02) | {功能简述} |
|
|
229
|
+
|
|
230
|
+
#### 1.1.5 权限映射
|
|
231
|
+
|
|
232
|
+
| 需求 ID | PRD 位置 | 权限标识 | 角色 |
|
|
233
|
+
| ------- | -------- | ----------- | ------ |
|
|
234
|
+
| PERM-01 | §5.1 | @CheckToken | {角色} |
|
|
235
|
+
| PERM-02 | §5.1 | @CheckToken | {角色} |
|
|
236
|
+
|
|
237
|
+
### 1.2 模块定位
|
|
238
|
+
- **模块名称**: [模块名称,如 2051-demo]
|
|
239
|
+
- **模块描述**: [模块承载什么业务职责]
|
|
240
|
+
- **所属分层**: [业务核心层 / 平台支撑层 / 智能中枢层]
|
|
241
|
+
- **模块结构**: -api(Feign接口+DTO) + -model(Entity+DAO+XML+Ro) + -application(Service+Controller+Config)
|
|
242
|
+
|
|
243
|
+
### 1.3 上下文边界
|
|
244
|
+
- **上游依赖**: [本模块依赖哪些外部模块/系统]
|
|
245
|
+
- **下游调用**: [哪些模块会调用本模块的能力]
|
|
246
|
+
- **外部集成**: [是否对接外部系统,如 SAP、第三方 API 等]
|
|
247
|
+
|
|
248
|
+
### 1.4 核心职责
|
|
249
|
+
- [职责1]: [简要说明]
|
|
250
|
+
- [职责2]: [简要说明]
|
|
251
|
+
- [职责3]: [简要说明]
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## §2 领域对象(必填)
|
|
257
|
+
|
|
258
|
+
> **关注点**:分析 → 设计。先从 PRD 中提取业务实体及其属性(分析),然后直接落地为 Entity / DTO / Ro 三类领域对象的完整字段表(设计)。**同一字段不再在 §3 重复定义。**
|
|
259
|
+
|
|
260
|
+
```markdown
|
|
261
|
+
## 2. 业务实体与领域对象
|
|
262
|
+
|
|
263
|
+
### 2.1 对象类型说明
|
|
264
|
+
|
|
265
|
+
| 对象 | 父类/接口 | 所在模块 | 用途 |
|
|
266
|
+
| ---------- | ---------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------- |
|
|
267
|
+
| **Entity** | `extends BaseEntity<Entity> implements Serializable` | -model | 与数据库表一一映射。**审计字段继承自 BaseEntity,禁止重复声明** |
|
|
268
|
+
| **DTO** | `extends ReqeustCommonDataBean` | -api | 接口入参传输,包含 Bean Validation 校验分组 |
|
|
269
|
+
| **Ro** | `implements Serializable` | -model/entity/readonly/ | 只读视图对象,组合多表查询结果返回前端。**手动声明所有字段,不继承 BaseEntity** |
|
|
270
|
+
|
|
271
|
+
### 2.2 实体清单
|
|
272
|
+
|
|
273
|
+
#### 2.2.1 实体1: {Entity}Entity
|
|
274
|
+
|
|
275
|
+
- **来源需求**: [引用 PRD ID,如 US-01, FUNC-01]
|
|
276
|
+
- **实体描述**: [这个实体是什么,用来做什么]
|
|
277
|
+
- **表名**: \`{table_name}\`(反引号包裹)
|
|
278
|
+
- **所属域**: [所属业务域]
|
|
279
|
+
|
|
280
|
+
**完整字段**:
|
|
281
|
+
|
|
282
|
+
| 字段名 | Java类型 | DB类型 | 长度 | 必填 | 默认值 | 注解 | 说明 |
|
|
283
|
+
| ----------- | ------------------------- | -------- | ------ | ----- | -------- | --------------------------------- | -------------- |
|
|
284
|
+
| {pkField} | Long | BIGINT | 20 | Y | | @TableId(type=ASSIGN_ID), @Schema | 主键(雪花ID) |
|
|
285
|
+
| [业务字段1] | [String/Long/Integer/...] | [DB类型] | [长度] | [Y/N] | [默认值] | @TableField("{col}"), @Schema | [说明] |
|
|
286
|
+
| [业务字段2] | [类型] | [DB类型] | [长度] | [Y/N] | [默认值] | @TableField("{col}"), @Schema | [说明] |
|
|
287
|
+
|
|
288
|
+
> **审计字段**(tenant_id, creation_date, created_by, last_update_date, last_updated_by, last_update_login, delete_flag, version_num)继承自 BaseEntity,由 ModelMetaObjectHandler 自动填充。**Entity 中禁止重复声明,但在 DDL(§3)和 Ro 中需按需列出。**
|
|
289
|
+
|
|
290
|
+
- **主键**: {pkField} (Long, ASSIGN_ID 雪花算法)
|
|
291
|
+
- **索引**: uk_xxx (UNIQUE) / idx_xxx (NORMAL) — [说明]
|
|
292
|
+
- **关联关系**: [{Entity} 1:N {SubEntity}(主从表)] 或 [无]
|
|
293
|
+
|
|
294
|
+
#### 2.2.2 实体2: {SubEntity}Entity(子表,如有)
|
|
295
|
+
|
|
296
|
+
- **来源需求**: [引用 PRD ID]
|
|
297
|
+
- **实体描述**: [描述]
|
|
298
|
+
- **表名**: \`{sub_table_name}\`
|
|
299
|
+
- **完整字段**: [同上格式,含关联主表的外键字段]
|
|
300
|
+
- **主键**: {subPkField} (Long, ASSIGN_ID)
|
|
301
|
+
- **索引**: idx_{fk_col} (NORMAL) — 按主表ID查询子表
|
|
302
|
+
- **关联关系**: {SubEntity} N:1 {Entity}
|
|
303
|
+
|
|
304
|
+
### 2.3 DTO 清单
|
|
305
|
+
|
|
306
|
+
> DTO 继承 `ReqeustCommonDataBean`(注意平台拼写),位于 `-api` 模块。
|
|
307
|
+
|
|
308
|
+
#### 2.3.1 DTO1: {Entity}Dto
|
|
309
|
+
|
|
310
|
+
- **来源需求**: [引用 PRD ID]
|
|
311
|
+
- **使用场景**: [如:新增/更新/分页查询的入参]
|
|
312
|
+
|
|
313
|
+
| 字段名 | Java类型 | 必填 | 校验规则 | 说明 |
|
|
314
|
+
| --------------- | ---------------- | --------------- | ------------------------------------------------------------------------------------------ | -------------------------- |
|
|
315
|
+
| {pkField} | Long | 更新时必填 | @NotNull(message="{port}_{table}_001", groups={update{Entity}.class}) | 主键(仅更新组) |
|
|
316
|
+
| [业务字段1] | [类型] | 新增/更新时必填 | @NotEmpty(message="{port}_{table}_002", groups={save{Entity}.class, update{Entity}.class}) | [说明] |
|
|
317
|
+
| [业务字段2] | [类型] | 否 | 无校验 | [说明] |
|
|
318
|
+
| creationDates | List\<Date\> | 否 | @JSONField(format="yyyy-MM-dd HH:mm:ss") | 创建时间范围(分页查询用) |
|
|
319
|
+
| lastUpdateDates | List\<Date\> | 否 | @JSONField(format="yyyy-MM-dd HH:mm:ss") | 更新时间范围(分页查询用) |
|
|
320
|
+
| [{sub}List] | List\<{Sub}Dto\> | 否 | @Valid | 级联子表数据 |
|
|
321
|
+
|
|
322
|
+
> 日期字段标注 `@JSONField(format = "yyyy-MM-dd HH:mm:ss")`;校验 message 格式 `{port}_{table_snake}_{三位序号}`。
|
|
323
|
+
|
|
324
|
+
- **验证分组**(DTO 内部接口):
|
|
325
|
+
- `save{Entity}` 接口:新增时的校验组(主键不参与校验)
|
|
326
|
+
- `update{Entity}` 接口:更新时的校验组(主键仅属于此组)
|
|
327
|
+
- **来源实体**: {Entity}Entity [ + {SubEntity}Entity]
|
|
328
|
+
|
|
329
|
+
### 2.4 Ro 清单
|
|
330
|
+
|
|
331
|
+
> Ro 实现 `Serializable` + `serialVersionUID`,手动声明所有字段(不继承 BaseEntity),位于 `model/entity/readonly/`。
|
|
332
|
+
|
|
333
|
+
#### 2.4.1 Ro1: {Entity}EntityRo
|
|
334
|
+
|
|
335
|
+
- **来源需求**: [引用 PRD ID]
|
|
336
|
+
- **使用场景**: [如:get-id 详情查询返回]
|
|
337
|
+
|
|
338
|
+
| 字段名 | Java类型 | 注解 | 说明 |
|
|
339
|
+
| -------------- | ------------------- | ----------------------------------------------------------------------------------------------------------- | ------------ |
|
|
340
|
+
| {pkField} | Long | @Schema(description = "主键") | 主键 |
|
|
341
|
+
| [业务字段1] | [类型] | @Schema | [说明] |
|
|
342
|
+
| creationDate | Date | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8") | 创建日期 |
|
|
343
|
+
| createdBy | Long | @Schema | 创建人 |
|
|
344
|
+
| lastUpdateDate | Date | @DateTimeFormat @JsonFormat | 最后更新日期 |
|
|
345
|
+
| deleteFlag | Integer | @Schema | 删除标识 |
|
|
346
|
+
| versionNum | Integer | @Schema | 版本号 |
|
|
347
|
+
| [{sub}List] | List\<{Sub}Entity\> | @Schema | 关联子表列表 |
|
|
348
|
+
|
|
349
|
+
> 日期字段标注 `@DateTimeFormat` + `@JsonFormat`;Ro 需手动列出需要返回的审计字段。
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## §3 数据模型(必填)
|
|
355
|
+
|
|
356
|
+
> **关注点**:设计。基于 §2 的实体定义,绘制 UML 类图,设计完整的 DDL 和 MyBatis XML 结构。
|
|
357
|
+
|
|
358
|
+
```markdown
|
|
359
|
+
## 3. 数据模型
|
|
360
|
+
|
|
361
|
+
### 3.1 UML 类图
|
|
362
|
+
|
|
363
|
+
```mermaid
|
|
364
|
+
classDiagram
|
|
365
|
+
class {Entity}Entity {
|
|
366
|
+
+Long {pkField}
|
|
367
|
+
+[类型] [业务字段1]
|
|
368
|
+
+[类型] [业务字段2]
|
|
369
|
+
#Long tenantId
|
|
370
|
+
#Date creationDate
|
|
371
|
+
#Long createdBy
|
|
372
|
+
#Date lastUpdateDate
|
|
373
|
+
#Long lastUpdatedBy
|
|
374
|
+
#Integer deleteFlag
|
|
375
|
+
#Integer versionNum
|
|
376
|
+
}
|
|
377
|
+
class {SubEntity}Entity {
|
|
378
|
+
+Long {subPkField}
|
|
379
|
+
+Long {fkField}
|
|
380
|
+
+[类型] [子表字段]
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
{Entity}Entity "1" --> "N" {SubEntity}Entity : 包含
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### 3.2 数据库表设计
|
|
387
|
+
|
|
388
|
+
> 主键使用雪花 ID(Long, IdType.ASSIGN_ID),不使用自增。不使用数据库外键,关联关系在代码层面维护。字段定义见 §2.2,本节仅列出 DDL 格式。
|
|
389
|
+
|
|
390
|
+
**表1**: \`{table_name}\`
|
|
391
|
+
- **表描述**: [表用途说明]
|
|
392
|
+
|
|
393
|
+
| 字段名 | 类型 | 长度 | 是否必填 | 默认值 | 说明 |
|
|
394
|
+
| ----------------- | -------- | ------ | -------- | -------- | ------------------------------ |
|
|
395
|
+
| {pk_col} | BIGINT | 20 | Y | | 主键(雪花ID, ASSIGN_ID) |
|
|
396
|
+
| [字段1] | [类型] | [长度] | [Y/N] | [默认值] | [说明] |
|
|
397
|
+
| tenant_id | BIGINT | 20 | Y | | 租户ID(审计字段) |
|
|
398
|
+
| creation_date | DATETIME | | Y | | 创建日期 |
|
|
399
|
+
| created_by | BIGINT | 20 | Y | | 创建人 |
|
|
400
|
+
| last_update_date | DATETIME | | Y | | 最后更新日期 |
|
|
401
|
+
| last_updated_by | BIGINT | 20 | Y | | 最后更新人 |
|
|
402
|
+
| last_update_login | BIGINT | 20 | N | | 最后登录ID |
|
|
403
|
+
| delete_flag | INT | 11 | Y | 0 | 删除标识(0=未删除,1=已删除) |
|
|
404
|
+
| version_num | INT | 11 | Y | 0 | 版本号(乐观锁) |
|
|
405
|
+
|
|
406
|
+
- **主键**: {pk_col} (BIGINT, ASSIGN_ID)
|
|
407
|
+
- **索引**:
|
|
408
|
+
| 索引名 | 索引类型 | 字段 | 说明 |
|
|
409
|
+
| ------- | --------------- | ------ | ------ |
|
|
410
|
+
| [索引1] | [UNIQUE/NORMAL] | [字段] | [说明] |
|
|
411
|
+
|
|
412
|
+
**表2**: \`{sub_table_name}\`(子表,如有)
|
|
413
|
+
- **表描述**: [用途说明]
|
|
414
|
+
- **字段列表**: [同上格式],额外包含 `{fk_col} BIGINT 20 Y — 关联主表主键`
|
|
415
|
+
- **主键**: {sub_pk_col} (BIGINT, ASSIGN_ID)
|
|
416
|
+
- **索引**: idx_{fk_col} NORMAL ({fk_col}) — 按主表ID查询子表
|
|
417
|
+
|
|
418
|
+
### 3.3 MyBatis 映射
|
|
419
|
+
|
|
420
|
+
> **所有 SQL 通过 MyBatis XML 实现,禁止 QueryWrapper / LambdaQueryWrapper。**
|
|
421
|
+
> XML 文件与 DAO 接口同包路径:`src/main/resources/com/sie/gushen/{service}/model/dao/{Entity}DAO.xml`
|
|
422
|
+
|
|
423
|
+
#### 3.3.1 DAO 接口
|
|
424
|
+
|
|
425
|
+
- **类路径**: `com.sie.gushen.{service}.model.dao.{Entity}DAO`
|
|
426
|
+
- **继承**: `BaseCommonDAO_HI<{Entity}Entity>`
|
|
427
|
+
- **注解**: `@Component("{camel}DAO")`
|
|
428
|
+
- **自定义方法**:
|
|
429
|
+
- `Page<{Entity}Entity> findPagination(@Param("page") Page<{Entity}Entity> page, @Param("params") Map<String, Object> params)` — 分页查询
|
|
430
|
+
- `List<{SubEntity}Entity> findListBy{父}Id(@Param("{父}Id") Long {父}Id)` — 按主表ID查子表(有子表时)
|
|
431
|
+
|
|
432
|
+
#### 3.3.2 Mapper XML 结构
|
|
433
|
+
|
|
434
|
+
```xml
|
|
435
|
+
<mapper namespace="com.sie.gushen.{service}.model.dao.{Entity}DAO">
|
|
436
|
+
|
|
437
|
+
<resultMap id="BaseResultMap" type="com.sie.gushen.{service}.model.entity.{Entity}Entity">
|
|
438
|
+
<id column="{pk_col}" property="{pkField}"/>
|
|
439
|
+
<!-- 所有业务字段映射 -->
|
|
440
|
+
<!-- 所有审计字段映射(完整列出,禁止省略) -->
|
|
441
|
+
</resultMap>
|
|
442
|
+
|
|
443
|
+
<sql id="Base_Column_List">
|
|
444
|
+
{pk_col}, {col1}, {col2}, ..., tenant_id, creation_date, created_by,
|
|
445
|
+
last_update_date, last_updated_by, last_update_login, delete_flag, version_num
|
|
446
|
+
</sql>
|
|
447
|
+
|
|
448
|
+
<sql id="BASE_QUERY_CONDITION">
|
|
449
|
+
<!-- 动态条件:编码精确匹配、名称 LIKE、日期范围、状态等 -->
|
|
450
|
+
<if test="params.{col} != null and params.{col} != ''">
|
|
451
|
+
AND {col} = #{params.{col}}
|
|
452
|
+
</if>
|
|
453
|
+
</sql>
|
|
454
|
+
|
|
455
|
+
<select id="findPagination" resultMap="BaseResultMap">
|
|
456
|
+
SELECT <include refid="Base_Column_List"/>
|
|
457
|
+
FROM `{table_name}`
|
|
458
|
+
WHERE delete_flag = 0
|
|
459
|
+
<include refid="BASE_QUERY_CONDITION"/>
|
|
460
|
+
</select>
|
|
461
|
+
|
|
462
|
+
<!-- 如有子表:按主表ID查询 -->
|
|
463
|
+
<select id="findListBy{父}Id" resultMap="BaseResultMap">
|
|
464
|
+
SELECT <include refid="Base_Column_List"/>
|
|
465
|
+
FROM `{sub_table_name}`
|
|
466
|
+
WHERE delete_flag = 0 AND {父}_id = #{{父}Id}
|
|
467
|
+
</select>
|
|
468
|
+
|
|
469
|
+
</mapper>
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**关键约定**:
|
|
473
|
+
- 所有 SELECT 必须 `WHERE delete_flag = 0`
|
|
474
|
+
- 日期范围使用 `params.creationDates[0]` 配合 `jdbcType=TIMESTAMP`
|
|
475
|
+
- 模糊查询使用 `<bind>` 标签(`<bind name="name" value="'%' + params.name + '%'"/>`)
|
|
476
|
+
- 表名使用反引号
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## §4 业务行为与 Service 设计(必填)
|
|
482
|
+
|
|
483
|
+
> **关注点**:分析 → 设计。从 PRD 业务场景中提取核心行为(分析),然后直接设计 Service 接口方法签名、实现逻辑和事务边界(设计)。
|
|
484
|
+
|
|
485
|
+
```markdown
|
|
486
|
+
## 4. 业务行为与 Service 设计
|
|
487
|
+
|
|
488
|
+
### 4.1 业务行为清单
|
|
489
|
+
|
|
490
|
+
#### 4.1.1 行为1: [行为名称,如"新增{实体}"]
|
|
491
|
+
|
|
492
|
+
- **来源需求**: [引用 PRD ID,如 BR-01, BR-02, FUNC-01]
|
|
493
|
+
- **行为描述**: [这个行为做什么,达到什么目的]
|
|
494
|
+
- **触发方**: [谁/什么触发这个行为]
|
|
495
|
+
- **业务规则**:
|
|
496
|
+
- [规则1]: [规则描述]
|
|
497
|
+
- [规则2]: [规则描述]
|
|
498
|
+
- **前置条件**: [执行前需满足的条件]
|
|
499
|
+
- **后置条件**: [执行后应达到的状态]
|
|
500
|
+
- **涉及实体**: [涉及哪些实体]
|
|
501
|
+
|
|
502
|
+
#### 4.1.2 行为2: [行为名称]
|
|
503
|
+
|
|
504
|
+
[同上格式]
|
|
505
|
+
|
|
506
|
+
### 4.2 业务流程图
|
|
507
|
+
|
|
508
|
+
```mermaid
|
|
509
|
+
flowchart TD
|
|
510
|
+
A[开始] --> B[步骤1]
|
|
511
|
+
B --> C{判断条件}
|
|
512
|
+
C -->|条件1| D[步骤2]
|
|
513
|
+
C -->|条件2| E[步骤3]
|
|
514
|
+
D --> F[步骤4]
|
|
515
|
+
E --> F
|
|
516
|
+
F --> G[结束]
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
### 4.3 状态机图(如有状态流转)
|
|
520
|
+
|
|
521
|
+
```mermaid
|
|
522
|
+
stateDiagram-v2
|
|
523
|
+
[*] --> [状态1]
|
|
524
|
+
[状态1] --> [状态2]: [触发条件]
|
|
525
|
+
[状态2] --> [状态3]: [触发条件]
|
|
526
|
+
[状态3] --> [*]
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
### 4.4 Service 接口设计
|
|
530
|
+
|
|
531
|
+
#### 4.4.1 II{Entity}(主表 Service 接口)
|
|
532
|
+
|
|
533
|
+
- **类路径**: `com.sie.gushen.{service}.model.service.II{Entity}`
|
|
534
|
+
- **继承**: `IBaseCommon<{Entity}Entity>`
|
|
535
|
+
|
|
536
|
+
| 方法签名 | 入参 | 出参 | 事务 | 说明 |
|
|
537
|
+
| ----------------------------------------------------------------------------------------------- | -------------- | ---------------------------- | -------------- | -------------------------------------------------- |
|
|
538
|
+
| `findById(Serializable id)` | Long id | {Entity}Entity | 无 | 覆写,调用 this.getById(id) |
|
|
539
|
+
| `findPagination({Entity}Dto dto, Integer pageIndex, Integer pageRows, OrderByBean orderByBean)` | DTO + 分页参数 | Pagination\<{Entity}Entity\> | 无 | 默认排序 creation_date DESC |
|
|
540
|
+
| `save{Entity}({Entity}Dto dto)` | DTO | {Entity}Entity | @Transactional | FastJSON 转换 + 主子表级联保存 |
|
|
541
|
+
| `update{Entity}({Entity}Dto dto)` | DTO | {Entity}Entity | @Transactional | Spring BeanUtils 合并(排除审计字段) + 子表先删后增 |
|
|
542
|
+
| `delete{Entity}(Long id)` | Long id | void | @Transactional | 主表软删除 + 子表级联软删除 |
|
|
543
|
+
|
|
544
|
+
#### 4.4.2 II{SubEntity}(子表 Service 接口,如有)
|
|
545
|
+
|
|
546
|
+
| 方法签名 | 说明 |
|
|
547
|
+
| ------------------------------------------------------- | --------------------------------------------------- |
|
|
548
|
+
| `findListBy{父}Id(Long {父}Id)` | 按主表ID查询子表列表 |
|
|
549
|
+
| `saveListBy{父}Id(Long {父}Id, List<{Sub}Entity> list)` | 批量保存(遍历设父ID + 清空主键) |
|
|
550
|
+
| `deleteBy{父}Id(Long {父}Id)` | 级联软删除(查列表 → 逐个 deleteById(subId, true)) |
|
|
551
|
+
|
|
552
|
+
### 4.5 Service 实现逻辑
|
|
553
|
+
|
|
554
|
+
#### 4.5.1 {Entity}Service
|
|
555
|
+
|
|
556
|
+
- **类路径**: `com.sie.gushen.{service}.model.service.impl.{Entity}Service`
|
|
557
|
+
- **继承**: `BaseCommonServer<{Entity}Entity>`
|
|
558
|
+
- **注解**: `@Component("{camel}Service")`
|
|
559
|
+
- **注入**: `@Autowired private {Entity}DAO {camel}DAO;` [+ `@Autowired private II{SubEntity} {sub}Service;`]
|
|
560
|
+
|
|
561
|
+
**关键方法逻辑**:
|
|
562
|
+
|
|
563
|
+
```
|
|
564
|
+
save{Entity}(dto):
|
|
565
|
+
1. FastJSON: JSONObject.parseObject(JSONObject.toJSONString(dto), {Entity}Entity.class)
|
|
566
|
+
2. this.save(entity) // 保存主表
|
|
567
|
+
3. Long id = entity.get{Entity}Id()
|
|
568
|
+
4. if 子表列表非空:
|
|
569
|
+
遍历设 {父}Id = id, 清空子表主键 = null
|
|
570
|
+
{sub}Service.saveListBy{父}Id(id, list) // 批量保存子表
|
|
571
|
+
5. return entity
|
|
572
|
+
事务: @Transactional(rollbackFor = Exception.class)
|
|
573
|
+
|
|
574
|
+
update{Entity}(dto):
|
|
575
|
+
1. entity = this.getById(dto.get{Entity}Id())
|
|
576
|
+
2. if entity == null: throw RecordNotExistsException(UPDATE_DATA_NOT_EXIST)
|
|
577
|
+
3. Spring BeanUtils: BeanUtils.copyProperties(dto, entity,
|
|
578
|
+
"createdBy", "creationDate", "versionNum") // 排除审计字段
|
|
579
|
+
4. this.update(entity) // 更新主表
|
|
580
|
+
5. {sub}Service.deleteBy{父}Id(id) // 软删除旧子表
|
|
581
|
+
6. if 子表列表非空:
|
|
582
|
+
{sub}Service.saveListBy{父}Id(id, list) // 保存新子表
|
|
583
|
+
7. return entity
|
|
584
|
+
事务: @Transactional(rollbackFor = Exception.class)
|
|
585
|
+
|
|
586
|
+
delete{Entity}(id):
|
|
587
|
+
1. this.deleteById(id, true) // 主表软删除
|
|
588
|
+
2. {sub}Service.deleteBy{父}Id(id) // 子表级联软删除
|
|
589
|
+
事务: @Transactional(rollbackFor = Exception.class)
|
|
590
|
+
|
|
591
|
+
findPagination(dto, pageIndex, pageRows, orderByBean):
|
|
592
|
+
1. if orderByBean == null: 设置默认排序 creation_date DESC
|
|
593
|
+
2. BeanUtil.beanToMap(dto, new LinkedHashMap<>(), false, false) → params
|
|
594
|
+
3. Condition.getPage(pageIndex, pageRows, orderByBean) → page
|
|
595
|
+
4. {camel}DAO.findPagination(page, params) // MyBatis XML 查询
|
|
596
|
+
5. PaginationUtil.toPagination(page) → return
|
|
597
|
+
事务: 无(只读查询)
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
### 4.6 事务边界汇总
|
|
601
|
+
|
|
602
|
+
| 方法 | @Transactional | 原因 |
|
|
603
|
+
| ------------------------- | ----------------------------- | ---------------------------------- |
|
|
604
|
+
| save{Entity} | rollbackFor = Exception.class | 主表 INSERT + 子表批量 INSERT |
|
|
605
|
+
| update{Entity} | rollbackFor = Exception.class | 主表 UPDATE + 子表 DELETE + INSERT |
|
|
606
|
+
| delete{Entity} | rollbackFor = Exception.class | 主表软删除 + 子表级联软删除 |
|
|
607
|
+
| saveListBy{父}Id | rollbackFor = Exception.class | 子表批量保存 |
|
|
608
|
+
| findById / findPagination | **无** | 只读查询 |
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
## §5 接口与 Controller 设计(必填)
|
|
614
|
+
|
|
615
|
+
> **关注点**:设计。基于 §4 的业务行为,设计 REST 端点和 Controller 代码骨架。
|
|
616
|
+
|
|
617
|
+
```markdown
|
|
618
|
+
## 5. 接口与 Controller 设计
|
|
619
|
+
|
|
620
|
+
### 5.1 端点清单
|
|
621
|
+
|
|
622
|
+
| # | HTTP | 路径 | 说明 | 请求包装 | 响应包装 | 校验分组 |
|
|
623
|
+
| --- | ---- | --------------------------- | -------------------- | ------------------------------------ | -------------------------- | -------------- |
|
|
624
|
+
| 1 | GET | `/{entity}/get-id` | 按ID查询详情(含子表) | @RequestParam Long id | ResponseData\<{Entity}Ro\> | — |
|
|
625
|
+
| 2 | POST | `/{entity}/find-pagination` | 分页查询 | PaginationRequestData\<{Entity}Dto\> | ResponseData\<Pagination\> | — |
|
|
626
|
+
| 3 | POST | `/{entity}/save` | 新增 | RequestData\<{Entity}Dto\> | ResponseData\<{Entity}\> | save{Entity} |
|
|
627
|
+
| 4 | POST | `/{entity}/update` | 更新 | RequestData\<{Entity}Dto\> | ResponseData\<{Entity}\> | update{Entity} |
|
|
628
|
+
| 5 | GET | `/{entity}/delete` | 软删除 | @RequestParam Long id | ResponseData.success() | — |
|
|
629
|
+
|
|
630
|
+
> [如有自定义端点,在此追加]
|
|
631
|
+
|
|
632
|
+
### 5.2 Controller 代码骨架
|
|
633
|
+
|
|
634
|
+
```java
|
|
635
|
+
@Tag(name = "{Entity}Controller控制器", description = "{Entity}Controller控制器")
|
|
636
|
+
@RestController
|
|
637
|
+
@RequestMapping("/{entity}")
|
|
638
|
+
public class {Entity}Controller extends CommonAbstractService {
|
|
639
|
+
private static final Logger LOGGER = LoggerFactory.getLogger({Entity}Controller.class);
|
|
640
|
+
|
|
641
|
+
@Autowired
|
|
642
|
+
private II{Entity} {camel}Service;
|
|
643
|
+
|
|
644
|
+
@Override
|
|
645
|
+
public IBaseCommon getBaseCommonServer() {
|
|
646
|
+
return this.{camel}Service;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
@Operation(summary = "根据Id查询数据")
|
|
650
|
+
@GetMapping(value = "/get-id")
|
|
651
|
+
@CheckToken
|
|
652
|
+
public ResponseData<{Entity}EntityRo> findById(@RequestParam Long id) {
|
|
653
|
+
return ResponseData.data({camel}Service.findById(id));
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
@Operation(summary = "分页查询")
|
|
657
|
+
@PostMapping(value = "/find-pagination")
|
|
658
|
+
@CheckToken
|
|
659
|
+
public ResponseData<Pagination<{Entity}Entity>> findByPage(
|
|
660
|
+
@RequestBody PaginationRequestData<{Entity}Dto> paginationRequestData) {
|
|
661
|
+
Integer pageIndex = paginationRequestData.getPageIndex();
|
|
662
|
+
Integer pageRows = paginationRequestData.getPageRows();
|
|
663
|
+
{Entity}Dto dto = paginationRequestData == null ? null : paginationRequestData.getParams();
|
|
664
|
+
Pagination<{Entity}Entity> pagination = {camel}Service.findPagination(
|
|
665
|
+
dto, pageIndex, pageRows,
|
|
666
|
+
paginationRequestData != null ? paginationRequestData.getOrderByBean() : null);
|
|
667
|
+
return ResponseData.data(pagination);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
@Operation(summary = "保存接口")
|
|
671
|
+
@PostMapping(value = "/save")
|
|
672
|
+
@CheckToken
|
|
673
|
+
public ResponseData<{Entity}Entity> save(
|
|
674
|
+
@Validated({Entity}Dto.save{Entity}.class)
|
|
675
|
+
@RequestBody RequestData<{Entity}Dto> requestData) {
|
|
676
|
+
{Entity}Dto dto = requestData == null ? null : requestData.getParams();
|
|
677
|
+
if (dto == null) {
|
|
678
|
+
return ResponseData.fail(ResponseMsgCode.NOT_NULL_PARAM.msgCode);
|
|
679
|
+
}
|
|
680
|
+
return ResponseData.data({camel}Service.save{Entity}(dto));
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
@Operation(summary = "根据ID更新数据")
|
|
684
|
+
@PostMapping(value = "/update")
|
|
685
|
+
@CheckToken
|
|
686
|
+
public ResponseData<{Entity}Entity> update(
|
|
687
|
+
@Validated({Entity}Dto.update{Entity}.class)
|
|
688
|
+
@RequestBody RequestData<{Entity}Dto> requestData) {
|
|
689
|
+
{Entity}Dto dto = requestData == null ? null : requestData.getParams();
|
|
690
|
+
if (dto == null) {
|
|
691
|
+
return ResponseData.fail(ResponseMsgCode.NOT_NULL_PARAM.msgCode);
|
|
692
|
+
}
|
|
693
|
+
return ResponseData.data({camel}Service.update{Entity}(dto));
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
@Operation(summary = "根据id删除")
|
|
697
|
+
@GetMapping(value = "/delete")
|
|
698
|
+
@CheckToken
|
|
699
|
+
public ResponseData deleteById(@RequestParam Long id) {
|
|
700
|
+
{camel}Service.delete{Entity}(id);
|
|
701
|
+
return ResponseData.success();
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
### 5.3 响应示例
|
|
707
|
+
|
|
708
|
+
> 以下为每个接口的典型成功响应和错误响应示例,使用 JSON 格式。
|
|
709
|
+
|
|
710
|
+
#### 5.3.1 按ID查询 — GET `/{entity}/get-id`
|
|
711
|
+
|
|
712
|
+
**成功响应**(HTTP 200):
|
|
713
|
+
|
|
714
|
+
```json
|
|
715
|
+
{
|
|
716
|
+
"code": "200",
|
|
717
|
+
"msg": "操作成功",
|
|
718
|
+
"data": {
|
|
719
|
+
"{pkField}": 1234567890,
|
|
720
|
+
"{字段1}": "{示例值}",
|
|
721
|
+
"creationDate": "2026-06-13 10:00:00",
|
|
722
|
+
"createdBy": 1001,
|
|
723
|
+
"deleteFlag": 0,
|
|
724
|
+
"versionNum": 1
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
**错误响应**(HTTP 200,业务错误码):
|
|
730
|
+
|
|
731
|
+
```json
|
|
732
|
+
{
|
|
733
|
+
"code": "{port}_{table}_005",
|
|
734
|
+
"msg": "{实体}数据不存在",
|
|
735
|
+
"data": null
|
|
736
|
+
}
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
#### 5.3.2 分页查询 — POST `/{entity}/find-pagination`
|
|
740
|
+
|
|
741
|
+
**成功响应**(HTTP 200):
|
|
742
|
+
|
|
743
|
+
```json
|
|
744
|
+
{
|
|
745
|
+
"code": "200",
|
|
746
|
+
"msg": "操作成功",
|
|
747
|
+
"data": {
|
|
748
|
+
"total": 50,
|
|
749
|
+
"records": [
|
|
750
|
+
{
|
|
751
|
+
"{pkField}": 1234567890,
|
|
752
|
+
"{字段1}": "{示例值}",
|
|
753
|
+
"creationDate": "2026-06-13 10:00:00"
|
|
754
|
+
}
|
|
755
|
+
],
|
|
756
|
+
"pageIndex": 1,
|
|
757
|
+
"pageRows": 20
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
**错误响应**(HTTP 200,空参数):
|
|
763
|
+
|
|
764
|
+
```json
|
|
765
|
+
{
|
|
766
|
+
"code": "{port}_common_001",
|
|
767
|
+
"msg": "参数不能为空",
|
|
768
|
+
"data": null
|
|
769
|
+
}
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
#### 5.3.3 新增 — POST `/{entity}/save`
|
|
773
|
+
|
|
774
|
+
**成功响应**(HTTP 200):
|
|
775
|
+
|
|
776
|
+
```json
|
|
777
|
+
{
|
|
778
|
+
"code": "200",
|
|
779
|
+
"msg": "操作成功",
|
|
780
|
+
"data": {
|
|
781
|
+
"{pkField}": 1234567890,
|
|
782
|
+
"{字段1}": "{示例值}",
|
|
783
|
+
"creationDate": "2026-06-13 10:00:00",
|
|
784
|
+
"createdBy": 1001,
|
|
785
|
+
"deleteFlag": 0,
|
|
786
|
+
"versionNum": 0
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
```
|
|
790
|
+
|
|
791
|
+
**错误响应 — 参数为空**(HTTP 200):
|
|
792
|
+
|
|
793
|
+
```json
|
|
794
|
+
{
|
|
795
|
+
"code": "{port}_common_001",
|
|
796
|
+
"msg": "参数不能为空",
|
|
797
|
+
"data": null
|
|
798
|
+
}
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
**错误响应 — 字段校验失败**(HTTP 200):
|
|
802
|
+
|
|
803
|
+
```json
|
|
804
|
+
{
|
|
805
|
+
"code": "{port}_{table}_002",
|
|
806
|
+
"msg": "{字段1}不能为空",
|
|
807
|
+
"data": null
|
|
808
|
+
}
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
**错误响应 — 业务规则校验失败**(HTTP 200):
|
|
812
|
+
|
|
813
|
+
```json
|
|
814
|
+
{
|
|
815
|
+
"code": "{port}_{table}_006",
|
|
816
|
+
"msg": "{业务规则描述,如同系统下角色编码已存在}",
|
|
817
|
+
"data": null
|
|
818
|
+
}
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
#### 5.3.4 更新 — POST `/{entity}/update`
|
|
822
|
+
|
|
823
|
+
**成功响应**(HTTP 200):
|
|
824
|
+
|
|
825
|
+
```json
|
|
826
|
+
{
|
|
827
|
+
"code": "200",
|
|
828
|
+
"msg": "操作成功",
|
|
829
|
+
"data": {
|
|
830
|
+
"{pkField}": 1234567890,
|
|
831
|
+
"{字段1}": "{更新后的值}",
|
|
832
|
+
"lastUpdateDate": "2026-06-13 11:00:00",
|
|
833
|
+
"lastUpdatedBy": 1001,
|
|
834
|
+
"versionNum": 2
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
**错误响应 — 数据不存在**(HTTP 200):
|
|
840
|
+
|
|
841
|
+
```json
|
|
842
|
+
{
|
|
843
|
+
"code": "{port}_{table}_005",
|
|
844
|
+
"msg": "待更新数据不存在",
|
|
845
|
+
"data": null
|
|
846
|
+
}
|
|
847
|
+
```
|
|
848
|
+
|
|
849
|
+
**错误响应 — 参数为空**(HTTP 200):
|
|
850
|
+
|
|
851
|
+
```json
|
|
852
|
+
{
|
|
853
|
+
"code": "{port}_common_001",
|
|
854
|
+
"msg": "参数不能为空",
|
|
855
|
+
"data": null
|
|
856
|
+
}
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
**错误响应 — 乐观锁冲突**(HTTP 200):
|
|
860
|
+
|
|
861
|
+
```json
|
|
862
|
+
{
|
|
863
|
+
"code": "{port}_{table}_007",
|
|
864
|
+
"msg": "数据已被他人修改,请刷新后重试",
|
|
865
|
+
"data": null
|
|
866
|
+
}
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
#### 5.3.5 删除 — GET `/{entity}/delete`
|
|
870
|
+
|
|
871
|
+
**成功响应**(HTTP 200):
|
|
872
|
+
|
|
873
|
+
```json
|
|
874
|
+
{
|
|
875
|
+
"code": "200",
|
|
876
|
+
"msg": "操作成功",
|
|
877
|
+
"data": null
|
|
878
|
+
}
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
**错误响应 — 数据不存在**(HTTP 200):
|
|
882
|
+
|
|
883
|
+
```json
|
|
884
|
+
{
|
|
885
|
+
"code": "{port}_{table}_005",
|
|
886
|
+
"msg": "{实体}数据不存在",
|
|
887
|
+
"data": null
|
|
888
|
+
}
|
|
889
|
+
```
|
|
890
|
+
|
|
891
|
+
**错误响应 — 存在关联数据无法删除**(HTTP 200):
|
|
892
|
+
|
|
893
|
+
```json
|
|
894
|
+
{
|
|
895
|
+
"code": "{port}_{table}_008",
|
|
896
|
+
"msg": "存在关联{子实体}数据,请先删除关联数据",
|
|
897
|
+
"data": null
|
|
898
|
+
}
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
> **说明**:
|
|
902
|
+
> - ECP 平台所有响应 HTTP 状态码统一为 200,业务错误通过 `code` 字段区分(`200` 表示成功,其他为错误码)
|
|
903
|
+
> - `code` 值为 `ResponseMsgCode` 枚举中的 `.msgCode`,格式 `{port}_{table_snake}_{三位序号}`
|
|
904
|
+
> - `{port}_common_001` 为平台通用"参数不能为空"消息码(即 `ResponseMsgCode.NOT_NULL_PARAM.msgCode`)
|
|
905
|
+
> - 成功响应 `data` 字段为接口定义的出参类型;错误响应 `data` 统一为 `null`
|
|
906
|
+
> - 分页成功响应 `data` 包含 `total`、`records`、`pageIndex`、`pageRows` 四个标准字段
|
|
907
|
+
> - 删除成功响应 `data` 为 `null`(`ResponseData.success()` 不携带数据体)
|
|
908
|
+
|
|
909
|
+
### 5.4 权限矩阵
|
|
910
|
+
|
|
911
|
+
| 接口 | 方式 | 路径 | 权限要求 | Sentinel |
|
|
912
|
+
| -------- | ---- | --------------------------- | ----------- | -------- |
|
|
913
|
+
| 按ID查询 | GET | `/{entity}/get-id` | @CheckToken | 可选 |
|
|
914
|
+
| 分页查询 | POST | `/{entity}/find-pagination` | @CheckToken | — |
|
|
915
|
+
| 新增 | POST | `/{entity}/save` | @CheckToken | 可选 |
|
|
916
|
+
| 更新 | POST | `/{entity}/update` | @CheckToken | — |
|
|
917
|
+
| 删除 | GET | `/{entity}/delete` | @CheckToken | — |
|
|
918
|
+
```
|
|
919
|
+
|
|
920
|
+
---
|
|
921
|
+
|
|
922
|
+
## §6 枚举与数据字典(必填)
|
|
923
|
+
|
|
924
|
+
> **关注点**:分析 → 设计。从 PRD 状态定义和字段校验规则中提取枚举值,直接给出 Java 枚举类定义。
|
|
925
|
+
|
|
926
|
+
```markdown
|
|
927
|
+
## 6. 枚举与数据字典
|
|
928
|
+
|
|
929
|
+
### 6.1 枚举值定义
|
|
930
|
+
|
|
931
|
+
> ECP 平台中枚举定义为普通 Java 枚举类或常量类,存放在 `infra/enumeration/` 或 `infra/constant/` 目录下。
|
|
932
|
+
|
|
933
|
+
#### 6.1.1 枚举1: [枚举名称](如 {Entity}StatusEnum)
|
|
934
|
+
|
|
935
|
+
- **来源需求**: [引用 PRD ID]
|
|
936
|
+
- **枚举描述**: [表示什么含义]
|
|
937
|
+
- **存储值**: [Integer/TINYINT 或 String/VARCHAR]
|
|
938
|
+
- **类路径**: `com.sie.gushen.{service}.infra.enumeration.{Entity}StatusEnum`
|
|
939
|
+
|
|
940
|
+
| 枚举值 | 编码 | 显示名称 | 说明 | 使用场景 |
|
|
941
|
+
| ------ | ------- | -------- | ------ | -------- |
|
|
942
|
+
| [值1] | [编码1] | [名称1] | [说明] | [场景] |
|
|
943
|
+
| [值2] | [编码2] | [名称2] | [说明] | [场景] |
|
|
944
|
+
|
|
945
|
+
#### 6.1.2 枚举2: [枚举名称]
|
|
946
|
+
|
|
947
|
+
[同上格式]
|
|
948
|
+
|
|
949
|
+
### 6.2 数据校验规则
|
|
950
|
+
|
|
951
|
+
| 数据项 | Java类型 | 必填 | 取值范围 | 校验注解 | 消息码 |
|
|
952
|
+
| --------- | ----------------- | -------- | -------- | ------------------------- | ------------------ |
|
|
953
|
+
| {pkField} | Long | 更新必填 | >0 | @NotNull(update组) | {port}_{table}_001 |
|
|
954
|
+
| [字段1] | [String/Long/...] | [Y/N] | [范围] | @NotEmpty / @NotNull / 无 | {port}_{table}_002 |
|
|
955
|
+
| [字段2] | [类型] | [Y/N] | [范围] | [校验] | {port}_{table}_003 |
|
|
956
|
+
|
|
957
|
+
> 消息码格式: `{port}_{table_snake}_{三位序号}`,001-004 用于字段校验,005+ 用于业务异常。
|
|
958
|
+
```
|
|
959
|
+
|
|
960
|
+
---
|
|
961
|
+
|
|
962
|
+
## §7 异常处理(必填)
|
|
963
|
+
|
|
964
|
+
> **关注点**:分析 → 设计。从 PRD 验收场景和业务规则中提取异常场景,直接定义消息码、抛出位置和抛出方式。
|
|
965
|
+
|
|
966
|
+
```markdown
|
|
967
|
+
## 7. 异常处理
|
|
968
|
+
|
|
969
|
+
> **原则**:异常在 Service 层抛出,Controller 仅做参数空校验返回 `ResponseData.fail()`。
|
|
970
|
+
> 平台异常类:`RecordNotExistsException`、`GushenRuntimeException`、`ParameterNotValidException`。
|
|
971
|
+
|
|
972
|
+
### 7.1 业务异常清单
|
|
973
|
+
|
|
974
|
+
| # | 异常名称 | 来源需求 | 消息码 | 触发条件 | 抛出方式 | 抛出位置 |
|
|
975
|
+
| --- | -------------- | --------- | --------------------- | ---------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------- |
|
|
976
|
+
| 1 | 数据不存在 | US-01-AC1 | `{port}_{table}_005` | get-id/update 时记录不存在或已删除 | `throw new RecordNotExistsException("{port}_{table}_005", List.of(id))` | Service.findById / Service.update{Entity} |
|
|
977
|
+
| 2 | 更新数据不存在 | US-01-AC2 | UPDATE_DATA_NOT_EXIST | update 时 getById 返回 null | `throw new RecordNotExistsException(ResponseMsgCode.UPDATE_DATA_NOT_EXIST.msgCode)` | Service.update{Entity} |
|
|
978
|
+
| 3 | [业务异常] | [BR-xx] | `{port}_{table}_006` | [触发条件] | `throw new GushenRuntimeException("{port}_{table}_006")` | Service.xxx |
|
|
979
|
+
| 4 | 参数为空 | 通用 | NOT_NULL_PARAM | Controller 收到 null dto | `return ResponseData.fail(ResponseMsgCode.NOT_NULL_PARAM.msgCode)` | Controller(所有端点) |
|
|
980
|
+
|
|
981
|
+
### 7.2 异常处理流程
|
|
982
|
+
|
|
983
|
+
```mermaid
|
|
984
|
+
flowchart TD
|
|
985
|
+
A[Controller接收请求] --> B{dto == null?}
|
|
986
|
+
B -->|是| C[返回 ResponseData.fail NOT_NULL_PARAM]
|
|
987
|
+
B -->|否| D[调用 Service 层]
|
|
988
|
+
D --> E{业务校验}
|
|
989
|
+
E -->|记录不存在| F[Service抛出 RecordNotExistsException]
|
|
990
|
+
E -->|业务规则违反| G[Service抛出 GushenRuntimeException]
|
|
991
|
+
E -->|校验通过| H[返回 ResponseData.data]
|
|
992
|
+
F --> I[全局异常处理器捕获 → 返回错误响应]
|
|
993
|
+
G --> I
|
|
994
|
+
C --> J[前端展示错误信息]
|
|
995
|
+
I --> J
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
### 7.3 消息码汇总
|
|
999
|
+
|
|
1000
|
+
```properties
|
|
1001
|
+
# config/{port}-{module}-application_zh_CN.properties
|
|
1002
|
+
# 字段校验 001-004
|
|
1003
|
+
{port}_{table}_001 = 主键ID不能为空
|
|
1004
|
+
{port}_{table}_002 = {字段1}不能为空
|
|
1005
|
+
{port}_{table}_003 = {字段2}不能为空
|
|
1006
|
+
# 业务异常 005+
|
|
1007
|
+
{port}_{table}_005 = {实体}数据不存在
|
|
1008
|
+
{port}_{table}_006 = {业务异常描述}
|
|
1009
|
+
```
|
|
1010
|
+
|
|
1011
|
+
> 每个模块维护 7 个 i18n properties 文件(default/zh_CN/zh_TW/en_US/vi_VN/th_TH/hu_HU),每个文件必须包含该语言的实际翻译内容。
|
|
1012
|
+
```
|
|
1013
|
+
|
|
1014
|
+
---
|
|
1015
|
+
|
|
1016
|
+
## §8 缓存与性能(必填)
|
|
1017
|
+
|
|
1018
|
+
> **关注点**:设计。仅当有明确缓存需求或性能要求时填写。
|
|
1019
|
+
|
|
1020
|
+
```markdown
|
|
1021
|
+
## 8. 缓存与性能
|
|
1022
|
+
|
|
1023
|
+
### 8.1 缓存策略
|
|
1024
|
+
|
|
1025
|
+
> 使用 DawnRedis,键格式 `{module}:{business}:{identifier}`,通过 ICacheKey 枚举统一管理。
|
|
1026
|
+
|
|
1027
|
+
| 缓存数据 | 缓存原因 | 键格式 | 过期时间 |
|
|
1028
|
+
| -------- | -------- | ------------------------ | -------- |
|
|
1029
|
+
| [数据1] | [原因] | {module}:{business}:{id} | [TTL] |
|
|
1030
|
+
|
|
1031
|
+
```java
|
|
1032
|
+
@Autowired
|
|
1033
|
+
private DawnRedis dawnRedis;
|
|
1034
|
+
|
|
1035
|
+
// Key 通过 ICacheKey 枚举管理
|
|
1036
|
+
// 仅 Pipeline/Lua/Stream/PubSub 场景通过 dawnRedis.getRedisTemplate() 获取原生 RedisTemplate
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
### 8.2 数据库优化
|
|
1040
|
+
|
|
1041
|
+
**索引优化**: [补充索引说明]
|
|
1042
|
+
|
|
1043
|
+
**SQL 优化**:
|
|
1044
|
+
- 使用 `<include refid="Base_Column_List"/>` 避免 `SELECT *`
|
|
1045
|
+
- 模糊查询使用 `<bind>` 标签防止 SQL 注入
|
|
1046
|
+
- 分页查询使用 MyBatis Plus 分页插件
|
|
1047
|
+
|
|
1048
|
+
### 8.3 并发控制
|
|
1049
|
+
|
|
1050
|
+
| 策略 | 实现 | 适用场景 |
|
|
1051
|
+
| -------- | -------------------------------------------------------------- | -------------------------- |
|
|
1052
|
+
| 乐观锁 | version_num + OptimisticLockerInnerInterceptor | 更新操作(平台自动处理) |
|
|
1053
|
+
| 分布式锁 | @Klock(keys = {"#id"}), fair=true, waitTime=60s, leaseTime=60s | 编码唯一性校验等写冲突场景 |
|
|
1054
|
+
|
|
1055
|
+
> `@Klock` 禁止空 keys(会导致全局锁)。
|
|
1056
|
+
```
|
|
1057
|
+
|
|
1058
|
+
---
|
|
1059
|
+
|
|
1060
|
+
## §9 领域事件(必填)
|
|
1061
|
+
|
|
1062
|
+
> **关注点**:分析 → 设计。梳理本模块的事件发布(本模块触发 → 下游消费)和事件消费(上游触发 → 本模块响应)。ECP 平台中事件通过 Kafka `StreamBridge` 发送,消费者通过 `BpmFlowConsumer` / 自定义 `Consumer<…>` Bean 接收。**如本模块无领域事件,填写"无"并说明原因(如采用拉模式、同步调用等)。**
|
|
1063
|
+
|
|
1064
|
+
```markdown
|
|
1065
|
+
## 9. 领域事件
|
|
1066
|
+
|
|
1067
|
+
### 9.1 发布事件
|
|
1068
|
+
|
|
1069
|
+
> 本模块产生的业务事件,通过 Kafka 发送至消息系统,驱动下游模块或通知服务。
|
|
1070
|
+
|
|
1071
|
+
| # | 事件名称 | 触发条件 | Payload 关键字段 | 消费者 | 通知机制 |
|
|
1072
|
+
| --- | -------- | --------------------------- | ----------------- | ------------------- | ----------------------- |
|
|
1073
|
+
| 1 | [事件名] | [触发该事件的 Service 方法] | [字段1, 字段2, …] | [下游模块/消息服务] | [站内消息/飞书/邮件/无] |
|
|
1074
|
+
|
|
1075
|
+
#### 9.1.1 事件1: [事件名]
|
|
1076
|
+
|
|
1077
|
+
- **来源需求**: [引用 PRD ID,如 N01,BR-01]
|
|
1078
|
+
- **触发条件**: [详细触发描述,标注触发该事件的 Service 方法]
|
|
1079
|
+
- **发送方式**: `StreamBridge.send("topic", payload)` / `BpmHelper.startProcess(procDefKey, businessKey)`
|
|
1080
|
+
- **Payload 结构**:
|
|
1081
|
+
|
|
1082
|
+
| 字段名 | 类型 | 说明 |
|
|
1083
|
+
| ------- | ------ | ------ |
|
|
1084
|
+
| [字段1] | [类型] | [说明] |
|
|
1085
|
+
| [字段2] | [类型] | [说明] |
|
|
1086
|
+
|
|
1087
|
+
- **消费者**: [消费者模块/服务名称]
|
|
1088
|
+
- **消费者处理逻辑**: [收到事件后的处理步骤]
|
|
1089
|
+
|
|
1090
|
+
### 9.2 消费事件
|
|
1091
|
+
|
|
1092
|
+
> 本模块消费的外部事件,通过 Kafka Consumer 接收,驱动本模块内部状态变更。
|
|
1093
|
+
|
|
1094
|
+
| # | 事件名称 | 来源 | Payload 关键字段 | 处理逻辑 |
|
|
1095
|
+
| --- | -------- | ------------------- | ----------------- | -------------- |
|
|
1096
|
+
| 1 | [事件名] | [来源模块/外部系统] | [字段1, 字段2, …] | [简要处理描述] |
|
|
1097
|
+
|
|
1098
|
+
#### 9.2.1 事件1: [事件名]
|
|
1099
|
+
|
|
1100
|
+
- **来源需求**: [引用 PRD ID]
|
|
1101
|
+
- **来源**: [来源模块名称 + 接口/事件名称]
|
|
1102
|
+
- **消费方式**: [Kafka Consumer, BpmFlowConsumer, Feign 回调, 定时轮询]
|
|
1103
|
+
- **Consumer 类**: `[包路径].[Consumer类名]` — Bean name 必须与 `function.definition` 一致
|
|
1104
|
+
- **Payload 结构**:
|
|
1105
|
+
|
|
1106
|
+
| 字段名 | 类型 | 说明 |
|
|
1107
|
+
| ------- | ------ | ------ |
|
|
1108
|
+
| [字段1] | [类型] | [说明] |
|
|
1109
|
+
|
|
1110
|
+
- **处理逻辑**: [收到事件后的完整处理步骤,标注调用的 Service 方法]
|
|
1111
|
+
|
|
1112
|
+
### 9.3 事件流向图
|
|
1113
|
+
|
|
1114
|
+
```mermaid
|
|
1115
|
+
flowchart LR
|
|
1116
|
+
subgraph 本模块
|
|
1117
|
+
A[业务操作]
|
|
1118
|
+
B[事件 Consumer]
|
|
1119
|
+
end
|
|
1120
|
+
A -->|发布事件1| C[(Kafka Topic A)]
|
|
1121
|
+
C --> D[消费者模块A]
|
|
1122
|
+
C --> E[通知服务]
|
|
1123
|
+
F[(Kafka Topic B)] -->|事件2| B
|
|
1124
|
+
B --> G[本模块状态变更]
|
|
1125
|
+
```
|
|
1126
|
+
```
|
|
1127
|
+
|
|
1128
|
+
---
|
|
1129
|
+
|
|
1130
|
+
## §10 跨模块依赖(必填)
|
|
1131
|
+
|
|
1132
|
+
> **关注点**:分析 → 设计。梳理本模块与外部模块/系统的依赖关系——"谁依赖我"(被依赖 / 上游调用方)和"我依赖谁"(依赖 / 下游被调用方)。用于明确模块边界、Feign Client SDK 接口契约和集成测试范围。**如本模块为独立模块无外部依赖,填写"无"并说明原因。**
|
|
1133
|
+
|
|
1134
|
+
```markdown
|
|
1135
|
+
## 10. 跨模块依赖
|
|
1136
|
+
|
|
1137
|
+
### 10.1 被依赖(本模块对外提供的服务)
|
|
1138
|
+
|
|
1139
|
+
> 哪些模块/系统会调用本模块的能力?本模块需要对外暴露什么 Feign Client / SDK / REST 接口?
|
|
1140
|
+
|
|
1141
|
+
| # | 调用方 | 依赖方式 | 说明 | 对应接口 |
|
|
1142
|
+
| --- | ---------- | --------------------------------------------- | ---------------- | ------------------------------------- |
|
|
1143
|
+
| 1 | [模块名称] | [Feign Client / SDK / REST 回调 / Kafka 消费] | [调用的业务目的] | [本模块暴露的接口路径 / Feign 方法名] |
|
|
1144
|
+
|
|
1145
|
+
#### 10.1.1 调用方1: [模块名称]
|
|
1146
|
+
|
|
1147
|
+
- **来源需求**: [引用 PRD ID]
|
|
1148
|
+
- **依赖方式**: [说明通信协议与方式]
|
|
1149
|
+
- **调用场景**: [调用方在什么业务场景下调用本模块]
|
|
1150
|
+
- **本模块对外暴露的契约**:
|
|
1151
|
+
|
|
1152
|
+
| 接口 | 说明 | 请求关键字段 | 响应关键字段 |
|
|
1153
|
+
| --------------- | ---------- | ----------------- | ----------------- |
|
|
1154
|
+
| [方法签名/路径] | [功能说明] | [字段1, 字段2, …] | [字段1, 字段2, …] |
|
|
1155
|
+
|
|
1156
|
+
### 10.2 依赖(本模块调用的外部服务)
|
|
1157
|
+
|
|
1158
|
+
> 本模块需要调用哪些外部模块/系统的能力?
|
|
1159
|
+
|
|
1160
|
+
| # | 目标 | 依赖方式 | 说明 | 调用时机 |
|
|
1161
|
+
| --- | ------------------- | ----------------------------------- | ---------------- | --------------------------- |
|
|
1162
|
+
| 1 | [模块名称/外部系统] | [Feign Client / SDK / REST / Kafka] | [调用的业务目的] | [在哪个 Service 方法中调用] |
|
|
1163
|
+
|
|
1164
|
+
#### 10.2.1 依赖1: [模块名称]
|
|
1165
|
+
|
|
1166
|
+
- **来源需求**: [引用 PRD ID]
|
|
1167
|
+
- **依赖方式**: [说明通信协议与方式,如 Feign Client、Client SDK、REST 回调]
|
|
1168
|
+
- **Feign Client 接口**: `[包路径].[Client 接口名].[方法名]`(如为 Feign 调用)
|
|
1169
|
+
- **调用时机**: [在哪个 Service 方法的哪个步骤中调用]
|
|
1170
|
+
- **外部接口契约**:
|
|
1171
|
+
|
|
1172
|
+
| 接口 | 说明 | 请求关键字段 | 响应关键字段 |
|
|
1173
|
+
| ----------- | ---------- | ----------------- | ----------------- |
|
|
1174
|
+
| [路径/方法] | [功能说明] | [字段1, 字段2, …] | [字段1, 字段2, …] |
|
|
1175
|
+
|
|
1176
|
+
- **异常处理**: [外部调用失败时的处理策略:重试/降级/抛异常/返回默认值]
|
|
1177
|
+
|
|
1178
|
+
### 10.3 依赖关系图
|
|
1179
|
+
|
|
1180
|
+
```mermaid
|
|
1181
|
+
flowchart LR
|
|
1182
|
+
subgraph 本模块["本模块: {模块名}"]
|
|
1183
|
+
A[Controller]
|
|
1184
|
+
B[Service]
|
|
1185
|
+
end
|
|
1186
|
+
|
|
1187
|
+
subgraph 上游["上游调用方"]
|
|
1188
|
+
C[调用方1]
|
|
1189
|
+
D[调用方2]
|
|
1190
|
+
end
|
|
1191
|
+
|
|
1192
|
+
subgraph 下游["下游依赖"]
|
|
1193
|
+
E[外部模块A]
|
|
1194
|
+
F[外部系统B]
|
|
1195
|
+
G[平台基础设施]
|
|
1196
|
+
end
|
|
1197
|
+
|
|
1198
|
+
C -->|Feign/REST| A
|
|
1199
|
+
D -->|Feign/REST| A
|
|
1200
|
+
B -->|Feign Client| E
|
|
1201
|
+
B -->|REST API| F
|
|
1202
|
+
B -->|SDK| G
|
|
1203
|
+
```
|
|
1204
|
+
```
|
|
1205
|
+
|
|
1206
|
+
---
|
|
1207
|
+
|
|
1208
|
+
## §11 非功能性需求(必填)
|
|
1209
|
+
|
|
1210
|
+
> **关注点**:分析。从 PRD 验收标准中提取非功能性要求,结合 ECP 平台基础设施能力,明确性能指标、安全约束、数据一致性和审计要求。**如 PRD 未明确非功能需求,至少保留数据一致性(乐观锁 version_num)和审计日志两项。**
|
|
1211
|
+
|
|
1212
|
+
```markdown
|
|
1213
|
+
## 11. 非功能性需求
|
|
1214
|
+
|
|
1215
|
+
| 维度 | 要求 | 说明 |
|
|
1216
|
+
| -------------- | ------------------------------------------- | ------------------------------ |
|
|
1217
|
+
| **性能** | [如:列表查询 ≤3s,详情查询 ≤1s] | [具体指标 + 实现方式] |
|
|
1218
|
+
| **安全** | [如:@CheckToken + 角色权限 + 数据隔离] | [认证/授权/数据范围] |
|
|
1219
|
+
| **兼容性** | [如:Chrome / Edge 最新两个版本] | [浏览器/终端兼容范围] |
|
|
1220
|
+
| **数据一致性** | [如:变更联动原子操作 + 乐观锁 version_num] | [并发控制策略] |
|
|
1221
|
+
| **审计日志** | [如:关键操作记录操作人/时间/前后值] | [哪些操作需要记录] |
|
|
1222
|
+
| **可用性** | [如:99.9% 可用] | [SLA 要求,如无明确要求可不填] |
|
|
1223
|
+
| **可扩展性** | [如:预留批量操作接口,当前版本不支持] | [对未来扩展的预留设计] |
|
|
1224
|
+
```
|
|
1225
|
+
|
|
1226
|
+
---
|
|
1227
|
+
|
|
1228
|
+
## §12 测试场景(必填)
|
|
1229
|
+
|
|
1230
|
+
> **关注点**:分析。至少覆盖正常/异常/边界各 2 条场景。**如业务逻辑极为简单(纯单表 CRUD),最少列出 2 条核心正常场景。**
|
|
1231
|
+
|
|
1232
|
+
```markdown
|
|
1233
|
+
## 9. 测试场景
|
|
1234
|
+
|
|
1235
|
+
### 9.1 正常场景
|
|
1236
|
+
|
|
1237
|
+
| # | 场景名称 | 前置条件 | 操作步骤 | 预期结果 | 测试数据 |
|
|
1238
|
+
| --- | -------- | -------- | ------------------- | -------- | -------- |
|
|
1239
|
+
| 1 | [场景] | [条件] | 1. [步骤] 2. [步骤] | [预期] | [数据] |
|
|
1240
|
+
|
|
1241
|
+
### 9.2 异常场景
|
|
1242
|
+
|
|
1243
|
+
| # | 场景名称 | 前置条件 | 操作步骤 | 预期结果 | 关联异常 |
|
|
1244
|
+
| --- | -------- | -------- | ------------------- | -------- | -------- |
|
|
1245
|
+
| 1 | [场景] | [条件] | 1. [步骤] 2. [步骤] | [预期] | [消息码] |
|
|
1246
|
+
|
|
1247
|
+
### 9.3 边界场景
|
|
1248
|
+
|
|
1249
|
+
| # | 场景名称 | 前置条件 | 操作步骤 | 预期结果 |
|
|
1250
|
+
| --- | -------- | -------- | ------------------- | -------- |
|
|
1251
|
+
| 1 | [场景] | [条件] | 1. [步骤] 2. [步骤] | [预期] |
|
|
1252
|
+
```
|
|
1253
|
+
|
|
1254
|
+
---
|
|
1255
|
+
|
|
1256
|
+
## §13 总结(必填)
|
|
1257
|
+
|
|
1258
|
+
```markdown
|
|
1259
|
+
## 13. 总结
|
|
1260
|
+
|
|
1261
|
+
### 10.1 设计成果
|
|
1262
|
+
|
|
1263
|
+
| 成果项 | 数量/内容 |
|
|
1264
|
+
| ----------------- | ------------------------------------------- |
|
|
1265
|
+
| 业务实体 | N 个({Entity}Entity[, {SubEntity}Entity]) |
|
|
1266
|
+
| DTO | N 个({Entity}Dto[, {SubEntity}Dto]) |
|
|
1267
|
+
| Ro | N 个({Entity}EntityRo) |
|
|
1268
|
+
| Service 接口/实现 | N 对 |
|
|
1269
|
+
| DAO + XML | N 组 |
|
|
1270
|
+
| Controller | N 个 |
|
|
1271
|
+
| REST 端点 | N 个 |
|
|
1272
|
+
| 业务异常 | N 个 |
|
|
1273
|
+
| 枚举类 | N 个 |
|
|
1274
|
+
|
|
1275
|
+
### 10.2 关键设计决策
|
|
1276
|
+
|
|
1277
|
+
| 决策 | 说明 |
|
|
1278
|
+
| ------- | ------ |
|
|
1279
|
+
| [决策1] | [说明] |
|
|
1280
|
+
| [决策2] | [说明] |
|
|
1281
|
+
|
|
1282
|
+
### 10.3 后续工作
|
|
1283
|
+
|
|
1284
|
+
- 编码实现:按本文 §2~§7 的设计生成 Entity/DTO/Ro/DAO+XML/Service/Controller
|
|
1285
|
+
- 编写 i18n:7 个 .properties 文件,确保每个语言文件包含该语言的实际翻译
|
|
1286
|
+
- Liquibase:按 §3.2 表结构创建 changelog
|
|
1287
|
+
- 单元测试:按 §9 测试场景编写
|
|
1288
|
+
- 集成测试:Controller 端点集成测试
|
|
1289
|
+
|
|
1290
|
+
### 10.4 关键注意事项
|
|
1291
|
+
|
|
1292
|
+
- DTO 必须继承 `ReqeustCommonDataBean`(注意拼写,非 "Request")
|
|
1293
|
+
- Entity 中**禁止重复声明** BaseEntity 已有的审计字段
|
|
1294
|
+
- **所有 DB 操作通过 MyBatis XML 实现,禁止 QueryWrapper / LambdaQueryWrapper**
|
|
1295
|
+
- **所有 SELECT 必须含 WHERE delete_flag = 0**
|
|
1296
|
+
- Save 用 **FastJSON**:`JSONObject.parseObject(JSONObject.toJSONString(dto), Entity.class)`
|
|
1297
|
+
- Update 用 **Spring BeanUtils**:`BeanUtils.copyProperties(dto, entity, "createdBy", "creationDate", "versionNum")`
|
|
1298
|
+
- **异常在 Service 层抛出**,Controller 仅做参数空校验
|
|
1299
|
+
- 消息码格式 `{port}_{table_snake}_{三位序号}`,**禁止硬编码字符串**
|
|
1300
|
+
```
|
|
1301
|
+
|
|
1302
|
+
---
|
|
1303
|
+
|
|
1304
|
+
## 填写示例
|
|
1305
|
+
|
|
1306
|
+
以下以 **gushen-demo 角色管理(含主从表)** 为例,演示按本模板完成设计。
|
|
1307
|
+
|
|
1308
|
+
### §1 需求 ID 映射与模块上下文
|
|
1309
|
+
|
|
1310
|
+
#### 1.1 模块定位
|
|
1311
|
+
- **模块名称**: 2051-demo
|
|
1312
|
+
- **模块描述**: ECP 平台基础服务演示模块,承载角色管理、系统管理、用户角色关联等基础功能
|
|
1313
|
+
- **所属分层**: 平台支撑层
|
|
1314
|
+
- **模块结构**: 2051-demo-api + 2051-demo-model + 2051-demo-application
|
|
1315
|
+
|
|
1316
|
+
#### 1.2 上下文边界
|
|
1317
|
+
- **上游依赖**: sieiot-common-application、2021-sieiot-oauth-api
|
|
1318
|
+
- **下游调用**: 其他业务模块通过 Feign 调用角色查询能力
|
|
1319
|
+
- **外部集成**: Nacos、Redis(DawnRedis)、Kafka、Sentinel
|
|
1320
|
+
|
|
1321
|
+
#### 1.3 核心职责
|
|
1322
|
+
- 角色管理:角色的增删改查、角色类型、启用状态、入口类型
|
|
1323
|
+
- 系统管理:子系统的注册管理、系统编码、请求配置
|
|
1324
|
+
- 用户角色关联:维护用户与角色的 N:N 关系
|
|
1325
|
+
|
|
1326
|
+
### §2 业务实体与领域对象
|
|
1327
|
+
|
|
1328
|
+
#### 2.1 实体1: IotBaseRoleEntity
|
|
1329
|
+
|
|
1330
|
+
- **来源需求**: US-01, FUNC-01
|
|
1331
|
+
- **实体描述**: 定义系统中的角色,用于权限分配
|
|
1332
|
+
- **表名**: \`iot_base_role\`
|
|
1333
|
+
|
|
1334
|
+
| 字段名 | Java类型 | DB类型 | 长度 | 必填 | 说明 |
|
|
1335
|
+
| ------------ | -------- | ------- | ---- | ---- | ---------------------- |
|
|
1336
|
+
| roleId | Long | BIGINT | 20 | Y | 主键(雪花ID) |
|
|
1337
|
+
| roleCode | String | VARCHAR | 64 | Y | 角色编码 |
|
|
1338
|
+
| roleName | String | VARCHAR | 128 | Y | 角色名称 |
|
|
1339
|
+
| systemCode | String | VARCHAR | 64 | Y | 系统编码 |
|
|
1340
|
+
| remark | String | VARCHAR | 512 | N | 备注 |
|
|
1341
|
+
| tenantId | Long | BIGINT | 20 | Y | 租户ID |
|
|
1342
|
+
| tenantName | String | VARCHAR | 128 | N | 租户名称 |
|
|
1343
|
+
| roleType | Integer | TINYINT | 4 | N | 10=默认 null=非默认 |
|
|
1344
|
+
| orderNo | Integer | INT | 11 | N | 顺序号 |
|
|
1345
|
+
| enterType | String | VARCHAR | 32 | N | 入口类型 PC/WAP/APP/SR |
|
|
1346
|
+
| useStatus | Integer | TINYINT | 4 | N | 0=禁用 1=启用 |
|
|
1347
|
+
| tpsRoleCode | String | VARCHAR | 64 | N | 第三方角色编码 |
|
|
1348
|
+
| roleCategory | String | VARCHAR | 64 | N | 角色类别 |
|
|
1349
|
+
| expand | String | VARCHAR | 1024 | N | 扩展字段(JSON) |
|
|
1350
|
+
|
|
1351
|
+
- **主键**: roleId (Long, ASSIGN_ID)
|
|
1352
|
+
- **索引**: uk_role_code_system (UNIQUE role_code, system_code), idx_tenant_id (NORMAL tenant_id)
|
|
1353
|
+
- **关联**: IotBaseRoleEntity 1:N IotBaseUserRoleEntity
|
|
1354
|
+
|
|
1355
|
+
#### 2.2 实体2: IotBaseUserRoleEntity
|
|
1356
|
+
|
|
1357
|
+
- **表名**: \`iot_base_user_role\`
|
|
1358
|
+
|
|
1359
|
+
| 字段名 | Java类型 | DB类型 | 长度 | 必填 | 说明 |
|
|
1360
|
+
| -------- | -------- | ------ | ---- | ---- | ------------------ |
|
|
1361
|
+
| urId | Long | BIGINT | 20 | Y | 主键(雪花ID) |
|
|
1362
|
+
| tenantId | Long | BIGINT | 20 | Y | 租户ID |
|
|
1363
|
+
| userId | Long | BIGINT | 20 | Y | 用户ID |
|
|
1364
|
+
| roleId | Long | BIGINT | 20 | Y | 角色ID(关联主表) |
|
|
1365
|
+
|
|
1366
|
+
- **主键**: urId (Long, ASSIGN_ID)
|
|
1367
|
+
- **索引**: idx_role_id (NORMAL), idx_user_id (NORMAL)
|
|
1368
|
+
|
|
1369
|
+
#### 2.3 DTO: IotBaseRoleDto
|
|
1370
|
+
|
|
1371
|
+
| 字段名 | Java类型 | 必填 | 校验规则 | 说明 |
|
|
1372
|
+
| ------------------- | -------------------------- | ------------- | -------------------------------------------------------------------- | ------------ |
|
|
1373
|
+
| roleId | Long | 更新必填 | @NotNull(message="2051_iot_base_role_001", groups=updateIotBaseRole) | 主键 |
|
|
1374
|
+
| roleCode | String | 新增/更新必填 | @NotEmpty(message="2051_iot_base_role_002", groups={save,update}) | 角色编码 |
|
|
1375
|
+
| roleName | String | 新增/更新必填 | @NotEmpty(message="2051_iot_base_role_003", groups={save,update}) | 角色名称 |
|
|
1376
|
+
| systemCode | String | 新增/更新必填 | @NotEmpty(message="2051_iot_base_role_004", groups={save,update}) | 系统编码 |
|
|
1377
|
+
| creationDates | List\<Date\> | 否 | @JSONField(format="yyyy-MM-dd HH:mm:ss") | 创建时间范围 |
|
|
1378
|
+
| iotBaseUserRoleList | List\<IotBaseUserRoleDto\> | 否 | @Valid | 级联子表 |
|
|
1379
|
+
|
|
1380
|
+
- **验证分组**: `saveIotBaseRole` / `updateIotBaseRole`
|
|
1381
|
+
|
|
1382
|
+
#### 2.4 Ro: IotBaseRoleEntityRo
|
|
1383
|
+
|
|
1384
|
+
| 字段名 | Java类型 | 说明 |
|
|
1385
|
+
| ------------------- | ----------------------------- | ----------------------------- |
|
|
1386
|
+
| roleId | Long | 主键 |
|
|
1387
|
+
| roleCode | String | 角色编码 |
|
|
1388
|
+
| roleName | String | 角色名称 |
|
|
1389
|
+
| systemCode | String | 系统编码 |
|
|
1390
|
+
| creationDate | Date | @DateTimeFormat + @JsonFormat |
|
|
1391
|
+
| createdBy | Long | 创建人 |
|
|
1392
|
+
| lastUpdateDate | Date | @DateTimeFormat + @JsonFormat |
|
|
1393
|
+
| deleteFlag | Integer | 删除标识 |
|
|
1394
|
+
| versionNum | Integer | 版本号 |
|
|
1395
|
+
| iotBaseUserRoleList | List\<IotBaseUserRoleEntity\> | 关联用户角色列表 |
|
|
1396
|
+
|
|
1397
|
+
### §3 数据模型
|
|
1398
|
+
|
|
1399
|
+
#### 3.1 UML 类图
|
|
1400
|
+
|
|
1401
|
+
```mermaid
|
|
1402
|
+
classDiagram
|
|
1403
|
+
class IotBaseRoleEntity {
|
|
1404
|
+
+Long roleId
|
|
1405
|
+
+String roleCode
|
|
1406
|
+
+String roleName
|
|
1407
|
+
+String systemCode
|
|
1408
|
+
}
|
|
1409
|
+
class IotBaseUserRoleEntity {
|
|
1410
|
+
+Long urId
|
|
1411
|
+
+Long userId
|
|
1412
|
+
+Long roleId
|
|
1413
|
+
}
|
|
1414
|
+
IotBaseRoleEntity "1" --> "N" IotBaseUserRoleEntity : 包含
|
|
1415
|
+
```
|
|
1416
|
+
|
|
1417
|
+
#### 3.2 数据库表
|
|
1418
|
+
|
|
1419
|
+
**表1**: \`iot_base_role\`
|
|
1420
|
+
|
|
1421
|
+
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
|
1422
|
+
| ----------------- | -------- | ---- | ---- | ------ | -------------- |
|
|
1423
|
+
| role_id | BIGINT | 20 | Y | | 主键(雪花ID) |
|
|
1424
|
+
| role_code | VARCHAR | 64 | Y | | 角色编码 |
|
|
1425
|
+
| role_name | VARCHAR | 128 | Y | | 角色名称 |
|
|
1426
|
+
| system_code | VARCHAR | 64 | Y | | 系统编码 |
|
|
1427
|
+
| remark | VARCHAR | 512 | N | | 备注 |
|
|
1428
|
+
| tenant_id | BIGINT | 20 | Y | | 租户ID |
|
|
1429
|
+
| tenant_name | VARCHAR | 128 | N | | 租户名称 |
|
|
1430
|
+
| role_type | TINYINT | 4 | N | | 10=默认 |
|
|
1431
|
+
| order_no | INT | 11 | N | | 顺序号 |
|
|
1432
|
+
| enter_type | VARCHAR | 32 | N | | 入口类型 |
|
|
1433
|
+
| use_status | TINYINT | 4 | N | | 0=禁用 1=启用 |
|
|
1434
|
+
| tps_role_code | VARCHAR | 64 | N | | 第三方编码 |
|
|
1435
|
+
| role_category | VARCHAR | 64 | N | | 角色类别 |
|
|
1436
|
+
| expand | VARCHAR | 1024 | N | | 扩展字段 |
|
|
1437
|
+
| creation_date | DATETIME | | Y | | 创建日期 |
|
|
1438
|
+
| created_by | BIGINT | 20 | Y | | 创建人 |
|
|
1439
|
+
| last_update_date | DATETIME | | Y | | 最后更新日期 |
|
|
1440
|
+
| last_updated_by | BIGINT | 20 | Y | | 最后更新人 |
|
|
1441
|
+
| last_update_login | BIGINT | 20 | N | | 最后登录ID |
|
|
1442
|
+
| delete_flag | INT | 11 | Y | 0 | 删除标识 |
|
|
1443
|
+
| version_num | INT | 11 | Y | 0 | 版本号 |
|
|
1444
|
+
|
|
1445
|
+
- **主键**: role_id (BIGINT, ASSIGN_ID)
|
|
1446
|
+
- **索引**: uk_role_code_system UNIQUE(role_code, system_code), idx_tenant_id NORMAL(tenant_id)
|
|
1447
|
+
|
|
1448
|
+
**表2**: \`iot_base_user_role\`(同格式,含审计字段,ur_id 主键,索引 idx_role_id + idx_user_id)
|
|
1449
|
+
|
|
1450
|
+
#### 3.3 MyBatis XML 结构
|
|
1451
|
+
|
|
1452
|
+
IotBaseRoleDAO.xml 包含 BaseResultMap(22列全字段映射)、Base_Column_List、BASE_QUERY_CONDITION、findPagination(含 WHERE delete_flag = 0)。
|
|
1453
|
+
|
|
1454
|
+
### §4 业务行为与 Service 设计
|
|
1455
|
+
|
|
1456
|
+
#### 4.1 行为清单
|
|
1457
|
+
|
|
1458
|
+
| 行为 | 描述 | 关键规则 |
|
|
1459
|
+
| -------- | --------------------- | ----------------------------------------------------------------------------- |
|
|
1460
|
+
| 新增角色 | 创建角色+级联保存子表 | FastJSON转换 → 主表save → 遍历子表设roleId → 逐条save |
|
|
1461
|
+
| 更新角色 | 更新角色+子表先删后增 | getById校验 → BeanUtils合并(排除审计字段) → deleteByRoleId → saveListByRoleId |
|
|
1462
|
+
| 删除角色 | 主表+子表级联软删除 | deleteById(id,true) + 子表逐个deleteById |
|
|
1463
|
+
| 分页查询 | 按条件分页 | 默认creation_date DESC → DTO→Map → MyBatis XML |
|
|
1464
|
+
|
|
1465
|
+
#### 4.2 Service 接口
|
|
1466
|
+
|
|
1467
|
+
**IIotBaseRole** extends IBaseCommon\<IotBaseRoleEntity\>: findById / findPagination / saveIotBaseRole / updateIotBaseRole / deleteIotBaseRole
|
|
1468
|
+
|
|
1469
|
+
**IIotBaseUserRole**: findListByIotBaseRoleId / saveListByIotBaseRoleId / deleteByIotBaseRoleId
|
|
1470
|
+
|
|
1471
|
+
#### 4.3 Service 实现
|
|
1472
|
+
|
|
1473
|
+
**IotBaseRoleService** `@Component("iotBaseRoleService")`:
|
|
1474
|
+
- saveIotBaseRole: FastJSON DTO→Entity → this.save(entity) → 遍历子表设roleId + urId=null → iotBaseUserRoleService.saveListByIotBaseRoleId
|
|
1475
|
+
- updateIotBaseRole: getById → BeanUtils.copyProperties(排除createdBy,creationDate,versionNum) → this.update → deleteByIotBaseRoleId + saveListByIotBaseRoleId
|
|
1476
|
+
- deleteIotBaseRole: deleteById(id,true) + deleteByIotBaseRoleId(id)
|
|
1477
|
+
|
|
1478
|
+
#### 4.4 事务边界
|
|
1479
|
+
|
|
1480
|
+
| 方法 | @Transactional |
|
|
1481
|
+
| ------------------------- | ----------------------------- |
|
|
1482
|
+
| saveIotBaseRole | rollbackFor = Exception.class |
|
|
1483
|
+
| updateIotBaseRole | rollbackFor = Exception.class |
|
|
1484
|
+
| deleteIotBaseRole | rollbackFor = Exception.class |
|
|
1485
|
+
| findById / findPagination | 无 |
|
|
1486
|
+
|
|
1487
|
+
### §5 接口与 Controller 设计
|
|
1488
|
+
|
|
1489
|
+
#### 5.1 端点清单
|
|
1490
|
+
|
|
1491
|
+
| # | HTTP | 路径 | 说明 |
|
|
1492
|
+
| --- | ---- | ------------------------------ | ------------------------ |
|
|
1493
|
+
| 1 | GET | `/iotBaseRole/get-id` | 按ID查询角色详情(含子表) |
|
|
1494
|
+
| 2 | POST | `/iotBaseRole/find-pagination` | 分页查询 |
|
|
1495
|
+
| 3 | POST | `/iotBaseRole/save` | 新增角色 |
|
|
1496
|
+
| 4 | POST | `/iotBaseRole/update` | 更新角色 |
|
|
1497
|
+
| 5 | GET | `/iotBaseRole/delete` | 软删除 |
|
|
1498
|
+
|
|
1499
|
+
#### 5.2 Controller
|
|
1500
|
+
|
|
1501
|
+
```java
|
|
1502
|
+
@Tag(name = "IotBaseRoleController控制器")
|
|
1503
|
+
@RestController
|
|
1504
|
+
@RequestMapping("/iotBaseRole")
|
|
1505
|
+
public class IotBaseRoleController extends CommonAbstractService {
|
|
1506
|
+
|
|
1507
|
+
@Autowired private IIotBaseRole iotBaseRoleService;
|
|
1508
|
+
|
|
1509
|
+
@Override public IBaseCommon getBaseCommonServer() { return this.iotBaseRoleService; }
|
|
1510
|
+
|
|
1511
|
+
@GetMapping("/get-id") @CheckToken
|
|
1512
|
+
public ResponseData<IotBaseRoleEntityRo> findById(Long id) {
|
|
1513
|
+
return ResponseData.data(iotBaseRoleService.findById(id));
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
@PostMapping("/find-pagination") @CheckToken
|
|
1517
|
+
public ResponseData<Pagination<IotBaseRoleEntity>> findByPage(
|
|
1518
|
+
@RequestBody PaginationRequestData<IotBaseRoleDto> req) {
|
|
1519
|
+
return ResponseData.data(iotBaseRoleService.findPagination(
|
|
1520
|
+
req.getParams(), req.getPageIndex(), req.getPageRows(), req.getOrderByBean()));
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
@PostMapping("/save") @CheckToken
|
|
1524
|
+
public ResponseData<IotBaseRoleEntity> save(
|
|
1525
|
+
@Validated(IotBaseRoleDto.saveIotBaseRole.class) @RequestBody RequestData<IotBaseRoleDto> req) {
|
|
1526
|
+
IotBaseRoleDto dto = req == null ? null : req.getParams();
|
|
1527
|
+
if (dto == null) return ResponseData.fail(ResponseMsgCode.NOT_NULL_PARAM.msgCode);
|
|
1528
|
+
return ResponseData.data(iotBaseRoleService.saveIotBaseRole(dto));
|
|
1529
|
+
}
|
|
1530
|
+
|
|
1531
|
+
@PostMapping("/update") @CheckToken
|
|
1532
|
+
public ResponseData<IotBaseRoleEntity> update(
|
|
1533
|
+
@Validated(IotBaseRoleDto.updateIotBaseRole.class) @RequestBody RequestData<IotBaseRoleDto> req) {
|
|
1534
|
+
IotBaseRoleDto dto = req == null ? null : req.getParams();
|
|
1535
|
+
if (dto == null) return ResponseData.fail(ResponseMsgCode.NOT_NULL_PARAM.msgCode);
|
|
1536
|
+
return ResponseData.data(iotBaseRoleService.updateIotBaseRole(dto));
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1539
|
+
@GetMapping("/delete") @CheckToken
|
|
1540
|
+
public ResponseData deleteById(@RequestParam Long id) {
|
|
1541
|
+
iotBaseRoleService.deleteIotBaseRole(id);
|
|
1542
|
+
return ResponseData.success();
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
```
|
|
1546
|
+
|
|
1547
|
+
### §6 枚举与数据字典
|
|
1548
|
+
|
|
1549
|
+
| 枚举 | 存储值 | 值 |
|
|
1550
|
+
| --------- | ------------------ | -------------------- |
|
|
1551
|
+
| useStatus | Integer/TINYINT | 0=禁用, 1=启用 |
|
|
1552
|
+
| enterType | String/VARCHAR(32) | PC, WAP, APP, SR |
|
|
1553
|
+
| roleType | Integer/TINYINT | 10=默认, null=非默认 |
|
|
1554
|
+
|
|
1555
|
+
数据校验规则:roleId(2051_iot_base_role_001), roleCode(002), roleName(003), systemCode(004)。
|
|
1556
|
+
|
|
1557
|
+
### §7 异常处理
|
|
1558
|
+
|
|
1559
|
+
| # | 消息码 | 触发条件 | 抛出位置 |
|
|
1560
|
+
| --- | ---------------------- | ------------------------------ | ---------- |
|
|
1561
|
+
| 1 | 2051_iot_base_role_005 | get-id/update 时 roleId 无匹配 | Service |
|
|
1562
|
+
| 2 | UPDATE_DATA_NOT_EXIST | update 时 getById 返回 null | Service |
|
|
1563
|
+
| 3 | NOT_NULL_PARAM | Controller 收到 null dto | Controller |
|
|
1564
|
+
|
|
1565
|
+
### §8 缓存与性能(示例 — 角色缓存策略)
|
|
1566
|
+
|
|
1567
|
+
> 角色数据变更频率低、读取频率高,适合缓存加速分页查询和 get-id 查询。
|
|
1568
|
+
|
|
1569
|
+
#### 8.1 缓存策略
|
|
1570
|
+
|
|
1571
|
+
| 缓存数据 | 缓存原因 | 键格式 | 过期时间 |
|
|
1572
|
+
| ------------------ | ------------------------------ | ----------------------------- | -------- |
|
|
1573
|
+
| 角色详情 | get-id 高频读取,变更低频 | `demo:role:{roleId}` | 30 min |
|
|
1574
|
+
| 角色列表(按系统) | 分页查询按 systemCode 筛选频繁 | `demo:role:list:{systemCode}` | 10 min |
|
|
1575
|
+
|
|
1576
|
+
```java
|
|
1577
|
+
@Autowired
|
|
1578
|
+
private DawnRedis dawnRedis;
|
|
1579
|
+
|
|
1580
|
+
// 角色详情缓存:get-id 命中返回,未命中查 DB 后写入
|
|
1581
|
+
// 角色更新/删除时清除对应缓存键
|
|
1582
|
+
```
|
|
1583
|
+
|
|
1584
|
+
#### 8.2 并发控制
|
|
1585
|
+
|
|
1586
|
+
| 策略 | 实现 | 适用场景 |
|
|
1587
|
+
| -------- | ------------------------------------------------------------------------------------- | ---------------------------- |
|
|
1588
|
+
| 乐观锁 | version_num + OptimisticLockerInnerInterceptor | 角色更新(平台自动处理) |
|
|
1589
|
+
| 分布式锁 | `@Klock(keys = {"#dto.roleCode + ':' + #dto.systemCode"}, waitTime=60, leaseTime=60)` | 同一系统下角色编码唯一性校验 |
|
|
1590
|
+
|
|
1591
|
+
### §9 领域事件(示例 — 角色变更通知)
|
|
1592
|
+
|
|
1593
|
+
> 角色管理为平台基础模块,当前未定义领域事件。以下为占位示例,展示事件发布/消费的标准格式。
|
|
1594
|
+
|
|
1595
|
+
#### 9.1 发布事件
|
|
1596
|
+
|
|
1597
|
+
| # | 事件名称 | 触发条件 | Payload 关键字段 | 消费者 | 通知机制 |
|
|
1598
|
+
| --- | -------- | -------- | ---------------- | ------ | -------- |
|
|
1599
|
+
| — | 暂无 | — | — | — | — |
|
|
1600
|
+
|
|
1601
|
+
#### 9.2 消费事件
|
|
1602
|
+
|
|
1603
|
+
| # | 事件名称 | 来源 | Payload 关键字段 | 处理逻辑 |
|
|
1604
|
+
| --- | -------- | ---- | ---------------- | -------- |
|
|
1605
|
+
| — | 暂无 | — | — | — |
|
|
1606
|
+
|
|
1607
|
+
### §10 跨模块依赖(示例 — 角色管理依赖关系)
|
|
1608
|
+
|
|
1609
|
+
> 角色管理模块为平台支撑层基础模块,对外暴露 Feign Client 供其他业务模块查询角色信息,内部依赖 Nacos / Redis / Kafka 等平台基础设施。
|
|
1610
|
+
|
|
1611
|
+
#### 10.1 被依赖(对外提供)
|
|
1612
|
+
|
|
1613
|
+
| # | 调用方 | 依赖方式 | 说明 | 对应接口 |
|
|
1614
|
+
| --- | ---------------------------- | ---------------- | ---------------------------------------- | ------------------------------------------ |
|
|
1615
|
+
| 1 | 其他业务模块(用户权限校验) | Feign Client SDK | 查询用户的角色列表、校验用户是否有某角色 | `IIotBaseRole.findById` / `findPagination` |
|
|
1616
|
+
|
|
1617
|
+
#### 10.2 依赖(调用外部)
|
|
1618
|
+
|
|
1619
|
+
| # | 目标 | 依赖方式 | 说明 | 调用时机 |
|
|
1620
|
+
| --- | ------------------------- | ---------- | ---------------------------------------------- | ------------------------------ |
|
|
1621
|
+
| 1 | Nacos | 服务发现 | 服务注册与配置中心 | 应用启动时 |
|
|
1622
|
+
| 2 | Redis (DawnRedis) | 平台 SDK | 角色数据缓存 | get-id / findPagination 查询时 |
|
|
1623
|
+
| 3 | sieiot-common-application | Maven 依赖 | 平台公共基类(BaseEntity/BaseCommonServer 等) | 编译/运行时 |
|
|
1624
|
+
|
|
1625
|
+
### §11 非功能性需求(示例 — 角色管理)
|
|
1626
|
+
|
|
1627
|
+
| 维度 | 要求 | 说明 |
|
|
1628
|
+
| -------------- | ------------------------------ | ---------------------------- |
|
|
1629
|
+
| **性能** | get-id ≤500ms,分页查询 ≤1s | 角色数据量小,无复杂关联查询 |
|
|
1630
|
+
| **安全** | @CheckToken + RBAC 角色权限 | 管理员可编辑,普通用户只读 |
|
|
1631
|
+
| **数据一致性** | 乐观锁 version_num | 平台自动处理更新冲突 |
|
|
1632
|
+
| **审计日志** | 角色创建/更新/删除记录操作日志 | ECP 平台日志审计基础设施 |
|
|
1633
|
+
|
|
1634
|
+
### §12 测试场景(示例)
|
|
1635
|
+
|
|
1636
|
+
#### 9.1 正常场景
|
|
1637
|
+
|
|
1638
|
+
| # | 场景名称 | 前置条件 | 操作步骤 | 预期结果 | 测试数据 |
|
|
1639
|
+
| --- | ---------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------- | ------------------------------------ |
|
|
1640
|
+
| 1 | 正常新增角色(含子表) | 管理员已登录,roleCode+systemCode 不重复 | 1. POST /save 传入 roleCode="TEST", roleName="测试角色", systemCode="SIE-CRM", iotBaseUserRoleList=[{userId:2001}] | 返回 entity,含 roleId 和子表数据 | roleCode="TEST", roleName="测试角色" |
|
|
1641
|
+
| 2 | 正常分页查询 | 数据库存在角色记录 | 1. POST /find-pagination pageIndex=1, pageRows=10 | 返回分页数据,total 为总记录数 | pageIndex=1, pageRows=10 |
|
|
1642
|
+
|
|
1643
|
+
#### 9.2 异常场景
|
|
1644
|
+
|
|
1645
|
+
| # | 场景名称 | 前置条件 | 操作步骤 | 预期结果 | 关联异常 |
|
|
1646
|
+
| --- | ---------------- | -------------------- | ----------------------------- | --------------------------- | ------------------------ |
|
|
1647
|
+
| 1 | 查询不存在的角色 | roleId=999999 不存在 | 1. GET /get-id?id=999999 | 返回 2051_iot_base_role_005 | RecordNotExistsException |
|
|
1648
|
+
| 2 | 更新不存在的角色 | roleId=999999 不存在 | 1. POST /update roleId=999999 | 返回 UPDATE_DATA_NOT_EXIST | RecordNotExistsException |
|
|
1649
|
+
|
|
1650
|
+
#### 9.3 边界场景
|
|
1651
|
+
|
|
1652
|
+
| # | 场景名称 | 前置条件 | 操作步骤 | 预期结果 |
|
|
1653
|
+
| --- | ------------------------------ | --------------------- | -------------------------------------- | ------------------------------------ |
|
|
1654
|
+
| 1 | 子表为空的新增 | 管理员已登录 | 1. POST /save iotBaseUserRoleList=[] | 正常返回 entity,子表为空 |
|
|
1655
|
+
| 2 | 子表为空的更新(清空关联用户) | 角色原有 2 个关联用户 | 1. POST /update iotBaseUserRoleList=[] | 角色更新成功,所有旧关联用户被软删除 |
|
|
1656
|
+
|
|
1657
|
+
### §13 总结(示例)
|
|
1658
|
+
|
|
1659
|
+
#### 13.1 设计成果
|
|
1660
|
+
|
|
1661
|
+
| 成果项 | 数量/内容 |
|
|
1662
|
+
| ----------------- | -------------------------------------------------- |
|
|
1663
|
+
| 业务实体 | 2 个(IotBaseRoleEntity, IotBaseUserRoleEntity) |
|
|
1664
|
+
| DTO | 2 个(IotBaseRoleDto, IotBaseUserRoleDto) |
|
|
1665
|
+
| Ro | 1 个(IotBaseRoleEntityRo) |
|
|
1666
|
+
| Service 接口/实现 | 2 对(IIotBaseRole + IIotBaseUserRole) |
|
|
1667
|
+
| DAO + XML | 2 组(IotBaseRoleDAO.xml, IotBaseUserRoleDAO.xml) |
|
|
1668
|
+
| Controller | 1 个(IotBaseRoleController) |
|
|
1669
|
+
| REST 端点 | 5 个(标准 5 端点) |
|
|
1670
|
+
| 业务异常 | 3 个 |
|
|
1671
|
+
| 枚举类 | 3 个(useStatus, enterType, roleType) |
|
|
1672
|
+
|
|
1673
|
+
#### 13.2 关键设计决策
|
|
1674
|
+
|
|
1675
|
+
| 决策 | 说明 |
|
|
1676
|
+
| ------------------------- | ------------------------------------------------------------------------ |
|
|
1677
|
+
| 子表更新采用"先删后增" | 简化代码实现,事务保护原子性;子表数据量小(单角色关联用户数通常 < 100) |
|
|
1678
|
+
| 乐观锁 + 分布式锁双重保护 | version_num 处理普通并发更新;@Klock 处理编码唯一性校验的高并发写冲突 |
|
|
1679
|
+
| 角色缓存 30min TTL | 角色变更后主动清除缓存,确保数据一致性 |
|
|
1680
|
+
|
|
1681
|
+
#### 13.3 后续工作
|
|
1682
|
+
|
|
1683
|
+
- 编码实现:按 §2~§7 的设计生成 Entity/DTO/Ro/DAO+XML/Service/Controller
|
|
1684
|
+
- 编写 i18n:7 个 .properties 文件(default/zh_CN/zh_TW/en_US/vi_VN/th_TH/hu_HU)
|
|
1685
|
+
- Liquibase:按 §3.2 表结构创建 changelog
|
|
1686
|
+
- 单元测试:按 §9 测试场景编写
|
|
1687
|
+
- 集成测试:Controller 端点集成测试
|
|
1688
|
+
|
|
1689
|
+
#### 13.4 关键注意事项
|
|
1690
|
+
|
|
1691
|
+
- DTO 继承 `ReqeustCommonDataBean`(注意平台拼写,非 "Request")
|
|
1692
|
+
- Entity 中**禁止重复声明** BaseEntity 已有的审计字段
|
|
1693
|
+
- **所有 DB 操作通过 MyBatis XML 实现,禁止 QueryWrapper**
|
|
1694
|
+
- **所有 SELECT 必须含 WHERE delete_flag = 0**
|
|
1695
|
+
- Save 用 **FastJSON**:`JSONObject.parseObject(JSONObject.toJSONString(dto), Entity.class)`
|
|
1696
|
+
- Update 用 **Spring BeanUtils**:`BeanUtils.copyProperties(dto, entity, "createdBy", "creationDate", "versionNum")`
|
|
1697
|
+
|
|
1698
|
+
---
|
|
1699
|
+
|
|
1700
|
+
## 两阶段追溯关系(参考)
|
|
1701
|
+
|
|
1702
|
+
> 本文已合并为单阶段。以下仅展示历史追溯关系,供理解 OOA→OOD 映射逻辑。
|
|
1703
|
+
|
|
1704
|
+
```
|
|
1705
|
+
PRD(用户故事/业务规则/功能)
|
|
1706
|
+
│
|
|
1707
|
+
▼ 本文(单阶段一体化设计)
|
|
1708
|
+
需求 ID 映射(§1: US-xx / BR-xx / FUNC-xx / PERM-xx)
|
|
1709
|
+
│
|
|
1710
|
+
├─→ 业务实体与领域对象(§2: Entity/DTO/Ro 字段表)
|
|
1711
|
+
├─→ 数据模型(§3: UML 类图 → DDL → MyBatis XML)
|
|
1712
|
+
├─→ 业务行为与 Service 设计(§4: 行为清单 → 接口/实现 → 事务边界)
|
|
1713
|
+
├─→ 接口与 Controller 设计(§5: 端点 → Controller 代码骨架 → 权限矩阵)
|
|
1714
|
+
├─→ 枚举与数据字典(§6: 枚举值定义 → 校验规则)
|
|
1715
|
+
└─→ 异常处理(§7: 异常清单 → 消息码 → 抛出方式 → 流程图)
|
|
1716
|
+
│
|
|
1717
|
+
▼
|
|
1718
|
+
编码实现(OOP)
|
|
1719
|
+
```
|
|
1720
|
+
|
|
1721
|
+
---
|
|
1722
|
+
|
|
1723
|
+
## 填写建议
|
|
1724
|
+
|
|
1725
|
+
1. **严格遵循 ECP 平台约定** — 所有包路径、注解、命名规范以本文「项目约定」章节为准
|
|
1726
|
+
2. **禁止 QueryWrapper / LambdaQueryWrapper** — 所有 DB 操作走 MyBatis XML
|
|
1727
|
+
3. **禁止硬编码错误消息字符串** — 使用 `ResponseMsgCode` 枚举
|
|
1728
|
+
4. **禁止在 Entity 中重复声明审计字段** — BaseEntity 已提供
|
|
1729
|
+
5. **Save 用 FastJSON,Update 用 Spring BeanUtils**(排除 `"createdBy", "creationDate", "versionNum"`)
|
|
1730
|
+
6. **消息码格式** `{port}_{table_snake}_{三位序号}`,每个模块维护 7 个 i18n properties 文件
|
|
1731
|
+
7. **使用 Mermaid 可视化** — 实体关系用 classDiagram,业务流程用 flowchart,状态流转用 stateDiagram
|
|
1732
|
+
8. **按顺序填写** — 从 §1 到 §13 逐步完成,后续部分引用前面定义的内容,避免重复
|
|
1733
|
+
9. **每个设计条目标注** `**来源需求**:` 引用 PRD ID
|
|
1734
|
+
10. **禁止过度设计** — 简单 CRUD 不套用策略/工厂模式,选填部分仅在确需时填写
|
|
1735
|
+
11. **禁止虚构需求** — 分析内容必须来自 PRD,不做无依据的假设设计
|
|
1736
|
+
|
|
1737
|
+
---
|
|
1738
|
+
|
|
1739
|
+
## 附录:最终代码结构
|
|
1740
|
+
|
|
1741
|
+
> 以下为按本模板完成设计后应生成的完整工程目录树。工程结构遵循 ECP 三模块 Maven 约定(`{port}-{service}-api` + `{port}-{service}-model` + `{port}-{service}-application`)。
|
|
1742
|
+
> 各模块的文件数按实际设计内容确定(如有子表则多 1 组 DAO+XML+Service,如有自定义端点则多若干 Controller 方法)。
|
|
1743
|
+
|
|
1744
|
+
```
|
|
1745
|
+
{port}-{service}/ # 顶层 Maven 父工程
|
|
1746
|
+
├── pom.xml # 父 POM(parent: sie-irradiator:3.0.2)
|
|
1747
|
+
├── {port}-{service}-api/ # ========== 契约层 ==========
|
|
1748
|
+
│ ├── pom.xml
|
|
1749
|
+
│ └── src/main/java/com/sie/{product}/{service}/api/
|
|
1750
|
+
│ ├── client/ # @FeignClient 接口定义
|
|
1751
|
+
│ │ ├── {ExternalA}Client.java # 外部模块A的 Feign 调用契约
|
|
1752
|
+
│ │ ├── {ExternalB}Client.java # 外部模块B的 Feign 调用契约
|
|
1753
|
+
│ │ └── ... # (按 §10 跨模块依赖定义)
|
|
1754
|
+
│ └── dto/ # DTO(extends ReqeustCommonDataBean)
|
|
1755
|
+
│ ├── {Entity}Dto.java # 主表入参(含 save/update 校验分组)
|
|
1756
|
+
│ ├── {SubEntity}Dto.java # 子表入参(如有子表)
|
|
1757
|
+
│ ├── {Custom}Dto.java # 自定义操作入参(如批量审批、查询条件等)
|
|
1758
|
+
│ └── ... # (按 §2.3 DTO 清单生成)
|
|
1759
|
+
│
|
|
1760
|
+
├── {port}-{service}-model/ # ========== 数据层 ==========
|
|
1761
|
+
│ ├── pom.xml
|
|
1762
|
+
│ └── src/main/
|
|
1763
|
+
│ ├── java/com/sie/{product}/{service}/model/
|
|
1764
|
+
│ │ ├── entity/ # Entity(extends BaseEntity<T>)
|
|
1765
|
+
│ │ │ ├── {Entity}Entity.java # 主表实体(@TableName 反引号,每字段 @TableField + @Schema)
|
|
1766
|
+
│ │ │ ├── {SubEntity}Entity.java # 子表实体(含外键关联主表主键)
|
|
1767
|
+
│ │ │ └── readonly/ # Ro 只读视图对象(implements Serializable)
|
|
1768
|
+
│ │ │ └── {Entity}EntityRo.java # 详情视图(手动声明字段,含关联子表 List)
|
|
1769
|
+
│ │ └── dao/ # DAO 接口 + MyBatis Mapper XML(同包路径)
|
|
1770
|
+
│ │ ├── {Entity}DAO.java # 主表 DAO(extends BaseCommonDAO_HI)
|
|
1771
|
+
│ │ ├── {Entity}DAO.xml # 主表 XML(BaseResultMap → Base_Column_List → BASE_QUERY_CONDITION → findPagination)
|
|
1772
|
+
│ │ ├── {SubEntity}DAO.java # 子表 DAO(如有)
|
|
1773
|
+
│ │ └── {SubEntity}DAO.xml # 子表 XML(findListBy{父}Id 等)
|
|
1774
|
+
│ └── resources/
|
|
1775
|
+
│ └── liquibase/mysql/{module_name}/ # Liquibase 数据库变更管理
|
|
1776
|
+
│ ├── master.xml # 入口 changelog:引用版本 XML
|
|
1777
|
+
│ ├── v1.0.xml # 版本变更日志
|
|
1778
|
+
│ └── ddl/
|
|
1779
|
+
│ └── DDL_1.0_{date}.sql # 建表 DDL({table_name} + {sub_table_name})
|
|
1780
|
+
│
|
|
1781
|
+
└── {port}-{service}-application/ # ========== 实现层 ==========
|
|
1782
|
+
├── pom.xml
|
|
1783
|
+
└── src/main/
|
|
1784
|
+
├── java/com/sie/{product}/{service}/
|
|
1785
|
+
│ ├── {Service}Application.java # 启动类(extends CommonApplication)
|
|
1786
|
+
│ ├── api/controller/ # Controller(extends CommonAbstractService)
|
|
1787
|
+
│ │ ├── {Entity}Controller.java # 主表 REST 控制器(5 标准端点 + N 自定义端点)
|
|
1788
|
+
│ │ └── {SubEntity}Controller.java # 子表控制器(如有独立端点需求)
|
|
1789
|
+
│ ├── model/service/ # Service 接口(II{Entity} 双I前缀 + extends IBaseCommon)
|
|
1790
|
+
│ │ ├── II{Entity}.java # 主表 Service 接口
|
|
1791
|
+
│ │ ├── II{SubEntity}.java # 子表 Service 接口(如有)
|
|
1792
|
+
│ │ └── impl/ # Service 实现(extends BaseCommonServer)
|
|
1793
|
+
│ │ ├── {Entity}Service.java # 主表业务逻辑(CRUD + 级联 + 自定义方法 + 事务)
|
|
1794
|
+
│ │ └── {SubEntity}Service.java # 子表业务逻辑(findListBy{父}Id + saveListBy{父}Id + deleteBy{父}Id)
|
|
1795
|
+
│ ├── app/consume/ # Kafka Consumer(如有领域事件消费)
|
|
1796
|
+
│ │ └── {Event}Consumer.java # 事件消费者(@Configuration + Consumer<String> Bean)
|
|
1797
|
+
│ └── infra/
|
|
1798
|
+
│ ├── config/ # 配置类
|
|
1799
|
+
│ │ ├── DataSourceConfig.java # 数据源配置
|
|
1800
|
+
│ │ ├── MybatisPlusConfig.java # MyBatis Plus 分页插件 + 乐观锁插件
|
|
1801
|
+
│ │ └── SpringDocConfig.java # SpringDoc API 文档配置
|
|
1802
|
+
│ ├── constant/ # 常量
|
|
1803
|
+
│ │ └── ResponseMsgCode.java # 消息码枚举(字段校验 + 业务异常 + 通用消息码)
|
|
1804
|
+
│ ├── enumeration/ # 枚举类(按 §6.1 枚举值定义生成)
|
|
1805
|
+
│ │ ├── {Entity}StatusEnum.java # 主实体状态枚举
|
|
1806
|
+
│ │ ├── {Type}Enum.java # 业务类型枚举
|
|
1807
|
+
│ │ └── ... # (按 §6.1 逐一生成)
|
|
1808
|
+
│ ├── interceptor/ # 拦截器
|
|
1809
|
+
│ │ └── TokenInterceptor.java # @CheckToken 令牌校验拦截器
|
|
1810
|
+
│ └── utils/ # 工具类
|
|
1811
|
+
│ └── {Module}Utils.java # 模块专用工具(如日期计算、编码校验等)
|
|
1812
|
+
└── resources/
|
|
1813
|
+
└── config/ # i18n 多语言配置(7 个文件)
|
|
1814
|
+
├── {port}-{service}-application.properties # 默认(Unicode 转义)
|
|
1815
|
+
├── {port}-{service}-application_zh_CN.properties # 简体中文
|
|
1816
|
+
├── {port}-{service}-application_zh_TW.properties # 繁体中文
|
|
1817
|
+
├── {port}-{service}-application_en_US.properties # 英文
|
|
1818
|
+
├── {port}-{service}-application_vi_VN.properties # 越南语
|
|
1819
|
+
├── {port}-{service}-application_th_TH.properties # 泰语
|
|
1820
|
+
└── {port}-{service}-application_hu_HU.properties # 匈牙利语
|
|
1821
|
+
```
|
|
1822
|
+
|
|
1823
|
+
**目录树统计**:
|
|
1824
|
+
|
|
1825
|
+
| 层级 | 文件数 | 说明 |
|
|
1826
|
+
| --------------------- | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
1827
|
+
| -api (契约层) | N Feign Client + N DTO | 对外接口契约与入参定义(按 §10 依赖数 + §2.3 DTO 数) |
|
|
1828
|
+
| -model (数据层) | N Entity + N Ro + N DAO + N XML | 数据实体、只读视图与 MyBatis 映射(按 §2.2 实体数 + §2.4 Ro 数) |
|
|
1829
|
+
| -application (实现层) | N Controller + N Service接口 + N Service实现 + N Consumer + 3 Config + 1 常量 + N 枚举 + N 工具 + 7 i18n | 业务逻辑、REST接口、基础配置与国际化 |
|
|
1830
|
+
| Liquibase | 1 master + 1 version + 1 DDL | 数据库版本管理 |
|
|
1831
|
+
| **合计** | **约 30~50 个文件** | 覆盖完整的 3 模块工程结构 |
|
|
1832
|
+
|
|
1833
|
+
> **使用说明**:生成系统设计文档时,将上述 `{placeholders}` 替换为实际值:
|
|
1834
|
+
> - `{port}` = 端口号(如 3103)
|
|
1835
|
+
> - `{service}` = 服务名(如 crm-contract / sales-forecast)
|
|
1836
|
+
> - `{product}` = 产品线(gushen)
|
|
1837
|
+
> - `{Entity}` = 实体类名(PascalCase,如 ForecastOrder)
|
|
1838
|
+
> - `{SubEntity}` = 子表实体类名(如有)
|
|
1839
|
+
> - `{entity}` = URL 路径前缀(kebab-case,如 forecast-order)
|
|
1840
|
+
> - `{table_name}` = 数据库表名(snake_case)
|
|
1841
|
+
> - `{module_name}` = 模块业务名(如 sales_forecast)
|
|
1842
|
+
|
|
1843
|
+
---
|
|
1844
|
+
|
|
1845
|
+
## 模板优势
|
|
1846
|
+
|
|
1847
|
+
1. **单阶段一体化** — OOA 和 OOD 合并为一份模板,按业务关注点组织,一次完成"分析→设计"全过程
|
|
1848
|
+
2. **消除重复** — 同一实体字段只在 §2 定义一次,同一接口只在 §5 定义一次,不再在 OOA/OOD 中重复
|
|
1849
|
+
3. **全链路追溯** — 需求 ID 从 PRD → 设计文档 → 代码 贯穿始终
|
|
1850
|
+
4. **贴合 ECP 实际** — 所有包路径、注解、命名规范均以 `gushen-demo/` 实际代码和 11 份 ECP 规范为准
|
|
1851
|
+
5. **三模块架构** — 包含 -api(契约)、-model(数据+DAO+XML)、-application(实现)完整分层
|
|
1852
|
+
6. **覆盖全面** — 从需求 ID 映射到事务/缓存设计,13 个部分覆盖完整设计生命周期
|
|
1853
|
+
7. **主从表示例** — 以 gushen-demo 角色管理为例,完整展示 ECP 平台主从表级联操作模式
|
|
1854
|
+
8. **AI 友好** — 结构化格式便于 AI 理解和生成 ECP 工程代码
|
|
1855
|
+
|
|
1856
|
+
---
|
|
1857
|
+
|
|
1858
|
+
## 使用流程
|
|
1859
|
+
|
|
1860
|
+
```
|
|
1861
|
+
1. 读取 PRD 文件(docs/20-prd/)
|
|
1862
|
+
│
|
|
1863
|
+
2. 按本模板 §1~§13 完成设计文档 + 建表 SQL
|
|
1864
|
+
→ 保存到 docs/30-system-design/{crm|mom}/
|
|
1865
|
+
→ 文件命名:{模块编号}-{模块名}_system-design.md
|
|
1866
|
+
│
|
|
1867
|
+
3. 编码实现(OOP)
|
|
1868
|
+
→ 根据设计文档,严格按照 CLAUDE.md ECP 编码规范生成代码
|
|
1869
|
+
│
|
|
1870
|
+
4. 测试
|
|
1871
|
+
→ 单元测试 → 集成测试 → 性能测试
|
|
1872
|
+
```
|
|
1873
|
+
|
|
1874
|
+
---
|
|
1875
|
+
|
|
1876
|
+
**文档结束**
|
|
1877
|
+
|
|
1878
|
+
*本文件 v6.0 将原两阶段 OOA/OOD 21 个部分合并为单阶段 13 个部分。合并策略:按业务关注点组织(实体→数据→行为→接口→异常…),每部分从"分析"直接过渡到"设计",消除跨阶段重复定义。原 04-需求分析模板.md 和 05-系统设计模板.md 的内容已完全内嵌于本文。*
|