--[[
|
编码: GK-API-06
|
名称: 出库单创建接口
|
作者: DJW
|
日期: 2025-5-14
|
|
入口函数: Main
|
功能说明:
|
1. 接收上游系统的入库任务XML数据
|
2. 检查入库单是否已存在
|
3. 创建Outbound_Order主表和Outbound_Detail子表记录
|
4. 返回处理结果
|
|
输入XML示例:
|
<soapenv:Envelope
|
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
|
<soap:Header
|
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
</soap:Header>
|
<soapenv:Body>
|
<v1:InTaskCreationReq
|
xmlns:v1="http://www.gkht.com/OutReceive/INV/Ebs/Schemas/OutTaskCreation/V1.0">
|
<v1:TaskCreation_Input>
|
<v1:RESTHeader>
|
<v1:Responsibility/>
|
<v1:RespApplication/>
|
<v1:SecurityGroup/>
|
<v1:NLSLanguage>SIMPLIFIED CHINESE</v1:NLSLanguage>
|
<v1:Org_Id>0</v1:Org_Id>
|
</v1:RESTHeader>
|
<v1:InputParameters>
|
<v1:TaskCreation_TB>
|
<!-- 1 or more repetitions:-->
|
<v1:taskId>TASK20000001</v1:taskId>
|
<v1:taskType>normal</v1:taskType>
|
<v1:orderFlag>
|
</v1:orderFlag>
|
<v1:orderNo>2025050602</v1:orderNo>
|
<v1:waveId>BCH1001</v1:waveId>
|
<v1:storerId>CGKHTY</v1:storerId>
|
<v1:ownerId>CGKHTY</v1:ownerId>
|
<v1:orderDate>2025-05-06</v1:orderDate>
|
<v1:priority>0</v1:priority>
|
<v1:memo>
|
</v1:memo>
|
<v1:TaskCreation_TB_ITEM>
|
<v1:orderItemId>1</v1:orderItemId>
|
<v1:skuId>XR33201-2L080B</v1:skuId>
|
<v1:skuStatus>AVL</v1:skuStatus>
|
<v1:qty>2</v1:qty>
|
<v1:batchNo>PHI00000000000001309</v1:batchNo>
|
<v1:produceCode>YL201125</v1:produceCode>
|
<v1:productDate>2016-04-23</v1:productDate>
|
<v1:expiryDate>2099-12-31</v1:expiryDate>
|
<v1:registerNo>国食药监械(准)字2012</v1:registerNo>
|
<v1:cid>
|
</v1:cid>
|
</v1:TaskCreation_TB_ITEM>
|
<v1:TaskCreation_TB_ITEM>
|
<v1:orderItemId>2</v1:orderItemId>
|
<v1:skuId>KH32803017</v1:skuId>
|
<v1:skuStatus>AVL</v1:skuStatus>
|
<v1:qty>5</v1:qty>
|
<v1:batchNo>PHI00000000000001308</v1:batchNo>
|
<v1:produceCode>YL2011256</v1:produceCode>
|
<v1:productDate>2023-04-23</v1:productDate>
|
<v1:expiryDate>2099-12-31</v1:expiryDate>
|
<v1:registerNo>
|
</v1:registerNo>
|
<v1:cid>
|
</v1:cid>
|
</v1:TaskCreation_TB_ITEM>
|
</v1:TaskCreation_TB>
|
</v1:InputParameters>
|
</v1:TaskCreation_Input>
|
</v1:InTaskCreationReq>
|
</soapenv:Body>
|
</soapenv:Envelope>
|
--]]
|
wms_base = require("wms_base")
|
xml = require("oi_base_xml")
|
-- 创建入库单主表记录
|
local function create_outbound_order(strLuaDEID, order_data)
|
local order = m3.AllocObject(strLuaDEID, "Outbound_Order")
|
|
-- 主表字段映射
|
order.no = order_data.taskId
|
order.bs_type = order_data.taskType
|
order.bs_no = order_data.orderNo
|
order.wave_no = order_data.waveId
|
--order.D_OP_DATE = order_data.orderDate
|
--order.N_PRIORITY = order_data.priority
|
order.note = order_data.memo or ""
|
order.wh_code = "WH01"
|
order.area_code=""
|
order.factory=""
|
|
local nRet, result = m3.CreateDataObj(strLuaDEID, order)
|
return nRet, result
|
end
|
|
-- 创建出库单明细记录
|
local function create_outbound_detail(strLuaDEID, order_no, item_data)
|
local detail = m3.AllocObject(strLuaDEID, "Outbound_Detail")
|
|
-- 明细表字段映射
|
detail.oo_no = order_no
|
detail.storer = item_data.storerId
|
detail.owner = item_data.ownerId
|
detail.row_no = item_data.orderItemId
|
detail.item_code = item_data.skuId
|
detail.item_state = item_data.skuStatus
|
detail.qty = lua.Get_NumAttrValue(item_data.qty)
|
detail.batch_no = item_data.produceCode
|
detail.wms_bn = item_data.batchNo
|
--detail.D_PRD_DATE = item_data.productDate
|
--detail.D_EXP_DATE = item_data.expiryDate
|
detail.ext_attr3 = item_data.registerNo or ""
|
detail.ext_attr1 = item_data.cid or ""
|
|
local nRet, result = m3.CreateDataObj(strLuaDEID, detail)
|
return nRet, result
|
end
|
|
-- isJson传1表示json格式,0表示xml格式
|
-- value是table数据
|
-- isStop传0表示正常,3表示要回滚
|
function ApiReturn(strLuaDEID, isJson, value, isStop)
|
local strReturn = value
|
--Debug( strLuaDEID, debug.getinfo(1), "ApiReturn失败!", value )
|
mobox.writeLuaLog( lua.table2str( value ) )
|
if isJson == 0 then
|
strReturn = xml2lua.toXml(value)
|
mobox.writeLuaLog(strReturn)
|
end
|
mobox.returnValue(strLuaDEID, isJson, value, isStop);
|
return
|
end
|
function Main(strLuaDEID)
|
local nRet, strRetInfo,err_msg
|
local soap_xml,parsed_data,task_data,input_params,task_tb,order_no
|
local strCondition,id,task_items
|
local isStop = 0
|
local err = {}
|
local items = {}
|
|
|
|
-- m3.PrintLuaDEInfo(strLuaDEID)
|
local result = {
|
flag = "success",
|
code = "0",
|
msg = ""
|
}
|
-- 1. 获取接口输入数据
|
|
nRet, soap_xml = mobox.getCurEditDataPacket(strLuaDEID)
|
if nRet ~= 0 then
|
-- lua.Stop(strLuaDEID, "无法获取数据包: " .. soap_xml)
|
result.flag = "failure"
|
result.code = "1"
|
result.msg = "无法获取数据包: "
|
goto api_call_return
|
|
-- return
|
end
|
|
-- 2. 解析XML
|
|
nRet, parsed_data = xml.parse(soap_xml)
|
if nRet ~= 0 then
|
-- lua.Stop(strLuaDEID, "接口输入的XML格式非法!")
|
result.flag = "failure"
|
result.code = "2"
|
result.msg = "接口输入的XML格式非法: "
|
goto api_call_return
|
-- return
|
end
|
|
-- 3. 提取任务数据
|
task_data = parsed_data.Envelope.Body.InTaskCreationReq.TaskCreation_Input
|
input_params = task_data.InputParameters
|
task_tb = input_params.TaskCreation_TB
|
|
-- 4. 检查出库单是否已存在
|
order_no = task_tb.taskId
|
strCondition = string.format("S_NO = '%s'", order_no)
|
nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, "Outbound_Order", strCondition)
|
if nRet > 1 then
|
result.flag = "failure"
|
result.code = "3"
|
result.msg = "检查出库单是否存在时出错: " .. strRetInfo
|
goto api_call_return
|
elseif nRet == 0 then
|
result.flag = "failure"
|
result.code = "4"
|
result.msg = "出库单已存在: "
|
goto api_call_return
|
end
|
-- 5. 创建出库单主表
|
nRet, strRetInfo = create_outbound_order(strLuaDEID, task_tb)
|
if nRet ~= 0 then
|
-- lua.Stop(strLuaDEID, "创建出库单主表失败:" .. strRetInfo)
|
result.flag = "failure"
|
result.code = "5"
|
result.msg = "创建出库单主表失败:" .. strRetInfo
|
isStop=3
|
goto api_call_return
|
-- return
|
end
|
|
-- 6. 处理明细数据
|
task_items = task_tb.TaskCreation_TB_ITEM
|
|
-- 情况2:多条明细(数组形式)
|
if task_items[1] ~= nil then
|
items = task_items
|
-- 情况3:单条明细(非数组形式)
|
else
|
items = {task_items}
|
end
|
|
for i, item in ipairs(items) do
|
nRet, strRetInfo = create_outbound_detail(strLuaDEID, order_no, item)
|
if nRet ~= 0 then
|
err_msg = string.format("创建出库单明细失败(行号:%d): %s", item.orderItemId, strRetInfo)
|
-- wms_base.Warning(strLuaDEID, 1, 604, err_msg, "创建出库单明细")
|
-- nErr = nErr + 1
|
-- err[nErr] = err_msg
|
-- lua.Stop(strLuaDEID, err_msg)
|
result.flag = "failure"
|
result.code = "5"
|
result.msg = err_msg
|
isStop=3
|
goto api_call_return
|
end
|
end
|
::api_call_return::
|
-- 7. 返回处理结果
|
|
-- m3.EPI_Return(strLuaDEID, result)
|
ApiReturn(strLuaDEID, 0, result, isStop)
|
end
|