From 39ee9078d88fd4787437360e7f69ed999aaf0b7b Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 28 十二月 2024 09:14:41 +0800
Subject: [PATCH] 更新代码

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs |  169 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 109 insertions(+), 60 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
index 188c4e0..76ab96e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
@@ -49,7 +49,7 @@
         {
             try
             {
-                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderNo == orderNo);
+                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x=>x.Details).First();
                 if (receiveOrder == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌鏀惰揣鍗�");
@@ -67,92 +67,141 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
                 }
-
-                Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo);
+                //璇ユ敹璐у崟浠撳簱鏄惁鏈夎鐗╂枡
+                if (materielInfo.WarehouseId!= receiveOrder.WarehouseId)
+                {
+                    return WebResponseContent.Instance.Error($"璇ョ墿鏂欎笉灞炰簬璇ヤ粨搴�");
+                }
+                Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x=>x.Details).First();
                 if (purchaseOrder == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗�");
                 }
-
+                if (purchaseOrder.Details.Count == 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗曟槑缁嗘暟鎹�");
+                }
                 if (purchaseOrder.SupplierCode != receiveOrder.SuppliersId)
                 {
                     return WebResponseContent.Instance.Error($"渚涘簲鍟嗕笉涓�鑷�,璇锋柊寤烘敹璐у崟");
                 }
-
                 if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt())
                 {
                     return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏀惰揣宸插畬鎴�");
                 }
-
-                List<Dt_PurchaseOrderDetail> purchaseOrderDetails = _inboundRepository.PurchaseOrderDetailRepository.QueryData(x => x.PurchaseOrderId == purchaseOrder.Id);
-                if (purchaseOrderDetails == null || purchaseOrderDetails.Count == 0)
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗曟槑缁嗘暟鎹�");
-                }
-
-                Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrderDetails.FirstOrDefault(x => x.PurchaseDetailQuantity == model.Quantity && x.MaterielCode == model.MaterielCode && x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt());
+                Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt()));
                 if (purchaseOrderDetail == null)
                 {
-                    if (purchaseOrderDetails.Count > 0)
+                    if (purchaseOrder.Details.Count > 0)
                     {
                         return WebResponseContent.Instance.Error($"璇ユ槑缁嗘敹璐у凡瀹屾垚");
                     }
-                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑閲囪喘鍗曟槑缁嗘暟鎹�");
                 }
-                Dt_ReceiveOrderDetail detail = BaseDal.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
-                if (detail != null)
+                //鍒ゆ柇鏄惁瀛樺湪瀵瑰簲閲囪喘鏄庣粏鐨勬敹璐ф槑缁�
+                Dt_ReceiveOrderDetail? detail = receiveOrder.Details.FirstOrDefault(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
+                if (detail != null && detail.ReceivedQuantity == purchaseOrderDetail.PurchaseDetailQuantity)
                 {
-                    return WebResponseContent.Instance.Error($"璇ユ槑缁嗘敹璐у凡瀹屾垚");
+                    return WebResponseContent.Instance.Error($"璇ユ槑缁嗗凡鏀惰揣");
                 }
 
                 lock (_rowNoLocker)
                 {
-                    int rowNo = 0;
-                    List<Dt_ReceiveOrderDetail> receiveOrderDetails = BaseDal.QueryData(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId);
-                    if (receiveOrderDetails != null && receiveOrderDetails.Count > 0)
+                    if (detail!=null)
                     {
-                        rowNo = receiveOrderDetails.Max(x => x.RowNo);
+                        //鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺
+                        detail.ReceivedQuantity += model.Quantity;
+                        purchaseOrderDetail.PurchaseDetailReceiveQty = detail.ReceivedQuantity;
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
+                        {
+                            return WebResponseContent.Instance.Error($"閲囪喘鍗曡鐗╂枡鏁伴噺鍜屾敹璐ф暟閲忎笉涓�鑷�");
+                        }
+                        if(purchaseOrderDetail.PurchaseDetailReceiveQty ==purchaseOrderDetail.PurchaseDetailQuantity)
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
+                        }
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
+                        _unitOfWorkManage.BeginTran();
+                        if (purchaseOrder.OrderQuantity == sumQty)
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
+                            _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
+                        }
+                        BaseDal.UpdateData(detail);
+                        _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
+                        _unitOfWorkManage.CommitTran();
                     }
