fix: BOM草稿模块缺陷修复(事务回滚 + 外键约束 + 前端状态清理)
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.bom_draft_service import BomDraftService
|
||||
from app.models.base import MaterialBase
|
||||
from app.models.bom import BomTable
|
||||
from app.extensions import db
|
||||
@ -420,3 +421,61 @@ def get_cascade_inventory():
|
||||
except Exception as e:
|
||||
current_app.logger.error(f'级联库存计算失败: {str(e)}')
|
||||
return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500
|
||||
|
||||
|
||||
# ==================== BOM 草稿接口 ====================
|
||||
|
||||
@bom_bp.route('/draft/save', methods=['POST'])
|
||||
@jwt_required()
|
||||
def save_draft():
|
||||
"""暂存草稿"""
|
||||
data = request.get_json()
|
||||
bom_no = data.get('bom_no')
|
||||
version = data.get('version', 'V1.0')
|
||||
parent_id = data.get('parent_id')
|
||||
children = data.get('children', [])
|
||||
|
||||
if not bom_no:
|
||||
return jsonify({'code': 400, 'msg': 'bom_no 不能为空'}), 400
|
||||
if not parent_id:
|
||||
return jsonify({'code': 400, 'msg': 'parent_id 不能为空'}), 400
|
||||
|
||||
bom_draft_no = BomDraftService.save_draft(bom_no, version, parent_id, children)
|
||||
return jsonify({'code': 200, 'msg': '草稿暂存成功', 'data': {'bom_no': bom_draft_no}})
|
||||
|
||||
|
||||
@bom_bp.route('/draft/detail', methods=['GET'])
|
||||
@jwt_required()
|
||||
def get_draft_detail():
|
||||
"""读取草稿详情"""
|
||||
bom_no = request.args.get('bom_no')
|
||||
version = request.args.get('version', 'V1.0')
|
||||
|
||||
if not bom_no:
|
||||
return jsonify({'code': 400, 'msg': 'bom_no 不能为空'}), 400
|
||||
|
||||
draft = BomDraftService.get_draft_detail(bom_no, version)
|
||||
|
||||
# 【核心修改】:查不到草稿是正常现象,返回 HTTP 200 即可
|
||||
if draft is None:
|
||||
return jsonify({'code': 200, 'msg': '无草稿', 'data': None}), 200
|
||||
|
||||
return jsonify({'code': 200, 'msg': '查询成功', 'data': draft})
|
||||
|
||||
|
||||
@bom_bp.route('/draft/publish', methods=['POST'])
|
||||
@jwt_required()
|
||||
def publish_draft():
|
||||
"""发布草稿为正式 BOM"""
|
||||
data = request.get_json()
|
||||
bom_no = data.get('bom_no')
|
||||
version = data.get('version', 'V1.0')
|
||||
|
||||
if not bom_no:
|
||||
return jsonify({'code': 400, 'msg': 'bom_no 不能为空'}), 400
|
||||
|
||||
try:
|
||||
bom_draft_no = BomDraftService.publish_draft(bom_no, version)
|
||||
return jsonify({'code': 200, 'msg': 'BOM 发布成功', 'data': {'bom_no': bom_draft_no}})
|
||||
except ValueError as e:
|
||||
return jsonify({'code': 400, 'msg': str(e)}), 400
|
||||
|
||||
Reference in New Issue
Block a user