| | |
| | | using AutoMapper; |
| | | using MailKit.Search; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_BasicRepository; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Common.WareHouseEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | |
| | | using WIDESEA_DTO; |
| | | using WIDESEA_DTO.Basic; |
| | | using WIDESEA_DTO.ERP; |
| | | using WIDESEA_DTO.QMS; |
| | | using WIDESEA_DTO.Stock; |
| | | using WIDESEA_External.ERPService; |
| | | using WIDESEA_External.Model; |
| | | using WIDESEA_External.QMSService; |
| | | using WIDESEA_IBasicRepository; |
| | | using WIDESEA_ICheckRepository; |
| | | using WIDESEA_IInboundRepository; |
| | |
| | | private readonly IInboundRepository _inboundRepository; |
| | | private readonly IBasicRepository _basicRepository; |
| | | private readonly IInvokeERPService _invokeERPService; |
| | | private readonly ISupplierInfoRepository _supplierInfoRepository; |
| | | private readonly IInvokeQMSService _invokeQMSService; |
| | | |
| | | public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal) |
| | | public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService, ISupplierInfoRepository supplierInfoRepository, IInvokeQMSService invokeQMSService) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | |
| | | _inboundRepository = inboundRepository; |
| | | _basicRepository = basicRepository; |
| | | _invokeERPService = invokeERPService; |
| | | _supplierInfoRepository = supplierInfoRepository; |
| | | _invokeQMSService = invokeQMSService; |
| | | } |
| | | public override PageGridData<Dt_ReceiveOrder> GetPageData(PageDataOptions options) |
| | | { |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | |
| | | Dt_SupplierInfo supplierInfo = _supplierInfoRepository.QueryFirst(x => x.SupplierCode == receiveOrder.SuppliersId); |
| | | List<Dt_CheckOrder> checkOrders = new List<Dt_CheckOrder>(); |
| | | //çæERPæ¨éä¿¡æ¯ |
| | | List<RecevieOrderDetailModel> recevieOrderDetails = new List<RecevieOrderDetailModel>(); |
| | | foreach (var item in receiveOrder.Details) |
| | | { |
| | | //æ·»å æ¶è´§æç» |
| | | RecevieOrderDetailModel recevieOrderDetail = new RecevieOrderDetailModel() |
| | | { |
| | | Currcode = "", |
| | |
| | | QtyRecieved = item.ReceivedQuantity, |
| | | Serno = item.RowNo, |
| | | Supplotno = item.LotNo, |
| | | Taxrate = "", |
| | | |
| | | Taxrate = "" |
| | | }; |
| | | if (receiveOrder.ReceiveOrderType!=ReceiveOrderTypeEnum.PO.ObjToInt()) |
| | | { |
| | |
| | | recevieOrderDetail.Currcode = "RMB"; |
| | | } |
| | | recevieOrderDetails.Add(recevieOrderDetail); |
| | | if (warehouse.WarehouseCode == WarehouseEnum.HA152.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA58.ToString()) |
| | | { |
| | | string lotNo = item.LotNo.Substring(0, item.LotNo.IndexOf("-")); |
| | | Dt_CheckOrder? ExistcheckOrder = checkOrders.FirstOrDefault(x => x.LotNo == lotNo && x.MaterielCode == item.MaterielCode && x.PurchaseOrderNo == item.PurchaseOrderNo); |
| | | if (ExistcheckOrder == null) |
| | | { |
| | | //æ£éªç»æç»æä¸æ¥ |
| | | Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(item); |
| | | checkOrder.LotNo = lotNo; |
| | | checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt(); |
| | | checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; |
| | | checkOrder.Result = CheckAcceptEnum.NotCheckAccept.ToString(); |
| | | checkOrder.QualifiedQuantity = 0; |
| | | checkOrder.ReceiveDetailRowNo = item.RowNo; |
| | | checkOrder.WarehouseId = receiveOrder.WarehouseId; |
| | | checkOrder.ScrappedQuantity = 0; |
| | | checkOrder.MaterielSpec = item.MaterielSpec; |
| | | checkOrder.ReturnQuantity = 0; |
| | | checkOrder.DefectedQuantity = 0; |
| | | checkOrder.MaterielName = item.MaterielName; |
| | | checkOrders.Add(checkOrder); |
| | | } |
| | | else |
| | | { |
| | | //æ·»å æ£éªæ¶è´§æ°é |
| | | ExistcheckOrder.ReceivedQuantity += item.ReceivedQuantity; |
| | | } |
| | | |
| | | } |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | //å¹²è/PP䏿¥QMSç»æ |
| | | if (checkOrders.Count > 0) |
| | | { |
| | | foreach (var checkOrder in checkOrders) |
| | | { |
| | | int id = _checkOrderRepository.AddData(checkOrder); |
| | | QMSReceiveCheckModel qMSReceiveCheck = new QMSReceiveCheckModel() |
| | | { |
| | | UniqueTag = id.ToString(), |
| | | EntryNumber = receiveOrder.ReceiveOrderNo, |
| | | MaterialCode = checkOrder.MaterielCode, |
| | | MaterialName = checkOrder.MaterielName, |
| | | Quantity = (decimal)checkOrder.ReceivedQuantity, |
| | | SupplierCode = receiveOrder.SuppliersId, |
| | | SupplierName = supplierInfo.SupplierName, |
| | | BatchNumber = checkOrder.LotNo, |
| | | DeliveryNumber = receiveOrder.DeliveryCode, |
| | | PurchaseNumber = checkOrder.PurchaseOrderNo, |
| | | RowNumber = checkOrder.ReceiveDetailRowNo, |
| | | WarehouseCode = warehouse.WarehouseCode, |
| | | ReceiptDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), |
| | | Remark = " " |
| | | }; |
| | | //è°ç¨QMSæ¥ææ£éªæ¥å£ |
| | | string response = _invokeQMSService.InvokeReceiveCheckApi(qMSReceiveCheck); |
| | | MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); |
| | | if (!mesResponseContent.BSucc) |
| | | { |
| | | throw new Exception(mesResponseContent.StrMsg); |
| | | } |
| | | //QMSåä¼ ç»æ |
| | | ReceiveResultDTO? receiveResult = JsonConvert.DeserializeObject<ReceiveResultDTO>(mesResponseContent.Content.ToString()); |
| | | if (receiveResult == null) |
| | | { |
| | | throw new Exception("æ¥æ¶QMSç»æå¤±è´¥"); |
| | | } |
| | | //æ´æ°æ£éªåå· |
| | | Dt_CheckOrder _CheckOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == id); |
| | | _CheckOrder.CheckOrderNo = receiveResult.InspectionNumber; |
| | | _checkOrderRepository.UpdateData(_CheckOrder); |
| | | } |
| | | } |
| | | |
| | | ERPReceiveModel receiveModel = new ERPReceiveModel() |
| | |
| | | Way = 1, |
| | | Details = recevieOrderDetails |
| | | }; |
| | | |
| | | //æ´æ°æ¶è´§åä¿¡æ¯ |
| | | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt(); |
| | | //æ¶è´§æ¨éè³ER |
| | | string response = _invokeERPService.InvokeMatReceiveApi(receiveModel); |
| | | ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>(); |
| | | //æ¶è´§æ¨éè³ERP |
| | | string responseReceive = _invokeERPService.InvokeMatReceiveApi(receiveModel); |
| | | ErpRequestContent requestContent = responseReceive.DeserializeObject<ErpRequestContent>(); |
| | | if (requestContent.res != 1) |
| | | { |
| | | return WebResponseContent.Instance.Error($"{requestContent.Data}"); |
| | | throw new Exception($"{requestContent.Data}"); |
| | | } |
| | | receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt(); |
| | | BaseDal.UpdateData(receiveOrder); |
| | | _unitOfWorkManage.CommitTran(); |
| | | if (receiveOrder.Details.FirstOrDefault(x=>x.IfInspection==WhetherEnum.True.ObjToInt())==null) |
| | | { |
| | | //å建å
¥åºå todo:æç»é½æ¯ä¸æ£éªèªå¨å建å
¥åºå |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | |
| | | try |
| | | { |
| | | Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == receiveOrderId).Includes(x => x.Details).First(); |
| | | if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæ¥æä¸ä¼ ERPå¤±è´¥æ æ³å建å
¥åºåæ®"); |
| | | } |
| | | if (receiveOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥æ¶è´§åä¿¡æ¯"); |
| | | } |
| | | //ERP夿æ¯å¦ä¸ä¼ |
| | | if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæ¥æä¸ä¼ ERPå¤±è´¥æ æ³å建å
¥åºåæ®"); |
| | | } |
| | | if (receiveOrder.Details == null || receiveOrder.Details.Count() <= 0) |
| | | { |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæªå®æ"); |
| | | } |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==receiveOrder.WarehouseId); |
| | | //éªè¯å
¥åºåæ¯å¦éå¤çæ |
| | | Dt_InboundOrder OldCreateOrder = _inboundRepository.InboundOrderRepository.QueryFirst(x => x.UpperOrderNo == receiveOrder.ReceiveOrderNo); |
| | | if (receiveOrder.CreateInOrderStatus==WhetherEnum.True.ObjToInt() || OldCreateOrder!=null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§å对åºçå
¥åºåå·²åå¨"); |
| | | } |
| | | #region 注é |
| | | |
| | | #region 夿æ¶è´§åæ£éªæ¯å¦å®æ |
| | | List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); |
| | | if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该æ¶è´§åæªè´¨æ£å®æ"); |
| | | } |
| | | |
| | | //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) |
| | | //{ |
| | | // return WebResponseContent.Instance.Error($"该æ¶è´§åè´¨æ£ç»æå®¡æ¹æªå®æ"); |
| | | //} |
| | | if (checkOrders.FirstOrDefault(x => x.Result != CheckAcceptEnum.Accept.ToString()) != null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ¶è´§æç»ä¸åæè´¨æ£æªéè¿"); |
| | |
| | | Details = new List<Dt_InboundOrderDetail>() |
| | | }; |
| | | List<Dt_MaterielInfo> materielCodeInfos = _basicRepository.MaterielInfoRepository.QueryData(x => receiveOrder.Details.Select(x => x.MaterielCode).ToList().Contains(x.MaterielCode)); |
| | | foreach (var item in receiveOrder.Details) |
| | | foreach (var item in receiveOrder.Details.Where(x=> x.IsCheckOk!=WhetherEnum.True.ObjToInt())) |
| | | { |
| | | float quantity = item.ReceivedQuantity; |
| | | #region 注é |
| | | if (item.IfInspection == WhetherEnum.True.ObjToInt()) |
| | | { |
| | | Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); |
| | | if (checkOrder == null) |
| | | if (warehouse.WarehouseCode != WarehouseEnum.HA152.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA58.ToString()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è´¨æ£åæ°æ®é误"); |
| | | Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); |
| | | if (checkOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è´¨æ£åæ°æ®é误"); |
| | | } |
| | | quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); |
| | | } |
| | | quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); |
| | | |
| | | } |
| | | #endregion |
| | | Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail() |