主题
造价单位管理 · 详细设计文档
文档版本:0.10 | 最近核对日期:2026-09-26
最近核对:2026-09-26。代码在当前工作区;业务验收待业务方。业务规则见需求分析。
1. 页面和权限
| 路由 | 页面 | 权限动作 |
|---|---|---|
| /costUnit/unit | 基本信息 | list/query/add/edit/import/template/history/pause/enable/outbound/delete |
| /costUnit/violation | 违规 | list/add/edit/delete |
| /costUnit/quarterAssess | 季度考核 | list/add/edit/delete |
| /costUnit/annualAssess | 年度考核 | list/add/edit/delete |
| /costUnit/drawApplication | 抽取申请 | list/query/add/edit/remove/submit/process/handle |
| /costUnit/awardResult | 中标情况 | list/query/add/edit/remove/submit/process/handle |
所有权限码采用 costUnit:资源:动作,后端注解、SYS_MENU.PERMS 和前端 v-hasPermi 对齐。单位 options 接口允许六个页面 list 权限任一访问。查询不按创建人或部门过滤。办理页仅当服务端 processInfo.canProcess 和路由当前 taskId 有效时显示办理区。
2. 接口契约
接口前缀 /business/costUnit;分页采用平台 PageQuery/PageResult,响应采用 R。后端主键 Long 通过平台 BigNumberSerializer 输出,前端 ID 保留 string | number。
| 资源 | 接口 | 约束 |
|---|---|---|
unit (/business/costUnit/unit) | GET /business/costUnit/unit/list、GET /options、GET /{id}、POST /、PUT /、DELETE /{ids}、POST /import、POST /template、GET /{id}/history、PUT /pause、PUT /enable、PUT /outbound | 审批附件必传;导入支持 .xls/.xlsx,单文件不超过 10 MB;整批导入;活动名称唯一;有关联不可删除 |
violation (/business/costUnit/violation) | GET /business/costUnit/violation/list、POST /、PUT /、DELETE / | 活动单位、有效类型 |
quarterAssess (/business/costUnit/quarterAssess) | GET /business/costUnit/quarterAssess/list、POST /、PUT /、DELETE / | 0–100、两位小数;单位/年度/季度唯一 |
annualAssess (/business/costUnit/annualAssess) | GET /business/costUnit/annualAssess/list、POST /、PUT /、DELETE / | 0–100、两位小数;单位/年度唯一 |
| drawApplication、awardResult | 分别位于 /business/costUnit/drawApplication 与 /awardResult,各有 GET /list、GET /{id}、POST /、PUT /、DELETE /{ids}、POST /submit、GET /process-info/{id}、POST /handle | 草稿/退回编辑重提;当前任务校验 |
抽取申请字段含计划日期、申请部门快照、申请材料和结果文件。中标记录含来源部门快照、结果文件和各节点办理人快照。实际方法与路径见各资源 Controller。
抽取申请与中标情况的项目名称均按去除首尾空白后的值限制为 255 个字符,和两张业务表的 VARCHAR(255) 列一致;Service 在新增与编辑共用的表单映射入口执行校验,不依赖前端长度限制或请求体 Bean Validation。
新增、编辑和提交共用表单映射后,Service 按已核对的实际非空表单列校验可持久化字段,并返回字段对应的业务提示,避免将数据库非空约束错误直接暴露为保存失败。草稿只绕过流程提交校验,不绕过持久化必填:抽取申请必须有造价单位、项目名称、咨询类别、计划日期和系统带出的申请部门;中标情况必须有造价单位、项目名称、中标时间、系统带出的发起部门及数据库非空的五个审批人字段。抽取经办人、中标建设管理部部长列可空;空附件 ID 在草稿中写为空字符串,不要求实际上传文件。提交时 validateSubmit 仍独立校验所需附件和流程条件,未改变流程提交规则。
3. 事务与一致性
单位基础字段发生变化时,修改主表、变更事件、字段差异、审批附件引用在同一事务提交;附件由平台 OSS 校验。导入全批校验后一次事务写入,任一行错误整体回滚。有效名称由服务端校验和开发库活动名称唯一索引并发兜底,逻辑删除名称可复用。
单位删除先锁定有效单位行,再检查违规、季度、年度、抽取和中标记录;存在关联则拒绝。三类业务写入路径锁定有效单位行。季度/年度另有复合唯一索引。分数服务端校验 0–100 和两位小数。
流程状态变更锁单并校验当前状态;仅创建人可编辑草稿/退回记录;仅本人草稿可删除,其他状态不可删除。审批处理检查业务记录、当前 taskId 和当前任务办理人。退回必须有原因;同意按 Warm-Flow 流转并以流程状态决定 waiting/finish。草稿所有权规则按用户确认的建议实施。
4. 流程版本与布局
当前开发环境运行版本为抽取申请 V3(定义 ID 2103744514127572994)和中标情况 V3(定义 ID 2103745208763035649),均为已发布、启用、未删除。抽取申请 V2 定义行保留且未发布;中标情况 V2 定义行保留并标记失效。两条 V3 流程仅改 FLOW_NODE.COORDINATE 与 FLOW_SKIP.COORDINATE,节点、边、条件、权限标记和业务字段与 V2 一致。
V3 静态几何审查结果:抽取申请 4 个节点、3 条连线,范围 525×310、宽高比 1.69、适配比例 2.55;中标情况 10 个节点、10 条连线,范围 975×400、宽高比 2.44、适配比例 1.69。两图的边交叉、超过 70px 的共享路段、穿节点、锚点异常、斜线段、卡片重叠和标签冲突均为 0;均高于 1650×790 视口适配比例 0.6 的目标。画布和节点坐标已在 Warm-Flow 设计器回读并核对;旧定义未删除。测试证据见测试报告。
5. 代码位置与异常
| 职责 | 代码路径 |
|---|---|
| Java 领域 | digital-construction-modules/digital-construction-business/src/main/java/com/bokun/business/costunit |
| Vue 页面 | digital-construction-ui/src/views/business/costUnit |
| Vue API | digital-construction-ui/src/api/business/costUnit |
| 流程定义 | digital-construction-modules/digital-construction-workflow/src/main/resources/flow/cost-unit |
服务端拒绝越权、重复名称、重复考核期、无附件修改、有关联删除、非法状态和过时 taskId。事务失败整体回滚。详细验证与待测角色/分支见测试报告。