--[[
编码: GK-API-09
名称: 盘点计划同步接口
作者: 袁峰
入口函数:Count_Pan_Sync
功能说明: 该接口是同步接口,
上游系统调用该接口后,WES的响应报文success说明WES已经将该报文接收成功;
需要同步盘点任务表和盘点任务明细表xml结构。
变更历史:
SIMPLIFIED CHINESE
0
TASK30000100
01
Manual
10
YH
YH100001
CGKHTY
CGKHTY
2025-05-06
2025-05-06
100
XR33201-2L080B
2
PHI00000000000001309
TASK300000101
02
Auto
5
PD
PD200001
GKHT
GKHT
2025-05-07
2025-05-07
110
ABC123
10
BATCH2025001
111
XYZ456
3
BATCH2025002
响应示例:
success
0
成功
]] --
wms_base = require("wms_base")
xml = require("oi_base_xml")
mobox = require("OILua_JavelinExt")
m3 = require("oi_base_mobox")
wms = require("OILua_WMS")
-- 创建统一返回结果
function Create_result(flag, code, msg, error)
return {
flag = flag or "success",
code = code or "0",
message = msg or ""
}
end
function Count_Pan_Sync(strLuaDEID)
-- 初始化最终结果
local FinalRes = Create_result()
-- 1. 获取 xml 数据包
local nRet, soap_xml = mobox.getCurEditDataPacket(strLuaDEID)
if nRet ~= 0 then
FinalRes = Create_result("failure", "201", "无法获取数据包: " .. soap_xml)
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.Stop(strLuaDEID, "获取数据包失败", soap_xml)
return
end
lua.DebugEx(strLuaDEID, "获取到的数据包", soap_xml)
-- 2. 解析 xml
local nRet, parsed_data = xml.parse(soap_xml)
if nRet ~= 0 then
FinalRes = Create_result("failure", "202", "xml 格式非法")
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.Stop(strLuaDEID, "xml格式非法", parsed_data)
return
end
-- 3. 提取主表数据
local receipt_data = parsed_data.Envelope.Body.InventoryTasksReq.InventoryTasks_Input
local input_params = receipt_data.InputParameters
-- 检查是否存在 InventoryTasks_TB
if not input_params or not input_params.InventoryTasks_TB then
FinalRes = Create_result("failure", "203", "xml 数据格式错误,缺少 InventoryTasks_TB")
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.Stop(strLuaDEID, "xml 数据格式错误", xml_result)
return
end
-- 4. 统一处理:确保 mainTables 是数组(即使只有一个主表)
local mainTables = input_params.InventoryTasks_TB
if mainTables[1] == nil then
mainTables = {mainTables}
end
-- 5. 获取系统常量
local RetWH_COE, CONST_WH = wms_base.Get_sConst2("GK_Default_Warehouse")
if RetWH_COE ~= 0 then
lua.DebugEx(strLuaDEID, "获取仓库常量失败!", CONST_WH)
FinalRes = Create_result("failure", "204", "获取仓库常量失败" .. CONST_WH)
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.Stop(strLuaDEID, "获取系统常量失败", xml_result)
return
end
-- 6. 遍历所有盘点任务
for i = 1, #mainTables do
local mainData = mainTables[i]
-- 检查盘点任务是否已存在
local strCondition = string.format("S_CP_NO = '%s'", mainData.taskId)
lua.DebugEx(strLuaDEID, "查询盘点任务条件", strCondition)
local nRet, retCountPlan = m3.GetDataObjByCondition(strLuaDEID, "Count_Plan", strCondition)
lua.DebugEx(strLuaDEID, "查询结果", retCountPlan)
if nRet == 0 then
-- 查询成功且找到记录,说明盘点任务已存在
lua.DebugEx(strLuaDEID, "查询成功,盘点任务已存在", retCountPlan)
FinalRes = Create_result("failure", "1", "盘点任务已存在",
"盘点任务[" .. mainData.taskId .. "]已存在")
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.Stop(strLuaDEID, "盘点任务已存在", retCountPlan)
return
-- 如果是nRet=1,那么表示这个数据在表中不存在,可以放心插入新数据
elseif nRet ~= 1 then
-- 查询出错
lua.DebugEx(strLuaDEID, "查询出错", retCountPlan)
FinalRes = Create_result("failure", "206", "检查盘点任务是否存在时出错",
"检查盘点任务[" .. mainData.taskId .. "]时出错: " .. retCountPlan)
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.Stop(strLuaDEID, "检查盘点任务是否存在时出错", xml_result)
return
end
-- 创建主表数据
local count_plan = m3.AllocObject(strLuaDEID, "Count_Plan")
count_plan.cp_no = mainData.taskId
count_plan.inventory_mode = mainData.inventoryMode
count_plan.work_mode = mainData.workMode
count_plan.count_limit = mainData.MaintenanceNumber
count_plan.pan_type = mainData.inventoryType or ""
lua.DebugEx(strLuaDEID, "容器类型:", count_plan.pan_type);
count_plan.bs_no = mainData.orderNo
count_plan.storer = mainData.storerId
count_plan.owner = mainData.ownerId
count_plan.begin_time = mainData.mtBeginDate
count_plan.end_time = mainData.mtEndDate
count_plan.wh_code = CONST_WH
count_plan.plan_total = 0
count_plan.b_state = 0
count_plan.acc_finish = 0
lua.DebugEx(strLuaDEID, "获取创建数据:", count_plan);
-- 检查是否已存在相同关键字的记录
local nRet, ret_info = m3.CreateDataObj(strLuaDEID, count_plan)
lua.DebugEx(strLuaDEID, "创建结果", ret_info)
if nRet ~= 0 then
-- 再次检查是否真的存在
local nRetCheck, retCountPlanCheck = m3.GetDataObjByCondition(strLuaDEID, "Count_Plan", strCondition)
lua.DebugEx(strLuaDEID, "再次查询结果", retCountPlanCheck)
if nRetCheck == 0 then
FinalRes = Create_result("failure", "205", "盘点任务已存在",
"盘点任务[" .. mainData.taskId .. "]已存在")
else
FinalRes = Create_result("failure", "207", "创建盘点任务主表失败",
"盘点任务[" .. mainData.taskId .. "]创建失败: " .. ret_info)
end
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.Stop(strLuaDEID, "创建盘点任务主表失败", ret_info)
return
end
-- 检查明细数据是否存在
if mainData.InventoryTasks_TB_ITEM == nil then
lua.DebugEx(strLuaDEID, "警告:盘点任务 " .. mainData.taskId .. " 无明细数据")
-- 无明细数据不视为错误,继续处理下一个任务
else
-- 7. 遍历当前盘点任务的所有明细数据
local details = mainData.InventoryTasks_TB_ITEM
-- 确保 details 是数组(即使只有一个明细)
if details[1] == nil then
details = {details}
end
for j = 1, #details do
local item = details[j]
-- 创建明细数据
local count_plan_item = m3.AllocObject(strLuaDEID, "Count_Plan_Detail")
count_plan_item.cp_no = mainData.taskId
count_plan_item.row_no = item.orderItemId
count_plan_item.qty = lua.Get_NumAttrValue(item.qty) or 0
count_plan_item.wms_bn = item.batchNo
count_plan_item.batch_no = item.produceCode or ""
count_plan_item.prd_date = item.productDate or ""
count_plan_item.exp_date = item.expiryDate or ""
count_plan_item.reg_no = item.registerNo or ""
local nRet, ret_info = m3.CreateDataObj(strLuaDEID, count_plan_item)
if nRet ~= 0 then
FinalRes = Create_result("failure", "208", "创建盘点明细失败", "创建失败: " .. ret_info)
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
lua.DebugEx(strLuaDEID, "创建盘点明细失败", xml_result)
lua.Stop(strLuaDEID, "创建盘点明细失败", ret_info)
return
end
end
end
end
-- 8. 返回成功
FinalRes = Create_result("success", "0", "盘点任务创建成功")
local xml_result = xml.json_to_xml(FinalRes, "response")
mobox.returnValue(strLuaDEID, 0, xml_result, 0)
end