From 53057cc533632e7f7ddf671bf6f7a26a3de444c1 Mon Sep 17 00:00:00 2001 From: hutongqing <hutongqing@hnkhzn.com> Date: 星期日, 19 一月 2025 15:36:34 +0800 Subject: [PATCH] 1 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 241 ++++++++++++++++++++++++++---------------------- 1 files changed, 130 insertions(+), 111 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" index bcf23c8..fd869c4 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" @@ -342,7 +342,6 @@ List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); - int newCount = 0; foreach (var model in models) { if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) @@ -373,7 +372,7 @@ EffectiveDate = model.EffectiveDate, InboundOrderRowNo = notGroupDetail.RowNo, }; - newCount++; + oldCount++; if (stockInfo.Id > 0) { @@ -389,8 +388,7 @@ } //鍏ュ簱鏄庣粏鏂板瀹屾垚鏁伴噺 - //int newCount = inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count; - if (inboundOrder.Details.Count == (newCount + oldCount)) + if (inboundOrder.Details.Count == oldCount) { inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt(); } @@ -412,39 +410,9 @@ _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound); _unitOfWorkManage.CommitTran(); - #region 涓婃姤ERP鍏ュ簱瀹屾垚 - List<ERPInboundDetailModel> detailModels = new List<ERPInboundDetailModel>(); - foreach (var item in stockInfo.Details) - { - ERPInboundDetailModel detailModel = new ERPInboundDetailModel() - { - ExpiryDate = item.EffectiveDate ?? "", - LocationCode = warehouse.WarehouseCode, - MaterialsCode = item.MaterielCode, - MfgDate = item.ProductionDate ?? "", - QtyCustoms = "0", - Quantity = item.StockQuantity.ToString(), - Rack = stockInfo.LocationCode, - ReceiptCode = inboundOrder.UpperOrderNo, - ReceiptSerNo = item.InboundOrderRowNo.ToString() - }; - detailModels.Add(detailModel); - } - ERPInboundModel eRPInboundModel = new ERPInboundModel() - { - Code = CreateCodeByRule(nameof(RuleCodeEnum.RLCodeRule)), - CreatorCode = inboundOrder.Creater, - EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), - StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - SuppliersId = inboundOrder.SupplierId, - Type = "S", - UniqueTag = inboundOrder.Id.ToString(), - WarehouseCode = warehouse.WarehouseCode, - Way = 1, - Details = detailModels - }; - //鎺ㄩ�丒RP 娴嬭瘯娉ㄩ噴 - _invokeERPService.InvokeInboundOrderApi(eRPInboundModel); + #region 鍏ュ簱瀹屾垚涓婃姤ERP + if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) + FeedbackInboundOrder(inboundOrder); #endregion content.OK(); } @@ -455,7 +423,92 @@ } return content; } + /// <summary> + /// WMS鍏ュ钩搴撲笉鎺ㄥ崟鎹� + /// </summary> + /// <param name="warehouseId"></param> + /// <param name="serNums"></param> + /// <returns></returns> + public WebResponseContent WMSInPinKu(int warehouseId, List<string> serNums) + { + WebResponseContent content = new WebResponseContent(); + try + { + Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId); + if (warehouse == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅"); + } + List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); + if (models.Select(x => x.MaterielCode).Distinct().Count() > 1) + { + return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁"); + } + string materielCode = models.FirstOrDefault()?.MaterielCode ?? ""; + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode); + if (materielInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); + } + float beforeQuantity = 0; + Dt_StockInfo stockInfo = new Dt_StockInfo() + { + PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"), + StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + WarehouseId = warehouse.WarehouseId, + PalletType = PalletTypeEnum.SmallPallet.ObjToInt(), + LocationCode = "骞冲簱浣�", + Details = new List<Dt_StockInfoDetail>() + }; + List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); + foreach (var model in models) + { + Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() + { + BatchNo = model.LotNo, + MaterielCode = materielInfo.MaterielCode, + MaterielName = materielInfo.MaterielName, + SerialNumber = model.SerialNumber, + StockQuantity = model.Quantity, + OutboundQuantity = 0, + OrderNo = "", + Unit = materielInfo.MaterielUnit, + Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + ProductionDate = model.ProductionDate, + EffectiveDate = model.EffectiveDate, + }; + + if (stockInfo.Id > 0) + { + stockInfoDetail.StockId = stockInfo.Id; + } + stockInfo.Details.Add(stockInfoDetail); + + stockInfoDetails.Add(stockInfoDetail); + + } + float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity); + _unitOfWorkManage.BeginTran(); + if (stockInfo.Id == 0) + { + _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand(); + } + else + { + _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand(); + } + _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound); + _unitOfWorkManage.CommitTran(); + content.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } /// <summary> /// 缁勭洏 /// </summary> @@ -513,7 +566,7 @@ return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); } - List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode && x.BatchNo==(models.FirstOrDefault()?.LotNo ?? "")).ToList(); + List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode && x.BatchNo == (models.FirstOrDefault()?.LotNo ?? "")).ToList(); if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0) { @@ -569,9 +622,15 @@ stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); } } + else if(warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); - List<int> detailKeys = new List<int>(); foreach (var model in models) { if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) @@ -579,13 +638,12 @@ return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); } - Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt() && x.OrderQuantity == model.Quantity && !detailKeys.Contains(x.Id) && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); + Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus < OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode==model.MaterielCode && x.BatchNo==model.LotNo && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); if (notGroupDetail == null) { return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚"); } - detailKeys.Add(notGroupDetail.Id); Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() { BatchNo = model.LotNo, @@ -610,8 +668,11 @@ stockInfoDetails.Add(stockInfoDetail); - notGroupDetail.ReceiptQuantity = model.Quantity; - notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); + notGroupDetail.ReceiptQuantity += model.Quantity; + if (notGroupDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); + } } float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity); @@ -713,6 +774,13 @@ stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); } } + else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); @@ -766,59 +834,10 @@ return content; } /// <summary> - /// 鍏ュ簱瀹屾垚涓婃姤ERP 寮冪敤 - /// </summary> - /// <returns></returns> - #region 寮冪敤 - public WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo, Dt_InboundOrder inboundOrder, List<ERPInboundDetailModel> detailModels) - { - WebResponseContent content = new WebResponseContent(); - try - { - if (inboundOrder.Details.Count == 0) - { - return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); - } - if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) - { - return WebResponseContent.Instance.Error($"鍏ュ簱鍗曟嵁宸插畬鎴�"); - } - Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId); - if (warehouse == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); - } - - ERPInboundModel model = new ERPInboundModel() - { - Code = CreateCodeByRule(nameof(RuleCodeEnum.RLCodeRule)), - CreatorCode = inboundOrder.Creater,//娴嬭瘯 - EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), - StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - SuppliersId = inboundOrder.SupplierId, - Type = "S", - UniqueTag = inboundOrder.Id.ToString(), - WarehouseCode = warehouse.WarehouseCode, - Way = 1, - Details = detailModels - }; - //鎺ㄩ�丒RP 娴嬭瘯娉ㄩ噴 - _invokeERPService.InvokeInboundOrderApi(model); - return WebResponseContent.Instance.OK(); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - content.Error(ex.Message); - } - return content; - } - #endregion - /// <summary> /// 鍏ュ簱瀹屾垚涓婃姤ERP /// </summary> /// <returns></returns> - public WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder, List<Dt_StockInfoDetail> stockInfoDetails) + public WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder) { WebResponseContent content = new WebResponseContent(); try @@ -827,37 +846,37 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); } - if (stockInfoDetails.Count==0) + + List<Dt_StockInfoDetail> stockInfoDetails = _stockRepository.StockInfoDetailRepository.QueryData(x => x.OrderNo == inboundOrder.InboundOrderNo); + if (stockInfoDetails.Count == 0) { return WebResponseContent.Instance.Error($"鏈壘鍒板簱瀛樻槑缁嗕俊鎭�"); } + //鑾峰彇璇ュ叆搴撳崟鎵�鏈夊簱瀛� + List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => stockInfoDetails.GroupBy(x => x.StockId).Select(x => x.Key).Contains(x.Id)).Includes(x => x.Details).ToList(); Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId); if (warehouse == null) { return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); } - List<ERPInboundDetailModel>? detailModels = null; - foreach (var item in stockInfoDetails) + List<ERPInboundDetailModel>? detailModels = new List<ERPInboundDetailModel>(); + foreach (var stockInfo in stockInfos) { - Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.Id == item.StockId); - if (detailModels!=null && detailModels.FirstOrDefault(x=>x.Rack==stockInfo.LocationCode)!=null) + foreach (var item in stockInfo.Details.GroupBy(x => x.InboundOrderRowNo).Select(x => x.Key)) { - var detailModel = detailModels.FirstOrDefault(x => x.Rack == stockInfo.LocationCode); - detailModel.Quantity = (Convert.ToDouble(detailModel.Quantity) + item.StockQuantity).ToString(); - } - else - { + //鍖哄垎涓嶅悓鎵规 + Dt_StockInfoDetail? dt_StockInfoDetail = stockInfo.Details.Where(x => x.InboundOrderRowNo == item).FirstOrDefault(); ERPInboundDetailModel detailModel = new ERPInboundDetailModel() { - ExpiryDate = item.EffectiveDate ?? "", + ExpiryDate = dt_StockInfoDetail?.EffectiveDate ?? "", LocationCode = warehouse.WarehouseCode, - MaterialsCode = item.MaterielCode, - MfgDate = item.ProductionDate ?? "", + MaterialsCode = dt_StockInfoDetail.MaterielCode, + MfgDate = dt_StockInfoDetail.ProductionDate ?? "", QtyCustoms = "0", - Quantity = item.StockQuantity.ToString(), + Quantity = stockInfo.Details.Where(x => x.InboundOrderRowNo == item).Sum(x => x.StockQuantity).ToString(), Rack = stockInfo.LocationCode, ReceiptCode = inboundOrder.UpperOrderNo, - ReceiptSerNo = item.InboundOrderRowNo.ToString() + ReceiptSerNo = item.ToString() }; detailModels.Add(detailModel); } @@ -865,7 +884,7 @@ ERPInboundModel model = new ERPInboundModel() { Code = CreateCodeByRule(nameof(RuleCodeEnum.RLCodeRule)), - CreatorCode = inboundOrder.Creater,//娴嬭瘯 + CreatorCode = inboundOrder.Creater, EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), SuppliersId = inboundOrder.SupplierId, @@ -875,7 +894,7 @@ Way = 1, Details = detailModels }; - //鎺ㄩ�丒RP 娴嬭瘯娉ㄩ噴 + //鎺ㄩ�丒RP _invokeERPService.InvokeInboundOrderApi(model); return WebResponseContent.Instance.OK(); } @@ -901,7 +920,7 @@ throw new ArgumentNullException(nameof(ruleCode)); SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig { - IsAutoCloseConnection = false, + IsAutoCloseConnection = true, DbType = DbType.SqlServer, ConnectionString = DBContext.ConnectionString }); -- Gitblit v1.9.3