fix(api): expose real 500 error stack trace and fix missing func import

This commit is contained in:
DXC
2026-03-25 10:56:31 +08:00
parent ac7774e0e3
commit 7421ef3231
6 changed files with 20 additions and 3 deletions

View File

@ -313,7 +313,9 @@ def delete_buy(id):
# 捕获业务拦截的报错,返回友好的 msg # 捕获业务拦截的报错,返回友好的 msg
return jsonify({"code": 400, "msg": str(ve)}) return jsonify({"code": 400, "msg": str(ve)})
except Exception as e: except Exception as e:
return jsonify({"code": 500, "msg": "服务器内部错误,请联系系统管理员"}), 500 import traceback
traceback.print_exc() # 在控制台打印真实错误堆栈
return jsonify({"code": 500, "msg": f"服务器内部错误详情: {str(e)}"}), 500
# ------------------------------------------------------------------ # ------------------------------------------------------------------

View File

@ -185,9 +185,12 @@ def delete(id):
try: try:
material_name = ProductInboundService.delete_inbound(id) material_name = ProductInboundService.delete_inbound(id)
return jsonify({"code": 200, "msg": "删除成功", "material_name": material_name}) return jsonify({"code": 200, "msg": "删除成功", "material_name": material_name})
except ValueError as ve:
return jsonify({"code": 400, "msg": str(ve)})
except Exception as e: except Exception as e:
import traceback
traceback.print_exc() traceback.print_exc()
return jsonify({"code": 500, "msg": str(e)}), 500 return jsonify({"code": 500, "msg": f"服务器内部错误详情: {str(e)}"}), 500
@inbound_product_bp.route('/<int:id>/history', methods=['GET']) @inbound_product_bp.route('/<int:id>/history', methods=['GET'])
@permission_required('inbound_product') @permission_required('inbound_product')

View File

@ -180,9 +180,12 @@ def delete_semi(id):
try: try:
material_name = SemiInboundService.delete_inbound(id) material_name = SemiInboundService.delete_inbound(id)
return jsonify({"code": 200, "msg": "删除成功", "material_name": material_name}) return jsonify({"code": 200, "msg": "删除成功", "material_name": material_name})
except ValueError as ve:
return jsonify({"code": 400, "msg": str(ve)})
except Exception as e: except Exception as e:
import traceback
traceback.print_exc() traceback.print_exc()
return jsonify({"code": 500, "msg": str(e)}), 500 return jsonify({"code": 500, "msg": f"服务器内部错误详情: {str(e)}"}), 500
@inbound_semi_bp.route('/<int:id>/history', methods=['GET']) @inbound_semi_bp.route('/<int:id>/history', methods=['GET'])
@permission_required('inbound_semi') @permission_required('inbound_semi')

View File

@ -4,6 +4,7 @@ from app.models.base import MaterialBase
from app.models.outbound import TransOutbound from app.models.outbound import TransOutbound
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from sqlalchemy import or_, func, text, and_ from sqlalchemy import or_, func, text, and_
from sqlalchemy.exc import IntegrityError
import traceback import traceback
import json import json
@ -258,6 +259,9 @@ class ProductInboundService:
db.session.commit() db.session.commit()
return material_name return material_name
return None return None
except IntegrityError:
db.session.rollback()
raise ValueError("该入库单已被出库、盘点或借还等业务关联,为保证账目完整,禁止删除!")
except Exception as e: except Exception as e:
db.session.rollback() db.session.rollback()
raise e raise e

View File

@ -4,6 +4,7 @@ from app.models.base import MaterialBase
from app.models.outbound import TransOutbound from app.models.outbound import TransOutbound
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from sqlalchemy import or_, func, text, and_ from sqlalchemy import or_, func, text, and_
from sqlalchemy.exc import IntegrityError
import traceback import traceback
import json import json
@ -346,6 +347,9 @@ class SemiInboundService:
db.session.delete(stock) db.session.delete(stock)
db.session.commit() db.session.commit()
return material_name return material_name
except IntegrityError:
db.session.rollback()
raise ValueError("该入库单已被出库、盘点或借还等业务关联,为保证账目完整,禁止删除!")
except Exception as e: except Exception as e:
db.session.rollback() db.session.rollback()
raise e raise e

View File

@ -1,6 +1,7 @@
from app.models.system import SysMenu, SysElement, SysRolePermission from app.models.system import SysMenu, SysElement, SysRolePermission
from app.extensions import db from app.extensions import db
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy import func
class PermissionService: class PermissionService: