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
--[[
    编码: WMS-38-06
    名称: 任务-行按钮-设置任务完成
    作者:HAN  
    日期:2025-1-29
 
 
    级别:固定 (说明本段代码在项目中不太会变化)
    
    函数: SetTaskFinish
 
    功能:
        强制设置任务完成
 
    更改记录:
 
--]]
wms_task = require( "wms_task" )
external_api = require ( "prj_api")
 
function SetTaskFinish ( strLuaDEID ) 
    local   nRet, strRetInfo
 
    -- step1  获取当前点中的任务
    nRet, objs = m3.GetSysDataJson( strLuaDEID )
    if ( nRet ~=0 ) then 
        lua.Stop( strLuaDEID, objs ) 
        return
    end  
    local nCount = #objs
    if (nCount == 0) then  return end
 
    local task = m3.KeyValueAttrsToObjAttr( objs[1].attrs )
 
    -- 检查一下脚本里用到的task属性是否在datajson中,没有要提示一下
    if ( task.S_CODE == nil ) then
        lua.Stop( strLuaDEID, "在任务显示Grid中必须要有任务编码属性 S_CODE!" )
        return
    end
    if ( task.S_CODE == '' ) then
        lua.Stop( strLuaDEID, "任务编码不能为空!" )
        return
    end
 
    -- 检查一下任务的起始货位是否和容器绑定,如果绑定要先解绑
    -- 获取任务中的容器编码和起始货位编码
    -- V2.0
    local strCondition = "S_CODE = '"..task.S_CODE.."'"
    local id
    nRet, id, strRetInfo = mobox.getDataObjAttrByKeyAttr( strLuaDEID, "Task", strCondition, "S_CNTR_CODE","S_START_LOC","S_OP_CODE" )
    if ( nRet ~= 0 )  then 
        lua.Stop( strLuaDEID, "获取【任务】属性失败! "..id ) 
        return
    end 
    if ( strRetInfo == '' ) then 
        lua.Stop( strLuaDEID, "任务编码'"..task.S_CODE.."'不存在!" ) 
        return
    end
    local attrs = json.decode( strRetInfo ) 
    local cntr_code = attrs[1].value
    local start_loc_code = attrs[2].value
    local op_code = lua.Get_StrAttrValue( attrs[3].value )
 
    -- 这里需要调用外部接口告诉 WCS 任务取消
    nRet, strRetInfo = external_api.Task_Cancel( strLuaDEID, cntr_code, task.S_CODE ) 
    if ( nRet ~= 0 ) then
        lua.Stop( strLuaDEID, "料箱号 = "..cntr_code.." 的作业取消失败, WCS无法取消任务!"..strRetInfo ) 
        return
    end
    
    -- 获取容器绑定的货位
    local loc_code = wms_wh.GetLocCodeByCNTR( strLuaDEID, cntr_code )
    if ( loc_code ~= "") then
        if ( start_loc_code ~= loc_code ) then
            lua.Stop( strLuaDEID, "容器'"..cntr_code.."'绑定的货位和任务起始货位不一致!" ) 
            return
        end
        local loc
        nRet, loc = wms_wh.GetLocInfo( loc_code)
        if ( nRet ~= 0 )  then 
            lua.Stop( strLuaDEID, "WMS_GetLocInfo失败! "..loc )
            return
        end
    
        nRet, strRetInfo = wms_wh.Loc_Container_Unbinding( strLuaDEID, loc.code, cntr_code, "绑定解绑方法-人工",  "强制完成" )
        if ( nRet ~= 0 ) then 
            lua.Stop( strLuaDEID, '货位容器绑定失败!'..strRetInfo ) 
            return
        end          
    end
 
    -- 强制任务完成
    nRet, strRetInfo = wms.wms_TaskFinish( strLuaDEID, task.S_CODE )
    if ( nRet ~= 0 ) then 
        lua.Stop( strLuaDEID, "任务编码='"..task.S_CODE.."'的任务设置完成失败!"..strRetInfo ) 
        return
    end         
 
    -- 增加 任务动作 对象
    local task_action = m3.AllocObject(strLuaDEID,"Task_Action")
 
    task_action.task_code = task.S_CODE
    task_action.action_code = 10
    task_action.action = "强制完成"
    task_action.eq_code = "system"
    task_action.eq_type_name = '系统强制完成'
    nRet, strRetInfo = m3.CreateDataObj( strLuaDEID, task_action )
    if ( nRet ~= 0 ) then 
        lua.Stop( strLuaDEID, '创建【任务动作】对象失败!'..strRetInfo ) 
        return
    end 
 
    -- 设置作业 N_TASK_STATE = 2 说明这个作业不能取消
    if ( op_code ~= '') then
        strCondition = "S_CODE = '"..op_code.."'"
        mobox.addProcSQL3( "Operation", strCondition, "N_TASK_STATE = 2")
    end
 
    local strAction = '[{"action_type":"refresh_cur_row","value":""}]'
    nRet, strRetInfo = mobox.setAction(strLuaDEID, strAction)
    if ( nRet ~= 0 ) then 
        lua.Stop( strLuaDEID, "setAction错误: "..strRetInfo) 
        return
    end    
end