From 00e64cba66377cb75c9c947908627fe9f631746e Mon Sep 17 00:00:00 2001
From: Admin <Admin@ADMIN>
Date: 星期三, 21 一月 2026 13:53:14 +0800
Subject: [PATCH] '手动上传'

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  476 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 398 insertions(+), 78 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index c48f46f..4c5f053 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -15,17 +15,28 @@
  *----------------------------------------------------------------*/
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
+using Autofac.Core;
 using AutoMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Org.BouncyCastle.Math.EC;
+using SixLabors.ImageSharp;
 using SqlSugar;
+using System.ComponentModel;
 using System.Net;
 using System.Reflection;
+using System.Reflection.Emit;
+using System.Threading.Tasks;
 using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.Log;
 using WIDESEA_Common.OtherEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO.Inbound;
 using WIDESEA_DTO.Task;
@@ -41,13 +52,14 @@
 {
     public partial class TaskService : ServiceBase<Dt_Task, IRepository<Dt_Task>>, ITaskService
     {
+        private readonly ILogger<TaskService> _logger;
         private readonly IMapper _mapper;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly IStockInfoService _stockInfoService;
         private readonly ILocationInfoService _locationInfoService;
         private readonly IWarehouseService _warehouseService;
         private readonly IRoadWayinfoService _roadWayinfoService;
-
+        private Timer _timer;
         public IRepository<Dt_Task> Repository => BaseDal;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -60,9 +72,10 @@
 
         public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
 
-        public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, ILocationInfoService locationInfoService,
+        public TaskService(ILogger<TaskService> logger, IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockInfoService stockInfoService, ILocationInfoService locationInfoService,
             IWarehouseService warehouseService, IRoadWayinfoService roadWayinfoService) : base(BaseDal)
         {
+            _logger = logger;
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
             _stockInfoService = stockInfoService;
@@ -80,7 +93,80 @@
         public string WCS_SendStackerTask = WIDESEA_Core.Helper.AppSettings.Configuration["WCS_SendStackerTask"];   //鍫嗗灈鏈轰换鍔′笅鍙�
 
 
+        public WebResponseContent CESTEXT()
+        {
+            WriteLog.Write_Log("鎺ユ敹MES鍏ュ簱浠诲姟涓嬪彂", $"浠诲姟鎺ユ敹鍙傛暟", "鎴愬姛", $"鍙傛暟锛�234jkljsldafjlasdf");
+            return WebResponseContent.Instance.OK();
+        }
 
+        public WebResponseContent MESManualUpload(SaveModel saveModel)
+        {
+            WebResponseContent response = new WebResponseContent();
+
+            try
+            {
+                foreach (var key in saveModel.DelKeys)
+                {
+                    int taskId = int.Parse(key.ToString());
+                    Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId);
+
+                    WebResponseContent taskResult = ProcessTask(task);
+                    if (!taskResult.Status)
+                    {
+                        return taskResult;
+                    }
+                }
+
+                return response.OK("鎵�鏈変换鍔″鐞嗘垚鍔�");
+            }
+            catch (Exception ex)
+            {
+                return response.Error($"WMS浠诲姟瀹屾垚閿欒锛歿ex.Message}");
+            }
+        }
+
+        private WebResponseContent ProcessTask(Dt_Task task)
+        {
+            WebResponseContent response = new WebResponseContent();
+
+            switch ((TaskTypeEnum)task.TaskType)
+            {
+                case TaskTypeEnum.Inbound:
+                    if (task.TaskStatus != (int)InTaskStatusEnum.InPLCException &&
+                        task.TaskStatus != (int)InTaskStatusEnum.InSCException)
+                    {
+                        return response.Error($"浠诲姟绫诲瀷閿欒锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                    }
+                    return HandleInboundTask(task, 
+                        GetWcsType(task.TaskStatus,
+                        (int)InTaskStatusEnum.InPLCException,
+                        (int)InTaskStatusEnum.InSCException)
+                        );
+
+                case TaskTypeEnum.Outbound:
+                    if (task.TaskStatus != (int)OutTaskStatusEnum.OutPLCException &&
+                        task.TaskStatus != (int)OutTaskStatusEnum.OutSCException)
+                    {
+                        return response.Error($"浠诲姟绫诲瀷閿欒锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                    }
+                    return HandleOutboundTask(task, GetWcsType(task.TaskStatus,
+                        (int)OutTaskStatusEnum.OutPLCException,
+                        (int)OutTaskStatusEnum.OutSCException));
+
+                case TaskTypeEnum.Relocation:
+                    return HandleRelocationTask(task, 2);
+
+                default:
+                    return response.Error($"浠诲姟绫诲瀷閿欒锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode},绫诲瀷锛歿task.TaskType}");
+            }
+        }
+
+        private int GetWcsType(int taskStatus, int plcStatus, int scStatus)
+        {
+            if (taskStatus == plcStatus) return 1;
+            if (taskStatus == scStatus) return 2;
+            return 0;
+        }
 
 
         /// <summary>
@@ -96,15 +182,27 @@
                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == wCSTask.TaskNum && x.PalletCode == wCSTask.PalletCode);
                 if (task == null)
                     return webResponse.Error("鏈壘鍒颁换鍔′俊鎭�");
+                return TaskCompletedtask(task, wCSTask.TaskType);
+            }
+            catch (Exception ex)
+            {
+                return webResponse.Error($"WMS浠诲姟瀹屾垚閿欒锛歿ex.Message}");
+            }
+        }
 
+        public WebResponseContent TaskCompletedtask(Dt_Task task,int wcstype)
+        {
+            WebResponseContent webResponse = new WebResponseContent();
+            try
+            {
                 switch ((TaskTypeEnum)task.TaskType)
                 {
                     case TaskTypeEnum.Inbound:
-                        return HandleInboundTask(task, wCSTask.TaskType);
+                        return HandleInboundTask(task, wcstype);
                     case TaskTypeEnum.Outbound:
-                        return HandleOutboundTask(task, wCSTask.TaskType);
+                        return HandleOutboundTask(task, wcstype);
                     case TaskTypeEnum.Relocation:
-                        return HandleRelocationTask(task, wCSTask.TaskType);
+                        return HandleRelocationTask(task, wcstype);
                     default:
                         return webResponse.Error($"浠诲姟绫诲瀷閿欒锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode},绫诲瀷锛歿task.TaskType}");
                 }
@@ -115,102 +213,324 @@
             }
         }
 
+
+
         private WebResponseContent HandleInboundTask(Dt_Task task, int wcsTaskType)
         {
             WebResponseContent content = new WebResponseContent();
-            switch (wcsTaskType)
+            try
             {
-                case 1:
-                    task.TaskStatus = (int)InTaskStatusEnum.PLC_InFinish;
-                    int loctype = 0;
-                    if (task.Roadway == "1" || task.Roadway == "2")
-                    {
-                        if(task.PalletType=="1") loctype = (int)LocationTypeEnum.SmallPallet;
-                        else if(task.PalletType=="2") loctype = (int)LocationTypeEnum.MediumPallet;
-                    }
-                    else
-                    {
-                         loctype = (int)LocationTypeEnum.LargePallet;
-                    }
-                    //鏌ユ壘璐т綅锛屾洿鏂颁换鍔�
-                    Dt_LocationInfo dt_Location=_locationInfoService.GetLocation(task.Roadway, loctype);
-                    Dt_LocationInfo ShallowCargoHold = _locationInfoService.ShallowGetLocation(dt_Location.RoadwayNo, dt_Location.LocationType, dt_Location.Row, dt_Location.Layer, dt_Location.Column);
-                    if(ShallowCargoHold==null) return content.Error($"鏈壘鍒拌璐т綅淇℃伅,璐т綅缂栧彿:{dt_Location.LocationCode}鐨勬祬璐т綅");
-                    if(ShallowCargoHold.LocationStatus != (int)LocationStatusEnum.Free) return content.Error($"浠诲姟鍙凤細{task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode},鏌ユ壘鐨勮揣浣嶆祬璐т綅鏈夎揣锛岃揣浣嶇紪鍙凤細{ShallowCargoHold.LocationCode}");
+                switch (wcsTaskType)
+                {
+                    case 1:
 
-                    task.TargetAddress = dt_Location.LocationCode;
-                    task.CurrentAddress = task.NextAddress;
-                    task.NextAddress= dt_Location.LocationCode;
-                    task.TaskStatus = (int)InTaskStatusEnum.PLC_InFinish;
-                    dt_Location.LocationStatus = (int)LocationStatusEnum.Lock;
+                        if (string.IsNullOrEmpty(task.TargetAddress))
+                        {
+                            if(task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting || task.TaskStatus == (int)InTaskStatusEnum.InPLCException)
+                            {
+                                int loctype = 0;
+                                if (task.Roadway == "1" || task.Roadway == "2")
+                                {
+                                    if (task.PalletType == "1") loctype = (int)LocationTypeEnum.SmallPallet;
+                                    else if (task.PalletType == "2") loctype = (int)LocationTypeEnum.MediumPallet;
+                                }
+                                else
+                                {
+                                    loctype = (int)LocationTypeEnum.LargePallet;
+                                }
 
-                    _locationInfoService.UpdateData(dt_Location);
-                    BaseDal.UpdateData(task);
-                    return content.OK($"宸叉帴鏀跺叆搴撹緭閫佺嚎瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
-                
-                
-                case 2:
-                    //涓婃姤MES浠诲姟瀹屾垚
-                    MES_parameter mES_Parameter = InStoreDocCallback(task.TaskNum, "Finish", "鎿嶄綔鎴愬姛", task.PalletCode, task.TargetAddress);
-                    if (mES_Parameter.Result == "Y")
-                    {
+                                //鏌ユ壘璐т綅锛屾洿鏂颁换鍔�
+                                Dt_LocationInfo dt_Location = _locationInfoService.GetLocation(task.Roadway, loctype);
+                                if(dt_Location==null) return content.Error($"鏈壘鍒拌璐т綅淇℃伅,鎵樼洏缂栧彿锛歿task.PalletCode}");
+                                Dt_LocationInfo ShallowCargoHold = _locationInfoService.ShallowGetLocation(dt_Location.RoadwayNo, dt_Location.LocationType, dt_Location.Row, dt_Location.Layer, dt_Location.Column);
+                                if (ShallowCargoHold == null) return content.Error($"鏈壘鍒拌璐т綅淇℃伅,璐т綅缂栧彿:{dt_Location.LocationCode}鐨勬祬璐т綅");
+                                if (ShallowCargoHold.LocationStatus != (int)LocationStatusEnum.Free) return content.Error($"浠诲姟鍙凤細{task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode},鏌ユ壘鐨勮揣浣嶆祬璐т綅鏈夎揣锛岃揣浣嶇紪鍙凤細{ShallowCargoHold.LocationCode}");
 
-                        task.TaskStatus = (int)InTaskStatusEnum.SC_OutFinish;
-                        BaseDal.DeleteData(task);
-                        return content.OK($"宸叉帴鏀跺叆搴撳爢鍨涙満瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
-                    }
-                    else
-                    {
-                        return content.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg);
-                    }
-                default:
-                    return WebResponseContent.Instance.Error($"WCS涓婃姤绫诲瀷閿欒锛歿wcsTaskType}");
+                                if (task.PalletCode[0] == 1 && (dt_Location.RoadwayNo == "1" || dt_Location.RoadwayNo == "2") && dt_Location.Column < 4)
+                                {
+                                    return content.Error($"鏉$爜涓洪珮鎵樼洏锛屼絾鏄煡鎵剧殑璐т綅瑕佸叆鍦ㄤ綆鎵樼洏涓嬶紝鏁呴殰,鎵樼洏鏉$爜锛歿task.PalletCode},璐т綅缂栧彿:{dt_Location.LocationCode}");
+                                }
+
+
+                                Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(task.Roadway);
+
+                                task.TargetAddress = dt_Location.LocationCode;
+                                task.CurrentAddress = _Roadwayinfo.InSCStationCode;
+                                task.NextAddress = dt_Location.LocationCode;
+                                task.TaskStatus = (int)InTaskStatusEnum.PLC_InFinish;
+
+                                dt_Location.LocationStatus = (int)LocationStatusEnum.Lock;
+
+                                Dt_StockInfo dt_StockInfo = new Dt_StockInfo();
+                                dt_StockInfo.PalletCode = task.PalletCode;
+                                dt_StockInfo.PalletType = task.PalletType;
+                                dt_StockInfo.WarehouseId = task.WarehouseId;
+                                dt_StockInfo.LocationCode = dt_Location.LocationCode;
+                                dt_StockInfo.StockStatus = (int)StockStatusEmun.鍏ュ簱涓�;
+                                dt_StockInfo.Creater = "MWS";
+                                dt_StockInfo.CreateDate = DateTime.Now;
+                                dt_StockInfo.Roadway = task.Roadway;
+                                
+
+                                _unitOfWorkManage.BeginTran();
+                                _stockInfoService.AddData(dt_StockInfo);
+                                _locationInfoService.UpdateData(dt_Location);
+                                BaseDal.UpdateData(task);
+                                _unitOfWorkManage.CommitTran();
+                                return content.OK($"宸叉帴鏀跺叆搴撹緭閫佺嚎瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                            }
+                            else
+                            {
+                                return content.Error("涓婃姤澶辫触锛屽綋鍓嶄换鍔′笉鏄緭閫佺嚎鎵ц涓紝WCS涓婃姤瀹屾垚澶辫触");
+                            }
+
+                            
+                        }
+                        else
+                        {
+                            //鍒ゆ柇鏄惁鏈夎绔欏彴
+                            if (task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting || task.TaskStatus == (int)InTaskStatusEnum.InPLCException)
+                            {
+                                string Resultplc = MesInTaskStatusEnum.Finish.GetDescription();
+                                MES_parameter mES_PCLParameter = InStoreDocCallback(task.TaskNum, Resultplc, "鎿嶄綔鎴愬姛", task.PalletCode, task.TargetAddress);
+                                if (mES_PCLParameter.Result == "Y")
+                                {
+                                    task.TaskStatus = (int)InTaskStatusEnum.PLC_InFinish;
+                                    _unitOfWorkManage.BeginTran();
+                                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                                    _unitOfWorkManage.CommitTran();
+                                    return content.OK($"杈撻�佺嚎浠诲姟宸插弽棣堣嚦涓婃父锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                                }
+                                else
+                                {
+                                    task.NumberSsuances = task.NumberSsuances + 1;
+                                    if (task.NumberSsuances == 3)
+                                    {
+                                        task.TaskStatus = (int)InTaskStatusEnum.InPLCException;
+                                        task.Remark = "杈撻�佺嚎鍏ュ簱锛氫笂浼燤ES澶辫触锛屽師鍥狅細" + mES_PCLParameter.ResultMsg;
+                                        BaseDal.UpdateData(task);
+                                    }
+                                    return content.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_PCLParameter.ResultMsg);
+                                }
+                            }
+                            else
+                            {
+                                return content.Error($"涓婃姤澶辫触锛屽綋鍓嶄换鍔′笉鏄緭閫佺嚎鎵ц涓紝WCS涓婃姤瀹屾垚澶辫触锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                            }
+
+                        }
+                    case 2:
+                        if (task.TaskStatus == (int)InTaskStatusEnum.SC_IntExecuting || task.TaskStatus == (int)InTaskStatusEnum.InSCException)
+                        {
+                            string Resultsc = MesInTaskStatusEnum.Finish.GetDescription();
+                            //涓婃姤MES浠诲姟瀹屾垚
+                            MES_parameter mES_Parameter = InStoreDocCallback(task.TaskNum, Resultsc, "鎿嶄綔鎴愬姛", task.PalletCode, task.TargetAddress);
+                            if (mES_Parameter.Result == "Y")
+                            {
+                                Dt_StockInfo dt_Stockowc = _stockInfoService.Repository.QueryData(x => x.PalletCode == task.PalletCode).FirstOrDefault();
+                                Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stockowc.LocationCode).FirstOrDefault();
+
+                                dt_Stockowc.StockStatus = (int)StockStatusEmun.宸插叆搴�;
+                                dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.InStock;
+                                task.TaskStatus = (int)InTaskStatusEnum.InFinish;
+
+                                _unitOfWorkManage.BeginTran();
+                                _stockInfoService.UpdateData(dt_Stockowc);
+                                _locationInfoService.UpdateData(dt_LocationInfo);
+                                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                                _unitOfWorkManage.CommitTran();
+                                return content.OK($"宸叉帴鏀跺叆搴撳爢鍨涙満瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                            }
+                            else
+                            {
+                                task.NumberSsuances = task.NumberSsuances + 1;
+                                if (task.NumberSsuances == 3)
+                                {
+                                    task.TaskStatus = (int)InTaskStatusEnum.InSCException;
+                                    task.Remark = "鍫嗗灈鏈哄叆搴擄紝涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg;
+                                    BaseDal.UpdateData(task);
+                                }
+                                return content.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg);
+                            }
+                        }
+                        else
+                        {
+                            return content.Error($"涓婃姤澶辫触锛屽綋鍓嶄换鍔′笉鏄爢鍨涙満鎵ц涓紝WCS涓婃姤瀹屾垚澶辫触锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                        }
+                            
+                    default:
+                        return content.Error($"WCS涓婃姤绫诲瀷閿欒锛歿wcsTaskType}");
+                }
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return content.Error($"WCS浠诲姟瀹屾垚鎺ュ彛鏁呴殰锛屽師鍥狅細{ex.Message}");
             }
         }
 
         private WebResponseContent HandleOutboundTask(Dt_Task task, int wcsTaskType)
         {
             WebResponseContent content = new WebResponseContent();
-            switch (wcsTaskType)
+            try
             {
-                case 1:
-                    //涓婃姤MES浠诲姟瀹屾垚
-                    MES_parameter mES_Parameter = OutStoreDocCallback(task.TaskNum, "Finish", "鎿嶄綔鎴愬姛");
-                    if (mES_Parameter.Result == "Y")
-                    {
-                        task.TaskStatus = (int)OutTaskStatusEnum.PLC_OutFinish;
-                        BaseDal.DeleteData(task);
-                        return content.OK($"宸叉帴鏀跺嚭搴撹緭閫佺嚎瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
-                    }
-                    else
-                    {
-                        return content.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg);
-                    }
-                case 2:
-                    //鑾峰彇瀵瑰簲PLC绔欏彴淇℃伅
-                    Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(task.Roadway);
-                    task.CurrentAddress = _Roadwayinfo.OutStationCode;
-                    task.NextAddress = task.TargetAddress;
-                    task.TaskStatus = (int)OutTaskStatusEnum.SC_OutFinish;
-                    BaseDal.UpdateData(task);
-                    return content.OK($"宸叉帴鏀跺嚭搴撳爢鍨涙満瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
-                default:
-                    return content.Error($"WCS涓婃姤绫诲瀷閿欒锛歿wcsTaskType}");
+                switch (wcsTaskType)
+                {
+                    case 1:
+                        if(task.TaskStatus == (int)OutTaskStatusEnum.PLC_OutExecuting || task.TaskStatus == (int)OutTaskStatusEnum.OutPLCException)
+                        {
+                            string Resultplc = MesOutTaskStatusEnum.Finish.GetDescription();
+                            //涓婃姤MES浠诲姟瀹屾垚
+                            MES_parameter mES_Parameter = OutStoreDocCallback(task.TaskNum, Resultplc, "鎿嶄綔鎴愬姛");
+                            if (mES_Parameter.Result == "Y")
+                            {
+                                task.TaskStatus = (int)OutTaskStatusEnum.PLC_OutFinish;
+                                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                                return content.OK($"宸叉帴鏀跺嚭搴撹緭閫佺嚎瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                            }
+                            else
+                            {
+                                task.NumberSsuances = task.NumberSsuances + 1;
+                                if (task.NumberSsuances == 3)
+                                {
+                                    task.TaskStatus = (int)OutTaskStatusEnum.OutPLCException;
+                                    task.Remark = "鍑哄簱锛岃緭閫佺嚎涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg;
+                                    BaseDal.UpdateData(task);
+                                }
+                                return content.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg);
+                            }
+
+                        }
+                        else
+                        {
+                            return content.Error($"涓婃姤澶辫触锛學MS褰撳墠浠诲姟涓嶆槸杈撻�佺嚎鎵ц涓紝WCS涓婃姤瀹屾垚澶辫触锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                        }
+                        
+                    case 2:
+
+                        if (task.TaskStatus == (int)OutTaskStatusEnum.SC_OutExecuting || task.TaskStatus == (int)OutTaskStatusEnum.OutSCException)
+                        {
+                            //鑾峰彇瀵瑰簲PLC绔欏彴淇℃伅
+                            Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(task.Roadway);
+                            task.CurrentAddress = _Roadwayinfo.OutStationCode;
+                            task.NextAddress = task.TargetAddress;
+                            task.TaskStatus = (int)OutTaskStatusEnum.SC_OutFinish;
+
+                            Dt_StockInfo dt_Stockowc = _stockInfoService.Repository.QueryData(x => x.PalletCode == task.PalletCode).FirstOrDefault();
+                            Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stockowc.LocationCode).FirstOrDefault();
+                            dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.Free;
+
+                            string Result = MesOutTaskStatusEnum.Outstore.GetDescription();
+                            //璋冨彇涓婃父绯荤粺鍙嶉寮�濮嬩换鍔�
+                            MES_parameter mES_SCParameter = OutStoreDocCallback(task.TaskNum, Result, "鎿嶄綔鎴愬姛");
+                            if (mES_SCParameter.Result == "Y")
+                            {
+                                _unitOfWorkManage.BeginTran();
+                                _stockInfoService.DeleteData(dt_Stockowc);
+                                _locationInfoService.UpdateData(dt_LocationInfo);
+                                BaseDal.UpdateData(task);
+                                _unitOfWorkManage.CommitTran();
+                                return content.OK($"宸叉帴鏀跺嚭搴撳爢鍨涙満瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                            }
+                            else
+                            {
+                                task.NumberSsuances = task.NumberSsuances + 1;
+                                if (task.NumberSsuances == 3)
+                                {
+                                    task.TaskStatus = (int)OutTaskStatusEnum.OutSCException;
+                                    task.Remark = "鍫嗗灈鏈哄嚭搴擄細涓婁紶MES澶辫触锛屽師鍥狅細" + mES_SCParameter.ResultMsg;
+                                    BaseDal.UpdateData(task);
+                                }
+                                return content.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_SCParameter.ResultMsg);
+                            }
+                        }
+                        else
+                        {
+                            return content.Error($"涓婃姤澶辫触锛學MS褰撳墠浠诲姟涓嶆槸鍫嗗灈鏈烘墽琛屼腑锛學CS涓婃姤瀹屾垚澶辫触锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                        }
+                        
+                    default:
+                        return content.Error($"WCS涓婃姤绫诲瀷閿欒锛歿wcsTaskType}");
+                }
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return content.Error($"WCS浠诲姟瀹屾垚鎺ュ彛鏁呴殰锛屽師鍥狅細{ex.Message}");
             }
         }
 
         private WebResponseContent HandleRelocationTask(Dt_Task task, int wcsTaskType)
         {
-            if (wcsTaskType == 2)
+            WebResponseContent responseContent = new WebResponseContent();
+            try
             {
-                task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationFinish;
-                BaseDal.UpdateData(task);
-                return WebResponseContent.Instance.OK($"宸叉帴鏀剁Щ搴撳爢鍨涙満瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                if (wcsTaskType == 2)
+                {
+                    if(task.TaskStatus == (int)RelocationTaskStatusEnum.RelocationExecuting)
+                    {
+                        //涓婃姤MES浠诲姟瀹屾垚
+                        MES_parameter mES_Parameter = AbnormalStorageLocation(task.PalletCode, task.SourceAddress, task.TargetAddress);
+                        if (mES_Parameter.Result == "Y")
+                        {
+                            Dt_LocationInfo OriginalLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == task.SourceAddress).FirstOrDefault();
+                            Dt_LocationInfo NewLocation = _locationInfoService.Repository.QueryData(x => x.LocationCode == task.TargetAddress).FirstOrDefault();
+                            Dt_StockInfo dt_StockInfo = _stockInfoService.Repository.QueryData(x => x.LocationCode == task.SourceAddress).FirstOrDefault();
+
+                            List<Dt_LocationInfo> dt_Locations = new List<Dt_LocationInfo>();
+
+                            OriginalLocation.LocationStatus = (int)LocationStatusEnum.Free;
+                            NewLocation.LocationStatus = (int)LocationStatusEnum.InStock;
+                            dt_StockInfo.LocationCode = NewLocation.LocationCode;
+                            dt_StockInfo.StockStatus = (int)StockStatusEmun.宸插叆搴�;
+                            task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationFinish;
+
+                            dt_Locations.Add(OriginalLocation);
+                            dt_Locations.Add(NewLocation);
+
+                            _unitOfWorkManage.BeginTran();
+                            _locationInfoService.UpdateData(dt_Locations);
+                            _stockInfoService.UpdateData(dt_StockInfo);
+                            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                            _unitOfWorkManage.CommitTran();
+
+                            return responseContent.OK($"宸叉帴鏀剁Щ搴撳爢鍨涙満瀹屾垚淇℃伅锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                        }
+                        else
+                        {
+                            task.NumberSsuances = task.NumberSsuances + 1;
+                            if (task.NumberSsuances == 3)
+                            {
+                                task.TaskStatus = (int)RelocationTaskStatusEnum.RelocationException;
+                                task.Remark = "绉诲簱锛屼笂浼燤ES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg;
+                                BaseDal.UpdateData(task);
+                            }
+                            return responseContent.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg);
+                        }
+                    }
+                    else
+                    {
+                        return responseContent.Error($"涓婃姤澶辫触锛學MS褰撳墠浠诲姟涓嶆槸鍫嗗灈鏈烘墽琛屼腑锛學CS涓婃姤瀹屾垚澶辫触锛屼换鍔″彿锛歿task.TaskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
+                    }
+                    
+                }
+                else
+                {
+                    return responseContent.Error($"WCS涓婃姤绫诲瀷閿欒锛歿wcsTaskType}");
+                }
             }
-            return WebResponseContent.Instance.Error($"WCS涓婃姤绫诲瀷閿欒锛歿wcsTaskType}");
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return responseContent.Error($"WMS绯荤粺閿欒锛屽師鍥狅細{ex.Message}");
+            }
+            
         }
 
 
-       
+
+
+        
+
     }
 }

--
Gitblit v1.9.3