Files
shanxia2.0/docs/2026-10-27-child-data-refactor-handoff.md
T
wuzilongandCursor bde19c0644 feat: 锁定执行中计划并按装卸明细差量归档库存,补齐派车日历数量与酸碱类型。
执行中的运输计划不再随意改单;库存流水记到装卸产品明细;手工派车日历区分酸碱并记录数量。同时收紧合同附件与子表的差量保存,并清理已废弃的 bak 备份目录。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-29 07:59:53 +08:00

10 KiB

子数据差量改造误改总结与逐模块排查交接

整理日期:2026-10-27。

项目:/Users/zlwu/work/00code/shanxia2.0。

本交接用于让新的 AI 逐模块核对本会话的修改。最初目标是修复普通编辑中的“全部删除子数据,再全部新增”,保留必要的明细身份;实际实施中扩大到了清空语义、业务限制、库存记账和估值方式,部分正常功能受到影响。

清单是排查线索,不是批量修复指令。先确认原业务约定并复现,再最小范围修复。

1. 基线与范围

  • 459b820f9 是大量本会话修改已进入后的检查点,不是会话开始前的正确版本。恢复到它不等于恢复原业务。
  • 该检查点包含其他任务,不能把提交全部 466 个文件算成本会话修改。已归因净改动为 91 个文件:后端源码 40、Web/H5 源码 11、原生小程序源码 2、测试 35、AGENTS.md 1、设计与计划文档 2。
  • 另有 4 个迁移脚本曾改动,但检查点前已恢复原行为,不计入上述净改动。
  • 整理期间工作区出现了调度日历等其他改动。接手时必须检查实际 HEAD 和工作区,不能假定当前仍与检查点完全一致,也不能覆盖其他工作。
  • 以下“仍存在”均指已核对的检查点状态,不是对之后所有修改的实时判断。

2. 已确认误改且检查点中仍存在的问题

问题 原业务或合法情况 错误改造与影响 处理方向
库存更正记账期间改变 撤销旧流水,按更正当天重新记账 修改原流水并保留原创建时间,改变期间统计 用户已经明确选择恢复更正日重新记账,不能强求库存流水 ID 不变
合法多段库存历史被拒绝 不同停靠段可产生同产品、品牌、方向的多条有效流水 新逻辑将同键多条历史流水视作异常,归档返回 409 兼容合法历史,不得直接判坏、自动合并或批量处理历史数据
角色自定义权限清空失效 页面清空选择后应清除旧授权 页面可能省略 scopeDetails;后端被改为省略保持,旧授权残留 核对实际页面请求和接口,恢复完整保存的清空语义
审批中禁止修改流程名称和备注 名称、备注不改变审批节点结构 在途保护扩大到普通元数据修改,一律拒绝 名称和备注可修改;节点结构变更、停用和删除另行保护

主要文件:

  • backend/app/services/pl_inventory_service.py
  • backend/app/crud/role.py
  • backend/app/services/bx/workflow.py

已有定向验证:旧库存逻辑合法产生数量 2 和 3 的同键两条流水,新逻辑再次归档返回 409;角色权限清空有两项回归失败;流程名称和备注有两项回归失败。接手时应针对实际代码重新复现。

3. 确定扩大范围但业务正确性仍需确认

改动 原逻辑与改后逻辑 必须核对的事项
库存估值方式 从剩余库存数量乘本次单价,改为本笔新旧流水金额净差 属于估值口径变化,不能混在差量保存中替换。用户确认更正日记账,不等于确认估值算法
合同切换后的产品处理 从部分场景清空整段产品,改为只移除明确属于被移除合同的产品 原业务是否要求换合同后重新选品;无合同归属的产品现在会保留
广泛采用遗漏保持 字段或集合未出现就不修改 完整表单可能通过省略字段表达清空,须沿实际客户端、Schema、路由、服务逐层核对
扩大删除保护 快照、归档字段或关联可阻止移除 区分真实下游引用、普通快照及已有撤销流程,不应一概禁止
补齐段合同时保留旧版关联 取消清理旧版供方和需方合同关联的调用 是否留下本来应被清理的旧关系

这些项目不能直接全部撤回或全部保留。业务意图不确定时,列出具体操作和两种结果,再请用户确认。

4. 曾经误改但检查点前已经恢复

内容 中途误改 检查点状态
证照证号、到期日、附件 遗漏保持导致表单清空不生效 已恢复原整行保存和清空语义,同时保留身份匹配
装送货段联系人、地址、备注等 普通字段遗漏保持导致清空失效 已恢复父段普通字段的原整行语义,子集合另行处理
显式清空或替换迁移 把迁移脚本也当作普通编辑,限制原清空导入功能 四个脚本已恢复原行为

四个迁移脚本:

  • backend/scripts/migrate_dibang_data.py
  • backend/scripts/migrate_bx_data.py
  • backend/scripts/migrate_crm_product.py
  • backend/scripts/migrate_crm_product_category.py

不要看到历史讨论就认为上述误改仍在检查点中。值班 workPlans 的遗漏清空曾被讨论,但没有继续改成统一遗漏保持,不能把讨论当成已落地修改。

