From 889d9ad56a44a3a4ec38f9fb181f566dd8a2d922 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 24 Nov 2022 13:58:18 +0800 Subject: [PATCH] 1 --- .../JD/JDStockNumWarningBusiness.cs | 31 ++++++++---- .../JDReportFormStatisticsBusiness.cs | 48 +++++++++---------- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs b/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs index 5c682fab..76e2ce8c 100644 --- a/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs +++ b/BBWY.Server.Business/EarlyWarning/JD/JDStockNumWarningBusiness.cs @@ -65,15 +65,15 @@ namespace BBWY.Server.Business .Distinct() .ToList((s, osku, o) => s.Sku); - //查询近9天的销量(三个周期) - var allCycleStartDate = yesterDayDate.AddDays(-8); + //查询近15天的销量(5个周期) + var allCycleStartDate = yesterDayDate.AddDays(-14); var skuSaleDailyList = fsql.Select() .Where(s => s.Date >= allCycleStartDate && s.Date <= yesterDayDate) .Where(s => yesterDaySkuIds.Contains(s.Sku)) .ToList(); - var firstCycleStartDate = allCycleStartDate; - var firstCycleEndDate = allCycleStartDate.AddDays(2); + var firstCycleStartDate = yesterDayDate.AddDays(-8); + var firstCycleEndDate = firstCycleStartDate.AddDays(2); var secondCycleStartDate = firstCycleEndDate.AddDays(1); var secondCycleEndDate = secondCycleStartDate.AddDays(2); @@ -107,10 +107,12 @@ namespace BBWY.Server.Business var _3Ratio = secondCycleItemTotal == 0 ? 0 : 1.0 * thirdCycleItemTotal / secondCycleItemTotal - 1; - var _7dAvgSaleList = skuSaleDailyList.Where(s => s.Sku == sku && s.Date >= _7dAvgStartDate && s.Date <= yesterDayDate); - var _7dItemTotal = _7dAvgSaleList.Sum(s => s.ItemTotal - s.CancelItemTotal); + var _7dSaleList = skuSaleDailyList.Where(s => s.Sku == sku && s.Date >= _7dAvgStartDate && s.Date <= yesterDayDate); + var _7dItemTotal = _7dSaleList.Sum(s => s.ItemTotal - s.CancelItemTotal); + var _15dItemTotal = skuSaleDailyList.Sum(s => s.ItemTotal - s.CancelItemTotal); //近15天销量 var _7dAvgItemTotal = 1.0 * _7dItemTotal / 7; //近7天日均销量 + Enums.SkuStockNumCycleType skuStockNumCycleType = Enums.SkuStockNumCycleType.暂无周期; if (_2Ratio >= 0.2 && _3Ratio >= 0.2) skuStockNumCycleType = Enums.SkuStockNumCycleType.增长期; @@ -181,7 +183,9 @@ namespace BBWY.Server.Business if (lessDay < 15) { isWarning = true; - if (shop.SkuSafeTurnoverDays == 28) + if (_15dItemTotal <= 2) + suggestStockNum = 0; + else if (shop.SkuSafeTurnoverDays == 28) suggestStockNum = (int)Math.Ceiling(_7dItemTotal * 4 * 1.5); else if (shop.SkuSafeTurnoverDays == 21) suggestStockNum = (int)Math.Ceiling(_7dItemTotal * 3 * 1.5); @@ -194,7 +198,9 @@ namespace BBWY.Server.Business if (lessDay < 8) { isWarning = true; - if (shop.SkuSafeTurnoverDays == 28) + if (_15dItemTotal <= 2) + suggestStockNum = 0; + else if (shop.SkuSafeTurnoverDays == 28) suggestStockNum = _7dItemTotal * 4; else if (shop.SkuSafeTurnoverDays == 21) suggestStockNum = _7dItemTotal * 3; @@ -219,9 +225,14 @@ namespace BBWY.Server.Business dingdingContentBuilder.Append($"商品状态:{skuStockNumCycleType}\n"); dingdingContentBuilder.Append($"近7天销量:{_7dItemTotal}\n"); foreach (var stockNumInfo in skuStockNumGroup) - dingdingContentBuilder.Append($"{stockNumInfo.Store?.Name ?? stockNumInfo.StoreId}:{stockNumInfo.StockNum}件"); + dingdingContentBuilder.Append($"{stockNumInfo.Store?.Name ?? stockNumInfo.StoreId}:{stockNumInfo.StockNum}件\n"); if (skuStockNumCycleType == Enums.SkuStockNumCycleType.增长期 || skuStockNumCycleType == Enums.SkuStockNumCycleType.稳定期) - dingdingContentBuilder.Append($"{skuStockNumGroup.Key}库存低于安全周转天数,建议备货{suggestStockNum}件"); + { + if (suggestStockNum != 0) + dingdingContentBuilder.Append($"{skuStockNumGroup.Key}库存低于安全周转天数,建议备货{suggestStockNum}件"); + else + dingdingContentBuilder.Append($"近15天销量低于两件,建议暂停备货,采购代发"); + } else if (skuStockNumCycleType == Enums.SkuStockNumCycleType.衰退期) dingdingContentBuilder.Append($"{skuStockNumGroup.Key}库存商品进入衰退期,建议暂停备货,采购代发"); dingdingContentBuilder.AppendLine(); diff --git a/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs b/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs index 3afa841e..a40886ea 100644 --- a/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs +++ b/BBWY.Server.Business/Statistics/JDReportFormStatisticsBusiness.cs @@ -462,7 +462,7 @@ namespace BBWY.Server.Business.Statistics var _7dCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) .GroupBy((jas1, jas2) => jas1.CampaignId) @@ -486,7 +486,7 @@ namespace BBWY.Server.Business.Statistics }); var _30dCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) .GroupBy((jas1, jas2) => jas1.CampaignId) @@ -510,7 +510,7 @@ namespace BBWY.Server.Business.Statistics }); var _customCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) .GroupBy((jas1, jas2) => jas1.CampaignId) @@ -534,7 +534,7 @@ namespace BBWY.Server.Business.Statistics }); var _totalCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value)) .GroupBy((jas1, jas2) => jas1.CampaignId) .ToList(g => new @@ -580,7 +580,7 @@ namespace BBWY.Server.Business.Statistics var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) .GroupBy((jas1, jas2) => jas1.AdGroupId) @@ -604,7 +604,7 @@ namespace BBWY.Server.Business.Statistics }); var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) .GroupBy((jas1, jas2) => jas1.AdGroupId) @@ -628,7 +628,7 @@ namespace BBWY.Server.Business.Statistics }); var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) .GroupBy((jas1, jas2) => jas1.AdGroupId) @@ -652,7 +652,7 @@ namespace BBWY.Server.Business.Statistics }); var _totalAdGroupCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value)) .GroupBy((jas1, jas2) => jas1.AdGroupId) .ToList(g => new @@ -696,7 +696,7 @@ namespace BBWY.Server.Business.Statistics var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) .GroupBy((jas1, jas2) => jas1.AdId) @@ -720,7 +720,7 @@ namespace BBWY.Server.Business.Statistics }); var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) .GroupBy((jas1, jas2) => jas1.AdId) @@ -744,7 +744,7 @@ namespace BBWY.Server.Business.Statistics }); var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) .GroupBy((jas1, jas2) => jas1.AdId) @@ -768,7 +768,7 @@ namespace BBWY.Server.Business.Statistics }); var totalAdCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value)) .GroupBy((jas1, jas2) => jas1.AdId) .ToList(g => new @@ -927,7 +927,7 @@ namespace BBWY.Server.Business.Statistics var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) .GroupBy((jas1, jas2) => jas1.CampaignId) @@ -951,7 +951,7 @@ namespace BBWY.Server.Business.Statistics }); var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) .GroupBy((jas1, jas2) => jas1.CampaignId) @@ -975,7 +975,7 @@ namespace BBWY.Server.Business.Statistics }); var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value) && jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) .GroupBy((jas1, jas2) => jas1.CampaignId) @@ -999,7 +999,7 @@ namespace BBWY.Server.Business.Statistics }); var _totalCampaignCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.CampaignId.Value)) .GroupBy((jas1, jas2) => jas1.CampaignId) .ToList(g => new @@ -1044,7 +1044,7 @@ namespace BBWY.Server.Business.Statistics var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) .GroupBy((jas1, jas2) => jas1.AdGroupId) @@ -1068,7 +1068,7 @@ namespace BBWY.Server.Business.Statistics }); var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) .GroupBy((jas1, jas2) => jas1.AdGroupId) @@ -1092,7 +1092,7 @@ namespace BBWY.Server.Business.Statistics }); var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value) && jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) .GroupBy((jas1, jas2) => jas1.AdGroupId) @@ -1116,7 +1116,7 @@ namespace BBWY.Server.Business.Statistics }); var _taotalAdGroupCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdGroupId.Value)) .GroupBy((jas1, jas2) => jas1.AdGroupId) .ToList(g => new @@ -1160,7 +1160,7 @@ namespace BBWY.Server.Business.Statistics var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var _7dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && jas2.Date >= _7dStartDate && jas2.Date <= _7dEndDate) .GroupBy((jas1, jas2) => jas1.AdId) @@ -1184,7 +1184,7 @@ namespace BBWY.Server.Business.Statistics }); var _30dCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && jas2.Date >= _30dStartDate && jas2.Date <= _30dEndDate) .GroupBy((jas1, jas2) => jas1.AdId) @@ -1208,7 +1208,7 @@ namespace BBWY.Server.Business.Statistics }); var _customCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value) && jas2.Date >= gOIRequest.StartDate && jas2.Date <= gOIRequest.EndDate) .GroupBy((jas1, jas2) => jas1.AdId) @@ -1232,7 +1232,7 @@ namespace BBWY.Server.Business.Statistics }); var _totalAdCosts = fsql.Select() - .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku) + .InnerJoin((jas1, jas2) => jas1.Sku == jas2.Sku && jas1.Date == jas2.Date) .Where((jas1, jas2) => gOIRequest.LevelIdList.Contains(jas1.AdId.Value)) .GroupBy((jas1, jas2) => jas1.AdId) .ToList(g => new