--[[
|
编码: JX-115-10
|
名称: 空料箱初始化-导入
|
作者:HAN
|
日期:2025-1-29
|
入口函数: Import
|
|
功能说明:
|
|
变更历史:
|
|
--]]
|
wms_base = require ("wms_base")
|
wms_cntr= require( "wms_container" )
|
|
function Import(strLuaDEID)
|
local nRet, strRetInfo, strNo
|
local cntr_spec = {"A","B","C","D","","E"}
|
-- 获取导入的数据, 返回 [{"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 empty_box, cntr
|
local strCondition, strUpdateSql
|
|
-- 步骤1 获取从excel导入的一行数据
|
nRow = nStartRow
|
for row = 1, #row_data do
|
row_attrs = row_data[row]
|
|
-- 初始化空料箱对象
|
empty_box = m3.AllocObject(strLuaDEID,"JX_ASRS_EmptyBox_In")
|
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
|
empty_box.cntr_code = strValue
|
elseif (strAttr == "来源系统") then
|
if (strValue == '') then
|
str_err_msg = strAttr .. "不能为空!"
|
goto err_msg_process
|
end
|
empty_box.source_sys = strValue
|
elseif (strAttr == "料格数") then
|
empty_box.max_cell_num = lua.StrToNumber( strValue )
|
|
end
|
end
|
end
|
-- 判断导入的数据是否完整
|
if ( empty_box.source_sys == "巨沃" ) then
|
if ( empty_box.max_cell_num < 1 or empty_box.max_cell_num > 6 or empty_box.max_cell_num == 5 ) then
|
str_err_msg = "料格数量不合法!"
|
goto err_msg_process
|
end
|
end
|
|
if ( str_err_msg == '' ) then
|
-- 判断料箱是否存在
|
if ( wms_cntr.Exist( strLuaDEID, empty_box.cntr_code ) == false ) then
|
-- 没有容器需要创建
|
nRet, empty_box = m3.CreateDataObj(strLuaDEID, empty_box)
|
if (nRet ~= 0 ) then
|
str_err_msg = "创建空料箱初始化对象失败!"..empty_box
|
goto err_msg_process
|
end
|
|
cntr = m3.AllocObject(strLuaDEID,"Container")
|
cntr.code = empty_box.cntr_code
|
if ( empty_box.source_sys == "巨沃" ) then
|
cntr.type = 3 -- 料箱
|
cntr.spec = cntr_spec[empty_box.max_cell_num]
|
cntr.max_cell_num = empty_box.max_cell_num
|
cntr.source = "巨沃"
|
else
|
cntr.type = 2
|
cntr.source = "巨星"
|
end
|
nRet, cntr = m3.CreateDataObj(strLuaDEID, cntr)
|
if (nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "创建料箱对象失败!"..cntr ) end
|
else
|
-- 容器已经存在需要判断容器是否和货位有绑定
|
strCondition = "S_CNTR_CODE = '"..empty_box.cntr_code.."'"
|
nRet, strRetInfo = mobox.existThisData( strLuaDEID, "CG_Detail", strCondition )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), strRetInfo ) end
|
-- 如果该车辆编码的动作已经在队列,返回,不做处理
|
if ( strRetInfo ~= "no" ) then
|
str_err_msg = "料箱'"..empty_box.cntr_code.."'还存在绑定的货品!"
|
goto err_msg_process
|
end
|
nRet, strRetInfo = mobox.existThisData( strLuaDEID, "Loc_Container", strCondition )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), strRetInfo ) end
|
-- 如果该车辆编码的动作已经在队列,返回,不做处理
|
if ( strRetInfo ~= "no" ) then
|
str_err_msg = "料箱'"..empty_box.cntr_code.."'还存在绑定的货位!"
|
goto err_msg_process
|
end
|
|
nRet, empty_box = m3.CreateDataObj(strLuaDEID, empty_box)
|
if (nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "创建空料箱初始化对象失败!"..empty_box ) end
|
|
-- 更新容器基本信息
|
if ( empty_box.source_sys == "巨沃" ) then
|
cntr_type = 3 -- 料箱
|
cntr_spec = cntr_spec[empty_box.max_cell_num]
|
max_cell_num = empty_box.max_cell_num
|
else
|
cntr_type = 2
|
cntr_spec = ""
|
max_cell_num = 0
|
end
|
strUpdateSql = "N_TYPE = "..cntr_type..", S_SPEC = '"..cntr_spec.."', N_MAX_CELL_NUM = "..max_cell_num..", "..
|
"N_EMPTY_CELL_NUM = "..max_cell_num..", N_ALLOC_CELL_NUM = 0, S_POSITION = '', S_SOURCE = '"..empty_box.source_sys.."',"..
|
"N_EMPTY_FULL = 0, N_LOCK_STATE = 0, N_B_STATE = 0, C_ENABLE = 'Y', F_GOOD_WEIGHT = 0"
|
strCondition = "S_CODE = '"..empty_box.cntr_code.."'"
|
nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Container", strCondition, strUpdateSql )
|
if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "更新料箱信息失败!"..strRetInfo ) 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
|