L4-2 招采管理后端 · 交付说明
地缘云 L4 级应用 dypurchasemgmt —— 遵循《地缘云开发技能 V6.0》契约(I1–I12)与 V9.0 技术栈基线
平台层级 L4(受 L3+L2+L0 控制)
契约版本 0.5.0
库名 dykj_l4_estate_contract_dypurchasemgmt_main
Java 21 · Spring Boot 3.5.16 · MyBatis-Plus 3.5.11
上游前端 dy-l4-002-purchasemgmt-web @ ce308d7
一、模块结构(端口段 932x)
| 模块 | 端口 | 职责 | 文件数 |
l4-common | — | 契约自检、错误码 60100~60183、三类权限、AOP 切面、数据权限拦截器、幂等、MyBatis-Plus 配置、PcConst | 41 |
l4-gateway | 9320 | 统一入口,路由到 l4-iam / l4-purchase 及跨域上游 | 1 |
l4-iam | 9322 | 登录、组织/用户/角色、菜单权限点、L2 授权下发同步、项目权限 | 31 |
l4-purchase | 9323 | 招采业务主体:16 Service + 16 Controller + 81 实体 + 81 Mapper | 199 |
l4-all | 9321 | 单体聚合启动器(单进程部署用) | 1 |
端口整体落在 932x 段,避开 L4-1 成本管理(9300~9304)与 L4-3 合同管理(9305),可同时本地起多应用。
二、三类权限(对齐 L2 组织用户与角色授权)
| 权限类型 | 载体 | 执行点 | 拒绝码 |
| 功能权限 | AuthUser.perms(dypurchasemgmt:action) | @RequirePermission + PermissionAspect(@Order(20)) | 60018 |
| 数据权限 | AuthUser.dataScope(all / org / org_child / self / custom)+ dataScopeOrgIds | @DataScope + DataScopeAspect(@Order(10))+ L4DataScopeHandler | 60016 |
| 项目权限 | AuthUser.projectIds(L2 授权的 sourceProjectId,* = 全部) | PcSupport.requireProject() / visibleOrgs() | 60017 |
登录链路
IamService.login ──▶ JWT(secret purchase-cloud-l4-secret-2026 / 86400s)
──▶ AuthInterceptor 还原 AuthUserHolder
──▶ DataScopeAspect(10) 改写 SQL ──▶ PermissionAspect(20) 校验权限码 ──▶ Controller
相对 L2 补齐的 9 项执行缺口
sys_role_menu.perm_code 真实落库(L2 只建表不写值)
- 方法级鉴权切面
PermissionAspect —— 补 Q-PC23 前端 0 处鉴权,服务端强制兜底
DataPermissionInterceptor 真实注册到 MyBatis-Plus 拦截器链
sys_org.path 路径冗余 → 「本级及下级」单次 LIKE,免递归
sys_role_org 支撑 custom 自定义组织档
sys_project_grant 作为项目权限事实源
- JWT 载荷回填三类权限
- 菜单树按权限码过滤后返回
BaseEntity 补 orgId 列 + L4MetaObjectHandler 自动填充(否则数据权限 SQL 改写缺列)
授权期限唯一事实源 = AuthGrant.validityEnd,L4 严禁另存副本(契约 I6)。
三、采购过程 13 节点引擎(BR-PC01 ~ PC04)
采购申请 ─▶ 采购计划 ─▶ 招标文件 ─▶ 发标 ─▶ 答疑 ─▶ 回标 ─▶ 开标 ─▶ 清标
─▶ 评标 ─▶ 议标 ─▶ 定标 ─▶ 中标通知 ─▶ 合同签订
战略采购 14 节点(BR-PC02):在「招标文件」后插入「采购文案」
年度计划甘特图:12 节点
| 规则 | 说明 |
| BR-PC03 节点三态 | completed / current / pending;「当前查看节点」与「流程进度」解耦,可回看任意已完成节点 |
| BR-PC04 推进方式 | ① auditNode:招标文件 / 清标 / 评标 / 议标 / 定标 / 中标通知(6 节点走审批) ② advance:回标→清标、清标→评标、评标→议标、议标→定标 |
| BR-PC15 控制点 | 投标单位 2N+1、注册资金 ≥ 500 万、专业资质匹配、IP 异常检测 |
| BR-PC14 拆税 | PcSupport.splitTax():含税 → 不含税 + 进项税额,默认税率 9% |
| BR-PC28 单号 | 11 个硬编码前缀 + 年月日 + 毫秒末 4 位序列号 |
| BR-PC35 编号 | 主数据用 code,单据用 No |
四、定级得分与建议等级(BR-PC05,修正 Q-PC06 边界)
定级得分 = 考察得分 × 0.5 + 履约得分 × 0.5
x ≥ 80 → 优秀 (A)
70 ≤ x < 80 → 良好 (B)
60 ≤ x < 70 → 合格 (C)
x < 60 → 不合格 (D)
五、16 个业务服务与前端侧栏映射
| 侧栏分组 | 后端服务 | URL 前缀 |
| 项目概况 | DashboardService | /api/pc/dashboard/** |
| 供应商管理 | SupplierService | /api/pc/supplier/** |
SupplierInspectionService | /api/pc/inspection/** |
SupplierGradeService | /api/pc/grade/** |
PerfEvalService | /api/pc/perf-eval/** |
SupplierComplaintService | /api/pc/complaint/** |
| 战略采购 | StrategicService | /api/pc/strategic/** |
| 采购管理 | ProcurementProcessService | /api/pc/process/** |
PurchasePlanService | /api/pc/plan/** |
| 我的评标 | BidEvalService | /api/pc/bid-eval/** |
| 采购资源库 | ResourceService | /api/pc/resource/** |
QuestionnaireService | /api/pc/questionnaire/** |
BizParamService | /api/pc/biz-param/** |
| 消息 / 报表 / 工单 | MessageService | /api/pc/message/** |
ReportService | /api/pc/report/** |
WorkorderService | /api/pc/workorder/** |
所有控制器均为双前缀:/pc/xxx 与 /v1/l4/pc/xxx,配合 context-path: /api,兼容前端两种接法。
六、错误码分段(L4 段 6xxxxx)
| 段 | 含义 |
60001–60004 | 公共 / 参数 / 重复提交 / 租户上下文 / 数据越权 |
60010–60018 | 权限类(用户 / 角色 / 组织 / 授权 / 数据范围 / 项目 / 功能点) |
60020–60021 | 项目 |
60100–60129 | 采购过程 / 战略采购 / 计划申请 |
60130–60149 | 供应商域(库 / 考察 / 定级 / 履约 / 投诉) |
60150–60169 | 采购资源库(材料 / 指标 / 甲方单位 / 账号 / 问卷) |
60170–60183 | 评标工单 / 消息 / 报表 |
60090–60092 | 上游不可用 / 上游脏数据 / 采集异常入队 |
七、编译验证
$ mvn -o clean compile -f <工程>/pom.xml
[INFO] dy-purchase-cloud-l4 .... SUCCESS [ 0.637 s]
[INFO] l4-common ............... SUCCESS [ 13.199 s]
[INFO] l4-gateway .............. SUCCESS [ 3.219 s]
[INFO] l4-iam .................. SUCCESS [ 23.326 s]
[INFO] l4-purchase ............. SUCCESS [ 25.128 s]
[INFO] l4-all .................. SUCCESS [ 3.250 s]
[INFO] --- enforcer:3.5.0:enforce --- Rule 1: BannedDependencies passed (×6)
[INFO] BUILD SUCCESS
门禁:requireJavaVersion [21,22) 通过;JPA / Hibernate / jakarta.persistence / javax.persistence
全部未出现(MyBatis-Plus 唯一持久层)。
八、级联上游
| 上游 | 端口 | 用途 |
| L2 地缘云(授权下发方) | 9102 | 组织用户角色授权、企业资料下发 |
| L3 合同云 | 9201 | 合同管理跳转 |
| L3 项目 | 9203 | 项目房源 |
| L3 招采准备 | 9204 | 招标文件模板 |
| L4-1 成本管理 | 9303 | 合约规划只读引用(BR-PC24~27) |
| L4-3 合同管理 | 9305 | 定标后转合同 |
九、待补齐清单(详见《功能实现对照表》第三节)
- 前端
src/api 全为 mock,0 条真实 HTTP 调用 —— URL / 入参 / 出参需联调时对齐
- 成本侧合约规划接口、L0 工单回捞
UpstreamClient 为占位实现
- 合同管理跳转单点、L2 企业资料下发通道待接
- 附件存储(MinIO / OSS)未纳入;富文本招标文件渲染未实现
- 工作流引擎(
flow 审批模式)依赖 L2 流程服务
- 英文 locale 未做转换(契约 I2 双语待补)
- 待产品终裁 评标权重两套口径(Q-PC02 / B-PC16):已按总纲 BR-G12 取
bidRule(tech 40 / biz 60 / pass 60)
- 待产品回确认 发标 / 答疑推进出口(Q-PC05):后端已补
/issue 与 /qa/end
- 定级阈值边界(Q-PC06):后端已明确为
≥80 / ≥70 / ≥60 闭区间