dengjunjie
20 小时以前 6d9829c889a826d39cbc911ef5d01825edd1bffc
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
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_DTO.WMSInfo;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
 
namespace WIDESEAWCS_TaskInfoService
{
    public partial class TaskService
    {
 
        public WebResponseContent ToWMSCompletedTask(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task);
                HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
                return content.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// 堆垛机任务完成
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompleted(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
 
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                {
                    List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                    if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
 
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = routers.FirstOrDefault().ChildPosi;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
 
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    //todo 同步到WMS
                    WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task);
                    HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
                    //暂不考虑多个出库口
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                {
                    //todo 
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = string.Empty;
                    task.TaskState = nextStatus;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task);
                    if (task.TargetIsPickPlace)
                    {
                        task.TaskState = (int)TaskInStatusEnum.InFinish;
                        AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
                    }
                    else
                        BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
 
                    #region 向WMS反馈堆垛机任务完成
                    HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
                    #endregion
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)//移库
                {
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = string.Empty;
                    task.TaskState = nextStatus;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task);
                    if (task.TargetIsPickPlace)
                    {
                        task.TaskState = (int)TaskRelocationStatusEnum.RelocationFinish;
                        WMStask.TaskState = task.TaskState;
                        AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete);
                    }
                    else
                        BaseDal.UpdateData(task);
 
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移库完成");
                    //todo 调用WMS移库完成
                    HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)//移车/移车充电
                {
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
 
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = string.Empty;
                    if (task.TaskState == (int)TaskCarStatusEnum.SC_CarExecuting)
                    {
                        int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskCarStatusEnum>();
                        task.TaskState = nextStatus;
                        BaseDal.UpdateData(task);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移车完成");
                    }
                    else if (task.TaskState == (int)CarChargingTaskEnum.CarChargingSC_CarExecuting)
                    {
                        int nextStatus = task.TaskState.GetNextNotCompletedStatus<CarChargingTaskEnum>();
                        task.TaskState = nextStatus;
                        BaseDal.UpdateData(task);
                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机移车完成");
                    }
                }
                else
                {
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                }
 
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
            }
            return content;
        }
    }
}