--[[
|
编码: GK-API-09
|
名称: 盘点计划同步接口
|
作者: 袁峰
|
入口函数:Count_Pan_Sync
|
功能说明: 该接口是同步接口,
|
上游系统调用该接口后,WES的响应报文success说明WES已经将该报文接收成功;
|
需要同步盘点任务表和盘点任务明细表xml结构。
|
变更历史:
|
|
<soapenv:Envelope
|
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
|
xmlns:v1="http://www.gkht.com/Inventory/INV/Ebs/Schemas/InventoryTasks/V1.0">
|
<soapenv:Header/>
|
<soapenv:Body>
|
<v1:InventoryTasksReq>
|
<v1:InventoryTasks_Input>
|
<v1:RESTHeader>
|
<v1:NLSLanguage>SIMPLIFIED CHINESE</v1:NLSLanguage>
|
<v1:Org_Id>0</v1:Org_Id>
|
</v1:RESTHeader>
|
<v1:InputParameters>
|
<!-- 第一个盘点任务 -->
|
<v1:InventoryTasks_TB>
|
<v1:taskId>TASK30000100</v1:taskId>
|
<v1:inventoryMode>01</v1:inventoryMode>
|
<v1:workMode>Manual</v1:workMode>
|
<v1:MaintenanceNumber>10</v1:MaintenanceNumber>
|
<v1:inventoryType>YH</v1:inventoryType>
|
<v1:orderNo>YH100001</v1:orderNo>
|
<v1:storerId>CGKHTY</v1:storerId>
|
<v1:ownerId>CGKHTY</v1:ownerId>
|
<v1:mtBeginDate>2025-05-06</v1:mtBeginDate>
|
<v1:mtEndDate>2025-05-06</v1:mtEndDate>
|
<!-- 第一个任务的明细数据 -->
|
<v1:InventoryTasks_TB_ITEM>
|
<v1:orderItemId>100</v1:orderItemId>
|
<v1:skuId>XR33201-2L080B</v1:skuId>
|
<v1:qty>2</v1:qty>
|
<v1:batchNo>PHI00000000000001309</v1:batchNo>
|
</v1:InventoryTasks_TB_ITEM>
|
</v1:InventoryTasks_TB>
|
|
<!-- 第二个盘点任务 -->
|
<v1:InventoryTasks_TB>
|
<v1:taskId>TASK300000101</v1:taskId>
|
<v1:inventoryMode>02</v1:inventoryMode>
|
<v1:workMode>Auto</v1:workMode>
|
<v1:MaintenanceNumber>5</v1:MaintenanceNumber>
|
<v1:inventoryType>PD</v1:inventoryType>
|
<v1:orderNo>PD200001</v1:orderNo>
|
<v1:storerId>GKHT</v1:storerId>
|
<v1:ownerId>GKHT</v1:ownerId>
|
<v1:mtBeginDate>2025-05-07</v1:mtBeginDate>
|
<v1:mtEndDate>2025-05-07</v1:mtEndDate>
|
<!-- 第二个任务的明细数据 -->
|
<v1:InventoryTasks_TB_ITEM>
|
<v1:orderItemId>110</v1:orderItemId>
|
<v1:skuId>ABC123</v1:skuId>
|
<v1:qty>10</v1:qty>
|
<v1:batchNo>BATCH2025001</v1:batchNo>
|
</v1:InventoryTasks_TB_ITEM>
|
<v1:InventoryTasks_TB_ITEM>
|
<v1:orderItemId>111</v1:orderItemId>
|
<v1:skuId>XYZ456</v1:skuId>
|
<v1:qty>3</v1:qty>
|
<v1:batchNo>BATCH2025002</v1:batchNo>
|
</v1:InventoryTasks_TB_ITEM>
|
</v1:InventoryTasks_TB>
|
</v1:InputParameters>
|
</v1:InventoryTasks_Input>
|
</v1:InventoryTasksReq>
|
</soapenv:Body>
|
</soapenv:Envelope>
|
|
响应示例:
|
<response>
|
<flag>success</flag>
|
<code>0</code>
|
<message>成功</message>
|
</response>
|
]] --
|
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
|