恢复点(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>
102 lines
8.7 KiB
JavaScript
102 lines
8.7 KiB
JavaScript
export const meta = {
|
||
name: 'erp-p0-domain-build',
|
||
description: 'P0 剩余4整域(工程监理/结算复核/法务合规/实验室)并行从0建:各建新后端+前端文件,回传集成片段',
|
||
phases: [
|
||
{ title: 'P0域并行建设' },
|
||
],
|
||
}
|
||
|
||
const REF = `黄金模板(照抄风格/约定):
|
||
- 后端实体 oa-backend/src/main/java/com/kaidi/oa/domain/Financing.java、RepaymentPlan.java
|
||
- 后端仓库 repository/FinancingRepository.java、RepaymentPlanRepository.java
|
||
- 后端控制器 web/FinancingController.java(CRUD + 业务动作 + 跨域联动 + @Transactional删除级联)
|
||
- 前端 ofbiz-framework/plugins/modern-ui/app/src/oa/pages/payment/financing.vue(MasterDataPage接真API)、repayment.vue(自定义联动页)
|
||
- 鉴权数组 config/AuthInterceptor.java 的 FINANCE_PREFIXES / SENSITIVE_READ_PREFIXES
|
||
- 路由约定 requirements/ROUTE-CONVENTION.md(前端只在 data/oaModules.ts 对应模块 children 加条目→路由自动生成)`
|
||
|
||
const RULES = `硬约束(务必遵守):
|
||
1. 金额一律 BigDecimal + com.kaidi.oa.common.Money.of()收口(无乘法用 BigDecimal.multiply 再 Money.of);日期字段用 String(YYYY-MM-DD),到期/天数算用 java.time.LocalDate/ChronoUnit。
|
||
2. 控制器 @RestController @RequestMapping("/api/oa/<资源复数>"),返回 com.kaidi.oa.common.ApiResp.ok(...);请求体用 record;找不到抛 com.kaidi.oa.common.NotFoundException,校验失败抛 com.kaidi.oa.common.ApiException(400,"中文");DELETE 加 @Transactional 且级联清子表(参考 Financing.delete)。
|
||
3. 仓库 extends org.springframework.data.jpa.repository.JpaRepository<X,Long>,派生查询如 findByStatus/findByXxxIdOrderBy...。
|
||
4. **绝不编辑共享文件**(AuthInterceptor.java / oaModules.ts / router)——只新建文件,并把需要加的鉴权前缀与导航条目以结构化结果回传,由主代理中央合并。
|
||
5. 前端真实页放 oa/pages/<moduleId>/<key>.vue:列表CRUD套 pages/masterdata/MasterDataPage.vue(传 load/create/update/remove,用 import { http } from '../../api/http',http.get/post/patch/del 已解包 ApiResp.data);联动/工作流类用 el-table+el-button 自定义页(参考 repayment.vue)。**绝不用 settingListStore 假数据**——必须接你新建的真后端。
|
||
6. 铁律:无 emoji(图标用 @element-plus/icons-vue)、无渐变色(纯色蓝主调)、排版/间距/承载形态慎重(美观+简单易用)。
|
||
7. 类名/表名按域加前缀避免与现有~90控制器/实体重名(先 grep 确认不撞名)。
|
||
8. **绝不运行 ./gradlew / npm(多域并行会争用同一构建目录与守护进程)**——只写文件并逐文件仔细自审语法(import 齐全、类型匹配、record 字段与用法一致、@Entity/@Table/getter-setter 完整),编译由主代理统一执行修错。`
|
||
|
||
const DOMAINS = [
|
||
{
|
||
key: 'supervision', name: '工程监理部', moduleId: 'supervision',
|
||
slice: '/Users/qiu/Desktop/ERP/requirements/_req_slices/07_设计研究中心__工程监理部.txt',
|
||
brief: `审计10行9MISS整域空白。建监理域:监理项目(SupervisionProject:编号/项目/合同/总监/规模/阶段/状态)、监理记录(SupervisionInspection:旁站/巡视/平行检验/监理通知 类型+部位+结论+问题+整改状态)、计量支付(MeasurementPayment:期次/申报量/核定金额/审批状态)、竣工验收(CompletionAcceptance)。与现有 Project、DesignDoc(图纸版本)、SafetyCheck/QmsRecord 关联(存 projectId/contractId 外键即可)。已有 web/SupervisionLogController/SupervisionController 勿覆盖,新建 SupervisionProjectController 等承载新实体。前端挂 supervision 模块。`,
|
||
},
|
||
{
|
||
key: 'settlement', name: '结算复核/资金风控(结算中心)', moduleId: 'payment',
|
||
slice: '/Users/qiu/Desktop/ERP/requirements/_req_slices/19_支付中心__结算中心.txt',
|
||
brief: `审计:无 settlement/reconciliation 端点、复核工作流缺。建:结算单(Settlement:类型 付款/收款/内部, 金额, 关联付款单/合同, 状态 待复核/复核中/已复核/已驳回, 复核人1 reviewer1, 复核人2 reviewer2 双人复核)+复核动作端点(/{id}/review 记录复核人与意见,双人复核齐才置已复核)、银行对账(Reconciliation:银行账户, 对账日, 银行流水余额, 账面余额, 差额自动算, 状态)、资金计划(FundPlan:期间/计划流入/计划流出/预测余额)。风控:大额(阈值,如>100万)与重复(同收款方同金额近7天)付款拦截——做一个 /settlements/risk-check 端点对一笔拟付款返回风险标记。银企直连标注为外部对接项(留接口不实做)。前端挂 payment 模块(结算复核/银行对账/资金计划 三页)。`,
|
||
},
|
||
{
|
||
key: 'legal', name: '法务合规/内控矩阵', moduleId: 'legal',
|
||
slice: '/Users/qiu/Desktop/ERP/requirements/_req_slices/22_内控部__法务风险部.txt',
|
||
brief: `审计:名为内控部却无内控矩阵,仅借用 Contract/Seal。建专属实体:合规义务库(ComplianceObligation:法规/义务/责任部门/到期/状态)、内控矩阵(InternalControlMatrix:流程/风险点/控制措施/控制类型 预防/检查/控制频率/责任人/有效性)、诉讼仲裁(LitigationCase:案号/案由/对方/我方角色 原告/被告/金额/阶段/承办律师/结果)、法律咨询(LegalConsult:咨询事项/部门/法律意见/状态)、风险评估(RiskAssessment:风险/可能性/影响/等级/应对)。各配控制器。前端挂 legal 模块(合规义务/内控矩阵/诉讼仲裁/法律咨询/风险评估 页)。`,
|
||
},
|
||
{
|
||
key: 'lab', name: '实验室', moduleId: 'lab',
|
||
slice: '/Users/qiu/Desktop/ERP/requirements/_req_slices/04_创新研发中心__实验室.txt',
|
||
brief: `审计:样品/任务/试剂/报告多数 MISSING。已有 LabSample/LabInstrument 控制器可复用关联,勿覆盖。新建:检测任务(TestTask:样品id/检测项目/方法/仪器/检测人/结果值/判定 合格-不合格-OOS偏差/状态)、检测方法库(TestMethod:方法编号/名称/标准依据/适用样品)、试剂耗材(Reagent:名称/批号/有效期/库存量/单位; 出入库扣减)、检测报告(TestReport:报告编号/样品/结论/模板/电子签名人/签发状态)。样品全流程状态流转(收样→分配→检测→复核→报告→留样/处置)在 TestTask/LabSample 状态字段体现。前端挂 lab 模块(检测任务/方法库/试剂耗材/检测报告 页)。`,
|
||
},
|
||
]
|
||
|
||
const RESULT = {
|
||
type: 'object', additionalProperties: false,
|
||
properties: {
|
||
domain: { type: 'string' },
|
||
backendFiles: { type: 'array', items: { type: 'string' } },
|
||
frontendFiles: { type: 'array', items: { type: 'string' } },
|
||
authFinancePrefixes: { type: 'array', items: { type: 'string' }, description: '需加入 FINANCE_PREFIXES 的 /api/oa/xxx(含金额/资金写口)' },
|
||
authSensitiveRead: { type: 'array', items: { type: 'string' }, description: '需加入 SENSITIVE_READ_PREFIXES 的 /api/oa/xxx(含金额/机密/PII读口)' },
|
||
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'],
|
||
},
|
||
},
|
||
endpoints: { type: 'array', items: { type: 'string' }, description: '关键端点(供活体冒烟)' },
|
||
compiles: { type: 'boolean', description: '是否已在本机 ./gradlew compileJava 自检通过' },
|
||
summary: { type: 'string' },
|
||
},
|
||
required: ['domain', 'backendFiles', 'frontendFiles', 'authFinancePrefixes', 'authSensitiveRead', 'navEntries', 'endpoints', 'compiles', 'summary'],
|
||
}
|
||
|
||
phase('P0域并行建设')
|
||
const results = await parallel(DOMAINS.map((d) => () =>
|
||
agent(
|
||
`你是资深全栈工程师,为凯迪 ERP 平台【从0建设一个整域】:${d.name}。
|
||
第一步 Read 需求规格:${d.slice}
|
||
建设要点:${d.brief}
|
||
|
||
${REF}
|
||
|
||
${RULES}
|
||
|
||
交付:在仓库真实创建后端(实体/仓库/控制器)与前端页面文件并写入磁盘;前端页面必须接你新建的真后端 API。**不要运行 gradle/npm**(并行会争用构建),改为逐文件仔细自审语法。
|
||
返回结构化结果:列出新建文件、需主代理合并到 AuthInterceptor 的前缀、需加到 oaModules 对应模块的导航条目、关键端点、summary。compiles 字段填你"语法自审是否有把握"。`,
|
||
{ label: `建域:${d.key}`, phase: 'P0域并行建设', schema: RESULT }
|
||
)
|
||
)).then((a) => a.filter(Boolean))
|
||
|
||
return { built: results.length, results }
|