From c72afdd7ece074901405158fce8df69ee56cd36e Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期日, 12 一月 2025 19:24:49 +0800
Subject: [PATCH] WMS添加指定平库出库功能

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs |  152 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 150 insertions(+), 2 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index 67f133f..acdd339 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -15,6 +15,8 @@
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.LocationEnum;
+using MailKit.Search;
+using WIDESEA_External.Model;
 
 namespace WIDESEA_TaskInfoService
 {
@@ -30,13 +32,13 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.Id==id).Includes(x=>x.Details).First();
+                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.Id == id).Includes(x => x.Details).First();
                 if (stockInfo == null)
                 {
                     return content.Error($"鏈壘鍒板簱瀛�");
                 }
                 Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
-                if (locationInfo!=null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus==LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus==StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
+                if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
                 {
                     List<Dt_Task> tasks = GetTasks(new List<Dt_StockInfo>() { stockInfo }, TaskTypeEnum.Outbound);
                     if (tasks == null || tasks.Count <= 0)
@@ -253,6 +255,152 @@
         }
 
         /// <summary>
+        /// 骞冲簱鐩存帴鍑哄簱
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
+        public WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
+        {
+            try
+            {
+                Dt_OutboundOrderDetail OrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
+
+                if (OrderDetail == null)
+                {
+                    throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+                }
+                if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+                    throw new Exception("鍑哄簱鍗曞凡瀹屾垚");
+                Dt_OutboundOrder outboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == OrderDetail.OrderId).Includes(x => x.Details).First();
+                if (outboundOrder == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撳崟淇℃伅");
+                }
+                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == outboundOrder.WarehouseId);
+                List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
+                if (outStocks.Count < 1) return WebResponseContent.Instance.Error($"搴撳瓨涓嶈冻");
+                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+                List<Dt_StockInfo> upStocks = new List<Dt_StockInfo>();
+                List<Dt_StockInfo> deStocks = new List<Dt_StockInfo>();
+                List<Dt_StockInfoDetail> upstockDetails = new List<Dt_StockInfoDetail>();
+                List<Dt_StockInfoDetail> destockDetails = new List<Dt_StockInfoDetail>();
+                outStocks.ForEach(x =>
+                {
+                    x.Details.Where(x => x.MaterielCode == OrderDetail.MaterielCode).ToList().ForEach(v =>
+                    {
+                        float OriginalQuantity = v.StockQuantity;
+                        float assignQuantity = 0;//鍒嗛厤鏁伴噺
+                        float assignAmount = OrderDetail.OrderQuantity - OrderDetail.OverOutQuantity;//寰呭嚭鏁伴噺
+                        if (assignAmount > 0)
+                        {
+                            if (v.StockQuantity >= assignAmount)
+                            {
+                                assignQuantity = assignAmount;
+                                v.StockQuantity -= assignAmount;
+                                OrderDetail.OverOutQuantity += assignAmount;
+                                OrderDetail.LockQuantity += assignAmount;
+                                upstockDetails.Add(v);
+                            }
+                            else
+                            {
+                                assignQuantity = v.StockQuantity;
+                                OrderDetail.OverOutQuantity += v.StockQuantity;
+                                OrderDetail.LockQuantity += v.StockQuantity;
+                                v.StockQuantity = 0;
+                                destockDetails.Add(v);
+                            }
+                            Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
+                            {
+                                PalletCode = x.PalletCode,
+                                AssignQuantity = assignQuantity,
+                                MaterielCode = OrderDetail.MaterielCode,
+                                BatchNo = v.BatchNo,
+                                LocationCode = x.LocationCode,
+                                MaterielName = v.MaterielName,
+                                OrderDetailId = OrderDetail.Id,
+                                OrderNo = outboundOrder.OrderNo,
+                                OrderType = outboundOrder.OrderType,
+                                OriginalQuantity = OriginalQuantity,
+                                Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt(),
+                                StockId = x.Id,
+                                TaskNum = 0,
+                                OrderQuantity = OrderDetail.OrderQuantity,
+                                Unit = OrderDetail.Unit
+                            };
+                            outStockLockInfos.Add(outStockLockInfo);
+                        }
+                    });
+                    int overCount = x.Details.Where(x => x.StockQuantity == 0).Count();
+                    if (overCount == x.Details.Count) deStocks.Add(x);
+                    else upStocks.Add(x);
+                });
+                outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt();
+                OrderDetail.OrderDetailStatus = OrderDetail.OrderQuantity > OrderDetail.OverOutQuantity ? OrderDetailStatusEnum.AssignOverPartial.ObjToInt() : OrderDetailStatusEnum.Over.ObjToInt();
+                if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+                {
+                    int overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+                    if (outboundOrder.Details.Count - 1 == overCount)
+                        outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                }
+                _unitOfWorkManage.BeginTran();
+                _outboundService.OutboundStockLockInfoService.AddData(outStockLockInfos);
+                _outboundService.OutboundOrderService.UpdateData(outboundOrder);
+                _outboundService.OutboundOrderDetailService.UpdateData(OrderDetail);
+                _stockRepository.StockInfoRepository.UpdateData(upStocks);
+                _stockRepository.StockInfoRepository.DeleteData(deStocks);
+                _stockRepository.StockInfoDetailRepository.UpdateData(upstockDetails);
+                _stockRepository.StockInfoDetailRepository.DeleteData(destockDetails);
+                _unitOfWorkManage.CommitTran();
+
+                #region 涓婃姤ERP
+                List<ERPPickModel> eRPPickModels = new List<ERPPickModel>();
+                outStockLockInfos.ForEach(x =>
+                {
+                    ERPPickItemModel pickItemModel = new ERPPickItemModel()
+                    {
+                        Lotno = x.BatchNo,
+                        Qty = x.AssignQuantity.ToString(),
+                        Location = warehouse.WarehouseCode
+                    };
+                    ERPPickModel pickModel = new ERPPickModel()
+                    {
+                        Rowindex = OrderDetail.RowNo,
+                        Material = OrderDetail.MaterielCode,
+                        Qty = pickItemModel.Qty,
+                        Dataitem = new List<ERPPickItemModel> { pickItemModel }
+                    };
+                    eRPPickModels.Add(pickModel);
+                });
+                ERPIssueItemModel issueItemModel = new ERPIssueItemModel()
+                {
+                    Pickcode = outboundOrder.UpperOrderNo,
+                    PickList = eRPPickModels
+                };
+                ERPIssueModel issueModel = new ERPIssueModel()
+                {
+                    UniqueTag = outboundOrder.Id.ToString(),
+                    Code = outboundOrder.OrderNo,
+                    WarehouseCode = warehouse.WarehouseCode,
+                    Docremark = "",
+                    Deptno = outboundOrder.DepartmentCode,
+                    Deptname = outboundOrder.DepartmentName,
+                    Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    Createuser = App.User.UserName,
+                    Issitem = new List<ERPIssueItemModel>() { issueItemModel }
+                };
+                _invokeERPService.InvokeOutStandardsApi(issueModel);
+                #endregion
+
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
         /// 鐢熸垚鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴�
         /// </summary>
         /// <param name="tasks"></param>

--
Gitblit v1.9.3