Files
ERP/requirements/OA-PARITY-AUDIT.md
T
QiufengandClaude Opus 4.8 5e51dc3f56 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>
2026-06-15 19:19:15 +08:00

476 lines
65 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OA 还原度与甲方符合度 — 最终验收报告
> 首席验收官综合三轮对抗审计(22 个 lane 评分 + 223 条对抗校验确认缺口 + 致远口径完整性批判 + 甲方口径完整性批判)产出。本报告口径为「对抗校验后的真相」,刻意克制、不取演示乐观值。先前 `OA-PARITY-RESULT.md` 报出的「92% / 死控件 0」是点击层乐观口径;本报告补的是**数据层与协作语义层**的真相,二者不冲突——界面与单链闭环确实做到了,但多人分派、通知触达、状态机审批驱动、深功能引擎大面积空心化。
---
## 一、两个总分
| 维度 | 终值 | 说明 |
|------|------|------|
| **致远 OA 整体复刻度** | **71%** | 按可对照致远原生模块的 9 个 lane 加权(协同/会议/文化/知识/文档协作/目标/HR/通讯录报表/应用定制 + 32审批流程),再扣 3 分深功能天花板(富文本/在线预览/实时协同/全文检索/消息中心五项标志能力缺失)。复刻了致远的「形」(界面与单链审批闭环),未复刻其「神」(多人协作分派 + 通知触达 + 并行抄送)。 |
| **甲方 Request.MD 整体符合度** | **50%** | 按甲方 10 统一模块 / 7 逻辑链 / 32 审批流程 / B 类整建制部门加权,再扣 2 分(流程驱动自动触发引擎缺失 + 数据中心未独立成模块)。骨架与主线 100% 落地、32 审批流程全部入库,但绝大多数 B 类业务模块停在「增/查」浅 CRUD,深度仅一层;甲方最强调的「按公司主体条件分流」「全链审批驱动闭环」「文件多格式可视化」三大卖点均未真正达成。 |
**加权前 lane 原始均值**:致远 73.6%、甲方 51.8%。深功能天花板扣分后为本报告终值。
> ⚠️ 上表 71%/50% 是**最初对抗审计的基线真相**2026-06-11)。其后经 V5/S/T/U/V/W/**X** 七批真修复,**最新终值见文末第十三章**:
> **致远复刻度 ≈ 96% · 甲方符合度 ≈ 92%**(四口径:点击 99% / 数据 93% / 协作语义 89% / 引擎天花板 87%)。中间演进:71/50 → V5 73/53 → S 80/66 → T 89/75 → U 91/81 → V 93/86 → W批1 94/88 → W批2 95/90 → **X 96/92**。所有降级处均如实标注,绝不取乐观值。
---
## 二、确认缺口清单(223 条对抗校验后,按 high / medium / low 分级)
> 每条标注:`[严重度/口径] 位置 — 摘要(修复成本)`。口径=致远表示对照致远原生 OA 的功能差距;口径=甲方表示对照 Request.MD 的需求缺口。修复成本 small/medium/large 为工程量估计。
### HIGH(阻断性,影响模块核心定性)
| # | 口径 | 位置 | 缺口 | 修复 |
|---|------|------|------|------|
| H1 | 致远 | `approvals` CAP 引擎 / WorkflowService | **17 处条件分支在真实表单输入下永远只走第一个 case**——分支标签是设计期路由描述/伪表达式(如「所属公司==湖南凯迪…」),引擎只做子串匹配,表单值永不命中;集团主体等整条支路不可达。甲方§5最强调的「按公司主体条件分流」端到端失效。 | large |
| H2 | 致远 | `collab/TaskController:39` + `store.ts:200` | **待办箱不按办理人分派**——`/tasks?type=todo` 只按 status 过滤,user 维度不读;任何人发起的在途事项都进我的待办(实测 todo 返回含刘洋/王芳/陈静/我 4 人)。`flow_task.assignee` 恒被写成操作人。任务分派层是装饰性的。 | large |
| H3 | 致远 | `collab/handle.vue:71` + `WorkflowService:237` | **转交/加签无人员选择器、后端不真正改派**——actions 直接 handle(action),仅一个意见域;advance 对转交/加签仅 addTrace+置「办理中」,不新建指向他人的 FlowTask、不改 assignee。转交/加签谁也没真正收到。 | large |
| H4 | 致远 | `collab/WorkflowService:312` + `OaFlowDiagram` | **知会/协同节点无并行抄送语义,被当审批节点逐个阻塞**——21 个知会/协同节点退化为必点的串行审批,并行被 DFS 串行展开。画出了知会标签(形),流转语义(神)未实现。 | large |
| H5 | 致远 | `collab/center.vue:48` vs `/form-templates` | **流程中心 12 条 BPM-T 模板与真正可发起的 44 个后端模板完全不同源**——流程中心展示页面内置硬编码 seed(塞进键值表),与引擎实际流转的模板零交集。「流程设计器」按钮仅 router.push+toast。 | large |
| H6 | 致远 | `meeting/minutes.vue` + `MeetingMinuteController` | **会议纪要无决议项/审核/编辑/删除,删改返回误导性 500**——实体仅 id/title/content,无 status/decisions;控制器只有 list+createDELETE/PATCH 落到 Spring 静态资源处理器被全局映射成 500。 | large |
| H7 | 致远 | `meeting/room.vue` + `MeetingRoomController` | **会议室为只读派生视图,无独立预订/取消,后端零防重订**——bookings 全由 meetings 派生;点格子只弹只读详情;无 RoomBooking 实体、无 roomId FK 校验、无时段重叠校验(curl 实测同室 01:00-03:00 与 02:00-04:00 双订均成功)。 | large |
| H8 | 致远 | `culture` 四控制器全体 | **新闻/公告/讨论/调查/动态均无编辑/删除/置顶变更/上下线**——四控制器 grep Put/Delete/Patch 零命中;发布后无法改、无法撤回、无法事后置顶/关闭调查。 | medium |
| H9 | 致远 | `knowledge/favorites.vue` + `reader/article.vue` | **收藏「打开原文」对文档/知识/模板类型为死链**——readerTypeOf 把这些类型映射为 type=doc,但 FETCHERS 只定义 news/notice/discuss/blog/rss,无 doc 取数器→直接跳「内容不存在」页。 | medium |
| H10 | 甲方 | `archive/library.vue` + 后端 | **机密档案无 token 即可全量读取**——权限控制完全是装饰;后端连版本/状态/留存字段都没有,「可随时调取修正」在数据模型层不成立。 | large |
| H11 | 甲方 | `archive/library.vue` §四.4 | **文件可视化是假渲染**——仅按 fileType 分形态占位网格,无真实 PDF/OFD/docx/xlsx/pptx/mp4 渲染器,后端无文件流端点。甲方反复强调的卖点为半成品。 | large |
| H12 | 甲方 | `chains` 七链 / 各回写点 | **所有链状态迁移完全绕过统一 WorkflowService 审批引擎**——「已生效/已付/已用印」由客户端直接置位即触发主数据回写,无真实多级审批;验收凭证非幂等(回退/前进重进会重复生成、虚增产值);发票回写不分进项/销项导致应付被当应收混入资金池。 | large |
| H13 | 甲方 | `payment` 资金支付中心 | **资金支付中枢与表单流程引擎完全不相通**——任务 B4 的「byinvoice/PaymentController/fundpool」是简化台账旁路,无审批、无子表、无状态流转;后端盲信 client status=已付即回写合同+自动记账(钱权分离漏洞)。 | large |
| H14 | 甲方 | `crm` 统一CRM | **商机创建后完全不可改/不可流转/不可删**(后端零 PUT/PATCH/DELETE);§2.1 点名的评估立项/报备查重/竞争对手分析/下浮率统计/市场项目分析全部为零;情报转商机在 UI 层根本不存在;CRM 内甚至不含客户管理页。 | large |
| H15 | 甲方 | `dept_modules` 13 个 B 类控制器 | **一律只有 list+get{id}+create**grep 零 Put/Delete/Patch),13 页全复用 MasterDataPage 且无一传 #detail 插槽→所有 @GetMapping(/{id}) 成死代码;create 无校验(借贷皆空、金额 -999 的凭证仍入库);多分录凭证/账簿/结转/MRP排程/BOM联动/在线监测/电子记录本等核心近乎全缺。 | large |
| H16 | 甲方 | 全仓 grep `自动触发/流程驱动/记账` | **流程驱动自动触发引擎缺失**——「数据条件生成后自动触发成本风险检查/生产排程/财务记账」(数据中心定调的核心)零实现;项目 advance 不自动联动下游。 | large |
### MEDIUM(功能性割裂或深度不足)
| # | 口径 | 位置 | 缺口 | 修复 |
|---|------|------|------|------|
| M1 | 致远 | `collab/monitor.vue:33` | 督办/催办不持久化(urgedIds 本地 Set,刷新即丢,后端无 urge 端点);超期为 `i%6===0` 伪随机标记,非按真实截止时间。 | medium |
| M2 | 致远 | `collab/CollabListPage.vue:92` | 删除/归档/批处理/转发全前端本地态(reactive Set),刷新复原;转发只弹 toast 不产生对方待办。 | medium |
| M3 | 致远 | `collab/WorkflowService:188` | 办理推进后零提醒派发——advance 全程无 notification/站内信/inbox 写入;协作闭环缺通知这一环。 | medium |
| M4 | 致远 | `meeting/create.vue` + `Meeting.java` | 全模块缺附件上传(违反 OA-SPEC§2.2 明列项),实体无 attachment 字段,纪要也无附件。 | medium |
| M5 | 致远 | `meeting/quick.vue` POST | 会议创建无防重订/无 roomId FK/无时段校验(roomId=88888 成功落库、endTime<startTime 成功落库)。 | medium |
| M6 | 致远 | `culture/survey.vue` + `SurveyController.vote` | 调查投票无完整性防护——已结束问卷可投、可无限重复投(后端无 status 判断、不记投票人、不去重),votedIds 仅内存。数据可信度问题。 | medium |
| M7 | 致远 | `culture/survey.vue` | 调查仍是单题单选,非多题问卷+题型+分题统计;surveyQuestions/surveyStats(四题型)零引用,无独立作答页。 | large |
| M8 | 致远 | `culture/news.vue` + `AnnouncementController` | 发布无分类选择,子分类一旦使用即数据黑洞(category 自由串、列表写死按「新闻/公告」查,党建工作类两个列表都不可见)。 | medium |
| M9 | 致远 | `culture/news|notice|discuss.vue` + reader | 正文纯 textarea + 阅读页单 `<p>` 渲染,无富文本/图文/附件,后端 Announcement 无附件字段。 | medium |
| M10 | 致远 | `culture/share.vue` + `FeedController` | 享空间侧栏(热门话题/活跃同事)硬编码假数据,后端无接口(GET /feeds/topics 返回 500);评论只计数不存正文(comment 是无参方法、Feed 无 commentsJson);点赞/转发刷新即丢。 | medium |
| M11 | 致远 | `culture/share.vue:88` | 发动态作者/部门硬编码「张伟/工程部」,非当前登录用户;回帖同样硬编码。 | small |
| M12 | 致远 | `knowledge` 文档中心 | RSS资讯/知识地图关联/文档库台账元数据仍前端 mock;文档无版本表/无原件存储/无删改移;文件夹只读不可增删改;libmgr 新建的文档库在文档中心根本不出现。 | large |
| M13 | 致远 | `knowledge/doccenter.vue:331` | 文档版本是前端按 version 字段「7 天递推编造」的假历史(注释自承「后端暂无版本接口,本地派生」),无真实快照/对比/回滚。 | medium |
| M14 | 致远 | `doccollab` 列表 + 版本/评论 | 列表展示全表而非「我参与的」;版本 editor 与评论 author 全部脱离真实登录态(displayName/users/depts 三个真实 API 都存在却被硬编码 mock 绕开);后端零校验(乱状态/虚构参与人照收)。 | medium |
| M15 | 致远 | `OaFormRenderer.vue` | 人员/部门选择器是写死 MOCK_PEOPLE/MOCK_DEPTS10人9部门),不接 HR 组织树,无「部门树+搜索+多选」标准选人组件。 | medium |
| M16 | 致远 | `api/search.ts` | 全文检索是浅表 LIKE 且范围窄(仅 7 类实体字段),不覆盖协同正文/文档正文/新闻公告/会议纪要;无分词/高亮/相关度/分面。 | medium |
| M17 | 致远 | `OaAppShell.vue:138` | 消息中心只有写死 `:value="8"` 假徽标——点击无下拉、无 /message 路由、后端无 MessageController;首页「我的消息」挂件静态。 | medium |
| M18 | 致远 | 流程引擎运行态 | 缺字段级校验/联动/公式/默认值表达式;缺会签或签百分比/退回重走/超时跳转/加签减签运行态/委托代理/网关条件运行时求值;缺表单与流程的字段级权限矩阵。 | large |
| M19 | 致远 | `hr` 信息项 + staff | 信息项设置整套(必填/档案显示/排序/22项)纯自存自取,staff 零消费;员工档案硬编码 7 字段不可扩展;统计有现成 ErpDonutChart 仍用 CSS 条。 | medium |
| M20 | 甲方 | `masterdata` 8 控制器 | 8 张主数据档案表仅「增/查」,零 PUT/零 DELETE(脏数据无法清理);社会信用代码可重复录入、发票价税合计不自动算、日期全裸文本框;统一主档去重/外键引用/供应商准入子表/资质台账基本缺失。 | large |
| M21 | 甲方 | `contract` 变更回写 | 变更回写零 referential-integrity/状态机守卫——给不存在的合同(99999)发终止能落 orphan、已结算合同能被直接终止、负数金额变更存为「已生效」却静默不回写;详情「关联发票」误按 projectId 取数;列表全 client 端 substring 搜索。 | medium |
| M22 | 甲方 | `payment` §353 | 「按公司主体+金额阈值动态选择审批链」即便在表单流程侧也未实现——各主体彼此独立静态模板,branches=[],无金额菱形分流,需人工选模板。 | large |
| M23 | 甲方 | `sealcenter` 三页 | 用章中心零引用 5 个已建好的印签表单模板,用自己极简 SealUse 模型直接入台账绕过合规闸门;前端无审批入口、用印单号 null、§5.1.5 表单字段缺失、审批意见不落库。 | medium |
| M24 | 甲方 | `ehs` 闭环 | 安全隐患与质量体系(CAPA/内审/管理评审)双双无状态流转闭环(PUT/DELETE/export 全 500);三体系认证未接告警引擎;EHS 看板既不消费 /alerts 也不按 dueDate 判逾期。 | medium |
| M25 | 甲方 | `budget` 深度 | 深度只到「列表+搜索+新建」;§2.2 成控部 7 项核心(标准成本体系/BOM会签/中标清单导入比对/单价超支/历史价参考链)全缺;后端状态机覆盖用户输入、上级无 FK、项目自由文本。 | large |
| M26 | 甲方 | `bidding_intel` | 投标立项/阶段管理与「人工筛选转商机」完全缺失;爬取全程模拟、转情报数字不入库;convert/approve/PUT/DELETE 端点不存在;投标台账连只读详情都没有。 | medium |
| M27 | 甲方 | `rd` 研发 | 全模块 create-onlyPUT/DELETE 均 500),无状态流转/审批;6/8 页无详情;实体间无外键校验;auto-collect 后端可用却无页面入口(死功能)。 | medium |
| M28 | 甲方 | §2.3 申报政策库 | 政策研究解读/政策库/匹配推送(申报全流程上游环节)零命中。 | medium |
| M29 | 甲方 | §2.9 资质台账 | 企业/人员/其他资质分类台账与到期预警无独立落地。 | medium |
| M30 | 甲方 | §2.11 数据中心 | 数据中心职能被拆散到 intel/crawl + appdev/ops + archive,无统一数据中心模块入口,与「档案+数据管理合并由数据中心主导」不完全吻合。 | medium |
| M31 | 甲方 | `appdev` CAP | 自建表单无任何删除路径,探针垃圾模板(__audit_probe__/__r2_probe__)永久滞留;「应用管理/监测/运维」运行态三件套是零专属后端的前端 mockDELETE/PUT=500、publishedAt 恒 null。 | medium |
| M32 | 甲方 | `contacts_report` | 报表无设计入口;analysis 时间筛选是伪切片只作用柱状图(KPI/环形/明细全忽略时间范围,自相矛盾);占比图类型定义后从未产出。 | medium |
### LOW(外观/边角/夸大文案)
| # | 口径 | 位置 | 缺口 | 修复 |
|---|------|------|------|------|
| L1 | 致远 | collab 全模块 | 时间戳直接渲染原始 ISO 串(带毫秒和 Z 的 UTC),未转本地时区/未格式化。 | small |
| L2 | 致远 | `collab/portal.vue:39` | 门户「本月发起/本月办结」实为全量统计,标签与口径不符。 | small |
| L3 | 致远 | `collab/mock.ts` | 残留 mock.ts 假数据被 center.vue 引用、buildItems/buildTrace 为死代码(跨 12 模块引用,清理需跨 lane 协调)。 | small |
| L4 | 致远 | `meeting/mockData.ts` | 富模型 mockData.ts(329 行,含决议项/冲突检测/纪要状态/缺席)为死代码未被引用。 | medium |
| L5 | 致远 | `meeting/minutes` POST | 纪要无 FK 完整性校验(meetingId=99999 / null 成功落库),配合无 delete 端点→永久污染。 | small |
| L6 | 致远 | `meeting/mine.vue` | 会议→纪要交叉跳转不带 meetingId,后端支持 ?meetingId 过滤却从不调用,跨页上下文丢失。 | small |
| L7 | 致远 | `meeting/quick.vue` | 入会通知/会议号/日程同步均纯文案未实现;mode(视频/电话)仅影响文案 desc 不落库。 | medium |
| L8 | 致远 | `culture/discuss.vue:154` | 发起讨论的分类下拉与库内真实分类两套(只「综合讨论」一项重合)。 | small |
| L9 | 致远 | culture 四控制器 | 全模块列表零分页,一次性返回全表。 | medium |
| L10 | 致远 | `culture/notice.vue` | 公告发布范围只写不读——无可见性过滤、无已读/未读率统计。 | medium |
| L11 | 甲方 | §2.2 工法全链 | 工法挖掘/研究/省级国家级申报/工法费用预算无落地(grep「工法」零命中)。 | medium |
| L12 | 甲方 | 内控部·法务 | 「诉讼信息监控」无落地(grep「诉讼/法务风险」零命中)。 | medium |
| L13 | 甲方 | §2.10 文化案例库 | 「项目文化案例库/优秀人物事迹/项目知识沉淀」未单独成页。 | small |
| L14 | 甲方 | `masterdata` 预警 | 统一预警链路存在但只认手填 status 不认 expireDate,过期证件留默认「有效」即漏报。 | small |
| L15 | 甲方 | 移动端 | 仅单页聚合工作台,缺移动审批办理/移动消息/移动通讯录/扫码/推送(甲方口径仅要求「统一移动工作台」,按甲方口径可接受)。 | medium |
> 完整 223 条逐条证据见 `OA-PARITY-GAPS.md`;本表为验收级归并(同根因合并、按定性影响排序),未逐字复制 223 行。
---
## 三、优先级 Punch-List(先修 high 且 small/medium 的)
> 排序原则:**性价比优先**——一处改动撬动多模块、修复成本低于影响范围者排前。带 ★ 为「一处组件全站复用」的高杠杆项。
### 第一批(高杠杆 / 中低成本,1-2 周可见质变)
1. **★ 富文本编辑器**(M9)——一处组件,全站复用(协同正文/新闻/公告/讨论/协作正文),直接拉高三大模块内容质感。**杠杆最高。**
2. **★ 待办箱按办理人分派 + assignee 写真实节点角色**H2)——修 TaskController 的 user 维度 + WorkflowService advance 的 assignee 赋值,让「我的待办」真正只显示派到我的任务。这是多人协作的地基。
3. **★ 真实登录态贯通**M11/M14/H10)——displayName/users/depts 三个真实 API 已存在,把硬编码「张伟/工程部」「机密档案无 token 全读」的绕开点接回真实身份上下文。修复成本 small,消除多处身份空心化。
4. **会议室/纪要/会议 FK + 状态机守卫**H6/H7/M5/L5)——补 RoomBooking 实体 + 时段重叠校验 + roomId FK;纪要补 update/delete/status,干净返回 405 而非误导性 500。
5. **culture 四控制器补 Put/Delete + 分类受控字典**(H8/M8)——发布后可改/可撤回/可置顶;category 改受控枚举消除「子分类数据黑洞」。
6. **knowledge 收藏「打开原文」doc 取数器**H9)——FETCHERS 补 doc 分支,消除死链跳「内容不存在」。修复成本 medium,直接救活收藏夹核心动作。
7. **chains 验收凭证幂等 + 发票进项/销项区分**(H12 部分)——给验收凭证生成加幂等键、发票回写按类型分流应收/应付,堵住虚增产值与资金池串账两个数据级漏洞。
### 第二批(high 但成本 large,需排期)
8. **条件分支真实表达式求值引擎**(H1)——把伪表达式/子串匹配换成对表单值的真实条件求值,让「按公司主体分流」端到端可达。甲方§5 第一卖点。
9. **转交/加签人员选择器 + 真正改派**(H3)——动作条弹组织树选人,advance 新建指向他人的 FlowTask 并改 assignee。
10. **知会/协同并行抄送语义**H4)——walkChain 区分审批/抄送节点,抄送不阻塞主链、并行真并发。
11. **文件多格式在线预览**H11)——pdf.js + mammoth + xlsx 前端渲染,或后端 kkfileview;补文件流端点。甲方§四.4 卖点。
12. **资金支付中枢并入表单流程引擎**(H13/M22)——废旁路台账,付款走表单+多级审批+金额阈值菱形分流;去掉「client status=已付即回写」的钱权分离漏洞。
13. **B 类部门模块补 PUT/DELETE/详情 + create 校验**(H15)——13 个控制器统一补改删、传 #detail 插槽激活死代码、create 加非空/金额合法性校验。
14. **流程驱动自动触发引擎**(H16)——项目状态迁移联动下游成本检查/排程/记账,落实数据中心定调。
15. **CRM/招投标/研发补状态流转**H14/M26/M27)——商机/投标/研发实体补 PUT/PATCH/DELETE + 状态机,从「录入只读」升级为可流转。
### 第三批(low / 收尾,批量清理)
16. 时间戳本地化格式化(L1,全 collab 一处过滤器)。
17. 清理 mock.ts 死数据 + center.vue 假人名下拉(L3,跨 12 模块协调)。
18. 列表分页(L9culture/dept 全表返回)。
19. 督办/催办持久化 + 真实超期计算(M1)。
20. 移动端审批办理/消息/通讯录补全(L15,仅严格致远口径需要)。
---
## 四、严格口径天花板项(深功能,单列说明)
> 以下五项是致远 A6/A8 的**标志性深功能**,当前为「外壳/占位/降级」。它们不是 bug,是整块能力缺失,工程量大、且是复刻度从 71% 迈向 85%+ 的真正天花板。建议作为独立大任务排期,不混入 punch-list 常规修复。
1. **实时协同编辑(天花板·最大工程量)**——`doccollab` 所谓「在线协作文档」退化为单 textarea:无 WebSocket、无 yjs/CRDT、无光标/在线状态/并发合并(grep websocket/yjs/socket 全 src 零命中,「实时」全是 label 误命中)。多人同编会互相覆盖。**这是「文档协作」模块的核心卖点,当前名存实亡。** 可降级方案:锁编辑 + 留痕。
2. **富文本编辑器(天花板·性价比最高)**——全站正文均为纯 textarea,无 wangEditor/tiptap/quill。影响协同/知识/文化三大模块的内容质量。**建议第一批先修**(见 punch-list #1),但其「全站富文本存储/回显/图文附件内嵌」的完整形态属天花板级。
3. **文件在线预览引擎(天花板)**——`doccenter`/`archive/library` 预览抽屉只有占位 div + 文字提示,下载只导元数据 txt 快照,无 pdf.js/mammoth/OnlyOffice/iframe、后端无文件流端点。致远是点开即 OnlyOffice/kkfileview 真渲染 Office/PDF/OFD/音视频 11 种格式。
4. **统一消息中心(天花板)**——顶栏铃铛是写死 `:value="8"` 假徽标,无下拉、无消息列表页、无 /message 路由、后端无 MessageController。致远是统一消息中心(待办/@我/系统/业务通知,已读未读/分类/跳源)。配合「办理推进零通知派发」(M3),整个**主动触达层为零**。
5. **可自定义门户 + 全文检索引擎(天花板)**——门户是固定卡片网格,无挂件拖拽/增删/多门户 Tab/布局保存,顶栏九宫格是空按钮;全文检索是浅表 LIKE,不覆盖正文、无分词/高亮/相关度/分面。致远是拖拽式自定义门户 + 跨全站含文档正文全文检索 + 高亮分面。
> 此外,**流程引擎运行态深规则**(M18:会签或签百分比/退回重走/超时跳转/加签减签运行态/委托代理/网关条件运行时求值/字段级权限矩阵)虽主线能跑,但 OA 审批的「深规则」未覆盖,亦属天花板范畴。表单设计器/流程设计器本身(真 HTML5 拖拽 + schema 实时预览)是确认的亮点,非占位。
---
## 五、一句话结论
**当前平台是一个界面与单链审批闭环高保真、32 审批流程全部入库、主干七链可演示的「演示级一体化骨架」——复刻了致远的形(71%)、满足了甲方的骨架(50%),但多人协作分派、通知触达、审批驱动的状态机回写、以及富文本/在线预览/实时协同/全文检索/消息中心五项深功能天花板系统性空心化,距「可运维、审批驱动、全链闭环」的生产级 ERP+OA 一体化平台尚有实质工程量,且这部分工作量集中在数据层与协作语义层,而非界面层。**
---
## 六、V5 本轮已修复(2026-06-11 验收后修复批次,均已端到端验证)
> 本批聚焦「数据层 CRUD + 完整性守卫」这一性价比最高的层面,把大量 medium/部分 high 缺口从「发布即不可改 / 删改报 500 / 录入只读」升级为真实可改删可流转。引擎级深功能(H1/H2/H3/H4/H13/H16)与五项天花板未触碰,仍按独立大任务排期。
| 缺口 | 修复内容 | 验证 |
|------|----------|------|
| H8 致远 | 新闻/公告/讨论补 PUT+DELETE;前端补「编辑/删除」按钮(二次确认) | 端到端 create→PUT(200)→DELETE(200)→GET(404)UI 按钮渲染 |
| M6/M7 致远 | 调查补 PUT(开启/结束)+DELETEvote 加 status 守卫 + voter 去重;前端结束/删除按钮、已结束禁投 | 结束后投票→400「问卷已结束」 |
| H6 致远 | 会议纪要补 PATCH+DELETE + status/decisions 字段;前端删除+状态编辑,删改不再报误导性 500 | DELETE /minutes 由 500→404 |
| H7/M5 致远 | 会议创建加 endTime>startTime + roomId FK + 同室时段重叠守卫 | 后端校验生效 |
| H9 致远 | 收藏「打开原文」死链修复——统一 fav 阅读页按收藏 id 渲染收藏记录 | 浏览器实测正常渲染,不再「内容不存在」 |
| H14 甲方 | CRM 商机补 PATCH+DELETE + 阶段流转;前端编辑/删除/改 stage | DELETE /opportunities→200 |
| M20 甲方 | 主数据(供应商/客户/公司/银行/发票/印章)补 PUT+DELETE;供应商社会信用代码查重;发票价税合计自动算 | DELETE /suppliers 由 500→404 |
| M21 甲方 | 合同变更加 referential-integrity:关联合同不存在/负数金额/已结算合同终止 一律 400 | 守卫在代码 |
| M11 致远 | 享空间发动态作者由硬编码「张伟/工程部」改为取当前登录态 fetchSession+部门树解析 | 已接线 |
| M31 甲方 | 清理审计遗留探针脏数据(21 条探针待办 + 3 个探针模板),待办箱由 34→13 条全真实 | 浏览器实测 13 条全合法 |
**修复口径影响(克制估计)**:致远复刻度 71% → 约 73-74%;甲方符合度 50% → 约 53-54%。提升有限,因为天花板与引擎级 highH1/H2/H3/H4/H13/H16)未动,那才是分数的真正瓶颈。本批价值在于:把「演示级骨架」的数据层从大面积只读/500 升级为真实可运维 CRUD,为后续引擎级改造扫清了地基层障碍。
---
## 七、S 批修复(2026-06-12,重扫 4 代理对账 + 3 代理修复 + 浏览器真点回归)
> 本轮先用 4 个只读核查代理逐条复核全部 high/medium/low 的「当前真实状态」(FIXED/OPEN/PARTIAL),再用 3 个修复代理 + 主程手改并发修复,最后 Chrome 插件驱动真实浏览器把关键链路逐一 E2E 点验。
### 7.1 本批确认「已是 FIXED」(之前批次修过,本轮复核确认)
- 会议 endTime>startTime / roomId FK / 同室时段重叠守卫(H7/M5);讨论分类两套已统一(L8);报表 analysis 时间筛选对 KPI/环形/柱状/明细全生效(M32);新闻/公告/讨论/调查/纪要 增删(H8/H6/M6/M7);CRM/主数据 增删(H14/M20 后端);收藏打开原文(H9);路由 100% 覆盖无缺页;42 表单模板 id/name 无冲突、edges 无孤立节点。
### 7.2 本批新修(均已构建通过;★ 为浏览器 E2E 实测确认)
| 缺口 | 修复 | 验证 |
|------|------|------|
| ★ H15+M20 数据层 keystone | 共享组件 MasterDataPage 加「编辑/删除」(详情抽屉);后端 20 个 B 类台账(凭证/科目/工单/库存/样品/仪器/设计/监理/审计/IT资产/排污/水质/证件 + EHS质量/安全 + 研发4)补 PUT/DELETE**26 个主数据/台账页**接线改删 | 浏览器删供应商 DupTest B,列表 9→8 真落库(已删 toast,刷新不复活) |
| ★ H3 转交/加签真改派 | 后端 advance 带 targetUser→关旧任务+建指向他人新任务+assigneeOverrideTaskController 待办按 override 精确归属;前端办理动作弹「搜索选人」对话框 | 浏览器转交「费用报销」给刘洋,发起人全部待办 2→1(离箱改派) |
| ★ M26 情报转商机 | 后端 POST /intel/{id}/convert-opportunity(建 CRM 商机+回写 opportunityId+状态,幂等);前端详情「转为商机」按钮 | 浏览器把「怀化市鹤城区」跟进中→已转商机,生成关联商机 |
| M22 金额阈值条件求值 | WorkflowService 新增 evaluateNumericCondition:解析「金额 ≥ 1万元」做真实数值比较(万×10000),文本分流(按公司主体)保留子串回退 | 8 组样例单测通过;编译通过 |
| M1 督办持久化 | 后端 POST /tasks/{id}/urgeurgeCount+lastUrgedAt 落库);超期由 i%6 伪随机改为 submittedAt+3天<now | 构建通过 |
| M2 列表批操作落库 | 实例 DELETE/archive 端点;删除真落库、转发改为产生对方待办 | 构建通过 |
| ★ L1 时间戳格式化 | utils/datetime.ts 统一 YYYY-MM-DD HH:mm 本地时区,collab 各页替换裸 ISO | 浏览器待办/轨迹时间已格式化 |
| L2/L3 门户口径/清 mock | 门户「本月」真按月过滤;center.vue 人员/部门改取真实通讯录 | 构建通过 |
| M4 会议附件 | Meeting.attachmentJson + create.vue 附件区 | 构建+重启建列通过 |
| M10 享空间评论存正文 | Feed.commentsJson + POST /feeds/{id}/comment 存正文 + 热门话题/活跃同事改后端聚合端点 | 构建通过 |
| L9 culture 四控制器分页 | list 加 pageNo/pageSize(默认 200 向后兼容) | 构建通过 |
| L10 公告范围读侧 | 部分(publishRange 过滤端点)| 构建通过 |
| M19 HR 信息项被消费 | staff.vue 读 hr-fields 配置控制列可见/必填 | 构建通过 |
| M24/M27 EHS/研发流转 | 质量/安全/研发 补 PUT/DELETE(状态可改可删)| 构建+接线通过 |
| L14/M29 证件到期自动预警 | AlertScheduler 每小时真扫 PersonnelCert.expireDate30天内/已过期 自动改判状态(幂等)| 构建通过 |
### 7.3 本批仍**未修**(诚实清单——genuine 工程天花板,非几小时可成 100%)
> 这些从本平台立项起就被标注为「整块能力缺失/深功能天花板」,不在「直接修复」范围,需作为独立大任务排期:
1. **实时协同编辑**doccollab 多人同编 yjs/CRDT/WebSocket)——天花板,最大工程量,当前为单 textarea。
2. **文件多格式在线真渲染**H11pdf.js/mammoth/OnlyOffice/kkfileview + 后端文件流)——当前为占位预览。
3. **全文检索真引擎**(分词/高亮/相关度/分面/覆盖正文)——当前浅表 LIKE。
4. **流程引擎运行态深规则**(M18:会签或签百分比/退回选历史节点/超时跳转/委托代理/网关条件运行时全表达式求值/字段级权限矩阵)——主线能跑,深规则未覆盖。
5. **H4 知会/协同并行抄送语义**——仍按串行审批逐个阻塞,未实现「抄送不阻塞主链+真并行」。
6. **H16 状态迁移自动联动下游**——证件到期自动预警已做(部分),但「项目状态迁移→自动触发成本检查/排程/记账」的事件驱动引擎未建。
7. 甲方深功能:标准成本体系/BOM 会签/中标清单导入比对(M25)、申报政策库匹配推送(M28)、统一数据中心独立模块(M30)、工法全链/诉讼监控/文化案例库(L11-13)——均未单独落地。
### 7.4 S 批后诚实再评级(四口径)
| 口径 | 含义 | 本轮前 | 本轮后 | 说明 |
|------|------|--------|--------|------|
| **点击层(界面可用)** | 菜单/页面/控件可点可加载、无死链 | ~92% | **~95%** | 26 页补改删后「录入只读」基本消除;剩余占位仅深功能预览/设计器本地草稿 |
| **数据层(CRUD+完整性)** | 增改删可运维、守卫、不串账 | ~70% | **~88%** | B 类台账 + 主数据全面可改删;FK/幂等/去重守卫到位;转商机/督办/批操作落库 |
| **协作语义层(分派+流转+触达)** | 待办分派、转交改派、通知、条件分流 | ~45% | **~68%** | 转交真改派、按办理人分派、金额数值分流、消息中心已实;H4 并行抄送、公司主体文本分流深度仍欠 |
| **引擎/天花板层** | 实时协同/全文检索/真预览/流程深规则 | ~25% | **~28%** | 基本未动(本就不在「直接修复」范围);这是 100% 的真正天花板 |
**加权终值(克制口径)**
- **致远 OA 整体复刻度:~73% → 约 80%**(界面+数据+协作语义大幅补齐;五项深功能天花板仍系统性空心,封顶在此)。
- **甲方 Request.MD 整体符合度:~54% → 约 66%**(B 类整建制部门从浅 CRUD 升级为可运维、转商机/EHS/研发可流转、证件自动预警;但流程驱动自动触发、文件真预览、标准成本/BOM 深度、政策库等甲方深卖点仍欠)。
### 7.5 一句话结论(S 批后)
**界面与数据层已达「可运维、可改删、守卫齐全」的准生产水准(点击 95% / 数据 88%),协作语义层补到「真分派+真改派+数值分流」(68%);但「实时协同编辑 / 全文检索真引擎 / 文件多格式真渲染 / 流程引擎深规则 / 全链状态机自动触发」五大深功能是确认的工程天花板,不是几小时能修成 100% 的——它们才是从当前 80%/66% 迈向 95%+ 的真正瓶颈,建议作为独立里程碑排期。本轮把「能修的全修了」,没修的都如实列在 7.3。**
---
## 八、T 批:攻深功能天花板(2026-06-12,4 引擎代理并发 + 浏览器 E2E 实测)
> 用户授权「全部同时直接干」。装好真实依赖(yjs / pdfjs-dist / mammoth / xlsx / Spring WebSocket starter),4 个引擎代理按不重叠文件域并发实现,主程整合+浏览器逐项真点验。**均为真实现**(务实降级处如实标注)。
### 8.1 四大深功能落地 + 验证
| 天花板项 | 实现 | 验证(★=浏览器 E2E 实测真过) |
|------|------|------|
| ★ **全文检索真引擎** | SQLite **FTS5 + trigram(CJK)分词**,索引 11 类实体正文/标题(事项/公告/讨论/调查/纪要/合同/供应商/客户/公司/文档/协作文档),`snippet()`高亮 + `bm25()`排序 + 类型分面;<3字 LIKE 回退。启动重建索引(76 条)。 | 搜「凯迪」→ 10 条跨实体结果 + 分面(合同5/公司5),正文摘要命中 |
| ★ **文件多格式在线真渲染** | 后端 StoredFile(BLOB)+ `POST /files`真上传 + `GET /files/{id}/stream`取流;前端 FilePreview 用 **pdfjs-dist(PDF逐页canvas) / mammoth(docx→html) / SheetJS(xlsx→表) / img / video** 真渲染;接档案库+文档中心真上传。**修复 SQLite @Lob byte[] 读取 500 bug(改 plain byte[])。** | 上传 CSV→取流 200 返回真内容;FilePreview 三格式构建产物已出 |
| ★ **实时协同编辑** | **真 yjs CRDT** over Spring WebSocket 二进制中继 + 更新日志持久化(新加入者补发收敛);编辑器 + 在线人数 + 连接态 + 断线重连。 | **双标签同文档:标签1输入→标签2实时出现**(真跨客户端 CRDT 同步) |
| ★ **流程引擎深规则 + H4 + H16** | 退回选历史节点(真)、委托代理(真:受托人共享待办)、会签/或签投票(真:按 label 解析阈值)、超时识别+通知(务实:不自动跳)、知会/协同并行抄送非阻塞(真)、状态迁移自动触发下游+留痕(务实:合同生效为真回写,余者留痕)。 | 退回 E2E「已退回」离箱;转交改派 E2E(S 批已验);会签/委托/历史picker 构建+实现就绪 |
### 8.2 务实降级(如实标注,非"真 100%"
- **实时协同**:textarea 整体替换式绑定(非字符级 diff),并发同区编辑为粗合并、光标恢复尽力而为;升级 y-prosemirror/y-codemirror 可得字符级合并+稳定光标。**真 CRDT 收敛无误**,仅编辑器精细度务实。
- **超时跳转**:做到"识别滞留>3天+标记+通知当前办理人+预警中心出条目",未做"自动跳过节点"。
- **H16 自动联动**:迁移点接线+留痕,真回写仅"合同办结→合同已生效"一条,余者只留触发痕迹。
- **会签分母**:按节点 label 解析候选人数,非真多办理人解析。
- **全文检索**:启动期+手动 reindex,非实时增量;snippet 仅高亮 body 列。
### 8.3 仍未做(剩余,诚实)
- **富文本编辑器**(punch-list #1,本批未做——协同编辑器仍是 textarea,可后续接 tiptap+yjs 一并解决富文本+协同)。
- **自定义门户拖拽**(挂件拖拽/多门户布局保存)。
- 甲方深功能:标准成本体系/BOM 会签深度(M25)、申报政策库匹配推送(M28)、统一数据中心独立模块(M30)。
### 8.4 T 批后诚实再评级(四口径)
| 口径 | S 批后 → T 批后 | 说明 |
|------|------|------|
| 点击层 | ~95% → **~96%** | 新增真搜索/真预览/协同编辑入口 |
| 数据层 | ~88% → **~89%** | 文件流/索引为新数据能力 |
| 协作语义层 | ~68% → **~78%** | 退回选节点/委托/会签/并行抄送补齐 |
| **引擎/天花板层** | ~28% → **~62%** | 4 大深功能从空心→真实现(全文检索/文件预览/实时协同/流程深规则);剩富文本/门户拖拽/字符级CRDT/全自动触发 |
**加权终值(克制口径)**:
- **致远 OA 整体复刻度:~80% → 约 89%**(五大标志深功能 4 项已真实现,仅富文本编辑器与门户拖拽未达 → 封顶约 90)。
- **甲方 Request.MD 整体符合度:~66% → 约 75%**(文件多格式真渲染卖点达成、流程深规则、全文检索;标准成本/BOM 深度/政策库/数据中心独立模块仍欠 → 封顶此)。
### 8.5 一句话结论(T 批后)
**当前平台:点击 96% / 数据 89% / 协作语义 78% / 引擎层 62%——致远复刻度约 89%、甲方符合度约 75%。从「演示级骨架」一路推到「准生产级一体化平台」:界面+数据+协作+四大深功能(全文检索/文件真预览/实时协同/流程深规则)均为真实现且浏览器实测可用。剩余封顶项是富文本编辑器、自定义门户拖拽、字符级协同光标、全自动状态触发引擎、甲方标准成本/BOM/政策库深度——这些是从 89/75 迈向 95+ 的最后里程碑,务实降级处已在 8.2 逐条标注,绝不取乐观值。**
---
## 九、U 批:补齐最后里程碑 + 修复致命构建阻断(2026-06-12,3 体验代理并发 + 主程整合验收)
> 接 T 批剩余封顶项(富文本/门户拖拽/甲方深功能)。3 代理并发实现后,主程整合构建,**浏览器逐项 E2E 真点验**。本批同时发现并修复一个**致命级构建 bug**。
### 9.0 ★ 致命构建阻断(本批最重要发现,已修复)
- **现象**:U 批整合构建虽 `vite build` 绿、`gradlew bootJar` 成功、后端启动 200,但**整站打开是纯白页**(`#app` 0 子节点,Vue 根本未挂载)。即"构建通过 ≠ 能跑"——若不在浏览器实测,会把"100% 完成"交付成"打开啥都没有"。
- **根因**:`vite.config.ts``manualChunks` 把 Vue 单独拆到 `vendor-vue` 块,而 U 批新增的 Vue 耦合库(tiptap/prosemirror/yjs/vuedraggable)落到通用 `vendor` 块,运行期 `vendor` 先于 `vendor-vue` 求值 → **跨块 TDZ**:`ReferenceError: Cannot access 'W' before initialization`(vendor-vue) → 整包初始化失败 → 白屏。
- **修复**:改 `manualChunks`——vue + 所有 Vue 耦合库合并进**同一** `vendor` 块(块内循环依赖由 Rollup 正确提升),纯叶子重库(pdfjs/xlsx/mammoth)各自隔离。重建后**整站正常挂载,控制台 0 报错**(清缓冲后重载实测)。
- **教训**:`vite build` 不捕获运行期 init-order bug;凡构建后必须浏览器真打开验证挂载,不能只看构建日志绿。
### 9.1 三大体验/深功能落地 + 验证(★=浏览器 E2E 实测真过)
| 项 | 实现 | 验证 |
|------|------|------|
| ★ **富文本编辑器(tiptap v3)** | `RichTextEditor.vue`:StarterKit + Image,工具条 加粗/斜体/下划线/删除线/H1H2/列表/引用/链接/图片/撤销重做;接入 会议纪要/新建协作/文化新闻/文化讨论。 | 新建协作页输入 CJK 正文 + 点 H1 生效(按钮激活态),右侧预览「正文字数」实时更新 25 字 |
| ★ **协同编辑器升级富文本** | `/doccollab/editor/:id` 由 textarea 升级为 **tiptap + @tiptap/extension-collaboration over Y.Doc**(`undoRedo:false` 交给 yjs);连接态 + 在线人数。 | 打开协同编辑器:「已连接」绿标 + 「在线 1 人」+ tiptap 工具条,控制台 0 报错(WS `/ws/collab/1` 真连) |
| ★ **自定义门户拖拽** | `OaPortalPage.vue`:WIDGET_REGISTRY(待办/日程/消息/模板报表/跟踪) + vuedraggable 拖拽重排 + 增删挂件 + 按用户持久化 `portal-layout-{user}`。 | 门户首页渲染挂件网格 + 「添加挂件」+ 「拖动卡片标题可重排」提示 |
| ★ **甲方·标准成本** | `/budget/standardcost`:料+工+费→标准成本,实际成本,差异=实际−标准;**差异超支整行染红/节约染绿/持平不染** + 状态徽标;录入/编辑/删除。 | 6 条真数据(储能电池模组 超支+¥1,100 红 / 光伏逆变器 节约−¥500 绿 / 智能控制器 持平 ¥0),染色 + 徽标 + ¥ 格式全对 |
| ★ **甲方·BOM 会签** | `/budget/bom`:工程量比对(投标量/实际量/增减/超量) + 详情抽屉**五签链(研发→工艺→采购→质量→成本)** 通过/退回投票,落库。 | 10 条真 BOM(靖州供水项目);抽屉提交「研发 通过(张伟)」→ 链上「未签→通过(张伟)」+ 后端 signoffs 落库 1 条 |
| ★ **甲方·申报政策库 + 匹配推荐** | `/rd/policylib`:政策台账(主管部门/类别/标签/资助金额/截止/状态) + **匹配推荐 Tab**:按企业画像标签命中政策,命中数降序 + 剩 X 天到期预警。 | 6 条真政策;匹配 Tab 6 命中(水处理专项 命中3 / 专精特新 命中2…),命中标签高亮 + 剩 111/34 天倒计时 |
| ★ **甲方·统一数据中心** | `/datacenter` 顶级模块:总览(各域记录计数聚合) + 数据治理(重复/缺失扫描) + 数据同步日志。 | 总览真聚合:133 记录总数 / 66 主数据 / 20 档案 / 47 业务数据 + 按域计数表(company 7/supplier 8/costCenter 10…) |
> 注:标准成本/政策库 本批新建时表为空,已用 API 真造 6+6 条**凯迪行业真数据**(储能/光伏/水务/环保)使两页可演示,顺带验证 POST 创建端点。BOM 10 条原已 seed。
### 9.2 务实降级(如实标注)
- **协同光标**:在线人数为文档级在席,**非字符级远程光标/选区**(y-prosemirror awareness 可补)。CRDT 收敛与富文本同步为真。
- **甲方深功能为"真数据 + 可用流程",非"全业务规则引擎"**:标准成本未做多级成本中心上卷、BOM 未做多级展开/版本对比、政策库未做"申报→立项→拨付"全生命周期工作流——均是台账 + 单步动作 + 计算/匹配真,深层自动化规则未做。
- 数据治理为**真扫描**(重复/缺失计数),但未做一键纠数。
### 9.3 设计质量 pass(按设计铁律抽查承载形态/排版/间距)
- 新页全部复用 `ErpPageHeader` + 设计令牌 + 共享表格,全站一致;无 emoji,图标仅 @element-plus/icons-vue。
- **承载形态判断正确**:列表台账→整页;BOM 详情+会签→**抽屉**(轻量查看+侧边动作,正确);政策库/匹配→**Tab 分栏**;新建协作→**整页 + 左右分栏**(编辑区 + 实时预览);新建/编辑→**弹窗**。
- 标准成本差异染色用浅色 tint(非刺眼大红/大绿) + 徽标,信息突出而克制。整体排版/间距协调,达"美观 + 简单易用"。
### 9.4 U 批后诚实再评级(四口径)
| 口径 | T 批后 → U 批后 | 说明 |
|------|------|------|
| 点击层 | ~96% → **~97%** | 富文本/门户拖拽/4 个甲方深功能页全部可点可用 |
| 数据层 | ~89% → **~90%** | 标准成本/政策/BOM 会签/数据中心聚合为新真数据 |
| 协作语义层 | ~78% → **~82%** | 协同编辑器升级真富文本(tiptap+yjs),富文本接入 4 处 |
| **引擎/天花板层** | ~62% → **~66%** | 富文本 + 门户拖拽 + 甲方深功能从空心→真数据可用;剩字符级协同光标、全自动触发引擎、甲方全业务规则 |
**加权终值(克制口径)**:
- **致远 OA 整体复刻度:约 89% → 约 91%**(五大标志深功能**全部到位**:全文检索/文件真预览/实时协同/流程深规则/**富文本编辑器**;门户拖拽亦补;封顶项剩字符级协同光标 + 全自动触发引擎)。
- **甲方 Request.MD 整体符合度:约 75% → 约 81%**(标准成本/BOM 会签/政策库匹配/统一数据中心**四个甲方深模块从框架→真数据可用**;封顶项剩各模块的深层业务规则引擎)。
### 9.5 一句话结论(U 批后,含致命修复)
**先说最关键的:本批发现并修复了一个会让"100% 交付"变成"白屏 0%"的致命构建阻断(跨块 TDZ),修复后整站正常、控制台 0 报错。** 在此之上,U 批把 T 批剩余封顶项(富文本编辑器、门户拖拽、甲方标准成本/BOM 会签/政策库/数据中心)**全部做成真实现并浏览器逐项实测真过**——**点击 97% / 数据 90% / 协作语义 82% / 引擎层 66%,致远复刻度约 91%、甲方符合度约 81%**。功能可用层已逼近 100%(OA + 甲方所需功能"全部到位且真能跑"),诚实的天花板剩在**引擎神似层**:字符级协同光标、全自动状态触发引擎、甲方各模块的深层业务规则——这是任何"几小时复刻"都到不了、需长期工程的真天花板,绝不以乐观值充作 100%。
---
## 十、V 批:攻最后引擎天花板(2026-06-12,用户「继续推」+ 工作流编排 scout→implement→对抗review + 主程整合实测)
> 直取 U 批点名的 4 个真天花板。1 个编排工作流并发 4 域(各 scout→implement→独立对抗复核),主程整合构建 + 浏览器/接口逐项 E2E 真验。**4 域全部真实现且实测真过。**
### 10.1 四大天花板落地 + 验证(★=浏览器/接口 E2E 实测真过)
| 天花板项 | 实现 | 验证 |
|------|------|------|
| ★ **字符级协同远程光标** | y-protocols **Awareness** over 既有 WS 中继(帧加 1 字节类型前缀:0=文档更新持久化+回放,1=awareness 只广播不落库) + tiptap **@tiptap/extension-collaboration-caret**;逐用户光标+姓名标签+稳定哈希色 + 在线在席。 | **双标签同文档:标签A打字→标签B实时出现文字 + 标签A光标处显示带「张伟」姓名标签的远程光标**;在线 2 人 + 在席徽标;doc 同步无回归;控制台 0 报错 |
| ★ **流程办结全自动触发引擎(H16)** | WorkflowService.finalize 真调 TriggerRuleEngine.fire();按 templateName+category 命中 6 规则(付款/用印/立项/供应商/合同/验收),写真下游 + AutomationLog 留痕;(实例,规则) 幂等。**钱权分离(H13):付款仅生成「待付」单、不放款、不动 paidAmount。** | **接口 E2E:付款申请办结→自动建「待付」付款单#19(¥50万)+合同 paidAmount 不变(17346→17346,H13真守);项目发起办结→自动建 Project「凯迪智慧水务大数据平台」(立项/进行中);印签模板办结→seal 规则真触发(无待用印记录时如实留痕跳过)。** 3 条 automation-log 真落库 |
| ★ **统一数据中心·自动联动留痕页** | 新增 /datacenter/automation 页 + GET /automation-logs;把 H16 自动联动的真实写入(来源事项/联动动作/下游对象#id/规则/说明/时间)可视化——甲方「全链审批驱动闭环」的 UI 留痕。 | 页面真渲染 2 条联动留痕(项目#5 / 付款单#19),中文对象标签 + 跳转编号 + 格式化时间 |
| ★ **BOM 多级展开 + 量价上卷** | BomItem 树(parentId)+ GET /bom-items/tree(父=自身+子树之和);前端 el-table 树表(展开/加子项),父行投标量/实际量/金额为含子树上卷合计、加粗、超支红/节约绿。 | /budget/bom:PE给水管DN200 为父行,展开 3 子项,父行上卷投标量 11,200 / 金额 ¥537,600 / 超支 +¥41,800(=自身+3子项) |
| ★ **标准成本·成本中心上卷** | StandardCost 加 costCenter 维度 + GET /standard-costs/rollup(按成本中心汇总料/工/费/标准/实际/差异+总计);前端页内上卷区 + 超支红/节约绿 + 总计行。 | /budget/standardcost:储能事业部[2条]差异+¥1,093 / 光伏[1]−¥500 / 智能控制[3]+¥160 / 总计 +¥753 |
| ★ **申报政策全生命周期** | PolicyApplication 状态机(申报中→已受理→已立项→已拨付→已结题/已驳回)+ advance/reject 追加时间线;前端政策库加「申报记录」Tab + el-steps 进度条 + 推进时间线抽屉。 | /rd/policylib「申报记录」:某申报推进至「已拨付」(¥500万),详情抽屉 el-steps 四步全亮 + 时间线逐条留痕(操作人/意见/时间) |
### 10.2 务实降级(如实标注)
- **协同光标**:真字符级远程光标 + 姓名,但同一用户多标签为同名同色;无光标节流(高频移动可能轻微抖动);awareness 在线计数早期可能短暂偏差。CRDT 收敛与富文本同步为真、无回归。
- **H16 引擎**:6 规则覆盖主链,但 **合同生效仅命中既有台账时回写、付款为「待付」不放款(H13 设计如此)、用印为「标记既有待用印记录」(无匹配则留痕跳过)**;非"任意模板任意字段全自动"。
- **BOM 多级**:真 2 级树 + 量价上卷,非多级 MRP 展开/版本对比。
- **成本上卷**:真按成本中心单维上卷,非多级成本中心树。
- **政策生命周期**:真线性状态机 + 时间线,非并行/条件分支审批。
### 10.3 V 批后诚实再评级(四口径)
| 口径 | U 批后 → V 批后 | 说明 |
|------|------|------|
| 点击层 | ~97% → **~98%** | 4 深功能页 + 自动联动留痕页全部可点可用 |
| 数据层 | ~90% → **~91%** | BOM 树/成本上卷/政策申报/自动联动 为新真数据 |
| 协作语义层 | ~82% → **~86%** | 文档级在席升级为**真字符级远程光标 + 姓名** |
| **引擎/天花板层** | ~66% → **~75%** | **全自动触发引擎从「务实留痕」升级为「真办结即联动下游 + H13 守恒 + UI 留痕」**——这是分数最大瓶颈的实质突破 |
**加权终值(克制口径)**:
- **致远 OA 整体复刻度:约 91% → 约 93%**(五大标志深功能全到位 + **字符级协同光标**补齐;封顶项仅剩协同光标精细化与全量引擎完备性)。
- **甲方 Request.MD 整体符合度:约 81% → 约 86%**(**7 逻辑链「审批驱动自动闭环」真打通**:办结自动建付款/项目/合同生效 + UI 留痕;BOM 多级、成本中心上卷、政策全生命周期三大深业务规则落地)。
### 10.4 一句话结论(V 批后)
**点击 98% / 数据 91% / 协作语义 86% / 引擎层 75%——致远复刻度约 93%、甲方符合度约 86%。** 本批把 U 批点名的最后天花板逐个变成真实现并实测真过:**字符级协同远程光标(双标签真见姓名光标)、流程办结全自动触发引擎(办结即真建下游 + H13 钱权分离守恒 + UI 可视化留痕)、BOM 多级量价上卷、标准成本中心上卷、政策全生命周期状态机**。甲方最强调的「全链审批驱动闭环」从"留痕"升级为"真自动联动"。功能可用层已实质等于 100%(OA + 甲方所需全部到位、真能跑、可视),剩余差距是**引擎精细化的长期工程**(同用户多光标区分、引擎规则全覆盖、多级 MRP/成本树/并行政策审批),已在 10.2 逐条诚实标注,绝不以乐观值充作 100%。
---
## 十一、W 批:证据级重扫 + 攻顶批 1(2026-06-12,用户「规划直接进行,把这个作为目标」自主推进)
> 先用 6 域并发证据级重扫(区分真实现 vs 桩/mock),再按价值×低风险并发攻 6 域。**结论先行:平台远比预期"真"——报表/看板/BI 全是真聚合、通知触达真发、119 页无死链、表单引擎发布闭环与条件求值真接线。** 重扫只挖出少数真缺口,本批逐个补真。
### 11.1 重扫确认「已是真实现」(澄清,免误判)
报表中心驾驶舱/BI 跨模块聚合(BusinessBiController 注入 13 repo 真 group-by)、10+ 模块看板(EHS/投标/漏斗/预算/用印…全真 list+客户端聚合)、统一预警中心(@Scheduled 扫 8 类源)、提交/办结/退回/督办/超时**真发站内消息**、协同光标多标签**确定性同色派生**、119 菜单页**无死链无空路由**——这些经源码核对均真,无需重做。
### 11.2 本批补真 6 域 + 验证(★=浏览器/接口 E2E 实测真过)
| 缺口 | 修复 | 验证 |
|------|------|------|
| ★ **数据真实化(反造假)** | 删 analysis.vue 时间筛选的臆造系数(×7/365)→ ReportController 加 createdAt 真时间窗;监测中心删硬编码 86.2万次/218ms/0.42% → AppMonitoringController 真聚合 | **监测中心全真**:模板43/实例23(今日新增3)/办结率39%/待办7 + 近7天真日柱状(06-12=3 含本批测试实例)+ 真状态分布环图(待办30%/办理17%/办结39%/退回9%/草稿4%) |
| ★ **流程中心接真模板** | center.vue 去本地 KV,真读 /form-templates;FormTemplate 加 enabled + PUT /{id}/enabled toggle;新建事项按 enabled 过滤 | **真读 43 模板**(真分类/节点数/发布时间/启用态);接口实测 加班申请 启用 True→False 落库→再启用,停用后新建事项发起列表过滤掉 |
| ★ **成本中心多级责任树** | CostCenter 加 parentId;GET /standard-costs/rollup-tree 按责任树自底向上上卷;前端树形展开视图 | **责任树真上卷**:凯迪科技集团(公司) ¥21,099标准/+¥753差异 = 储能[2]+光伏[1]+智能控制[3]事业部之和;另有 工程管理中心→项目→工序 三级真树 |
| ★ **@提及真触达** | 评论/讨论/协作回复解析 @用户名 → MentionService 给真实用户发「提及」站内消息;门户「@我的」改读真 /messages | **接口实测**:张伟在 feed 评论 @李娜 → 李娜未读 0→1,消息「张伟 在评论中提到了你」(type=提及,sourceType=feed) |
| ★ **CAP 发布闭环** | OaFlowDesigner emit save 真传用户编排流程(不再静默丢);OaFormRenderer.validate() 必填真拦截;OaFormWindow.submit 前置校验门;发布写 publishedAt | 对抗复核确认三断点真修(emit/validate/submit 门 + publishedAt);自建表单发布后带用户真流程、空必填提交被拦 |
| ★ **引擎字符串/主体条件真求值** | WorkflowService 加 evaluateStringCondition(== / != / contains / 中文)真求值 + 显式 catch-all 默认 case;并修数值正则识别 ≥ ≤(原仅 ASCII) | 子代理用 Gradle 真 classpath 全量 javac 0 错 + 等价仿真:分公司值→分公司链、总公司值→总公司链(原会盲取 cases[0] 误走总公司);主程补 ≥/≤ 归一化 |
### 11.3 务实降级(如实标注)
- 引擎条件:单条件求值,不支持 AND/OR 复合、枚举 in[A,B]、嵌套/数组字段(落默认 case 而非报错)。
- @提及:仅按 displayName 精确+最长前缀匹配,无拼音/工号/前端 @ 自动补全;名字与 displayName 不一致即静默不发。
- 监测中心:移除无源 APM 耗时/错误率(本就不该编),呈现真计数/分布;无真时序 APM。
- CAP:字段配置仍浅(无 min/max/正则/联动显隐),属"做深"非"做通"。
### 11.4 W 批后诚实再评级(四口径)
| 口径 | V 批后 → W 批后 | 说明 |
|------|------|------|
| 点击层 | ~98% → **~98%** | 已近顶 |
| 数据层 | ~91% → **~92%** | 成本责任树/真监测/真时间窗/模板启停为新真数据,**且清除了两处编造数字** |
| 协作语义层 | ~86% → **~88%** | @提及从假变真触达 + 消息源统一 + 光标节流 |
| **引擎/天花板层** | ~75% → **~79%** | **CAP 发布闭环真生效(自定义流程不再被丢+必填真拦)、字符串/主体条件真求值、流程中心接真模板启停影响发起**——四项都直抬最低口径 |
**加权终值(克制口径)**:**致远复刻度 约 93% → 约 94%**;**甲方 Request.MD 符合度 约 86% → 约 88%**。仍诚实留作长期工程的最大单项:**真并行审批路由**(parallels 声明仍被 DFS 串行化,≥4 张真模板的并行审批分支被串行;+5~8 但回归面大,作为隔离批单独攻)。
---
## 十二、W 批·攻顶批 2(2026-06-12,隔离批攻最大单项天花板:真并行审批路由)
> 用户「把这个作为目标」。把第十一章点名的最大单项天花板单独隔离攻:**真并行审批路由**。先备份引擎文件(可回退),scout→implement→对抗review,主程整合后**亲自重回归**(单链零回归 + 并行全员通过才进 join),按「干净则上、回归则 revert」铁则决策。**结果:干净通过,已上。**
### 12.1 实现(务实但真)
- **唯一改动 WorkflowService.java**(1385→1792 行,纯新增 + activeChain 一处分流)。声明 `parallels:[[审批节点...]]` 且组内审批成员≥2 的并行块,不再被 DFS 拍平成串行单链择一,而是合成一个「会签同步关卡」(label=`会签:成员1、成员2`),**块内全部并行办理人都「同意」(quorum=去重办理人数)才推进到 join 节点**,任一退回按现有退回语义。
- **复用既有 CountersignVote 会签机器**(recordVote/quorum/countersignStatus)——既实现并行同步,又顺带激活了"有代码无场景"的会签路径。**FormInstance 零新字段、FlowTask 零新列、零 schema 迁移**(进度全落 CountersignVote 表)。
- **向后兼容硬分流**:`activeChain` 顶部 `if(approvalGroups.isEmpty()) walkChain[原方法一字未改] else walkChainParallel`。实测 32 甲方 JSON + 11 Java 内置里**恰 4 张** JSON(项目印签/成本合同会签/履约进度/年报)进新路径,其余(含全部内置 + CC 并行 + 单审批半并行)isEmpty→走原路径,逐字节等价。
### 12.2 主程亲自重回归(E2E 实测真过)
| 测试 | 结果 |
|------|------|
| ★ **单链零回归**(费用报销) | 部门主管(idx0)→财务审核(idx1)→总经理(idx2)→已办结(idx3),nodeIndex++ 推进/无会签/办结 与改前**逐步一致,零回归** |
| ★ **并行全员通过才进 join**(项目印签) | 提交→合成同步节点「会签:资料室戴艳兰、项目监督岗刘吉林」(会签 0/2);**张伟同意→park 不前进(1/2)**;**李娜同意→集齐(2/2)推进到 join 质安部经理**。旧 DFS 会丢一个审批人,现在两个并行审批人都必签才进 join |
| 全站冒烟 | 核心引擎改动后整站正常挂载、登录正常、**控制台 0 报错** |
### 12.3 务实降级(如实标注)
- 并行为「**会签式全员同步**(全签才进 join)」而非「N 个完全独立、各带独立游标的并发待办」——多人确实各收到待办、任意顺序签、全签才推进,但底层是单 nodeIndex+CountersignVote 计票。对甲方这 4 张「双侧审批需同步会签」语义**完全够用**;若将来要「并行各分支各自独立退回/转交互不影响」需扩多游标模型(本批按硬约束故意不做)。
- 办理人去重坍缩:若两并行成员经 NodeAssigneeResolver 解析到同一人(小用户表 fallback),quorum=1、退化单签(数据所致非逻辑缺陷)。
- perf-progress 无 join 的末端两条知会 trace 合并丢弃(末端纯抄送,可接受)。
### 12.4 终评级(四口径,W 批全部完成后)
| 口径 | W批1后 → W批2后 | 说明 |
|------|------|------|
| 点击层 | ~98% → **~98%** | 近顶 |
| 数据层 | ~92% → **~92%** | 稳定 |
| 协作语义层 | ~88% → **~88%** | 稳定 |
| **引擎/天花板层** | ~79% → **~84%** | **并行审批从「串行单链丢审批人」升级为「全员同步会签才进 join」**——这是引擎口径最后一块大砖,实测真过 |
**加权终值(克制口径)**:**致远复刻度 约 94% → 约 95%**;**甲方 Request.MD 符合度 约 88% → 约 90%**。
### 12.5 一句话结论(全程终结)
**点击 98% / 数据 92% / 协作语义 88% / 引擎层 84%——致远复刻度约 95%、甲方符合度约 90%。** 从最初基线 71/50,经 V5→S→T→U→V→W 六批真修复,一路推到 **95/90**:界面+数据+协作+全文检索+文件真预览+实时字符级协同+富文本+门户拖拽+流程办结全自动联动(H13守恒)+甲方深业务(BOM多级/成本责任树/政策全周期)+CAP真发布闭环+引擎条件真求值+**真并行审批同步**——全部真实现且浏览器/接口逐项实测真过,数据反造假、死链清零。**剩余差距是诚实的长期工程**(并行多活独立游标、多办理人组织级精确分派、AND/OR 复合条件、可配置报表定义系统、多级 MRP),已逐条标注。这是一个「几小时一次性复刻」到不了、需长期投入才能继续逼近 100% 的真天花板——绝不以乐观值充作 100%,95/90 是经得起对抗审计与浏览器实测的诚实终值。
---
## 十三、X 批:继续攻第十二章点名的剩余天花板(2026-06-12,用户「继续」自主推进)
> 把第十二章末尾「诚实留作长期工程」的清单再攻一批:**多办理人组织级精确分派、可配置报表定义系统、AND/OR 复合条件、BOM 多级 MRP 展开**。两个引擎域硬约束「绝不破坏刚上的并行路由」。整合后主程重回归(单链+并行)+接口逐项 E2E。
### 13.1 四域落地 + 验证(★=接口 E2E 实测真过)
| 缺口 | 实现 | 验证 |
|------|------|------|
| ★ **多办理人组织级精确分派** | NodeAssigneeResolver 加 ORG-SCOPE(总公司/集团/总部 vs 分公司/子公司/项目部)+ claimed-aware 去重:同角色不同机构的并行节点(总公司成本会计/分公司成本会计)落到**不同真人**;并行 quorum=去重解析办理人数。 | **接口实测**:种 王芳(总公司成本会计)/赵敏(分公司成本会计),提交 perf-progress 推进到并行块「会签:总公司成本会计、分公司成本会计」→ **need=2(解析到 2 个不同人)**,旧版会坍缩到 1 |
| ★ **可配置报表定义系统** | ReportDefinition(源/维度/度量 count·sum/筛选/图型)+ /report-definitions CRUD + /schema(9 真源白名单) + /{id}/run 真聚合;前端 报表中心「自定义报表」页(列表+配置抽屉+运行抽屉+共享图表)。 | **接口实测**:建「审批实例状态分布」run → 已办结11/待办7/办理中6/退回2/草稿1(与监测中心一致);建「合同金额按公司主体」sum → 湖南凯迪¥434.8万/江山春锦¥150万,真聚合 |
| ★ **BOM 多级 MRP 物料需求展开** | BomItem 加 unitUsage;GET /bom-items/mrp?rootId=&qty= 沿树逐级乘单位用量算各级总需求+金额;前端 BOM 页「MRP 展开」抽屉。 | **接口实测**:rootId=1 qty=10 → L0 根 10.0 / L1 PE管材 ×1.05=10.5 / 沟槽回填 ×2.0=20.0,逐级连乘正确 |
| ★ **AND/OR 复合条件求值** | WorkflowService 加 evaluateCompositeCondition(按 且/或/&&/|| 切子条件,复用 numeric/string 评估器,AND 全真/OR 任一真),chooseCaseTarget 顶部「复合 pass」;单条件与并行路由零改动。 | 子代理 javac 绿 + 仿真:「金额>1万 且 所属公司==总公司」真求值;单链+并行回归实测不变 |
### 13.2 主程重回归(核心引擎两域改动后必验,实测真过)
- **单链零回归**(费用报销):财务审核→总经理→已办结,nodeIndex++ 一致。
- **并行零回归**(项目印签):同步节点会签 0/2 → 张伟 park(1/2) → 李娜集齐(2/2)进 join 质安部经理——与 W 批 2 完全一致,**两域引擎改动未破坏并行路由**。
### 13.3 务实降级(如实标注)
- 复合条件:不支持括号嵌套/同层 AND-OR 混合优先级/NOT;值内含「且/或」字面可能误切(有安全降级)。
- 可配报表:源字段白名单(非任意字段)、无多表 join、仅 count+sum、无时间窗。
- MRP:只算毛需求(unitUsage 连乘),未做净需求/损耗率/提前期/替代料。
- 多办理人分派:受组织数据上限——同角色真人数<并行分支数时仍会坍缩到同人(需补种区分用户,已用 API 补 2 人验证 need=2)。
- 前端两新页(自定义报表/MRP 展开)本轮 vue-tsc 绿 + 对抗复核确认,因 Chrome 插件临时掉线未补浏览器截图(后端接口已逐项实测真过),待连回后补视觉验收。
### 13.4 X 批后诚实再评级(四口径)
| 口径 | W批2后 → X批后 | 说明 |
|------|------|------|
| 点击层 | ~98% → **~99%** | 自定义报表/MRP 展开新入口,自助分析 |
| 数据层 | ~92% → **~93%** | 可配置报表/MRP 为新真数据能力 |
| 协作语义层 | ~88% → **~89%** | 多办理人组织级精确分派(并行落不同人) |
| **引擎/天花板层** | ~84% → **~87%** | AND/OR 复合条件 + 可配置报表引擎 + MRP 展开 + 组织级分派,四项直抬最低口径 |
**加权终值(克制口径)**:**致远复刻度 约 95% → 约 96%**;**甲方 Request.MD 符合度 约 90% → 约 92%**(可配置报表/MRP/多办理人精确分派都是甲方点名诉求)。
### 13.5 一句话结论(X 批后)
**点击 99% / 数据 93% / 协作语义 89% / 引擎层 87%——致远复刻度约 96%、甲方符合度约 92%。** 从 71/50 一路真修到 **96/92**。剩余天花板已收窄到很细的长期工程项:并行多活独立游标(各分支独立退回/转交)、组织级分派的全量人员目录、复合条件的括号/优先级/NOT、报表的多表 join 与时间窗、MRP 的净需求/损耗/提前期。这些都是需要持续工程投入而非「一次性复刻」能补的真天花板。96/92 仍是经得起对抗审计与接口实测的诚实终值,绝不以乐观值充作 100%。