wsz
2025-06-10 70eedd3bf9810bc022967da6446dd8a0ff6f43b7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
--- 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