From e974c93c984188524f15964529203db25ede3170 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 15 三月 2025 16:07:58 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs |  145 +++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 111 insertions(+), 34 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 76ab96e..ff6f7dc 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.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x=>x.Details).First();
+                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($"鏈壘鍒拌鏀惰揣鍗�");
@@ -68,11 +68,75 @@
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
                 }
                 //璇ユ敹璐у崟浠撳簱鏄惁鏈夎鐗╂枡
-                if (materielInfo.WarehouseId!= receiveOrder.WarehouseId)
+                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 (receiveOrder.ReceiveOrderType != ReceiveOrderTypeEnum.PO.ObjToInt())
+                {
+                    //鑾峰彇鍏蜂綋鎵规鍙婄墿鏂�
+                    Dt_ReceiveOrderDetail? detailNoPo = receiveOrder.Details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode);
+                    lock (_rowNoLocker)
+                    {
+                        if (detailNoPo != null)
+                        {
+                            //鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺
+                            detailNoPo.ReceivedQuantity += model.Quantity;
+                            _unitOfWorkManage.BeginTran();
+                            BaseDal.UpdateData(detailNoPo);
+                            _unitOfWorkManage.CommitTran();
+                        }
+                        else
+                        {
+                            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,
+                                MaterielName = materielInfo.MaterielName,
+                                MaterielSpec = materielInfo.MaterielSpec,
+                                ReceiveOrderId = receiveOrder.ReceiveOrderId,
+                                PurchaseOrderDetailRowNo = rowNo + 1,
+                                IfInspection = materielInfo.IsCheck.ObjToInt(),
+                                CurrCode = "",
+                                PriceInTax = 0,
+                                TaxRate = "",
+                                RowNo = rowNo + 1,
+                                Unit = materielInfo.MaterielUnit
+                            };
+                            if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
+                            {
+                                receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
+                            }
+                            _unitOfWorkManage.BeginTran();
+                            _inboundRepository.ReceiveOrderDetailRepository.AddData(receiveOrderDetail);
+                            _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
+                            #region 娉ㄩ噴
+                            if (materielInfo.IsCheck == WhetherEnum.True)
+                            {
+                                Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                                checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+                                checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+                                checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo;
+                                checkOrder.ScrappedQuantity = 0;
+                                checkOrder.ReturnQuantity = 0;
+                                checkOrder.DefectedQuantity = 0;
+                                _checkOrderRepository.AddData(checkOrder);
+                            }
+                            #endregion
+                            _unitOfWorkManage.CommitTran();
+                        }
+                        return WebResponseContent.Instance.OK();
+                    }
+                }
+                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($"鏈壘鍒拌閲囪喘鍗�");
@@ -89,43 +153,49 @@
                 {
                     return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏀惰揣宸插畬鎴�");
                 }
-                Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt()));
+                Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.Where(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt())).FirstOrDefault();
                 if (purchaseOrderDetail == null)
                 {
-                    if (purchaseOrder.Details.Count > 0)
-                    {
-                        return WebResponseContent.Instance.Error($"璇ユ槑缁嗘敹璐у凡瀹屾垚");
-                    }
+                    return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏄庣粏鏀惰揣宸插畬鎴�");
                 }
-                //鍒ゆ柇鏄惁瀛樺湪瀵瑰簲閲囪喘鏄庣粏鐨勬敹璐ф槑缁�
-                Dt_ReceiveOrderDetail? detail = receiveOrder.Details.FirstOrDefault(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
-                if (detail != null && detail.ReceivedQuantity == purchaseOrderDetail.PurchaseDetailQuantity)
+                //鍒ゆ柇璇ラ噰璐崟鏄庣粏鏄惁宸插瓨鍦ㄦ槑缁�
+                List<Dt_ReceiveOrderDetail> details = receiveOrder.Details.Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo && x.MaterielCode == model.MaterielCode).ToList();
+                if (details.Count >0 && details.Sum(x=>x.ReceivedQuantity) == purchaseOrderDetail.PurchaseDetailQuantity)
                 {
-                    return WebResponseContent.Instance.Error($"璇ユ槑缁嗗凡鏀惰揣");
+                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏄庣粏宸叉敹璐�");
                 }
