feat(return): 逆向物流数据模型与迁移
新增原单退回与不良品在管的持久化结构。
- TransOutbound 增 returned_quantity(numeric(19,4),非 float):该值参与
「return_qty <= quantity - returned_quantity」判等,浮点误差会让反复部分
退回后出现「已退满却判定未退满」的错判
- 新增 TransReturn:退回流水,每次退回写一条而非覆盖式更新。刻意与
trans_borrow 划清界限——后者部分归还时会覆盖 return_time/operator,
导致归还历史永久丢失
- 新增 TransDefectiveGoods:不良品在管台账。坏件全程不入库存表,因为
status 是行级属性而质量是件级属性,把坏件加回原行只能整行打不良
(实测 stock_buy 单行最大 4789 件、中位 8 件,整行打不良会凭空损失良品)
- 状态机:待处理 → 处理中 → {已回库|已报废|已闭环}。终态由累计去向推导
而非「最后一次动作」——一批坏件可能既回库过又报废过,按最后动作定状态
会产生误导
- restocked_qty/scrapped_qty 两列:二期用 quantity-remaining_qty 反推回库量,
三期加入报废出口后该反推失效
- 审计白名单与模型预加载同步登记(监听器绑定 18 → 20 个模型)
迁移脚本均为纯追加式 DDL,含预检、回滚段与执行后核对。首个脚本用
COALESCE 包裹数量列——库存表允许数量为 NULL,而「NULL 大于 0」求值为
NULL 而非真,裸写会让脏行在预览与诊断两次查询里凭空消失。
This commit is contained in:
@ -310,7 +310,14 @@ def create_app():
|
||||
# 系统与业务模型 (SysRolePermission 等在 models.system 中)
|
||||
from app.models.system import SysUser, SysLog, SysMenu, SysElement, SysRolePermission, SysWarehouseLocation
|
||||
# 确保借还模型被加载
|
||||
from app.models.transaction import TransBorrow, TransRepair, TransScrap
|
||||
# ★ TransReturn / TransDefectiveGoods 为二期逆向物流新增,必须在此
|
||||
# 预加载:审计监听器按表名从 db.metadata 取模型,未预加载的表在
|
||||
# create_app() 完成时尚未映射,会漏绑审计(虽然后续惰性补绑能兜底,
|
||||
# 但预加载更可靠)。
|
||||
from app.models.transaction import (
|
||||
TransBorrow, TransRepair, TransScrap,
|
||||
TransReturn, TransDefectiveGoods,
|
||||
)
|
||||
# ★ 审批单模型(原仅在函数体内延迟导入,会导致审计监听器漏绑)
|
||||
from app.models.outbound import OutboundApproval
|
||||
from app.models.borrow import BorrowApproval
|
||||
|
||||
Reference in New Issue
Block a user