diff --git a/inventory-backend/app/services/trans_service.py b/inventory-backend/app/services/trans_service.py index 3859a09..f09720c 100644 --- a/inventory-backend/app/services/trans_service.py +++ b/inventory-backend/app/services/trans_service.py @@ -1216,7 +1216,10 @@ class TransService: 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) + # ★ 无限期梯队内按借出时间**从近到远**(desc)。 + # 原实现是 asc「借出越久越靠前」,设计意图是暴露呆滞借用; + # 业务方明确要求改为从近到远,故反转。 + desc(order_subq.c.min_borrow_time) ) # 分页(基准 = borrow_no 单号数) @@ -1311,6 +1314,23 @@ class TransService: item_dict['material_name'] = material_name items_with_names.append(item_dict) + # ==================================================================== + # ★ 恢复业务排序(此前被静默丢弃) + # + # detail_records 是按 `borrow_no ASC` 重新拉取的,而单号形如 + # BOR-YYYYMMDD-NNNN —— 它的**字母序恰好等于借出日期序**。 + # 于是上面步骤 2 辛苦算出的「逾期优先」分页顺序(page_borrow_nos) + # 被这次重排**整套覆盖**:无限期单排到了最前,有限期里 10-01 排在 + # 11-01 之后,看起来完全随机。那份 ORDER BY 一直是死代码。 + # + # 这里按 page_borrow_nos 的顺序还原输出。明细内部仍按 id 升序 + # (同一次发货写入的明细,id 序即扫码顺序,便于阅读)。 + # ==================================================================== + _order_idx = {bn: i for i, bn in enumerate(page_borrow_nos)} + items_with_names.sort( + key=lambda d: (_order_idx.get(d.get('borrow_no'), len(_order_idx)), d.get('id') or 0) + ) + return { 'items': items_with_names, 'total': total_orders,