Admin
18 小时以前 1cd9280bbecf557f8978ad3839f14827ff9f4d34
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
using System;
using System.Collections.Generic;
using System.Text;
using WIDESEA_Common;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Services.IRepositories;
using WIDESEA_Services.Repositories;
 
namespace WIDESEA_Services.Services
{
    public partial class CommonFunction
    {
 
        /// <summary>
        /// 完成RGV任务
        /// </summary>
        /// <param name="taskRGVinfo"></param>
        /// <returns></returns>
        public static WebResponseContent FinishedRgvTask(Dt_TaskRGVinfo taskRGVinfo, string rgvId = null)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                IDt_TaskRGVinfoRepository taskRGVinfoRepository = Dt_TaskRGVinfoRepository.Instance;
                IDt_TaskRGVinfo_HtyRepository taskRGVinfo_HtyRepository = Dt_TaskRGVinfo_HtyRepository.Instance;
                IDt_TaskWCSinfoRepository taskWCSinfoRepository = Dt_TaskWCSinfoRepository.Instance;
                IDt_TaskWCSinfo_HtyRepository taskWCSinfo_HtyRepository = Dt_TaskWCSinfo_HtyRepository.Instance;
 
                //根据RGV任务,找到对应的WCS总任务
                Dt_TaskWCSinfo taskWCSinfo = Dt_TaskWCSinfoRepository.Instance.FindFirst(x => x.wcstask_taskNumber == taskRGVinfo.rgvtask_wcsTaskNumber);
                if (taskWCSinfo == null)
                    return content.Error($"手动完成穿梭车任务出错,没有找到任务号:【{taskRGVinfo.rgvtask_taskId}】对应的WCS总任务,WCS任务号:【{taskRGVinfo.rgvtask_wcsTaskNumber}】");
 
                content = Dt_TaskWCSinfoRepository.Instance.DbContextBeginTransaction(() =>
                {
                    taskWCSinfo.wcstask_backUp_2 = rgvId;
                    taskRGVinfo.rgvtask_backup_1 = rgvId;
                    //区分任务类型,如果是入库类型的任务,RGV完成,则总任务完成,出库型任务,RGV完成,则只是部分完成
                    //***空托入库**********轴承组盘入库***
                    if (taskWCSinfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString() ||
                        taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Inbound.ToString() ||
                           taskWCSinfo.wcstask_type == TaskType.TaskType_CheckBackIn.ToString() ||
                            taskWCSinfo.wcstask_type == TaskType.TaskType_ErrorCheckBackIn.ToString() ||
                        taskRGVinfo.rgvtask_taskType == RGVTaskType.RgvTaskType_Move.ToString() ||
                         (taskWCSinfo.wcstask_type == RGVTaskType.RgvTaskType_Inbound.ToString() &&
                          taskWCSinfo.wcstask_type == TaskType.TaskType_MoveOutbound.ToString())
                        )
                    {
                        //上报WMS任务完成,对于入库来说,穿梭车的任务完成,即是整个任务的生命周期结束
                        content = WMSApi.TellWmsTaskFinished(taskRGVinfo.rgvtask_barCode, rgvId);
                        if (!content.Status)
                            throw new Exception($"【入库任务】上报WMS任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】");
                        taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString();
                        taskWCSinfo.wcstask_state = TaskState.TaskState_Finished.ToString();
                        //完成rgv、wcs任务、移动任务到历史
                        CommonFunction.AddWcsTaskToHistory(taskWCSinfo, taskWCSinfoRepository, taskWCSinfo_HtyRepository);
                        CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository);
                    }
                    //***测量出库*******,不要删除库存,占着坑,等待测量完回库
                    else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
                    {
                        //上报WMS最新任务状态,此处状态是穿梭车的任务完成
                        content = WMSApi.PostTaskStateToWMS(taskRGVinfo.rgvtask_barCode, TaskState.TaskState_RGV_Finished.ToString(), rgvId);
                        if (!content.Status)
                            throw new Exception($"【测量出库】上报WMS任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】");
 
                        //更新rgv、wcs任务状态
                        taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString();
                        taskWCSinfo.wcstask_state = TaskState.TaskState_RGV_Finished.ToString();
                        //完成rgv、移动任务到历史
                        CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository);
                        Dt_TaskWCSinfoRepository.Instance.Update(taskWCSinfo, true);
                    }
                    //***测量回库*******
                    else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString())
                    {
                        //上报WMS任务完成,对于测量回库来说,穿梭车的任务完成,即是整个任务的生命周期结束
                        //由于测量出库的没有删除库存,所有只要放回去即可,要不生成库存,在WMS做逻辑
                        content = WMSApi.TellWmsTaskFinished(taskRGVinfo.rgvtask_barCode, rgvId);
                        if (!content.Status)
                            throw new Exception($"【测量回库】上报WMS任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】");
 
                        //完成rgv、wcs任务、移动任务到历史
                        CommonFunction.AddWcsTaskToHistory(taskWCSinfo, taskWCSinfoRepository, taskWCSinfo_HtyRepository);
                        CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository);
                    }
                    //***空托盘/轴承出库*****
                    else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString()
                    || taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString() ||
                    taskWCSinfo.wcstask_type == TaskType.TaskType_CheckOutbound.ToString())//tx 0808 
                    {
                        string state = string.Empty;
                        if (taskRGVinfo.rgvtask_areaCode == "OutboundArea")
                        {
                            if (taskWCSinfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
                                state = TaskState.TaskState_Empty_Out_Line_Executing.ToString();
                            else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString())
                                //state = TaskState.TaskState_Box_Out_Line_Executing.ToString();
                                state = TaskState.TaskState_Box_Out_RGV_Finished.ToString();    //(2525-12-12修改)修改成提升机运行中
                        }
                        else
                            state = TaskState.TaskState_RGV_Finished.ToString();
 
                        //上报WMS最新任务状态,此处状态是穿梭车的任务完成
                        content = WMSApi.PostTaskStateToWMS(taskRGVinfo.rgvtask_barCode, state, rgvId);
                        if (!content.Status)
                            throw new Exception($"【空/指定托盘出库】上报WMS【RGV】任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】");
 
                        //更新rgv、wcs任务状态
                        taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString();
                        taskWCSinfo.wcstask_state = state;
 
                        //完成rgv、移动任务到历史
                        CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository);
                        Dt_TaskWCSinfoRepository.Instance.Update(taskWCSinfo, true);
                    }
                    //移库出库任务完成
                    else if (taskRGVinfo.rgvtask_taskType == RGVTaskType.RgvTaskType_Outbound.ToString() &&
                         taskWCSinfo.wcstask_type == TaskType.TaskType_MoveOutbound.ToString())
                    {
                        taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString();
                        taskWCSinfo.wcstask_state = TaskState.TaskState_RGV_Finished.ToString();
                        //完成rgv、移动任务到历史
                        CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository);
                        Dt_TaskWCSinfoRepository.Instance.Update(taskWCSinfo, true);
                    }
 
                    return content.OK();
                });
            }
            catch (Exception ex)
            {
                content.Error(ex.Message + ex.StackTrace);
            }
 
            return content;
        }
 
    }
}