using AutoMapper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.MaterielEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_DTO.ERP; using WIDESEA_IBasicRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; using WIDESEA_InboundRepository; using WIDESEA_IStockRepository; using WIDESEA_Model.Models; namespace WIDESEA_InboundService { public class ReturnBSTOrderService : ServiceBase, IReturnBSTOrderService { public IReturnBSTOrderRepository Repository => BaseDal; private IUnitOfWorkManage _unitOfWorkManage; private IBasicRepository _basicRepository; private IStockInfoRepository _stockInfoRepository; private IReturnBSTOrderDetailRepository _returnBSTOrderDetailRepository; private IMapper _mapper; public ReturnBSTOrderService(IReturnBSTOrderRepository BaseDal,IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository, IStockInfoRepository stockInfoRepository, IReturnBSTOrderDetailRepository returnBSTOrderDetailRepository, IMapper mapper) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _basicRepository = basicRepository; _stockInfoRepository = stockInfoRepository; _returnBSTOrderDetailRepository = returnBSTOrderDetailRepository; _mapper = mapper; } /// /// 接收博思通退料信息 /// /// public WebResponseContent ReceiveReturnOrder(List bSTReturnOrderDTOs) { WebResponseContent content = new WebResponseContent(); try { List ExiststockInfos = _stockInfoRepository.QueryData(x=>x.WarehouseId==WarehouseEnum.LLDOldCache.ObjToInt()); //新增 List bSTReturnOrderDTOsAdd = bSTReturnOrderDTOs.Where(x => x.Way == 1).ToList(); List? bSTReturnOrderDTOItemsAdd = null; //修改 List bSTReturnOrderDTOsUpdate = bSTReturnOrderDTOs.Where(x => x.Way == 2).ToList(); List? bSTReturnOrderDTOItemsUp = null; //获取所有物料 List materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && x.MaterialSourceId != 0); if (bSTReturnOrderDTOsAdd!=null && bSTReturnOrderDTOsAdd.Count>0) { bSTReturnOrderDTOItemsAdd = bSTReturnOrderDTOsAdd.SelectMany(x => x.BstPaperWreturnDetails).ToList(); } if (bSTReturnOrderDTOsUpdate != null && bSTReturnOrderDTOsUpdate.Count > 0) { bSTReturnOrderDTOItemsUp = bSTReturnOrderDTOsUpdate.SelectMany(x => x.BstPaperWreturnDetails).ToList(); } List stockInfosUpdate = new List(); //新增 if (bSTReturnOrderDTOItemsAdd!=null && bSTReturnOrderDTOItemsAdd.Count > 0) { //判断是否存在物料 BSTReturnOrderDTOItem? bSTReturnOrderDTOItem = bSTReturnOrderDTOItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId)); if (bSTReturnOrderDTOItem != null) { return content.Error($"退料{nameof(bSTReturnOrderDTOItem.Barcode)}:{bSTReturnOrderDTOItem.Barcode}物料{nameof(BSTReturnOrderDTOItem.MaterialId)}:{bSTReturnOrderDTOItem.MaterialId}不存在"); } foreach (var item in bSTReturnOrderDTOItemsAdd) { //将不存在的库存跳过 Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode); if (stockReturn == null) { continue; } if (bSTReturnOrderDTOItemsUp!=null && bSTReturnOrderDTOItemsUp.FirstOrDefault(x => x.Barcode == item.Barcode) != null) { continue; } stockReturn.MaterielId = item.MaterialId; stockReturn.MaterielCode = item.MaterialNo; stockReturn.MaterielWide = item.W; stockReturn.MaterielThickness = item.Thick; stockReturn.MaterielWeight = item.Qty; stockReturn.StockLength = item.ProcurementLength; stockReturn.StockOutLength = 0; stockReturn.IsPick = WhetherEnum.False.ObjToInt(); stockReturn.IsFull = WhetherEnum.True.ObjToInt(); stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt(); stockInfosUpdate.Add(stockReturn); } } //更新 if (bSTReturnOrderDTOItemsUp != null && bSTReturnOrderDTOItemsUp.Count > 0) { //获取对应库存修正库存数量 List returnStockinfos = ExiststockInfos.Where(x => bSTReturnOrderDTOItemsUp.Select(x => x.Barcode).Contains(x.PalletCode)).ToList(); foreach (var item in bSTReturnOrderDTOItemsUp) { Dt_StockInfo? returnUpdate = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == item.Barcode); //如果修改已存在,在原基础上更新 if (returnUpdate != null) { //更新 returnUpdate.MaterielThickness = item.Thick; returnUpdate.MaterielWeight = item.Qty; returnUpdate.StockLength = item.ProcurementLength; } else { //将不存在的库存跳过 Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode); if (stockReturn == null) { continue; } stockReturn.MaterielId = item.MaterialId; stockReturn.MaterielCode = item.MaterialNo; stockReturn.MaterielWide = item.W; stockReturn.MaterielThickness = item.Thick; stockReturn.MaterielWeight = item.Qty; stockReturn.StockLength = item.ProcurementLength; stockReturn.StockOutLength = 0; stockReturn.IsPick = WhetherEnum.False.ObjToInt(); stockReturn.IsFull = WhetherEnum.True.ObjToInt(); stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt(); stockInfosUpdate.Add(stockReturn); } } } //更新数据 _unitOfWorkManage.BeginTran(); _stockInfoRepository.UpdateData(stockInfosUpdate); _unitOfWorkManage.CommitTran(); content.OK("接收成功"); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } } }