|
|
|
using BBWY.Common.Models;
|
|
|
|
using BBWY.Server.Business.Statistics;
|
|
|
|
using BBWY.Server.Model;
|
|
|
|
using BBWY.Server.Model.Db;
|
|
|
|
using BBWY.Server.Model.Dto;
|
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
|
|
|
using System.Text;
|
|
|
|
using System.Threading;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Yitter.IdGenerator;
|
|
|
|
|
|
|
|
namespace BBWY.Server.Business.SiNan
|
|
|
|
{
|
|
|
|
public class GOIWarningBusiness : BaseBusiness, IDenpendency
|
|
|
|
{
|
|
|
|
private TaskSchedulerManager taskSchedulerManager;
|
|
|
|
private VenderBusiness venderBusiness;
|
|
|
|
private JDReportFormStatisticsBusiness jDReportFormStatisticsBusiness;
|
|
|
|
private DingDingBusiness dingDingBusiness;
|
|
|
|
|
|
|
|
public GOIWarningBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, VenderBusiness venderBusiness, JDReportFormStatisticsBusiness jDReportFormStatisticsBusiness, DingDingBusiness dingDingBusiness, IEnumerable<PlatformSDKBusiness> platformSDKBusinessList) : base(fsql, nLogManager, idGenerator, platformSDKBusinessList)
|
|
|
|
{
|
|
|
|
this.taskSchedulerManager = taskSchedulerManager;
|
|
|
|
this.venderBusiness = venderBusiness;
|
|
|
|
this.jDReportFormStatisticsBusiness = jDReportFormStatisticsBusiness;
|
|
|
|
this.dingDingBusiness = dingDingBusiness;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void StartCheckGOI()
|
|
|
|
{
|
|
|
|
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.京东, filterSiNan: true);
|
|
|
|
foreach (var shop in shopList)
|
|
|
|
{
|
|
|
|
Task.Factory.StartNew(() => CheckGOI(shop), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.GOIWarningTaskScheduler);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void CheckGOI(ShopResponse shop)
|
|
|
|
{
|
|
|
|
var loggerName = $"GOI预警-{shop.ShopName}";
|
|
|
|
try
|
|
|
|
{
|
|
|
|
var shopId = long.Parse(shop.ShopId);
|
|
|
|
var yesterday = DateTime.Now.Date.AddDays(-1);
|
|
|
|
var startQueryDay = yesterday.AddDays(-6);
|
|
|
|
|
|
|
|
var yesterdayJDpopularizeadskuList = fsql.Select<JDPopularizeAdSku, JDPopularizeCampaign, JDPopularizeAdGroup>()
|
|
|
|
.LeftJoin((s, c, adg) => s.CampaignId == c.CampaignId && s.Date == c.Date)
|
|
|
|
.LeftJoin((s, c, adg) => s.AdGroupId == adg.AdGroupId && s.Date == adg.Date)
|
|
|
|
.Where((s, c, adg) => s.ShopId == shopId && s.Date == yesterday)
|
|
|
|
.ToList((s, c, adg) => new
|
|
|
|
{
|
|
|
|
CampaignId = s.CampaignId,
|
|
|
|
CampaignName = c.CampaignName,
|
|
|
|
AdGroupId = s.AdGroupId,
|
|
|
|
AdGroupName = adg.AdGroupName,
|
|
|
|
AdId = s.AdId,
|
|
|
|
AdName = s.AdName,
|
|
|
|
BusinessType = s.BusinessType,
|
|
|
|
Sku = s.Sku
|
|
|
|
});
|
|
|
|
|
|
|
|
var adGroupIds = yesterdayJDpopularizeadskuList.Where(s => s.BusinessType == 2).Select(s => s.AdGroupId.Value).Distinct().ToList();
|
|
|
|
var adIds = yesterdayJDpopularizeadskuList.Where(s => s.BusinessType == 2).Select(s => s.AdId.Value).Distinct().ToList();
|
|
|
|
var skuIds = yesterdayJDpopularizeadskuList.Where(s => s.BusinessType == 134217728).Select(s => s.Sku).Distinct().ToList();
|
|
|
|
|
|
|
|
|
|
|
|
IList<StringBuilder> dingdingSendBuilderList = new List<StringBuilder>();
|
|
|
|
StringBuilder adGroupDingdingContentBuilder = null;
|
|
|
|
StringBuilder adDingdingContentBuilder = null;
|
|
|
|
StringBuilder skuDingdingContentBuilder = null;
|
|
|
|
|
|
|
|
var growupCost = 0; //成长加速期花费阈值
|
|
|
|
var growupLevel1Cost = 0; //成长加速期第一阶段成本
|
|
|
|
var growupLevel2MinCost = 0; //成长加速期第二阶段最低成本
|
|
|
|
var growupLevel2MaxCost = 0M; //成长加速期第二阶段最大成本
|
|
|
|
var growupLevel2MinGOI = 0M; //成长加速器第二阶段最低GOI
|
|
|
|
var growupLevel2MaxGOI = 0M; //成长加速器第二阶段最大GOI
|
|
|
|
var growupLevel3MinCost = 0; //成长加速期第三阶段最小成本
|
|
|
|
var growupLevel3MaxCost = 0M; //成长加速期第三阶段最大成本
|
|
|
|
var growupLevel3MinGOI = 0M; //成长加速器第三阶段最低GOI
|
|
|
|
var growupLevel3MaxGOI = 0M; //成长加速器第三阶段最大GOI
|
|
|
|
|
|
|
|
var matureCost = 0; //成熟期花费阈值
|
|
|
|
var mature7dCost = 0; //成熟期7天花费阈值
|
|
|
|
var matureLevel1MinGOI = 0M; //成熟期第一阶段最低GOI
|
|
|
|
var matureLevel1MaxGOI = 0M; //成熟期第一阶段最大GOI
|
|
|
|
|
|
|
|
var stableCost = 0; //稳定期花费阈值
|
|
|
|
var stable7dCost = 0; //稳定期7天花费阈值
|
|
|
|
var stableLevel1MinGOI = 0M; //稳定期第一阶段最低GOI
|
|
|
|
var stableLevel1MaxGOI = 0M; //稳定期第一阶段最大GOI
|
|
|
|
|
|
|
|
|
|
|
|
if (shop.SiNanPolicyLevel == 0) //初级策略
|
|
|
|
{
|
|
|
|
growupCost = 300;
|
|
|
|
growupLevel1Cost = 100;
|
|
|
|
growupLevel2MinCost = 100;
|
|
|
|
growupLevel2MaxCost = 199.9M;
|
|
|
|
growupLevel2MinGOI = 0.5M;
|
|
|
|
growupLevel2MaxGOI = 1.1M;
|
|
|
|
growupLevel3MinCost = 200;
|
|
|
|
growupLevel3MaxCost = 299.9M;
|
|
|
|
growupLevel3MinGOI = 0.7M;
|
|
|
|
growupLevel3MaxGOI = 1.1M;
|
|
|
|
|
|
|
|
matureCost = 300;
|
|
|
|
mature7dCost = 150;
|
|
|
|
matureLevel1MinGOI = 0.9M;
|
|
|
|
matureLevel1MaxGOI = 1.2M;
|
|
|
|
|
|
|
|
stableCost = 300;
|
|
|
|
stable7dCost = 150;
|
|
|
|
stableLevel1MinGOI = 1.0M;
|
|
|
|
stableLevel1MaxGOI = 2;
|
|
|
|
}
|
|
|
|
else if (shop.SiNanPolicyLevel == 1) //中级策略
|
|
|
|
{
|
|
|
|
growupCost = 600;
|
|
|
|
growupLevel1Cost = 200;
|
|
|
|
growupLevel2MinCost = 200;
|
|
|
|
growupLevel2MaxCost = 399.9M;
|
|
|
|
growupLevel2MinGOI = 0.5M;
|
|
|
|
growupLevel2MaxGOI = 1.1M;
|
|
|
|
growupLevel3MinCost = 400;
|
|
|
|
growupLevel3MaxCost = 599.9M;
|
|
|
|
growupLevel3MinGOI = 0.7M;
|
|
|
|
growupLevel3MaxGOI = 1.1M;
|
|
|
|
|
|
|
|
matureCost = 600;
|
|
|
|
mature7dCost = 300;
|
|
|
|
matureLevel1MinGOI = 0.9M;
|
|
|
|
matureLevel1MaxGOI = 1.2M;
|
|
|
|
|
|
|
|
stableCost = 600;
|
|
|
|
stable7dCost = 300;
|
|
|
|
stableLevel1MinGOI = 1.0M;
|
|
|
|
stableLevel1MaxGOI = 2;
|
|
|
|
}
|
|
|
|
else if (shop.SiNanPolicyLevel == 2) //高级策略
|
|
|
|
{
|
|
|
|
growupCost = 1000;
|
|
|
|
growupLevel1Cost = 300;
|
|
|
|
growupLevel2MinCost = 300;
|
|
|
|
growupLevel2MaxCost = 699.9M;
|
|
|
|
growupLevel2MinGOI = 0.5M;
|
|
|
|
growupLevel2MaxGOI = 1.1M;
|
|
|
|
growupLevel3MinCost = 700;
|
|
|
|
growupLevel3MaxCost = 999.9M;
|
|
|
|
growupLevel3MinGOI = 0.7M;
|
|
|
|
growupLevel3MaxGOI = 1.1M;
|
|
|
|
|
|
|
|
matureCost = 1000;
|
|
|
|
mature7dCost = 500;
|
|
|
|
matureLevel1MinGOI = 0.9M;
|
|
|
|
matureLevel1MaxGOI = 1.2M;
|
|
|
|
|
|
|
|
stableCost = 1000;
|
|
|
|
stable7dCost = 500;
|
|
|
|
stableLevel1MinGOI = 1.0M;
|
|
|
|
stableLevel1MaxGOI = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 单元
|
|
|
|
bool isAddBusinessTypeTitle = false;
|
|
|
|
var adGroupGOIList = jDReportFormStatisticsBusiness.CalculationAdGroupLevelGOI(new GOIRequest()
|
|
|
|
{
|
|
|
|
BusinessType = 2,
|
|
|
|
LevelIdList = adGroupIds,
|
|
|
|
OnlyCustomDate = true,
|
|
|
|
StartDate = startQueryDay,
|
|
|
|
EndDate = yesterday
|
|
|
|
});
|
|
|
|
|
|
|
|
//foreach (var adGroupGOI in adGroupGOIList)
|
|
|
|
for (var i = 0; i < adGroupGOIList.Count(); i++)
|
|
|
|
{
|
|
|
|
var adGroupGOI = adGroupGOIList[i];
|
|
|
|
var adGroup = yesterdayJDpopularizeadskuList.FirstOrDefault(s => s.AdGroupId == adGroupGOI.LevelId);
|
|
|
|
if (adGroup == null)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
var logContentBuilder = new StringBuilder();
|
|
|
|
logContentBuilder.AppendLine($"单元维度 {adGroup.CampaignName}({adGroup.CampaignId})-{adGroup.AdGroupName}({adGroup.AdGroupId})");
|
|
|
|
|
|
|
|
Enums.SiNanCycleType? siNanCycleType = Enums.SiNanCycleType.暂无周期;
|
|
|
|
bool isWarning = false;
|
|
|
|
string dingdingWarningContent = string.Empty;
|
|
|
|
|
|
|
|
if (adGroupGOI.TotalCost < growupCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.成长加速期;
|
|
|
|
if (adGroupGOI.TotalCost < growupLevel1Cost)
|
|
|
|
{
|
|
|
|
//不建议调整
|
|
|
|
isWarning = false;
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.TotalCost >= growupLevel2MinCost && adGroupGOI.TotalCost <= growupLevel2MaxCost)
|
|
|
|
{
|
|
|
|
if (adGroupGOI.CustomDaysGOI.GOI < growupLevel2MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI低于{growupLevel2MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.CustomDaysGOI.GOI > growupLevel2MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI高于{growupLevel2MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.TotalCost >= growupLevel3MinCost && adGroupGOI.TotalCost <= growupLevel3MaxCost)
|
|
|
|
{
|
|
|
|
if (adGroupGOI.CustomDaysGOI.GOI < growupLevel3MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI低于{growupLevel3MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.CustomDaysGOI.GOI > growupLevel3MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI高于{growupLevel3MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.TotalCost >= matureCost && adGroupGOI.CustomDaysGOI.Cost >= mature7dCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.成熟利润期;
|
|
|
|
if (adGroupGOI.CustomDaysGOI.GOI < matureLevel1MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI低于{matureLevel1MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.CustomDaysGOI.GOI > matureLevel1MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI高于{matureLevel1MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.TotalCost >= stableCost && adGroupGOI.CustomDaysGOI.Cost < stable7dCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.稳定日销期;
|
|
|
|
if (adGroupGOI.CustomDaysGOI.GOI < stableLevel1MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI低于{stableLevel1MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGroupGOI.CustomDaysGOI.GOI > stableLevel1MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{adGroup.CampaignName}-{adGroup.AdGroupName} 处于{siNanCycleType},近7天GOI高于{stableLevel1MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
logContentBuilder.AppendLine($"{siNanCycleType}");
|
|
|
|
logContentBuilder.AppendLine($"累计推广花费{adGroupGOI.TotalCost}");
|
|
|
|
logContentBuilder.AppendLine($"近7天花费{adGroupGOI.CustomDaysGOI.Cost}");
|
|
|
|
logContentBuilder.AppendLine($"近7天GOI{adGroupGOI.CustomDaysGOI.GOI}");
|
|
|
|
logContentBuilder.AppendLine($"是否出发预警{isWarning}");
|
|
|
|
nLogManager.GetLogger(loggerName).Info(logContentBuilder);
|
|
|
|
if (isWarning)
|
|
|
|
{
|
|
|
|
if (!isAddBusinessTypeTitle)
|
|
|
|
{
|
|
|
|
adGroupDingdingContentBuilder = new StringBuilder();
|
|
|
|
dingdingSendBuilderList.Add(adGroupDingdingContentBuilder);
|
|
|
|
adGroupDingdingContentBuilder.Append(shop.ShopName);
|
|
|
|
adGroupDingdingContentBuilder.AppendLine();
|
|
|
|
adGroupDingdingContentBuilder.Append("快车业务线-单元维度\n");
|
|
|
|
isAddBusinessTypeTitle = true;
|
|
|
|
}
|
|
|
|
adGroupDingdingContentBuilder.Append($"{dingdingWarningContent}{(i == adGroupGOIList.Count() - 1 ? "\r" : string.Empty)}\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 创意
|
|
|
|
isAddBusinessTypeTitle = false;
|
|
|
|
|
|
|
|
var adGOIList = jDReportFormStatisticsBusiness.CalculationAdLevelGOI(new GOIRequest()
|
|
|
|
{
|
|
|
|
BusinessType = 2,
|
|
|
|
LevelIdList = adIds,
|
|
|
|
OnlyCustomDate = true,
|
|
|
|
StartDate = startQueryDay,
|
|
|
|
EndDate = yesterday
|
|
|
|
});
|
|
|
|
|
|
|
|
for (var i = 0; i < adGOIList.Count(); i++)
|
|
|
|
{
|
|
|
|
var adGOI = adGOIList[i];
|
|
|
|
var ad = yesterdayJDpopularizeadskuList.FirstOrDefault(s => s.AdId == adGOI.LevelId);
|
|
|
|
if (ad == null)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
var logContentBuilder = new StringBuilder();
|
|
|
|
logContentBuilder.AppendLine($"创意维度 {ad.CampaignName}({ad.CampaignId})-{ad.AdGroupName}({ad.AdGroupId})-{ad.AdName}({ad.AdId})");
|
|
|
|
|
|
|
|
Enums.SiNanCycleType? siNanCycleType = Enums.SiNanCycleType.暂无周期;
|
|
|
|
bool isWarning = false;
|
|
|
|
string dingdingWarningContent = string.Empty;
|
|
|
|
|
|
|
|
if (adGOI.TotalCost < growupCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.成长加速期;
|
|
|
|
if (adGOI.TotalCost < growupLevel1Cost)
|
|
|
|
{
|
|
|
|
//不建议调整
|
|
|
|
isWarning = false;
|
|
|
|
}
|
|
|
|
else if (adGOI.TotalCost >= growupLevel2MinCost && adGOI.TotalCost <= growupLevel2MaxCost)
|
|
|
|
{
|
|
|
|
if (adGOI.CustomDaysGOI.GOI < growupLevel2MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI低于{growupLevel2MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGOI.CustomDaysGOI.GOI > growupLevel2MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI高于{growupLevel2MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (adGOI.TotalCost >= growupLevel3MinCost && adGOI.TotalCost <= growupLevel3MaxCost)
|
|
|
|
{
|
|
|
|
if (adGOI.CustomDaysGOI.GOI < growupLevel3MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI低于{growupLevel3MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGOI.CustomDaysGOI.GOI > growupLevel3MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI高于{growupLevel3MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (adGOI.TotalCost >= matureCost && adGOI.CustomDaysGOI.Cost >= mature7dCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.成熟利润期;
|
|
|
|
if (adGOI.CustomDaysGOI.GOI < matureLevel1MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI低于{matureLevel1MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGOI.CustomDaysGOI.GOI > matureLevel1MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI高于{matureLevel1MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (adGOI.TotalCost >= stableCost && adGOI.CustomDaysGOI.Cost < stable7dCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.稳定日销期;
|
|
|
|
if (adGOI.CustomDaysGOI.GOI < stableLevel1MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI低于{stableLevel1MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (adGOI.CustomDaysGOI.GOI > stableLevel1MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{ad.CampaignName}-{ad.AdGroupName}-{ad.AdName} 处于{siNanCycleType},近7天GOI高于{stableLevel1MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
logContentBuilder.AppendLine($"{siNanCycleType}");
|
|
|
|
logContentBuilder.AppendLine($"累计推广花费{adGOI.TotalCost}");
|
|
|
|
logContentBuilder.AppendLine($"近7天花费{adGOI.CustomDaysGOI.Cost}");
|
|
|
|
logContentBuilder.AppendLine($"近7天GOI{adGOI.CustomDaysGOI.GOI}");
|
|
|
|
logContentBuilder.AppendLine($"是否出发预警{isWarning}");
|
|
|
|
nLogManager.GetLogger(loggerName).Info(logContentBuilder);
|
|
|
|
|
|
|
|
if (isWarning)
|
|
|
|
{
|
|
|
|
if (!isAddBusinessTypeTitle)
|
|
|
|
{
|
|
|
|
adDingdingContentBuilder = new StringBuilder();
|
|
|
|
dingdingSendBuilderList.Add(adDingdingContentBuilder);
|
|
|
|
adDingdingContentBuilder.Append(shop.ShopName);
|
|
|
|
adDingdingContentBuilder.AppendLine();
|
|
|
|
adDingdingContentBuilder.Append("快车业务线-创意维度\n");
|
|
|
|
isAddBusinessTypeTitle = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
adDingdingContentBuilder.Append($"{dingdingWarningContent}{(i == adGOIList.Count() - 1 ? "\r" : string.Empty)}\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region SKU精速推
|
|
|
|
isAddBusinessTypeTitle = false;
|
|
|
|
|
|
|
|
var skuGOIList = jDReportFormStatisticsBusiness.CalculationSkuLevelGOI(new SkuGOIRequest()
|
|
|
|
{
|
|
|
|
BusinessType = 134217728,
|
|
|
|
LevelIdList = skuIds,
|
|
|
|
OnlyCustomDate = true,
|
|
|
|
StartDate = startQueryDay,
|
|
|
|
EndDate = yesterday
|
|
|
|
});
|
|
|
|
|
|
|
|
for (var i = 0; i < skuGOIList.Count(); i++)
|
|
|
|
{
|
|
|
|
var skuGOI = skuGOIList[i];
|
|
|
|
var sku = yesterdayJDpopularizeadskuList.FirstOrDefault(s => s.Sku == skuGOI.LevelId);
|
|
|
|
if (sku == null)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
var logContentBuilder = new StringBuilder();
|
|
|
|
logContentBuilder.AppendLine($"SKU维度 {sku.CampaignName}({sku.CampaignId})-{sku.Sku}");
|
|
|
|
|
|
|
|
Enums.SiNanCycleType? siNanCycleType = Enums.SiNanCycleType.暂无周期;
|
|
|
|
bool isWarning = false;
|
|
|
|
string dingdingWarningContent = string.Empty;
|
|
|
|
|
|
|
|
if (skuGOI.TotalCost < growupCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.成长加速期;
|
|
|
|
if (skuGOI.TotalCost < growupLevel1Cost)
|
|
|
|
{
|
|
|
|
//不建议调整
|
|
|
|
isWarning = false;
|
|
|
|
}
|
|
|
|
else if (skuGOI.TotalCost >= growupLevel2MinCost && skuGOI.TotalCost <= growupLevel2MaxCost)
|
|
|
|
{
|
|
|
|
if (skuGOI.CustomDaysGOI.GOI < growupLevel2MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI低于{growupLevel2MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (skuGOI.CustomDaysGOI.GOI > growupLevel2MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI高于{growupLevel2MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (skuGOI.TotalCost >= growupLevel3MinCost && skuGOI.TotalCost <= growupLevel3MaxCost)
|
|
|
|
{
|
|
|
|
if (skuGOI.CustomDaysGOI.GOI < growupLevel3MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI低于{growupLevel3MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (skuGOI.CustomDaysGOI.GOI > growupLevel3MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI高于{growupLevel3MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (skuGOI.TotalCost >= matureCost && skuGOI.CustomDaysGOI.Cost >= mature7dCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.成熟利润期;
|
|
|
|
if (skuGOI.CustomDaysGOI.GOI < matureLevel1MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI低于{matureLevel1MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (skuGOI.CustomDaysGOI.GOI > matureLevel1MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI高于{matureLevel1MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (skuGOI.TotalCost >= stableCost && skuGOI.CustomDaysGOI.Cost < stable7dCost)
|
|
|
|
{
|
|
|
|
siNanCycleType = Enums.SiNanCycleType.稳定日销期;
|
|
|
|
if (skuGOI.CustomDaysGOI.GOI < stableLevel1MinGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI低于{stableLevel1MinGOI},请及时优化!";
|
|
|
|
}
|
|
|
|
else if (skuGOI.CustomDaysGOI.GOI > stableLevel1MaxGOI)
|
|
|
|
{
|
|
|
|
isWarning = true;
|
|
|
|
dingdingWarningContent = $"{sku.CampaignName}-{sku.Sku} 处于{siNanCycleType},近7天GOI高于{stableLevel1MaxGOI},舍不得孩子套不住狼,请及时优化!";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
logContentBuilder.AppendLine($"{siNanCycleType}");
|
|
|
|
logContentBuilder.AppendLine($"累计推广花费{skuGOI.TotalCost}");
|
|
|
|
logContentBuilder.AppendLine($"近7天花费{skuGOI.CustomDaysGOI.Cost}");
|
|
|
|
logContentBuilder.AppendLine($"近7天GOI{skuGOI.CustomDaysGOI.GOI}");
|
|
|
|
logContentBuilder.AppendLine($"是否出发预警{isWarning}");
|
|
|
|
nLogManager.GetLogger(loggerName).Info(logContentBuilder);
|
|
|
|
|
|
|
|
if (isWarning)
|
|
|
|
{
|
|
|
|
if (!isAddBusinessTypeTitle)
|
|
|
|
{
|
|
|
|
skuDingdingContentBuilder = new StringBuilder();
|
|
|
|
dingdingSendBuilderList.Add(skuDingdingContentBuilder);
|
|
|
|
skuDingdingContentBuilder.Append(shop.ShopName);
|
|
|
|
skuDingdingContentBuilder.AppendLine();
|
|
|
|
skuDingdingContentBuilder.Append("京速推业务线-SKU维度\n");
|
|
|
|
isAddBusinessTypeTitle = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
skuDingdingContentBuilder.Append($"{dingdingWarningContent}{(i == skuGOIList.Count() - 1 ? "\r" : string.Empty)}\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
if (dingdingSendBuilderList.Count > 0)
|
|
|
|
{
|
|
|
|
foreach (var sendBuilder in dingdingSendBuilderList)
|
|
|
|
dingDingBusiness.SendDingDingBotMessage(shop.SiNanDingDingKey, shop.SiNanDingDingWebHook, sendBuilder.ToString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
nLogManager.GetLogger(loggerName).Error(ex, "GOI预警失败");
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|