From c827fe7b0c5b3b444d76ba0d96a2649c764630dd Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 14 十一月 2024 16:36:08 +0800
Subject: [PATCH] 修改WCS、WMS出入库逻辑

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |   78 ++++++++++++++++++++++++++++++++------
 1 files changed, 65 insertions(+), 13 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 72bb153..682c77f 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"
@@ -108,7 +108,11 @@
             }
 
         }
-
+        /// <summary>
+        /// 鍏ュ簱浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="task"></param>
+        /// <returns></returns>
         public WebResponseContent InboundTaskCompleted(Dt_Task task)
         {
             Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
@@ -188,7 +192,11 @@
 
             return (true, "鎴愬姛");
         }
-
+        /// <summary>
+        /// 鍑哄簱浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="task"></param>
+        /// <returns></returns>
         public WebResponseContent OutboundTaskCompleted(Dt_Task task)
         {
             Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
@@ -212,6 +220,11 @@
             return OnOutboundTaskCompleted?.Invoke(task) ?? WebResponseContent.Instance.OK();
         }
 
+        /// <summary>
+        /// 鎵樼洏鍑哄簱浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="task"></param>
+        /// <returns></returns>
         public WebResponseContent PalletOutboundTaskCompleted(Dt_Task task)
         {
             Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
@@ -255,6 +268,9 @@
                         case (int)TaskInStatusEnum.SC_InFinish:
                             content = UpdateTaskStatusInFinish(task);
                             break;
+                        case (int)TaskInStatusEnum.Car_InFinish:
+                            content = InboundTaskCompleted(task);
+                            break;
                         default:
                             break;
                     }
@@ -266,7 +282,7 @@
                     task.TaskState = nextStatus;
                     switch (nextStatus)
                     {
-                        case (int)TaskOutStatusEnum.SC_OutFinish:
+                        case (int)TaskOutStatusEnum.SC_OutFinish://鏇存柊璐т綅淇℃伅
                             break;
                         default:
                             break;
@@ -279,6 +295,7 @@
             }
             return content;
         }
+
         /// <summary>
         /// 鏇存柊浠诲姟鐘舵�佸畬鎴�
         /// </summary>
@@ -289,24 +306,59 @@
             WebResponseContent content = new WebResponseContent().OK();
             try
             {
-                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
-                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);//缁勭洏搴撳瓨
+                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);//璐т綅
                 var result = CheckCompleted(stockInfo, locationInfo);
                 if (!result.Item1) throw new Exception(result.Item2);
+
+
                 if (stockInfo.StockStatus != StockStatusEmun.鍏ュ簱涓�.ObjToInt()) throw new Exception($"鎵樼洏[{task.PalletCode}],璇ョ粍鐩樼姸鎬佷笉鍙叆搴�");
-                stockInfo.StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt();
-                locationInfo.CurrentQty++;
-                locationInfo.LocationStatus = locationInfo.MaxQty - locationInfo.CurrentQty == 0 ? LocationStatusEnum.Fullload.ObjToInt() : LocationStatusEnum.InStock.ObjToInt();
-                using (TransactionScope scope = new TransactionScope())
+                Dt_StockInfoDetail stockInfoDetail = stockInfo.Details.FirstOrDefault(x => x.StockId == stockInfo.Id);
+
+                #region 鍏ュ簱鍗�
+                Dt_InboundOrder inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(stockInfoDetail.OrderNo);
+                if (inboundOrder == null || inboundOrder.Details == null) throw new Exception($"鏈壘鍒版墭鐩榌{task.PalletCode}]鐨勫叆搴撳崟鏄庣粏淇℃伅");
+                Dt_InboundOrderDetail inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfoDetail.BatchNo && x.MaterielCode == stockInfoDetail.MaterielCode);
+                inboundOrderDetail.OverInQuantity++;
+                inboundOrderDetail.OrderDetailStatus = inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity ? OrderDetailStatusEnum.Over.ObjToInt() : OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
+
+                if (inboundOrder.Details.FirstOrDefault(x => x.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) == null)
                 {
-                    BaseDal.UpdateData(task);
-                    _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
-                    _stockService.StockInfoService.Repository.UpdateData(stockInfo);
-                    scope.Complete();
+                    inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
                 }
+                else if (inboundOrder.OrderStatus == InboundStatusEnum.鏈紑濮�.ObjToInt())
+                {
+                    inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱涓�.ObjToInt();
+                }
+                #endregion
+
+                #region 鍒ゆ柇鏄惁涓哄爢鍨涙満鍙栨斁璐т綅
+                if(task.IsPickPlace)
+                {
+
+                }
+                #endregion
+                //List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.Repository.LocationCodesGetStockInfos(stockInfo.LocationCode).Where(x => x.StockStatus == StockStatusEmun.宸插叆搴�.ObjToInt()).ToList();
+                //stockInfo.SerialNumber = stockInfos.Count + 1;
+                stockInfo.InDate= DateTime.Now;
+                stockInfo.StockStatus = StockStatusEmun.宸插叆搴�.ObjToInt();
+                stockInfoDetail.Status = StockStatusEmun.宸插叆搴�.ObjToInt();
+                int beforeStatus = locationInfo.LocationStatus;
+                locationInfo.LocationStatus = locationInfo.MaxQty - locationInfo.CurrentQty == 0 ? LocationStatusEnum.Fullload.ObjToInt() : LocationStatusEnum.InStock.ObjToInt();
+
+                Db.Ado.BeginTran();
+                BaseDal.UpdateData(task);
+                _basicService.LocationInfoService.Repository.UpdateData(locationInfo);
+                _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+                _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail);
+                _inboundService.InbounOrderService.Repository.UpdateData(inboundOrder);
+                _inboundService.InboundOrderDetailService.Repository.UpdateData(inboundOrderDetail);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockChangeType.Inbound.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
+                Db.Ado.CommitTran();
             }
             catch (Exception ex)
             {
+                Db.Ado.RollbackTran();
                 content.Error(ex.Message);
             }
             return content;

--
Gitblit v1.9.3