5. 修复不完整与分析归因错误

值班旧请求兼容未完成

请求只有姓名、没有用户 ID 和指定记录 ID 时,新匹配逻辑无法复用已有绑定用户的指定记录,仍可能替换旧行;同名歧义处理也未完成,有两项相关回归失败。

原实现本来就重建指定人员,因此应归类为差量改造未完成,不能说成本次新引入的退化。

原本就有差量或复用能力的功能

  • 物流主产品。
  • 送货段父记录。
  • 车辆和人员证照。
  • 产品品牌和别名。
  • 按段地磅关联。

此前把它们统一描述成全删全增,是分析错误。新增的主要是缺 ID 匹配、字段保留、校验及限制,不能因此认定所有新增代码都正确或都错误。

规范与测试不能代替业务判断

  • AGENTS.md 新增的遗漏保持规则过于统一,可能与既有完整表单约定冲突。不能用本会话新增规则反证原功能错误;有冲突时应明确说明,再确认适用边界。
  • 部分测试跟随新实现改变了预期,例如保留原记账期间、禁止审批中修改流程元数据。通过这些测试并不能证明业务改造正确。
  • 测试文件存在不代表对应修复已经落地。角色清空和流程元数据恢复测试已存在,但检查点仍有失败。
  • 仅增加测试不代表修改了对应业务源码。原生物流司机和现场页面此次主要新增验证;原生小程序净源码修改只有报销表单和审批配置两个文件。

6. 逐模块工作方式

  1. 检查当前分支、工作区及本模块未提交改动;保护其他工作,不直接 reset、clean 或整体覆盖。
  2. 只核对用户本次指定模块;读取现有代码、会话前证据、检查点差异。
  3. 明确实际业务约定,沿页面请求、Schema、路由、服务、持久化和下游引用追踪。不要仅凭函数名或删除语句判断。
  4. 记录复现操作、请求、预期与实际结果,区分已确认误改、原有问题、未完成改造和待确认业务。
  5. 在用户授权修复后,只修已确认问题;保留必要差量更新,不顺带改变清空规则、记账方式或其他限制。
  6. 验证本模块实际相关的 Web、H5、小程序入口,以及无变化保存、编辑、新增、删除、清空和下游影响。测试期望来自确认的业务行为。
  7. 输出具体文件、修复原因、验证结果及剩余不确定项。需要提交时只提交本模块改动,不混入其他工作。

建议顺序:角色权限 → 审批配置 → 库存归档 → 物流计划、合同切换与回传 → CRM、报销、车辆、值班。

不要自动处理历史数据库,也不要通过普通保存偷偷重绑或清理历史异常。库存更正记账方式已确认;库存估值及其他未确定业务需要另行确认。

7. 证据位置

以下路径均位于本机项目,部分工具会默认忽略 .git,需显式读取。

  • 完整逐文件对照(91 个文件、128 个行为点):.git/session-return-459b820f9/before-after-guide.md
  • 测试范围与已知问题:.git/session-return-459b820f9/change-test-guide.md
  • 会话归因账本:.git/session-restore-20261027/ledger.json
  • 会话前版本证据:.git/session-restore-20261027/targets/
  • 逐文件差异:.git/session-return-459b820f9/before-after-diffs/
  • 库存兼容性复现脚本与记录:.git/session-return-459b820f9/inventory-compat.py、.git/session-return-459b820f9/inventory-compat.log

这些证据只用于归因和复核,不代替实际代码验证。如果其他工具运行在不同机器,需随本交接一并提供必要证据;不能把资料缺失解释为代码没有问题。

8. 可复用提示词

请接手 shanxia2.0 的子数据差量改造回归排查。

项目目录:/Users/zlwu/work/00code/shanxia2.0
请先阅读 docs/2026-10-27-child-data-refactor-handoff.md。
本次只排查【角色自定义数据权限清空】模块;后续我会逐个指定其他模块。

先只做核对和复现,不修改业务代码。请检查当前分支及工作区,保留其他未提交工作,不 reset、clean、整体回滚或切换其他分支。459b820f9 是包含争议改动的检查点,不是原始正确版本。

结合交接文档中的会话前版本证据和逐文件差异,追踪本模块实际客户端请求、Schema、路由、服务、数据库写入及必要下游调用。不要仅凭函数名称、删除语句或本会话新增的 AGENTS.md 规则判断旧业务错误;也不要直接相信新增测试的预期。

请输出:
1. 原逻辑、检查点逻辑与当前逻辑的差别。
2. 已确认问题及可复现步骤、预期和实际结果。
3. 哪些属于原有问题、修复不完整或尚待业务确认。
4. 最小修复方案、具体文件和相关客户端验证清单。

优先利用隔离测试数据复现,不写生产数据库、不处理历史数据、不自动修复其他模块。业务含义不明确时指出具体分歧并询问,不自行扩大修改范围。

给我复核上述结果,待我明确同意修复后,再只实施这个模块的最小修复,并按确认的业务行为验证。

更换模块时只替换方括号内的模块名。对于库存模块,必须分别核对记账期间、估值方式和合法多段历史兼容性,不能合并成一个泛化的差量保存问题。