from flask import Blueprint, request, jsonify from app.services.outbound_service import OutboundService from flask_jwt_extended import jwt_required, get_jwt_identity outbound_bp = Blueprint('outbound', __name__, url_prefix='/outbound') # -------------------------------------------------------- # 1. 扫码查询库存接口 # GET /api/v1/outbound/scan?barcode=... # -------------------------------------------------------- @outbound_bp.route('/scan', methods=['GET']) @jwt_required() def scan_barcode(): barcode = request.args.get('barcode') if not barcode: return jsonify({'code': 400, 'msg': '请提供条码'}), 400 try: result = OutboundService.get_stock_by_barcode(barcode) if result: return jsonify({'code': 200, 'data': result, 'msg': '扫描成功'}) else: return jsonify({'code': 404, 'msg': '未找到对应的库存记录'}), 404 except Exception as e: return jsonify({'code': 500, 'msg': str(e)}), 500 # -------------------------------------------------------- # 2. 提交出库单接口 # POST /api/v1/outbound # -------------------------------------------------------- @outbound_bp.route('', methods=['POST']) @jwt_required() def create_outbound(): data = request.get_json() if not data: return jsonify({'code': 400, 'msg': '无有效数据'}), 400 current_user = get_jwt_identity() # 获取当前登录用户作为操作员 # 简单的必填校验 (更复杂的校验可放入 Schema) required_fields = ['stock_id', 'source_table', 'quantity', 'consumer_name', 'signature_path'] for field in required_fields: if field not in data or not data[field]: return jsonify({'code': 400, 'msg': f'缺少必填字段: {field}'}), 400 try: outbound_record = OutboundService.create_outbound(data, operator_name=current_user) return jsonify({ 'code': 200, 'msg': '出库成功', 'data': outbound_record.to_dict() }) except ValueError as e: return jsonify({'code': 400, 'msg': str(e)}), 400 except Exception as e: return jsonify({'code': 500, 'msg': f'服务器内部错误: {str(e)}'}), 500 # -------------------------------------------------------- # 3. 获取出库记录列表 # GET /api/v1/outbound # -------------------------------------------------------- @outbound_bp.route('', methods=['GET']) @jwt_required() def get_outbound_list(): try: page = int(request.args.get('page', 1)) per_page = int(request.args.get('limit', 10)) keyword = request.args.get('keyword', '') # 日期范围处理可根据前端传参格式调整 result = OutboundService.get_list(page, per_page, keyword) return jsonify({ 'code': 200, 'msg': '获取成功', 'data': result }) except Exception as e: return jsonify({'code': 500, 'msg': str(e)}), 500