diff --git a/inventory-backend/app/services/outbound_service.py b/inventory-backend/app/services/outbound_service.py index 92f6f5b..a6df281 100644 --- a/inventory-backend/app/services/outbound_service.py +++ b/inventory-backend/app/services/outbound_service.py @@ -10,6 +10,8 @@ from app.models.inbound.semi import StockSemi from app.models.inbound.product import StockProduct # 引入基础信息表 from app.models.base import MaterialBase +# 引入维修单表 +from app.models.transaction import TransRepair class OutboundService: @@ -75,6 +77,30 @@ class OutboundService: res['price'] = get_price(buy, 'stock_buy') return res + # 查询维修单表 (按SKU或序列号查询,排除已出库状态) + repair = TransRepair.query.filter( + or_(TransRepair.sku == clean_code, TransRepair.serial_number == clean_code) + ).filter( + TransRepair.repair_status != '已出库' + ).first() + if repair: + res = { + 'id': repair.id, + 'sku': repair.sku, + 'name': repair.material_name or "维修件", + 'spec_model': "", + 'category': "", + 'material_type': "", + 'source_table': 'trans_repair', + 'stock_quantity': 1, + 'available_quantity': 1, + 'batch_number': '', + 'warehouse_location': repair.customer_location or '', + 'barcode': repair.sku, + 'price': float(repair.sale_price) if repair.sale_price else 0 + } + return res + return None @staticmethod @@ -158,6 +184,30 @@ class OutboundService: if quantity <= 0: raise ValueError(f"SKU {item.get('sku')} 的出库数量必须大于0") + # 处理维修单出库 + if source_table == 'trans_repair': + repair = TransRepair.query.with_for_update().get(stock_id) + if not repair: + raise ValueError(f"维修单不存在 (ID: {stock_id})") + + # 更新维修单状态为已出库 + repair.repair_status = '已出库' + repair.shipping_date = current_time + + # 创建出库记录 + new_record = TransOutbound( + sku=item.get('sku'), + source_table=source_table, + stock_id=stock_id, + barcode=item.get('barcode'), + quantity=quantity, + unit_price=unit_price, + outbound_time=current_time, + **common_data + ) + db.session.add(new_record) + continue + ModelClass = model_map.get(source_table) if not ModelClass: continue