|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | using AutoMapper; | 
|---|
|  |  |  | using Newtonsoft.Json; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using System.Globalization; | 
|---|
|  |  |  | 
|---|
|  |  |  | using WIDESEA_Core.Helper; | 
|---|
|  |  |  | using WIDESEA_DTO; | 
|---|
|  |  |  | using WIDESEA_DTO.Basic; | 
|---|
|  |  |  | using WIDESEA_DTO.QMS; | 
|---|
|  |  |  | using WIDESEA_External.Model; | 
|---|
|  |  |  | using WIDESEA_External.QMSService; | 
|---|
|  |  |  | using WIDESEA_IBasicRepository; | 
|---|
|  |  |  | using WIDESEA_ICheckRepository; | 
|---|
|  |  |  | using WIDESEA_IInboundRepository; | 
|---|
|  |  |  | 
|---|
|  |  |  | private readonly IBasicRepository _basicRepository; | 
|---|
|  |  |  | private readonly ICheckOrderRepository _checkOrderRepository; | 
|---|
|  |  |  | private readonly IStockRepository _stockRepository; | 
|---|
|  |  |  | private readonly ISupplierInfoRepository _supplierInfoRepository; | 
|---|
|  |  |  | private readonly IInvokeQMSService _invokeQMSService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository, IStockRepository stockRepository) : base(BaseDal) | 
|---|
|  |  |  | public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository, IStockRepository stockRepository,ISupplierInfoRepository supplierInfoRepository,IInvokeQMSService invokeQMSService) : base(BaseDal) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | _mapper = mapper; | 
|---|
|  |  |  | _unitOfWorkManage = unitOfWorkManage; | 
|---|
|  |  |  | 
|---|
|  |  |  | _basicRepository = basicRepository; | 
|---|
|  |  |  | _checkOrderRepository = checkOrderRepository; | 
|---|
|  |  |  | _stockRepository = stockRepository; | 
|---|
|  |  |  | _supplierInfoRepository = supplierInfoRepository; | 
|---|
|  |  |  | _invokeQMSService = invokeQMSService; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static object _rowNoLocker = new object(); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"è¯¥åæ®å·²æ¶è´§å®æ"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == receiveOrder.WarehouseId); | 
|---|
|  |  |  | MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum); | 
|---|
|  |  |  | //æ¶è´§å¢å æ¹æ¬¡å¡æ§ | 
|---|
|  |  |  | //æ¥è¯¢æ¶è´§æç»æ¯å¦æåå¨åä¸ä¸ªæ¹æ¬¡ | 
|---|
|  |  |  | Dt_SupplierInfo supplierInfo = _supplierInfoRepository.QueryFirst(x => x.SupplierCode == receiveOrder.SuppliersId); | 
|---|
|  |  |  | //æ¶è´§å¢å æ¹æ¬¡å¡æ§,æ¥è¯¢æ¶è´§æç»æ¯å¦æåå¨åä¸ä¸ªæ¹æ¬¡ | 
|---|
|  |  |  | Dt_ReceiveOrderDetail receiveOrderDetailOld = _inboundRepository.ReceiveOrderDetailRepository.QueryFirst(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode); | 
|---|
|  |  |  | Dt_ReceiveOrder? receiveOrderOld = null; | 
|---|
|  |  |  | if (receiveOrderDetailOld!=null) | 
|---|
|  |  |  | 
|---|
|  |  |  | if (materielInfo.IsCheck == WhetherEnum.True) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); | 
|---|
|  |  |  | checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt(); | 
|---|
|  |  |  | checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; | 
|---|
|  |  |  | checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; | 
|---|
|  |  |  | checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); | 
|---|
|  |  |  | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); | 
|---|
|  |  |  | #region æ³¨é | 
|---|
|  |  |  | if (materielInfo.IsCheck == WhetherEnum.True) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); | 
|---|
|  |  |  | checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt(); | 
|---|
|  |  |  | checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; | 
|---|
|  |  |  | checkOrder.Result = CheckAcceptEnum.NotCheckAccept.ToString(); | 
|---|
|  |  |  | checkOrder.QualifiedQuantity = 0; | 
|---|
|  |  |  | checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo; | 
|---|
|  |  |  | checkOrder.WarehouseId = receiveOrder.WarehouseId; | 
|---|
|  |  |  | checkOrder.ScrappedQuantity = 0; | 
|---|
|  |  |  | checkOrder.MaterielSpec = materielInfo.MaterielSpec; | 
|---|
|  |  |  | checkOrder.ReturnQuantity = 0; | 
|---|
|  |  |  | checkOrder.DefectedQuantity = 0; | 
|---|
|  |  |  | _checkOrderRepository.AddData(checkOrder); | 
|---|
|  |  |  | int id = _checkOrderRepository.AddData(checkOrder); | 
|---|
|  |  |  | QMSReceiveCheckModel qMSReceiveCheck = new QMSReceiveCheckModel() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | UniqueTag = id.ToString(), | 
|---|
|  |  |  | EntryNumber = receiveOrder.ReceiveOrderNo, | 
|---|
|  |  |  | MaterialCode = receiveOrderDetail.MaterielCode, | 
|---|
|  |  |  | MaterialName = receiveOrderDetail.MaterielName, | 
|---|
|  |  |  | Quantity = (decimal)receiveOrderDetail.ReceivedQuantity, | 
|---|
|  |  |  | SupplierCode = receiveOrder.SuppliersId, | 
|---|
|  |  |  | SupplierName = supplierInfo.SupplierName, | 
|---|
|  |  |  | BatchNumber = receiveOrderDetail.LotNo, | 
|---|
|  |  |  | DeliveryNumber = receiveOrder.DeliveryCode, | 
|---|
|  |  |  | PurchaseNumber = receiveOrderDetail.PurchaseOrderNo, | 
|---|
|  |  |  | RowNumber = receiveOrderDetail.RowNo, | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|