| | |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseRepository; |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_IApprovalRepository; |
| | | using WIDESEA_ICheckRepository; |
| | | using WIDESEA_ICheckService; |
| | | using WIDESEA_IInboundRepository; |
| | | using WIDESEA_IOutboundRepository; |
| | | using WIDESEA_IStockRepository; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_CheckService |
| | |
| | | public class CheckOrderResultService : ServiceBase<Dt_CheckOrderResult, ICheckOrderResultRepository>, ICheckOrderResultService |
| | | { |
| | | private readonly ICheckOrderRepository _checkOrderRepository; |
| | | |
| | | public CheckOrderResultService(ICheckOrderResultRepository BaseDal, ICheckOrderRepository checkOrderRepository) : base(BaseDal) |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IReceiveOrderRepository _receiveOrderRepository; |
| | | private readonly ICheckOrderService _checkOrderService; |
| | | private readonly IPurchaseOrderRepository _purchaseOrderRepository; |
| | | private readonly IPurchaseOrderDetailRepository _purchaseOrderDetailRepository; |
| | | private readonly IOutboundRepository _outboundRepository; |
| | | private readonly IStockRepository _stockRepository; |
| | | public CheckOrderResultService(ICheckOrderResultRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICheckOrderRepository checkOrderRepository, IReceiveOrderRepository receiveOrderRepository, ICheckOrderService checkOrderService, IPurchaseOrderRepository purchaseOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IOutboundRepository outboundRepository, IStockRepository stockRepository) : base(BaseDal) |
| | | { |
| | | _checkOrderRepository = checkOrderRepository; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _receiveOrderRepository = receiveOrderRepository; |
| | | _checkOrderService = checkOrderService; |
| | | _purchaseOrderRepository = purchaseOrderRepository; |
| | | _purchaseOrderDetailRepository = purchaseOrderDetailRepository; |
| | | _outboundRepository = outboundRepository; |
| | | _stockRepository = stockRepository; |
| | | } |
| | | |
| | | public WebResponseContent CommitCheckResult(int checkOrderId, Dt_CheckOrderResult checkResult) |
| | | /// <summary> |
| | | /// æäº¤è´¨æ£ç»æ |
| | | /// </summary> |
| | | /// <param name="checkOrderId">è´¨æ£å主é®</param> |
| | | /// <param name="checkResult">è´¨æ£ç»æå¯¹è±¡</param> |
| | | /// <param name="IsAccept">æ¯å¦æ¥å</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent CommitCheckResult(int checkOrderId,Dt_CheckOrderResult checkResult,int IsAccept=0) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == checkOrderId); |
| | | //è·åè´¨æ£å对åºçæ¶è´§å |
| | | if (checkOrder == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥è´¨æ£å"); |
| | | return content.Error($"æªæ¾å°è¯¥è´¨æ£å"); |
| | | } |
| | | Dt_ReceiveOrder receiveOrder = _receiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == checkOrder.ReceiveOrderNo).Includes(x => x.Details).First(); |
| | | if (receiveOrder.ReceiveOrderStatus!=ReceiveOrderStatusEnum.Completed.ObjToInt()) |
| | | { |
| | | return content.Error($"{receiveOrder.ReceiveOrderNo}æ¶è´§åæªå®ææ æ³è´¨æ£"); |
| | | } |
| | | if (checkOrder.CheckOrderStatus == CheckOrderStatusEnum.Checked.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è¯¥åæ®å·²ç»æ£éªå®æ"); |
| | | return content.Error($"è¯¥åæ®å·²ç»æ£éªå®æ"); |
| | | } |
| | | if (checkResult.Quantity < 0 || checkResult.Quantity > checkOrder.ReceivedQuantity || checkOrder.ReceivedQuantity - checkOrder.ScrappedQuantity - checkOrder.DefectedQuantity - checkOrder.ReturnQuantity < checkResult.Quantity) |
| | | Dt_CheckOrderResult? checkOrderResult = null; |
| | | Dt_PurchaseOrder? purchaseOrder = null; |
| | | Dt_PurchaseOrderDetail? purchaseOrderDetail= null; |
| | | if (checkResult.CheckOrderId!=0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ°éè¾å
¥é误"); |
| | | if (checkResult.Quantity < 0 || checkResult.Quantity > checkOrder.ReceivedQuantity || checkOrder.ReceivedQuantity - checkOrder.ReturnQuantity < checkResult.Quantity) |
| | | { |
| | | return content.Error($"æ°éè¶
åº"); |
| | | } |
| | | if (checkResult.Result == CheckResultEnum.Return.ToString())//éè´§ |
| | | { |
| | | checkOrder.DefectedNote = checkResult.Note; |
| | | checkOrder.ReturnQuantity += checkResult.Quantity; |
| | | } |
| | | else |
| | | { |
| | | return content.Error($"æªæ¾å°ç¼ºé·ç±»å"); |
| | | } |
| | | checkOrderResult = new Dt_CheckOrderResult() |
| | | { |
| | | Quantity = checkResult.Quantity, |
| | | CheckOrderId = checkOrderId, |
| | | DefectCode = checkResult.DefectCode, |
| | | Result = checkResult.Result, |
| | | Note = checkResult.Note, |
| | | SampleCount=checkResult.SampleCount, |
| | | }; |
| | | //è·å对åºéè´å |
| | | Dt_ReceiveOrderDetail receiveOrderDetail = receiveOrder.Details.First(x => x.RowNo == checkOrder.ReceiveDetailRowNo); |
| | | purchaseOrder = _purchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == receiveOrderDetail.PurchaseOrderNo).Includes(x => x.Details).Where(x => x.Details.Any(v => v.RowNo == receiveOrderDetail.PurchaseOrderDetailRowNo)).First(); |
| | | if (purchaseOrder == null) |
| | | { |
| | | return content.Error("æªæ¾å°å¯¹åºæ¶è´§éè´å"); |
| | | } |
| | | purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(); |
| | | if (purchaseOrderDetail==null) |
| | | { |
| | | return content.Error("æªæ¾å°é货对åºçéè´åæç»"); |
| | | } |
| | | purchaseOrderDetail.PurchaseDetailReceiveQty -= checkResult.Quantity; |
| | | } |
| | | if (checkResult.Result == CheckResultEnum.Defect.ToString())//ç¹é |
| | | if (IsAccept==CheckAcceptEnum.Accept.ObjToInt()) |
| | | { |
| | | checkOrder.DefectedNote = checkResult.Note; |
| | | checkOrder.DefectedQuantity += checkResult.Quantity; |
| | | checkOrder.QualifiedQuantity -= checkResult.Quantity; |
| | | checkOrder.Result = CheckAcceptEnum.Accept.ToString(); |
| | | } |
| | | else if (checkResult.Result == CheckResultEnum.Return.ToString())//éè´§ |
| | | else if (IsAccept == CheckAcceptEnum.UnAccept.ObjToInt()) |
| | | { |
| | | checkOrder.DefectedNote = checkResult.Note; |
| | | checkOrder.ReturnQuantity += checkResult.Quantity; |
| | | checkOrder.QualifiedQuantity -= checkResult.Quantity; |
| | | checkOrder.Result = CheckAcceptEnum.UnAccept.ToString(); |
| | | } |
| | | else if (checkResult.Result == CheckResultEnum.Scrapped.ToString())//æ¥åº |
| | | else |
| | | { |
| | | checkOrder.DefectedNote = checkResult.Note; |
| | | checkOrder.ScrappedQuantity += checkResult.Quantity; |
| | | checkOrder.QualifiedQuantity -= checkResult.Quantity; |
| | | return content.Error("æªæ¾å°æ£éªç±»å"); |
| | | } |
| | | |
| | | checkOrder.CheckOrderStatus = CheckOrderStatusEnum.Checked.ObjToInt(); |
| | | |
| | | Dt_CheckOrderResult checkOrderResult = new Dt_CheckOrderResult() |
| | | if (checkOrderResult!=null) |
| | | { |
| | | Quantity = checkResult.Quantity, |
| | | CheckOrderId = checkOrderId, |
| | | DefectCode = checkResult.DefectCode, |
| | | Result = checkResult.Result, |
| | | Note = checkResult.Note |
| | | }; |
| | | checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity - checkOrderResult.Quantity; |
| | | } |
| | | else |
| | | { |
| | | checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity; |
| | | } |
| | | checkOrder.CheckUserName = App.User.UserName; |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | if (checkOrderResult!=null && purchaseOrder!=null && purchaseOrderDetail!=null) |
| | | { |
| | | BaseDal.AddData(checkOrderResult); |
| | | if (purchaseOrder.PurchaseOrderStatus>=PurchaseOrderStatusEnum.Received.ObjToInt()) |
| | | { |
| | | purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt(); |
| | | _purchaseOrderRepository.UpdateData(purchaseOrder); |
| | | } |
| | | if (purchaseOrderDetail.PurchaseDetailStatus== PurchaseOrderDetailStatusEnum.Received.ObjToInt()) |
| | | { |
| | | purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt(); |
| | | } |
| | | _purchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); |
| | | } |
| | | //ERP䏿¥ |
| | | WebResponseContent responseContent= _checkOrderService.FeedbackCheckResult(checkOrder, checkOrderResult!=null? new List<Dt_CheckOrderResult> { checkOrderResult }:new List<Dt_CheckOrderResult>()); |
| | | if (!responseContent.Status) |
| | | { |
| | | throw new Exception(responseContent.Message); |
| | | } |
| | | checkOrder.UploadStatus = CheckUploadEnum.UploadOk.ObjToInt(); |
| | | _checkOrderRepository.UpdateData(checkOrder); |
| | | BaseDal.AddData(checkOrderResult); |
| | | return WebResponseContent.Instance.OK(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"{ex.Message}"); |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error($"{ex.Message}"); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// æäº¤éæ£ç¡®è®¤ç»æ |
| | | /// </summary> |
| | | /// <param name="checkOrderId"></param> |
| | | /// <param name="checkResult"></param> |
| | | /// <param name="IsAccept"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent CommitInspectResult(int checkOrderId, Dt_CheckOrderResult checkResult, int IsAccept = 0) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_CheckOrder checkOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == checkOrderId); |
| | | //è·åè´¨æ£å对åºçæ¶è´§å |
| | | if (checkOrder == null) |
| | | { |
| | | return content.Error($"æªæ¾å°è¯¥è´¨æ£å"); |
| | | } |
| | | Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == checkOrder.ReceiveOrderNo).Includes(x => x.Details).First(); |
| | | if (outboundOrder.OrderStatus != OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | { |
| | | return content.Error($"{outboundOrder.OrderNo}鿣ååºåºæªå®ææ æ³è´¨æ£"); |
| | | } |
| | | if (checkOrder.CheckOrderStatus == CheckOrderStatusEnum.Checked.ObjToInt()) |
| | | { |
| | | return content.Error($"è¯¥åæ®å·²ç»æ£éªå®æ"); |
| | | } |
| | | Dt_CheckOrderResult? checkOrderResult = null; |
| | | //è·ååºå |
| | | Dt_OutStockLockInfo outStockLockInfo = _outboundRepository.OutboundStockLockInfoRepository.QueryFirst(x => x.Id == checkOrder.ReceiveDetailRowNo) ?? throw new Exception("æªæ¾å°éæ£å详æ
"); |
| | | Dt_StockInfo? stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>() |
| | | .Where(x => x.PalletCode == outStockLockInfo.PalletCode && x.StockStatus == StockStatusEmun.鿣宿.ObjToInt()).Includes(x => x.Details).First() ?? throw new Exception("æªæ¾å°éæ£å对åºåºåæ°æ®"); |
| | | List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); |
| | | List<Dt_StockInfoDetail> DelStockDetails =new List<Dt_StockInfoDetail>(); |
| | | if (checkResult.CheckOrderId != 0) |
| | | { |
| | | if (checkResult.Quantity < 0 || checkResult.Quantity > checkOrder.ReceivedQuantity) |
| | | { |
| | | return content.Error($"æ°éè¶
åº"); |
| | | } |
| | | if (checkResult.Result == InspectResultEnum.Return.ToString())//éè´§ |
| | | { |
| | | checkOrder.DefectedNote = checkResult.Note; |
| | | checkOrder.ReturnQuantity += checkResult.Quantity; |
| | | } |
| | | else if(checkResult.Result == InspectResultEnum.Defect.ToString()) |
| | | { |
| | | checkOrder.DefectedNote = checkResult.Note; |
| | | checkOrder.DefectedQuantity += checkResult.Quantity; |
| | | } |
| | | else if (checkResult.Result == InspectResultEnum.Scrapped.ToString()) |
| | | { |
| | | checkOrder.DefectedNote = checkResult.Note; |
| | | checkOrder.ScrappedQuantity += checkResult.Quantity; |
| | | } |
| | | else |
| | | { |
| | | return content.Error($"æªæ¾å°ç¼ºé·ç±»å"); |
| | | } |
| | | checkOrderResult = new Dt_CheckOrderResult() |
| | | { |
| | | Quantity = checkResult.Quantity, |
| | | CheckOrderId = checkOrderId, |
| | | DefectCode = checkResult.DefectCode, |
| | | Result = checkResult.Result, |
| | | Note = checkResult.Note, |
| | | SampleCount = checkResult.SampleCount, |
| | | }; |
| | | if (Math.Round(checkResult.Quantity,2) == Math.Round(stockInfoDetails.Sum(x=>x.StockQuantity),2)) |
| | | { |
| | | DelStockDetails = stockInfo.Details; |
| | | } |
| | | else |
| | | { |
| | | foreach (var item in stockInfo.Details) |
| | | { |
| | | if (checkResult.Quantity == 0) |
| | | { |
| | | break; |
| | | } |
| | | else if(checkResult.Quantity< item.StockQuantity) |
| | | { |
| | | checkResult.Quantity = 0; |
| | | item.StockQuantity -= checkResult.Quantity; |
| | | stockInfoDetails.Add(item); |
| | | } |
| | | else if (checkResult.Quantity >= item.StockQuantity) |
| | | { |
| | | checkResult.Quantity = (float)Math.Round((checkResult.Quantity-item.StockQuantity), 2); |
| | | DelStockDetails.Add(item); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | if (IsAccept == InspectAcceptEnum.Accept.ObjToInt()) |
| | | { |
| | | checkOrder.Result = InspectAcceptEnum.Accept.ToString(); |
| | | } |
| | | else if (IsAccept == InspectAcceptEnum.UnAccept.ObjToInt()) |
| | | { |
| | | checkOrder.Result = InspectAcceptEnum.UnAccept.ToString(); |
| | | } |
| | | else if (IsAccept == InspectAcceptEnum.DefectAccept.ObjToInt()) |
| | | { |
| | | checkOrder.Result = InspectAcceptEnum.DefectAccept.ToString(); |
| | | } |
| | | else |
| | | { |
| | | return content.Error("æªæ¾å°æ£éªç±»å"); |
| | | } |
| | | checkOrder.CheckOrderStatus = CheckOrderStatusEnum.Checked.ObjToInt(); |
| | | if (checkOrderResult != null) |
| | | { |
| | | checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity - checkOrderResult.Quantity; |
| | | } |
| | | else |
| | | { |
| | | checkOrder.QualifiedQuantity = checkOrder.ReceivedQuantity; |
| | | } |
| | | checkOrder.CheckUserName = App.User.UserName; |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | if (checkOrderResult != null) |
| | | { |
| | | BaseDal.AddData(checkOrderResult); |
| | | } |
| | | //æ¸
é¤åºåæ°é |
| | | if (stockInfoDetails.Count>0) |
| | | { |
| | | _stockRepository.StockInfoDetailRepository.UpdateData(stockInfoDetails); |
| | | } |
| | | if (DelStockDetails.Count>0) |
| | | { |
| | | _stockRepository.StockInfoDetailRepository.DeleteAndMoveIntoHty(DelStockDetails, App.User.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | } |
| | | if (DelStockDetails.Count==stockInfo.Details.Count) |
| | | { |
| | | _stockRepository.StockInfoRepository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | } |
| | | //ERP䏿¥ |
| | | WebResponseContent responseContent = _checkOrderService.FeedbackInspectResult(checkOrder, checkOrderResult != null ? new List<Dt_CheckOrderResult> { checkOrderResult } : new List<Dt_CheckOrderResult>()); |
| | | if (!responseContent.Status) |
| | | { |
| | | throw new Exception(responseContent.Message); |
| | | } |
| | | checkOrder.UploadStatus = CheckUploadEnum.UploadOk.ObjToInt(); |
| | | _checkOrderRepository.UpdateData(checkOrder); |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error($"{ex.Message}"); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// è·åæ£éªä¿¡æ¯ |
| | | /// </summary> |
| | | public WebResponseContent GetCheckResultInfo(int checkId) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_CheckOrderResult checkOrderResult = BaseDal.QueryFirst(x => x.CheckOrderId == checkId); |
| | | content.OK("æå", checkOrderResult); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | } |
| | | } |