From c5238c1b78e8e7a066d6a82e4bbd5118de6b6efb Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期一, 16 十二月 2024 21:23:02 +0800
Subject: [PATCH] 1

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs |  173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 170 insertions(+), 3 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
index 7c0e82c..f2a2084 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
@@ -1,4 +1,5 @@
-锘縰sing MailKit.Search;
+锘縰sing AutoMapper;
+using MailKit.Search;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -7,8 +8,10 @@
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Basic;
 using WIDESEA_External.ERPService;
 using WIDESEA_External.Model;
 using WIDESEA_IBasicRepository;
@@ -21,13 +24,17 @@
 {
     public class ReceiveOrderService : ServiceBase<Dt_ReceiveOrder, IReceiveOrderRepository>, IReceiveOrderService
     {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly IMapper _mapper;
         private readonly ICheckOrderRepository _checkOrderRepository;
         private readonly IInboundRepository _inboundRepository;
         private readonly IBasicRepository _basicRepository;
         private readonly IInvokeERPService _invokeERPService;
 
-        public ReceiveOrderService(IReceiveOrderRepository BaseDal, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal)
+        public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal)
         {
+            _mapper = mapper;
+            _unitOfWorkManage = unitOfWorkManage;
             _checkOrderRepository = checkOrderRepository;
             _inboundRepository = inboundRepository;
             _basicRepository = basicRepository;
@@ -119,7 +126,7 @@
                     CompanyId = "",
                     DeliveryCode = receiveOrder.DeliveryCode,
                     CustomerId = receiveOrder.CustomerId,
-                    CreatorId = receiveOrder.CustomerId,
+                    CreatorId = receiveOrder.Creater,
                     EndDate = receiveOrder.CreateDate,
                     ReceiveDate = receiveOrder.CreateDate,
                     PlantsId = "",
@@ -139,6 +146,8 @@
             {
                 return WebResponseContent.Instance.Error(ex.Message);
             }
+        }
+
         public WebResponseContent GetReceiveOrders(SaveModel saveModel)
         {
             WebResponseContent content = new WebResponseContent();
@@ -241,5 +250,163 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+
+        public WebResponseContent ReceiveAllOrder(int purchaseOrderId, string lotNo)
+        {
+            try
+            {
+                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.Id == purchaseOrderId).Includes(x => x.Details).First();
+                if (purchaseOrder == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗�");
+                }
+                if (purchaseOrder.Details == null || purchaseOrder.Details.Count == 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒伴噰璐崟鏄庣粏淇℃伅");
+                }
+                if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"宸叉敹璐у畬鎴�");
+                }
+                if (purchaseOrder.Details.FirstOrDefault(x => x.PurchaseDetailStatus == PurchaseOrderStatusEnum.NotReceived.ObjToInt()) == null)
+                {
+                    return WebResponseContent.Instance.Error($"宸叉敹璐у畬鎴�");
+                }
+                List<Dt_CheckOrder> checkOrders = new List<Dt_CheckOrder>();
+                List<Dt_MaterielInfo> materielInfos = new List<Dt_MaterielInfo>();
+                List<Dt_ReceiveOrderDetail> receiveOrderDetails = new List<Dt_ReceiveOrderDetail>();
+                Dt_ReceiveOrder receiveOrder = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.SuppliersId == purchaseOrder.SupplierCode && x.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt()).Includes(x => x.Details).First();
+                if (receiveOrder == null)
+                {
+                    int rowNo = 0;
+                    foreach (var item in purchaseOrder.Details)
+                    {
+                        Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode);
+                        if (materielInfo == null)
+                        {
+                            materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode);
+                            if (materielInfo == null)
+                            {
+                                return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
+                            }
+                            materielInfos.Add(materielInfo);
+                        }
+                        Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                        {
+                            PurchaseOrderNo = purchaseOrder.PurchaseOrderNo,
+                            ReceivedQuantity = item.PurchaseDetailQuantity,
+                            MaterielCode = item.MaterielCode,
+                            LotNo = lotNo,
+                            PurchaseOrderDetailRowNo = item.RowNo,
+                            IfInspection = materielInfo.IsCheck.ObjToInt(),
+                            CurrCode = "",
+                            PriceInTax = 0,
+                            TaxRate = "",
+                            RowNo = rowNo + 1,
+                            Unit = item.Unit
+                        };
+                        rowNo += 1;
+                        receiveOrderDetails.Add(receiveOrderDetail);
+
+                        if (materielInfo.IsCheck == WhetherEnum.True)
+                        {
+                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                            checkOrder.ReceiveOrderNo = "";
+                            checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+                            checkOrder.ScrappedQuantity = 0;
+                            checkOrder.ReturnQuantity = 0;
+                            checkOrder.DefectedQuantity = 0;
+                            checkOrder.ReceiveDetailRowNo = rowNo;
+                            checkOrders.Add(checkOrder);
+                        }
+                    }
+                    receiveOrder = new Dt_ReceiveOrder()
+                    {
+                        ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(),
+                        CustomerId = "",
+                        DeliveryCode = "",
+                        ReceiveDate = DateTime.Now,
+                        ReceiveOrderType = ReceiveOrderTypeEnum.PO.ObjToInt(),
+                        SuppliersId = purchaseOrder.SupplierCode,
+                        WarehouseId = purchaseOrder.Details.FirstOrDefault()?.WarehouseId ?? 0,
+                        UploadStatus = WhetherEnum.False.ObjToInt(),
+                        Details = receiveOrderDetails
+                    };
+                }
+                else
+                {
+                    int rowNo = receiveOrder.Details.Count > 0 ? receiveOrder.Details.Max(x => x.RowNo) : 0;
+
+                    foreach (var item in purchaseOrder.Details)
+                    {
+                        Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode);
+                        if (materielInfo == null)
+                        {
+                            materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode);
+                            if (materielInfo == null)
+                            {
+                                return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
+                            }
+                            materielInfos.Add(materielInfo);
+                        }
+                        Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                        {
+                            PurchaseOrderNo = purchaseOrder.PurchaseOrderNo,
+                            ReceivedQuantity = item.PurchaseDetailQuantity,
+                            MaterielCode = item.MaterielCode,
+                            LotNo = lotNo,
+                            ReceiveOrderId = receiveOrder.ReceiveOrderId,
+                            PurchaseOrderDetailRowNo = item.RowNo,
+                            IfInspection = materielInfo.IsCheck.ObjToInt(),
+                            CurrCode = "",
+                            PriceInTax = 0,
+                            TaxRate = "",
+                            RowNo = rowNo + 1,
+                            Unit = item.Unit,
+
+                        };
+                        rowNo += 1;
+                        receiveOrderDetails.Add(receiveOrderDetail);
+
+                        if (materielInfo.IsCheck == WhetherEnum.True)
+                        {
+                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                            checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+                            checkOrder.ScrappedQuantity = 0;
+                            checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+                            checkOrder.ReturnQuantity = 0;
+                            checkOrder.DefectedQuantity = 0;
+                            checkOrder.ReceiveDetailRowNo = rowNo;
+                            checkOrders.Add(checkOrder);
+                        }
+                    }
+                }
+
+                purchaseOrder.Details.ForEach(x => x.PurchaseDetailStatus = PurchaseOrderStatusEnum.Received.ObjToInt());
+                purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
+
+                _unitOfWorkManage.BeginTran();
+                if (receiveOrder.ReceiveOrderId > 0)
+                {
+                    Db.Insertable(receiveOrderDetails).ExecuteCommand();
+                }
+                else
+                {
+                    Db.InsertNav(receiveOrder).Include(x => x.Details).ExecuteCommand();
+                    checkOrders.ForEach(x => x.ReceiveOrderNo = receiveOrder.ReceiveOrderNo);
+                }
+                _checkOrderRepository.AddData(checkOrders);
+                _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
+                _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrder.Details);
+                _unitOfWorkManage.CommitTran();
+
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
     }
 }

--
Gitblit v1.9.3