fix(inbound/buy): 批号自增改为按物料精准取最近一条
- 新增 get_latest_batch_record_by_base_id:SQL 直接 filter(base_id)+order by in_date/id desc first(),O(1) 不分页 - 新增 GET /inbound/buy/latest-record - 修复原“拉全表前1000条再前端过滤”导致的历史被截断→批号退回000001/重复入库被拦(如 CCAB0029)
This commit is contained in:
@ -353,3 +353,18 @@ def get_last_location():
|
|||||||
|
|
||||||
location = BuyInboundService.get_last_location_by_base_id(base_id)
|
location = BuyInboundService.get_last_location_by_base_id(base_id)
|
||||||
return jsonify({"code": 200, "msg": "success", "data": {"location": location}})
|
return jsonify({"code": 200, "msg": "success", "data": {"location": location}})
|
||||||
|
|
||||||
|
|
||||||
|
@inbound_buy_bp.route('/latest-record', methods=['GET'])
|
||||||
|
@permission_required('inbound_buy')
|
||||||
|
def get_latest_batch_record():
|
||||||
|
"""
|
||||||
|
按物料精准取最近一次采购入库记录(批号自增用)。
|
||||||
|
返回 data: {'has_history': bool, 'mode': 'serial'|'batch', 'latest_batch': str}
|
||||||
|
"""
|
||||||
|
base_id = request.args.get('base_id', type=int)
|
||||||
|
if not base_id:
|
||||||
|
return jsonify({"code": 400, "msg": "base_id required"}), 400
|
||||||
|
|
||||||
|
data = BuyInboundService.get_latest_batch_record_by_base_id(base_id)
|
||||||
|
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||||
|
|||||||
@ -601,6 +601,28 @@ class BuyInboundService:
|
|||||||
return [r[0] for r in
|
return [r[0] for r in
|
||||||
db.session.query(StockBuy.warehouse_location).filter(StockBuy.base_id == base_id).distinct().all()]
|
db.session.query(StockBuy.warehouse_location).filter(StockBuy.base_id == base_id).distinct().all()]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_latest_batch_record_by_base_id(base_id):
|
||||||
|
"""
|
||||||
|
按物料精准取“最近一次采购入库记录”(SQL 直接 filter base_id + limit,O(1)、不分页)。
|
||||||
|
用于采购入库表单的批号自增:避免以前端拉 getBuyList 前 1000 条再过滤造成的
|
||||||
|
“历史被截断 → 误判无历史 → 批号退回 000001/重复入库被拦”问题。
|
||||||
|
返回: {'has_history': bool, 'mode': 'serial'|'batch', 'latest_batch': str}
|
||||||
|
"""
|
||||||
|
if not base_id:
|
||||||
|
return {'has_history': False, 'mode': 'batch', 'latest_batch': ''}
|
||||||
|
latest = StockBuy.query.filter(
|
||||||
|
StockBuy.base_id == base_id
|
||||||
|
).order_by(
|
||||||
|
StockBuy.in_date.desc().nullslast(),
|
||||||
|
StockBuy.id.desc()
|
||||||
|
).first()
|
||||||
|
if latest is None:
|
||||||
|
return {'has_history': False, 'mode': 'batch', 'latest_batch': ''}
|
||||||
|
if latest.serial_number:
|
||||||
|
return {'has_history': True, 'mode': 'serial', 'latest_batch': latest.batch_number or ''}
|
||||||
|
return {'has_history': True, 'mode': 'batch', 'latest_batch': latest.batch_number or ''}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_last_location_by_base_id(base_id):
|
def get_last_location_by_base_id(base_id):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user