wsz
2025-06-20 19898bd66dec87b500b200d5d50961d0fb538ce5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
--[[
    编码: WMS-57-13
    名称: 取消
    作者:HAN    
    日期:2025-1-29
    入口函数: ORGC_Cancel
 
    功能说明:
        预分配容器取消,如果组盘没创建作业,或创建了作业还没有执行(WCS层面的执行)均可取消 预分配容器
 
    更改记录:
 
--]]
 
wms_in = require( "wms_inbound" )
 
function ORGC_Cancel ( strLuaDEID ) 
    local nRet, strRetInfo
    local objs
 
    -- step1  获取当前点中的【预分配容器】
    nRet, objs = m3.GetSysDataJson( strLuaDEID )
    if ( nRet ~=0 ) then lua.Error( strLuaDEID, debug.getinfo(1), objs ) end  
    -- [{"id":"","attrs":[{"attr":"","value":""},..]},..]
    local nCount = #objs
    if (nCount == 0) then  return end
 
    local obj_attrs
    local b_state, can_cancel
    local pac_obj
    local operation = nil
 
    for n = 1, nCount do
        -- 检查一下N_B_STATE是否=0,1 其它的状态不能取消
        obj_attrs = m3.KeyValueAttrsToObjAttr( objs[n].attrs )
        if ( obj_attrs.N_B_STATE == nil ) then
            mobox.setInfo( strLuaDEID, "预分配容器列表中必须要有N_B_STATE字段, 否则无法判断状态!" ) 
            return
        end
        b_state = lua.Get_NumAttrValue( obj_attrs.N_B_STATE )
        -- 0 未出库 1 -- 出库中
        if ( b_state == 0 or  b_state == 1 ) then
            can_cancel = true
            nRet, pac_obj = m3.GetDataObject( strLuaDEID, "Pre_Alloc_Container", lua.trim_guid_str(objs[n].id) ) 
            if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), pac_obj ) end  
 
            if ( b_state == 1 ) then
                -- 需要判断一下作业是否可以取消
                nRet, can_cancel, operation = wms_op.CanCancel( strLuaDEID, pac_obj.out_op_no )
                if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), can_cancel ) end  
            end
 
            if ( can_cancel ) then
                nRet, strRetInfo = wms_in.Pre_Alloc_CNTR_Cancel( strLuaDEID, pac_obj )
                if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), can_cancel ) end  
                -- 增加一个后台进程对组盘进行处理,触发配盘明细中的入库波次是否可以完成
                local add_wfp = {
                    wfp_type = 1,
                    cls = "Pre_Alloc_Container",
                    obj_id = pac_obj.id,
                    obj_name = "组盘'"..pac_obj.pac_no.."'-->入库后处理",
                    trigger_event = "入库后处理"
                }
                nRet, strRetInfo = m3.AddSysWFP( strLuaDEID, add_wfp )
                if ( nRet ~= 0 ) then 
                    lua.Error( strLuaDEID, debug.getinfo(1), "AddSysWFP失败!"..strRetInfo )  
                end  
            end
        end
    end
 
    local action = {}    
    if ( nCount == 1 ) then
        action[1] =
            {
                action_type = "refresh_cur_row",
                value = ""
            }
    else
        action[1] =
            {
                action_type = "refresh",
                value = ""
            }        
    end
    nRet, strRetInfo = mobox.setAction( strLuaDEID, lua.table2str(action) )
    if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "setAction失败! "..strRetInfo..' action = '..strAction ) end            
 
end