From 57148c2264abe80bd3b472f2980104d90dad5c61 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 13 九月 2025 08:35:32 +0800
Subject: [PATCH] 合并,接口优化等

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs |  134 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 111 insertions(+), 23 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 27f3b20..22685c9 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,5 +1,6 @@
 锘縰sing AutoMapper;
 using MailKit.Search;
+using Newtonsoft.Json;
 using SqlSugar;
 using System;
 using System.Collections.Generic;
@@ -7,8 +8,10 @@
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_BasicRepository;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.WareHouseEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
@@ -17,9 +20,11 @@
 using WIDESEA_DTO;
 using WIDESEA_DTO.Basic;
 using WIDESEA_DTO.ERP;
+using WIDESEA_DTO.QMS;
 using WIDESEA_DTO.Stock;
 using WIDESEA_External.ERPService;
 using WIDESEA_External.Model;
+using WIDESEA_External.QMSService;
 using WIDESEA_IBasicRepository;
 using WIDESEA_ICheckRepository;
 using WIDESEA_IInboundRepository;
@@ -36,8 +41,10 @@
         private readonly IInboundRepository _inboundRepository;
         private readonly IBasicRepository _basicRepository;
         private readonly IInvokeERPService _invokeERPService;
+        private readonly ISupplierInfoRepository _supplierInfoRepository;
+        private readonly IInvokeQMSService _invokeQMSService;
 
-        public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, 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, ISupplierInfoRepository supplierInfoRepository, IInvokeQMSService invokeQMSService) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -45,6 +52,8 @@
             _inboundRepository = inboundRepository;
             _basicRepository = basicRepository;
             _invokeERPService = invokeERPService;
+            _supplierInfoRepository = supplierInfoRepository;
+            _invokeQMSService = invokeQMSService;
         }
         public override PageGridData<Dt_ReceiveOrder> GetPageData(PageDataOptions options)
         {
@@ -190,10 +199,13 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�");
                 }
-
+                Dt_SupplierInfo supplierInfo = _supplierInfoRepository.QueryFirst(x => x.SupplierCode == receiveOrder.SuppliersId);
+                List<Dt_CheckOrder> checkOrders = new List<Dt_CheckOrder>();
+                //鐢熸垚ERP鎺ㄩ�佷俊鎭�
                 List<RecevieOrderDetailModel> recevieOrderDetails = new List<RecevieOrderDetailModel>();
                 foreach (var item in receiveOrder.Details)
                 {
+                    //娣诲姞鏀惰揣鏄庣粏
                     RecevieOrderDetailModel recevieOrderDetail = new RecevieOrderDetailModel()
                     {
                         Currcode = "",
@@ -206,8 +218,7 @@
                         QtyRecieved = item.ReceivedQuantity,
                         Serno = item.RowNo,
                         Supplotno = item.LotNo,
-                        Taxrate = "",
-
+                        Taxrate = ""
                     };
                     if (receiveOrder.ReceiveOrderType!=ReceiveOrderTypeEnum.PO.ObjToInt())
                     {
@@ -215,6 +226,78 @@
                         recevieOrderDetail.Currcode = "RMB";
                     }
                     recevieOrderDetails.Add(recevieOrderDetail);
+                    if (warehouse.WarehouseCode == WarehouseEnum.HA152.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA58.ToString())
+                    {
+                        string lotNo = item.LotNo.Substring(0, item.LotNo.IndexOf("-"));
+                        Dt_CheckOrder? ExistcheckOrder = checkOrders.FirstOrDefault(x => x.LotNo == lotNo && x.MaterielCode == item.MaterielCode && x.PurchaseOrderNo == item.PurchaseOrderNo);
+                        if (ExistcheckOrder == null)
+                        {
+                            //妫�楠岀粨鏋滅粨鏋滀笂鎶�
+                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(item);
+                            checkOrder.LotNo = lotNo;
+                            checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
+                            checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+                            checkOrder.Result = CheckAcceptEnum.NotCheckAccept.ToString();
+                            checkOrder.QualifiedQuantity = 0;
+                            checkOrder.ReceiveDetailRowNo = item.RowNo;
+                            checkOrder.WarehouseId = receiveOrder.WarehouseId;
+                            checkOrder.ScrappedQuantity = 0;
+                            checkOrder.MaterielSpec = item.MaterielSpec;
+                            checkOrder.ReturnQuantity = 0;
+                            checkOrder.DefectedQuantity = 0;
+                            checkOrder.MaterielName = item.MaterielName;
+                            checkOrders.Add(checkOrder);
+                        }
+                        else
+                        {
+                            //娣诲姞妫�楠屾敹璐ф暟閲�
+                            ExistcheckOrder.ReceivedQuantity += item.ReceivedQuantity;
+                        }
+
+                    }
+                }
+                _unitOfWorkManage.BeginTran();
+                //骞茶啘/PP涓婃姤QMS缁撴灉
+                if (checkOrders.Count > 0)
+                {
+                    foreach (var checkOrder in checkOrders)
+                    {
+                        int id = _checkOrderRepository.AddData(checkOrder);
+                        QMSReceiveCheckModel qMSReceiveCheck = new QMSReceiveCheckModel()
+                        {
+                            UniqueTag = id.ToString(),
+                            EntryNumber = receiveOrder.ReceiveOrderNo,
+                            MaterialCode = checkOrder.MaterielCode,
+                            MaterialName = checkOrder.MaterielName,
+                            Quantity = (decimal)checkOrder.ReceivedQuantity,
+                            SupplierCode = receiveOrder.SuppliersId,
+                            SupplierName = supplierInfo.SupplierName,
+                            BatchNumber = checkOrder.LotNo,
+                            DeliveryNumber = receiveOrder.DeliveryCode,
+                            PurchaseNumber = checkOrder.PurchaseOrderNo,
+                            RowNumber = checkOrder.ReceiveDetailRowNo,
+                            WarehouseCode = warehouse.WarehouseCode,
+                            ReceiptDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                            Remark = " "
+                        };
+                        //璋冪敤QMS鏉ユ枡妫�楠屾帴鍙�
+                        string response = _invokeQMSService.InvokeReceiveCheckApi(qMSReceiveCheck);
+                        MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
+                        if (!mesResponseContent.BSucc)
+                        {
+                            throw new Exception(mesResponseContent.StrMsg);
+                        }
+                        //QMS鍥炰紶缁撴灉
+                        ReceiveResultDTO? receiveResult = JsonConvert.DeserializeObject<ReceiveResultDTO>(mesResponseContent.Content.ToString());
+                        if (receiveResult == null)
+                        {
+                            throw new Exception("鎺ユ敹QMS缁撴灉澶辫触");
+                        }
+                        //鏇存柊妫�楠屽崟鍙�
+                        Dt_CheckOrder _CheckOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == id);
+                        _CheckOrder.CheckOrderNo = receiveResult.InspectionNumber;
+                        _checkOrderRepository.UpdateData(_CheckOrder);
+                    }
                 }
 
                 ERPReceiveModel receiveModel = new ERPReceiveModel()
@@ -232,18 +315,18 @@
                     Way = 1,
                     Details = recevieOrderDetails
                 };
-
                 //鏇存柊鏀惰揣鍗曚俊鎭�
                 receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt();
-                //鏀惰揣鎺ㄩ�佽嚦ER
-                string response = _invokeERPService.InvokeMatReceiveApi(receiveModel);
-                ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
+                //鏀惰揣鎺ㄩ�佽嚦ERP
+                string responseReceive = _invokeERPService.InvokeMatReceiveApi(receiveModel);
+                ErpRequestContent requestContent = responseReceive.DeserializeObject<ErpRequestContent>();
                 if (requestContent.res != 1)
                 {
-                    return WebResponseContent.Instance.Error($"{requestContent.Data}");
+                    throw new Exception($"{requestContent.Data}");
                 }
                 receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt();
                 BaseDal.UpdateData(receiveOrder);
