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.inbound.product import StockProduct
|
||||||
# 引入基础信息表
|
# 引入基础信息表
|
||||||
from app.models.base import MaterialBase
|
from app.models.base import MaterialBase
|
||||||
|
# 引入维修单表
|
||||||
|
from app.models.transaction import TransRepair
|
||||||
|
|
||||||
|
|
||||||
class OutboundService:
|
class OutboundService:
|
||||||
@ -75,6 +77,30 @@ class OutboundService:
|
|||||||
res['price'] = get_price(buy, 'stock_buy')
|
res['price'] = get_price(buy, 'stock_buy')
|
||||||
return res
|
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
|
return None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -158,6 +184,30 @@ class OutboundService:
|
|||||||
if quantity <= 0:
|
if quantity <= 0:
|
||||||
raise ValueError(f"SKU {item.get('sku')} 的出库数量必须大于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)
|
ModelClass = model_map.get(source_table)
|
||||||
if not ModelClass:
|
if not ModelClass:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user