4.27
This commit is contained in:
@ -22,14 +22,18 @@ except ImportError:
|
|||||||
SysUser = None
|
SysUser = None
|
||||||
|
|
||||||
# 尝试导入半成品和成品
|
# 尝试导入半成品和成品
|
||||||
|
import logging
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from app.models.inbound.semi import StockSemi
|
from app.models.inbound.semi import StockSemi
|
||||||
except ImportError:
|
except Exception as e:
|
||||||
|
logging.error(f"❌ 致命错误:StockSemi 模型导入失败: {e}")
|
||||||
StockSemi = None
|
StockSemi = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from app.models.inbound.product import StockProduct
|
from app.models.inbound.product import StockProduct
|
||||||
except ImportError:
|
except Exception as e:
|
||||||
|
logging.error(f"❌ 致命错误:StockProduct 模型导入失败: {e}")
|
||||||
StockProduct = None
|
StockProduct = None
|
||||||
|
|
||||||
|
|
||||||
@ -79,28 +83,50 @@ def get_stock_info(uuid_or_barcode):
|
|||||||
根据 uuid 或 barcode 查询库存信息
|
根据 uuid 或 barcode 查询库存信息
|
||||||
返回: (item, source_table, stock_id)
|
返回: (item, source_table, stock_id)
|
||||||
"""
|
"""
|
||||||
|
# 清洗输入:去掉前后空格和换行符
|
||||||
|
uuid_or_barcode = str(uuid_or_barcode).strip()
|
||||||
|
|
||||||
# 1. 成品
|
# 1. 成品
|
||||||
if StockProduct:
|
if StockProduct:
|
||||||
|
print(f"🔍 [QUERY DEBUG] 正在成品表搜关键词: {uuid_or_barcode}")
|
||||||
item = StockProduct.query.filter(
|
item = StockProduct.query.filter(
|
||||||
db.or_(StockProduct.barcode == uuid_or_barcode, StockProduct.sku == uuid_or_barcode)
|
db.or_(
|
||||||
|
StockProduct.barcode.ilike(f"%{uuid_or_barcode}%"),
|
||||||
|
StockProduct.sku.ilike(f"%{uuid_or_barcode}%"),
|
||||||
|
StockProduct.serial_number.ilike(f"%{uuid_or_barcode}%")
|
||||||
|
)
|
||||||
).first()
|
).first()
|
||||||
if item:
|
if item:
|
||||||
|
print(f"✅ [QUERY DEBUG] 命中成品! ID={item.id}, SKU={item.sku}")
|
||||||
return (item, 'stock_product', item.id)
|
return (item, 'stock_product', item.id)
|
||||||
|
else:
|
||||||
|
print(f"❌ [QUERY DEBUG] 成品表查询结束,无匹配项")
|
||||||
|
|
||||||
# 2. 半成品
|
# 2. 半成品
|
||||||
if StockSemi:
|
if StockSemi:
|
||||||
|
print(f"🔍 [QUERY DEBUG] 正在半成品表搜关键词: {uuid_or_barcode}")
|
||||||
item = StockSemi.query.filter(
|
item = StockSemi.query.filter(
|
||||||
db.or_(StockSemi.barcode == uuid_or_barcode, StockSemi.sku == uuid_or_barcode)
|
db.or_(
|
||||||
|
StockSemi.barcode.ilike(f"%{uuid_or_barcode}%"),
|
||||||
|
StockSemi.sku.ilike(f"%{uuid_or_barcode}%"),
|
||||||
|
StockSemi.serial_number.ilike(f"%{uuid_or_barcode}%")
|
||||||
|
)
|
||||||
).first()
|
).first()
|
||||||
if item:
|
if item:
|
||||||
|
print(f"✅ [QUERY DEBUG] 命中半成品! ID={item.id}, SKU={item.sku}")
|
||||||
return (item, 'stock_semi', item.id)
|
return (item, 'stock_semi', item.id)
|
||||||
|
|
||||||
# 3. 采购件
|
# 3. 采购件
|
||||||
if StockBuy:
|
if StockBuy:
|
||||||
|
print(f"🔍 [QUERY DEBUG] 正在采购件表搜关键词: {uuid_or_barcode}")
|
||||||
item = StockBuy.query.filter(
|
item = StockBuy.query.filter(
|
||||||
db.or_(StockBuy.barcode == uuid_or_barcode, StockBuy.sku == uuid_or_barcode)
|
db.or_(
|
||||||
|
StockBuy.barcode.ilike(f"%{uuid_or_barcode}%"),
|
||||||
|
StockBuy.sku.ilike(f"%{uuid_or_barcode}%")
|
||||||
|
)
|
||||||
).first()
|
).first()
|
||||||
if item:
|
if item:
|
||||||
|
print(f"✅ [QUERY DEBUG] 命中采购件! ID={item.id}, SKU={item.sku}")
|
||||||
return (item, 'stock_buy', item.id)
|
return (item, 'stock_buy', item.id)
|
||||||
|
|
||||||
return (None, None, None)
|
return (None, None, None)
|
||||||
@ -218,14 +244,15 @@ def get_stock_list():
|
|||||||
|
|
||||||
# 3. 成品
|
# 3. 成品
|
||||||
if StockProduct:
|
if StockProduct:
|
||||||
try:
|
|
||||||
q = StockProduct.query.filter(StockProduct.stock_quantity > 0)
|
q = StockProduct.query.filter(StockProduct.stock_quantity > 0)
|
||||||
if keyword:
|
if keyword:
|
||||||
q = q.filter(
|
q = q.filter(
|
||||||
db.or_(
|
db.or_(
|
||||||
StockProduct.product_name.ilike(f'%{keyword}%'),
|
StockProduct.base.has(MaterialBase.name.ilike(f'%{keyword}%')),
|
||||||
StockProduct.spec_model.ilike(f'%{keyword}%'),
|
StockProduct.base.has(MaterialBase.spec_model.ilike(f'%{keyword}%')),
|
||||||
StockProduct.sku.ilike(f'%{keyword}%')
|
StockProduct.sku.ilike(f'%{keyword}%'),
|
||||||
|
StockProduct.barcode.ilike(f'%{keyword}%'),
|
||||||
|
StockProduct.serial_number.ilike(f'%{keyword}%')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
rows = q.all()
|
rows = q.all()
|
||||||
@ -234,14 +261,13 @@ def get_stock_list():
|
|||||||
d['stock_type'] = 'product'
|
d['stock_type'] = 'product'
|
||||||
d['type'] = 'product'
|
d['type'] = 'product'
|
||||||
d['typeLabel'] = '成品'
|
d['typeLabel'] = '成品'
|
||||||
d['name'] = d.get('product_name', d.get('name', ''))
|
d['name'] = d.get('material_name', d.get('name', ''))
|
||||||
d['standard'] = d.get('spec_model', d.get('standard', ''))
|
d['standard'] = d.get('spec_model', d.get('standard', ''))
|
||||||
d['available_quantity'] = d.get('qty_available', d.get('available_quantity', 0))
|
d['available_quantity'] = d.get('qty_available', d.get('available_quantity', 0))
|
||||||
all_items.append(d)
|
all_items.append(d)
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
total = len(all_items)
|
total = len(all_items)
|
||||||
|
|
||||||
start = (page - 1) * pageSize
|
start = (page - 1) * pageSize
|
||||||
end = start + pageSize
|
end = start + pageSize
|
||||||
paged = all_items[start:end]
|
paged = all_items[start:end]
|
||||||
@ -361,6 +387,7 @@ def add_draft():
|
|||||||
data = request.json
|
data = request.json
|
||||||
user_id = _normalize_user_id()
|
user_id = _normalize_user_id()
|
||||||
uuid = data.get('uuid')
|
uuid = data.get('uuid')
|
||||||
|
print(f"🚀 [SCAN DEBUG] 后端实际接收到的 UUID 原文: |{uuid}| (长度: {len(str(uuid)) if uuid else 0})")
|
||||||
quantity = float(data.get('quantity', 1))
|
quantity = float(data.get('quantity', 1))
|
||||||
session_id = data.get('session_id')
|
session_id = data.get('session_id')
|
||||||
# ★ 新增: 提取备注字段
|
# ★ 新增: 提取备注字段
|
||||||
|
|||||||
@ -234,7 +234,7 @@ const handleLogout = () => {
|
|||||||
<footer v-if="!isLoginPage" class="app-footer">
|
<footer v-if="!isLoginPage" class="app-footer">
|
||||||
<span class="version-tag">
|
<span class="version-tag">
|
||||||
<el-icon style="vertical-align: middle; margin-right: 4px"><InfoFilled /></el-icon>
|
<el-icon style="vertical-align: middle; margin-right: 4px"><InfoFilled /></el-icon>
|
||||||
当前版本:V3.13(4.23部署基础信息导入)
|
当前版本:V3.14(4.27部署)
|
||||||
</span>
|
</span>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user