--- 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