From 9ec715d2deb18a269dd49c48da91a36632d08c81 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期三, 18 六月 2025 00:56:26 +0800 Subject: [PATCH] 最新代码上传,优化功能等 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs | 325 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 294 insertions(+), 31 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs" index 79dda98..1ecc986 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs" @@ -4,12 +4,18 @@ 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 @@ -17,66 +23,323 @@ 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; } } } -- Gitblit v1.9.3