Admin
2025-12-02 9e42f0dafa019f5ecf6b0ff425ecb966b002171e
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
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
using System;
using System.Collections.Generic;
using System.Text;
using WIDESEA.Common;
using WIDESEA.Core.Utilities;
using WIDESEA.Entity.DomainModels;
using WIDESEA.Services.Repositories;
 
namespace WIDESEA.Services.Services
{
    public partial class CommonFunction
    {
        /// <summary>
        /// 完成WMS任务
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public static WebResponseContent TaskFinishedAction(SaveModel saveModel)
        {
 
            WebResponseContent content = new WebResponseContent();
            string barcode = string.Empty;
            try
            {
                barcode = saveModel.MainData["barcode"].ToString();
                Dt_taskinfo taskInfo = Dt_taskinfoRepository.Instance.FindFirst(x => x.task_barcode == barcode);
                if (taskInfo == null)
                    return content.OK($"WMS中没有找到托盘号:【{barcode}】对应的任务");
 
                //区分任务类型
                //空托盘入库
                if (taskInfo.task_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString())
                {
                    VV_ContainerInfo_EmptyPallet emptyCon = VV_ContainerInfo_EmptyPalletRepository.Instance.FindFirst(x => x.containerhead_barcode == barcode);
                    string rgvId = saveModel.MainData["rgvId"]?.ToString();
                    if (emptyCon != null)
                        throw new Exception($"库存中存在托盘号:【{barcode}】的【空托】库存,请人工核实,所在货位:{emptyCon.location_id}");
 
                    content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
                    {
                        //删除任务、添加历史
                        taskInfo.task_rgvId = rgvId;
                        taskInfo.task_state = TaskState.TaskState_Finished.ToString();
                        CommonFunction.AddWMSTaskToHistory(taskInfo);
 
                        //添加空托盘库存数据
                        CommonFunction.AddEmptyPalletContainer(taskInfo);
 
                        //更改货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
                        CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Stored.ToString());
 
                        return content.OK();
                    });
 
                }
                //空托盘出库
                else if (taskInfo.task_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
                {
                    content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
                    {
 
                        Dt_container_head container_Head = Dt_container_headRepository.Instance.FindFirst(x => x.containerhead_barcode == taskInfo.task_barcode);
                        Dt_container_detail container_Detail = Dt_container_detailRepository.Instance.FindFirst(x => x.containerdtl_headid == container_Head.containerhead_id.ToString());
                        //将库存数据一到到历史表 head、detail
                        CommonFunction.AddContainerHeadToHistory(container_Head, "empty");
                        CommonFunction.AddContainerDetailToHistory(container_Detail);
 
                        //barcodeinfo数据移动到历史
                        Dt_barcodeinfo barcodeinfo = Dt_barcodeinfoRepository.Instance.FindFirst(x => x.barcode_value == taskInfo.task_barcode);
                        CommonFunction.AddBarcodeInfoToHistory(barcodeinfo, taskInfo.task_creator);
 
                        //恢复空货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
                        CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Empty.ToString());
 
                        //删除任务
                        taskInfo.task_state = TaskState.TaskState_Finished.ToString();
                        CommonFunction.AddWMSTaskToHistory(taskInfo);
                        return content.OK();
                    });
 
                }
                //实托入库
                else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Inbound.ToString())
                {
                    VV_ContainerInfo container = VV_ContainerInfoRepository.Instance.FindFirst(x => x.containerhead_barcode == barcode);
                    if (container != null)
                        throw new Exception($"库存中存在托盘号:【{barcode}】的【实托】库存,请人工核实,所在货位:{container.location_id}");
 
                    //string rgvId = saveModel.MainData["rgvId"]?.ToString();
                    content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
                    {
 
                        Dt_boxing_head boxing_Head = Dt_boxing_headRepository.Instance.FindFirst(x => x.boxhead_barcode == taskInfo.task_barcode);
                        Dt_boxing_detail boxing_Detail = Dt_boxing_detailRepository.Instance.FindFirst(x => x.boxdtl_headid == boxing_Head.boxhead_id.ToString());
                        Dt_mes_goods_info mes_Goods_Info = Dt_mes_goods_infoRepository.Instance.FindFirst(x => x.mesInfo_qrCode == taskInfo.task_sn);
                        // taskInfo.task_rgvId = rgvId;
                        taskInfo.task_state = TaskState.TaskState_Finished.ToString();
 
                        //将轴承对应的录入信息移动至历史表
                        CommonFunction.AddMesInfoToHistory(mes_Goods_Info);
 
                        //将轴承对应的录入信息移动至历史表
                        CommonFunction.AddBoxContainer(taskInfo, boxing_Head, boxing_Detail, mes_Goods_Info);
 
                        //将组盘信息移动至历史表
                        CommonFunction.AddBoxingHeadToHistory(boxing_Head, boxing_Detail);
 
                        //更改货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
                        CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Stored.ToString());
 
                        //删除任务、添加历史
                        CommonFunction.AddWMSTaskToHistory(taskInfo);
                        return content.OK();
                    });
                }
                //实托出库
                else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Outbound.ToString())
                {
                    content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
                    {
 
                        Dt_container_head container_Head = Dt_container_headRepository.Instance.FindFirst(x => x.containerhead_barcode == taskInfo.task_barcode);
                        Dt_container_detail container_Detail = Dt_container_detailRepository.Instance.FindFirst(x => x.containerdtl_headid == container_Head.containerhead_id.ToString());
                        //将库存数据一到到历史表 head、detail
 
                        CommonFunction.AddContainerHeadToHistory(container_Head, "box");
                        CommonFunction.AddContainerDetailToHistory(container_Detail);
 
                        //barcodeinfo数据移动到历史
                        Dt_barcodeinfo barcodeinfo = Dt_barcodeinfoRepository.Instance.FindFirst(x => x.barcode_value == taskInfo.task_barcode);
                        CommonFunction.AddBarcodeInfoToHistory(barcodeinfo, taskInfo.task_creator);
 
                        //恢复空货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
                        CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Empty.ToString());
 
                        //删除任务
                        taskInfo.task_state = TaskState.TaskState_Finished.ToString();
                        CommonFunction.AddWMSTaskToHistory(taskInfo);
                        return content.OK();
                    });
 
 
                }
                //测量【出库】任务
                else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
                {
 
                }
                //测量【回库】任务完成
                else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString())
                {
                    VV_ContainerInfo container = VV_ContainerInfoRepository.Instance.FindFirst(x => x.containerhead_barcode == barcode);
                    if (container != null)
                    {
                        //说明没错,本来在库内,就是测量回库
                    }
                    //  string rgvId = null == saveModel.MainData["rgvId"] ? "" : saveModel.MainData["rgvId"].ToString();
                    content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
                    {
                        //Dt_container_head container_Head = Dt_container_headRepository.Instance.FindFirst(x => x.containerhead_barcode == taskInfo.task_barcode);
                        //container_Head.containerhead_createtime = DateTime.Now;
                        //Dt_container_headRepository.Instance.Update(container_Head, true);
                        //更改货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
                        if (container.containerdtl_isError == "1")
                        {
                            CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Error.ToString());
                            Dt_container_detail dt_Container_Detail = Dt_container_detailRepository.Instance.FindFirst(x => x.containerdtl_barcode == barcode);
                            dt_Container_Detail.containerdtl_isError = "0";
                            Dt_container_detailRepository.Instance.Update(dt_Container_Detail,true);
                        }
                        else
                        {
                             CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Stored.ToString());
 
                        }
 
                        //删除任务、添加历史
                        // taskInfo.task_rgvId = rgvId;
                        taskInfo.task_state = TaskState.TaskState_Finished.ToString();
                        CommonFunction.AddWMSTaskToHistory(taskInfo);
 
                        return content.OK();
                    });
                }
                else if (taskInfo.task_type == TaskType.TaskType_MoveOutbound.ToString())
                {
                    content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
                    {
                        //更改货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
                        CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Empty.ToString());
 
                        Dt_locationinfo newLocation = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
                        CommonFunction.ChangeLocationState(newLocation, LocationState.LocationState_Stored.ToString());
 
                        Dt_barcodeinfo barcodeInfo = Dt_barcodeinfoRepository.Instance.FindFirst(r => r.barcode_value == taskInfo.task_barcode);
                        barcodeInfo.barcode_locationid = taskInfo.task_tolocationid;
                        Dt_barcodeinfoRepository.Instance.Update(barcodeInfo, x => x.barcode_locationid, true);
 
                        //删除任务、添加历史
                        taskInfo.task_state = TaskState.TaskState_Finished.ToString();
                        CommonFunction.AddWMSTaskToHistory(taskInfo);
 
                        return content.OK();
                    });
                }
                else if (taskInfo.task_type == TaskType.TaskType_CheckBackIn.ToString() || taskInfo.task_type == TaskType.TaskType_ErrorCheckBackIn.ToString())
                {
                    content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
                    {
                        //更改货位状态
                        Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
                        if (taskInfo.task_type == TaskType.TaskType_ErrorCheckBackIn.ToString())
                            locationinfo.location_state = LocationState.LocationState_Error.ToString();
                        else
                            locationinfo.location_state = LocationState.LocationState_Stored.ToString();
                        Dt_locationinfoRepository.Instance.Update(locationinfo, x => x.location_state, true);
 
                        //删除任务、添加历史
                        taskInfo.task_state = TaskState.TaskState_Finished.ToString();
                        CommonFunction.AddWMSTaskToHistory(taskInfo);
                        return content.OK();
                    });
                }
                else if (taskInfo.task_type == TaskType.TaskType_CheckOutbound.ToString())
                {
                    //删除任务、添加历史
                    //taskInfo.task_state = TaskState.TaskState_Finished.ToString();
                    //CommonFunction.AddWMSTaskToHistory(taskInfo);
                    content.OK();
                }
 
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
 
    }
}