From 70eedd3bf9810bc022967da6446dd8a0ff6f43b7 Mon Sep 17 00:00:00 2001
From: wsz <w1832984788@outlook.com>
Date: 星期二, 10 六月 2025 14:28:23 +0800
Subject: [PATCH] 提交03、

---
 lua_code/Lua/GK-API-03.lua |  401 +++++++++++++++++
 lua_code/Lua/GK-API-08.lua |  330 ++++++++++++++
 lua_code/Lua/GK-API-07.lua |  603 ++++++++++++++++++++++++++
 3 files changed, 1,334 insertions(+), 0 deletions(-)

diff --git a/lua_code/Lua/GK-API-03.lua b/lua_code/Lua/GK-API-03.lua
new file mode 100644
index 0000000..db80358
--- /dev/null
+++ b/lua_code/Lua/GK-API-03.lua
@@ -0,0 +1,401 @@
+---
+--- Created by wsz.
+--- DateTime: 2025/5/13 涓婂崍9:02
+---
+--[[
+ 缂栫爜:GK-API-03
+ 鍚嶇О: 鍟嗗搧鎵规鍚屾鎺ュ彛
+ 浣滆�:
+ 鍏ュ彛鍑芥暟锛欱atch_Sync
+ 鍔熻兘璇存槑:鍒涘缓銆佽鐩朑K_BATCH瀹炰綋 鍚屾椂鏇存柊CG_Detail鐩稿叧鑷畾涔夊瓧娈�+ 鍙樻洿鍘嗗彶:
+ 
+ v0.0.2
+ 鏍煎紡楠岃瘉涓嶉�杩囩殑杩斿洖鎶ユ枃
+ 绯荤粺寮傚父闇�error鎶涘嚭
+ resp
+ 
+ v0.0.3
+    CG_Detail寮冪敤锛屽彉鏇翠负 搴撳瓨琛�INV_Detail
+
+ --]]
+
+local json = require("json")
+local mobox = require("OILua_JavelinExt")
+local m3 = require("oi_base_mobox")
+
+local xml = require("oi_base_xml")
+
+--- 瀹炰綋鏍囪瘑-鍟嗗搧鎵规鍚屾 TN_GK_BATCH
+local CLSID_GKbatch = "GK_BATCH"
+--- 瀹炰綋鏍囪瘑-璐т綅瀹瑰櫒璐у搧鏄庣粏 TN_CG_Detail  | 鍙樻洿涓� 搴撳瓨琛�INV_Detail
+local CLSID_INVdetail = "INV_Detail"
+
+-- local apiDesc = "鍟嗗搧鎵规鍚屾鎺ュ彛"
+
+
+--鏍规爣绛�+local RootTag = "response"
+
+
+
+--[[
+desc:澶勭悊xml->table 閮ㄥ垎绌鸿妭鐐硅杞寲涓簕}
+parameter:
+    value-瀛楃涓叉垨绌簍able{}
+return: nil/瀛楃涓�+-- 澶�闆嗕腑澶勭悊
+--]]
+local function getStrHandle(value)
+    --if (type(value) == "table" and #value == 0) then
+    --    return nil
+    --else
+    --    return lua.Get_StrAttrValue(value)
+    --end
+    return lua.Get_StrAttrValue(value)
+end
+
+
+-- mergeTablesDeep杈呭姪-閫掑綊
+local function deepCopy(original)
+    if type(original) ~= 'table' then
+        return original
+    end
+    local copy = {}
+    for key, value in pairs(original) do
+        copy[key] = deepCopy(value)
+    end
+    return copy
+end
+
+-- 灏唗ableb鍚堝苟鍒皌ablea
+local function mergeTablesDeep(tablea, tableb)
+    local bCopy = deepCopy(tableb)
+    for key, value in pairs(bCopy) do
+        tablea[key] = value
+    end
+    return tablea
+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
+
+    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_transaction_back-鎵цmobox.returnValue澶辫触 ' .. nRet)
+        end
+    end
+
+    lua.Error(strLuaDEID, debug.getinfo(1), msg)
+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 buildTemp(dataSet)
+    local temp = {} -- 鏀剧疆寰呭垱寤烘暟鎹�+
+    -- 鐗╂枡缂栫爜/鍟嗗搧浠g爜
+    temp.storer_no = getStrHandle(dataSet.storerId)-- getStrHandle(dataSet.skuId)
+    -- 璐т富缂栫爜
+    temp.item_code = getStrHandle(dataSet.skuId) --getStrHandle(dataSet.storerId)
+    -- 鐗╂潈
+    temp.owner_no = getStrHandle(dataSet.ownerId)
+    -- 鎵规缂栫爜
+    temp.wms_bn = getStrHandle(dataSet.batchNo)
+    -- 鎵瑰彿
+    temp.batch_no = getStrHandle(dataSet.produceCode)
+    -- 鐢熶骇鏃ユ湡
+    temp.product_date = getStrHandle(dataSet.productDate)
+    -- 鏈夋晥鏃ユ湡
+    temp.expiry_date = getStrHandle(dataSet.expiryDate)
+    -- 娉ㄥ唽璇佸彿
+    temp.register_no = getStrHandle(dataSet.registerNo)
+    -- 鐢熶骇浼佷笟
+    temp.company_name = getStrHandle(dataSet.companyName)
+    -- 璇佷欢鐢熶骇鍘傚
+    temp.cert_company_name = getStrHandle(dataSet.certCompanyName)
+    -- 濮旀墭鐢熶骇鍘傚
+    temp.consign_company_name = getStrHandle(dataSet.consignCompanyWTName)
+    -- 鐏弻鏃ユ湡
+    temp.sterilization_date = getStrHandle(dataSet.sterilizationData)
+    -- 澶囨敞
+    temp.note = getStrHandle(dataSet.memo)
+    -- 澶囨敞
+    temp.ex1 = getStrHandle(dataSet.ex1)
+    -- 澶囨敞
+    temp.ex2 = getStrHandle(dataSet.ex2)
+    -- 澶囨敞
+    temp.ex3 = getStrHandle(dataSet.ex3)
+
+    return temp
+end
+
+
+--[[
+
+strClsID: 鏁版嵁绫籭d
+dataObj锛氬緟鍒涘缓鐨勬暟鎹璞�+
+--]]
+local function create_obj(strLuaDEID, strClsID, dataObj)
+
+    -- 鍩虹楠岃瘉
+    if (nil == strClsID or strClsID == '') then
+        result_transaction_back(strLuaDEID, "[鍟嗗搧鎵规鍚屾鎺ュ彛]-鍒涘缓瀵硅薄澶辫触,strClsID涓嶅彲涓虹┖")
+    end
+    if type(dataObj) ~= 'table' then
+        result_transaction_back(strLuaDEID, "[鍟嗗搧鎵规鍚屾鎺ュ彛]-鍒涘缓瀵硅薄澶辫触,dataObj蹇呴』涓簍able绫诲瀷")
+    end
+
+    --
+    local creatobj = m3.AllocObject(strLuaDEID, strClsID)
+
+    mergeTablesDeep(creatobj, dataObj)
+    local nRet, resultData = m3.CreateDataObj(strLuaDEID, creatobj)
+    if (nRet ~= 0) then
+        result_transaction_back(strLuaDEID, string.format("鍒涘缓瀵硅薄[%s]澶辫触,msg锛�s", strClsID, resultData))
+    end
+end
+
+
+--[[
+desc:鏇存柊鐩爣鏁版嵁
+]]
+local function updateBussData(strLuaDEID, dataSet, id)
+    local temp = buildTemp(dataSet)
+
+    local attrValueObj
+    do
+        -- 鍙栧緱 鍙敤鏉ユ洿鏂版暟鎹簱鐨�attr-value 鐨�table 绫诲瀷 [attrValueObj]
+        -- luaJsonToObjAttrs 鎵ц鍚庤繑鍥炵殑str_data_attrset 鏄瓧绗︿覆锛屼笖attr 鏄暟鎹簱瀛楃涓�闇�弽搴忓垪鍖栧鐞嗕负table
+        local nRet, str_data_attrset = mobox.luaJsonToObjAttrs(CLSID_GKbatch, json.encode(temp))
+
+        if nRet ~= 0 then
+            result_transaction_back(strLuaDEID, 'upd-goodsbatsh item 鏃秎uaJsonToObjAttrs鎵ц澶辫触锛岃缁嗭細' .. str_data_attrset)
+        end
+        -- 鍙嶅簭鍒楀寲涓虹洰鏍囨牸寮�+        attrValueObj = json.decode(str_data_attrset)
+    end
+    -- 褰撶▼搴忓彲浠ヨ繍琛屼互涓嬫椂 - 璁や负   if nRet == 0  --- 鎵цupd閫昏緫
+    lua.Debug(strLuaDEID, debug.getinfo(1), "attrValueObj", attrValueObj)
+    -- 缁勮鎵归噺鏇存柊鐨勬暟鎹牸寮�+    local updateObj = {}
+
+    local updateObj_item = {}
+    updateObj_item.id = id
+    updateObj_item.attrs = attrValueObj
+    table.insert(updateObj, updateObj_item)
+
+    --local updateObj = {
+    --    {
+    --        id = id,
+    --        attrs = attrValueObj
+    --    }
+    --}
+
+    local updateStrDataJson = lua.table2str(updateObj)
+    lua.Debug(strLuaDEID, debug.getinfo(1), "goodsbatch-update鍑嗗瑕嗙洊宸叉湁鏁版嵁", updateStrDataJson)
+    local nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, CLSID_GKbatch, updateStrDataJson)
+    if (nRet ~= 0) then
+        result_transaction_back(strLuaDEID, string.format("goodbatch鏇存柊鎿嶄綔澶辫触銆俢ode锛�s锛宮sg锛�s", nRet, strRetInfo))
+    end
+end
+
+
+--[[
+desc:鍒涘缓鐩爣鏁版嵁
+]]
+local function creatBussData(strLuaDEID, dataSet)
+    local temp = buildTemp(dataSet)
+
+    lua.Debug(strLuaDEID, debug.getinfo(1), "goodsbatch寰呮柊澧炴暟鎹�temp", temp)
+
+    create_obj(strLuaDEID, CLSID_GKbatch, temp)
+end
+
+
+--[[
+鍗曟潯
+]]
+local function bussHandle(strLuaDEID, dataSet)
+
+    -- 瀵逛簬 闈炴暟缁勮〃 杩斿洖0 璁ゅ畾浠呭崟鏉�??
+    lua.Debug(strLuaDEID, debug.getinfo(1), "dataSet", dataSet)
+
+    -- 缁勮sql杩囨护鏉′欢
+    local strCondition
+    do
+        local filters = {}
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_STORER", getStrHandle(dataSet.storerId)))--getStrHandle(dataSet.skuId)))
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_ITEM_CODE", getStrHandle(dataSet.skuId)))--getStrHandle(dataSet.storerId)))
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_OWNER", getStrHandle(dataSet.ownerId)))
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_WMS_BN", getStrHandle(dataSet.batchNo)))
+        strCondition = table.concat(filters, " and ")
+        lua.Debug(strLuaDEID, debug.getinfo(1), "filters-缁勮鐨刧oodsbatch鐨剋here鏉′欢", strCondition)
+    end
+
+    local nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, CLSID_GKbatch, strCondition)
+    lua.Debug(strLuaDEID, debug.getinfo(1), "getDataObjAttrByKeyAttr", strRetInfo)
+    if nRet == 0 then
+        -- key宸插瓨鍦紝鏇存柊鍘熸暟鎹�+        lua.Debug(strLuaDEID, debug.getinfo(1), "add", "鏁版嵁鏇存柊锛� .. strRetInfo)
+        updateBussData(strLuaDEID, dataSet, id)
+    elseif nRet == 1 then
+        -- key涓嶅瓨鍦紝鏂板
+        lua.Debug(strLuaDEID, debug.getinfo(1), "upd", "鏁版嵁鏂板")
+        creatBussData(strLuaDEID, dataSet)
+    else
+        result_transaction_back(strLuaDEID, string.format("鏌ヨ鐩爣鏁版嵁澶辫触锛宑ode锛�s锛宮sg锛�s", nRet, strRetInfo))
+    end
+end
+
+--[[
+缁勮鏁版嵁key
+skuId+storerId+ownerId+batchNo鍞竴锛堝繀濉級
+]]
+local function getId(dataSet)
+    return getStrHandle(dataSet.skuId)
+            .. getStrHandle(dataSet.storerId)
+            .. getStrHandle(dataSet.ownerId)
+            .. getStrHandle(dataSet.batchNo)
+end
+
+
+
+
+
+
+
+
+--[[
+鍚屾椂鏇存柊 CGDetail 瀛楁
+绛栫暐锛氭煡鎵�skuId+storerId+ownerId+batchNo 鏁版嵁锛岀劧鍚庣殑
+]]
+local function updateCG_Detail(strLuaDEID, dataSet)
+
+    lua.Debug(strLuaDEID, debug.getinfo(1), "寮�鏇存柊updateCG_Detail", '')
+    -- 1. 缁勮鏌ヨ鏉′欢 type:str
+    local strCondition
+    do
+        local filters = {}
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_STORER", getStrHandle(dataSet.storerId)))
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_OWNER", getStrHandle(dataSet.ownerId)))
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_ITEM_CODE", getStrHandle(dataSet.skuId)))
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_WMS_BN", getStrHandle(dataSet.batchNo)))
+        strCondition = table.concat(filters, " and ")
+        lua.Debug(strLuaDEID, debug.getinfo(1), "filters-缁勮鐨刢g-detail鐨剋here鏉′欢", strCondition)
+    end
+
+    -- 2. 缁勮寰呮洿鏂板瓧娈�type:str
+    local strUpdateSql
+    do
+        local updater = {}
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_BATCH_NO", getStrHandle(dataSet.produceCode)))        -- 鎵瑰彿         | 鎵瑰彿
+        table.insert(updater, string.format([[ %s = '%s' ]], "D_PRD_DATE", getStrHandle(dataSet.productDate)))        -- 鐢熶骇鏃ユ湡      | 鐢熶骇鏃ユ湡
+        table.insert(updater, string.format([[ %s = '%s' ]], "D_EXP_DATE", getStrHandle(dataSet.expiryDate)))         -- 鏈夋晥鏃ユ湡      | 鏈夋晥鏃ユ湡
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF01", getStrHandle(dataSet.registerNo)))            -- 娉ㄥ唽璇佸彿      | 鑷畾涔夊瓧娈�
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF02", getStrHandle(dataSet.companyName)))           -- 鐢熶骇浼佷笟      | 鑷畾涔夊瓧娈�
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF03", getStrHandle(dataSet.certCompanyName)))       -- 璇佷欢鐢熶骇鍘傚  | 鑷畾涔夊瓧娈�
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF04", getStrHandle(dataSet.consignCompanyWTName)))  -- 濮旀墭鐢熶骇鍘傚  | 鑷畾涔夊瓧娈�
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF05", getStrHandle(dataSet.sterilizationDate)))     -- 鐏弻鏃ユ湡      | 鑷畾涔夊瓧娈�
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF06", getStrHandle(dataSet.ex1)))                   -- 鎵╁睍瀛楁1     | 鑷畾涔夊瓧娈�
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF07", getStrHandle(dataSet.ex2)))                   -- 鎵╁睍瀛楁2     | 鑷畾涔夊瓧娈�
+        table.insert(updater, string.format([[ %s = '%s' ]], "S_UDF08", getStrHandle(dataSet.ex3)))                   -- 鎵╁睍瀛楁3     | 鑷畾涔夊瓧娈�
+        strUpdateSql = table.concat(updater, " , ")
+        lua.Debug(strLuaDEID, debug.getinfo(1), "filters-缁勮鐨刢g-detail鐨剆et瀛楁", strUpdateSql)
+    end
+    -- 3. 鏇存柊鎵ц
+    do
+        local nRet, strRetInfo = mobox.updateDataAttrByCondition(strLuaDEID, CLSID_INVdetail, strCondition, strUpdateSql)
+        if (nRet ~= 0) then
+            result_transaction_back(strLuaDEID, CLSID_INVdetail .. "鏇存柊淇℃伅澶辫触!" .. strRetInfo)
+        end
+    end
+end
+
+function Batch_Sync(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-03xml鎶ユ枃", 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, "鎺ュ彛杈撳叆鐨刋ML鏍煎紡闈炴硶!")
+        end
+        parsed_data = data
+    end
+
+
+    -- 1.3 鍙栧緱鍟嗗搧鎵规琛╥tem鐨則ableObj
+    local dataSet = parsed_data["Envelope"]["Body"]
+    ["InBatchGoodsReq"]
+    ["BatchGoods_Input"]
+    ["InputParameters"]
+    ["BATCHGOODS_TB"]
+    ["BATCHGOODS_TB_ITEM"]
+
+    if nil == dataSet then
+        -- wms_base.Warning( strLuaDEID, 1, 601, err_msg, "浠嶨K-WMS绯荤粺鍚屾SKU淇℃伅" )
+        --wms_base.Warning(strLuaDEID, 2, 201, "[鍟嗗搧鎵规鍚屾鎺ュ彛]-鏈В鏋愬埌soap鍟嗗搧鎵规鑺傜偣!", json.encode(dataSet), "", "[鍟嗗搧鎵规鍚屾鎺ュ彛]-dataSet")
+        result_transaction_back(strLuaDEID, "[鍟嗗搧鎵规鍚屾鎺ュ彛]-鏈В鏋愬埌soap鍟嗗搧鎵规鑺傜偣!")
+    elseif #dataSet == 0 then
+        -- 浠呭崟鏉℃暟鎹�+        lua.Debug(strLuaDEID, debug.getinfo(1), "鍗曟潯", "")
+        bussHandle(strLuaDEID, dataSet)
+        updateCG_Detail(strLuaDEID, dataSet)
+    else
+        for i = 1, #dataSet do
+            lua.Debug(strLuaDEID, debug.getinfo(1), "澶氭潯", "")
+            bussHandle(strLuaDEID, dataSet[i])
+            updateCG_Detail(strLuaDEID, dataSet)
+        end
+    end
+
+    result_success(strLuaDEID)
+
+end
\ No newline at end of file
diff --git a/lua_code/Lua/GK-API-07.lua b/lua_code/Lua/GK-API-07.lua
new file mode 100644
index 0000000..6f1913f
--- /dev/null
+++ b/lua_code/Lua/GK-API-07.lua
@@ -0,0 +1,603 @@
+---
+--- Created by wsz.
+--- DateTime: 2025/5/15 涓嬪崍3:31
+---
+
+--[[
+ 缂栫爜: GK-API-07
+ 鍚嶇О: 璁㈠崟鍙栨秷鎺ュ彛
+ 浣滆�: wsz
+ 鍏ュ彛鍑芥暟锛歄rder_Sync
+ 鍔熻兘璇存槑: 鎺ユ敹鎶ユ枃鍒涘缓 Order_Hold 瀹炰綋  锛屽浜庡凡瀛樺湪鐨勬暟鎹棤鏉′欢鏇存柊锛岃繑鍥炴姤鏃犻渶鍒涘缓杩樿揣鍗�锛涙柊澧炵殑鏁版嵁璁剧疆闇�鍒涘缓杩樿揣鍗�+ 鍙樻洿鍘嗗彶:v0.0.1
+
+娉ㄦ剰锛�+    1銆佹寜鐓ф鎶ユ枃褰㈠紡,杩欏簲鏄崟鏉″彂閫�+    2銆佹姤鏂囪В鏋愰」灏戜簡鏉ユ簮鍗曞彿銆佹嫤鎴被鍨嬨�锛氬瓨鍌ㄦ椂 鏉ユ簮鍗曞彿涓嶅~锛屾嫤鎴被鍨嬪~Interface
+    3銆乶eedReturnOrder 浠�鏍规嵁鍑哄簱鍗曠殑鐘舵�浼氭秹鍙婂埌
+
+   璁㈠崟绫诲瀷锛�asn 鍏ュ簱璁㈠崟 so鍑哄簱璁㈠崟 inventory 鐩樼偣鍗�+   涓夎�鍗曟嵁鐨勪富閿畁o-涓庢姤鏂囩殑taskId 瀵瑰簲
+   鍏ュ簱鍗曞拰鐩樼偣鍗曞凡鎵ц涓嶅厑璁稿彇娑堬紝鍑哄簱鍗曡鍗曟湭瀹屾垚閮藉厑璁稿彇娑堬紝鍏佽鍙栨秷鎵嶆彃鍏rder_Hold
+
+-----------------------------------------
+
+鍏ュ簱鍗�Inbound_Order   no | b_state
+鐘舵�涓篘_B_STATE>=20 AND N_B_STATE<=55  涓嶅厑璁稿彇娑�+鍙栨秷鎻掑叆Order_Hold 琛� 鍚屾椂鏇存柊N_BSTATE=91
+
+鐩樼偣鍗� Count_Order   count_no | b_state
+鐘舵�涓篘_B_STATE>=20 AND N_B_STATE<=50涓嶅厑璁稿彇娑堬紝
+鍙栨秷鎻掑叆Order_Hold 琛� 鍚屾椂鏇存柊N_BSTATE=91
+
+鍑哄簱鍗�Outbound_Order no | b_state
+鐘舵�涓篘_B_STATE IN(50,55,90,91)涓嶅厑璁稿彇娑堬紝
+锛屽彇娑堟彃鍏rder_Hold 琛�
+濡傛灉鐘舵�N_B_STATE>=25 AND N_B_STATE<=55,鍑哄弬needReturnOrder=1
+
+
+
+ --]]
+
+local json = require("json")
+local mobox = require("OILua_JavelinExt")
+local m3 = require("oi_base_mobox")
+
+local xml = require("oi_base_xml")
+
+--- 瀹炰綋鏍囪瘑-璁㈠崟鍙栨秷鍚屾 TN_ORDER_CANCEL
+local CLSID_OrderHold = "Order_Hold"
+
+local CLSID_OrderHold_desc = "璁㈠崟鍙栨秷鎺ュ彛"
+
+--- 瀹炰綋鏍囪瘑-鍏ュ簱鍗�+local CLSID_InboundOrder = "Inbound_Order"
+--- 瀹炰綋鏍囪瘑-鍑哄簱鍗�+local CLSID_OutboundOrder = "Outbound_Order"
+--- 瀹炰綋鏍囪瘑-鐩樼偣鍗�+local CLSID_CountOrder = "Count_Order"
+
+--鏍规爣绛�+local RootTag =  "response"
+
+
+----- 鍑哄簱鍗�-鐘舵�鍒楄〃
+--local STATUS_array_OutboundOrder = {"0"}
+----- 鍏ュ簱鍗�- 鐘舵�鍒楄〃
+--local STATUS_array_Inbound_Order = {"0"}
+----- 鐩樼偣鍗�- 鐘舵�鍒楄〃
+--local STATUS_array_Count_Order = {"0"}
+
+--
+local luaDEID
+
+local ERR
+
+
+-- 杩斿洖閮ㄥ垎-----------------------------------------
+--[[
+-- 浜嬪姟鍥炴粴-杩斿洖淇℃伅鍚庣粓姝㈡墽琛�+]]
+local function result_transaction_back(strLuaDEID, msg)
+
+    -- 鍥炴粴褰撴澶勭悊
+    lua.Stop(strLuaDEID, msg)
+    lua.Debug(strLuaDEID, debug.getinfo(1), "result_transaction_back-Stop 鎵ц瀹屾瘯", "")
+
+    local result = {}
+    result.flag = "failure" -- success|failure
+    result.code = 5
+    result.message = msg
+
+    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
+    error(msg,0)
+    -- lua.Error(strLuaDEID, debug.getinfo(1), xmlstr)
+end
+
+
+--[[
+-- 鎵ц鎴愬姛
+]]
+local function result_success(strLuaDEID,needReturnOrder,msg)
+
+    local result = {}
+    result.flag = "success" -- success|failure
+    result.code = 0
+    result.message = msg
+    if needReturnOrder then   -- nil false
+        result.needReturnOrder = needReturnOrder
+    end
+
+    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_failure(strLuaDEID,msg)
+
+    local result = {}
+    result.flag = "failure" -- success|failure
+    result.code = 0
+    result.message = msg
+    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_failure-鎵цmobox.returnValue澶辫触 ' .. nRet)
+        end
+    end
+end
+
+
+-------------------------------------------
+
+-- util--------------------
+
+------------------------
+-- mergeTablesDeep杈呭姪-閫掑綊
+local function deepCopy(original)
+    if type(original) ~= 'table' then
+        return original
+    end
+    local copy = {}
+    for key, value in pairs(original) do
+        copy[key] = deepCopy(value)
+    end
+    return copy
+end
+
+-- 灏唗ableb鍚堝苟鍒皌ablea
+local function mergeTablesDeep(tablea, tableb)
+    local bCopy = deepCopy(tableb)
+    for key, value in pairs(bCopy) do
+        tablea[key] = value
+    end
+    return tablea
+end
+
+
+--[[
+
+strClsID: 鏁版嵁绫籭d
+dataObj锛氬緟鍒涘缓鐨勬暟鎹璞�+
+--]]
+local function create_obj(strLuaDEID, strClsID, dataObj)
+
+    -- 鍩虹楠岃瘉
+    if (nil == strClsID or strClsID == '') then
+        result_transaction_back(strLuaDEID, CLSID_OrderHold_desc .. "-鍒涘缓瀵硅薄澶辫触,strClsID涓嶅彲涓虹┖")
+    end
+    if type(dataObj) ~= 'table' then
+        result_transaction_back(strLuaDEID, CLSID_OrderHold_desc .. "-鍒涘缓瀵硅薄澶辫触,dataObj蹇呴』涓簍able绫诲瀷")
+    end
+
+    --
+    local creatobj = m3.AllocObject(strLuaDEID, strClsID)
+
+    mergeTablesDeep(creatobj, dataObj)
+    local nRet, resultData = m3.CreateDataObj(strLuaDEID, creatobj)
+    if (nRet ~= 0) then
+        result_transaction_back(strLuaDEID, string.format("鍒涘缓瀵硅薄[%s]澶辫触,msg锛�s", strClsID, resultData))
+    end
+end
+
+
+--[[
+param
+    table:瀛楃涓叉暟缁�+    value:瑕佸垽鏂槸鍚﹀瓨鍦ㄧ殑鍊�+return
+    true锛氬瓨鍦�+    false锛氫笉瀛樺湪
+]]
+local function contains(table, value)
+    for _, v in ipairs(table) do
+        if v == value then return true end
+    end
+    return false
+end
+
+
+
+--[[
+缁勮涓存椂瀵硅薄
+]]
+local function buildTemp(dataSet)
+    local temp = {} -- 鏀剧疆寰呭垱寤烘暟鎹�+
+    -- 浠诲姟缂栧彿
+    temp.no = lua.Get_StrAttrValue(dataSet.taskId)
+    -- 璁㈠崟绫诲瀷
+    temp.no_type = lua.Get_StrAttrValue(dataSet.taskType)
+    -- 鏉ユ簮鍗曞彿
+    temp.bs_no = ""
+    -- 璐т富缂栫爜
+    temp.storer = lua.Get_StrAttrValue(dataSet.storerId)
+    -- 鐗╂潈
+    temp.owner = lua.Get_StrAttrValue(dataSet.ownerId)
+    -- 鎷︽埅绫诲瀷
+    temp.hold_type = "Interface"
+    -- 鐘舵�
+    temp.state = "10"
+    -- 鍙栨秷鍘熷洜
+    temp.note = lua.Get_StrAttrValue(dataSet.reason)
+
+    return temp
+end
+
+
+
+--[[
+desc:鏇存柊鐩爣鏁版嵁
+]]
+local function updateBussData(strLuaDEID, dataSet, id)
+    local temp = buildTemp(dataSet)
+
+    local attrValueObj
+    do
+        -- 鍙栧緱 鍙敤鏉ユ洿鏂版暟鎹簱鐨�attr-value 鐨�table 绫诲瀷 [attrValueObj]
+        -- luaJsonToObjAttrs 鎵ц鍚庤繑鍥炵殑str_data_attrset 鏄瓧绗︿覆锛屼笖attr 鏄暟鎹簱瀛楃涓�闇�弽搴忓垪鍖栧鐞嗕负table
+        local nRet, str_data_attrset = mobox.luaJsonToObjAttrs(CLSID_OrderHold, json.encode(temp))
+
+        if nRet ~= 0 then
+            result_transaction_back(strLuaDEID, CLSID_OrderHold ..' 鏇存柊鏃秎uaJsonToObjAttrs鎵ц澶辫触锛岃缁嗭細' .. str_data_attrset)
+        end
+        -- 鍙嶅簭鍒楀寲涓虹洰鏍囨牸寮�+        attrValueObj = json.decode(str_data_attrset)
+    end
+    -- 褰撶▼搴忓彲浠ヨ繍琛屼互涓嬫椂 - 璁や负   if nRet == 0  --- 鎵цupd閫昏緫
+    lua.Debug(strLuaDEID, debug.getinfo(1), "attrValueObj", attrValueObj)
+    -- 缁勮鎵归噺鏇存柊鐨勬暟鎹牸寮�+    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_OrderHold .."-update鍑嗗瑕嗙洊宸叉湁鏁版嵁", updateStrDataJson)
+    local nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, CLSID_OrderHold, updateStrDataJson)
+    if (nRet ~= 0) then
+        result_transaction_back(strLuaDEID, string.format(CLSID_OrderHold .."鏇存柊鎿嶄綔澶辫触銆俢ode锛�s锛宮sg锛�s", nRet, strRetInfo))
+    end
+end
+
+
+--[[
+desc:鍒涘缓鐩爣鏁版嵁
+]]
+local function creatBussData(strLuaDEID, dataSet)
+
+    -- 鍓嶇疆鍒ゆ柇
+    if dataSet.taskType == nil and  lua.trim(dataSet.taskType) == "" then
+        result_transaction_back(strLuaDEID, string.format([[ %s 鏁版嵁楠岃瘉-鎿嶄綔澶辫触銆�s ]], CLSID_OrderHold, "鎶ユ枃鈥樿鍗曠被鍨�taskType)鈥�瀛楁锛屼笉鍙负绌�))
+    end
+
+    -- 鍏佽鍒涘缓鈥樿鍗曞彇娑堝疄浣撯�鏍囪  - 鏆傜暀
+    local FLAG = false
+    -- 浠呯敤浜庡嚭搴撳崟缁勮杩斿洖鎶ユ枃鐢�  nil銆�0銆�1
+    local needReturnOrder
+
+    -- 1. 鍑哄簱璁㈠崟鍒ゆ柇-Outbound_Order
+    if dataSet.taskType == "so" then
+        lua.Debug(strLuaDEID, debug.getinfo(1), "璁㈠崟绫诲瀷-鍑哄簱璁㈠崟", dataSet.taskType)
+
+        local strCondition
+        do
+            local filters = {}
+            table.insert(filters, string.format([[ %s = '%s' ]], "S_NO", lua.Get_StrAttrValue(dataSet.taskId)))
+            strCondition = table.concat(filters, " and ")
+            lua.Debug(strLuaDEID, debug.getinfo(1), "filters-缁勮 鍑哄簱璁㈠崟 鐨剋here鏉′欢", strCondition)
+        end
+        -- strRetInfo:str   attr-value 鍨嬬殑鏁版嵁
+        local nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, CLSID_OutboundOrder, strCondition)
+        if nRet == 0 then
+            local  luaDataArray = json.decode(strRetInfo)
+            lua.Debug(strLuaDEID, debug.getinfo(1), "鍑哄簱鍗�luaDataArray", luaDataArray)
+            local  luaData = m3.KeyValueAttrsToObjAttr(luaDataArray)
+            lua.Debug(strLuaDEID, debug.getinfo(1), "鍑哄簱鍗�luaData", luaData)
+            --local  state = lua.Get_StrAttrValue( luaData.b_state)
+            local  state = lua.Get_StrAttrValue( luaData.N_B_STATE)
+            lua.Debug(strLuaDEID, debug.getinfo(1), "鍑哄簱璁㈠崟 b_state", state)
+
+            FLAG = not  contains( { "50","55","90","91" },state ) --鍖呭惈鐘舵�涓嶅噯鍙栨秷
+
+            if FLAG then
+                local state_toNum =  lua.Get_NumAttrValue(state)
+                needReturnOrder = (state_toNum >=25 and state_toNum  <= 55 ) and 1 or 0
+            end
+
+        elseif nRet == 1 then
+            --鐩爣鍗曟嵁涓嶅瓨鍦�+            result_transaction_back(strLuaDEID, string.format([[鍑哄簱璁㈠崟-鍑哄簱鍗曞彿:%s,涓嶅瓨鍦紒]],lua.Get_StrAttrValue(dataSet.taskId)))
+        else
+            result_transaction_back(strLuaDEID, string.format([[寮傚父:鏌ヨ鍑哄簱璁㈠崟-鍑哄簱鍗曞彿:%s锛屾椂澶辫触锛�s]],lua.Get_StrAttrValue(dataSet.taskId),strRetInfo))
+        end
+    end
+
+
+    -- 2. 鍏ュ簱鍗�Inbound_Order
+    if dataSet.taskType == "asn" then
+        lua.Debug(strLuaDEID, debug.getinfo(1), "璁㈠崟绫诲瀷-鍏ュ簱鍗�, dataSet.taskType)
+
+        local strCondition
+        do
+            local filters = {}
+            table.insert(filters, string.format([[ %s = '%s' ]], "S_NO", lua.Get_StrAttrValue(dataSet.taskId)))
+            strCondition = table.concat(filters, " and ")
+            lua.Debug(strLuaDEID, debug.getinfo(1), "filters-缁勮 鍏ュ簱鍗�鐨剋here鏉′欢", strCondition)
+        end
+        -- strRetInfo:str   attr-value 鍨嬬殑鏁版嵁
+        local nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, CLSID_InboundOrder, strCondition)
+        --local nRet, id, strRetInfo = mobox.GetDataObjByCondition(strLuaDEID, CLSID_InboundOrder, strCondition)
+
+        if nRet == 0 then
+            local  luaDataArray = json.decode(strRetInfo)
+            --lua.Debug(strLuaDEID, debug.getinfo(1), "鍏ュ簱鍗�strRetInfo 绫诲瀷", type(strRetInfo))
+            --lua.Debug(strLuaDEID, debug.getinfo(1), "鍏ュ簱鍗�strRetInfo", strRetInfo)
+            --local  luaJson = m3.objAttrsToLuaJson(CLSID_InboundOrder,strRetInfo)
+            --lua.Debug(strLuaDEID, debug.getinfo(1), "鍏ュ簱鍗�luaJson", luaJson)
+            local  luaData = m3.KeyValueAttrsToObjAttr(luaDataArray)
+            lua.Debug(strLuaDEID, debug.getinfo(1), "鍏ュ簱鍗�luaData", luaData)
+            --FLAG =  contains( STATUS_array_OutboundOrder, lua.Get_StrAttrValue( luaData.b_state))
+            --local  state = lua.Get_StrAttrValue( luaData.b_state)
+            local  state = lua.Get_StrAttrValue( luaData.N_B_STATE)
+            lua.Debug(strLuaDEID, debug.getinfo(1), "鍏ュ簱鍗�b_state", state)
+            local state_toNum =  lua.Get_NumAttrValue(state)
+            FLAG = not (state_toNum >=20 and state_toNum  <= 55 )
+
+            if FLAG then -- 闇�鏇存柊 鍏ュ簱鍗�N_BSTATE=91
+                local temp = {}
+                temp.b_state = 91
+                local nRet, str_data_attrset = mobox.luaJsonToObjAttrs(CLSID_InboundOrder, json.encode(temp))
+                if nRet ~= 0 then
+                    result_transaction_back(strLuaDEID, '鏇存柊鍏ュ簱鍗曠姸鎬乥_state鏃�luaJsonToObjAttrs 鍑芥暟鎵ц澶辫触锛乵sg锛� .. 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), "鍏ュ簱鍗�update鍑嗗瑕嗙洊宸叉湁鏁版嵁", updateStrDataJson)
+                local nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, CLSID_InboundOrder, updateStrDataJson)
+                if (nRet ~= 0) then
+                    result_transaction_back(strLuaDEID, string.format("鍏ュ簱鍗曟洿鏂版搷浣滃け璐ワ紒code锛�s锛宮sg锛�s", nRet, strRetInfo))
+                end
+            end
+
+        elseif nRet == 1 then
+            --鐩爣鍗曟嵁涓嶅瓨鍦�+            result_transaction_back(strLuaDEID, string.format([[鍏ュ簱鍗�鍏ュ簱鍗曞彿:%s,涓嶅瓨鍦紒]],lua.Get_StrAttrValue(dataSet.taskId)))
+        else
+            result_transaction_back(strLuaDEID, string.format([[寮傚父:鏌ヨ鍏ュ簱鍗�鍏ュ簱鍗曞彿:%s锛屾椂澶辫触锛�s]],lua.Get_StrAttrValue(dataSet.taskId),strRetInfo))
+        end
+    end
+
+
+    -- 3. 鐩樼偣鍗�Count_Order
+    if dataSet.taskType == "inventory" then
+        lua.Debug(strLuaDEID, debug.getinfo(1), "璁㈠崟绫诲瀷-鐩樼偣鍗�, dataSet.taskType)
+
+        local strCondition
+        do
+            local filters = {}
+            table.insert(filters, string.format([[ %s = '%s' ]], "S_COUNT_NO", lua.Get_StrAttrValue(dataSet.taskId)))
+            strCondition = table.concat(filters, " and ")
+            lua.Debug(strLuaDEID, debug.getinfo(1), "filters-缁勮 鐩樼偣鍗�鐨剋here鏉′欢", strCondition)
+        end
+        -- strRetInfo:str   attr-value 鍨嬬殑鏁版嵁
+        local nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, CLSID_CountOrder, strCondition)
+        if nRet == 0 then
+            local  luaDataArray = json.decode(strRetInfo)
+            lua.Debug(strLuaDEID, debug.getinfo(1), "鐩樼偣鍗�luaDataArray", luaDataArray)
+            local  luaData = m3.KeyValueAttrsToObjAttr(luaDataArray)
+
+            local  state = lua.Get_StrAttrValue( luaData.N_B_STATE)
+
+            lua.Debug(strLuaDEID, debug.getinfo(1), "鐩樼偣鍗�b_state", state)
+
+            local state_toNum =  lua.Get_NumAttrValue(state)
+            FLAG = not (state_toNum >=20 and state_toNum  <= 50 )
+
+            if FLAG then -- 闇�鏇存柊 鐩樼偣鍗�N_BSTATE=91
+                local temp = {}
+                temp.b_state = 91
+                local nRet, str_data_attrset = mobox.luaJsonToObjAttrs(CLSID_CountOrder, json.encode(temp))
+                if nRet ~= 0 then
+                    result_transaction_back(strLuaDEID, '鏇存柊鐩樼偣鍗曠姸鎬乥_state鏃�luaJsonToObjAttrs 鍑芥暟鎵ц澶辫触锛乵sg锛� .. 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), "鐩樼偣鍗�update鍑嗗瑕嗙洊宸叉湁鏁版嵁", updateStrDataJson)
+                local nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, CLSID_CountOrder, updateStrDataJson)
+                if (nRet ~= 0) then
+                    result_transaction_back(strLuaDEID, string.format("鐩樼偣鍗曟洿鏂版搷浣滃け璐ワ紒code锛�s锛宮sg锛�s", nRet, strRetInfo))
+                end
+            end
+
+        elseif nRet == 1 then
+            --鐩爣鍗曟嵁涓嶅瓨鍦�+            result_transaction_back(strLuaDEID, string.format([[鐩樼偣鍗�鐩樼偣鍗曞彿:%s,涓嶅瓨鍦紒]],lua.Get_StrAttrValue(dataSet.taskId)))
+        else
+            result_transaction_back(strLuaDEID, string.format([[寮傚父:鏌ヨ鐩樼偣鍗�鐩樼偣鍗曞彿:%s锛屾椂澶辫触锛�s]],lua.Get_StrAttrValue(dataSet.taskId),strRetInfo))
+        end
+    end
+
+
+    ------
+    if not FLAG then
+        result_failure(strLuaDEID, "鐩爣鍗曟嵁鐘舵�涓嶆弧瓒冲彇娑堟潯浠讹紒涓嶄細鐢熸垚鈥樺崟鎹彇娑堚�璁板綍锛�)
+        return -- 缁撴潫鍚庣画鎵ц
+    end
+
+    -- 鍒涘缓鍙栨秷鍗曡褰�+    local temp = buildTemp(dataSet)
+    lua.Debug(strLuaDEID, debug.getinfo(1), "OrderHold寰呮柊澧炴暟鎹�temp", temp)
+    create_obj(strLuaDEID, CLSID_OrderHold, temp)
+
+    -- 杩斿洖鏁版嵁
+    result_success(strLuaDEID,needReturnOrder)
+
+end
+
+
+
+
+
+
+
+
+
+--[[
+涓氬姟鏁版嵁澶勭悊
+]]
+local function bussHandle(strLuaDEID, dataSet)
+
+    -- 缁勮sql杩囨护鏉′欢
+    local strCondition
+    do
+        local filters = {}
+        table.insert(filters, string.format([[ %s = '%s' ]], "S_NO", lua.Get_StrAttrValue(dataSet.taskId)))
+        strCondition = table.concat(filters, " and ")
+        lua.Debug(strLuaDEID, debug.getinfo(1), "filters-缁勮鐨刼rdercancel鐨剋here鏉′欢", strCondition)
+    end
+
+    local nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, CLSID_OrderHold, strCondition)
+
+    if nRet == 0 then
+        -- key宸插瓨鍦�+        lua.Debug(strLuaDEID, debug.getinfo(1), "add", "鏁版嵁鏇存柊锛� .. strRetInfo)
+        -- updateBussData(strLuaDEID, dataSet, id)
+
+        --result_failure(strLuaDEID,  string.format("浠诲姟id锛�s 宸插瓨鍦�,id))
+        result_success(strLuaDEID,  nil,string.format("浠诲姟id锛�s 宸插瓨鍦�,id))
+
+
+    elseif nRet == 1 then
+        -- key涓嶅瓨鍦�+
+        lua.Debug(strLuaDEID, debug.getinfo(1), "upd", "鏁版嵁鏂板")
+        creatBussData(strLuaDEID, dataSet)
+
+    else
+        result_transaction_back(strLuaDEID, string.format("鏌ヨ鐩爣鏁版嵁澶辫触锛宑ode锛�s锛宮sg锛�s", nRet, strRetInfo))
+    end
+
+    -- result_success(strLuaDEID,1) -- 鏇存柊鐨勬暟鎹笉闇�鍒涘缓 WMS杩樿揣鍏ュ簱鍗�+
+end
+
+
+
+
+local function Order_Cancel_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-07xml鎶ユ枃", 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, "鎺ュ彛杈撳叆鐨刋ML鏍煎紡闈炴硶!")
+        end
+        parsed_data = data
+    end
+
+    -- 1.3 鍙栧緱鍟嗗搧鎵规琛╥tem鐨則ableObj
+    local dataSet = parsed_data["Envelope"]["Body"]
+    ["OrderCancellationReq"]
+    ["OrderCancellation_Input"]
+    ["InputParameters"]
+    ["OrderCancellation_TB"]
+
+    if nil == dataSet then
+        -- wms_base.Warning(strLuaDEID, 2, 201, CLSID_OrderHold_desc .."-鏈В鏋愬埌soap鐩爣鑺傜偣!", json.encode(dataSet), "", CLSID_OrderHold_desc .."-dataSet")
+        result_transaction_back(strLuaDEID, CLSID_OrderHold_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
+
+
+
+end
+
+--[[
+鍥哄畾-閿欒鎹曡幏澶勭悊
+]]
+local function errorHandler(err)
+    ERR = err
+    lua.Debug(luaDEID, debug.getinfo(1), "err-璁板綍", err)
+    --lua.Error(strLuaDEID, debug.getinfo(1), "err-璁板綍:" .. err)
+    return err
+end
+
+--[[ 鍏ュ彛鍑芥暟 ]]
+function Order_Cancel(strLuaDEID)
+    luaDEID = strLuaDEID
+    local success, result = xpcall(Order_Cancel_main, errorHandler,strLuaDEID)
+
+    if not success then
+        -- lua.Error(strLuaDEID, debug.getinfo(1), ERR)
+    end
+
+end
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lua_code/Lua/GK-API-08.lua b/lua_code/Lua/GK-API-08.lua
new file mode 100644
index 0000000..40e9d13
--- /dev/null
+++ b/lua_code/Lua/GK-API-08.lua
@@ -0,0 +1,330 @@
+--- Created by w1832.
+--- DateTime: 2025/5/20 涓婂崍8:57
+---
+
+--[[
+ 缂栫爜: GK-API-08
+ 鍚嶇О: Outbound_Priority_Change
+ 浣滆�:wsz
+ 鍏ュ彛鍑芥暟锛歄utbound_Priority_Change
+ 鍔熻兘璇存槑:鏇存柊鍙戣揣鍗�Shipping_Order 浼樺厛绾э紝宸插垎閰嶅悗涓嶅厑璁告洿鏂�+ 鍙樻洿鍘嗗彶:
+v0.0.1 鍒濆
+
+v0.0.2  CLSID 涓哄嚭搴撳崟锛岄潪Shipping_Order鍙戣揣鍗�+ 娉ㄦ剰锛�+ 1銆佹鎶ユ枃缁撴瀯搴旀槸鍗曟潯鎺ㄩ�
+ 2銆丼_BS_NO鏌ュ埌鐨勬暟鎹笉涓�畾鍞竴锛屽悓S_BS_NO鏁版嵁鐨凬_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鐩爣鏁版嵁鐨凷_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.."鏇存柊鎿嶄綔澶辫触锛乧ode锛�s锛宮sg锛�s", nRet, strRetInfo))
+    end
+
+end
+
+
+--[[
+涓氬姟鏁版嵁澶勭悊
+1銆佹煡璇� orderNo锛歋_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-缁勮鐨凷hipping_Order鐨剋here鏉′欢", 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("鏌ヨ鐩爣鏁版嵁澶辫触锛宑ode锛�s锛宮sg锛�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杞寲澶辫触锛宑ode锛�s锛宮sg锛�s", nRet1, strObjJson))
+            --    end
+            --end
+        else
+            result_transaction_back(strLuaDEID, string.format("queryTable鏌ヨ鐩爣鏁版嵁澶辫触锛宑ode锛�s锛宮sg锛�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锛宮sg锛�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, "鎺ュ彛杈撳叆鐨刋ML鏍煎紡闈炴硶!")
+        end
+        parsed_data = data
+    end
+
+    -- 1.3 鍙栧緱鍟嗗搧鎵规琛╥tem鐨則ableObj
+    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
\ No newline at end of file

--
Gitblit v1.9.1