From 7086c88c6c080aa9ff15664c5c97aee7bbcdc55b Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期三, 05 三月 2025 16:56:11 +0800
Subject: [PATCH] 阻焊仓堆垛机对接

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs |  489 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 411 insertions(+), 78 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
index 6ca6a41..9fce273 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs"
@@ -28,6 +28,7 @@
 using System.Reflection.Metadata;
 using WIDESEA_DTO.Task;
 using WIDESEA_DTO.Stock;
+using SqlSugar;
 
 namespace WIDESEA_TaskInfoService
 {
@@ -530,7 +531,14 @@
                 List<Dt_MesPPOutboundOrderDetail> mesPPOutboundOrderDetail = new List<Dt_MesPPOutboundOrderDetail>();
                 foreach (var item in model.Carriers)
                 {
-                    mesPPOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPOutboundOrderDetail>(item));
+                    //mesPPOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPOutboundOrderDetail>(item));
+                    Dt_MesPPOutboundOrderDetail dt_MesPPOutboundOrderDetail = new Dt_MesPPOutboundOrderDetail
+                    {
+                        CarrierCode = item.CarrierCode,
+                        Warehouse = item.Warehouse,
+                        OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt()
+                    };
+                    mesPPOutboundOrderDetail.Add(dt_MesPPOutboundOrderDetail);
                 }
                 Dt_MesPPOutboundOrder mesOutboundOrder = new Dt_MesPPOutboundOrder()
                 {
@@ -542,8 +550,8 @@
                     Unit = model.Unit,//PP闇�瑕佽浆鎹㈡垚绫�(闇�姹傚钩鏂�(PNL鏁�*闈㈢Н)/瀹藉害)
                     Width = model.Width,
                     TargetAddressCode = model.TargetAddressCode,
-                    OrderType = TaskTypeEnum.MesHandPickOutbound.ObjToInt(),
                     OrderStatus = OutOrderStatusEnum.鏈紑濮�.ObjToInt(),
+                    OrderType = OutOrderTypeEnum.Issue.ObjToInt(),
                     WarehouseId = warehouse.WarehouseId,
                     Details = mesPPOutboundOrderDetail
                 };
@@ -555,7 +563,7 @@
                 //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                 //    List<Dt_LocationInfo>? locationInfos = null;
                 //    {
-                (List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
+                //(List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder);
                 //        if (result.Item1 != null && result.Item1.Count > 0)
                 //        {
                 //            tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
@@ -645,12 +653,14 @@
                 {
                     CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                     TaskNo = model.TaskNo,
-                    OrderType = TaskTypeEnum.MesOutbound.ObjToInt(),
+                    OrderType = OutOrderTypeEnum.Issue.ObjToInt(),
                     OrderStatus = OutOrderStatusEnum.鏈紑濮�.ObjToInt(),
                     WarehouseId = warehouse.WarehouseId,
                     Details = mesPPCutOutboundOrderDetail,
                 };
+                _unitOfWorkManage.BeginTran();
                 Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand();
+                _unitOfWorkManage.CommitTran();
                 #region
                 //List<Dt_Task> tasks = new List<Dt_Task>();
 
@@ -710,7 +720,7 @@
             }
             catch (Exception ex)
             {
-
+                _unitOfWorkManage.RollbackTran();
                 return MesResponseContent.Instance.Error(ex.Message);
             }
         }
