feat(borrow): 转交流水表补 borrow_no 与 status(双向握手数据层)
背景 ---- 1) **单内撕裂**:原 /transfer 收的是**明细行 ID**,只更新那一行。一张单有 2 条明细时,转交后一条归接收人、另一条仍是原借用人 —— 前端按 borrow_no 聚合便同时显示两个名字(实测 BOR-20260917-0001:108→测试 / 109→杜邢宸)。 2) **单向强塞**:原实现发起即生效,接收人在毫不知情的情况下背上资产责任。 本次改动 ---- · 新增 borrow_no —— 单据身份。一次转交要覆盖该单**多行**,单行 ID 表达不了 覆盖范围;accept 时据此批量更新。borrow_id 保留为「发起时的代表明细」供追溯。 · 新增 status —— PENDING / ACCEPTED / REJECTED 状态机。 · 存量 1 行按旧语义(发起即生效)标记为 ACCEPTED 并回填 borrow_no: 它事实上已经生效,若标 PENDING,接收人会收到一条早已生效的待办。 · 建 borrow_no / status / (to_user_id,status) 索引,后者支撑「待我接收」查询。 同单号同一时刻只允许一条 PENDING(应用层强制),避免两个接收人争抢同一批实物。
This commit is contained in:
@ -143,15 +143,27 @@ class TransBorrow(db.Model):
|
||||
# =============================================================================
|
||||
|
||||
|
||||
# 转交状态机:发起只落 PENDING,接收人 accept 后才真正转移责任
|
||||
TRANSFER_STATUS_PENDING = 'PENDING' # 待接收(主表 current_holder 未动)
|
||||
TRANSFER_STATUS_ACCEPTED = 'ACCEPTED' # 已接收(主表已转移)
|
||||
TRANSFER_STATUS_REJECTED = 'REJECTED' # 已拒绝(主表不动,责任仍在原持有人)
|
||||
|
||||
|
||||
class TransBorrowTransfer(db.Model):
|
||||
"""借库转交流水:一行 = 一次转交,不做覆盖式更新。"""
|
||||
"""借库转交流水:一行 = 一次转交动作,不做覆盖式更新。"""
|
||||
|
||||
__tablename__ = 'trans_borrow_transfer'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
|
||||
# 关联主表(不建 FK:与 trans_return 一致,台账必须能独立存活)
|
||||
# ★ 代表明细:一次转交要覆盖该单号下**多行**,单行 ID 表达不了覆盖范围,
|
||||
# 故覆盖范围以 borrow_no 为准,此列仅供追溯。
|
||||
borrow_id = db.Column(db.Integer, nullable=False, index=True)
|
||||
# ★ 单据身份:accept 时据此批量更新该单全部未还明细的持有人
|
||||
borrow_no = db.Column(db.String(100), index=True)
|
||||
# ★ 状态机:见文件顶部常量
|
||||
status = db.Column(db.String(20), nullable=False, default=TRANSFER_STATUS_PENDING, index=True)
|
||||
|
||||
# 转出方(= 转交前的 current_holder)
|
||||
from_user_id = db.Column(db.Integer)
|
||||
@ -172,6 +184,13 @@ class TransBorrowTransfer(db.Model):
|
||||
return {
|
||||
'id': self.id,
|
||||
'borrow_id': self.borrow_id,
|
||||
'borrow_no': self.borrow_no,
|
||||
'status': self.status,
|
||||
'status_text': {
|
||||
TRANSFER_STATUS_PENDING: '待接收',
|
||||
TRANSFER_STATUS_ACCEPTED: '已接收',
|
||||
TRANSFER_STATUS_REJECTED: '已拒绝',
|
||||
}.get(self.status, self.status),
|
||||
'from_user_id': self.from_user_id,
|
||||
'from_user_name': self.from_user_name,
|
||||
'to_user_id': self.to_user_id,
|
||||
|
||||
Reference in New Issue
Block a user