fix: add missing imports for openpyxl and patch draft resolution in stock adjustment
This commit is contained in:
@ -14,6 +14,17 @@ from app.models.inbound.stocktake import StocktakeDraft
|
|||||||
from app.models.transaction import TransBorrow
|
from app.models.transaction import TransBorrow
|
||||||
from app.models.base import MaterialBase
|
from app.models.base import MaterialBase
|
||||||
|
|
||||||
|
# 尝试导入半成品和成品
|
||||||
|
try:
|
||||||
|
from app.models.inbound.semi import StockSemi
|
||||||
|
except ImportError:
|
||||||
|
StockSemi = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
from app.models.inbound.product import StockProduct
|
||||||
|
except ImportError:
|
||||||
|
StockProduct = None
|
||||||
|
|
||||||
|
|
||||||
def _normalize_user_id(user_id):
|
def _normalize_user_id(user_id):
|
||||||
"""规范化 user_id,确保是有效字符串"""
|
"""规范化 user_id,确保是有效字符串"""
|
||||||
@ -356,17 +367,22 @@ def adjust_stock():
|
|||||||
"""
|
"""
|
||||||
data = request.json
|
data = request.json
|
||||||
draft_id = data.get('draft_id')
|
draft_id = data.get('draft_id')
|
||||||
|
stock_id = data.get('stock_id') # 备用参数:通过 stock_id 查找草稿
|
||||||
operator_name = data.get('operator_name', 'System')
|
operator_name = data.get('operator_name', 'System')
|
||||||
remark = data.get('remark', '')
|
remark = data.get('remark', '')
|
||||||
|
|
||||||
if not draft_id:
|
if not draft_id and not stock_id:
|
||||||
return jsonify({"message": "draft_id 不能为空"}), 400
|
return jsonify({"message": "draft_id 或 stock_id 不能同时为空"}), 400
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 1. 获取草稿记录
|
# 1. 获取草稿记录(优先用 draft_id,否则用 stock_id)
|
||||||
draft = StocktakeDraft.query.get(draft_id)
|
draft = StocktakeDraft.query.get(draft_id) if draft_id else None
|
||||||
|
if not draft and stock_id:
|
||||||
|
# 尝试通过 stock_id 查找未处理的草稿
|
||||||
|
draft = StocktakeDraft.query.filter_by(stock_id=stock_id).first()
|
||||||
|
|
||||||
if not draft:
|
if not draft:
|
||||||
return jsonify({"message": "草稿记录不存在"}), 404
|
return jsonify({"message": f"平账失败:找不到对应的盘点草稿记录(draft_id={draft_id}, stock_id={stock_id})"}), 404
|
||||||
|
|
||||||
# 2. 获取库存记录
|
# 2. 获取库存记录
|
||||||
if not draft.stock_id or not draft.source_table:
|
if not draft.stock_id or not draft.source_table:
|
||||||
|
|||||||
@ -448,10 +448,15 @@ const api = {
|
|||||||
params: {}
|
params: {}
|
||||||
}),
|
}),
|
||||||
// ★ 新增: 单条库存调整
|
// ★ 新增: 单条库存调整
|
||||||
adjustStock: (draftId: number, remark: string) => request({
|
adjustStock: (draftId: number, stockId: number, remark: string) => request({
|
||||||
url: '/v1/inbound/stock/adjust',
|
url: '/v1/inbound/stock/adjust',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: { draft_id: draftId, operator_name: currentUser, remark: remark }
|
data: {
|
||||||
|
draft_id: draftId,
|
||||||
|
stock_id: stockId, // 备用参数
|
||||||
|
operator_name: currentUser,
|
||||||
|
remark: remark
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
// ★ 保留清除功能(用于兼容性)
|
// ★ 保留清除功能(用于兼容性)
|
||||||
clearDraft: () => request({
|
clearDraft: () => request({
|
||||||
@ -755,7 +760,10 @@ const exportToExcel = async () => {
|
|||||||
const res: any = await request({
|
const res: any = await request({
|
||||||
url: '/v1/inbound/stock/export-stocktake',
|
url: '/v1/inbound/stock/export-stocktake',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
responseType: 'blob' as any // 核心:接收二进制文件流
|
responseType: 'blob' as any, // 核心:接收二进制文件流
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 触发静默下载
|
// 触发静默下载
|
||||||
@ -886,7 +894,7 @@ const handleAdjust = async (row: any) => {
|
|||||||
|
|
||||||
const remark = `盘点差异调整 - ${row.diff_qty > 0 ? '盘盈入库' : '盘亏出库'}`
|
const remark = `盘点差异调整 - ${row.diff_qty > 0 ? '盘盈入库' : '盘亏出库'}`
|
||||||
|
|
||||||
const res: any = await api.adjustStock(row.id, remark)
|
const res: any = await api.adjustStock(row.id, row.stock_id, remark)
|
||||||
|
|
||||||
ElMessage.success(res.message || '调整成功')
|
ElMessage.success(res.message || '调整成功')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user