feat(bom): 新增动态级联扣减领料接口 cascade-inventory
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
from flask import Blueprint, request, jsonify, current_app
|
||||
from sqlalchemy import or_
|
||||
from app.services.bom_service import BomService, _cache_delete
|
||||
from app.services.cascade_service import CascadeService
|
||||
from app.models.base import MaterialBase
|
||||
from app.models.bom import BomTable
|
||||
from app.extensions import db
|
||||
@ -382,3 +383,50 @@ def get_bom_parents():
|
||||
except Exception as e:
|
||||
current_app.logger.error(f'获取BOM父件列表失败: {str(e)}')
|
||||
return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500
|
||||
|
||||
|
||||
@bom_bp.route('/cascade-inventory', methods=['GET'])
|
||||
@jwt_required()
|
||||
@permission_required('bom_manage')
|
||||
def cascade_inventory():
|
||||
"""
|
||||
动态级联扣减领料接口。
|
||||
|
||||
参数:
|
||||
bom_no BOM 编号(必填)
|
||||
order_qty 订单需求总量(必填,float)
|
||||
version BOM 版本(可选,默认取最新)
|
||||
|
||||
返回:
|
||||
级联展开后的分层领料清单,含 allocated / shortage 缺口分析
|
||||
"""
|
||||
try:
|
||||
bom_no = request.args.get('bom_no', '').strip()
|
||||
order_qty_str = request.args.get('order_qty', '').strip()
|
||||
version = request.args.get('version') or None
|
||||
|
||||
if not bom_no:
|
||||
return jsonify({'code': 400, 'msg': 'bom_no 不能为空'}), 400
|
||||
if not order_qty_str:
|
||||
return jsonify({'code': 400, 'msg': 'order_qty 不能为空'}), 400
|
||||
|
||||
try:
|
||||
order_qty = float(order_qty_str)
|
||||
except ValueError:
|
||||
return jsonify({'code': 400, 'msg': 'order_qty 必须是数字'}), 400
|
||||
|
||||
if order_qty <= 0:
|
||||
return jsonify({'code': 400, 'msg': 'order_qty 必须大于 0'}), 400
|
||||
|
||||
result = CascadeService.compute_cascade_result(bom_no, order_qty, version=version)
|
||||
|
||||
return jsonify({
|
||||
'code': 200,
|
||||
'msg': 'success',
|
||||
'data': result
|
||||
})
|
||||
except ValueError as e:
|
||||
return jsonify({'code': 404, 'msg': str(e)}), 404
|
||||
except Exception as e:
|
||||
current_app.logger.error(f'级联扣减领料失败: {str(e)}')
|
||||
return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500
|
||||
|
||||
Reference in New Issue
Block a user