| | |
| | |  |
| | | 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(); |
| | |
| | | { |
| | | 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) |
| | | { |
| | |
| | | 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; |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error($"该éè´åæ¶è´§å·²å®æ"); |
| | | } |
| | | Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.Where(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt())).FirstOrDefault(); |
| | | 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) |
| | | { |
| | | return WebResponseContent.Instance.Error($"该éè´åæç»æ¶è´§å·²å®æ"); |
| | |
| | | purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity; |
| | | if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"éè´åè¯¥ç©ææ°éåæ¶è´§æ°éä¸ä¸è´"); |
| | | return WebResponseContent.Instance.Error($"éè´åè¡å·{purchaseOrderDetail.RowNo}ç©æ{purchaseOrderDetail.MaterielCode}æ°é溢åº:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}"); |
| | | } |
| | | if (purchaseOrderDetail.PurchaseDetailReceiveQty == purchaseOrderDetail.PurchaseDetailQuantity) |
| | | { |
| | |
| | | } |
| | | if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity) |
| | | { |
| | | return WebResponseContent.Instance.Error($"éè´åè¯¥ç©ææ°éåæ¶è´§æ°éä¸ä¸è´"); |
| | | return WebResponseContent.Instance.Error($"éè´åè¡å·{purchaseOrderDetail.RowNo}ç©æ{purchaseOrderDetail.MaterielCode}æ°é溢åº:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}"); |
| | | } |
| | | if (purchaseOrderDetail.PurchaseDetailQuantity == purchaseOrderDetail.PurchaseDetailReceiveQty) |
| | | { |
| | |
| | | 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); |
| | | #region 注é |
| | | ////if (materielInfo.IsCheck == WhetherEnum.True) |
| | | ////{ |
| | | //// Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); |
| | | //// 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 |
| | | 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(); |
| | | } |
| | | |