-
-                    Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                    else
                     {
-                        PurchaseOrderNo = model.PurchaseOrderNo,
-                        ReceivedQuantity = model.Quantity,
-                        MaterielCode = model.MaterielCode,
-                        LotNo = model.LotNo,
-                        ReceiveOrderId = receiveOrder.ReceiveOrderId,
-                        PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
-                        IfInspection = materielInfo.IsCheck.ObjToInt(),
-                        CurrCode = "",
-                        PriceInTax = 0,
-                        TaxRate = "",
-                        RowNo = rowNo + 1,
-                        Unit = purchaseOrderDetail.Unit
-                    };
-
-                    if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
-                    {
-                        receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
+                        int rowNo = 0;
+                        if (receiveOrder.Details.Count > 0)
+                        {
+                            rowNo = receiveOrder.Details.Max(x => x.RowNo);
+                        }
+                        Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                        {
+                            PurchaseOrderNo = model.PurchaseOrderNo,
+                            ReceivedQuantity = model.Quantity,
+                            MaterielCode = model.MaterielCode,
+                            LotNo = model.LotNo,
+                            ReceiveOrderId = receiveOrder.ReceiveOrderId,
+                            PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
+                            IfInspection = materielInfo.IsCheck.ObjToInt(),
+                            CurrCode = "",
+                            PriceInTax = 0,
+                            TaxRate = "",
+                            RowNo = rowNo + 1,
+                            Unit = purchaseOrderDetail.Unit
+                        };
+                        if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
+                        {
+                            receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
+                        }
+                        //鍒ゆ柇閲囪喘鏄庣粏鏁伴噺
+                        if (purchaseOrderDetail.PurchaseDetailQuantity<model.Quantity)
+                        {
+                            return WebResponseContent.Instance.Error($"璇锋牳瀵归噰璐崟璇ョ墿鏂欐暟閲�");
+                        }
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty>0)
+                        {
+                            purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity;
+                        }
+                        else
+                        {
+                            purchaseOrderDetail.PurchaseDetailReceiveQty = model.Quantity;
+                        }
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty> purchaseOrderDetail.PurchaseDetailQuantity)
+                        {
+                            return WebResponseContent.Instance.Error($"閲囪喘鍗曡鐗╂枡鏁伴噺鍜屾敹璐ф暟閲忎笉涓�鑷�");
+                        }
+                        if (purchaseOrderDetail.PurchaseDetailQuantity == purchaseOrderDetail.PurchaseDetailReceiveQty)
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
+                        }
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
+                        _unitOfWorkManage.BeginTran();
+                        BaseDal.AddData(receiveOrderDetail);
+                        if (purchaseOrder.OrderQuantity == sumQty)
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.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.ScrappedQuantity = 0;
+                        //    checkOrder.ReturnQuantity = 0;
+                        //    checkOrder.DefectedQuantity = 0;
+                        //    _checkOrderRepository.AddData(checkOrder);
+                        //}
+                        #endregion
+                        _unitOfWorkManage.CommitTran();
                     }
-                    purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
-
-                    _unitOfWorkManage.BeginTran();
-                    BaseDal.AddData(receiveOrderDetail);
-                    _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
-                    _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
-
-                    if (materielInfo.IsCheck == WhetherEnum.True)
-                    {
-                        Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
-                        checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
-                        checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
-                        checkOrder.ScrappedQuantity = 0;
-                        checkOrder.ReturnQuantity = 0;
-                        checkOrder.DefectedQuantity = 0;
-                        _checkOrderRepository.AddData(checkOrder);
-                    }
-
-                    _unitOfWorkManage.CommitTran();
+                    
                     return WebResponseContent.Instance.OK();
                 }
             }

--
Gitblit v1.9.3