执行中的运输计划不再随意改单;库存流水记到装卸产品明细;手工派车日历区分酸碱并记录数量。同时收紧合同附件与子表的差量保存,并清理已废弃的 bak 备份目录。 Co-authored-by: Cursor <cursoragent@cursor.com>
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.pybackend/app/crud/role.pybackend/app/services/bx/workflow.py
已有定向验证:旧库存逻辑合法产生数量 2 和 3 的同键两条流水,新逻辑再次归档返回 409;角色权限清空有两项回归失败;流程名称和备注有两项回归失败。接手时应针对实际代码重新复现。
3. 确定扩大范围但业务正确性仍需确认
| 改动 | 原逻辑与改后逻辑 | 必须核对的事项 |
|---|---|---|
| 库存估值方式 | 从剩余库存数量乘本次单价,改为本笔新旧流水金额净差 | 属于估值口径变化,不能混在差量保存中替换。用户确认更正日记账,不等于确认估值算法 |
| 合同切换后的产品处理 | 从部分场景清空整段产品,改为只移除明确属于被移除合同的产品 | 原业务是否要求换合同后重新选品;无合同归属的产品现在会保留 |
| 广泛采用遗漏保持 | 字段或集合未出现就不修改 | 完整表单可能通过省略字段表达清空,须沿实际客户端、Schema、路由、服务逐层核对 |
| 扩大删除保护 | 快照、归档字段或关联可阻止移除 | 区分真实下游引用、普通快照及已有撤销流程,不应一概禁止 |
| 补齐段合同时保留旧版关联 | 取消清理旧版供方和需方合同关联的调用 | 是否留下本来应被清理的旧关系 |
这些项目不能直接全部撤回或全部保留。业务意图不确定时,列出具体操作和两种结果,再请用户确认。
4. 曾经误改但检查点前已经恢复
| 内容 | 中途误改 | 检查点状态 |
|---|---|---|
| 证照证号、到期日、附件 | 遗漏保持导致表单清空不生效 | 已恢复原整行保存和清空语义,同时保留身份匹配 |
| 装送货段联系人、地址、备注等 | 普通字段遗漏保持导致清空失效 | 已恢复父段普通字段的原整行语义,子集合另行处理 |
| 显式清空或替换迁移 | 把迁移脚本也当作普通编辑,限制原清空导入功能 | 四个脚本已恢复原行为 |
四个迁移脚本:
backend/scripts/migrate_dibang_data.pybackend/scripts/migrate_bx_data.pybackend/scripts/migrate_crm_product.pybackend/scripts/migrate_crm_product_category.py
不要看到历史讨论就认为上述误改仍在检查点中。值班 workPlans 的遗漏清空曾被讨论,但没有继续改成统一遗漏保持,不能把讨论当成已落地修改。
5. 修复不完整与分析归因错误
值班旧请求兼容未完成
请求只有姓名、没有用户 ID 和指定记录 ID 时,新匹配逻辑无法复用已有绑定用户的指定记录,仍可能替换旧行;同名歧义处理也未完成,有两项相关回归失败。
原实现本来就重建指定人员,因此应归类为差量改造未完成,不能说成本次新引入的退化。
原本就有差量或复用能力的功能
- 物流主产品。
- 送货段父记录。
- 车辆和人员证照。
- 产品品牌和别名。
- 按段地磅关联。
此前把它们统一描述成全删全增,是分析错误。新增的主要是缺 ID 匹配、字段保留、校验及限制,不能因此认定所有新增代码都正确或都错误。
规范与测试不能代替业务判断
- AGENTS.md 新增的遗漏保持规则过于统一,可能与既有完整表单约定冲突。不能用本会话新增规则反证原功能错误;有冲突时应明确说明,再确认适用边界。
- 部分测试跟随新实现改变了预期,例如保留原记账期间、禁止审批中修改流程元数据。通过这些测试并不能证明业务改造正确。
- 测试文件存在不代表对应修复已经落地。角色清空和流程元数据恢复测试已存在,但检查点仍有失败。
- 仅增加测试不代表修改了对应业务源码。原生物流司机和现场页面此次主要新增验证;原生小程序净源码修改只有报销表单和审批配置两个文件。
6. 逐模块工作方式
- 检查当前分支、工作区及本模块未提交改动;保护其他工作,不直接 reset、clean 或整体覆盖。
- 只核对用户本次指定模块;读取现有代码、会话前证据、检查点差异。
- 明确实际业务约定,沿页面请求、Schema、路由、服务、持久化和下游引用追踪。不要仅凭函数名或删除语句判断。
- 记录复现操作、请求、预期与实际结果,区分已确认误改、原有问题、未完成改造和待确认业务。
- 在用户授权修复后,只修已确认问题;保留必要差量更新,不顺带改变清空规则、记账方式或其他限制。
- 验证本模块实际相关的 Web、H5、小程序入口,以及无变化保存、编辑、新增、删除、清空和下游影响。测试期望来自确认的业务行为。
- 输出具体文件、修复原因、验证结果及剩余不确定项。需要提交时只提交本模块改动,不混入其他工作。
建议顺序:角色权限 → 审批配置 → 库存归档 → 物流计划、合同切换与回传 → 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. 最小修复方案、具体文件和相关客户端验证清单。
优先利用隔离测试数据复现,不写生产数据库、不处理历史数据、不自动修复其他模块。业务含义不明确时指出具体分歧并询问,不自行扩大修改范围。
给我复核上述结果,待我明确同意修复后,再只实施这个模块的最小修复,并按确认的业务行为验证。
更换模块时只替换方括号内的模块名。对于库存模块,必须分别核对记账期间、估值方式和合法多段历史兼容性,不能合并成一个泛化的差量保存问题。