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