| | |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | 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.Helper; |
| | | using WIDESEA_DTO.Basic; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_IBasicRepository; |
| | | using WIDESEA_IOutboundRepository; |
| | | using WIDESEA_IOutboundService; |
| | |
| | | private readonly IBasicRepository _basicRepository; |
| | | private readonly IMapper _mapper; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IOutBSTOrderDetailRepository _outBSTOrderDetailRepository; |
| | | |
| | | public OutBSTOrderService(IOutBSTOrderRepository BaseDal,IBasicRepository basicRepository,IMapper mapper,IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) |
| | | public OutBSTOrderService(IOutBSTOrderRepository BaseDal,IBasicRepository basicRepository,IMapper mapper,IUnitOfWorkManage unitOfWorkManage,IOutBSTOrderDetailRepository outBSTOrderDetailRepository) : base(BaseDal) |
| | | { |
| | | _basicRepository = basicRepository; |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | } |
| | | /// <summary> |
| | | /// æ·»å åºåºæç¨ä¿¡æ¯ |
| | | /// </summary> |
| | | public WebResponseContent AddOutBSTOrder(List<BSTOutOrderDTO> bSTOutOrderDTOs) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | //è·åææåºåºå |
| | | List<Dt_OutBSTOrder> OldoutBSTOrders = BaseDal.Db.Queryable<Dt_OutBSTOrder>().Includes(x => x.Details).ToList(); |
| | | //æ°å¢ |
| | | List<BSTOutOrderDTO> outOrderDTOsAdd = bSTOutOrderDTOs.Where(x => x.Way == 1).ToList(); |
| | | //ä¿®æ¹ |
| | | List<BSTOutOrderDTO> outOrderDTOsUpdate = bSTOutOrderDTOs.Where(x => x.Way == 2).ToList(); |
| | | //å é¤ |
| | | List<BSTOutOrderDTO> outOrderDTOsDel = bSTOutOrderDTOs.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_OutBSTOrder> outBSTAddOrders = new List<Dt_OutBSTOrder>(); |
| | | List<Dt_OutBSTOrder> outBSTUpOrders = new List<Dt_OutBSTOrder>(); |
| | | List<Dt_OutBSTOrder> outBSTDelOrders = new List<Dt_OutBSTOrder>(); |
| | | //æ°å¢ |
| | | if (outOrderDTOsAdd.Count>0) |
| | | { |
| | | //夿忮 |
| | | Dt_OutBSTOrder? ExistAddOutOrder = OldoutBSTOrders.FirstOrDefault(x => outOrderDTOsAdd.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)); |
| | | if (ExistAddOutOrder != null) |
| | | { |
| | | return content.Error($"åºåºæç¨Id{nameof(BSTOutOrderDTO.BoardMpsId)}:{ExistAddOutOrder.BoardMpsId}å·²åå¨"); |
| | | } |
| | | List<BstBoardMpsDetailItem> bstBoardMpsDetailItems = outOrderDTOsAdd.SelectMany(x => x.BstBoardMpsDetails).ToList(); |
| | | //夿æ¯å¦åå¨ç©æ |
| | | BstBoardMpsDetailItem? bstBoardMpsDetailItem = bstBoardMpsDetailItems.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId)); |
| | | if (bstBoardMpsDetailItem != null) |
| | | { |
| | | return content.Error($"ç产æç¨{nameof(bstBoardMpsDetailItem.BoardMpsId)}ç©æId:{bstBoardMpsDetailItem.MaterialId}ä¸åå¨"); |
| | | } |
| | | foreach (var item in outOrderDTOsAdd) |
| | | { |
| | | List<Dt_OutBSTOrderDetail> bSTOrderDetails = item.BstBoardMpsDetails.Select(x => _mapper.Map<Dt_OutBSTOrderDetail>(x)).ToList(); |
| | | Dt_OutBSTOrder outBSTOrder = _mapper.Map<Dt_OutBSTOrder>(item); |
| | | outBSTOrder.Details=bSTOrderDetails; |
| | | outBSTAddOrders.Add(outBSTOrder); |
| | | } |
| | | } |
| | | //ä¿®æ¹ |
| | | if (outOrderDTOsUpdate.Count > 0) |
| | | { |
| | | List<Dt_OutBSTOrder>? ExistUpdateoutBSTOrders = OldoutBSTOrders.Where(x => outOrderDTOsUpdate.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)).ToList(); |
| | | //æ´æ°çåæ®æ¯å¦åå¨ |
| | | if (ExistUpdateoutBSTOrders.Count == outOrderDTOsUpdate.Count) |
| | | { |
| | | |
| | | } |
| | | else |
| | | { |
| | | BSTOutOrderDTO? bSTOutOrderDTO = outOrderDTOsUpdate.FirstOrDefault(x => !ExistUpdateoutBSTOrders.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)); |
| | | return content.Error($"æªæ¾å°æå®ç产æç¨åId{nameof(BSTOutOrderDTO.BoardMpsId)}:{bSTOutOrderDTO?.BoardMpsId}"); |
| | | } |
| | | } |
| | | //å é¤ |
| | | if (outOrderDTOsDel.Count > 0) |
| | | { |
| | | List<Dt_OutBSTOrder>? ExistDeloutBSTOrders = OldoutBSTOrders.Where(x => outOrderDTOsDel.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)).ToList(); |
| | | //æ´æ°çåæ®æ¯å¦åå¨ |
| | | if (ExistDeloutBSTOrders.Count == outOrderDTOsDel.Count) |
| | | { |
| | | |
| | | } |
| | | else |
| | | { |
| | | BSTOutOrderDTO? bSTOutOrderDTO = outOrderDTOsDel.FirstOrDefault(x => !ExistDeloutBSTOrders.Select(x => x.BoardMpsId).Contains(x.BoardMpsId)); |
| | | return content.Error($"æªæ¾å°æå®ç产æç¨åId{nameof(BSTOutOrderDTO.BoardMpsId)}:{bSTOutOrderDTO?.BoardMpsId}"); |
| | | } |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.Db.InsertNav(outBSTAddOrders).Include(x => x.Details).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK("æ¥æ¶æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | _outBSTOrderDetailRepository = outBSTOrderDetailRepository; |
| | | } |
| | | } |
| | | } |