| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using AutoMapper; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.MaterielEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_DTO.MES; |
| | | using WIDESEA_IBasicRepository; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_IInboundService; |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_Core.Helper; |
| | | using System.Security.Cryptography; |
| | | using WIDESEA_Common.WareHouseEnum; |
| | | |
| | | namespace WIDESEA_InboundService |
| | | { |
| | | public class InboundOrderService : ServiceBase<Dt_InboundOrder, IInboundOrderRepository>, IInboundOrderService |
| | | { |
| | | public IInboundOrderRepository Repository => BaseDal; |
| | | private readonly IBasicRepository _basicRepository; |
| | | private readonly IMapper _mapper; |
| | | public InboundOrderService(IInboundOrderRepository BaseDal, IBasicRepository basicRepository, IMapper mapper) : base(BaseDal) |
| | | { |
| | | _basicRepository = basicRepository; |
| | | _mapper = mapper; |
| | | } |
| | | /// <summary> |
| | | /// æ·»å ERPå
¥åºåä¿¡æ¯ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent ReceiveInbound(ERPInboundOrderDTO eRPInboundOrderDTO) |
| | | { |
| | | WebResponseContent content=new WebResponseContent(); |
| | | try |
| | | { |
| | | if (eRPInboundOrderDTO == null) |
| | | { |
| | | return content.Error("å
¥åºä¿¡æ¯ä¸è½ä¼ å
¥ä¸ºç©º"); |
| | | } |
| | | if (eRPInboundOrderDTO.InboundDetail == null || eRPInboundOrderDTO.InboundDetail.Count <= 0) |
| | | { |
| | | return content.Error("å
¥åºæç»ä¿¡æ¯ä¸è½ä¼ å
¥ä¸ºç©º"); |
| | | } |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == eRPInboundOrderDTO.WarehouseCode); |
| | | if (warehouse == null) |
| | | { |
| | | return content.Error($"ä»åºä¿¡æ¯ä¸åå¨{eRPInboundOrderDTO.WarehouseCode}"); |
| | | } |
| | | //è·åææç©æ |
| | | List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == warehouse.WarehouseId && x.MaterielInvOrgId == MaterielInvOrgEnum.æ°å.ObjToInt()); |
| | | //夿æ¯å¦åå¨ç©æ |
| | | InboundDetailItem? inboundDetailItem = eRPInboundOrderDTO.InboundDetail.FirstOrDefault(x => !materielInfos.Select(x => x.MaterielCode).Contains(x.MaterialCode)); |
| | | if (inboundDetailItem != null) |
| | | { |
| | | return content.Error($"å
¥åºæ¡ç {nameof(inboundDetailItem.BarCode)}:{inboundDetailItem.BarCode}ç©æ:{inboundDetailItem.MaterialCode}ä¸åå¨"); |
| | | } |
| | | //è·åææå
¥åºä¿¡æ¯ |
| | | List<Dt_InboundOrder> inboundOrdersOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Includes(x => x.Details).ToList(); |
| | | //è·åææå
¥åºæç»ä¿¡æ¯ |
| | | List<Dt_InboundOrderDetail> inboundOrderDetailsOld = inboundOrdersOld.SelectMany(x=>x.Details).ToList(); |
| | | if (eRPInboundOrderDTO.OperateType == 1) |
| | | { |
| | | //夿é夿å
¥ |
| | | Dt_InboundOrder? inboundOrderOld = inboundOrdersOld.FirstOrDefault(x => x.UpperOrderNo == eRPInboundOrderDTO.InboundCode); |
| | | if (inboundOrderOld != null) |
| | | { |
| | | return content.Error($"å
¥åºååå·{eRPInboundOrderDTO.InboundCode}ä¿¡æ¯å·²åå¨"); |
| | | } |
| | | List<Dt_InboundOrderDetail> inboundOrderDetails = eRPInboundOrderDTO.InboundDetail.Select(x => _mapper.Map<Dt_InboundOrderDetail>(x)).ToList(); |
| | | Dt_InboundOrder inboundOrder = _mapper.Map<Dt_InboundOrder>(eRPInboundOrderDTO); |
| | | inboundOrderDetails.ForEach(x => |
| | | { |
| | | Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(t => t.MaterielCode == x.MaterialCode); |
| | | if (warehouse.WarehouseCode==WarehouseEnum.LLDYL.ToString() && x.MaterialThick<= 0) |
| | | { |
| | | throw new Exception($"ç©æ{x.MaterialCode}æ¡ç {x.BarCode}ç´å¾é大äº0"); |
| | | } |
| | | if (inboundOrderDetailsOld.FirstOrDefault(t=>t.BarCode==x.BarCode)!=null) |
| | | { |
| | | throw new Exception($"å
¥åºå{inboundOrder.UpperOrderNo}æ¡ç {x.BarCode}å·²åå¨"); |
| | | } |
| | | x.MaterialName = materielInfo?.MaterielName; |
| | | x.Unit = materielInfo?.MaterielUnit; |
| | | x.MaterialSpec = materielInfo.MaterielSpec; |
| | | }); |
| | | inboundOrder.Details = inboundOrderDetails; |
| | | inboundOrder.WarehouseId = warehouse.WarehouseId; |
| | | //æ°å¢ |
| | | BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | } |
| | | else if (eRPInboundOrderDTO.OperateType == 2) |
| | | { |
| | | //夿æ¯å¦åå¨ |
| | | Dt_InboundOrder? inboundOrderOld = inboundOrdersOld.FirstOrDefault(x => x.UpperOrderNo == eRPInboundOrderDTO.InboundCode); |
| | | if (inboundOrderOld == null) |
| | | { |
| | | return content.Error($"å
¥åºååå·{eRPInboundOrderDTO.InboundCode}ä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | if (inboundOrderOld.InboundOrderStatus != InOrderStatusEnum.æªå¼å§.ObjToInt()) |
| | | { |
| | | return content.Error($"å
¥åºååå·{inboundOrderOld.InboundOrderNo}ç¶æä¸º{(InOrderStatusEnum)inboundOrderOld.InboundOrderStatus}"); |
| | | } |
| | | List<string> barCodesOld = inboundOrderOld.Details.Select(x => x.BarCode).ToList(); |
| | | List<Dt_InboundOrderDetail> inboundOrderDetails = eRPInboundOrderDTO.InboundDetail.Select(x => _mapper.Map<Dt_InboundOrderDetail>(x)).ToList(); |
| | | Dt_InboundOrder inboundOrder = _mapper.Map<Dt_InboundOrder>(eRPInboundOrderDTO); |
| | | inboundOrderDetails.ForEach(x => |
| | | { |
| | | Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(t => t.MaterielCode == x.MaterialCode); |
| | | if (warehouse.WarehouseCode == WarehouseEnum.LLDYL.ToString() && x.MaterialThick <= 0) |
| | | { |
| | | throw new Exception($"ç©æ{x.MaterialCode}æ¡ç {x.BarCode}ç´å¾é大äº0"); |
| | | } |
| | | if (inboundOrderDetailsOld.FirstOrDefault(t => t.BarCode == x.BarCode) != null && !barCodesOld.Contains(x.BarCode)) |
| | | { |
| | | throw new Exception($"å
¥åºå{inboundOrder.UpperOrderNo}æ¡ç {x.BarCode}å·²åå¨"); |
| | | } |
| | | x.MaterialName = materielInfo?.MaterielName; |
| | | x.Unit = materielInfo?.MaterielUnit; |
| | | x.MaterialSpec = materielInfo.MaterielSpec; |
| | | }); |
| | | inboundOrder.Details = inboundOrderDetails; |
| | | inboundOrder.WarehouseId = warehouse.WarehouseId; |
| | | //æ´æ° |
| | | BaseDal.Db.UpdateNav(inboundOrder).Include(x => x.Details).ExecuteCommand(); |
| | | } |
| | | else if (eRPInboundOrderDTO.OperateType == 3) |
| | | { |
| | | //夿æ¯å¦åå¨ |
| | | Dt_InboundOrder? inboundOrderOld = inboundOrdersOld.FirstOrDefault(x => x.UpperOrderNo == eRPInboundOrderDTO.InboundCode); |
| | | if (inboundOrderOld == null) |
| | | { |
| | | return content.Error($"å
¥åºååå·{eRPInboundOrderDTO.InboundCode}ä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | if (inboundOrderOld.InboundOrderStatus != InOrderStatusEnum.æªå¼å§.ObjToInt()) |
| | | { |
| | | return content.Error($"å
¥åºååå·{inboundOrderOld.InboundOrderNo}ç¶æä¸º{(InOrderStatusEnum)inboundOrderOld.InboundOrderStatus}"); |
| | | } |
| | | //å é¤ |
| | | BaseDal.Db.DeleteNav(inboundOrderOld).Include(x => x.Details).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | return content.Error("æªæ¾å°æä½ç±»å"); |
| | | } |
| | | //æ´æ°æ°æ® |
| | | return content.OK("æ¥æ¶æå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | |
| | | } |