From 06eb604f71605c47f015b88b1620b72b6f69df8c Mon Sep 17 00:00:00 2001
From: helongyang <647556386@qq.com>
Date: 星期一, 22 九月 2025 05:20:41 +0800
Subject: [PATCH] 功能增加,代码优化

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  269 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 241 insertions(+), 28 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index c5fe062..5677732 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -139,29 +139,6 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
-        /// <summary>
-        /// 鏀捐揣瀹屾垚
-        /// </summary>
-        /// <param name="code"></param>
-        /// <returns></returns>
-        public WebResponseContent PutFinish(string code, string barCode = "", string taskNum = "")
-        {
-            try
-            {
-                string url = AppSettings.Get("WCS");
-                if (string.IsNullOrEmpty(url))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢CSAApi鍦板潃,璇锋鏌ラ厤缃枃浠�");
-                }
-                string response = HttpHelper.Post($"{url}/api/CTU_AGV/PutFinish?code={code}&barCode={barCode}&taskNum={taskNum}" );
-
-                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒");
-            }
-            catch (Exception ex)
-            {
-                return WebResponseContent.Instance.Error(ex.Message);
-            }
-        }
 
         public WebResponseContent AGVTasks(SaveModel saveModel)
         {
@@ -266,6 +243,7 @@
                 if (task.TaskType == TaskTypeEnum.MesPalletLargeReturn.ObjToInt() || task.TaskType == TaskTypeEnum.MesPalletSmallReturn.ObjToInt())
                 {
                     task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                    FeedBackWCSTaskCompleted(taskNum);
                     _unitOfWorkManage.BeginTran();
                     BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚);
                     _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
@@ -294,6 +272,7 @@
                 {
                     stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
                     task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                    FeedBackWCSTaskCompleted(taskNum);
                     stockInfo.Details.ForEach(x =>
                     {
                         x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
@@ -1179,7 +1158,7 @@
             return content;
         }
 
-        public WebResponseContent InboundTaskHandCancel(int taskNum, int warehouseId)
+        public WebResponseContent InboundTaskHandCancel(int taskNum)
         {
             try
             {
@@ -1188,10 +1167,70 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅");
                 }
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
+                if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString())
+                {
+                    if(task.TaskType == TaskTypeEnum.EmptyProductBack.ObjToInt())
+                    {
+                        task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                        FeedBackWCSTaskHandCancel(taskNum);
+                        _unitOfWorkManage.BeginTran();
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK();
+                    }
+                    Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
+                    if (proStockInfo == null)
+                    {
+                        return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅");
+                    }
+                    Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                    if (prolocationInfo != null)
+                    {
+                        if (prolocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+                        {
+                            return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+                        }
+                        prolocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                    }
+                    if(task.TaskType == TaskTypeEnum.InProduct.ObjToInt())
+                    {
+                        task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                        _unitOfWorkManage.BeginTran();
+                        FeedBackWCSTaskHandCancel(taskNum);
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                        _stockService.ProStockInfoService.Repository.DeleteAndMoveIntoHty(proStockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                        _stockService.ProStockInfoDetailService.Repository.DeleteAndMoveIntoHty(proStockInfo.proStockInfoDetails, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                        _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK();
+                    }
+                    else
+                    {
+                        proStockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+                        proStockInfo.proStockInfoDetails.ForEach(x =>
+                        {
+                            x.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+                        });
+                        task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                        _unitOfWorkManage.BeginTran();
+                        FeedBackWCSTaskHandCancel(taskNum);
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                        _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo);
+                        _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails);
+                        _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK();
+                    }
+                }
                 Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First();
                 if (stockInfo == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
+                }
+                if (!string.IsNullOrEmpty(stockInfo.LocationCode))
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
                 }
                 if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt())
                 {
@@ -1201,6 +1240,7 @@
                 {
                     task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
                     _unitOfWorkManage.BeginTran();
+                    FeedBackWCSTaskHandCancel(taskNum);
                     BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
                     _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
                     _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
@@ -1214,17 +1254,190 @@
                     {
                         return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
                     }
-
-                    LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
-                    locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                    locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                 }
+                Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
+                Dt_InboundOrderDetail? inboundOrderDetail = null;
+                Dt_ReturnOrder? returnOrder = null;
+                //鏍囧噯鍏ュ簱娴佺▼鏌ユ壘鍏ュ簱鍗曟嵁
+                if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()&&(task.WarehouseId == WarehouseEnum.HA152.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA58.ObjToInt()))
+                {
+                    inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo);
+                    foreach (var item in stockInfo.Details)
+                    {
+                        if (inboundOrderDetail == null)
+                        {
+                            continue;
+                        }
+                        inboundOrderDetail.ReceiptQuantity -= item.StockQuantity;
+                    }
+                    //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟
+                    if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt())
+                    {
+                        returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First();
+                        returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt();
+                        foreach (var item in inboundOrder.Details)
+                        {
+                            Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode);
+                            if (returnOrderDetail != null)
+                            {
+                                returnOrderDetail.ReturnQty -= item.ReceiptQuantity;
+                            }
+                        }
+                    }
+                }
+                if(task.WarehouseId == WarehouseEnum.HA154.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA152.ObjToInt() || task.WarehouseId == WarehouseEnum.HA58.ObjToInt())
+                {
+                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                }else
+                {
+                    stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt();
+                }
+
+                task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                FeedBackWCSTaskHandCancel(taskNum);
+                _unitOfWorkManage.BeginTran();
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
+                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+                if (inboundOrder != null && inboundOrderDetail != null)
+                {
+                    _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
+                    _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail);
+                }
+                if (returnOrder != null)
+                {
+                    _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder);
+                    _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details);
+                }
+                _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
-                
+
             }
             catch(Exception ex)
             {
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        public WebResponseContent OutboundTaskHandCancel(int taskNum)
+        {
+            try
+            {
+                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                if (task == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅");
+                }
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
+                if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString())
+                {
+                   
+                    Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
+                    if (proStockInfo == null)
+                    {
+                        return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅");
+                    }
+                    Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                    if (prolocationInfo != null)
+                    {
+                        if (prolocationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt())
+                        {
+                            return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+                        }
+                        prolocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                    }
+                    proStockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                    proStockInfo.proStockInfoDetails.ForEach(x =>
+                    {
+                        x.ProOutDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                        x.OutboundQuantity = 0;
+                    });
+                    task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                    _unitOfWorkManage.BeginTran();
+                    FeedBackWCSTaskHandCancel(taskNum);
+                    BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎);
+                    _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo);
+                    _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails);
+                    _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId);
+                    _unitOfWorkManage.CommitTran();
+                    return WebResponseContent.Instance.OK();
+                }
+                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First();
+                if (stockInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
+                }
+                if (string.IsNullOrEmpty(stockInfo.LocationCode))
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ墭鐩樺湪绔嬪簱鏈粦瀹氳揣浣�");
+                }
+                if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌鎵樼洏搴撳瓨鏄庣粏淇℃伅");
+                }
+                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                if (locationInfo != null)
+                {
+                    if (locationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt())
+                    {
+                        return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+                    }
+                    locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                }
+                
+                stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                stockInfo.Details.ForEach(x =>
+                {
+                    x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                    x.OutboundQuantity = 0;
+                });
+                task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+                FeedBackWCSTaskHandCancel(taskNum);
+                _unitOfWorkManage.BeginTran();
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎);
+                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
+                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+                _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent RelocationTaskHandCancel(Dt_Task task)
+        {
+            Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+            if (stockInfo == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅");
+            }
+
+            Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+            if (locationInfoStart == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璧风偣璐т綅淇℃伅");
+            }
+
+            Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+            if (locationInfoEnd == null)
+            {
+                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
+            }
+            task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt();
+            FeedBackWCSTaskHandCancel(task.TaskNum);
+            _unitOfWorkManage.BeginTran();
+            stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+            _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
+            _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
+            BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐鍒犻櫎 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩鍒犻櫎);
+            _unitOfWorkManage.CommitTran();
+            return WebResponseContent.Instance.OK();
+        }
     }
 }

--
Gitblit v1.9.3