using AutoMapper; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; 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_IBasicRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; using WIDESEA_InboundRepository; using WIDESEA_Model.Models; namespace WIDESEA_InboundService { public class PurchaseBSTOrderService : ServiceBase, IPurchaseBSTOrderService { private readonly IUnitOfWorkManage _unitOfWorkManage; public IPurchaseBSTOrderRepository Repository => BaseDal; public IPurchaseBSTOrderDetailRepository _purchaseBSTOrderDetailRepository; private readonly IBasicRepository _basicRepository; private readonly ISupplierInfoRepository _supplierInfoRepository; private readonly IMaterielInfoRepository _materielInfoRepository; private readonly IMapper _mapper; public PurchaseBSTOrderService(IPurchaseBSTOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, ISupplierInfoRepository supplierInfoRepository, IMaterielInfoRepository materielInfoRepository, IPurchaseBSTOrderDetailRepository purchaseBSTOrderDetailRepository,IMapper mapper) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _basicRepository = basicRepository; _supplierInfoRepository = supplierInfoRepository; _materielInfoRepository = materielInfoRepository; _purchaseBSTOrderDetailRepository = purchaseBSTOrderDetailRepository; _mapper = mapper; } /// /// 添加老厂采购单信息 /// /// public WebResponseContent AddPurchaseBSTOrder(List bSTPurchaseOrderDTOs) { WebResponseContent content = new WebResponseContent(); try { List OldpurchaseBSTOrders = BaseDal.Db.Queryable().Includes(x=>x.Details).ToList(); //新增 List bSTPurchaseOrderDTOsAdd = bSTPurchaseOrderDTOs.Where(x => x.Way == 1).ToList(); //修改 List bSTPurchaseOrderDTOsUpdate = bSTPurchaseOrderDTOs.Where(x => x.Way == 2).ToList(); //删除 List bSTPurchaseOrderDTOsDel = bSTPurchaseOrderDTOs.Where(x => x.Way == 3).ToList(); //获取所有物料 List materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && x.MaterialSourceId != 0); //获取所有供应商 List supplierInfos = _basicRepository.SupplierInfoRepository.QueryData(x => x.InvOrgId == MaterielInvOrgEnum.老厂.ObjToInt()); List purchaseAddBSTOrders = new List(); List purchaseUpdateBSTOrders = new List(); List purchaseDeleteBSTOrders = new List(); 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 purchaseBSTOrderDetails = OldpurchaseBSTOrders.SelectMany(x => x.Details).ToList(); List paperReceiptDetailsItems = bSTPurchaseOrderDTOsAdd.SelectMany(x => x.PaperReceiptDetails).ToList(); var ExistDetail = purchaseBSTOrderDetails.FirstOrDefault(x => paperReceiptDetailsItems.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)); if (paperReceiptDetailsItem!=null) { return content.Error($"采购条码{nameof(ExistDetail.Barcode)}:{ExistDetail.Barcode}物料Id:{paperReceiptDetailsItem.MaterialId}不存在"); } foreach (var item in bSTPurchaseOrderDTOsAdd) { List bSTOrderDetails = item.PaperReceiptDetails.Select(x=>_mapper.Map(x)).ToList(); Dt_PurchaseBSTOrder purchaseBSTOrder = _mapper.Map(item); purchaseBSTOrder.Details = bSTOrderDetails; purchaseAddBSTOrders.Add(purchaseBSTOrder); } } if (bSTPurchaseOrderDTOsUpdate.Count > 0) { List? ExistUpdatePurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList(); //更新的单据是否存在 if (ExistUpdatePurchase.Count == bSTPurchaseOrderDTOsUpdate.Count) { } else { BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x => !ExistUpdatePurchase.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)); return content.Error($"未找到指定采购收货单{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{bSTPurchaseOrderDTO?.PaperReceiptId}"); } } if (bSTPurchaseOrderDTOsDel.Count>0) { List? ExistDelPurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsDel.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList(); //更新的单据是否存在 if (ExistDelPurchase.Count == bSTPurchaseOrderDTOsDel.Count) { } else { 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(); _unitOfWorkManage.CommitTran(); content.OK("接收成功"); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } } }