Admin
2026-01-23 a699ec37293462e17e1b1261bcda5325c1b4840b
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
using MailKit.Search;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.Log;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Task;
using WIDESEA_Model.Models;
using static WIDESEA_ITaskInfoService.ITaskService;
 
namespace WIDESEA_TaskInfoService
{
    public partial class WMSCruJob
    {
        /// <summary>
        /// 判断巷道内移库
        /// </summary>
        /// <param name="TaskNum"></param>
        /// <param name="SourceAddress"></param>
        /// <returns></returns>
        public WebResponseContent JudgmentIsRelocations(Dt_Task dt_Task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string Locationcodeadd = dt_Task.TaskType == (int)TaskTypeEnum.Inbound ? dt_Task.NextAddress : dt_Task.CurrentAddress;
                Dt_LocationInfo dt_Location = _locationInfoService.FindStorageLocation(Locationcodeadd);
                if (dt_Location == null) { return content.Error("未能查找到库位"); }
                if (dt_Location.RoadwayNo == "5") return content.OK();    //浅货位直接返回,可下发出入口任务
                if(dt_Location.Depth == 1 && dt_Task.TaskType== (int)TaskTypeEnum.Outbound) return content.OK();
 
                int locrow = _locationInfoService.judgmentRow(dt_Location.RoadwayNo, dt_Location.Row);
                Dt_LocationInfo shallowLocation = _locationInfoService.ShallowGetLocation(dt_Location.RoadwayNo, dt_Location.LocationType, locrow, dt_Location.Layer, dt_Location.Column);
                if (dt_Location.Depth == 1 && dt_Task.TaskType == (int)TaskTypeEnum.Inbound)
                {
                    if (shallowLocation.LocationStatus == (int)LocationStatusEnum.InStock) return content.OK();
                    return content.Error();
                }
                if (shallowLocation.LocationStatus == (int)LocationStatusEnum.Free) return content.OK();
 
                //判断是否有移库任务
 
                var TransferTask = _taskService.GeRelocationTaskQueue(shallowLocation.LocationCode);
                if (TransferTask != null)
                {
                    //进行下发给堆垛机任务
                    WCSginseng result = _taskService.SC_IssueTasks(TransferTask.TaskId,int.Parse(TransferTask.Roadway),TransferTask.TaskNum,TransferTask.PalletCode,int.Parse(TransferTask.PalletType),TransferTask.CurrentAddress,TransferTask.NextAddress,dt_Task.TargetAddress);
                    if (result.IsSuccess)
                    {
                        TransferTask.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
                        _taskService.UpdateData(TransferTask);
                        return content.OK();
                    }
                    else
                    {
                        UpdateTaskStatus(dt_Task, result,
                        successStatus: dt_Task.TaskStatus == (int)InTaskStatusEnum.PLC_InFinish ? (int)InTaskStatusEnum.SC_IntExecuting : (int)OutTaskStatusEnum.SC_OutExecuting, 1);
 
                        WriteLog.Write_Log("WMS_判断巷道内移库", $"判断移库", "失败", $"原因:{result.Message}");
                        return content.Error();
                    }
                }
 
                var CuttTransferTask = _taskService.RelocationTaskProgress(dt_Task.Roadway);
                //判断当前是否有移库任务
                if (CuttTransferTask != null) return content.Error();
 
 
                if (shallowLocation.LocationStatus != (int)LocationStatusEnum.InStock) return content.Error();
 
                //生成移库任务
                return content = GenerateTransferTask(shallowLocation.LocationCode);
            }
            catch (Exception ex)
            {
                WriteLog.Write_Log("WMS_判断巷道内移库", $"判断移库", "失败,方法内故障", $"原因:{ex.Message}");
                return content.Error();
 
            }
        }
 
 
        public WebResponseContent GenerateTransferTask(string shallowLocation)
        {
            WebResponseContent webResponse = new WebResponseContent();
            try
            {
                Dt_LocationInfo OriginalLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == shallowLocation).FirstOrDefault();
                Dt_StockInfo dt_StockInfo = _stockInfoService.Repository.QueryData(x => x.LocationCode == shallowLocation).FirstOrDefault();
                Dt_LocationInfo newLocation = _locationInfoService.GetLocation(OriginalLocation.RoadwayNo, OriginalLocation.LocationType);
                List<Dt_LocationInfo> dt_Locations = new List<Dt_LocationInfo>();
 
                MES_parameter mES_Parame = _taskService.ApplicationChangeStorageLocation(dt_StockInfo.PalletCode, OriginalLocation.LocationCode, newLocation.LocationCode);
                if (mES_Parame != null)
                {
                    if (mES_Parame.Result == "Y")
                    {
                        //进行生成任务,下发任务至MES
                        Dt_Task task = new Dt_Task();
                        task.TaskNum = "0";
                        task.PalletCode = dt_StockInfo.PalletCode;
                        task.PalletType = dt_StockInfo.PalletType;
                        task.Roadway = OriginalLocation.RoadwayNo;
                        task.TaskType = (int)TaskTypeEnum.Relocation;
                        task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationNew;
                        task.SourceAddress = OriginalLocation.LocationCode;
                        task.TargetAddress = newLocation.LocationCode;
                        task.CurrentAddress = OriginalLocation.LocationCode;
                        task.NextAddress = newLocation.LocationCode;
                        task.WarehouseId = OriginalLocation.WarehouseId;
                        task.OrderNo = "";
                        task.Grade = 1;
                        task.Creater = "MES";
                        task.CreateDate = DateTime.Now;
 
                        OriginalLocation.LocationStatus = (int)LocationStatusEnum.Lock;
                        newLocation.LocationStatus = (int)LocationStatusEnum.Lock;
                        dt_StockInfo.StockStatus = (int)StockStatusEmun.移库锁定;
 
                        dt_Locations.Add(OriginalLocation);
                        dt_Locations.Add(newLocation);
 
                        _unitOfWorkManage.BeginTran();
 
                        int TaskId = _taskService.Repository.AddData(task);
                        _locationInfoService.UpdateData(dt_Locations);
                        _stockInfoService.UpdateData(dt_StockInfo);
                        _unitOfWorkManage.CommitTran();
 
 
                        //return webResponse.Error("已生成移库任务");
                        //进行下发给堆垛机任务
                        WCSginseng result = _taskService.SC_IssueTasks(
                            TaskId,
                            int.Parse(task.Roadway),
                            task.TaskNum,
                            task.PalletCode,
                            int.Parse(task.PalletType),
                            task.CurrentAddress,
                            task.NextAddress,
                            task.TargetAddress);
                        if (result.IsSuccess)
                        {
                            task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationExecuting;
                            _taskService.UpdateData(task);
                            return webResponse.OK();
                        }
                        else
                        {
                            WriteLog.Write_Log("WMS_判断巷道内移库", $"移库任务生成方法", "下发移库失败", $"原因:{result.Message}");
 
                            return webResponse.Error();
                        }
                    }
                    else
                    {
                        WriteLog.Write_Log("WMS_判断巷道内移库", $"移库任务生成方法", "申请MES移库", $"申请储位异动,MES不允许移动");
                        return webResponse.Error();
                    }
                }
                else
                {
                    WriteLog.Write_Log("WMS_判断巷道内移库", $"移库任务生成方法", "申请MES移库,返回空", $"申请储位异动,MES返回为空");
                    return webResponse.Error();
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                WriteLog.Write_Log("WMS_判断巷道内移库", $"移库任务生成方法", "系统故障", $"原因:{ex.Message}");
                return webResponse.Error();
            }
        }
 
    }
}