Admin
6 天以前 bd6818fc9d40f343547bafca0743658f3c0379dc
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA.Common;
using WIDESEA.Core.Services;
using WIDESEA.Core.Utilities;
using WIDESEA.Entity.DomainModels;
using WIDESEA.Services.Repositories;
 
namespace WIDESEA.Services.IServices
{
    public partial class ToWCSService
    {
 
        /// <summary>
        /// 接收WMS上报的任务状态,修改对应的任务状态,以保持wms和wcs任务状态同步
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent UpdateWmsTaskState(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string barcode = saveModel.MainData["barcode"].ToString();
                string taskState = saveModel.MainData["taskState"].ToString();
 
                Dt_taskinfo taskinfo = Dt_taskinfoRepository.Instance.FindFirst(x => x.task_barcode == barcode);
                if (taskinfo == null)
                    throw new Exception($"在WMS中没有找到条码值:【{barcode}】对应的任务");
 
                //穿梭车取货完成
                if (taskState.Equals("TaskState_RGV_PickedFinished"))
                {
                    taskinfo.task_bak_2 = "2";
                    Dt_taskinfoRepository.Instance.Update(taskinfo, x => x.task_bak_2, true);
                    return content.OK("接收WCS上报状态成功.");
                }
 
 
                if (taskinfo.task_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString() &&
                    taskState == TaskState.TaskState_RGV_Finished.ToString())
                {
                    string rgvId = saveModel.MainData["rgvId"]?.ToString();
                    taskinfo.task_rgvId = rgvId;
                }
                if (taskinfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() &&
                    taskState == TaskState.TaskState_RGV_Finished.ToString())
                {
                    string rgvId = saveModel.MainData["rgvId"]?.ToString();
                    taskinfo.task_rgvId = rgvId;
                }
 
                taskinfo.task_dispatchertime = DateTime.Now;
                taskinfo.task_state = taskState;
                Dt_taskinfoRepository.Instance.Update(taskinfo, true);
 
                //空托入库
                if (taskinfo.task_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString() &&
                   taskinfo.task_state == TaskState.TaskState_ConveyorLineExecuting.ToString())
                {
                    Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
                    if (locationinfo != null)
                    {
                        locationinfo.location_state = LocationState.LocationState_Empty_Inbound_Executing.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, true);
                    }
                }
                //实托入库
                else if (taskinfo.task_type == TaskType.TaskType_Box_Pallet_Inbound.ToString() &&
                         taskinfo.task_state == TaskState.TaskState_ConveyorLineExecuting.ToString())
                {
                    Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
                    if (locationinfo != null)
                    {
                        locationinfo.location_state = LocationState.LocationState_Box_Inbound_Executing.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, true);
                    }
                }
                //测量出库、测量回库
                else if ((taskinfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() ||
                         taskinfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()) &&
                         (taskState.Contains("_Measure") || taskState == TaskState.TaskState_RGV_Received.ToString()))
                {
                    //说明要准备回库了,将任务类型改为测量回库
                    if (taskinfo.task_state == TaskState.TaskState_Measure_Back_Line_Wait_Executing.ToString())
                    {
                        taskinfo.task_type = TaskType.TaskType_Box_Pallet_Measure_Back.ToString();
                        Dt_taskinfoRepository.Instance.Update(taskinfo, true);
                    }
 
                    Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
                    if (locationinfo != null)
                    {
                        locationinfo.location_state = LocationState.LocationState_Measureing.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, true);
                    }
                }
                //空托出库
                else if (taskinfo.task_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
                {
                    if (taskState == TaskState.TaskState_RGV_Received.ToString())
                    {
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
                        locationinfo.location_state = LocationState.LocationState_Empty_OutBound_Executing.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, true);
                    }
                    else if (taskState == TaskState.TaskState_RGV_Finished.ToString())
                    {
                        //恢复空货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
                        locationinfo.location_state = LocationState.LocationState_Empty.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, true);
                    }
                }
                else if (taskinfo.task_type == TaskType.TaskType_Box_Pallet_Outbound.ToString())
                {
                    if (taskState == TaskState.TaskState_RGV_Received.ToString())
                    {
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
                        locationinfo.location_state = LocationState.LocationState_Box_OutBound_Executing.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, true);
                    }
                    else if (taskState == TaskState.TaskState_RGV_Finished.ToString())
                    {
                        //恢复空货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
                        locationinfo.location_state = LocationState.LocationState_Empty.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, true);
                    }
                }
                else if (taskinfo.task_type == TaskType.TaskType_MoveOutbound.ToString())
                {
 
                }
                content.OK("接收WCS上报状态成功.");
            }
            catch (Exception ex)
            {
                content.Error("接收WCS上报状态失败:" + ex.Message);
            }
            //Services.CommonFunction.AddInterfaceLogAction(saveModel, content, "UpdateWmsTaskState");
            return content;
        }
 
    }
}