lzh
2025-06-19 3a6436e0c88042c6ce8dca2fe8adb0109f0ad9e4
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
--[[
 编码: GT-100-23
 名称: NotifyDeviceSignal
 作者: LZH
 入口函数:NotifyDeviceSignal
 功能说明: 004-设备信号反馈,当WCS异常时调用,下发一段agv任务拉到异常区
 变更历史:
 --]]
wms_task = require("wms_task")
require("WMS-Equipment")
wms_cntr = require("wms_container")
wms_wh = require("wms_wh")
require("GT-Base")
require("GT_InAndOutboundPolicies")
function notifyDeviceSignal(strLuaDEID)
    local nRet, in_date, strRetInfo
    -- step1 获取接口数据
    nRet, in_date = m3.GetSysDataJson(strLuaDEID)
    if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), "无法获取数据包!" .. in_date) end
    lua.Debug(strLuaDEID, debug.getinfo(1), '004-设备信号反馈参数:', in_date)
 
    -- step2 判断 必填项 是否都有值?没值报错返回
    local loc_code = in_date.loc         -- 货位
    local cntr_code = in_date.cntr_code  -- 容器
    -- local extData = in_date.extData
    -- if (type(extData) ~= 'table') then
    --     lua.Error(strLuaDEID, debug.getinfo(1), "扩展参数不是列表!")
    -- end
    local signalType = lua.StrToNumber(in_date.signalType)  -- 1:下线请求,2:叫料请求 3:读码请求,4:下线记录,5:异常申请(固定传3)
    if (loc_code == nil or loc_code == '') then lua.Error(strLuaDEID, debug.getinfo(1), "站点不能为空!") end
    if (cntr_code == nil or cntr_code == '') then lua.Error(strLuaDEID, debug.getinfo(1), "FRID不能为空!") end
    if (signalType == nil) then lua.Error(strLuaDEID, debug.getinfo(1), "类型不能为空!") end
    local flag = lua.StrToNumber(in_date.extData)  -- 扩展参数  0正常 1异常
    if (flag == nil) then lua.Error(strLuaDEID, debug.getinfo(1), "扩展参数不能为空!") end
 
    if (signalType ~= 3) then
        lua.Error(strLuaDEID, debug.getinfo(1), signalType .. "未启用的请求类型!")
    end
    lua.Debug(strLuaDEID, debug.getinfo(1), '111:', 111)
 
    -- 判断WCS反馈正常还是异常
    if (tonumber(flag) == 1) then
        lua.Debug(strLuaDEID, debug.getinfo(1), '222:', 222)
        -- 任务异常则下发agv任务拉到异常区
        local strCode
        local strHeader = 'TA' .. os.date("%y%m%d") .. '-'
        nRet, strCode = mobox.getSerialNumber("任务", strHeader, 5)
        if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), '申请【任务】编码失败!' .. strCode) end
        -- 获取站台起点
        loc_code = wms_base.Get_sConst(strLuaDEID, loc_code)
        local start_loc
        nRet, start_loc = wms_wh.GetLocInfo(loc_code)
        if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), 'WMS_GetLocInfo失败!' .. start_loc) end
 
        -- 根据起点站台获取对应的异常库区
        -- 异常库区 TWO-BGYCKQ,TWO-QGYCKQ,THREE-BGYCKQ,THREE-QGYCKQ
        local area_info
        local strCondition = "S_CODE = '" .. start_loc.area_code .. "'"
        nRet, area_info = m3.GetDataObjByCondition(strLuaDEID, "Area", strCondition)
        if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), "获取库区信息失败!" .. area_info) end
        lua.Debug(strLuaDEID, debug.getinfo(1), 'area_info:', area_info)
 
        local yc_area = ''
        if (tonumber(area_info.floor) == 2) then
            lua.Debug(strLuaDEID, debug.getinfo(1), "333!", 3333)
            if (area_info.note == '半钢') then
                yc_area = "TWO-BGYCKQ"
            elseif (area_info.note == '全钢') then
                yc_area = "TWO-QGYCKQ"
            else
                lua.Error(strLuaDEID, debug.getinfo(1), "未定义该站点的库区描述是属于半钢还是全钢!")
            end
        elseif (tonumber(area_info.floor) == 3) then
            if (area_info.note == '半钢') then
                yc_area = "THREE-BGYCKQ"
            elseif (area_info.note == '全钢') then
                yc_area = "THREE-QGYCKQ"
            else
                lua.Error(strLuaDEID, debug.getinfo(1), "未定义该站点的库区描述是属于半钢还是全钢!")
            end
        else
            lua.Error(strLuaDEID, debug.getinfo(1), "该楼层未定义异常库区!")
        end
        lua.Debug(strLuaDEID, debug.getinfo(1), 'yc_area:', yc_area)
 
        -- 获取异常区终点
        local end_loc
        nRet, end_loc = wms_base.GetAreaAvaliableLoc(strLuaDEID, yc_area)
        if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), "wms_base.GetAreaAvaliableLoc 失败! " .. end_loc) end
        nRet, end_loc = wms_wh.GetLocInfo(end_loc)
        if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), 'WMS_GetLocInfo失败!' .. end_loc) end
        lua.Debug(strLuaDEID, debug.getinfo(1), 'end_loc:', end_loc)
        -- 创建作业
        local operation           = m3.AllocObject(strLuaDEID, "Operation")
        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.op_type         = wms_base.Get_nConst(strLuaDEID, "作业类型-入库")
        local ext_table           = {
            task_no = strCode
        }
        operation.op_def_name     = "AGV库内搬运"
        operation.cntr_code       = cntr_code
        operation.ext_data        = lua.table2str(ext_table)
 
        nRet, operation           = m3.CreateDataObj(strLuaDEID, operation)
        if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), '创建【作业】失败!' .. operation) end
        lua.Debug(strLuaDEID, debug.getinfo(1), "作业创建后信息", operation)
    end
end