-
+                //鑾峰彇鍏蜂綋鎵规鍙婄墿鏂�
+                Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode==model.MaterielCode);
                 lock (_rowNoLocker)
                 {
-                    if (detail!=null)
+                    if (detail != null)
                     {
                         //鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺
                         detail.ReceivedQuantity += model.Quantity;
-                        purchaseOrderDetail.PurchaseDetailReceiveQty = detail.ReceivedQuantity;
+                        purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity;
                         if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
                         {
                             return WebResponseContent.Instance.Error($"閲囪喘鍗曡鐗╂枡鏁伴噺鍜屾敹璐ф暟閲忎笉涓�鑷�");
                         }
-                        if(purchaseOrderDetail.PurchaseDetailReceiveQty ==purchaseOrderDetail.PurchaseDetailQuantity)
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty == purchaseOrderDetail.PurchaseDetailQuantity)
                         {
                             purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
                         }
-                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
-                        _unitOfWorkManage.BeginTran();
+                        else
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt();
+                        }
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty);
                         if (purchaseOrder.OrderQuantity == sumQty)
                         {
                             purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
-                            _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
                         }
+                        else
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt();
+                        }
+                        _unitOfWorkManage.BeginTran();
+                        _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
                         BaseDal.UpdateData(detail);
                         _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
                         _unitOfWorkManage.CommitTran();
@@ -143,6 +213,8 @@
                             ReceivedQuantity = model.Quantity,
                             MaterielCode = model.MaterielCode,
                             LotNo = model.LotNo,
+                            MaterielName=materielInfo.MaterielName,
+                            MaterielSpec=materielInfo.MaterielSpec,
                             ReceiveOrderId = receiveOrder.ReceiveOrderId,
                             PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
                             IfInspection = materielInfo.IsCheck.ObjToInt(),
@@ -157,11 +229,11 @@
                             receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
                         }
                         //鍒ゆ柇閲囪喘鏄庣粏鏁伴噺
-                        if (purchaseOrderDetail.PurchaseDetailQuantity<model.Quantity)
+                        if (purchaseOrderDetail.PurchaseDetailQuantity < model.Quantity)
                         {
                             return WebResponseContent.Instance.Error($"璇锋牳瀵归噰璐崟璇ョ墿鏂欐暟閲�");
                         }
-                        if (purchaseOrderDetail.PurchaseDetailReceiveQty>0)
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > 0)
                         {
                             purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity;
                         }
@@ -169,7 +241,7 @@
                         {
                             purchaseOrderDetail.PurchaseDetailReceiveQty = model.Quantity;
                         }
-                        if (purchaseOrderDetail.PurchaseDetailReceiveQty> purchaseOrderDetail.PurchaseDetailQuantity)
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
                         {
                             return WebResponseContent.Instance.Error($"閲囪喘鍗曡鐗╂枡鏁伴噺鍜屾敹璐ф暟閲忎笉涓�鑷�");
                         }
@@ -177,7 +249,11 @@
                         {
                             purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
                         }
-                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty) + model.Quantity;
+                        else
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt();
+                        }
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty); //+ model.Quantity
                         _unitOfWorkManage.BeginTran();
                         BaseDal.AddData(receiveOrderDetail);
                         if (purchaseOrder.OrderQuantity == sumQty)
@@ -188,20 +264,21 @@
                         _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);
-                        //}
+                        ////if (materielInfo.IsCheck == WhetherEnum.True)
+                        ////{
+                        ////    Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                        ////    checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+                        ////    checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+                        ////    checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo;
+                        ////    checkOrder.ScrappedQuantity = 0;
+                        ////    checkOrder.ReturnQuantity = 0;
+                        ////    checkOrder.DefectedQuantity = 0;
+                        ////    _checkOrderRepository.AddData(checkOrder);
+                        ////}
                         #endregion
                         _unitOfWorkManage.CommitTran();
                     }
-                    
+
                     return WebResponseContent.Instance.OK();
                 }
             }

--
Gitblit v1.9.3