1
wangxinhui
2025-01-18 a7ceaaa38a4394b82501ca60230e97d25a6871e3
´úÂë¹ÜÀí/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,11 @@
                    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();
                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 +89,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);
                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();
@@ -157,11 +163,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 +175,7 @@
                        {
                            purchaseOrderDetail.PurchaseDetailReceiveQty = model.Quantity;
                        }
                        if (purchaseOrderDetail.PurchaseDetailReceiveQty> purchaseOrderDetail.PurchaseDetailQuantity)
                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
                        {
                            return WebResponseContent.Instance.Error($"采购单该物料数量和收货数量不一致");
                        }
@@ -177,7 +183,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)
@@ -201,7 +211,7 @@
                        #endregion
                        _unitOfWorkManage.CommitTran();
                    }
                    return WebResponseContent.Instance.OK();
                }
            }