@@ -895,7 +905,7 @@
                 {
                     content.Content = new
                     {
-                        MaterialCode= stock.MaterielCode,
+                        MaterialCode = stock.MaterielCode,
                         Quantity = stock.StockQuantity,
                         Unit = stock.Unit,
                         Warehouse = warehouse.WarehouseCode,
@@ -980,8 +990,11 @@
             return MesResponseContent.Instance.OK();
         }
 
+
+
+
         /// <summary>
-        /// 鐢熸垚鍑哄簱浠诲姟
+        /// 鐢熸垚PP澶у嵎鍑哄簱浠诲姟
         /// </summary>
         /// <param name="keys">鍑哄簱鍗曟槑缁嗕富閿�</param>
         /// <returns></returns>
@@ -996,7 +1009,7 @@
                 List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
                 List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
 
-                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = MESPPOutboundTaskDataHandle(keys);
+                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, Dt_MesPPOutboundOrder mesPPOutboundOrder) result = MESPPOutboundTaskDataHandle(keys);
                 if (result.Item2 != null && result.Item2.Count > 0)
                 {
                     stockInfos.AddRange(result.Item2);
@@ -1017,13 +1030,131 @@
                 {
                     tasks.AddRange(result.Item1);
                 }
+                if (result.mesPPOutboundOrder != null)
+                {
 
-                WebResponseContent content = MESPPGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
+                }
+
+                WebResponseContent content = MESPPGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, result.mesPPOutboundOrder);
                 return content;
             }
             catch (Exception ex)
             {
                 _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// PP澶у嵎鍑哄簱浠诲姟鏁版嵁澶勭悊
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, Dt_MesPPOutboundOrder mesPPOutboundOrder) MESPPOutboundTaskDataHandle(int[] keys)
+        {
+            List<Dt_Task> tasks = new List<Dt_Task>();
+            List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList();
+            if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
+            {
+                throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+            }
+            if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
+            {
+                throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�");
+            }
+            List<Dt_StockInfo>? stockInfos = null;
+            List<Dt_MesPPOutboundOrderDetail>? orderDetails = null;
+            List<Dt_OutStockLockInfo>? outStockLockInfos = null;
+            List<Dt_LocationInfo>? locationInfos = null;
+            Dt_MesPPOutboundOrder? mesPPOutboundOrders = null;
+            if (outboundOrderDetails.FirstOrDefault().OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+            {
+                (List<Dt_StockInfo>, List<Dt_MesPPOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>, Dt_MesPPOutboundOrder mesPPOutboundOrder) result = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
+                if (result.Item1 != null && result.Item1.Count > 0)
+                {
+                    Dt_MesPPOutboundOrder outboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
+                    TaskTypeEnum typeEnum = outboundOrder.OrderType switch
+                    {
+                        (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
+                        (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
+                        (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
+                        _ => new TaskTypeEnum()
+                    };
+                    tasks = GetTasks(result.Item1, typeEnum);
+                    result.Item2.ForEach(x =>
+                    {
+                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                    });
+                    result.Item3.ForEach(x =>
+                    {
+                        x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt();
+                    });
+
+                    stockInfos = result.Item1;
+                    orderDetails = result.Item2;
+                    outStockLockInfos = result.Item3;
+                    locationInfos = result.Item4;
+                    mesPPOutboundOrders = result.mesPPOutboundOrder;
+                }
+                else
+                {
+                    throw new Exception("鏃犲簱瀛�");
+                }
+            }
+            //else
+            //{
+            //    List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetails.oi, OutLockStockStatusEnum.宸插垎閰�);
+            //    if (stockLockInfos != null && stockLockInfos.Count > 0)
+            //    {
+            //        List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
+            //        tasks = GetTasks(stocks);
+            //    }
+            //}
+
+            return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos, mesPPOutboundOrders);
+        }
+
+        /// <summary>
+        /// PP骞冲簱鐩存帴鍑哄簱
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
+        public WebResponseContent PPGeneratePKOutboundTask(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews)
+        {
+            try
+            {
+                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPOutboundTaskDataHandle(orderDetailId, stockSelectViews);
+
+                WebResponseContent content = PPGenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
+
+                return content;
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+        /// <summary>
+        /// PP绔嬪簱灏忓嵎鐩存帴鍑哄簱
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
+        public WebResponseContent PPCutOutGenerateOutboundTasks(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews)
+        {
+            try
+            {
+                (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPOutboundTaskDataHandle(orderDetailId, stockSelectViews);
+
+                WebResponseContent content = PPGenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5);
+
+                return content;
+            }
+            catch (Exception ex)
+            {
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
@@ -1035,85 +1166,68 @@
         /// <param name="stockSelectViews"></param>
         /// <returns></returns>
         /// <exception cref="Exception"></exception>
-        public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) MESPPOutboundTaskDataHandle(int[] keys)
+        public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) PPOutboundTaskDataHandle(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews)
         {
             List<Dt_Task> tasks = new List<Dt_Task>();
-            //List<Dt_MesPPOutboundOrderDetail> outboundOrderDetailss = _outboundService.MesPPOutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.Id));
+            Dt_MesPPCutOutboundOrderDetail outboundOrderDetail = _outboundService.MesPPCutOutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
 
-            //List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList();
-            //List<Dt_MesPPOutboundOrder> mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => keys.Contains(10)).ToList();
-            Dt_MesPPOutboundOrderDetail outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).First();
-            Dt_MesPPOutboundOrder mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => x.Id == 10).First();
-            //if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
-            //{
-            //    throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
-            //}
-            //if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
-            //{
-            //    throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�");
-            //}
+            if (outboundOrderDetail == null)
+            {
+                throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+            }
+
+            if (stockSelectViews.Sum(x => x.UseableQuantity) > outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity)
+            {
+                throw new Exception("閫夋嫨鏁伴噺瓒呭嚭鍗曟嵁鏁伴噺");
+            }
             List<Dt_StockInfo>? stockInfos = null;
-            List<Dt_MesPPOutboundOrderDetail>? orderDetails = null;
+            Dt_MesPPCutOutboundOrderDetail? orderDetail = null;
             List<Dt_OutStockLockInfo>? outStockLockInfos = null;
             List<Dt_LocationInfo>? locationInfos = null;
-            //if (outboundOrderDetails == OrderDetailStatusEnum.New.ObjToInt())
+            if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
             {
-                //(List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesPPOutboundOrder);
-                //(List<Dt_StockInfo>, List<Dt_MesPPOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
-                (List<Dt_StockInfo>, Dt_MesPPOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result1 = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
-                //if (result.Item1 != null && result.Item1.Count > 0)
-                //{
-                //    Dt_MesPPOutboundOrder outboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
-                //    TaskTypeEnum typeEnum = outboundOrder.OrderType switch
-                //    {
-                //        (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
-                //        (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
-                //        (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
-                //        _ => new TaskTypeEnum()
-                //    };
-                //    tasks = GetTasks(result.Item1, typeEnum);
-                //    result.Item2.ForEach(x =>
-                //    {
-                //        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
-                //    });
-                //    result.Item3.ForEach(x =>
-                //    {
-                //        x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt();
-                //    });
+                (List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPCutOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews);
+                if (result.Item1 != null && result.Item1.Count > 0)
+                {
+                    Dt_MesPPCutOutboundOrder outboundOrder = _outboundService.MesPPCutOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId);
+                    TaskTypeEnum typeEnum = outboundOrder.OrderType switch
+                    {
+                        (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
+                        (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
+                        (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
+                        _ => new TaskTypeEnum()
+                    };
+                    tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound);
+                    result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                    result.Item3.ForEach(x =>
+                    {
+                        x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt();
+                    });
 
-                //    stockInfos = result.Item1;
-                //    orderDetails = result.Item2;
-                //    outStockLockInfos = result.Item3;
-                //    locationInfos = result.Item4;
-                //}
-                //else
-                //{
-                //    throw new Exception("鏃犲簱瀛�");
-                //}
+                    stockInfos = result.Item1;
+                    orderDetail = result.Item2;
+                    outStockLockInfos = result.Item3;
+                    locationInfos = result.Item4;
+                }
+                else
+                {
+                    throw new Exception("鏃犲簱瀛�");
+                }
             }
-            //else
-            //{
-            //    List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.宸插垎閰�);
-            //    if (stockLockInfos != null && stockLockInfos.Count > 0)
-            //    {
-            //        List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
-            //        tasks = GetTasks(stocks);
-            //    }
-            //}
+            else
+            {
+                List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.宸插垎閰�);
+                if (stockLockInfos != null && stockLockInfos.Count > 0)
+                {
+                    List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
+                    tasks = GetTasks(stocks, TaskTypeEnum.Outbound);
+                }
+            }
 
-            return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos);
+            return (tasks, stockInfos, orderDetail == null ? null : new List<Dt_MesPPCutOutboundOrderDetail> { orderDetail }, outStockLockInfos, locationInfos);
         }
 
-        /// <summary>
-        /// 鐢熸垚鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴�
-        /// </summary>
-        /// <param name="tasks"></param>
-        /// <param name="stockInfos"></param>
-        /// <param name="outboundOrderDetails"></param>
-        /// <param name="outStockLockInfos"></param>
-        /// <param name="locationInfos"></param>
-        /// <returns></returns>
-        public WebResponseContent MESPPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
+        public WebResponseContent PPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPCutOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
         {
             try
             {
@@ -1126,7 +1240,224 @@
                     {
                         x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
                     });
-                    WebResponseContent content = _outboundService.MesPPOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
+                    WebResponseContent content = _outboundService.MesPPCutOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
+                    if (!content.Status)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return content;
+                    }
+                }
+                else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
+                {
+                    outboundOrderDetails.ForEach(x =>
+                    {
+                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                    });
+
+                    _outboundService.MesPPCutOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
+                }
+                _unitOfWorkManage.CommitTran();
+                PushTasksToWCS(tasks);
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+
+        }
+        #region
+        /// <summary>
+        /// 鐢熸垚PP灏忓嵎鍑哄簱浠诲姟
+        /// </summary>
+        /// <param name="keys">鍑哄簱鍗曟槑缁嗕富閿�</param>
+        /// <returns></returns>
+        //public WebResponseContent PPCutOutGenerateOutboundTasks(int[] keys)
+        //{
+        //    try
+        //    {
+        //        List<Dt_Task> tasks = new List<Dt_Task>();
+        //        List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>();
+        //        List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
+        //        List<Dt_MesPPCutOutboundOrderDetail> outboundOrderDetails = new List<Dt_MesPPCutOutboundOrderDetail>();
+        //        List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+        //        List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+
+        //        (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPCutOutboundTaskDataHandle(keys);
+        //        if (result.Item2 != null && result.Item2.Count > 0)
+        //        {
+        //            stockInfos.AddRange(result.Item2);
+        //        }
+        //        if (result.Item3 != null && result.Item3.Count > 0)
+        //        {
+        //            outboundOrderDetails.AddRange(result.Item3);
+        //        }
+        //        if (result.Item4 != null && result.Item4.Count > 0)
+        //        {
+        //            outStockLockInfos.AddRange(result.Item4);
+        //        }
+        //        if (result.Item5 != null && result.Item5.Count > 0)
+        //        {
+        //            locationInfos.AddRange(result.Item5);
+        //        }
+        //        if (result.Item1 != null && result.Item1.Count > 0)
+        //        {
+        //            tasks.AddRange(result.Item1);
+        //        }
+
+        //        WebResponseContent content = PPCutOutGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos);
+        //        return content;
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        _unitOfWorkManage.RollbackTran();
+        //        return WebResponseContent.Instance.Error(ex.Message);
+        //    }
+        //}
+
+        ///// <summary>
+        ///// PP灏忓嵎鍑哄簱浠诲姟鏁版嵁澶勭悊
+        ///// </summary>
+        ///// <param name="orderDetailId"></param>
+        ///// <param name="stockSelectViews"></param>
+        ///// <returns></returns>
+        ///// <exception cref="Exception"></exception>
+        //public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) PPCutOutboundTaskDataHandle(int[] keys)
+        //{
+        //    List<Dt_Task> tasks = new List<Dt_Task>();
+        //    List<Dt_MesPPCutOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPCutOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList();
+        //    if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
+        //    {
+        //        throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+        //    }
+        //    if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
+        //    {
+        //        throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�");
+        //    }
+        //    List<Dt_StockInfo>? stockInfos = null;
+        //    List<Dt_MesPPCutOutboundOrderDetail>? orderDetails = null;
+        //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
+        //    List<Dt_LocationInfo>? locationInfos = null;
+        //    if (outboundOrderDetails.FirstOrDefault().OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+        //    {
+        //        (List<Dt_StockInfo>, List<Dt_MesPPCutOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPCutOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails);
+        //        if (result.Item1 != null && result.Item1.Count > 0)
+        //        {
+        //            Dt_MesPPCutOutboundOrder outboundOrder = _outboundService.MesPPCutOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
+        //            //TaskTypeEnum typeEnum = outboundOrder.OrderType switch
+        //            //{
+        //            //    (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound,
+        //            //    (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate,
+        //            //    (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality,
+        //            //    _ => new TaskTypeEnum()
+        //            //};
+        //            tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound);
+        //            result.Item2.ForEach(x =>
+        //            {
+        //                x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+        //            });
+        //            result.Item3.ForEach(x =>
+        //            {
+        //                x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt();
+        //            });
+
+        //            stockInfos = result.Item1;
+        //            orderDetails = result.Item2;
+        //            outStockLockInfos = result.Item3;
+        //            locationInfos = result.Item4;
+        //        }
+        //        else
+        //        {
+        //            throw new Exception("鏃犲簱瀛�");
+        //        }
+        //    }
+        //    //else
+        //    //{
+        //    //    List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetails.OrderId, OutLockStockStatusEnum.宸插垎閰�);
+        //    //    if (stockLockInfos != null && stockLockInfos.Count > 0)
+        //    //    {
+        //    //        List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList());
+        //    //        tasks = GetTasks(stocks);
+        //    //    }
+        //    //}
+
+        //    return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos);
+        //}
+
+        ///// <summary>
+        ///// 鐢熸垚PP灏忓嵎鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴�
+        ///// </summary>
+        ///// <param name="tasks"></param>
+        ///// <param name="stockInfos"></param>
+        ///// <param name="outboundOrderDetails"></param>
+        ///// <param name="outStockLockInfos"></param>
+        ///// <param name="locationInfos"></param>
+        ///// <returns></returns>
+        //public WebResponseContent PPCutOutGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPCutOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
+        //{
+        //    try
+        //    {
+        //        _unitOfWorkManage.BeginTran();
+
+        //        BaseDal.AddData(tasks);
+        //        if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
+        //        {
+        //            stockInfos.ForEach(x =>
+        //            {
+        //                x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
+        //            });
+        //            WebResponseContent content = _outboundService.MesPPCutOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
+
+        //            if (!content.Status)
+        //            {
+        //                _unitOfWorkManage.RollbackTran();
+        //                return content;
+        //            }
+        //        }
+        //        else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
+        //        {
+        //            outboundOrderDetails.ForEach(x =>
+        //            {
+        //                x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+        //            });
+
+        //            _outboundService.MesPPCutOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
+        //        }
+        //        _unitOfWorkManage.CommitTran();
+        //        PushTasksToWCS(tasks,"AGV_PP");
+        //        return WebResponseContent.Instance.OK();
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        _unitOfWorkManage.RollbackTran();
+        //        return WebResponseContent.Instance.Error(ex.Message);
+        //    }
+        //}
+        #endregion
+        /// <summary>
+        /// 鐢熸垚PP澶у嵎鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴�
+        /// </summary>
+        /// <param name="tasks"></param>
+        /// <param name="stockInfos"></param>
+        /// <param name="outboundOrderDetails"></param>
+        /// <param name="outStockLockInfos"></param>
+        /// <param name="locationInfos"></param>
+        /// <returns></returns>
+        public WebResponseContent MESPPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null, Dt_MesPPOutboundOrder? mesPPOutboundOrder = null)
+        {
+            try
+            {
+                _unitOfWorkManage.BeginTran();
+
+                BaseDal.AddData(tasks);
+                if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
+                {
+                    stockInfos.ForEach(x =>
+                    {
+                        x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
+                    });
+                    WebResponseContent content = _outboundService.MesPPOutboundOrderDetailService.LockOutboundStockDataUpdate(mesPPOutboundOrder, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
 
                     if (!content.Status)
                     {
@@ -1152,8 +1483,10 @@
                 _unitOfWorkManage.RollbackTran();
                 return WebResponseContent.Instance.Error(ex.Message);
             }
-
         }
 
+
+
+
     }
 }

--
Gitblit v1.9.3