fix(outbound): integrate TransRepair into global barcode scanning and outbound checkout flow
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user