--[[
|
编码: WMS-90-10#1
|
名称: SKU-导入
|
作者:HAN
|
日期:2025-1-29
|
入口函数: Import
|
来源:
|
巨星二期料箱库项目
|
|
功能说明:
|
通过excel文件导入物料、商品、货品基本信息
|
|
变更历史:
|
|
--]]
|
wms_base = require ("wms_base")
|
|
local function value_sort( a, b ) return a < b end
|
|
function Import(strLuaDEID)
|
local nRet, strRetInfo, strNo
|
-- 获取导入的数据, 返回 [{"attr":"xx","value":""},...]
|
local row_data = {}
|
nRet, row_data = m3.GetSysDataJson(strLuaDEID)
|
if (nRet ~= 0 or strRetInfo == '') then
|
lua.Stop( strLuaDEID, "无法获取导入数据!")
|
return
|
end
|
|
local row_attrs
|
local n, nCount, nRows, nIndex, sku
|
|
-- 导入是可分多页分批导入, 因此每次的起始行不一样
|
nRet, strRetInfo = mobox.getGlobalAttrValue( strLuaDEID, "start_row" )
|
if ( nRet ~= 0 ) then
|
mobox.error( strLuaDEID, "获取批量导入全局参数 start_row 失败!"..strRetInfo )
|
return
|
end
|
local nStartRow = tonumber( strRetInfo )
|
local err_msg_list = {} -- 用于写导入错误信息
|
local str_err_msg
|
|
-- 步骤1 获取从excel导入的一行数据
|
nRow = nStartRow
|
for row = 1, #row_data do
|
row_attrs = row_data[row]
|
nCount = #row_attrs
|
-- 初始化 货位 对象
|
sku = m3.AllocObject(strLuaDEID,"SKU")
|
nIndex = 1
|
value_array = {}
|
strNo = ''
|
str_err_msg = ''
|
for n = 1, nCount do
|
strAttr = row_attrs[n].attr
|
strValue = row_attrs[n].value
|
if (strAttr ~= '') then
|
if (strAttr == "商品编码") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
sku.item_code = strValue
|
--V1.2
|
elseif (strAttr == "单重") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
sku.weight = lua.StrToNumber( strValue )
|
elseif (strAttr == "长值") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
value_array[nIndex] = lua.StrToNumber( strValue )
|
nIndex = nIndex + 1
|
elseif (strAttr == "中值") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
value_array[nIndex] = lua.StrToNumber( strValue )
|
nIndex = nIndex + 1
|
elseif (strAttr == "短值") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
value_array[nIndex] = lua.StrToNumber( strValue )
|
nIndex = nIndex + 1
|
elseif (strAttr == "商品名称") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
sku.item_name = strValue
|
end
|
end
|
end
|
|
if ( #value_array ~= 3 ) then
|
str_err_msg = str_err_msg.."SKU的长宽高没有定义完整!"
|
end
|
|
::err_msg_process::
|
if ( str_err_msg ~= '' ) then
|
local err_msg_row = {
|
row_no = nRow,
|
err_msg = str_err_msg
|
}
|
table.insert( err_msg_list, err_msg_row )
|
else
|
-- 获取长边,中边,短边
|
table.sort( value_array, value_sort )
|
sku.short = value_array[1]
|
sku.middle = value_array[2]
|
sku.long = value_array[3]
|
|
-- 判断物料是否已经存在,如果已经存在刷新新的属性
|
-- 本项目为单一货主,因此直接用 S_ITEM_CODE 判断
|
strCondition = "S_ITEM_CODE = '"..sku.item_code.."'"
|
nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr( strLuaDEID, "SKU", strCondition )
|
|
if ( nRet > 1 ) then
|
local err_msg_row = {
|
row_no = nRow,
|
err_msg = "导入物料信息失败: 在检查 inco = '"..sku.item_code.."'是否存在时失败!"..strRetInfo
|
}
|
table.insert( err_msg_list, err_msg_row )
|
end
|
if ( nRet == 1 ) then
|
-- 不存在
|
nRet, sku = m3.CreateDataObj(strLuaDEID, sku)
|
if (nRet ~= 0 ) then
|
local err_msg_row = {
|
row_no = nRow,
|
err_msg = "序号='"..strNo.."'导入行在创建【物料】时失败!"..sku
|
}
|
table.insert( err_msg_list, err_msg_row )
|
end
|
else
|
-- 已经存在更新数据对象
|
update_data_obj = {
|
{
|
id = id,
|
attrs = {
|
{ attr = "S_ITEM_CODE", value = sku.item_code },
|
{ attr = "S_ITEM_NAME", value = sku.item_name },
|
{ attr = "F_LONG", value = sku.long },
|
{ attr = "F_MIDDLE", value = sku.middle },
|
{ attr = "F_SHORT", value = sku.short },
|
{ attr = "F_VOLUME", value = sku.volume },
|
{ attr = "F_WEIGHT", value = sku.weight }
|
}
|
}
|
}
|
nRet, strRetInfo = mobox.updateDataObj( strLuaDEID, "SKU", lua.table2str(update_data_obj) )
|
if (nRet ~= 0 ) then
|
local err_msg_row = {
|
row_no = nRow,
|
err_msg = "序号='"..strNo.."'导入行在更新【物料】属性失败!"..strRetInfo
|
}
|
table.insert( err_msg_list, err_msg_row )
|
end
|
end
|
end
|
nRow = nRow + 1
|
end
|
-- 把导入过程中的错误信息返回到前端
|
local import_fail = {
|
result = {
|
fail = err_msg_list
|
}
|
}
|
mobox.returnValue( strLuaDEID,1, lua.table2str(import_fail) )
|
end
|