|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | using AutoMapper; | 
|---|
|  |  |  | using Newtonsoft.Json; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using System.Globalization; | 
|---|
|  |  |  | using System.Linq; | 
|---|
|  |  |  | using System.Text; | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | 
|---|
|  |  |  | using WIDESEA_Core.BaseServices; | 
|---|
|  |  |  | using WIDESEA_Core.CodeConfigEnum; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | using WIDESEA_IInboundService; | 
|---|
|  |  |  | using WIDESEA_IStockRepository; | 
|---|
|  |  |  | using WIDESEA_Model.Models; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace WIDESEA_InboundService | 
|---|
|  |  |  | 
|---|
|  |  |  | private readonly IInboundRepository _inboundRepository; | 
|---|
|  |  |  | 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) : 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; | 
|---|
|  |  |  | _inboundRepository = inboundRepository; | 
|---|
|  |  |  | _basicRepository = basicRepository; | 
|---|
|  |  |  | _checkOrderRepository = checkOrderRepository; | 
|---|
|  |  |  | _stockRepository = stockRepository; | 
|---|
|  |  |  | _supplierInfoRepository = supplierInfoRepository; | 
|---|
|  |  |  | _invokeQMSService = invokeQMSService; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static object _rowNoLocker = new object(); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderNo == orderNo); | 
|---|
|  |  |  | Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (receiveOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥æ¶è´§å"); | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | receiveOrderOld = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderId == receiveOrderDetailOld.ReceiveOrderId); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (receiveOrderDetailOld!=null && receiveOrderOld?.WarehouseId== receiveOrder.WarehouseId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æ¶è´§åå·{receiveOrderOld.ReceiveOrderNo}䏿¹æ¬¡{model.LotNo}å·²åå¨"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //æ¥è¯¢åºåæ¹æ¬¡æ¯å¦æåå¨åä¸ä¸ªæ¹æ¬¡ | 
|---|
|  |  |  | Dt_StockInfoDetail stockInfoDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == model.LotNo && x.MaterielCode == model.MaterielCode); | 
|---|
|  |  |  | Dt_StockInfo? stockInfo = null; | 
|---|
|  |  |  | if (stockInfoDetail!=null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.Id == stockInfoDetail.Id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (stockInfoDetail!=null && stockInfo?.WarehouseId==receiveOrder.WarehouseId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"åºå{stockInfo.PalletCode}䏿¹æ¬¡{model.LotNo}å·²åå¨"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (model!=null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string format = "yyyy-MM-dd"; // ç®æ æ ¼å¼ | 
|---|
|  |  |  | DateTime parsedDate; | 
|---|
|  |  |  | // è§£æéªè¯æ ¼å¼ | 
|---|
|  |  |  | bool isValidEffDate = DateTime.TryParseExact( | 
|---|
|  |  |  | model.EffectiveDate, | 
|---|
|  |  |  | format, | 
|---|
|  |  |  | CultureInfo.InvariantCulture, | 
|---|
|  |  |  | DateTimeStyles.None, | 
|---|
|  |  |  | out parsedDate | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | bool isValidProDate = DateTime.TryParseExact( | 
|---|
|  |  |  | model.ProductionDate, | 
|---|
|  |  |  | format, | 
|---|
|  |  |  | CultureInfo.InvariantCulture, | 
|---|
|  |  |  | DateTimeStyles.None, | 
|---|
|  |  |  | out parsedDate | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!isValidEffDate || !isValidProDate) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error("æ ¼å¼æ æææ¥æä¸åæ³"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterielCode); | 
|---|
|  |  |  | if (materielInfo == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ç©æçä¿¡æ¯"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo); | 
|---|
|  |  |  | //该æ¶è´§åä»åºæ¯å¦æè¯¥ç©æ | 
|---|
|  |  |  | if (materielInfo.WarehouseId != receiveOrder.WarehouseId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"è¯¥ç©æä¸å±äºè¯¥ä»åº"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //æ éè´åè¿è¡æ¶è´§ | 
|---|
|  |  |  | if (receiveOrder.ReceiveOrderType != ReceiveOrderTypeEnum.PO.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //è·åå
·ä½æ¹æ¬¡åç©æ | 
|---|
|  |  |  | Dt_ReceiveOrderDetail? detailNoPo = receiveOrder.Details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode); | 
|---|
|  |  |  | lock (_rowNoLocker) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (detailNoPo != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //åææ¶è´§æç»å¢å æ¶è´§æ°é | 
|---|
|  |  |  | detailNoPo.ReceivedQuantity += model.Quantity; | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | BaseDal.UpdateData(detailNoPo); | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | int rowNo = 0; | 
|---|
|  |  |  | if (receiveOrder.Details.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | rowNo = receiveOrder.Details.Max(x => x.RowNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PurchaseOrderNo = model.PurchaseOrderNo, | 
|---|
|  |  |  | ReceivedQuantity = model.Quantity, | 
|---|
|  |  |  | MaterielCode = model.MaterielCode, | 
|---|
|  |  |  | LotNo = model.LotNo, | 
|---|
|  |  |  | MaterielName = materielInfo.MaterielName, | 
|---|
|  |  |  | MaterielSpec = materielInfo.MaterielSpec, | 
|---|
|  |  |  | ReceiveOrderId = receiveOrder.ReceiveOrderId, | 
|---|
|  |  |  | PurchaseOrderDetailRowNo = rowNo + 1, | 
|---|
|  |  |  | IfInspection = materielInfo.IsCheck.ObjToInt(), | 
|---|
|  |  |  | CurrCode = "", | 
|---|
|  |  |  | PriceInTax = 0, | 
|---|
|  |  |  | TaxRate = "", | 
|---|
|  |  |  | RowNo = rowNo + 1, | 
|---|
|  |  |  | Unit = materielInfo.MaterielUnit | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | _inboundRepository.ReceiveOrderDetailRepository.AddData(receiveOrderDetail); | 
|---|
|  |  |  | _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); | 
|---|
|  |  |  | #region æ³¨é | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | checkOrder.ScrappedQuantity = 0; | 
|---|
|  |  |  | checkOrder.ReturnQuantity = 0; | 
|---|
|  |  |  | checkOrder.DefectedQuantity = 0; | 
|---|
|  |  |  | _checkOrderRepository.AddData(checkOrder); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return WebResponseContent.Instance.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x => x.Details).First(); | 
|---|
|  |  |  | if (purchaseOrder == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´å"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (purchaseOrder.Details.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´åæç»æ°æ®"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (purchaseOrder.SupplierCode != receiveOrder.SuppliersId) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"ä¾åºåä¸ä¸è´,请æ°å»ºæ¶è´§å"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"该éè´åæ¶è´§å·²å®æ"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<Dt_PurchaseOrderDetail> purchaseOrderDetails = _inboundRepository.PurchaseOrderDetailRepository.QueryData(x => x.PurchaseOrderId == purchaseOrder.Id); | 
|---|
|  |  |  | if (purchaseOrderDetails == null || purchaseOrderDetails.Count == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥éè´åæç»æ°æ®"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrderDetails.FirstOrDefault(x => x.PurchaseDetailQuantity == model.Quantity && x.MaterielCode == model.MaterielCode && x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt()); | 
|---|
|  |  |  | Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.Where(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt())).OrderBy(x=>x.Id).FirstOrDefault(); | 
|---|
|  |  |  | if (purchaseOrderDetail == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (purchaseOrderDetails.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"该æç»æ¶è´§å·²å®æ"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçéè´åæç»æ°æ®"); | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"该éè´åæç»æ¶è´§å·²å®æ"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_ReceiveOrderDetail detail = BaseDal.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo); | 
|---|
|  |  |  | if (detail != null) | 
|---|
|  |  |  | //å¤æè¯¥éè´åæç»æ¯å¦å·²åå¨æç» | 
|---|
|  |  |  | List<Dt_ReceiveOrderDetail> details = receiveOrder.Details.Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo && x.MaterielCode == model.MaterielCode).ToList(); | 
|---|
|  |  |  | if (details.Count >0 && details.Sum(x=>x.ReceivedQuantity) == purchaseOrderDetail.PurchaseDetailQuantity) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"该æç»æ¶è´§å·²å®æ"); | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"该æ¶è´§åæç»å·²æ¶è´§"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //è·åå
·ä½æ¹æ¬¡åç©æ | 
|---|
|  |  |  | Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode==model.MaterielCode); | 
|---|
|  |  |  | lock (_rowNoLocker) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | int rowNo = 0; | 
|---|
|  |  |  | List<Dt_ReceiveOrderDetail> receiveOrderDetails = BaseDal.QueryData(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId); | 
|---|
|  |  |  | if (receiveOrderDetails != null && receiveOrderDetails.Count > 0) | 
|---|
|  |  |  | if (detail != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | rowNo = receiveOrderDetails.Max(x => x.RowNo); | 
|---|
|  |  |  | //åææ¶è´§æç»å¢å æ¶è´§æ°é | 
|---|
|  |  |  | detail.ReceivedQuantity += model.Quantity; | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity; | 
|---|
|  |  |  | if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"éè´åè¡å·{purchaseOrderDetail.RowNo}ç©æ{purchaseOrderDetail.MaterielCode}æ°é溢åº:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (purchaseOrderDetail.PurchaseDetailReceiveQty == purchaseOrderDetail.PurchaseDetailQuantity) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty); | 
|---|
|  |  |  | if (purchaseOrder.OrderQuantity == sumQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); | 
|---|
|  |  |  | BaseDal.UpdateData(detail); | 
|---|
|  |  |  | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | int rowNo = 0; | 
|---|
|  |  |  | if (receiveOrder.Details.Count > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | rowNo = receiveOrder.Details.Max(x => x.RowNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PurchaseOrderNo = model.PurchaseOrderNo, | 
|---|
|  |  |  | ReceivedQuantity = model.Quantity, | 
|---|
|  |  |  | MaterielCode = model.MaterielCode, | 
|---|
|  |  |  | LotNo = model.LotNo, | 
|---|
|  |  |  | MaterielName=materielInfo.MaterielName, | 
|---|
|  |  |  | MaterielSpec=materielInfo.MaterielSpec, | 
|---|
|  |  |  | ReceiveOrderId = receiveOrder.ReceiveOrderId, | 
|---|
|  |  |  | PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo, | 
|---|
|  |  |  | IfInspection = materielInfo.IsCheck.ObjToInt(), | 
|---|
|  |  |  | CurrCode = "", | 
|---|
|  |  |  | PriceInTax = 0, | 
|---|
|  |  |  | TaxRate = "", | 
|---|
|  |  |  | RowNo = rowNo + 1, | 
|---|
|  |  |  | Unit = purchaseOrderDetail.Unit | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //夿éè´æç»æ°é | 
|---|
|  |  |  | if (purchaseOrderDetail.PurchaseDetailQuantity < model.Quantity) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"请核对éè´åè¯¥ç©ææ°é"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (purchaseOrderDetail.PurchaseDetailReceiveQty > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailReceiveQty = model.Quantity; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return WebResponseContent.Instance.Error($"éè´åè¡å·{purchaseOrderDetail.RowNo}ç©æ{purchaseOrderDetail.MaterielCode}æ°é溢åº:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (purchaseOrderDetail.PurchaseDetailQuantity == purchaseOrderDetail.PurchaseDetailReceiveQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty); //+ model.Quantity | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | BaseDal.AddData(receiveOrderDetail); | 
|---|
|  |  |  | if (purchaseOrder.OrderQuantity == sumQty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt(); | 
|---|
|  |  |  | _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(purchaseOrder.PurchaseOrderStatus== PurchaseOrderStatusEnum.NotReceived.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt(); | 
|---|
|  |  |  | _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); | 
|---|
|  |  |  | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | PurchaseOrderNo = model.PurchaseOrderNo, | 
|---|
|  |  |  | ReceivedQuantity = model.Quantity, | 
|---|
|  |  |  | MaterielCode = model.MaterielCode, | 
|---|
|  |  |  | LotNo = model.LotNo, | 
|---|
|  |  |  | ReceiveOrderId = receiveOrder.ReceiveOrderId, | 
|---|
|  |  |  | PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo, | 
|---|
|  |  |  | IfInspection = materielInfo.IsCheck.ObjToInt(), | 
|---|
|  |  |  | CurrCode = "", | 
|---|
|  |  |  | PriceInTax = 0, | 
|---|
|  |  |  | TaxRate = "", | 
|---|
|  |  |  | RowNo = rowNo + 1, | 
|---|
|  |  |  | Unit = purchaseOrderDetail.Unit | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _unitOfWorkManage.BeginTran(); | 
|---|
|  |  |  | BaseDal.AddData(receiveOrderDetail); | 
|---|
|  |  |  | _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); | 
|---|
|  |  |  | _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (materielInfo.IsCheck == WhetherEnum.True) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); | 
|---|
|  |  |  | checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; | 
|---|
|  |  |  | checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; | 
|---|
|  |  |  | checkOrder.ScrappedQuantity = 0; | 
|---|
|  |  |  | checkOrder.ReturnQuantity = 0; | 
|---|
|  |  |  | checkOrder.DefectedQuantity = 0; | 
|---|
|  |  |  | _checkOrderRepository.AddData(checkOrder); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _unitOfWorkManage.CommitTran(); | 
|---|
|  |  |  | return WebResponseContent.Instance.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|