--- Created by w1832.
|
--- DateTime: 2025/5/20 上午8:57
|
---
|
|
--[[
|
编码: GK-API-08
|
名称: Outbound_Priority_Change
|
作者:wsz
|
入口函数:Outbound_Priority_Change
|
功能说明:更新发货单 Shipping_Order 优先级,已分配后不允许更新
|
变更历史:
|
v0.0.1 初始
|
|
v0.0.2 CLSID 为出库单,非Shipping_Order发货单
|
注意:
|
1、此报文结构应是单条推送
|
2、S_BS_NO查到的数据不一定唯一,同S_BS_NO数据的N_B_STATE状态也不一定全部满足要求,仅处理满足条件的数据
|
v0.0.3 修改映射字段S_BS_NO -> S_NO
|
--]]
|
|
|
json = require("json")
|
mobox = require("OILua_JavelinExt")
|
m3 = require("oi_base_mobox")
|
|
xml = require("oi_base_xml")
|
|
--- 实体标识-出库订单优先级调整接口
|
local CLSID_OutboundOrder = "Outbound_Order"
|
-- 表名
|
local TB_NAME_OutboundOrder = "TN_Outbound_Order"
|
|
local CLSID_OutboundOrder_desc = "出库订单优先级调整接口"
|
|
local luaDEID
|
|
|
|
--根标签
|
local RootTag = "response"
|
|
|
|
|
-- 简化 debug.info记录
|
local function DebugInfo(desc, param)
|
if param == nil then
|
param = ""
|
end
|
lua.Debug(luaDEID, debug.getinfo(1), desc, param)
|
end
|
|
|
--[[
|
-- 执行成功
|
]]
|
local function result_success(strLuaDEID)
|
|
local result = {}
|
result.flag = "success" -- success|failure
|
result.code = 0
|
result.message = ""
|
|
do
|
local nRet = mobox.returnValue(strLuaDEID, 1, xml.json_to_xml(result,RootTag), result.code)
|
if nRet ~= 0 then
|
lua.Error(strLuaDEID, debug.getinfo(1), 'result_success-执行mobox.returnValue失败 ' .. nRet)
|
end
|
end
|
end
|
|
--[[
|
-- 事务回滚-返回信息后终止执行
|
]]
|
local function result_transaction_back(strLuaDEID, msg)
|
|
-- 回滚当次处理
|
lua.Stop(strLuaDEID, msg)
|
--
|
--local result = {}
|
--result.flag = "failure" -- success|failure
|
--result.code = 5
|
--result.message = msg
|
--
|
--local xmlstr = xml.json_to_xml(result)
|
--
|
--do
|
-- local nRet = mobox.returnValue(strLuaDEID, 1, xmlstr, result.code)
|
-- if nRet ~= 0 then
|
-- lua.Error(strLuaDEID, debug.getinfo(1), 'result_transaction_back-执行mobox.returnValue失败 ' .. nRet)
|
-- end
|
--end
|
error(msg, 0)
|
-- lua.Error(strLuaDEID, debug.getinfo(1), xmlstr)
|
end
|
|
|
--[[
|
param
|
CLSID:目标实例calssid
|
id目标数据的S_ID
|
temp:待更新字段对象,lua属性table
|
|
|
--]]
|
local function butchUpdateData(strLuaDEID,CLSID,id,temp)
|
|
local nRet, str_data_attrset = mobox.luaJsonToObjAttrs(CLSID_OutboundOrder, json.encode(temp))
|
if nRet ~= 0 then
|
result_transaction_back(strLuaDEID, "luaJsonToObjAttrs 函数 转化格式失败" .. nRet .. str_data_attrset)
|
end
|
-- 反序列化为目标格式
|
local attrValueObj = json.decode(str_data_attrset)
|
|
-- 组装批量更新的数据格式
|
local updateObj = {}
|
|
local updateObj_item = {}
|
updateObj_item.id = id
|
updateObj_item.attrs = attrValueObj
|
table.insert(updateObj, updateObj_item)
|
|
local updateStrDataJson = lua.table2str(updateObj)
|
lua.Debug(strLuaDEID, debug.getinfo(1), CLSID .. "update准备覆盖已有数据", updateStrDataJson)
|
local nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, CLSID, updateStrDataJson)
|
if (nRet ~= 0) then
|
result_transaction_back(strLuaDEID, string.format(CLSID.."更新操作失败!code:%s,msg:%s", nRet, strRetInfo))
|
end
|
|
end
|
|
|
--[[
|
业务数据处理
|
1、查询 orderNo:S_BS_NO 记录 来源单号非主键,可能存在多条数据
|
2.判断 N_B_STATE 状态 更新出库单 Outbound_Order 优先级,已分配后不允许更新(N_B_STATE>=25 AND N_B_STATE<=55)
|
|
]]
|
local function bussHandle(strLuaDEID, dataSet)
|
|
local strCondition
|
do
|
local filters = {}
|
table.insert(filters, string.format([[ %s = '%s' ]], "S_NO", lua.Get_StrAttrValue(dataSet.orderNo)))
|
strCondition = table.concat(filters, " and ")
|
lua.Debug(strLuaDEID, debug.getinfo(1), "filters-组装的Shipping_Order的where条件", strCondition)
|
end
|
|
|
-- 查找总数量
|
local nRetCount
|
do
|
local nRet, nCount = mobox.getDataObjCount(strLuaDEID, CLSID_OutboundOrder, strCondition)
|
if nRet == 0 then
|
nRetCount = nCount
|
DebugInfo(string.format("%s-查询总数量为%s", CLSID_OutboundOrder, nCount))
|
else
|
result_transaction_back(strLuaDEID, string.format("查询目标数据失败,code:%s,msg:%s", nRet, nCount))
|
end
|
|
if nCount == "0" then
|
result_transaction_back(strLuaDEID, dataSet.orderNo .. "查找不到报文对应的出库单数据!")
|
end
|
end
|
|
|
-- 查询目标数据, 存储lua数组,内部为数据库字段格式对象
|
local datas = {}
|
do
|
local strFieldList = { "S_ID", "S_NO", "S_BS_NO", "N_PRIORITY", "S_NOTE", "N_PRIORITY" }
|
-- 返回 json型 str,格式 [ { "attr1": "xxx", "attr2": "xxx1", … }, …
|
local nRet, strRetInfo = mobox.queryTable(strLuaDEID, TB_NAME_OutboundOrder, json.encode(strFieldList), nRetCount, strCondition)
|
if nRet == 0 then
|
DebugInfo(string.format("%s-queryTable函数返回", CLSID_OutboundOrder), strRetInfo)
|
local tableData = json.decode(strRetInfo)
|
DebugInfo("tableData", tableData)
|
|
datas = tableData
|
|
--for n = 1, #tableData do
|
-- -- local nRet1, strObjJson = mobox.objAttrToObjJson(CLSID_ShippingOrder, tableData[n])
|
-- -- local nRet1, strObjJson = mobox.objJsonToLuaJson(CLSID_ShippingOrder, tableData[n])
|
--
|
-- if nRet1 == 0 then
|
-- table.insert(datas, strObjJson)
|
-- else
|
-- result_transaction_back(strLuaDEID, string.format("queryTable-objAttrToObjJson转化失败,code:%s,msg:%s", nRet1, strObjJson))
|
-- end
|
--end
|
else
|
result_transaction_back(strLuaDEID, string.format("queryTable查询目标数据失败,code:%s,msg:%s", nRet, strRetInfo))
|
end
|
end
|
|
DebugInfo(string.format("%s-queryTable-取得datas数据", CLSID_OutboundOrder), datas)
|
|
-- 迭代更新满足条件的数据
|
for n = 1, #datas do
|
|
local b_state = lua.Get_NumAttrValue(datas[n].N_B_STATE)
|
local id = datas[n].S_ID
|
local flag = b_state >= 25 and b_state <= 55
|
DebugInfo("b_state", b_state)
|
DebugInfo("id", id)
|
DebugInfo("flag", flag)
|
|
if not flag then
|
-- 执行更新
|
local temp = {}
|
temp.priority = dataSet.priority --优先级
|
temp.note = dataSet.memo -- 备注
|
|
butchUpdateData(strLuaDEID, CLSID_OutboundOrder,id,temp)
|
|
--local nRet, str_data_attrset = mobox.luaJsonToObjAttrs(CLSID_ShippingOrder, json.encode(temp))
|
--if nRet ~= 0 then
|
-- result_transaction_back(strLuaDEID, "luaJsonToObjAttrs 函数 转化格式失败" .. nRet .. str_data_attrset)
|
--end
|
---- 反序列化为目标格式
|
--local attrValueObj = json.decode(str_data_attrset)
|
--
|
---- 组装批量更新的数据格式
|
--local updateObj = {}
|
--
|
--local updateObj_item = {}
|
--updateObj_item.id = id
|
--updateObj_item.attrs = attrValueObj
|
--table.insert(updateObj, updateObj_item)
|
--
|
--local updateStrDataJson = lua.table2str(updateObj)
|
--lua.Debug(strLuaDEID, debug.getinfo(1), CLSID_ShippingOrder .. "update准备覆盖已有数据", updateStrDataJson)
|
--local nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, CLSID_ShippingOrder, updateStrDataJson)
|
--if (nRet ~= 0) then
|
-- result_transaction_back(strLuaDEID, string.format("发货单更新操作失败!code:%s,msg:%s", nRet, strRetInfo))
|
--end
|
end
|
|
end
|
|
end
|
|
|
|
local function Outbound_Priority_Change_main(strLuaDEID)
|
-- 1.1 getxml
|
local soap_xml
|
do
|
local nRet, data = mobox.getCurEditDataPacket(strLuaDEID)
|
if (nRet ~= 0) then
|
result_transaction_back(strLuaDEID, "无法获取数据包 datajson !" .. data)
|
end
|
soap_xml = data
|
lua.Debug(strLuaDEID, debug.getinfo(1), "GK-API-08xml报文", soap_xml)
|
end
|
|
-- 1.2 xml->luaobj
|
local parsed_data
|
do
|
local nRet, data = xml.parse(soap_xml)
|
if (nRet ~= 0) then
|
result_transaction_back(strLuaDEID, "接口输入的XML格式非法!")
|
end
|
parsed_data = data
|
end
|
|
-- 1.3 取得商品批次表item的tableObj
|
local dataSet = parsed_data["Envelope"]["Body"]
|
["OrderAdjustmentsReq"]
|
["OrderAdjustments_Input"]
|
["InputParameters"]
|
["OrderAdjustments_TB"]
|
|
if nil == dataSet then
|
-- wms_base.Warning(strLuaDEID, 2, 201, CLSID_OutboundOrder_desc .. "-未解析到soap目标节点!", json.encode(dataSet), "", CLSID_OutboundOrder_desc .. "-dataSet")
|
result_transaction_back(strLuaDEID, CLSID_OutboundOrder_desc .. "-未解析到soap目标节点!")
|
elseif #dataSet == 0 then
|
-- 仅单条数据
|
lua.Debug(strLuaDEID, debug.getinfo(1), "单条", dataSet)
|
bussHandle(strLuaDEID, dataSet)
|
else
|
for i = 1, #dataSet do
|
lua.Debug(strLuaDEID, debug.getinfo(1), "多条", "")
|
bussHandle(strLuaDEID, dataSet[i])
|
end
|
end
|
|
result_success(strLuaDEID)
|
end
|
|
|
--[[
|
固定-错误捕获处理
|
]]
|
local ERR
|
local function errorHandler(err)
|
ERR = err
|
lua.Debug(luaDEID, debug.getinfo(1), "err-记录", err)
|
return err
|
end
|
|
--[[ 入口函数 ]]
|
function Outbound_Priority_Change(strLuaDEID)
|
|
m3.PrintLuaDEInfo(strLuaDEID)
|
|
luaDEID = strLuaDEID
|
--Outbound_Priority_Change_main(strLuaDEID)
|
local success, result = xpcall(Outbound_Priority_Change_main, errorHandler, strLuaDEID)
|
|
if not success then
|
|
|
local result = {}
|
result.flag = "failure" -- success|failure
|
result.code = 5
|
result.message = ERR
|
|
local xmlstr = xml.json_to_xml(result,RootTag)
|
|
do
|
local nRet = mobox.returnValue(strLuaDEID, 1, xmlstr, result.code)
|
if nRet ~= 0 then
|
lua.Error(strLuaDEID, debug.getinfo(1), 'result_transaction_back-执行mobox.returnValue失败 ' .. nRet)
|
end
|
end
|
|
-- lua.Error(strLuaDEID, debug.getinfo(1), ERR)
|
end
|
|
end
|