From fb745c842df36edc5101291a7f239c11c97bcc2f Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期四, 11 九月 2025 16:46:33 +0800
Subject: [PATCH] 最新代码更新,BST,MES部分

---
 项目代码/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs |   97 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 90 insertions(+), 7 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs"
index 9d625d1..b5470ba 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs"
@@ -6,14 +6,16 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_BasicRepository;
+using WIDESEA_Common.MaterielEnum;
 using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.WareHouseEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO;
-using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.ERP;
 using WIDESEA_IBasicRepository;
 using WIDESEA_IInboundRepository;
 using WIDESEA_IInboundService;
@@ -57,43 +59,124 @@
                 List<BSTPurchaseOrderDTO> bSTPurchaseOrderDTOsUpdate = bSTPurchaseOrderDTOs.Where(x => x.Way == 2).ToList();
                 //鍒犻櫎
                 List<BSTPurchaseOrderDTO> bSTPurchaseOrderDTOsDel = bSTPurchaseOrderDTOs.Where(x => x.Way == 3).ToList();
-
+                //鑾峰彇鎵�鏈夌墿鏂� 
+                List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.鑰佸巶.ObjToInt() && x.MaterialSourceId != 0);
+                //鑾峰彇鎵�鏈変緵搴斿晢
+                List<Dt_SupplierInfo> supplierInfos = _basicRepository.SupplierInfoRepository.QueryData(x => x.InvOrgId == MaterielInvOrgEnum.鑰佸巶.ObjToInt());
+                
                 List<Dt_PurchaseBSTOrder> purchaseAddBSTOrders = new List<Dt_PurchaseBSTOrder>();
                 List<Dt_PurchaseBSTOrder> purchaseUpdateBSTOrders = new List<Dt_PurchaseBSTOrder>();
                 List<Dt_PurchaseBSTOrder> purchaseDeleteBSTOrders = new List<Dt_PurchaseBSTOrder>();
+                List<Dt_PurchaseBSTOrderDetail> purchaseBSTOrderDetailsDel = new List<Dt_PurchaseBSTOrderDetail>();
+                //鏂板
                 if (bSTPurchaseOrderDTOsAdd.Count>0)
                 {
-                    //鍒ゆ柇閲嶅鎻掑叆
+                    //鍒ゆ柇渚涘簲鍟�
+                    BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsAdd.FirstOrDefault(x => !supplierInfos.Select(x=>x.SupplierCode).Contains(x.VendNo));
+                    if (bSTPurchaseOrderDTO != null)
+                    {
+                        return content.Error($"閲囪喘{nameof(BSTPurchaseOrderDTO.PaperReceiptNo)}:{bSTPurchaseOrderDTO.PaperReceiptNo}渚涘簲鍟�:{bSTPurchaseOrderDTO.VendNo}涓嶅瓨鍦�");
+                    }
+                    //鍒ゆ柇鍗曟嵁
                     Dt_PurchaseBSTOrder? ExistAddPurchase = OldpurchaseBSTOrders.FirstOrDefault(x => bSTPurchaseOrderDTOsAdd.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId));
                     if (ExistAddPurchase != null)
                     {
                         return content.Error($"閲囪喘鏀惰揣Id{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{ExistAddPurchase.PaperReceiptId}宸插瓨鍦�");
                     }
+                    //楠岃瘉鏉$爜閲嶅
+                    List<Dt_PurchaseBSTOrderDetail> purchaseBSTOrderDetails = OldpurchaseBSTOrders.SelectMany(x => x.Details).ToList();
+                    List<PaperReceiptDetailsItem> paperReceiptDetailsItemsAdd = bSTPurchaseOrderDTOsAdd.SelectMany(x => x.PaperReceiptDetails).ToList();
+                    var ExistDetail = purchaseBSTOrderDetails.FirstOrDefault(x => paperReceiptDetailsItemsAdd.Select(x => x.Barcode).Contains(x.Barcode));
+                    if (ExistDetail!=null)
+                    {
+                        return content.Error($"閲囪喘鏉$爜{nameof(ExistDetail.Barcode)}:{ExistDetail.Barcode}宸插瓨鍦�");
+                    }
+                    //鍒ゆ柇鏄惁瀛樺湪鐗╂枡
+                    PaperReceiptDetailsItem? paperReceiptDetailsItem = paperReceiptDetailsItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId));
+                    if (paperReceiptDetailsItem!=null)
+                    {
+                        return content.Error($"閲囪喘鏉$爜{nameof(paperReceiptDetailsItem.Barcode)}:{paperReceiptDetailsItem.Barcode}鐗╂枡Id:{paperReceiptDetailsItem.MaterialId}涓嶅瓨鍦�");
+                    }
                     foreach (var item in bSTPurchaseOrderDTOsAdd)
                     {
+                        if (bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x=>x.PaperReceiptId== item.PaperReceiptId)!=null)
+                        {
+                            continue;
+                        }
+                        List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x=>_mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList();
                         Dt_PurchaseBSTOrder purchaseBSTOrder = _mapper.Map<Dt_PurchaseBSTOrder>(item);