+                _unitOfWorkManage.CommitTran();
                 if (receiveOrder.Details.FirstOrDefault(x=>x.IfInspection==WhetherEnum.True.ObjToInt())==null)
                 {
                     //鍒涘缓鍏ュ簱鍗� todo:鏄庣粏閮芥槸涓嶆楠岃嚜鍔ㄥ垱寤哄叆搴撳崟
@@ -253,6 +336,7 @@
             }
             catch (Exception ex)
             {
+                _unitOfWorkManage.RollbackTran();
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
@@ -294,13 +378,14 @@
             try
             {
                 Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == receiveOrderId).Includes(x => x.Details).First();
-                if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt())
-                {
-                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏉ユ枡涓婁紶ERP澶辫触鏃犳硶鍒涘缓鍏ュ簱鍗曟嵁");
-                }
                 if (receiveOrder == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌鏀惰揣鍗曚俊鎭�");
+                }
+                //ERP鍒ゆ柇鏄惁涓婁紶
+                if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏉ユ枡涓婁紶ERP澶辫触鏃犳硶鍒涘缓鍏ュ簱鍗曟嵁");
                 }
                 if (receiveOrder.Details == null || receiveOrder.Details.Count() <= 0)
                 {
@@ -310,22 +395,21 @@
                 {
                     return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈畬鎴�");
                 }
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==receiveOrder.WarehouseId);
+                //楠岃瘉鍏ュ簱鍗曟槸鍚﹂噸澶嶇敓鎴�
                 Dt_InboundOrder OldCreateOrder = _inboundRepository.InboundOrderRepository.QueryFirst(x => x.UpperOrderNo == receiveOrder.ReceiveOrderNo);
                 if (receiveOrder.CreateInOrderStatus==WhetherEnum.True.ObjToInt() || OldCreateOrder!=null)
                 {
                     return WebResponseContent.Instance.Error($"璇ユ敹璐у崟瀵瑰簲鐨勫叆搴撳崟宸插瓨鍦�");
                 }
-                #region 娉ㄩ噴
+
+                #region 鍒ゆ柇鏀惰揣鍗曟楠屾槸鍚﹀畬鎴�
                 List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo);
                 if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null)
                 {
                     return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈川妫�瀹屾垚");
                 }
 
-                //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null)
-                //{
-                //    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟璐ㄦ缁撴灉瀹℃壒鏈畬鎴�");
-                //}
                 if (checkOrders.FirstOrDefault(x => x.Result != CheckAcceptEnum.Accept.ToString()) != null)
                 {
                     return WebResponseContent.Instance.Error($"鏀惰揣鏄庣粏涓瓨鏈夎川妫�鏈�氳繃");
@@ -343,18 +427,22 @@
                     Details = new List<Dt_InboundOrderDetail>()
                 };
                 List<Dt_MaterielInfo> materielCodeInfos = _basicRepository.MaterielInfoRepository.QueryData(x => receiveOrder.Details.Select(x => x.MaterielCode).ToList().Contains(x.MaterielCode));
-                foreach (var item in receiveOrder.Details)
+                foreach (var item in receiveOrder.Details.Where(x=> x.IsCheckOk!=WhetherEnum.True.ObjToInt()))
                 {
                     float quantity = item.ReceivedQuantity;
                     #region 娉ㄩ噴
                     if (item.IfInspection == WhetherEnum.True.ObjToInt())
                     {
-                        Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
-                        if (checkOrder == null)
+                        if (warehouse.WarehouseCode != WarehouseEnum.HA152.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA58.ToString())
                         {
-                            return WebResponseContent.Instance.Error($"璐ㄦ鍗曟暟鎹敊璇�");
+                            Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
+                            if (checkOrder == null)
+                            {
+                                return WebResponseContent.Instance.Error($"璐ㄦ鍗曟暟鎹敊璇�");
+                            }
+                            quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
                         }
-                        quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
+
                     }
                     #endregion
                     Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail()

--
Gitblit v1.9.3