wangxinhui
10 天以前 2aec0a99e559fb11b7046b148e5f357b3208cb66
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs
@@ -15,7 +15,7 @@
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;
@@ -67,6 +67,8 @@
                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)
                {
                    //判断供应商
@@ -83,41 +85,73 @@
                    }
                    //验证条码重复
                    List<Dt_PurchaseBSTOrderDetail> purchaseBSTOrderDetails = OldpurchaseBSTOrders.SelectMany(x => x.Details).ToList();
                    List<PaperReceiptDetailsItem> paperReceiptDetailsItems = bSTPurchaseOrderDTOsAdd.SelectMany(x => x.PaperReceiptDetails).ToList();
                    var ExistDetail = purchaseBSTOrderDetails.FirstOrDefault(x => paperReceiptDetailsItems.Select(x => x.Barcode).Contains(x.Barcode));
                    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 = paperReceiptDetailsItems.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId));
                    PaperReceiptDetailsItem? paperReceiptDetailsItem = paperReceiptDetailsItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId));
                    if (paperReceiptDetailsItem!=null)
                    {
                        return content.Error($"采购条码{nameof(ExistDetail.Barcode)}:{ExistDetail.Barcode}物料Id:{paperReceiptDetailsItem.MaterialId}不存在");
                        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();
                    //更新的单据是否存在
                    if (ExistUpdatePurchase.Count == bSTPurchaseOrderDTOsUpdate.Count)
                    {
                    //存在的采购单
                    List<Dt_PurchaseBSTOrder>? ExistpurchaseBSTOrders = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).Distinct().ToList();
                    }
                    else
                    foreach (var item in bSTPurchaseOrderDTOsUpdate)
                    {
                        BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x => !ExistUpdatePurchase.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId));
                        return content.Error($"未找到指定采购收货单{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{bSTPurchaseOrderDTO?.PaperReceiptId}");
                        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();
@@ -132,8 +166,11 @@
                        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("接收成功");
            }