海波 张
2025-05-09 2c28bf13ba0b985f68deb94cd85d78f588eff8e0
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
using HH.WCS.ZhongCeJinTan.api;
using HH.WCS.ZhongCeJinTan.device;
using HH.WCS.ZhongCeJinTan.dispatch;
using HH.WCS.ZhongCeJinTan.process;
using HH.WCS.ZhongCeJinTan.util;
using HH.WCS.ZhongCeJinTan.wms;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Web.Services.Description;
using static HH.WCS.ZhongCeJinTan.api.ApiModel;
using static HH.WCS.ZhongCeJinTan.util.Settings;
 
namespace HH.WCS.ZhongCeJinTan.core
{
    internal class TaskCore
    {
        public static void OperateTaskStatus(AgvTaskState model) {
 
            var wmsTask = TaskHelper.GetTask(model.task_no);
            var db = new SqlHelper<object>().GetInstance();
 
            LogHelper.Info("OperateTaskStatus--任务信息" + JsonConvert.SerializeObject(wmsTask), "API");
            LogHelper.Info("OperateTaskStatus--参数信息" + JsonConvert.SerializeObject(model), "API");
            if (wmsTask != null)
                {
                    if (model.state <= 7)
                    {
                        //有任务号请求
                        switch (model.state)
                        {
                            case 1:
                                TaskHelper.Begin(wmsTask);
                                //胎面交互
                                TaskHelper.TmSafety(wmsTask);
                                break;
                            case 3:
                                TaskHelper.UpdateStatus(wmsTask, "开始取货");
                            break;
                            case 4:
                                TaskHelper.UpdateStatus(wmsTask, "取货完成");
                                LocationHelper.UnLockLoc(wmsTask.S_START_LOC);
                                TaskProcess.OperateStatus(wmsTask, 4);
                            break;
                            case 5:
                                TaskHelper.UpdateStatus(wmsTask, "开始卸货");
                                break;
                            case 6:
                                TaskHelper.UpdateStatus(wmsTask, "卸货完成");
                                LocationHelper.UnLockLoc(wmsTask.S_END_LOC);
                                TaskProcess.OperateStatus(wmsTask, 6);
 
                                //如果是二段任务则下发立库任务
                                var wcsTask = TaskHelper.GetTaskByState("未执行", "wcs", wmsTask.S_OP_CODE,"入库");
                                if (wcsTask!=null)
                                {
                                    LocationHelper.LockLoc(wcsTask.S_START_LOC, "出库锁", 2);
                                    WcsTask.WcsTaskEntity(wcsTask);
                                }                        
                            break;
                            case 2:
                                TaskHelper.End(wmsTask); 
                            break;
                            case 7:
                                TaskHelper.Fail(wmsTask);
                                TaskProcess.OperateStatus(wmsTask, 7);
                                //入库或者回库任务取消删除托盘物料
                                if (wmsTask.S_TYPE.Contains("入库") || wmsTask.S_TYPE.Contains("回库"))
                                {
                                    ContainerHelper.delCntr(wmsTask.S_CNTR_CODE);
                                    ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE);
                                }
                                    //出库取消判断接驳位是否有货,有货需要解绑
                                    if (!WcsTask.WcsCvstate(wmsTask))
                                    {
                                        LogHelper.Info($"Wcs立库接驳位无货,解绑货位:{wmsTask.S_START_LOC}", "立库");
                                        TaskProcess.OperateStatus(wmsTask, 4);
                                        ContainerHelper.delCntr(wmsTask.S_CNTR_CODE);
                                        ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE);
                                    } 
                                break;
 
                        }
                         TaskHelper.AddActionRecord(wmsTask.S_CODE, model.state, model.forklift_no, model.ext_data);
                        //agv执行通知
                        //WcsTask.WcsCallback(wmsTask, model.state, model.forklift_no);
                }
                else
                {
                    //安全请求等
                    TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
                }
            }
        
        }
      
 
 
 
 
 
        /// <summary>
        /// agv任务分发
        /// </summary>
        internal static void Dispatch() {
            //查询任务
            //获取所有未执行的agv任务
            var list = TaskHelper.GetTaskListByState("未执行", "agv");
            if (list.Count > 0) {
                list.ForEach(task => {
                        TaskProcess.SendTask(task);
                });     
            }
        }
 
        /// <summary>
        /// 立库任务分发
        /// </summary>
        internal static void Dispatch1()
        {
            //查询任务
            //获取所有未执行的wcs任务
            var list = TaskHelper.GetWcsTaskListByState("未执行", "wcs","出库");
            if (list.Count > 0)
            {
                list.ForEach(task => {
                    WcsTask.WcsTaskEntity(task);
                });
            }
        }
    }
}