杨前锦
2025-07-01 a93b0e99036c24b9bd58c79bf5e7364b1ba28bae
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
using HH.WCS.Mobox3.Template.dispatch;
using HH.WCS.Mobox3.Template.process;
using HH.WCS.Mobox3.Template.wms;
using System;
using System.Collections.Generic;
using System.Linq;
using static HH.WCS.Mobox3.Template.api.ApiModel;
 
namespace HH.WCS.Mobox3.Template.core {
    internal class WCSCore {
        public static void OperateAgvTaskStatus(AgvTaskState model) {
            if (string.IsNullOrEmpty(model.No)) {
                //无任务号请求(交管)
                //DeviceProcess.Traffic(model.ForkliftNo, model.LockNo, model.State==1023);
            }
            else {
                var TN_Task = WCSHelper.GetTask(model.No);
                if (TN_Task != null) {
                    if (model.State <= 7) {
 
                        //有任务号请求
                        switch (model.State) {
                            case 1:
                                WCSHelper.Begin(TN_Task);
                                break;
                            #region MyRegion
                            case 3:
                                WCSHelper.UpdateStatus(TN_Task, "开始取货");
                                break;
                            case 4:
                                WCSHelper.UpdateStatus(TN_Task, "取货完成");
                                TaskProcess.OperateStatus(TN_Task, 4);
                                break;
                            case 5:
                                WCSHelper.UpdateStatus(TN_Task, "开始卸货");
                                break;
                            case 6:
                                WCSHelper.UpdateStatus(TN_Task, "卸货完成");
                                TaskProcess.OperateStatus(TN_Task, 6);
                                break;
                            #endregion
                            case 2:
                                WCSHelper.End(TN_Task);
                                break;
                            case 7:
                                TaskProcess.OperateStatus(TN_Task, 7);
                                WCSHelper.Fail(TN_Task);
                                break;
                        }
                        WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                        //调用第三方接口(如果有)TaskProcess.ReportStatus
                    }
                    else {
 
                        //安全请求等
                        TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
                    }
                }
 
 
 
            }
        }
 
        /// <summary>
        /// 任务分发,根据调度类型发给不同的调度系统
        /// </summary>
        internal static void Dispatch() {
            //查询任务
            //获取所有等待的任务
            var list = WCSHelper.GetWaitingTaskList();
            if (list.Count > 0) {
                list.ForEach(task => {
 
                    if (!TaskProcess.Intercept(task)) {
                        //使用自定义任务推送
                        TaskProcess.SendTask(task);
                    }
 
                });
 
 
            }
        }
 
        /// <summary>
        /// 杭奥堆垛机信号反馈
        /// </summary>
        /// <param name="model"></param>
        internal static void OperateHATaskStatus(HanAo.TaskStateInfoModel model) {
            var wcsTask = WCSHelper.GetTask(model.requestPk);
            if (wcsTask != null) {
                if (model.code == "0") {
                    //
                    if (wcsTask.S_TYPE == "堆垛机入库") {
                        //终点托盘绑定
                        if (LocationHelper.BindingLoc(wcsTask.S_END_LOC, new List<string> { wcsTask.S_CNTR_CODE })) {
                            //修改托盘状态为可用,增加库存量表,后面分拣出可以计算到
                            ContainerHelper.Enable(wcsTask.S_CNTR_CODE, wcsTask.S_END_LOC);
 
                        }
                    }
                    else if (wcsTask.S_TYPE == "堆垛机出库") {
                        //起点托盘解绑
                        LocationHelper.UnBindingLoc(wcsTask.S_START_LOC, new List<string> { wcsTask.S_CNTR_CODE });
                    }
                    //标记任务完成
                    //标记作业完成
                    wcsTask.N_B_STATE = 3;
                    WCSHelper.UpdateStatus(wcsTask);
                    var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
                    if (wmsTask != null) {
                        wmsTask.N_B_STATE = 2;
                        WMSHelper.UpdateTaskState(wmsTask);
                    }
                }
            }
        }
    }
}