| | |
| | | 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; |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | List<Dt_ReturnBSTOrder> OldreturnBSTOrders = BaseDal.Db.Queryable<Dt_ReturnBSTOrder>().Includes(x => x.Details).ToList(); |
| | | List<Dt_StockInfo> ExiststockInfos = _stockInfoRepository.QueryData(x=>x.WarehouseId==WarehouseEnum.LLDOldCache.ObjToInt()); |
| | | //æ°å¢ |
| | | List<BSTReturnOrderDTO> bSTReturnOrderDTOsAdd = bSTReturnOrderDTOs.Where(x => x.Way == 1).ToList(); |
| | | List<BSTReturnOrderDTOItem>? bSTReturnOrderDTOItemsAdd = null; |
| | | //ä¿®æ¹ |
| | | List<BSTReturnOrderDTO> bSTReturnOrderDTOsUpdate = bSTReturnOrderDTOs.Where(x => x.Way == 2).ToList(); |
| | | //å é¤ |
| | | List<BSTReturnOrderDTO> bSTReturnOrderDTOsDel = bSTReturnOrderDTOs.Where(x => x.Way == 3).ToList(); |
| | | List<BSTReturnOrderDTOItem>? bSTReturnOrderDTOItemsUp = null; |
| | | //è·åææç©æ |
| | | List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.èå.ObjToInt() && x.MaterialSourceId != 0); |
| | | |
| | | List<Dt_ReturnBSTOrder> returnAddBSTOrders = new List<Dt_ReturnBSTOrder>(); |
| | | List<Dt_ReturnBSTOrder> returnUpdateBSTOrders = new List<Dt_ReturnBSTOrder>(); |
| | | List<Dt_ReturnBSTOrder> returnDeleteBSTOrders = new List<Dt_ReturnBSTOrder>(); |
| | | List<Dt_ReturnBSTOrderDetail> returnBSTOrderDetailsDel = new List<Dt_ReturnBSTOrderDetail>(); |
| | | 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<Dt_StockInfo> stockInfosUpdate = new List<Dt_StockInfo>(); |
| | | //æ°å¢ |
| | | if (bSTReturnOrderDTOsAdd.Count > 0) |
| | | if (bSTReturnOrderDTOItemsAdd!=null && bSTReturnOrderDTOItemsAdd.Count > 0) |
| | | { |
| | | //夿忮 |
| | | Dt_ReturnBSTOrder? ExistAddReturn = OldreturnBSTOrders.FirstOrDefault(x => bSTReturnOrderDTOsAdd.Select(x => x.PaperWreturnId).Contains(x.PaperWreturnId)); |
| | | if (ExistAddReturn != null) |
| | | { |
| | | return content.Error($"éæå{nameof(BSTReturnOrderDTO.PaperWreturnId)}:{ExistAddReturn.PaperWreturnId}å·²åå¨"); |
| | | } |
| | | List<BSTReturnOrderDTOItem> bSTReturnOrderDTOItemsAdd = bSTReturnOrderDTOsAdd.SelectMany(x => x.BstPaperWreturnDetails).ToList(); |
| | | //夿æ¯å¦åå¨ç©æ |
| | | 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}ä¸åå¨"); |
| | | } |
| | | //éªè¯éææ¡ç æ¯å¦å¨åºåä¸ |
| | | var ExiststockInfo = bSTReturnOrderDTOItemsAdd.FirstOrDefault(x => !ExiststockInfos.Select(x => x.PalletCode).Contains(x.Barcode)); |
| | | if (ExiststockInfo != null) |
| | | foreach (var item in bSTReturnOrderDTOItemsAdd) |
| | | { |
| | | return content.Error($"éææ¡ç {nameof(ExiststockInfo.Barcode)}:{ExiststockInfo.Barcode}ç©ææªå¨èåæååº"); |
| | | } |
| | | //è·å对åºåºåä¿®æ£åºåæ°é |
| | | List<Dt_StockInfo> returnStockinfos = ExiststockInfos.Where(x => bSTReturnOrderDTOItemsAdd.Select(x => x.Barcode).Contains(x.PalletCode)).ToList(); |
| | | foreach (var item in bSTReturnOrderDTOsAdd) |
| | | { |
| | | if (bSTReturnOrderDTOsUpdate.FirstOrDefault(x => x.PaperWreturnId == item.PaperWreturnId) != null) |
| | | //å°ä¸åå¨çåºåè·³è¿ |
| | | Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode); |
| | | if (stockReturn == null) |
| | | { |
| | | continue; |
| | | } |
| | | List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList(); |
| | | Dt_ReturnBSTOrder returnBSTOrder = _mapper.Map<Dt_ReturnBSTOrder>(item); |
| | | returnBSTOrder.Details = bSTOrderDetails; |
| | | foreach (var detail in bSTOrderDetails) |
| | | if (bSTReturnOrderDTOItemsUp!=null && bSTReturnOrderDTOItemsUp.FirstOrDefault(x => x.Barcode == item.Barcode) != null) |
| | | { |
| | | Dt_StockInfo stockReturn = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == detail.Barcode); |
| | | stockReturn.MaterielId = detail.MaterialId; |
| | | stockReturn.MaterielCode = detail.MaterialNo; |
| | | stockReturn.MaterielWide=detail.MaterialWide; |
| | | stockReturn.MaterielThickness = detail.MaterialThick; |
| | | stockReturn.MaterielWeight = detail.Qty; |
| | | stockReturn.StockLength = detail.ProcurementLength; |
| | | stockReturn.StockStatus = StockStatusEmun.èåéææå.ObjToInt(); |
| | | stockInfosUpdate.Add(stockReturn); |
| | | continue; |
| | | } |
| | | returnAddBSTOrders.Add(returnBSTOrder); |
| | | 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 (bSTReturnOrderDTOsUpdate.Count > 0) |
| | | if (bSTReturnOrderDTOItemsUp != null && bSTReturnOrderDTOItemsUp.Count > 0) |
| | | { |
| | | //åå¨çéè´å |
| | | List<Dt_ReturnBSTOrder>? ExistreturnBSTOrders = OldreturnBSTOrders.Where(x => bSTReturnOrderDTOsUpdate.Select(x => x.PaperWreturnId).Contains(x.PaperWreturnId)).Distinct().ToList(); |
| | | |
| | | foreach (var item in bSTReturnOrderDTOsUpdate) |
| | | //è·å对åºåºåä¿®æ£åºåæ°é |
| | | List<Dt_StockInfo> returnStockinfos = ExiststockInfos.Where(x => bSTReturnOrderDTOItemsUp.Select(x => x.Barcode).Contains(x.PalletCode)).ToList(); |
| | | foreach (var item in bSTReturnOrderDTOItemsUp) |
| | | { |
| | | Dt_ReturnBSTOrder? returnBSTOrderUpdate = ExistreturnBSTOrders.FirstOrDefault(x => x.PaperWreturnId == item.PaperWreturnId); |
| | | //å¦æè®¢åå·²åå¨åè¿è¡æ´æ¹ |
| | | if (returnBSTOrderUpdate != null) |
| | | Dt_StockInfo? returnUpdate = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == item.Barcode); |
| | | //å¦æä¿®æ¹å·²åå¨ï¼å¨ååºç¡ä¸æ´æ° |
| | | if (returnUpdate != null) |
| | | { |
| | | if (returnBSTOrderUpdate.ReturnOrderStatus != InOrderStatusEnum.æªå¼å§.ObjToInt()) |
| | | { |
| | | return content.Error($"éæ{nameof(returnBSTOrderUpdate.PaperWreturnId)}:{returnBSTOrderUpdate.PaperWreturnId}订åéæå
¥åºä¸ï¼ä¸å¯æ´æ¹"); |
| | | } |
| | | returnBSTOrderDetailsDel.AddRange(returnBSTOrderUpdate.Details); |
| | | |
| | | //æ´æ° |
| | | List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList(); |
| | | bSTOrderDetails.ForEach(x => |
| | | { |
| | | x.ReturnBSTOrderId = returnBSTOrderUpdate.Id; |
| | | }); |
| | | returnBSTOrderUpdate.Details = bSTOrderDetails; |
| | | returnBSTOrderUpdate.PaperWreturnId = item.PaperWreturnId; |
| | | returnBSTOrderUpdate.PaperWreturnNo = item.PaperWreturnNo; |
| | | returnBSTOrderUpdate.EmployeeName = item.EmployeeName; |
| | | returnBSTOrderUpdate.WreturnDate = DateTimeOffset.FromUnixTimeMilliseconds(item.WreturnDate).DateTime; |
| | | returnUpdateBSTOrders.Add(returnBSTOrderUpdate); |
| | | returnUpdate.MaterielThickness = item.Thick; |
| | | returnUpdate.MaterielWeight = item.Qty; |
| | | returnUpdate.StockLength = item.ProcurementLength; |
| | | } |
| | | else //妿ä¸åå¨åè¿è¡æ°å¢ |
| | | else |
| | | { |
| | | List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList(); |
| | | Dt_ReturnBSTOrder returnBSTOrder = _mapper.Map<Dt_ReturnBSTOrder>(item); |
| | | returnBSTOrder.Details = bSTOrderDetails; |
| | | foreach (var detail in bSTOrderDetails) |
| | | //å°ä¸åå¨çåºåè·³è¿ |
| | | Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode); |
| | | if (stockReturn == null) |
| | | { |
| | | Dt_StockInfo stockReturn = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == detail.Barcode); |
| | | stockReturn.MaterielId = detail.MaterialId; |
| | | stockReturn.MaterielCode = detail.MaterialNo; |
| | | stockReturn.MaterielWide = detail.MaterialWide; |
| | | stockReturn.MaterielThickness = detail.MaterialThick; |
| | | stockReturn.MaterielWeight = detail.Qty; |
| | | stockReturn.StockLength = detail.ProcurementLength; |
| | | stockReturn.StockStatus = StockStatusEmun.èåéææå.ObjToInt(); |
| | | stockInfosUpdate.Add(stockReturn); |
| | | continue; |
| | | } |
| | | returnAddBSTOrders.Add(returnBSTOrder); |
| | | 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 (bSTReturnOrderDTOsDel.Count > 0) |
| | | { |
| | | |
| | | } |
| | | //æ´æ°æ°æ® |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.Db.InsertNav(returnAddBSTOrders).Include(x => x.Details).ExecuteCommand(); |
| | | _stockInfoRepository.UpdateData(stockInfosUpdate); |
| | | _returnBSTOrderDetailRepository.DeleteData(returnBSTOrderDetailsDel); |
| | | BaseDal.Db.UpdateNav(returnUpdateBSTOrders).Include(x => x.Details).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK("æ¥æ¶æå"); |
| | | } |