--[[
|
编码: WMS-300-24.1
|
名称: 盘点计划同步
|
作者: KUN
|
日期: 2025-1-29
|
|
入口函数: SKU_Sync
|
来源项目: 国科项目
|
|
功能说明:
|
1. 接收来自上游系统的 XML 格式数据,并解析该数据, 创建SKU及SKU_UPC
|
|
<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>KH32803017</v1:skuId>
|
<v1:storerId>CGKHTY</v1:storerId>
|
<v1:skuName>螺旋刀片式髓内钉</v1:skuName>
|
<v1:skuDec>螺旋刀片式股骨近端髓内钉10×170</v1:skuDec>
|
<v1:spec>JGDⅥ φ10×170</v1:spec>
|
<v1:packageCode>个</v1:packageCode>
|
<v1:packageQty>1</v1:packageQty>
|
<v1:goodsUnit>件</v1:goodsUnit>
|
<v1:length>1</v1:length>
|
<v1:width>2</v1:width>
|
<v1:height>3</v1:height>
|
<v1:abcType></v1:abcType>
|
<v1:isBatchMgr>1</v1:isBatchMgr>
|
<v1:isSnMgr>1</v1:isSnMgr>
|
<v1:isSnStorageMgr>0</v1:isSnStorageMgr>
|
<v1:imgUrl></v1:imgUrl>
|
<v1:cidtype>A</v1:cidtype>
|
<v1:productLine>KH-创伤</v1:productLine>
|
<v1:storageConditions>常温</v1:storageConditions>
|
<v1:skuType>small</v1:skuType>
|
<v1:maxCount>50</v1:maxCount>
|
<v1:sptm></v1:sptm>
|
<v1:barcode1></v1:barcode1>
|
<v1:barcode2></v1:barcode2>
|
<v1:barcode3></v1:barcode3>
|
<v1:barcode_pk></v1:barcode_pk>
|
</v1:COMMODITY_TB_ITEM>
|
</v1:COMMODITY_TB>
|
</v1:InputParameters>
|
</v1:COMMODITY_Input>
|
</v1:inCommodityReq>
|
</soapenv:Body>
|
</soapenv:Envelope>
|
|
更改记录:
|
V2.0 HAN 20250402 代码规范
|
--]]
|
|
wms_base = require( "wms_base" )
|
xml = require( "oi_base_xml" )
|
|
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, sku_upc = m3.CreateDataObj(strLuaDEID, sku_upc)
|
|
return nRet
|
end
|
|
local function create_gk_proline( strLuaDEID, pro_line_no )
|
local nRet, strRetInfo
|
|
if ( upc_code == '' or upc_code == nil ) then return 0 end
|
|
local pro_line = m3.AllocObject( strLuaDEID,"GK_PROLINE" )
|
pro_line.proline_no = pro_line_no
|
pro_line.proline_name = pro_line_no
|
nRet, pro_line = m3.CreateDataObj(strLuaDEID, pro_line)
|
|
return nRet
|
end
|
|
function SKU_Sync(strLuaDEID)
|
local nRet, strRetInfo, n, nErr
|
local err_msg
|
nErr = 1
|
|
-- step1 获取接口中的输入数据
|
local soap_xml
|
nRet, soap_xml = mobox.getCurEditDataPacket( strLuaDEID )
|
if ( nRet ~=0 ) then
|
lua.Stop( strLuaDEID, "无法获取数据包 datajson !"..input_data )
|
return
|
end
|
|
-- 解析XML
|
local parsed_data
|
nRet, parsed_data = xml.parse(soap_xml)
|
if ( nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "接口输入的XML格式非法!" )
|
return
|
end
|
local sku_set = parsed_data["soapenv:Envelope"]["soapenv:Body"].inCommodityReq.COMMODITY_Input.InputParameters.COMMODITY_TB
|
local n, sku, id
|
local update_sku_obj = {}
|
|
for n = 1, #sku_set do
|
err_msg = ''
|
|
sku = m3.AllocObject( strLuaDEID,"SKU" )
|
sku.item_code = sku_set[n].skuId
|
sku.storer = sku_set[n].storerId
|
sku.short_name = sku_set[n].skuName
|
sku.item_name = sku_set[n].skuDec
|
sku.spec = sku_set[n].spec
|
sku.udf01 = sku_set[n].packageCode
|
sku.udf02 = sku_set[n].packageQty
|
sku.unit = sku_set[n].goodsUnit
|
sku.long = lua.Get_NumAttrValue( sku_set[n].length )
|
sku.middle = lua.Get_NumAttrValue( sku_set[n].width )
|
sku.short = lua.Get_NumAttrValue( sku_set[n].height )
|
|
sku.abc_type = sku_set[n].abcType
|
sku.is_life_mgt = ( sku_set[n].isBatchMgr == "1" and 'Y' ) or 'N'
|
sku.is_sn_mgt = ( sku_set[n].isSnMgr == "1" and 'Y' ) or 'N'
|
sku.udf03 = sku_set[n].isSnStorageMgr
|
sku.img_url = sku_set[n].imgUrl
|
sku.cell_type = sku_set[n].cidtype
|
sku.prod_line = sku_set[n].productLine
|
sku.udf04 = sku_set[n].storageConditions
|
sku.item_type = sku_set[n].skuType
|
sku.loading_limit = lua.Get_NumAttrValue( sku_set[n].maxCount )
|
|
-- 判断SKU是否已经存在
|
strCondition = "S_ITEM_CODE = '"..sku.item_code.."' AND S_STORER = '"..sku.storer.."'"
|
nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr( strLuaDEID, "SKU", strCondition )
|
if ( nRet > 1 ) then
|
err_msg = "GK-WMS 同步SKU信息失败: 在检查 skuId = '"..sku.item_code.."'是否存在时失败!"..strRetInfo
|
goto continue
|
end
|
if ( nRet == 1 ) then
|
-- SKU 不存在
|
nRet, sku = m3.CreateDataObj(strLuaDEID, sku)
|
if (nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "创建【SKU】失败!"..sku.." skuId = "..sku_set[n].skuId )
|
return
|
end
|
else
|
-- SKU 已经存在更新属性
|
update_sku_obj = {
|
{
|
id = id,
|
attrs = {
|
{ attr = "S_ITEM_NAME", value = sku.item_name },
|
{ attr = "S_ITEM_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.mg_url },
|
|
{ attr = "S_CELL_TYPE", value = sku.cell_type },
|
{ attr = "S_PROD_LINE", value = sku.prod_line },
|
{ 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 }
|
}
|
}
|
}
|
nRet, strRetInfo = mobox.updateDataObj( strLuaDEID, "SKU", table2str(update_sku_obj) )
|
if (nRet ~= 0 ) then
|
lua.Stop( strLuaDEID, "更新【物料】属性失败!"..strRetInfo )
|
return
|
end
|
end
|
|
-- 新增生产线
|
create_gk_proline( strLuaDEID, sku.prod_line )
|
|
-- 处理SKU_UPC
|
create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].sptm )
|
create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode1 )
|
create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode2 )
|
create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode3 )
|
create_sku_upc( strLuaDEID, sku.storer, sku.item_code, sku_set[n].barcode_pk )
|
|
::continue::
|
-- 如果有错误信息加到系统的 Waring 对象
|
if ( err_msg ~= '') then
|
wms_base.Warning( strLuaDEID, 1, 601, err_msg, "从GK-WMS系统同步SKU信息" )
|
nErr = nErr + 1
|
err[nErr] = err_msg
|
end
|
end
|
|
if ( nErr > 0 ) then
|
local err_info = {
|
from = "GK-WMS SKU数据同步",
|
err_msg = err
|
}
|
mobox.returnValue( strLuaDEID, 1, lua.table2str(err_info), 5 )
|
end
|
end
|