From 51af2794f47d5b68496edbc09d0ccb168347f02b Mon Sep 17 00:00:00 2001
From: HuBingJie <3146306518@qq.com>
Date: 星期六, 22 十一月 2025 10:19:05 +0800
Subject: [PATCH] 1

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  317 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 273 insertions(+), 44 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index fecb1ee..ead1c5c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -1,4 +1,4 @@
-锘�#region << 鐗� 鏈� 娉� 閲� >>
+#region << 鐗� 鏈� 娉� 閲� >>
 /*----------------------------------------------------------------
  * 鍛藉悕绌洪棿锛歐IDESEA_TaskInfoService
  * 鍒涘缓鑰咃細鑳$搴�
@@ -21,6 +21,7 @@
 using Microsoft.AspNetCore.Mvc;
 using Newtonsoft.Json;
 using SqlSugar;
+using System.Diagnostics;
 using System.DirectoryServices.Protocols;
 using System.Net;
 using System.Reflection.Emit;
@@ -167,11 +168,8 @@
                     Dt_StockInfo dt_Stock = _stockRepository.QueryFirst(x => x.LocationCode == ShallowLocation.LocationCode);
                     if (dt_Stock == null) return content.Error($"璐т綅缂栧彿:{Locatask}鐨勬祬璐т綅搴撳瓨寮傚父锛岃妫�鏌ワ紒锛侊紒");
 
-                    Dt_Task _Task = BaseDal.QueryFirst(x => x.SourceAddress == ShallowLocation.LocationCode || x.TargetAddress == ShallowLocation.LocationCode);
-                    if (_Task != null) return content.Error($"璐т綅缂栧彿:{Locatask}鐨勬祬璐т綅搴撳凡鏈変换鍔★紝涓嶅彲杩涜绉诲簱");
-
                     //杩涜鑾峰彇鏂扮殑搴撲綅
-                    Dt_LocationInfo? Nextlocation = _basicService.LocationInfoService.AssignLocation(DeepLocation.RoadwayNo, 0, "");//鑾峰彇鍒版柊搴撲綅
+                    Dt_LocationInfo? Nextlocation = _basicService.LocationInfoService.GetLocation(DeepLocation.RoadwayNo);//鑾峰彇鍒版柊搴撲綅
                     if (Nextlocation == null)
                     {
                         return content.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅");
@@ -196,11 +194,11 @@
                         NextAddress = Nextlocation.LocationCode,
                         Grade = 1,
                         Creater = "WMS",
-                        Depth = ShallowLocation.Depth,
+                        Depth = Nextlocation.Depth,
                         CreateDate = DateTime.Now,
                     };
 
-                    _locationInfoRepository.AddData(loca);
+                    _locationInfoRepository.UpdateData(loca);
                     BaseDal.AddData(dt_Task);   //鏂板浠诲姟
                     _unitOfWorkManage.CommitTran();
 
@@ -269,13 +267,15 @@
                 BaseDal.DeleteData(task);
                 BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
 
-                WebResponseContent content=MES_TransferCompletionFeedback(task);
+                WebResponseContent content = MES_TransferCompletionFeedback(task);
+                //content.Status = true;
+
                 if (!content.Status)
                 {
                     _unitOfWorkManage.RollbackTran();
                     return content;
                 }
-                    
+
                 _unitOfWorkManage.CommitTran();
                 return webResponse.OK();
             }
@@ -320,15 +320,20 @@
                 _locationInfoRepository.UpdateData(dt_LocationInfo);
                 //淇敼搴撳瓨鐘舵��
                 _stockRepository.UpdateData(stockInfo);
+                task.TaskStatus = (int)TaskInStatusEnum.InFinish;
                 //鍒犻櫎浠诲姟娣诲姞鍘嗗彶
                 BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚);
 
+
                 WebResponseContent content = TaskCompletionFeedback(task);
+                //content.Status = true;
                 if (!content.Status)
                 {
                     _unitOfWorkManage.RollbackTran();
                     return content;
                 }
+
+                //Thread.Sleep(5000);
 
                 _unitOfWorkManage.CommitTran();
             }
@@ -359,28 +364,32 @@
                 stockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
                 
                 int beforeStatus = locationInfo.LocationStatus;
-                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                locationInfo.LocationStatus =(int)LocationStatusEnum.Free;
                 task.TaskStatus = TaskOutStatusEnum.OutFinish.ObjToInt();
 
                 _unitOfWorkManage.BeginTran();
+
                 _stockRepository.DeleteData(stockInfo);
                 _locationInfoRepository.UpdateData(locationInfo);   //淇敼鎴愮┖璐т綅
+
                 BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
-                _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+                _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(), "1", task.TaskNum);
                 WebResponseContent content = TaskCompletionFeedback(task);
+                //content.Status = true;
+
                 if (!content.Status)
                 {
                     _unitOfWorkManage.RollbackTran();
                     return content;
                 }
-
+                //Thread.Sleep(5000);
                 _unitOfWorkManage.CommitTran();
                 return webResponse.OK();
             }
             catch (Exception ex)
             {
                 _unitOfWorkManage.RollbackTran();
-                return webResponse.Error($"绉诲簱浠诲姟瀹屾垚澶辫触锛屼换鍔d锛歿task.TaskNum},閿欒鍘熷洜锛歿ex.Message}");
+                return webResponse.Error($"鍑哄簱浠诲姟瀹屾垚澶辫触锛屼换鍔d锛歿task.TaskNum},閿欒鍘熷洜锛歿ex.Message}");
                 throw;
             }
             
@@ -404,17 +413,26 @@
 
             try
             {
+                string locationCode = null;
+                if (dt_Task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
+                {
+                    locationCode = dt_Task.SourceAddress;
+                }
+                else
+                {
+                    locationCode = dt_Task.TargetAddress;
+                }
                 TransferRequest transferRequest = new TransferRequest()
                 {
                     //涓氬姟id锛屼换鍔d鍚庣画杩涜鏇存敼
-                    businessId = "1",
-                    TaskId = "1",
-                    SourceLocationCode = dt_Task.SourceAddress,
-                    LocationCode = dt_Task.TargetAddress,
-                    PalletCode = dt_Task.PalletCode,
-                    Status = "FINISH",
-                    ErrorStatus = "NORMAL",
-                    ErrorInfo = "",
+                    taskId = dt_Task.MEStaskId,   //浠诲姟id
+                    businessId = dt_Task.MESbusinessId,   //涓氬姟id
+                    sourceLocationCode = dt_Task.SourceAddress,
+                    locationCode = locationCode,
+                    palletCode = dt_Task.PalletCode,
+                    status = "FINISH",
+                    errorStatus = "NORMAL",
+                    errorInfo = "",
                 };
 
                 //鑾峰彇鎺ュ彛杩涜璋冨彇
@@ -422,25 +440,27 @@
                 string WCSReceiveTaskAPI = ConfigsAPIInfo.ApiAddress + ConfigsAPIInfo.ApiName;
                 if (WCSReceiveTaskAPI == null)
                 {
-                    return webResponse.Error($"鍑哄簱澶辫触锛屾湭閰嶇疆MES绉诲簱瀹屾垚鍙嶉鎺ュ彛");
+                   return webResponse.Error($"鍑哄簱澶辫触锛屾湭閰嶇疆MES绉诲簱瀹屾垚鍙嶉鎺ュ彛");
                 }
                 var respon = HttpHelper.Post(WCSReceiveTaskAPI, JsonConvert.SerializeObject(transferRequest));
                 if (respon != null)
                 {
-                    var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
-                    if (response.Success)
-                    {
-                        return webResponse.OK();
-                    }
-                    else
-                    {
-                        return webResponse.Error($"璋冨彇鎺ュ彛澶辫触锛屽弽棣堝弬鏁板師鍥狅細{response.Message}");
-                    }
+                   var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
+                   if (response.Success)
+                   {
+                       return webResponse.OK();
+                   }
+                   else
+                   {
+                       return webResponse.Error($"璋冨彇鎺ュ彛澶辫触锛屽弽棣堝弬鏁板師鍥狅細{response.Message}");
+                   }
                 }
                 else
                 {
-                    return webResponse.Error($"璋冨彇鎺ュ彛澶辫触锛屽弽棣堝弬鏁颁负绌�");
+                   return webResponse.Error($"璋冨彇鎺ュ彛澶辫触锛屽弽棣堝弬鏁颁负绌�");
                 }
+
+                return webResponse.OK();
             }
             catch (Exception ex)
             {
@@ -461,17 +481,26 @@
 
             try
             {
-                TaskNotification transferRequest = new TaskNotification()
+                string locationCode = null;
+                if (dt_Task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                 {
-                    //涓氬姟id锛屼换鍔d鍚庣画杩涜鏇存敼
-                    TaskId = "1",   //浠诲姟id
-                    BusinessId = "1",   //涓氬姟id
-                    PalletCode = dt_Task.PalletCode,
-                    SubPalletCode = "",//瀛愭墭鐩樼紪鐮�
-                    LocationCode = dt_Task.SourceAddress,
-                    ErrorStatus = "NORMAL",
-                    ErrorInfo = "",
-                };
+                    locationCode = dt_Task.SourceAddress;
+                }
+                else
+                {
+                    locationCode = dt_Task.TargetAddress;
+                }
+                TaskNotification transferRequest = new TaskNotification()
+                    {
+                        //涓氬姟id锛屼换鍔d鍚庣画杩涜鏇存敼
+                        taskId = dt_Task.MEStaskId,   //浠诲姟id
+                        businessId = dt_Task.MESbusinessId,   //涓氬姟id
+                        palletCode = dt_Task.PalletCode,
+                        subPalletCode = dt_Task.MESsubPalletCode,//瀛愭墭鐩樼紪鐮�
+                        locationCode = locationCode,
+                        errorStatus = "NORMAL",
+                        errorInfo = "",
+                    };
 
                 //鑾峰彇鎺ュ彛杩涜璋冨彇
                 var ConfigsAPIInfo = _dt_ApiInfoService.GetConfigsByAPIInfo(CateGoryConst.CONFIG_MES_IPAddress, SysConfigConst.MESTaskFeedback);      //鑾峰彇鍒皐cs鍏ㄩ儴绫诲瀷鐨勬帴鍙�
@@ -480,7 +509,14 @@
                 {
                     return webResponse.Error($"浠诲姟鍙嶉MES澶辫触锛屾湭閰嶇疆MES浠诲姟瀹屾垚鍙嶉鎺ュ彛");
                 }
-                var respon = HttpHelper.Post(WCSReceiveTaskAPI, JsonConvert.SerializeObject(transferRequest));
+                
+                // 娣诲姞璋冭瘯淇℃伅
+                string requestJson = JsonConvert.SerializeObject(transferRequest);
+                //Console.WriteLine($"MES鍙嶉鎺ュ彛URL: {WCSReceiveTaskAPI}");
+                //Console.WriteLine($"MES鍙嶉璇锋眰鏁版嵁: {requestJson}");
+                
+                // 浣跨敤淇鍚庣殑PostSync鏂规硶锛堝凡鍦≒ostSync涓缃粯璁よ姹傚ご锛�
+                var respon = HttpHelper.Post(WCSReceiveTaskAPI, requestJson);
                 if (respon != null)
                 {
                     var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
@@ -505,7 +541,7 @@
             }
         }
 
-        public ApiResponse<object> MESresponse(string Message, bool Success)
+        public ApiResponse<object> MESresponse(string Message, bool Success,int  Code)
         {
             ApiResponse<object> apiResponse = new ApiResponse<object>();
             apiResponse.Message = Message;
@@ -514,8 +550,111 @@
             return apiResponse;
         }
 
+        /// <summary>
+        /// 鍙栨秷浠诲姟鎺ュ彛
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <returns></returns>
+        public WebResponseContent Cancelinventory(int taskNum)
+        {
+            WebResponseContent webResponse = new WebResponseContent();
+            try
+            {
+                // 鏌ユ壘浠诲姟
+                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.TaskStatus == TaskOutStatusEnum.OutFinish.ObjToInt());
+                if (task == null)
+                {
+                    return webResponse.Error($"鏈壘鍒颁换鍔″彿涓恒�恵taskNum}銆戠殑浠诲姟淇℃伅");
+                }
 
+                bool res;
+                switch (task.TaskType)
+                {
+                    case (int)TaskInboundTypeEnum.Inbound:
+                        res = task.TaskStatus == TaskInStatusEnum.Line_InExecuting.ObjToInt();
+                        break;
+                    case (int)TaskOutboundTypeEnum.Outbound:
+                        res = task.TaskStatus == TaskOutStatusEnum.OutNew.ObjToInt();
+                        break;
+                    case (int)TaskRelocationTypeEnum.Relocation:
+                        res = task.TaskStatus == TaskRelocationStatusEnum.RelocationNew.ObjToInt();
+                        break;
+                    default:
+                        res = false;
+                        break;
+                }
+                if (!res) return WebResponseContent.Instance.Error("浠诲姟鐘舵�佸紓甯�");
 
+                Dt_StockInfo stockInfo = _stockRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
+
+                _unitOfWorkManage.BeginTran();
+
+                int stockmsseg;
+                int locationmsseg;
+                bool taskmsseg;
+                if (task.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
+                {
+                    stockmsseg = _stockRepository.Db.Updateable<Dt_StockInfo>()
+                  .SetColumns(x => x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
+                  .Where(x => x.PalletCode == task.PalletCode)
+                  .ExecuteCommand();
+                    locationmsseg = _locationInfoRepository.Db.Updateable<Dt_LocationInfo>()
+          .SetColumns(x => x.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+          .Where(x => x.LocationCode == stockInfo.LocationCode)
+          .ExecuteCommand();
+                    taskmsseg = BaseDal.DeleteData(task);
+                }
+                else
+                {
+                    locationmsseg = _locationInfoRepository.Db.Updateable<Dt_LocationInfo>()
+                    .SetColumns(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt())
+                    .Where(x => x.LocationCode == stockInfo.LocationCode)
+                    .ExecuteCommand();
+                    stockmsseg = _stockRepository.DeleteData(stockInfo).ObjToInt();
+                    taskmsseg = BaseDal.DeleteData(task);
+                }
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚);
+                //鑾峰彇鎺ュ彛杩涜璋冨彇
+                var ConfigsAPIInfo = _dt_ApiInfoService.GetConfigsByAPIInfo(CateGoryConst.CONFIG_MES_IPAddress, SysConfigConst.WCSCancelinventory);      //鑾峰彇鍒皐cs鍏ㄩ儴绫诲瀷鐨勬帴鍙�
+                string WCSReceiveTaskAPI = ConfigsAPIInfo.ApiAddress + ConfigsAPIInfo.ApiName;
+                if (WCSReceiveTaskAPI == null)
+                {
+                    return webResponse.Error($"浠诲姟鍙嶉MES澶辫触锛屾湭閰嶇疆MES浠诲姟瀹屾垚鍙嶉鎺ュ彛");
+                }
+                var respon = HttpHelper.Get(WCSReceiveTaskAPI, JsonConvert.SerializeObject(task.TaskNum));
+                if (respon != null)
+                {
+                    var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
+                    //    if (response.Success)
+                    //    {
+                    //        return webResponse.OK();
+                    //    }
+                    //    else
+                    //    {
+                    //        return webResponse.Error($"璋冨彇鎺ュ彛澶辫触锛屽弽棣堝弬鏁板師鍥狅細{response.Message}");
+                    //    }
+                    //}
+                    //else
+                    //{
+                    //    return webResponse.Error($"璋冨彇鎺ュ彛澶辫触锛屽弽棣堝弬鏁颁负绌�");
+                    //}
+                    if (stockmsseg > 0 && locationmsseg > 0 && taskmsseg)
+                    {
+                        _unitOfWorkManage.CommitTran();
+                        return webResponse.OK("浠诲姟鍙栨秷鎴愬姛");
+
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return webResponse.Error($"鍙栨秷浠诲姟澶辫触锛屽師鍥狅細{ex.Message}");
+            }
+            _unitOfWorkManage.RollbackTran();
+            return webResponse.Error("浠诲姟鍙栨秷澶辫触");
+        }
 
         /// <summary>
         /// 鍒涘缓璐т綅
@@ -603,5 +742,95 @@
             }
             return MESresponse($"", true);
         }
+
+
+        public static string GetLastPart(string locationCode)
+        {
+            string[] parts = locationCode.Split('-');
+            return parts[parts.Length - 1];
+        }
+
+
+        /// <summary>
+        /// 鍑哄簱
+        /// </summary>
+        /// <param name="locationCode"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public WebResponseContent chuku(string locationCode)
+        {
+
+            try
+            {
+                Dt_StockInfo dt_StockInfo =  _stockRepository.QueryFirst(x => x.LocationCode.StartsWith("SC01") && x.StockStatus == 6);
+                int result = GetLastPart(dt_StockInfo.LocationCode).ObjToInt(); // 杩斿洖 "C03"
+
+                List<Dt_Task> dt_s = new List<Dt_Task>();
+                //鐢熸垚绉诲姩浠诲姟
+                Dt_Task dt_Task = new()
+                {
+                    PalletCode = dt_StockInfo.PalletCode,
+                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                    Roadway = "SC01",
+                    TaskType = TaskOutboundTypeEnum.Outbound.ObjToInt(),
+                    TaskStatus = TaskOutStatusEnum.OutNew.ObjToInt(),
+                    SourceAddress = dt_StockInfo.LocationCode,
+                    TargetAddress = "1006",
+                    CurrentAddress = dt_StockInfo.LocationCode,
+                    NextAddress = "1006",
+                    Grade = 1,
+                    Creater = "MES",
+                    Depth = result,
+                    CreateDate = DateTime.Now,
+                    MEStaskId = "EXTASK20251020002",
+                    MESbusinessId = "EXBUS20251020002",
+                    MESsubPalletCode = dt_StockInfo.MESsubPalletCode,
+                    OutboundPlatform = "1005"
+                };
+
+                ////鍒涘缓缁勭洏淇℃伅
+                //var dt_Stock = new Dt_StockInfo
+                //{
+                //    PalletCode = dt_Task.PalletCode,
+                //    PalletType = 1,
+                //    LocationCode = locationCode,
+                //    StockStatus = 6,
+                //    Creater = "WMS",
+                //    CreateDate = DateTime.Now,
+                //    MESsubPalletCode = dt_Task.MESsubPalletCode,
+                //};
+
+                Dt_LocationInfo dt_LocationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == dt_StockInfo.LocationCode);
+                dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.InStockLock;
+                dt_StockInfo.StockStatus = 7;
+
+                bool l = _locationInfoRepository.UpdateData(dt_LocationInfo);
+                bool s = _stockRepository.UpdateData(dt_StockInfo);
+                int t = BaseDal.AddData(dt_Task);
+                bool ss = s.ObjToBool();
+                bool tt = t.ObjToBool();
+
+
+                if (!l && !ss && tt)
+                {
+                    _unitOfWorkManage.RollbackTran();
+                }
+
+                dt_s.Add(dt_Task);
+                var respon = PushTasksToWCS(dt_s, "");
+                if (respon.Status)
+                {
+                    _unitOfWorkManage.CommitTran();  //鎻愪氦浜嬪姟
+                    return WebResponseContent.Instance.OK();
+                }
+                return WebResponseContent.Instance.Error();
+            }
+            catch
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error();
+
+            }
+        }
     }
 }

--
Gitblit v1.9.3