lss
2025-05-30 38eff4fc0100131b180ffa872009b502629743f5
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
using HH.WCS.JingyuNongfu.api;
using HH.WCS.JingyuNongfu.device;
using HH.WCS.JingyuNongfu.dispatch;
using HH.WCS.JingyuNongfu.process;
using HH.WCS.JingyuNongfu.util;
using HH.WCS.JingyuNongfu.wms;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using static HH.WCS.JingyuNongfu.api.ApiModel;
 
namespace HH.WCS.JingyuNongfu.core
{
    internal class TaskCore
    {
        public const string AlterControlSwitch01 = "1";//任务上报MES变更开发 1-开启 0-关闭
        public static void OperateTaskStatus(AgvTaskState model)
        {
 
            if (string.IsNullOrEmpty(model.No))
            {
                //无任务号请求(交管)
                DeviceProcess.Traffic(model.ForkliftNo, model.LockNo, model.State == 1023);
            }
            else
            {
                var wmsTask = TaskHelper.GetTask(model.No);
                if (wmsTask != null)
                {
                    if (model.State <= 7)
                    {
                        var db = new SqlHelper<object>().GetInstance();
                        //有任务号请求
                        switch (model.State)
                        {
                            case 1:
                                if (model.ForkliftNo.Trim() != "0")
                                {
                                    TaskHelper.Begin(wmsTask, model.ForkliftNo);
                                }
                                break;
 
                            case 3:
                                TaskHelper.UpdateStatus(wmsTask, "开始取货");
 
                                break;
                            case 4:
 
                                var info = Settings.deviceInfos.Where(a => a.location.Contains(wmsTask.S_START_LOC)).FirstOrDefault();
                                if (info != null && info.deviceType == 6)
                                {
                                    PlcHelper.SendHex(info.address, "3F00100D0A");
                                    LogHelper.Info($"顶升机安全交互1102成功", "安全请求");
                                }
 
 
                                TaskHelper.UpdateStatus(wmsTask, "取货完成");
                                TaskProcess.OperateStatus(wmsTask, 4, model.No);
                                //取货完成删除富勒托盘表
                                if (wmsTask.S_TYPE.Contains("成品下线"))
                                {
                                    // var order = db.Queryable<WorkOrder1>().Where(a => a.S_WorkNo == wmsTask.S_SRC_NO).First();
                                    if (wmsTask.S_NOTE.Trim() == "是")
                                    {
                                        if (ContainerHelper.delFlCntr(wmsTask.S_CNTRS.Split(',').ToList()))
                                        {
                                            LogHelper.Info($"任务{wmsTask.S_TASK_NO}富勒托盘数据已删除", "ThirdSystemLog");
                                        }
                                    }
                                }
 
                                break;
                            case 5:
                                TaskHelper.UpdateStatus(wmsTask, "开始卸货");
 
                                #region 成品开始卸货算卸货完成,提前下达任务
                                //成品下线开始卸货提前把货放终点
                                if (wmsTask.S_TYPE.Contains("成品下线"))
                                {
                                    //成品下线如果处理过5 后续发5不做卸货处理
                                    if (!TaskHelper.CheckActionRecordExist(wmsTask.S_TASK_NO, "5"))
                                    {
                                        TaskProcess.OperateStatus(wmsTask, 6, model.No);
                                    }
                                }
                                #endregion
 
                                break;
                            case 6:
                                TaskHelper.UpdateStatus(wmsTask, "卸货完成");
                                //非成品下线6把货位放到终点
                                if (!wmsTask.S_TYPE.Contains("成品下线"))
                                {
                                    TaskProcess.OperateStatus(wmsTask, 6, model.No);
                                }
 
                                if (wmsTask.S_TYPE.Contains("注塑"))
                                {
                                    DeviceProcess.XieliaoPpzsj(wmsTask);
                                }
                                //else if (wmsTask.S_TYPE.Contains("翻斗机即产满筐上线(瓶胚)") || wmsTask.S_TYPE.Contains("翻斗机即产空筐下线(瓶胚)") || wmsTask.S_TYPE.Contains("翻斗机库存满筐上线(瓶胚)") || wmsTask.S_TYPE.Contains("翻斗机库存空筐下线(瓶胚)"))
                                //{
                                //    DeviceProcess.XieliaoFdj(wmsTask);
                                //}
                                //翻斗机上满卸货完成发送复位信号
                                else if (wmsTask.S_TYPE.Contains("翻斗机"))
                                {
                                    DeviceProcess.XieliaoFdj(wmsTask);
                                }
                                break;
 
                            case 2:
                                TaskHelper.End(wmsTask);
                                //if (wmsTask.S_TYPE.Contains("瓶盖"))
                                //{
                                //    DeviceProcess.XieliaoFdj(wmsTask);
                                //}
                                #region 订单完成判断有没有收到4和6 没有程序处理4和6
                                if (!TaskHelper.CheckActionRecordExist(wmsTask.S_TASK_NO, "4"))
                                {
                                    TaskProcess.OperateStatus(wmsTask, 4, model.No);
                                }
                                //成品下线判断5有没有发,其他的判单4有没有发
                                if (wmsTask.S_TYPE.Contains("成品下线"))
                                {
                                    if (!TaskHelper.CheckActionRecordExist(wmsTask.S_TASK_NO, "5"))
                                    {
                                        TaskProcess.OperateStatus(wmsTask, 6, model.No);
                                    }
                                }
                                else
                                {
                                    if (!TaskHelper.CheckActionRecordExist(wmsTask.S_TASK_NO, "6"))
                                    {
                                        TaskProcess.OperateStatus(wmsTask, 6, model.No);
                                    }
                                }
                                #endregion
 
                                #region 富勒上报判定
                                if (wmsTask.S_TYPE.Contains("成品下线"))
                                {
                                    //var order = db.Queryable<WorkOrder1>().Where(a => a.S_WorkNo == wmsTask.S_SRC_NO).First();
                                    //  LogHelper.Info("成品工单信息" + JsonConvert.SerializeObject(order), "ThirdSystemLog");
                                    if (wmsTask.S_NOTE.Trim() == "是")
                                    {
                                        LogHelper.Info($"有码模式进入任务完成状态回报,任务{wmsTask.S_TASK_NO}", "ThirdSystemLog");
                                        TaskProcess.ThirdReportStatus(wmsTask);
                                    }
 
                                }
                                if (wmsTask.S_TYPE.Contains("移库") && !wmsTask.S_CNTRS.Contains("TP"))
                                {
                                    LogHelper.Info($"有码模式进入任务完成状态回报,任务{wmsTask.S_TASK_NO}", "ThirdSystemLog");
                                    TaskProcess.ThirdReportStatus(wmsTask);
                                }
                                #endregion
 
                                break;
                            case 7:
                            case -1:
                                TaskProcess.OperateStatus(wmsTask, 7, model.No);
                                break;
 
 
                        }
                        TaskHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                        //调用第三方接口(如果有)TaskProcess.ReportStatus
                        if (AlterControlSwitch01 == "1")
                        {
                            //任务状态-1,上报7
                            if (model.State == -1)
                            {
                                model.State = 7;
                            }
 
                            TaskProcess.GeneralInterFaceFunc(wmsTask, model.State.ToString());
                        }
                    }
 
 
                    else
                    {
                        //安全请求等
                        TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
                    }
                }
            }
        }
 
        /// <summary>
        /// 任务分发
        /// </summary>
        internal static void Dispatch()
        {
            //查询任务
            //获取所有未执行的任务
            var list = TaskHelper.GetTaskListByState("未执行");
            if (list.Count > 0)
            {
                list.ForEach(task =>
                {
 
                    //if (!TaskProcess.Intercept(task))
                    //{
                    //使用自定义任务推送
                    TaskProcess.SendTask(task);
                    //}
 
                });
 
 
            }
        }
    }
}