feat: 借还记录默认排序重构——有限期单按预计归还时间升序靠前,无限期单按借出时间升序靠后(优先关注快到期/逾期)
This commit is contained in:
@ -434,7 +434,12 @@ class TransService:
|
||||
order_subq = (
|
||||
db.session.query(
|
||||
TransBorrow.borrow_no.label('borrow_no'),
|
||||
func.min(TransBorrow.expected_return_time).label('sort_key')
|
||||
# 有限期梯队内:单号内最早预计归还时间
|
||||
func.min(TransBorrow.expected_return_time).label('sort_key'),
|
||||
# 无限期梯队内:单号内最早借出时间(呆滞借用盘点)
|
||||
func.min(TransBorrow.borrow_time).label('min_borrow_time'),
|
||||
# 单内是否含"有限期"明细:任一 expected_return_time 非空 → 1(有限期单排前)
|
||||
func.max(case((TransBorrow.expected_return_time.isnot(None), 1), else_=0)).label('has_finite')
|
||||
)
|
||||
.group_by(TransBorrow.borrow_no)
|
||||
.subquery()
|
||||
@ -673,8 +678,15 @@ class TransService:
|
||||
)
|
||||
)
|
||||
|
||||
# 排序(单号维度的 sort_key ASC)
|
||||
borrow_no_q = borrow_no_q.order_by(nullslast(asc(order_subq.c.sort_key)))
|
||||
# ★ 默认排序(多级复合,符合"优先关注快到期/逾期"业务):
|
||||
# 1) 有限期单(含 expected_return_time)排前,无限期单排后
|
||||
# 2) 有限期内按最早预计归还时间 ASC(越快到期/逾期越久越靠前)
|
||||
# 3) 无限期内按最早借出时间 ASC(借出越久越靠前,暴露长期未还的呆滞借用)
|
||||
borrow_no_q = borrow_no_q.order_by(
|
||||
case((order_subq.c.has_finite == 0, 1), else_=0).asc(),
|
||||
nullslast(asc(order_subq.c.sort_key)),
|
||||
asc(order_subq.c.min_borrow_time)
|
||||
)
|
||||
|
||||
# 分页(基准 = borrow_no 单号数)
|
||||
pagination = borrow_no_q.paginate(page=page, per_page=limit, error_out=False)
|
||||
|
||||
Reference in New Issue
Block a user