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