From 350eb5ec9163d3ea21416b1525bb80191e958071 Mon Sep 17 00:00:00 2001 From: fy36 <1046342473@qq.com> Date: 星期二, 01 七月 2025 22:31:26 +0800 Subject: [PATCH] SKU_Sync.lua -- 发布2.5版本:grid_box 同步优化 --- lua_code/Lua/GK-API-01-SKU_Sync.lua | 780 +++++++++++++++++++++++++++++++++++ /dev/null | 482 --------------------- 2 files changed, 780 insertions(+), 482 deletions(-) diff --git a/lua_code/Lua/GK-API-01-SKU_Sync.lua b/lua_code/Lua/GK-API-01-SKU_Sync.lua new file mode 100644 index 0000000..65e2d0f --- /dev/null +++ b/lua_code/Lua/GK-API-01-SKU_Sync.lua @@ -0,0 +1,780 @@ +--[[ + 缂栫爜: GK-API-001 + 鍚嶇О: 鐩樼偣璁″垝鍚屾 + 浣滆�: HAN + 鏃ユ湡: 2025-1-29 + + 鍏ュ彛鍑芥暟锛�SKU_Sync + 鏉ユ簮椤圭洰: 鍥界椤圭洰 + + 鍔熻兘璇存槑: + 1. 鎺ユ敹鏉ヨ嚜涓婃父绯荤粺鐨�XML 鏍煎紡鏁版嵁锛屽苟瑙f瀽璇ユ暟鎹� 鍒涘缓SKU鍙奡KU_UPC + 鏇存柊锛�+ 2025/06/09 鏇存柊浜唘df01~udf04鐨勫睘鎬у彉鏇�+ +鏇存敼璁板綍: + V2.0 HAN 20250402 浠g爜瑙勮寖 + V2.1 Yuanfeng 浼樺寲杩斿洖缁撴灉澶勭悊 + V2.2 浼樺寲閿欒澶勭悊鍜岃繑鍥為�杈�+ V2.3 绉婚櫎error瀛楁锛屽悎骞跺埌message涓�+ V2.4 鏂板SKU_GRID_PARM瀛楁 + V2.5 2025-07-01 SKU_GRID鏂欑鏍煎弬鏁颁紭鍖栦负鏍规嵁cell_type 鑷姩鍚屾 + +<?xml version="1.0" encoding="UTF-8"?> +<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:inCommodityReq xmlns:v1="http://www.gkht.com/Information/INV/Ebs/Schemas/InCommodity/V1.0"> + <v1:COMMODITY_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:COMMODITY_TB> + <!--1 or more repetitions:--> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM125262</v1:skuId> + <v1:storerId>TGKHMB</v1:storerId> + <v1:skuName>Exceed ABT寰瓟娑傚眰楂嬭嚰鏉�2mm</v1:skuName> + <v1:skuDec>Exceed ABT寰瓟娑傚眰楂嬭嚰鏉�2mm</v1:skuDec> + <v1:spec>Acetabular Shell PC 52 x 62mm</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>501927908583</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM141234</v1:skuId> + <v1:storerId>CGKHTY</v1:storerId> + <v1:skuName>Biomet 鍥哄畾鍗佸瓧鍨嬫焺鑳骞冲彴鍋囦綋 75mm</v1:skuName> + <v1:skuDec>Biomet 鍥哄畾鍗佸瓧鍨嬫焺鑳骞冲彴鍋囦綋 75mm</v1:skuDec> + <v1:spec>75mm</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>.5</v1:length> + <v1:width>.5</v1:width> + <v1:height>.5</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>1</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM141234</v1:skuId> + <v1:storerId>GGKHN1</v1:storerId> + <v1:skuName>Biomet 鍥哄畾鍗佸瓧鍨嬫焺鑳骞冲彴鍋囦綋 75mm</v1:skuName> + <v1:skuDec>-</v1:skuDec> + <v1:spec>75mm</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType>C</v1:abcType> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions/> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>088030400832</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM141234</v1:skuId> + <v1:storerId>TGKHMB</v1:storerId> + <v1:skuName>Biomet 鍥哄畾鍗佸瓧鍨嬫焺鑳骞冲彴鍋囦綋 75mm</v1:skuName> + <v1:skuDec>Biomet 鍥哄畾鍗佸瓧鍨嬫焺鑳骞冲彴鍋囦綋 75mm</v1:skuDec> + <v1:spec>75mm</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>088030400832</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM141234</v1:skuId> + <v1:storerId>TGKRTH</v1:storerId> + <v1:skuName>Biomet 鍥哄畾鍗佸瓧鍨嬫焺鑳骞冲彴鍋囦綋 75mm</v1:skuName> + <v1:skuDec>-</v1:skuDec> + <v1:spec>75mm</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>088030400832</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM141234</v1:skuId> + <v1:storerId>TNMGGK</v1:storerId> + <v1:skuName>Biomet 鍥哄畾鍗佸瓧鍨嬫焺鑳骞冲彴鍋囦綋 75mm</v1:skuName> + <v1:skuDec>-</v1:skuDec> + <v1:spec>75mm</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>088030400832</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM154720</v1:skuId> + <v1:storerId>CGKHTY</v1:storerId> + <v1:skuName>Oxford绗笁浠e崟楂佽啙鍏宠妭楠ㄦ按娉ュ瀷瑙e墫鍨嬫爣鍑嗚儷楠ㄥ簳鏉�宸﹁啙鍐呬晶 Size B</v1:skuName> + <v1:skuDec>Oxford绗笁浠e崟楂佽啙鍏宠妭楠ㄦ按娉ュ瀷瑙e墫鍨嬫爣鍑嗚儷楠ㄥ簳鏉�宸﹁啙鍐呬晶 Size B</v1:skuDec> + <v1:spec>宸﹁啙鍐呬晶 Size B</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>501927938886</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM154720</v1:skuId> + <v1:storerId>GGKHN1</v1:storerId> + <v1:skuName>Oxford绗笁浠e崟楂佽啙鍏宠妭楠ㄦ按娉ュ瀷瑙e墫鍨嬫爣鍑嗚儷楠ㄥ簳鏉�宸﹁啙鍐呬晶 Size B</v1:skuName> + <v1:skuDec>-</v1:skuDec> + <v1:spec>宸﹁啙鍐呬晶 Size B</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType>C</v1:abcType> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions/> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>501927938886</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM154720</v1:skuId> + <v1:storerId>TGKHMB</v1:storerId> + <v1:skuName>Oxford绗笁浠e崟楂佽啙鍏宠妭楠ㄦ按娉ュ瀷瑙e墫鍨嬫爣鍑嗚儷楠ㄥ簳鏉�宸﹁啙鍐呬晶 Size B</v1:skuName> + <v1:skuDec>Oxford绗笁浠e崟楂佽啙鍏宠妭楠ㄦ按娉ュ瀷瑙e墫鍨嬫爣鍑嗚儷楠ㄥ簳鏉�宸﹁啙鍐呬晶 Size B</v1:skuDec> + <v1:spec>宸﹁啙鍐呬晶 Size B</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>501927938886</v1:upc> + </v1:COMMODITY_TB_ITEM> + <v1:COMMODITY_TB_ITEM> + <v1:skuId>BM154720</v1:skuId> + <v1:storerId>TNMGGK</v1:storerId> + <v1:skuName>Oxford绗笁浠e崟楂佽啙鍏宠妭楠ㄦ按娉ュ瀷瑙e墫鍨嬫爣鍑嗚儷楠ㄥ簳鏉�宸﹁啙鍐呬晶 Size B</v1:skuName> + <v1:skuDec>-</v1:skuDec> + <v1:spec>宸﹁啙鍐呬晶 Size B</v1:spec> + <v1:packageCode>浠�/v1:packageCode> + <v1:packageQty>1</v1:packageQty> + <v1:goodsUnit>浠�/v1:goodsUnit> + <v1:length>10</v1:length> + <v1:width>10</v1:width> + <v1:height>10</v1:height> + <v1:abcType/> + <v1:isBatchMgr>0</v1:isBatchMgr> + <v1:isSnMgr>0</v1:isSnMgr> + <v1:isSnStorageMgr>0</v1:isSnStorageMgr> + <v1:imgUrl/> + <v1:cidtype>A</v1:cidtype> + <v1:productLine>BM-鍏宠妭</v1:productLine> + <v1:storageConditions>鏄�/v1:storageConditions> + <v1:skuType>small</v1:skuType> + <v1:maxCount>120</v1:maxCount> + <v1:bMaxCount/> + <v1:cMaxCount/> + <v1:dMaxCount/> + <v1:eMaxCount/> + <v1:fMaxCount/> + <v1:upc>501927938886</v1:upc> + </v1:COMMODITY_TB_ITEM> + </v1:COMMODITY_TB> + </v1:InputParameters> + </v1:COMMODITY_Input> + </v1:inCommodityReq> + </soapenv:Body> +</soapenv:Envelope> + +--]] wms_base = require("wms_base") +xml = require("oi_base_xml") +mobox = require("OILua_JavelinExt") +m3 = require("oi_base_mobox") + +-- 鍒涘缓缁熶竴杩斿洖缁撴灉锛堜慨鏀瑰悗鐗堟湰锛岀Щ闄rror瀛楁锛�+function Create_result(flag, code, msg) + return { + flag = flag or "success", + code = code or "0", + message = msg or "" + } +end + +-- 鍒涘缓鎴栨洿鏂癎K_PROLINE鏁版嵁(鐢熶骇绾挎暟鎹� +local function create_or_update_proline(strLuaDEID, proline_no, proline_name) + local nRet, strRetInfo + + -- 鍒嗛厤GK_PROLINE瀵硅薄 + local proline = m3.AllocObject(strLuaDEID, "GK_PROLINE") + proline.proline_no = proline_no + proline.proline_name = proline_name + + -- 妫�煡鏄惁宸插瓨鍦�+ local strCondition = string.format("S_PROLINE_NO = '%s'", proline_no) + local nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, "GK_PROLINE", strCondition) + + if nRet > 1 then + return 1, "妫�煡GK_PROLINE鏄惁瀛樺湪鏃跺け璐� " .. strRetInfo + end + + if nRet == 1 then + -- 涓嶅瓨鍦紝鍒涘缓鏂拌褰�+ nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, proline) + if nRet ~= 0 then + return 1, "鍒涘缓GK_PROLINE澶辫触: " .. strRetInfo + end + else + -- 宸插瓨鍦紝鏇存柊璁板綍 + local update_proline_obj = {{ + id = id, + attrs = {{ + attr = "S_PROLINE_NAME", + value = proline_name + }} + }} + + nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, "GK_PROLINE", lua.table2str(update_proline_obj)) + if nRet ~= 0 then + return 1, "鏇存柊GK_PROLINE澶辫触: " .. strRetInfo + end + end + return 0, strRetInfo +end + +-- 鍒涘缓SKU_UPC +local function create_sku_upc(strLuaDEID, storer, item_code, upc_code) + local nRet, strRetInfo + if (upc_code == '' or upc_code == nil) then + return 0 + end + + local sku_upc = m3.AllocObject(strLuaDEID, "SKU_UPC") + sku_upc.storer = storer + sku_upc.item_code = item_code + sku_upc.upc_code = upc_code + nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, sku_upc) + + return nRet, strRetInfo +end + + +-- 鏂板sku_grid_parm JSON瀛楃涓诧紝鍦⊿KU 鍒涘缓鐨勬椂鍊欐彃鍏son鏁版嵁 +local function build_sku_grid_parm(ctd_code, sku_input_data, cell_type) + -- 濡傛灉cell_type涓虹┖鍒欒烦杩�+ if not cell_type or cell_type == "" then + return "" + end + + -- 瀹氫箟鍩虹json妗嗘灦缁撴瀯锛堟斁鍦ㄦ暟缁勪腑锛�+ local grid_def = {{ + ctd_code = ctd_code, + cell_def = {} + }} + + -- 鏍规嵁cell_type纭畾澶勭悊鑼冨洿 + local types_to_process = {} + if cell_type == "A" then + types_to_process = {"A"} + elseif cell_type == "B" then + types_to_process = {"A", "B"} + elseif cell_type == "C" then + types_to_process = {"A", "B", "C"} + elseif cell_type == "D" then + types_to_process = {"A", "B", "C", "D"} + elseif cell_type == "E" then + types_to_process = {"A", "B", "C", "D", "E"} + elseif cell_type == "F" then + types_to_process = {"A", "B", "C", "D", "E", "F"} + else + -- 鏈煡绫诲瀷锛岄粯璁ゅ彧澶勭悊A绫诲瀷 + types_to_process = {"A"} + end + + -- 瀹氫箟鏂欑绫诲瀷涓庡搴斿瓧娈电殑鏄犲皠 + local grid_mapping = { + A = {loading_limit = sku_input_data.maxCount}, + B = {loading_limit = sku_input_data.bMaxCount}, + C = {loading_limit = sku_input_data.cMaxCount}, + D = {loading_limit = sku_input_data.dMaxCount}, + E = {loading_limit = sku_input_data.eMaxCount}, + F = {loading_limit = sku_input_data.fMaxCount} + } + + -- 鏋勫缓cell_def鏁扮粍 + for _, type_key in ipairs(types_to_process) do + local grid = grid_mapping[type_key] + local limit = lua.Get_NumAttrValue(grid.loading_limit) or 0 + if limit > 0 then -- 鍙湁褰撻檺鍒跺�澶т簬0鏃舵墠娣诲姞 + table.insert(grid_def[1].cell_def, { + cell_type = type_key, + loading_limit = limit, + load_capacity = limit + }) + end + end + + lua.DebugEx(strLuaDEID, "grid", grid_def) + return lua.table2str(grid_def) +end + +-- 鍒涘缓/鏇存柊SKU瀵瑰簲鐨勮揣鍝佹枡绠辨牸鍙傛暟 +-- skuModel 鏄暟鎹簱瀹氫箟鐨勬暟鎹ā鍨媠ku锛屼篃灏辨槸Alloc鎵�垱寤虹殑SKU瀵硅薄銆�+local function create_or_update_sku_gridbox(strLuaDEID, skuModel, sku_input_data) + local strRetInfo + -- 鑾峰彇榛樿瀹瑰櫒绫诲瀷缂栫爜 + local nConstRet, CONST_CTD_CODE = wms_base.Get_sConst2("WMS_Default_CNTR_Type") + if nConstRet ~= 0 then + return 1, "鑾峰彇榛樿瀹瑰櫒绫诲瀷瀹氫箟缂栫爜澶辫触: " .. CONST_CTD_CODE + end + + -- 濡傛灉cell_type涓虹┖鍒欒烦杩�+ if not skuModel.cell_type or skuModel.cell_type == "" then + return 0, "cell_type涓虹┖锛岃烦杩囨枡绠辨牸鍙傛暟澶勭悊" + end + + -- 鏍规嵁cell_type纭畾澶勭悊鑼冨洿 + local types_to_process = {} + if skuModel.cell_type == "A" then + types_to_process = {"A"} + elseif skuModel.cell_type == "B" then + types_to_process = {"A", "B"} + elseif skuModel.cell_type == "C" then + types_to_process = {"A", "B", "C"} + elseif skuModel.cell_type == "D" then + types_to_process = {"A", "B", "C", "D"} + elseif skuModel.cell_type == "E" then + types_to_process = {"A", "B", "C", "D", "E"} + elseif skuModel.cell_type == "F" then + types_to_process = {"A", "B", "C", "D", "E", "F"} + else + -- 鏈煡绫诲瀷锛岄粯璁ゅ彧澶勭悊A绫诲瀷 + types_to_process = {"A"} + end + + -- 瀹氫箟鏂欑鏍肩被鍨嬩笌瀵瑰簲瀛楁鐨勬槧灏�+ local gridbox_types = { + A = sku_input_data.maxCount, + B = sku_input_data.bMaxCount, + C = sku_input_data.cMaxCount, + D = sku_input_data.dMaxCount, + E = sku_input_data.eMaxCount, + F = sku_input_data.fMaxCount + } + + -- 澶勭悊姣忕鏂欑鏍肩被鍨�+ for _, type_key in ipairs(types_to_process) do + local loading_limit = lua.Get_NumAttrValue(gridbox_types[type_key]) or 0 + if loading_limit <= 0 then -- 鍙湁褰撻檺鍒跺�澶т簬0鏃舵墠澶勭悊 + goto continue + end + + -- 绮剧‘鏌ヨ璇ョ被鍨嬬殑鏂欑鏍艰褰�+ local strCondition = string.format( + "S_ITEM_CODE = '%s' AND S_STORER = '%s' AND S_CTD_CODE='%s' AND S_CELL_TYPE='%s'", + skuModel.item_code, skuModel.storer, CONST_CTD_CODE, type_key) + local nRet, existing_records = m3.GetDataObjByCondition(strLuaDEID, "SKU_GridBox_Parm", strCondition) + + if nRet == 0 then + -- 鏇存柊鐜版湁璁板綍 + local update_gridbox_obj = {{ + id = existing_records.id, + attrs = {{ + attr = "N_LOADING_LIMIT", + value = loading_limit + }} + }} + + nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, "SKU_GridBox_Parm", lua.table2str(update_gridbox_obj)) + if nRet ~= 0 then + return 1, string.format("鏇存柊%s绫诲瀷鏂欑鏍煎睘鎬уけ璐� %s", type_key, strRetInfo) + end + elseif nRet == 1 then + -- 鍒涘缓鏂拌褰�+ local gridbox = m3.AllocObject(strLuaDEID, "SKU_GridBox_Parm") + gridbox.item_code = skuModel.item_code + gridbox.storer = skuModel.storer + gridbox.ctd_code = CONST_CTD_CODE + gridbox.loading_limit = loading_limit + gridbox.cell_type = type_key + + nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, gridbox) + if nRet ~= 0 then + return 1, string.format("鍒涘缓%s绫诲瀷鏂欑鏍煎け璐� %s", type_key, strRetInfo) + end + else + -- 鏌ヨ鍑洪敊 + return 1, string.format("鏌ヨ%s绫诲瀷鏂欑鏍艰褰曞け璐� %s", type_key, existing_records or "鏈煡閿欒") + end + + ::continue:: + end + + return 0, "鏂欑鏍煎弬鏁板鐞嗗畬鎴� +end +-- 鍒涘缓鎴栨洿鏂癝KU涓绘暟鎹�+local function create_sku(strLuaDEID, sku_input_data) + local nRet, strRetInfo + local err_msg = '' + -- 鑾峰彇绯荤粺甯搁噺 + -- 鑾峰彇榛樿瀹瑰櫒绫诲瀷缂栫爜 + local nConstRet, CONST_CTD_CODE = wms_base.Get_sConst2("WMS_Default_CNTR_Type") + if nConstRet ~= 0 then + return 1, "鑾峰彇榛樿瀹瑰櫒绫诲瀷瀹氫箟缂栫爜澶辫触: " .. CONST_CTD_CODE + end + -- 鏂板SKU_grid_param + local sku_grid_parm = build_sku_grid_parm(CONST_CTD_CODE, sku_input_data, sku_input_data.cidtype) + lua.DebugEx(strLuaDEID, "sku_grid_parm", sku_grid_parm) + -- 棣栧厛妫�煡SKU鏄惁宸插瓨鍦�+ local strCondition = string.format("S_ITEM_CODE = '%s' AND S_STORER = '%s'", sku_input_data.skuId, + sku_input_data.storerId) + local nRet, existing_sku = m3.GetDataObjByCondition(strLuaDEID, "SKU", strCondition) + -- lua.DebugEx(strLuaDEID, "鑾峰彇鏉′欢鏌ヨ锛�, existing_sku) + if nRet > 1 then + return 1, "妫�煡SKU鏄惁瀛樺湪鏃跺け璐� " .. (existing_sku or "鏈煡閿欒") + end + + -- 鍒嗛厤SKU瀵硅薄骞惰缃睘鎬�+ local sku = m3.AllocObject(strLuaDEID, "SKU") + sku.item_code = sku_input_data.skuId + sku.storer = sku_input_data.storerId + sku.short_name = sku_input_data.skuName + sku.item_name = sku_input_data.skuDec + sku.spec = sku_input_data.spec + sku.unit = sku_input_data.goodsUnit + sku.long = lua.Get_NumAttrValue(sku_input_data.length) or 0 + sku.middle = lua.Get_NumAttrValue(sku_input_data.width) or 0 + sku.short = lua.Get_NumAttrValue(sku_input_data.height) or 0 + sku.count_method = "Limit" + sku.abc_type = sku_input_data.abcType or "" + sku.is_life_mgt = (sku_input_data.isBatchMgr == "1" and 'Y') or 'N' + sku.is_sn_mgt = (sku_input_data.isSnMgr == "1" and 'Y') or 'N' + sku.img_url = sku_input_data.imgUrl or "" + sku.cell_type = sku_input_data.cidtype + sku.item_type = sku_input_data.skuType + sku.loading_limit = lua.Get_NumAttrValue(sku_input_data.maxCount) or 0 + sku.udf01 = sku_input_data.productLine or "" + sku.udf03 = sku_input_data.isSnStorageMgr or "" + sku.udf02 = sku_input_data.storageConditions or "" + sku.udf04 = sku_input_data.packageCode or "" + sku.udf05 = lua.Get_NumAttrValue(sku_input_data.packageQty) or 0 + sku.sku_grid_parm = sku_grid_parm; + -- lua.DebugEx(strLuaDEID, "鏇存柊/鍒涘缓鏁版嵁缁撴灉锛�, sku) + if nRet == 1 then + -- SKU涓嶅瓨鍦紝鍒涘缓鏂拌褰�+ nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, sku) + if nRet ~= 0 then + return 1, "鍒涘缓SKU澶辫触: " .. strRetInfo .. " skuId = " .. sku_input_data.skuId + end + else + -- SKU宸插瓨鍦紝鏇存柊璁板綍 + local update_sku_obj = {{ + id = existing_sku.id, + attrs = {{ + attr = "S_ITEM_NAME", + value = sku.item_name + }, { + attr = "S_SPEC", + value = sku.spec + }, { + attr = "S_ITEM_TYPE", + value = sku.item_type + }, { + attr = "S_UNIT", + value = sku.unit + }, { + attr = "S_SHORT_NAME", + value = sku.short_name + }, { + attr = "S_ABCTYPE", + value = sku.abc_type + }, { + attr = "C_ISSNMGT", + value = sku.is_sn_mgt + }, { + attr = "C_ISLIFEMGT", + value = sku.is_life_mgt + }, { + attr = "S_IMG_URL", + value = sku.img_url + }, { + attr = "S_CELL_TYPE", + value = sku.cell_type + }, { + attr = "N_LOADING_LIMIT", + value = sku.loading_limit + }, { + attr = "F_LONG", + value = sku.long + }, { + attr = "F_MIDDLE", + value = sku.middle + }, { + attr = "F_SHORT", + value = sku.short + }, { + attr = "S_UDF01", + value = sku.udf01 + }, { + attr = "S_UDF02", + value = sku.udf02 + }, { + attr = "S_UDF03", + value = sku.udf03 + }, { + attr = "S_UDF04", + value = sku.udf04 + }, { + attr = "S_UDF05", + value = sku.udf05 + }, { + attr = "S_SKU_GRID_PARM", + value = sku.sku_grid_parm + }} + }} + nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, "SKU", lua.table2str(update_sku_obj)) + -- lua.DebugEx(strLuaDEID, "鏇存柊杩斿洖鍊�, nRet) + if nRet ~= 0 then + return 1, "鏇存柊SKU灞炴�澶辫触: " .. strRetInfo + end + end + + -- 澶勭悊浜у搧绾挎暟鎹�+ if sku_input_data.productLine and sku_input_data.productLine ~= "" then + local proline_no = sku_input_data.productLine + local proline_name = string.match(proline_no, "KH%-(.+)") or proline_no + nRet, strRetInfo = create_or_update_proline(strLuaDEID, proline_no, proline_name) + if nRet ~= 0 then + return 1, "澶勭悊浜у搧绾挎暟鎹け璐� " .. strRetInfo + end + end + + -- 澶勭悊SKU_UPC鏉$爜 + local upc_codes = {sku_input_data.sptm, sku_input_data.barcode1, sku_input_data.barcode2, sku_input_data.barcode3, + sku_input_data.barcode_pk, sku_input_data.upc} + + for _, upc_code in ipairs(upc_codes) do + if upc_code and upc_code ~= '' then + nRet, strRetInfo = create_sku_upc(strLuaDEID, sku.storer, sku.item_code, upc_code) + if nRet ~= 0 then + return 1, "鍒涘缓SKU_UPC澶辫触: " .. strRetInfo .. " UPC: " .. upc_code + end + end + end + + -- 澶勭悊SKU_GridBox_Parm鏂欑鏍煎弬鏁�+ nRet, strRetInfo = create_or_update_sku_gridbox(strLuaDEID, sku, sku_input_data) + if nRet ~= 0 then + return 1, "澶勭悊SKU_GridBox_Parm澶辫触: " .. strRetInfo + end + + return 0 +end + +-- Main鍑芥暟 +function SKU_Sync(strLuaDEID) + -- 鍒濆鍖栨渶缁堢粨鏋�+ local FinalRes = Create_result() + + -- 1. 鑾峰彇xml鏁版嵁鍖�+ local nRet, soap_xml = mobox.getCurEditDataPacket(strLuaDEID) + if nRet ~= 0 then + FinalRes = Create_result("failure", "201", "鏃犳硶鑾峰彇鏁版嵁鍖� " .. soap_xml) + local xml_result = xml.json_to_xml(FinalRes, "response") + mobox.returnValue(strLuaDEID, 0, xml_result, 0) + lua.Stop(strLuaDEID, "鑾峰彇鏁版嵁鍖呭け璐�, FinalRes) + return + end + + -- 2. 瑙f瀽xml + local nRet, parsed_data = xml.parse(soap_xml) + if nRet ~= 0 then + FinalRes = Create_result("failure", "202", "xml鏍煎紡闈炴硶") + local xml_result = xml.json_to_xml(FinalRes, "response") + mobox.returnValue(strLuaDEID, 0, xml_result, 0) + lua.Stop(strLuaDEID, "xml鏍煎紡闈炴硶", FinalRes) + return + end + + -- 3. 鎻愬彇SKU鏁版嵁 + local sku_data = parsed_data.Envelope.Body.inCommodityReq.COMMODITY_Input.InputParameters.COMMODITY_TB + if not sku_data or not sku_data.COMMODITY_TB_ITEM then + FinalRes = Create_result("failure", "203", "xml鏁版嵁鏍煎紡閿欒锛岀己灏慍OMMODITY_TB_ITEM") + local xml_result = xml.json_to_xml(FinalRes, "response") + mobox.returnValue(strLuaDEID, 0, xml_result, 0) + lua.Stop(strLuaDEID, "xml鏁版嵁鏍煎紡閿欒", FinalRes) + return + end + + -- 4. 缁熶竴澶勭悊锛氱‘淇漵ku_items鏄暟缁�+ local sku_items = sku_data.COMMODITY_TB_ITEM + if sku_items[1] == nil then + sku_items = {sku_items} + end + + -- 5. 閬嶅巻鎵�湁SKU鏁版嵁 + for i = 1, #sku_items do + local sku_item = sku_items[i] + -- 鍒涘缓SKU鍙婂叾UPC + local nRet, err_msg = create_sku(strLuaDEID, sku_item) + if nRet ~= 0 then + wms_base.Warning(strLuaDEID, 1, 601, err_msg, "浠嶨K-WMS绯荤粺鍚屾SKU淇℃伅") + FinalRes = Create_result("failure", "204", "SKU鍚屾澶辫触: " .. err_msg) + local xml_result = xml.json_to_xml(FinalRes, "response") + mobox.returnValue(strLuaDEID, 0, xml_result, 0) + lua.Stop(strLuaDEID, "SKU鍚屾澶辫触: " .. sku_item.skuId, FinalRes) + return + end + end + -- 6. 杩斿洖鎴愬姛 + FinalRes = Create_result("success", "0", "SKU鍚屾鎴愬姛") + local xml_result = xml.json_to_xml(FinalRes, "response") + mobox.returnValue(strLuaDEID, 0, xml_result, 0) +end diff --git a/lua_code/Lua/SKU_Sync.lua b/lua_code/Lua/SKU_Sync.lua deleted file mode 100644 index c1375f1..0000000 --- a/lua_code/Lua/SKU_Sync.lua +++ /dev/null @@ -1,482 +0,0 @@ ---[[ - 缂栫爜: GK-API-001 - 鍚嶇О: 鐩樼偣璁″垝鍚屾 - 浣滆�: HAN - 鏃ユ湡: 2025-1-29 - - 鍏ュ彛鍑芥暟锛�SKU_Sync - 鏉ユ簮椤圭洰: 鍥界椤圭洰 - - 鍔熻兘璇存槑: - 1. 鎺ユ敹鏉ヨ嚜涓婃父绯荤粺鐨�XML 鏍煎紡鏁版嵁锛屽苟瑙f瀽璇ユ暟鎹� 鍒涘缓SKU鍙奡KU_UPC - 鏇存柊锛�- 2025/06/09 鏇存柊浜唘df01~udf04鐨勫睘鎬у彉鏇�- - 鏇存敼璁板綍: - V2.0 HAN 20250402 浠g爜瑙勮寖 - V2.1 Yuanfeng 浼樺寲杩斿洖缁撴灉澶勭悊 - V2.2 浼樺寲閿欒澶勭悊鍜岃繑鍥為�杈�- V2.3 绉婚櫎error瀛楁锛屽悎骞跺埌message涓�- V2.4 鏂板SKU_GRID_PARM瀛楁 - -<?xml version="1.0" encoding="UTF-8"?> -<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:inCommodityReq xmlns:v1="http://www.gkht.com/Information/INV/Ebs/Schemas/InCommodity/V1.0"> - <v1:COMMODITY_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:COMMODITY_TB> - <!--1 or more repetitions:--> - <v1:COMMODITY_TB_ITEM> - <v1:skuId>XR4121-3204A</v1:skuId> - <v1:storerId>CGKHTY</v1:storerId> - <v1:skuName>閲戝睘瑙e墫鍨嬫帴楠ㄦ澘</v1:skuName> - <v1:skuDec>閲戝睘瑙e墫鍨嬫帴楠ㄦ澘YSQ20 4瀛�/v1:skuDec> - <v1:spec>瑙勬牸娴嬭瘯</v1:spec> - <v1:packageCode>鍧�/v1:packageCode> - <v1:packageQty>1</v1:packageQty> - <v1:goodsUnit>鍧�/v1:goodsUnit> - <v1:length>3.5</v1:length> - <v1:width>3.5</v1:width> - <v1:height>3.5</v1:height> - <v1:abcType/> - <v1:isBatchMgr>0</v1:isBatchMgr> - <v1:isSnMgr>0</v1:isSnMgr> - <v1:isSnStorageMgr>0</v1:isSnStorageMgr> - <v1:imgUrl/> - <v1:cidtype>11111A</v1:cidtype> - <v1:productLine>XR-鍒涗激</v1:productLine> - <v1:storageConditions>鎭掓俯</v1:storageConditions> - <v1:skuType>small</v1:skuType> - <v1:maxCount/> - <v1:bMaxCount>10</v1:bMaxCount> - <v1:cMaxCount>11</v1:cMaxCount> - <v1:dMaxCount>12</v1:dMaxCount> - <v1:eMaxCount/> - <v1:fMaxCount/> - <v1:upc>1</v1:upc> - </v1:COMMODITY_TB_ITEM> - </v1:COMMODITY_TB> - </v1:InputParameters> - </v1:COMMODITY_Input> - </v1:inCommodityReq> - </soapenv:Body> -</soapenv:Envelope> - ---]] wms_base = require("wms_base") -xml = require("oi_base_xml") -mobox = require("OILua_JavelinExt") -m3 = require("oi_base_mobox") - --- 鍒涘缓缁熶竴杩斿洖缁撴灉锛堜慨鏀瑰悗鐗堟湰锛岀Щ闄rror瀛楁锛�-function Create_result(flag, code, msg) - return { - flag = flag or "success", - code = code or "0", - message = msg or "" - } -end --- 鏂板sku_grid_parm JSON瀛楃涓诧紝鍦⊿KU 鍒涘缓鐨勬椂鍊欐彃鍏son鏁版嵁 -local function build_sku_grid_parm(ctd_code, sku_input_data) - -- 瀹氫箟鍩虹json妗嗘灦缁撴瀯锛堟斁鍦ㄦ暟缁勪腑锛�- local grid_def = {{ - ctd_code = ctd_code, - cell_def = {} - }} - - -- 瀹氫箟鏂欑绫诲瀷涓庡搴斿瓧娈电殑鏄犲皠 - local grid_mapping = {{ - cell_type = "A", - loading_limit = sku_input_data.maxCount - }, { - cell_type = "B", - loading_limit = sku_input_data.bMaxCount - }, { - cell_type = "C", - loading_limit = sku_input_data.cMaxCount - }, { - cell_type = "D", - loading_limit = sku_input_data.dMaxCount - }, { - cell_type = "E", - loading_limit = sku_input_data.eMaxCount - }, { - cell_type = "F", - loading_limit = sku_input_data.fMaxCount - }} - - -- 鏋勫缓cell_def鏁扮粍 - for _, grid in ipairs(grid_mapping) do - local limit = lua.Get_NumAttrValue(grid.loading_limit) or 0 - table.insert(grid_def[1].cell_def, { -- 娉ㄦ剰杩欓噷鏀逛负grid_def[1] - cell_type = grid.cell_type, - loading_limit = limit, - load_capacity = limit -- 杩欓噷鍋囪load_capacity鍜宭oading_limit鐩稿悓 - }) - end - - -- 杞崲涓篔SON瀛楃涓�- return lua.table2str(grid_def) -end --- 鍒涘缓鎴栨洿鏂癎K_PROLINE鏁版嵁(鐢熶骇绾挎暟鎹� -local function create_or_update_proline(strLuaDEID, proline_no, proline_name) - local nRet, strRetInfo - - -- 鍒嗛厤GK_PROLINE瀵硅薄 - local proline = m3.AllocObject(strLuaDEID, "GK_PROLINE") - proline.proline_no = proline_no - proline.proline_name = proline_name - - -- 妫�煡鏄惁宸插瓨鍦�- local strCondition = string.format("S_PROLINE_NO = '%s'", proline_no) - local nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr(strLuaDEID, "GK_PROLINE", strCondition) - - if nRet > 1 then - return 1, "妫�煡GK_PROLINE鏄惁瀛樺湪鏃跺け璐� " .. strRetInfo - end - - if nRet == 1 then - -- 涓嶅瓨鍦紝鍒涘缓鏂拌褰�- nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, proline) - if nRet ~= 0 then - return 1, "鍒涘缓GK_PROLINE澶辫触: " .. strRetInfo - end - else - -- 宸插瓨鍦紝鏇存柊璁板綍 - local update_proline_obj = {{ - id = id, - attrs = {{ - attr = "S_PROLINE_NAME", - value = proline_name - }} - }} - - nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, "GK_PROLINE", lua.table2str(update_proline_obj)) - if nRet ~= 0 then - return 1, "鏇存柊GK_PROLINE澶辫触: " .. strRetInfo - end - end - return 0, strRetInfo -end - --- 鍒涘缓SKU_UPC -local function create_sku_upc(strLuaDEID, storer, item_code, upc_code) - local nRet, strRetInfo - if (upc_code == '' or upc_code == nil) then - return 0 - end - - local sku_upc = m3.AllocObject(strLuaDEID, "SKU_UPC") - sku_upc.storer = storer - sku_upc.item_code = item_code - sku_upc.upc_code = upc_code - nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, sku_upc) - - return nRet, strRetInfo -end - --- 鍒涘缓/鏇存柊SKU瀵瑰簲鐨勮揣鍝佹枡绠辨牸鍙傛暟 -local function create_or_update_sku_gridbox(strLuaDEID, skuModel, sku_input_data) - local nRet, strRetInfo - -- 鑾峰彇榛樿瀹瑰櫒绫诲瀷缂栫爜 - local nConstRet, CONST_CTD_CODE = wms_base.Get_sConst2("WMS_Default_CNTR_Type") - if nConstRet ~= 0 then - return 1, "鑾峰彇榛樿瀹瑰櫒绫诲瀷瀹氫箟缂栫爜澶辫触: " .. CONST_CTD_CODE - end - - -- 瀹氫箟鏂欑鏍肩被鍨嬩笌瀵瑰簲瀛楁鐨勬槧灏勫叧绯�- local gridbox_types = {{ - cell_type = "A", - loading_limit = sku_input_data.maxCount - }, { - cell_type = "B", - loading_limit = sku_input_data.bMaxCount - }, { - cell_type = "C", - loading_limit = sku_input_data.cMaxCount - }, { - cell_type = "D", - loading_limit = sku_input_data.dMaxCount - }, { - cell_type = "E", - loading_limit = sku_input_data.eMaxCount - }, { - cell_type = "F", - loading_limit = sku_input_data.fMaxCount - }} - - -- 澶勭悊姣忕鏂欑鏍肩被鍨�- for _, gridbox_type in ipairs(gridbox_types) do - -- 璁剧疆瑁呰浇涓婇檺锛屽鏋滄病鏈夊垯璁句负0 - local loading_limit = 0 - if gridbox_type.loading_limit and gridbox_type.loading_limit ~= "" then - loading_limit = lua.Get_NumAttrValue(gridbox_type.loading_limit) or 0 - end - - -- 绮剧‘鏌ヨ璇ョ被鍨嬬殑鏂欑鏍艰褰�- local strCondition = string.format( - "S_ITEM_CODE = '%s' AND S_STORER = '%s' AND S_CTD_CODE='%s' AND S_CELL_TYPE='%s'", skuModel.item_code, - skuModel.storer, CONST_CTD_CODE, gridbox_type.cell_type) - local nRet, existing_records = m3.GetDataObjByCondition(strLuaDEID, "SKU_GridBox_Parm", strCondition) - if nRet == 0 then - -- 鏇存柊鐜版湁璁板綍 - local update_gridbox_obj = {{ - id = existing_records.id, - attrs = {{ - attr = "N_LOADING_LIMIT", - value = loading_limit - }} - }} - - nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, "SKU_GridBox_Parm", lua.table2str(update_gridbox_obj)) - if nRet ~= 0 then - return 1, string.format("鏇存柊%s绫诲瀷鏂欑鏍煎睘鎬уけ璐� %s", gridbox_type.cell_type, strRetInfo) - end - else - -- 鍒涘缓鏂拌褰�- local gridbox = m3.AllocObject(strLuaDEID, "SKU_GridBox_Parm") - gridbox.item_code = skuModel.item_code - gridbox.storer = skuModel.storer - gridbox.ctd_code = CONST_CTD_CODE - gridbox.loading_limit = loading_limit - gridbox.cell_type = gridbox_type.cell_type - - nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, gridbox) - if nRet ~= 0 then - return 1, string.format("鍒涘缓%s绫诲瀷鏂欑鏍煎け璐� %s", gridbox_type.cell_type, strRetInfo) - end - end - end - - return 0, "鏂欑鏍煎弬鏁板鐞嗗畬鎴� -end - --- 鍒涘缓鎴栨洿鏂癝KU涓绘暟鎹�-local function create_sku(strLuaDEID, sku_input_data) - local nRet, strRetInfo - local err_msg = '' - -- 鑾峰彇绯荤粺甯搁噺 - -- 鑾峰彇榛樿瀹瑰櫒绫诲瀷缂栫爜 - local nConstRet, CONST_CTD_CODE = wms_base.Get_sConst2("WMS_Default_CNTR_Type") - if nConstRet ~= 0 then - return 1, "鑾峰彇榛樿瀹瑰櫒绫诲瀷瀹氫箟缂栫爜澶辫触: " .. CONST_CTD_CODE - end - -- 鏂板SKU_grid_param - local sku_grid_parm = build_sku_grid_parm(CONST_CTD_CODE, sku_input_data) - - -- 棣栧厛妫�煡SKU鏄惁宸插瓨鍦�- local strCondition = string.format("S_ITEM_CODE = '%s' AND S_STORER = '%s'", sku_input_data.skuId, - sku_input_data.storerId) - local nRet, existing_sku = m3.GetDataObjByCondition(strLuaDEID, "SKU", strCondition) - lua.DebugEx(strLuaDEID, "鑾峰彇鏉′欢鏌ヨ锛�, existing_sku) - if nRet > 1 then - return 1, "妫�煡SKU鏄惁瀛樺湪鏃跺け璐� " .. (existing_sku or "鏈煡閿欒") - end - - -- 鍒嗛厤SKU瀵硅薄骞惰缃睘鎬�- local sku = m3.AllocObject(strLuaDEID, "SKU") - sku.item_code = sku_input_data.skuId - sku.storer = sku_input_data.storerId - sku.short_name = sku_input_data.skuName - sku.item_name = sku_input_data.skuDec - sku.spec = sku_input_data.spec - sku.unit = sku_input_data.goodsUnit - sku.long = lua.Get_NumAttrValue(sku_input_data.length) or 0 - sku.middle = lua.Get_NumAttrValue(sku_input_data.width) or 0 - sku.short = lua.Get_NumAttrValue(sku_input_data.height) or 0 - sku.count_method = "Limit" - sku.abc_type = sku_input_data.abcType or "" - sku.is_life_mgt = (sku_input_data.isBatchMgr == "1" and 'Y') or 'N' - sku.is_sn_mgt = (sku_input_data.isSnMgr == "1" and 'Y') or 'N' - sku.img_url = sku_input_data.imgUrl or "" - lua.DebugEx(strLuaDEID, "cell_type", sku_input_data.cidtype) - sku.cell_type = sku_input_data.cidtype - sku.item_type = sku_input_data.skuType - sku.loading_limit = lua.Get_NumAttrValue(sku_input_data.maxCount) or 0 - sku.udf01 = sku_input_data.productLine or "" - sku.udf03 = sku_input_data.isSnStorageMgr or "" - sku.udf02 = sku_input_data.storageConditions or "" - sku.udf04 = sku_input_data.packageCode or "" - sku.udf05 = lua.Get_NumAttrValue(sku_input_data.packageQty) or 0 - sku.sku_grid_parm = sku_grid_parm; - lua.DebugEx(strLuaDEID, "鏇存柊/鍒涘缓鏁版嵁", sku) - lua.DebugEx(strLuaDEID, "鏇存柊/鍒涘缓鏁版嵁", sku.cell_type) - if nRet == 1 then - -- SKU涓嶅瓨鍦紝鍒涘缓鏂拌褰�- nRet, strRetInfo = m3.CreateDataObj(strLuaDEID, sku) - if nRet ~= 0 then - return 1, "鍒涘缓SKU澶辫触: " .. strRetInfo .. " skuId = " .. sku_input_data.skuId - end - else - -- SKU宸插瓨鍦紝鏇存柊璁板綍 - local update_sku_obj = {{ - id = existing_sku.id, - attrs = {{ - attr = "S_ITEM_NAME", - value = sku.item_name - }, { - attr = "S_SPEC", - value = sku.spec - }, { - attr = "S_ITEM_TYPE", - value = sku.item_type - }, { - attr = "S_UNIT", - value = sku.unit - }, { - attr = "S_SHORT_NAME", - value = sku.short_name - }, { - attr = "S_ABCTYPE", - value = sku.abc_type - }, { - attr = "C_ISSNMGT", - value = sku.is_sn_mgt - }, { - attr = "C_ISLIFEMGT", - value = sku.is_life_mgt - }, { - attr = "S_IMG_URL", - value = sku.img_url - }, { - attr = "S_CELL_TYPE", - value = sku.cell_type - }, { - attr = "N_LOADING_LIMIT", - value = sku.loading_limit - }, { - attr = "F_LONG", - value = sku.long - }, { - attr = "F_MIDDLE", - value = sku.middle - }, { - attr = "F_SHORT", - value = sku.short - }, { - attr = "S_UDF01", - value = sku.udf01 - }, { - attr = "S_UDF02", - value = sku.udf02 - }, { - attr = "S_UDF03", - value = sku.udf03 - }, { - attr = "S_UDF04", - value = sku.udf04 - }, { - attr = "S_UDF05", - value = sku.udf05 - }, { - attr = "S_SKU_GRID_PARM", - value = sku.sku_grid_parm - }} - }} - nRet, strRetInfo = mobox.updateDataObj(strLuaDEID, "SKU", lua.table2str(update_sku_obj)) - lua.DebugEx(strLuaDEID, "鏇存柊杩斿洖鍊�, nRet) - if nRet ~= 0 then - return 1, "鏇存柊SKU灞炴�澶辫触: " .. strRetInfo - end - end - - -- 澶勭悊浜у搧绾挎暟鎹�- if sku_input_data.productLine and sku_input_data.productLine ~= "" then - local proline_no = sku_input_data.productLine - local proline_name = string.match(proline_no, "KH%-(.+)") or proline_no - nRet, strRetInfo = create_or_update_proline(strLuaDEID, proline_no, proline_name) - if nRet ~= 0 then - return 1, "澶勭悊浜у搧绾挎暟鎹け璐� " .. strRetInfo - end - end - - -- 澶勭悊SKU_UPC鏉$爜 - local upc_codes = {sku_input_data.sptm, sku_input_data.barcode1, sku_input_data.barcode2, sku_input_data.barcode3, - sku_input_data.barcode_pk, sku_input_data.upc} - - for _, upc_code in ipairs(upc_codes) do - if upc_code and upc_code ~= '' then - nRet, strRetInfo = create_sku_upc(strLuaDEID, sku.storer, sku.item_code, upc_code) - if nRet ~= 0 then - return 1, "鍒涘缓SKU_UPC澶辫触: " .. strRetInfo .. " UPC: " .. upc_code - end - end - end - - -- 澶勭悊SKU_GridBox_Parm鏂欑鏍煎弬鏁�- nRet, strRetInfo = create_or_update_sku_gridbox(strLuaDEID, sku, sku_input_data) - if nRet ~= 0 then - return 1, "澶勭悊SKU_GridBox_Parm澶辫触: " .. strRetInfo - end - - return 0 -end - --- Main鍑芥暟 -function SKU_Sync(strLuaDEID) - -- 鍒濆鍖栨渶缁堢粨鏋�- local FinalRes = Create_result() - - -- 1. 鑾峰彇xml鏁版嵁鍖�- local nRet, soap_xml = mobox.getCurEditDataPacket(strLuaDEID) - if nRet ~= 0 then - FinalRes = Create_result("failure", "201", "鏃犳硶鑾峰彇鏁版嵁鍖� " .. soap_xml) - local xml_result = xml.json_to_xml(FinalRes, "response") - mobox.returnValue(strLuaDEID, 0, xml_result, 0) - lua.Stop(strLuaDEID, "鑾峰彇鏁版嵁鍖呭け璐�, FinalRes) - return - end - - -- 2. 瑙f瀽xml - local nRet, parsed_data = xml.parse(soap_xml) - if nRet ~= 0 then - FinalRes = Create_result("failure", "202", "xml鏍煎紡闈炴硶") - local xml_result = xml.json_to_xml(FinalRes, "response") - mobox.returnValue(strLuaDEID, 0, xml_result, 0) - lua.Stop(strLuaDEID, "xml鏍煎紡闈炴硶", FinalRes) - return - end - - -- 3. 鎻愬彇SKU鏁版嵁 - local sku_data = parsed_data.Envelope.Body.inCommodityReq.COMMODITY_Input.InputParameters.COMMODITY_TB - if not sku_data or not sku_data.COMMODITY_TB_ITEM then - FinalRes = Create_result("failure", "203", "xml鏁版嵁鏍煎紡閿欒锛岀己灏慍OMMODITY_TB_ITEM") - local xml_result = xml.json_to_xml(FinalRes, "response") - mobox.returnValue(strLuaDEID, 0, xml_result, 0) - lua.Stop(strLuaDEID, "xml鏁版嵁鏍煎紡閿欒", FinalRes) - return - end - - -- 4. 缁熶竴澶勭悊锛氱‘淇漵ku_items鏄暟缁�- local sku_items = sku_data.COMMODITY_TB_ITEM - if sku_items[1] == nil then - sku_items = {sku_items} - end - - -- 5. 閬嶅巻鎵�湁SKU鏁版嵁 - for i = 1, #sku_items do - local sku_item = sku_items[i] - -- 鍒涘缓SKU鍙婂叾UPC - local nRet, err_msg = create_sku(strLuaDEID, sku_item) - if nRet ~= 0 then - wms_base.Warning(strLuaDEID, 1, 601, err_msg, "浠嶨K-WMS绯荤粺鍚屾SKU淇℃伅") - FinalRes = Create_result("failure", "204", "SKU鍚屾澶辫触: " .. err_msg) - local xml_result = xml.json_to_xml(FinalRes, "response") - mobox.returnValue(strLuaDEID, 0, xml_result, 0) - lua.Stop(strLuaDEID, "SKU鍚屾澶辫触: " .. sku_item.skuId, FinalRes) - return - end - end - -- 6. 杩斿洖鎴愬姛 - FinalRes = Create_result("success", "0", "SKU鍚屾鎴愬姛") - local xml_result = xml.json_to_xml(FinalRes, "response") - mobox.returnValue(strLuaDEID, 0, xml_result, 0) -end -- Gitblit v1.9.1