15 lines
3.9 KiB
Markdown
15 lines
3.9 KiB
Markdown
# 子数据保存规则(强制)
|
|
|
|
适用于后端、Web 管理端、Web 移动 H5 和小程序。修改保存、批量更新、导入更新、复制、子数据移除及流程配置前,必须完整阅读本文件。
|
|
|
|
- **禁止全删全增**:编辑、保存、批量更新或导入更新已有主单时,SHALL NOT 先将该主单的全部子数据物理删除或统一设置 `del_flag=1`,再将请求中的子数据全部重新插入。不得通过前端先调用删除接口再批量新增、ORM 集合清空/替换或删除后重新生成 UUID 绕过此规则。全量提交列表不等于全量重建记录。
|
|
- **差量处理**:编辑已有主单时,SHALL 在当前租户、当前主单的有效子行上按下列规则处理。请求里带了本主单、本租户的有效 `id`:就地修改,保留原 `id`、创建人和创建时间。没带 `id`:生成新 `id` 插入。本次明确不再提交的旧行:软删除(`del_flag=1`)。不得把产品、人员等主数据 ID 当作明细 ID。
|
|
- **业务键复用(仅供参考)**:不是每个子表都有稳定业务键,无业务键的子表 SHALL 按上一条处理,不得按名称或其它字段猜配旧行。只有该子表自己定义了稳定业务键时,才可额外约定:没带 `id`,且该业务键在未被占用的旧行里只命中一条,则复用那一行、不新建。产品品牌、别名以名称作为这类业务键。命中多条时保存前失败,不改任何行。纯关联表若没有明细 `id`、只有关联组合,仍按该组合比较集合。
|
|
- **身份与历史字段**:更新 SHALL 保留原明细 ID、创建人和创建时间,以及本次未提交的业务字段(如实际数量、交付状态、归档金额、回传和附件信息)。关系不变时 SHALL 保留关系记录 ID。编辑载入、提交、保存后继续编辑均须保留服务端明细 ID;复制为新单时须清除原单及各层子明细 ID,并重新建立新单内部关联。此要求同时适用于 Web、移动 H5 和小程序。
|
|
- **遗漏与清空不同**:请求里根本没传这个子集合时,原集合保持不变;显式 `[]` 才表示申请清空,并仍须通过删除校验。字段未提交与显式清空也 SHALL 分别处理,禁止用 schema 默认值或 `items or []` 将遗漏误当清空。
|
|
- **校验先于修改**:SHALL 在写入前校验明细 ID 的存在性、有效状态、当前租户/主单归属及重复提交。重复 `id`、别人的 `id`、已删除 `id` 保存前直接失败,不改任何行,不得静默当新增。
|
|
- **删除引用保护**:移除或改变被引用明细的业务身份前,SHALL 检查运输、库存、回传、归档、审批等下游有效引用;存在引用时应拒绝或走已定义的业务撤销流程。不得让有效数据指向已删除明细,不得借普通保存自动重绑或清理历史异常。在途审批引用的流程节点不得因配置保存而被重建或破坏。
|
|
- **事务与回归**:主单、子单及关联变更 SHALL 在同一事务完成,禁止先提交主单再保存子单。相关修改 SHALL 覆盖无变更保存 ID 不变、修改/新增/移除、遗漏/空集合、重复/跨租户/跨主单 ID 拒绝、下游引用保护,以及各客户端编辑/复制 ID 往返的回归测试。
|
|
- **适用边界**:明确删除主单时的受控级联软删除、追加新的审批轮次/业务版本不是编辑既有子记录;这些操作仍须保留历史并校验引用。不得将普通保存命名为“重建”“同步”或“重新安排”来规避上述规则。审查时 SHALL 跟踪调用链确认业务语义,不能只凭函数名称判定。
|
|
- **已确认的业务例外**:无装货段计划在显式调整运输时,作废旧出入库单并生成新单及现场链接,是用户确认保留的业务流程。此例外仅适用于该出入库单作废重开流程,不适用于归档库存流水、地磅关联或其他明细的普通保存。
|