--[[
|
编码: JX-116-10
|
名称: 巨沃料箱初始化-导入
|
作者:HAN
|
日期:2025-1-29
|
入口函数: Import
|
|
功能说明:
|
|
变更历史:
|
|
--]]
|
wms_base = require ("wms_base")
|
wms_cntr= require( "wms_container" )
|
|
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.Error( strLuaDEID, debug.getinfo(1), "无法获取导入数据!") end
|
|
local row_attrs
|
local n, nCount, nRows, nIndex
|
local cntr_type, max_cell_num
|
|
-- 导入是可分多页分批导入, 因此每次的起始行不一样
|
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
|
local jw_cntr, cntr
|
local strCondition, strUpdateSql
|
local item_code, item_name, cell_no
|
local qty
|
local material
|
local cg_detail
|
|
-- 步骤1 获取从excel导入的一行数据
|
nRow = nStartRow
|
for row = 1, #row_data do
|
row_attrs = row_data[row]
|
|
-- 初始化空料箱对象
|
item_code = ''
|
item_name = ''
|
cell_no = ''
|
qty = 0
|
jw_cntr = m3.AllocObject(strLuaDEID,"JW_CNTR_Goods_INIT")
|
str_err_msg = ''
|
for n = 1, #row_attrs 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
|
jw_cntr.cntr_code = strValue
|
elseif (strAttr == "料箱类型") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
jw_cntr.spec = strValue
|
elseif (strAttr == "料格") then
|
cell_no = strValue
|
elseif (strAttr == "料号") then
|
item_code = strValue
|
elseif (strAttr == "品名") then
|
item_name = strValue
|
elseif (strAttr == "数量") then
|
qty = lua.StrToNumber( strValue )
|
end
|
end
|
end
|
|
-- 首先判断一下容器是否存在,容器已经存在不允许导入,可以考虑先在WMS中删除
|
nRet, cntr = wms_cntr.GetInfo( strLuaDEID, jw_cntr.cntr_code )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "获取容器信息失败!"..cntr ) end
|
|
if ( cntr == '' ) then
|
-- 没有容器需要创建
|
nRet, jw_cntr = m3.CreateDataObj(strLuaDEID, jw_cntr)
|
if (nRet ~= 0 ) then
|
str_err_msg = "创建巨沃初始化料箱货品对象失败!"..jw_cntr
|
goto err_msg_process
|
end
|
|
cntr = m3.AllocObject(strLuaDEID,"Container")
|
cntr.code = jw_cntr.cntr_code
|
cntr.type = 3 -- 料箱
|
cntr.spec = jw_cntr.spec
|
cntr.source = "巨沃"
|
nRet, cntr = m3.CreateDataObj(strLuaDEID, cntr)
|
if (nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "创建料箱对象失败!"..cntr ) end
|
else
|
-- 容器已经存在需要判断容器是否和货位有绑定
|
if ( cntr.position ~= '' ) then
|
str_err_msg = "料箱'"..jw_cntr.cntr_code.."'已经在储藏区,不能导入!"
|
goto err_msg_process
|
end
|
end
|
-- 判断是否要导入 CG_Detail
|
if ( item_code ~= '' and cell_no ~= '') then
|
nRet, material = m3.GetDataObjectByKey(strLuaDEID, "SKU", "S_ITEM_CODE", item_code )
|
if (nRet ~= 0 ) then
|
if ( nRet == 1 ) then
|
str_err_msg = material
|
goto err_msg_process
|
end
|
lua.Error( strLuaDEID, debug.getinfo(1), "获取货品信息失败!"..material )
|
end
|
|
-- 判断一下CG_Detail 里相同的货品不能有(防止重复导入造成数据错误)
|
strCondition = "S_CNTR_CODE = '"..jw_cntr.cntr_code.."' AND S_CELL_NO = '"..cell_no.."' AND S_ITEM_CODE = '"..item_code.."'"
|
nRet, strRetInfo = mobox.existThisData( strLuaDEID, "CG_Detail", strCondition )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), strRetInfo ) end
|
if ( strRetInfo ~= "yes" ) then
|
cg_detail = m3.AllocObject(strLuaDEID,"CG_Detail")
|
cg_detail.cntr_code = jw_cntr.cntr_code
|
cg_detail.cell_no = cell_no
|
cg_detail.item_code = item_code
|
cg_detail.item_name = item_name
|
cg_detail.weight = material.weight
|
cg_detail.volume = material.volume
|
cg_detail.qty = qty
|
cg_detail.uom = "个"
|
nRet, cg_detail = m3.CreateDataObj( strLuaDEID, cg_detail )
|
if ( nRet ~= 0 ) then
|
lua.Error( strLuaDEID, debug.getinfo(1), '创建拣料箱CG_Detail时失败!'..cg_detail )
|
end
|
end
|
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 )
|
end
|
nRow = nRow + 1
|
end
|
-- 把导入过程中的错误信息返回到前端
|
local import_fail = {
|
result = {
|
fail = err_msg_list
|
}
|
}
|
mobox.returnValue( strLuaDEID,1, lua.table2str(import_fail) )
|
lua.Debug( strLuaDEID, debug.getinfo(1), "import_fail", import_fail )
|
end
|