fy36
2025-05-14 a37aca60ff9914b0abb710f04118b22420f4f398
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
--[[
    编码: JX-108-15
    名称: 巨星任务-巨星空料箱出库-空料箱出库
    作者:HAN  
    日期:2025-1-29
 
    级别:项目
    
    函数: CallEmptyBoxOut
 
    功能:
        -- 从料箱库计算出一个空的巨星料箱
        -- 创建‘巨星出库’作业
 
    更改记录:
 
--]]
jx_base= require( "jx_base" )
 
function CallEmptyBoxOut ( strLuaDEID ) 
    local nRet, strRetInfo
 
    local strUserLogin, strUserName
    nRet, strUserLogin, strUserName = mobox.getCurUserInfo( strLuaDEID )
    if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "获取当前操作人员信息失败! "..strUserLogin ) end
 
    -- 获取【巨星空料箱出库】的输入信息
    nRet, strRetInfo = mobox.getCurEditDataObjAttr( strLuaDEID, "S_STATION_NO", "Number" ) 
    if ( nRet ~= 0 )  then lua.Error( strLuaDEID, debug.getinfo(1), "获取当前编辑属性失败! "..strRetInfo ) end 
    local obj_attrs = json.decode( strRetInfo ) 
    local station = lua.Get_StrAttrValue( obj_attrs[1].value )  
    local empty_box_num = lua.Get_NumAttrValue( obj_attrs[2].value )       -- 需要出的空料箱数量 
 
    if ( station == ''  )  then 
        mobox.setInfo( strLuaDEID, "需要确定站台信息!")
        return 
    end
    if ( empty_box_num <= 0 ) then
        mobox.setInfo( strLuaDEID, "空料箱数量必须大于 0 !")
        return 
    end        
 
    -- 数据准备
    -- box_type = 2 就是巨星的料箱
    local storage_arae = wms_base.Get_sConst( strLuaDEID, "料箱库存储区" )
    local station_data
    local loc_code, cntr_code, n
    local start_loc, end_loc
 
    nRet, station_data = jx_base.Get_Station_ExtData( strLuaDEID, station )
    if ( nRet ~= 0 ) then  return 2, station_data end
    local storage_cache_arae = lua.Get_StrAttrValue( station_data.entry_area_code )
    if ( storage_cache_arae == '') then
        mobox.setInfo( strLuaDEID, "'机台-"..station.."'没有定义入库口区域编码信息!" )
        return         
    end
    loc_code = station_data.loc_code
    nRet, end_loc = wms_wh.GetLocInfo( loc_code )
    if ( nRet ~= 0 ) then 
        mobox.setInfo( strLuaDEID, "获取货位'"..loc_code.."'信息失败!"..end_loc )
        return           
    end 
 
    -- 申请空料箱
    local trans_id = lua.guid()             -- 容器锁事务
    local start_loc
    local nCount = 0
    local empty_box_list = {}
 
    nRet, empty_box_list = jx_base.Get_EmptyBox_Loc( strLuaDEID, trans_id, storage_arae, 2, empty_box_num )
    if ( nRet ~= 0 ) then
        wms.wms_AbortCntrLockTrans( trans_id )
        lua.Error( strLuaDEID, debug.getinfo(1), empty_box_list )  
    end
 
    lua.Debug( strLuaDEID, debug.getinfo(1), "呼出巨星空料箱--->empty_box_list", empty_box_list )
    nCount = #empty_box_list
    if ( nCount == 0 ) then
        mobox.setInfo( strLuaDEID, "库区"..area_code.."没有巨星空料箱!" )
        return
    end
 
    for n = 1, nCount do
        cntr_code = empty_box_list[n].cntr_code
        loc_code = empty_box_list[n].loc_code
 
        -- 创建巨星任务和出库搬运作业
        nRet, start_loc = wms_wh.GetLocInfo( loc_code )
        if ( nRet ~= 0 ) then 
            wms.wms_AbortCntrLockTrans( trans_id )
            lua.Error( strLuaDEID, debug.getinfo(1), "获取货位'"..loc_code.."'信息失败!"..start_loc )
        end 
 
        -- 创建巨星任务
        jx_task = m3.AllocObject(strLuaDEID, "JX_Task")
 
        jx_task.start_wh_code = start_loc.wh_code
        jx_task.start_area_code = storage_arae
        jx_task.start_loc_code = start_loc.code
        jx_task.station = station
        jx_task.end_wh_code = end_loc.wh_code    
        jx_task.end_area_code = end_loc.area_code    
        jx_task.end_loc_code = end_loc.code    
        jx_task.cntr_code = cntr_code
        jx_task.source_sys = "巨星"
        jx_task.priority = 1  
        jx_task.task_type = "巨星空料箱出库"      
        jx_task.create_method = "HH-WMS" 
 
        nRet, jx_task = m3.CreateDataObj(strLuaDEID, jx_task)
        if (nRet ~= 0) then
            wms.wms_AbortCntrLockTrans( trans_id )
            lua.Error(strLuaDEID, debug.getinfo(1), "创建任务池失败!" .. jx_task)
        end
 
        operation = m3.AllocObject(strLuaDEID,"Operation")
        operation.bs_state = 8
        operation.start_wh_code = start_loc.wh_code
        operation.start_area_code = start_loc.area_code
        operation.start_loc_code = start_loc.code
    
        operation.end_wh_code = end_loc.wh_code
        operation.end_area_code = end_loc.area_code
        operation.end_loc_code = end_loc.code
        operation.lock_cntr = "N"                                   -- 作业启动时不需要锁容器
        operation.cntr_code = cntr_code
    
        operation.op_type = wms_base.Get_nConst(strLuaDEID, "作业类型-出库")
        operation.op_def_name = "巨星出库"
        operation.bs_type = "JX_Task"
        operation.bs_no = jx_task.sour_no
        operation.source_sys = "巨星"
        
        nRet, operation = m3.CreateDataObj( strLuaDEID, operation )
        if ( nRet ~= 0 ) then 
            wms.wms_AbortCntrLockTrans( trans_id )
            lua.Error( strLuaDEID, debug.getinfo(1), '创建【作业】失败!'..operation ) 
        end  
        
        -- 设置巨星任务状态为执行 N_B_STATE = 1 任务执行
        strUpdateSql = "N_B_STATE = 1, S_OP_CODE = '"..operation.code.."'"
        strCondition = "S_SOURNO = '"..jx_task.sour_no.."'"
        nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "JX_Task", strCondition, strUpdateSql )
        if ( nRet ~= 0 ) then  
            wms.wms_AbortCntrLockTrans( trans_id )
            lua.Error( strLuaDEID, debug.getinfo(1), "更新【巨星任务】信息失败!"..strRetInfo ) 
        end  
    end
    wms.wms_CommitCntrLockTrans( trans_id ) 
 
    local action = {
        {
            action_type = "refresh",
            value = ""
        }
    }
 
    mobox.setInfo( strLuaDEID, "成功创建 "..nCount.." 个巨星空料箱出库!" )    
    nRet, strRetInfo = mobox.setAction(strLuaDEID, lua.table2str( action ))
    if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "setAction错误: "..strRetInfo) end      
 
end