New file |
| | |
| | | --- |
| | | --- Created by wsz. |
| | | --- DateTime: 2025/6/19 下午4:23 |
| | | --- |
| | | |
| | | --[[ |
| | | 编码: WMS-01-23 |
| | | 名称: |
| | | 作者: |
| | | 日期:2025-06-19 |
| | | |
| | | 函数: emptyBoxFormQuery |
| | | 功能: 空容器设置下拉项 | 初始化 、 loc值变化 |
| | | |
| | | 更改记录: |
| | | |
| | | --]] |
| | | |
| | | local json = require("json") |
| | | local mobox = require("OILua_JavelinExt") |
| | | local lua = require("oi_base_func") |
| | | local m3 = require("oi_base_mobox") |
| | | |
| | | ------------------------------------------------------------------------------------------------------------------------ |
| | | -- page 常量定义 |
| | | local ERR |
| | | local luaDEID |
| | | |
| | | |
| | | ------------------------------------------------------------------------------------------------------------------------ |
| | | -- 独立方法区 |
| | | local function deduplicate_array(arr) |
| | | local seen = {} |
| | | local result = {} |
| | | for _, v in ipairs(arr) do |
| | | if not seen[v] then |
| | | seen[v] = true |
| | | table.insert(result, v) |
| | | end |
| | | end |
| | | return result |
| | | end |
| | | |
| | | |
| | | ------------------------------------------------------------------------------------------------------------------------ |
| | | -- 1. 取得mac映射配置的库区 return area-code 注意此实现需要保证机台配置 mac-库区 1-1 且不可为空,不满足时准确不可保证 |
| | | local function getMacArea() |
| | | -- 登录人 |
| | | local user |
| | | do |
| | | local nRet, strRetInfo = mobox.getCurUserInfo(luaDEID) |
| | | user = strRetInfo |
| | | end |
| | | |
| | | -- mac地址 |
| | | local mac |
| | | do |
| | | local nRet, strRetInfo = mobox.getUserInfo(user, 1, 1) |
| | | |
| | | if nRet == 0 then |
| | | local loginInfo = json.decode(strRetInfo) |
| | | mac = loginInfo.client_info.mac |
| | | else |
| | | mobox.setInfo(luaDEID, "查询登录人mac地址为空!") |
| | | error("查询mac地址为空", 0) |
| | | end |
| | | end |
| | | |
| | | -- 库区 |
| | | local area |
| | | do |
| | | local strCondition -- 查询条件 |
| | | |
| | | -- 查询全部-统一处理 |
| | | local nRet, strRetInfo = mobox.queryDataObjAttr(luaDEID, "Machine_Station", {}) |
| | | |
| | | local kvmap = {} |
| | | for _, item in pairs(json.decode(strRetInfo)) do |
| | | local luadata = m3.KeyValueAttrsToObjAttr(item.attrs) |
| | | kvmap[luadata.S_MAC_ADDRESS] = luadata.S_STORAGE_AREA |
| | | end |
| | | |
| | | area = kvmap[mac] |
| | | end |
| | | |
| | | return area |
| | | end |
| | | |
| | | -- 2. 取得指定库区下all 空容器 的货位 返回 为空 {} 列表型table location-code ,视 queryMultiTable 限制,可能为1000 或 2000 限制 |
| | | local function getAllLocation(area) |
| | | |
| | | local locList = {} |
| | | |
| | | local strTable = [[ |
| | | tn_container con |
| | | inner join tn_loc_container lc on lc.s_cntr_code = con.s_code |
| | | left join tn_inv_detail ind on lc.s_cntr_code = ind.s_cntr_code |
| | | inner join tn_location loc on loc.s_code = lc.s_loc_code |
| | | inner join tn_area area on loc.s_area_code = area.s_code |
| | | ]] |
| | | |
| | | local strAttrs = [[ loc.s_code ]] |
| | | |
| | | local strCondition = string.format([[ |
| | | (ind.S_CNTR_CODE is null or ind.F_QTY = 0) |
| | | and con.N_LOCK_STATE == 0 |
| | | and area.S_CODE = '%s' |
| | | ]], area) |
| | | |
| | | local nRet, strRetInfo = mobox.queryMultiTable(luaDEID, strAttrs, strTable, 2000, strCondition) |
| | | |
| | | local luadata_conlist = #strRetInfo == 0 and {} or json.decode(strRetInfo) |
| | | |
| | | for _, item in ipairs(luadata_conlist) do |
| | | local it = item[1] |
| | | table.insert(locList, it) |
| | | end |
| | | |
| | | -- 查询主体的原因,需要去重 |
| | | locList = deduplicate_array(locList) |
| | | |
| | | return locList |
| | | end |
| | | |
| | | |
| | | -- 3. 取得指定货位下 全体 空容器 返回 为空 {} 列表型table con-code ,视 queryMultiTable 限制,可能为1000 或 2000 限制 |
| | | local function getContainer(area,loc) |
| | | |
| | | local conList = {} |
| | | |
| | | local strTable = [[ |
| | | tn_container con |
| | | inner join tn_loc_container lc on lc.s_cntr_code = con.s_code |
| | | left join tn_inv_detail ind on lc.s_cntr_code = ind.s_cntr_code |
| | | inner join tn_location loc on loc.s_code = lc.s_loc_code |
| | | inner join tn_area area on loc.s_area_code = area.s_code |
| | | ]] |
| | | |
| | | local strAttrs = [[ con.s_code ]] |
| | | |
| | | local strCondition = string.format([[ |
| | | (ind.S_CNTR_CODE is null or ind.F_QTY = 0) |
| | | and con.N_LOCK_STATE == 0 |
| | | and area.s_code = '%s' |
| | | ]], area) |
| | | |
| | | strCondition = loc == "" and strCondition or strCondition .. string.format(" and loc.s_code = '%s' ", loc) |
| | | |
| | | |
| | | local nRet, strRetInfo = mobox.queryMultiTable(luaDEID, strAttrs, strTable, 2000, strCondition) |
| | | |
| | | local luadata_conlist = #strRetInfo == 0 and {} or json.decode(strRetInfo) |
| | | |
| | | for _, item in ipairs(luadata_conlist) do |
| | | local it = item[1] |
| | | table.insert(conList, it) |
| | | end |
| | | |
| | | return conList |
| | | end |
| | | |
| | | -- 4. 取得页面输入的库位、容器 未输入|初始化时为 "" |
| | | local function getPagaInput() |
| | | local loc, con = "", "" |
| | | do |
| | | local nRet, parameter_attrs = m3.GetSysInputParameter(luaDEID) |
| | | -- 当初始化时 parameter_attrs 为 "" 空字串 |
| | | if type(parameter_attrs) == "table" then |
| | | local parameter = m3.KeyValueAttrsToObjAttr(parameter_attrs) |
| | | if parameter ~= nil then |
| | | loc = lua.Get_StrAttrValue(parameter.S_POSITION) |
| | | con = lua.Get_StrAttrValue(parameter.S_CODE) |
| | | end |
| | | end |
| | | end |
| | | print(loc, "--", con) |
| | | return loc, con |
| | | end |
| | | |
| | | |
| | | -- 核心功能实现 |
| | | local function main() |
| | | |
| | | local area = getMacArea() |
| | | |
| | | local loc, con = getPagaInput() |
| | | |
| | | local action_dlgAttr = { action_type = "set_dlg_attr", value = {} } |
| | | --[[ |
| | | 1. loc= "" 时 需要全量 初始化 loc 和 con 仅 area 指定 |
| | | 2. loc有值时 设置con 为指定库位的数据 |
| | | ]] |
| | | |
| | | if loc == "" then |
| | | print("库位未输入") |
| | | local locList = getAllLocation(area) |
| | | if #locList > 0 then |
| | | local action_input1 = { |
| | | attr = "S_POSITION", |
| | | choice_list = locList, |
| | | } |
| | | table.insert(action_dlgAttr.value, action_input1) |
| | | end |
| | | end |
| | | |
| | | -- |
| | | local conList = getContainer(area,loc) |
| | | if #conList > 0 then |
| | | local action_input2 = { |
| | | attr = "S_CODE", |
| | | choice_list = conList, |
| | | } |
| | | table.insert(action_dlgAttr.value, action_input2) |
| | | end |
| | | |
| | | -- -------------------------------------------------------------------------- |
| | | |
| | | local action = { action_dlgAttr } |
| | | local strjson = json.encode(action) |
| | | local nRet, strRetInfo = mobox.setAction(luaDEID, strjson) |
| | | print(nRet) |
| | | print(strRetInfo) |
| | | if nRet ~= 0 then mobox.setInfo( luaDEID,"设置表单失败",5 ) end |
| | | |
| | | end |
| | | |
| | | ------------------------------------------------------------------------------------------------------------------------ |
| | | ----- |
| | | local function errorHandler(err) |
| | | ERR = err |
| | | lua.Debug(luaDEID, debug.getinfo(1), "err-捕获", err) |
| | | return err |
| | | end |
| | | |
| | | --[[ 入口函数 ]] |
| | | function emptyBoxFormQuery(strLuaDEID) |
| | | |
| | | luaDEID = strLuaDEID |
| | | |
| | | -- lua交换区数据记录 |
| | | m3.PrintLuaDEInfo(strLuaDEID) |
| | | |
| | | -- core_main 为目标函数,从第2个参数后均为core_main的传入参数 |
| | | local success, result = xpcall(main, errorHandler) |
| | | |
| | | if not success then |
| | | -- 函数执行失败时处理 |
| | | print("发生错误", ERR) |
| | | lua.Error(strLuaDEID, debug.getinfo(1), ERR) |
| | | else |
| | | --函数成功时处理 |
| | | end |
| | | end |