From 0e2f00f777b2a35a38628e51b03d7e85540cf1da Mon Sep 17 00:00:00 2001 From: wuzilong <704541015@qq.com> Date: Sun, 1 Nov 2026 21:16:38 +0800 Subject: [PATCH] =?UTF-8?q?docs(pl):=20=E8=AE=B0=E5=BD=95=E9=80=90?= =?UTF-8?q?=E6=AE=B5=E8=AF=81=E6=98=8E=E9=AA=8C=E8=AF=81=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=B9=B6=E8=B0=83=E6=95=B4=E7=BB=84=E4=BB=B6=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E9=A1=BA=E5=BA=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plans/2026-11-01-pl-stop-cert-management.md | 13 ++++++++----- openspec/changes/pl-stop-cert-management/tasks.md | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/superpowers/plans/2026-11-01-pl-stop-cert-management.md b/docs/superpowers/plans/2026-11-01-pl-stop-cert-management.md index 2b9862a30..88eb91191 100644 --- a/docs/superpowers/plans/2026-11-01-pl-stop-cert-management.md +++ b/docs/superpowers/plans/2026-11-01-pl-stop-cert-management.md @@ -37,15 +37,17 @@ Task 1证据:提交`cde30287f`;实施者298项回归通过,独立规格审 Files: 新增`backend/app/services/pl_stop_legal_document.py`、`backend/tests/test_pl_stop_legal_document.py`;修改`backend/app/models/pl_quota_models.py`、`backend/app/schemas/pl/legal_use_document.py`、`backend/app/api/pl/quota_cert.py`;新增`docs/sql/2026-11-01-pl-stop-legal-document.sql`。 -- [ ] 写合成用例:一装两送只传第二段,结果1/3;按第二段合同查询为1/1;另租户、另合同、重复段身份拒绝;遗漏集合不变、空附件清空单行、旧计划附件不会标记新段完成。运行看到缺失功能失败。 -- [ ] 新表`pl_stop_legal_document`使用完整公共字段、软删除、唯一`tenant_no/plan_id/stop_type/stop_product_id`;增加MySQL5.7可执行建表脚本,不自动执行。以有效计划/父段/段产品/计划产品联查判定易制爆适用范围;合同权限和计划权限均过滤。保存按稳定段产品身份差量更新,全部校验后写入;上传权限和MinIO新附件授权沿用旧逻辑;删除段产品下游引用保护包含新资料。 -- [ ] 独立新API避免旧端混淆:`GET /transport/legal-use-documents/stops`分页`{list,total,page,pageSize}`;`GET/PATCH /stops/{plan_id}`获取/保存。查询`contractId`限定当前合同;PATCH载荷`{items:[{stopType,stopProductId,legalUseCertUrl}]}`,不得批量套用同一附件。 +- [x] 写合成用例:一装两送只传第二段,结果1/3;按第二段合同查询为1/1;另租户、另合同、重复段身份拒绝;遗漏集合不变、空附件清空单行、旧计划附件不会标记新段完成。运行看到缺失功能失败。 +- [x] 新表`pl_stop_legal_document`使用完整公共字段、软删除、唯一`tenant_no/plan_id/stop_type/stop_product_id`;增加MySQL5.7可执行建表脚本,不自动执行。以有效计划/父段/段产品/计划产品联查判定易制爆适用范围;合同权限和计划权限均过滤。保存按稳定段产品身份差量更新,全部校验后写入;上传权限和MinIO新附件授权沿用旧逻辑;删除段产品下游引用保护包含新资料。 +- [x] 独立新API避免旧端混淆:`GET /transport/legal-use-documents/stops`分页`{list,total,page,pageSize}`;`GET/PATCH /stops/{plan_id}`获取/保存。查询`contractId`限定当前合同;PATCH载荷`{items:[{stopType,stopProductId,legalUseCertUrl}]}`,不得批量套用同一附件。 ```json {"id":"plan", "planNo":"PL001", "uploadedCount":1,"requiredCount":3, "items":[{"stopType":"delivery","stopProductId":"dp","productName":"双氧水","contractId":"sale","contractNo":"XS001","legalUseCertUrl":"","documentStatus":"pending"}], "legacyProducts":[]} ``` -- [ ] 保留旧计划级端点和旧附件查看,清楚标为历史;回归旧端点测试,运行新权限/保存/统计测试。提交本任务。 +- [x] 保留旧计划级端点和旧附件查看,清楚标为历史;回归旧端点测试,运行新权限/保存/统计测试。提交本任务。 + +Task 2证据:提交`2dd396509`与并发当前读修复`b21618151`;核心10模块159项通过,新证明20项经独立复审通过。规格、质量审查通过。SQL仅编写未执行;MySQL锁SQL编译测试不等同真实并发验证。扩展检查中既有`test_pl_mobile_stop_meta.py`两项失败(历史SQL路径不存在、AST测试替身缺少`assert_plan_can_arrange`),未扩大修改。 ## Task 3: 合同与证件统计、建档原子绑定 @@ -66,7 +68,7 @@ Files: `web-admin/src/api/pl/quota-cert.ts`;新`web-admin/src/views/pl/contrac const tabPaths = ['quota-cert', 'contract-quota', 'certificate-usage', 'plan-cert', 'legal-use-document'] as const ``` - [ ] 统计面板使用ListQuickSearchInput/ListToolbarEndActions/ColumnHeaderFilter、服务端分页、展开按需取明细。合同面板prop`contractId?: string`固定范围,复用ContractScopeDialog维护绑定;证件面板按证种展示全局数量和各合同明细,展开段产品用量。 -- [ ] 合同详情运输计划后插入两个lazy Tab,按菜单权限显示,分别挂载ContractQuotaPanel和段证明页面固定contractId,切换合同销毁旧状态。 +- [ ] 合同详情运输计划后插入“合同证件与额度”lazy Tab,按菜单权限显示,挂载ContractQuotaPanel并固定contractId,切换合同销毁旧状态。“运输计划合法使用证明”Tab随Task 6组件一起接入,避免引用尚不存在的组件。 - [ ] 定向tsx/node:test及类型检查(区分历史错误);提交。 ## Task 5: 建档绑定、段次与安排UI @@ -85,6 +87,7 @@ Files: 新`web-admin/src/views/pl/legal-use-document/StopDocuments.vue`;API ty - [ ] 测试合同范围上传1/1、全局1/3、逐段附件操作、上传中禁止保存、失败保留输入、切租户/合同丢弃过时响应。 - [ ] 使用服务端分页和状态过滤,展开计划显示每个装送段产品及附件;每行单独上传/保存,上传控件与MinIO沿用AttachmentUploadField。历史计划级附件单独只读,不能当作段已上传。 +- [ ] 合同详情在“合同证件与额度”后接入独立“运输计划合法使用证明”lazy Tab,按证明菜单权限显示并固定当前contractId;五视图中的合法使用证明路由同时切换到共用StopDocuments组件。 - [ ] 使用主目录venv运行受影响后端pytest;Web运行定向tsx/node:test、pnpm build与类型检查,已知历史错误单列;共享手机API测试。审查固定base/head,规格合格后质量审查;修复所有阻塞。 - [ ] 在允许的本地测试环境以合成响应验证页面/弹窗及合同切换、加载失败、保存状态;未获服务启动授权则使用不启动业务后端的组件浏览器测试,缺口如实记录。MySQL真实事务验证保留未执行,不以SQLite冒充。 - [ ] 更新OpenSpec/tasks、SQL执行指引、工单和提交证据,按已授权推送任务分支,保持工单开放至验收;不自动合并或执行SQL。 diff --git a/openspec/changes/pl-stop-cert-management/tasks.md b/openspec/changes/pl-stop-cert-management/tasks.md index 102e3cc8f..b919dca83 100644 --- a/openspec/changes/pl-stop-cert-management/tasks.md +++ b/openspec/changes/pl-stop-cert-management/tasks.md @@ -8,7 +8,7 @@ - [x] 先写新规则100+40+60=200及旧版100不变的失败回归,再扩展版本化来源提取及分配入口。 - [ ] 实现合同/证件统计查询及主对象分页,验证单位、证种、权限与期初未归属口径。 - [ ] 实现证件+合同产品原子保存,覆盖多合同失败回滚、遗漏/空集合、身份及引用保护。 -- [ ] 新增段产品资料模型/schema/API与MySQL5.7迁移,保留旧附件和旧账;不自动执行数据库迁移。 +- [x] 新增段产品资料模型/schema/API与MySQL5.7迁移,保留旧附件和旧账;不自动执行数据库迁移。 - [x] 校验安排、调整、释放、归档、异常补量及旧客户端不能绕过正式规则。 ## 3. Web界面 @@ -23,4 +23,4 @@ - [ ] 独立审查、适用数据库事务验证及迁移演练(此前用户要求暂不启MySQL容器,未完成项如实保留)。 - [ ] 记录最终版本、实际测试与缺口,再按已有授权交付;不自动部署或关闭旧工单。 -当前状态:实施阶段。Task 1分段计量已提交`cde30287f`并通过独立规格及质量审查,SQLite专项通过;段产品证明、统计、原子绑定与Web界面尚在实现。未创建业务数据库表或执行迁移,MySQL真实并发验证未完成。 +当前状态:实施阶段。Task 1分段计量`cde30287f`和Task 2段产品证明`2dd396509`/`b21618151`已通过独立规格及质量审查,SQLite专项通过;统计、原子绑定与Web界面尚在实现。未创建业务数据库表或执行迁移,MySQL真实并发验证未完成。