+                        purchaseBSTOrder.Details = bSTOrderDetails;
                         purchaseAddBSTOrders.Add(purchaseBSTOrder);
                     }
                 }
-                
+                //鏇存柊
                 if (bSTPurchaseOrderDTOsUpdate.Count > 0)
                 {
-                    List<Dt_PurchaseBSTOrder>? ExistUpdatePurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList();
+                    //瀛樺湪鐨勯噰璐崟
+                    List<Dt_PurchaseBSTOrder>? ExistpurchaseBSTOrders = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).Distinct().ToList();
+
+                    foreach (var item in bSTPurchaseOrderDTOsUpdate)
+                    {
+                        Dt_PurchaseBSTOrder? purchaseBSTOrderUpdate = ExistpurchaseBSTOrders.FirstOrDefault(x => x.PaperReceiptId == item.PaperReceiptId);
+                        //濡傛灉璁㈠崟宸插瓨鍦ㄥ垯杩涜鏇存敼
+                        if (purchaseBSTOrderUpdate != null)
+                        {
+                            if (purchaseBSTOrderUpdate.PurchaseOrderStatus!=InOrderStatusEnum.鏈紑濮�.ObjToInt())
+                            {
+                                return content.Error($"閲囪喘{nameof(purchaseBSTOrderUpdate.PaperReceiptId)}:{purchaseBSTOrderUpdate.PaperReceiptId}璁㈠崟鍏ュ簱涓紝涓嶅彲鏇存敼");
+                            }
+                            purchaseBSTOrderDetailsDel.AddRange(purchaseBSTOrderUpdate.Details);
+                            
+                            //鏇存柊
+                            List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x => _mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList();
+                            bSTOrderDetails.ForEach(x =>
+                            {
+                                x.PurchaseBSTOrderId = purchaseBSTOrderUpdate.Id;
+                            });
+                            purchaseBSTOrderUpdate.Details = bSTOrderDetails;
+                            purchaseBSTOrderUpdate.PaperReceiptId = item.PaperReceiptId;
+                            purchaseBSTOrderUpdate.PaperReceiptNo = item.PaperReceiptNo;
+                            purchaseBSTOrderUpdate.VendNo = item.VendNo;
+                            purchaseBSTOrderUpdate.ReceiptDate = DateTimeOffset.FromUnixTimeMilliseconds(item.ReceiptDate).DateTime;
+                            purchaseBSTOrderUpdate.TotalProcurementLength = item.TotalProcurementLength;
+                            purchaseUpdateBSTOrders.Add(purchaseBSTOrderUpdate);
+                        }
+                        else //濡傛灉涓嶅瓨鍦ㄥ垯杩涜鏂板
+                        {
+                            List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x => _mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList();
+                            Dt_PurchaseBSTOrder purchaseBSTOrder = _mapper.Map<Dt_PurchaseBSTOrder>(item);
+                            purchaseBSTOrder.Details = bSTOrderDetails;
+                            purchaseAddBSTOrders.Add(purchaseBSTOrder);
+                        }
+                    }
+                    
+                }
+                //鍒犻櫎
+                if (bSTPurchaseOrderDTOsDel.Count>0)
+                {
+                    List<Dt_PurchaseBSTOrder>? ExistDelPurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsDel.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList();
                     //鏇存柊鐨勫崟鎹槸鍚﹀瓨鍦�
-                    if (ExistUpdatePurchase.Count == bSTPurchaseOrderDTOsUpdate.Count)
+                    if (ExistDelPurchase.Count == bSTPurchaseOrderDTOsDel.Count)
                     {
 
                     }
                     else
                     {
-                        BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x => !ExistUpdatePurchase.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId));
+                        BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsDel.FirstOrDefault(x => !ExistDelPurchase.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId));
                         return content.Error($"鏈壘鍒版寚瀹氶噰璐敹璐у崟{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{bSTPurchaseOrderDTO?.PaperReceiptId}");
                     }
                 }
+                //鏇存柊鏁版嵁
+                _unitOfWorkManage.BeginTran();
+                BaseDal.Db.InsertNav(purchaseAddBSTOrders).Include(x => x.Details).ExecuteCommand();
+                _purchaseBSTOrderDetailRepository.DeleteData(purchaseBSTOrderDetailsDel);
+                BaseDal.Db.UpdateNav(purchaseUpdateBSTOrders).Include(x => x.Details).ExecuteCommand();
+                _unitOfWorkManage.CommitTran();
                 content.OK("鎺ユ敹鎴愬姛");
             }
             catch (Exception ex)
             {
+                _unitOfWorkManage.RollbackTran();
                 content.Error(ex.Message);
             }
             return content;

--
Gitblit v1.9.3