using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; using WIDESEA_IApprovalRepository; using WIDESEA_ICheckRepository; using WIDESEA_ICheckService; using WIDESEA_IInboundRepository; using WIDESEA_Model.Models; namespace WIDESEA_CheckService { public class CheckOrderResultService : ServiceBase, ICheckOrderResultService { private readonly ICheckOrderRepository _checkOrderRepository; private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IReceiveOrderRepository _receiveOrderRepository; private readonly ICheckOrderService _checkOrderService; private readonly IPurchaseOrderRepository _purchaseOrderRepository; private readonly IPurchaseOrderDetailRepository _purchaseOrderDetailRepository; public CheckOrderResultService(ICheckOrderResultRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICheckOrderRepository checkOrderRepository, IReceiveOrderRepository receiveOrderRepository, ICheckOrderService checkOrderService, IPurchaseOrderRepository purchaseOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository) : base(BaseDal) { _checkOrderRepository = checkOrderRepository; _unitOfWorkManage = unitOfWorkManage; _receiveOrderRepository = receiveOrderRepository; _checkOrderService = checkOrderService; _purchaseOrderRepository = purchaseOrderRepository; _purchaseOrderDetailRepository = purchaseOrderDetailRepository; } /// /// 提交质检结果 /// /// 质检单主键 /// 质检结果对象 /// 是否接受 /// 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 content.Error($"未找到该质检单"); } Dt_ReceiveOrder receiveOrder = _receiveOrderRepository.Db.Queryable().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 content.Error($"该单据已经检验完成"); } Dt_CheckOrderResult? checkOrderResult = null; Dt_PurchaseOrder? purchaseOrder = null; Dt_PurchaseOrderDetail? purchaseOrderDetail= null; if (checkResult.CheckOrderId!=0) { 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().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 (IsAccept==CheckAcceptEnum.Accept.ObjToInt()) { checkOrder.Result = CheckAcceptEnum.Accept.ToString(); } else if (IsAccept == CheckAcceptEnum.UnAccept.ObjToInt()) { checkOrder.Result = CheckAcceptEnum.UnAccept.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 && 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 { checkOrderResult }:new List()); 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; } /// /// 获取检验信息 /// 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; } } }