SNAPSHOT W7 已部署稳定态 — 凯迪ERP+OA一体化平台 (MET 73.3%)
恢复点(restore point)。别人改崩后可 git reset --hard 回到此提交。 == 此快照内容 == - 后端 oa-backend: 734 控制器 / 711 实体 (Spring Boot 3.2.5 + SQLite, 端口8091) - 前端 modern-ui/app: Vue3+Vite, 约700页 (构建产物已在 oa-backend/src/main/resources/static) - 数据库 oa-backend/data/oa.db: 含全部演示数据 (强制入库, 6.6MB) - 交接文档 go.md + go-code-reference/endpoints/entities/database.md - 多代理建设脚本 .claude/wf-*.js == 状态 == - 对 凯迪科技ERP_20260507.xlsx 合规 MET ~73.3% (PARTIAL 75: 34可建+6种子/bug+35外部硬天花板) - 安全: 5轮红队+5轮复检, default-deny分级鉴权, 连续零可利用 - W3~W7 累计补完436缺口; W8末轮(40缺口)为半成品(源码树可编译但未集成) - 运行: cd oa-backend; java -jar build/libs/oa-backend-0.1.0.jar --server.port=8091; admin/123456 == 排除(gitignore, 可再生) == node_modules / oa-backend/build / .jdks / *.log / Backup-ERP-* / 弃用的OFBiz核心(只保留modern-ui) 完整文件夹备份见同目录 Backup-ERP-20260615-191517/ (含上述全部, 仅缺 node_modules) 时间戳: 20260615-191517 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
export const meta = {
|
||||
name: 'erp-fullbuild-w1',
|
||||
description: '长尾全建W1:23个未建深的二级机构并行从0建缺失深水功能(新建文件+回传共享片段)',
|
||||
phases: [{ title: '长尾机构并行建设' }],
|
||||
}
|
||||
|
||||
const COMMON = `黄金模板(照抄风格):实体 domain/Financing.java、控制器 web/FinancingController.java(CRUD+业务动作+@Transactional级联)、服务 service/MrpService.java、聚合只读 web/FundPoolController.java(无实体跨表聚合)、前端 oa/pages/payment/financing.vue(MasterDataPage接真API)与 repayment.vue(自定义工作流页)。
|
||||
硬约束:①金额一律BigDecimal+com.kaidi.oa.common.Money.of/add/sub/nz(无裸double算钱;乘法BigDecimal.multiply再Money.of);②日期String(YYYY-MM-DD),算天/折旧用java.time.LocalDate/ChronoUnit;③控制器@RestController @RequestMapping("/api/oa/<资源复数>"),返回com.kaidi.oa.common.ApiResp.ok(),请求体record,找不到抛com.kaidi.oa.common.NotFoundException,校验抛com.kaidi.oa.common.ApiException(400/409,中文),状态迁移/级联写@Transactional;④仓库extends org.springframework.data.jpa.repository.JpaRepository<X,Long>派生查询;⑤前端真实页接你的真后端(import { http } from 相对路径的 api/http;http.get/post/patch/del已解包ApiResp.data;token键oa.token),列表CRUD套 pages/masterdata/MasterDataPage.vue,工作流/联动/看板页用el-table+el-dialog+el-card自定义;**现有 settingListStore('xxx') 假数据页要改接你新建的真后端**;⑥无emoji(图标@element-plus/icons-vue)、无渐变(纯色蓝主调#2f6fed)、排版/间距/承载形态慎重(美观+简单易用);⑦类名/表名按域加前缀,先 grep 确认与现有~136控制器/实体零撞名。
|
||||
**关键纪律**:①**只新建文件**或改你这个机构自己的页;凡需改共享文件(config/AuthInterceptor.java、data/oaModules.ts、service/TriggerRuleEngine.java、service/WorkflowService.java)一律**不自改**,放进 sharedFileSnippets(file+anchor原文+change改法+why)由主代理串行合并;②**不运行gradle/npm**(并行争用),逐文件仔细自审语法(import齐全/类型匹配/record字段一致/@Entity@Table+getter-setter完整/Vue标签与import配平);③加法式,绝不破坏现有7条联动链与审批流。`
|
||||
|
||||
const RESULT = {
|
||||
type: 'object', additionalProperties: false,
|
||||
properties: {
|
||||
unit: { type: 'string' },
|
||||
backendFiles: { type: 'array', items: { type: 'string' } },
|
||||
frontendFiles: { type: 'array', items: { type: 'string' } },
|
||||
authFinancePrefixes: { type: 'array', items: { type: 'string' } },
|
||||
authSensitiveRead: { type: 'array', items: { type: 'string' } },
|
||||
navEntries: { type: 'array', items: {
|
||||
type: 'object', additionalProperties: false,
|
||||
properties: { moduleId: { type: 'string' }, items: { type: 'array', items: {
|
||||
type: 'object', additionalProperties: false,
|
||||
properties: { key: { type: 'string' }, label: { type: 'string' }, kind: { type: 'string' }, path: { type: 'string' } },
|
||||
required: ['key', 'label', 'kind', 'path'] } } },
|
||||
required: ['moduleId', 'items'] } },
|
||||
sharedFileSnippets: { type: 'array', items: {
|
||||
type: 'object', additionalProperties: false,
|
||||
properties: { file: { type: 'string' }, anchor: { type: 'string' }, change: { type: 'string' }, why: { type: 'string' } },
|
||||
required: ['file', 'anchor', 'change', 'why'] } },
|
||||
endpoints: { type: 'array', items: { type: 'string' } },
|
||||
summary: { type: 'string' },
|
||||
},
|
||||
required: ['unit', 'backendFiles', 'frontendFiles', 'authFinancePrefixes', 'authSensitiveRead', 'navEntries', 'sharedFileSnippets', 'endpoints', 'summary'],
|
||||
}
|
||||
|
||||
const SLICE = '/Users/qiu/Desktop/ERP/requirements/_req_slices'
|
||||
const UNITS = [
|
||||
{ dept: '创新研发中心', sub: '产品开发部', mod: 'rd', file: `${SLICE}/01_创新研发中心__产品开发部.txt` },
|
||||
{ dept: '创新研发中心', sub: '申报服务部', mod: 'rd', file: `${SLICE}/02_创新研发中心__申报服务部.txt` },
|
||||
{ dept: '创新研发中心', sub: '知识产权部', mod: 'rd', file: `${SLICE}/03_创新研发中心__知识产权部.txt` },
|
||||
{ dept: '设计研究中心', sub: '咨询可研院', mod: 'design', file: `${SLICE}/05_设计研究中心__咨询可研院.txt` },
|
||||
{ dept: '设计研究中心', sub: '规划设计部', mod: 'design', file: `${SLICE}/06_设计研究中心__规划设计部.txt` },
|
||||
{ dept: '制造管理中心', sub: '环保设备制造中心', mod: 'mfg', file: `${SLICE}/08_制造管理中心__环保设备制造中心.txt` },
|
||||
{ dept: '制造管理中心', sub: '生物质肥料制造中心', mod: 'mfg', file: `${SLICE}/09_制造管理中心__生物质肥料制造中心.txt` },
|
||||
{ dept: '工程管理中心', sub: '质安部', mod: 'ehs', file: `${SLICE}/10_工程管理中心__质安部.txt` },
|
||||
{ dept: '工程管理中心', sub: '资料室', mod: 'archive', file: `${SLICE}/11_工程管理中心__资料室.txt` },
|
||||
{ dept: '工程管理中心', sub: '专利工法办', mod: 'rd', file: `${SLICE}/12_工程管理中心__专利工法办.txt` },
|
||||
{ dept: '工程管理中心', sub: '成本控制部', mod: 'budget', file: `${SLICE}/13_工程管理中心__成本控制部.txt` },
|
||||
{ dept: '运营管理中心', sub: '城镇污水运营中心', mod: 'ops', file: `${SLICE}/14_运营管理中心__城镇污水运营中心.txt` },
|
||||
{ dept: '运营管理中心', sub: '工业废水运营中心', mod: 'ops', file: `${SLICE}/15_运营管理中心__工业废水运营中心.txt` },
|
||||
{ dept: '市场部', sub: '经营部', mod: 'crm', file: `${SLICE}/16_市场部__经营部.txt` },
|
||||
{ dept: '市场部', sub: '办事处', mod: 'crm', file: `${SLICE}/17_市场部__办事处.txt` },
|
||||
{ dept: '市场部', sub: '分公司', mod: 'crm', file: `${SLICE}/18_市场部__分公司.txt` },
|
||||
{ dept: '内控部', sub: '审计监察部', mod: 'audit', file: `${SLICE}/23_内控部__审计监察部.txt` },
|
||||
{ dept: '品牌推广部', sub: '宣传部', mod: 'culture', file: `${SLICE}/24_品牌推广部__宣传部.txt` },
|
||||
{ dept: '品牌推广部', sub: '项目文化', mod: 'culture', file: `${SLICE}/25_品牌推广部__项目文化.txt` },
|
||||
{ dept: '行政', sub: '综合部', mod: 'hr', file: `${SLICE}/26_行政__综合部.txt` },
|
||||
{ dept: '行政', sub: '信息部', mod: 'itasset', file: `${SLICE}/27_行政__信息部.txt` },
|
||||
{ dept: '行政', sub: '办公室', mod: 'admin', file: `${SLICE}/28_行政__办公室.txt` },
|
||||
{ dept: '行政', sub: '后勤', mod: 'admin', file: `${SLICE}/29_行政__后勤.txt` },
|
||||
]
|
||||
|
||||
log(`长尾全建W1:${UNITS.length} 个机构并行建设`)
|
||||
phase('长尾机构并行建设')
|
||||
const results = await parallel(UNITS.map((u) => () =>
|
||||
agent(
|
||||
`你是资深全栈工程师,为凯迪 ERP 平台【把这个二级机构的深水功能从现状补建到真实可用】:${u.dept} / ${u.sub}。
|
||||
第一步 Read 需求规格:${u.file}
|
||||
第二步 grep/读码盘点该机构现状(很可能只有扁平 CRUD 或 settingListStore 假数据页,缺真实工作流/状态机/自动联动/跨模块取数)。
|
||||
第三步 建缺失的【深水功能】——为需求文件里每个功能模块补上它描述的真实能力(状态机流转/审批/自动计算/跨模块聚合取数/预警/台账),新建 实体+仓库+控制器(+服务) 与 真实前端页(接真后端);把现有 settingListStore 假数据页改接你的真后端。优先做该机构最核心、最能体现"真实工作流而非空壳"的 3-6 个模块,做深做真,而非每个模块都浅尝。
|
||||
前端页挂到模块 '${u.mod}'(在 oaModules 对应模块加 children,作为 sharedFileSnippets 回传,不自改)。
|
||||
|
||||
${COMMON}
|
||||
|
||||
返回结构化结果:新建文件、需合并的鉴权前缀(含金额/机密读→authSensitiveRead;财务写→authFinancePrefixes)、导航条目(moduleId='${u.mod}')、共享文件片段、关键端点、summary(说明做深了哪几个模块)。`,
|
||||
{ label: `建:${u.sub}`, phase: '长尾机构并行建设', schema: RESULT, model: 'sonnet' }
|
||||
)
|
||||
)).then((a) => a.filter(Boolean))
|
||||
|
||||
return { built: results.length, total: UNITS.length, results }
|
||||
Reference in New Issue
Block a user