using BBWY.Common.Models; using BBWY.Server.Model; using BBWY.Server.Model.Db; using BBWY.Server.Model.Dto; using System; using System.Collections.Generic; using System.Linq; using Yitter.IdGenerator; namespace BBWY.Server.Business.Statistics { public class JDReportFormStatisticsBusiness : BaseBusiness, IDenpendency { public JDReportFormStatisticsBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IEnumerable platformSDKBusinessList) : base(fsql, nLogManager, idGenerator, platformSDKBusinessList) { } public IList CalculationCampaignLevelGOI(GOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var _7dCampaignCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.CampaignId.Value) && x.Date >= _7dStartDate && x.Date <= _7dEndDate) .GroupBy(x => x.CampaignId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), CampaignId = g.Key }); var _7dCampaignProfits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.CampaignId.Value) && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.CampaignId) .ToList(g => new { CampaignId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var _30dCampaignCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.CampaignId.Value) && x.Date >= _30dStartDate && x.Date <= _30dEndDate) .GroupBy(x => x.CampaignId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), CampaignId = g.Key }); var _30dCampaignProfits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.CampaignId.Value) && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.CampaignId) .ToList(g => new { CampaignId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var customDaysCampaignCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.CampaignId.Value) && x.Date >= gOIRequest.StartDate && x.Date <= gOIRequest.EndDate) .GroupBy(x => x.CampaignId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), CampaignId = g.Key }); var customDaysCampaignProfits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.CampaignId.Value) && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.CampaignId) .ToList(g => new { CampaignId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var totalCampaginCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.CampaignId.Value)) .GroupBy(x => x.CampaignId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), CampaignId = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDMultiLevelGOIResponse() { LevelId = levelId, BusinessType = gOIRequest.BusinessType }; goiResponse._7GOI.Cost = _7dCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; goiResponse._7GOI.Profit = _7dCampaignProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; goiResponse._30GOI.Cost = _30dCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; goiResponse._30GOI.Profit = _30dCampaignProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; goiResponse.CustomDaysGOI.Cost = customDaysCampaignCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = customDaysCampaignProfits.FirstOrDefault(x => x.CampaignId == levelId)?.Profit ?? 0M; goiResponse.TotalCost = totalCampaginCosts.FirstOrDefault(x => x.CampaignId == levelId)?.Cost ?? 0M; list.Add(goiResponse); } return list; } public IList CalculationAdGroupLevelGOI(GOIRequest gOIRequest) { var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); DateTime? _7dEndDate = null; DateTime? _7dStartDate = null; DateTime? _7dEndTime = null; DateTime? _30dEndDate = null; DateTime? _30dStartDate = null; DateTime? _30dEndTime = null; if (!gOIRequest.OnlyCustomDate) { _7dEndDate = DateTime.Now.Date.AddDays(-1); _7dStartDate = _7dEndDate.Value.AddDays(-6); _7dEndTime = _7dEndDate.Value.AddDays(1).AddSeconds(-1); _30dEndDate = DateTime.Now.Date.AddDays(-1); _30dStartDate = _30dEndDate.Value.AddDays(-29); _30dEndTime = _30dEndDate.Value.AddDays(1).AddSeconds(-1); } var _7dAdGroupCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) && x.Date >= _7dStartDate && x.Date <= _7dEndDate) .GroupBy(x => x.AdGroupId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdGroupId = g.Key }); var _7dAdGroupProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.AdGroupId) .ToList(g => new { AdGroupId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var _30dAdGroupCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) && x.Date >= _30dStartDate && x.Date <= _30dEndDate) .GroupBy(x => x.AdGroupId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdGroupId = g.Key }); var _30dAdGroupProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.AdGroupId) .ToList(g => new { AdGroupId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var customDaysAdGroupCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value) && x.Date >= gOIRequest.StartDate && x.Date <= gOIRequest.EndDate) .GroupBy(x => x.AdGroupId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdGroupId = g.Key }); var customDaysAdGroupProfits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdGroupId.Value) && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.AdGroupId) .ToList(g => new { AdGroupId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var totalAdGroupCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdGroupId.Value)) .GroupBy(x => x.AdGroupId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdGroupId = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDMultiLevelGOIResponse() { LevelId = levelId, BusinessType = gOIRequest.BusinessType }; goiResponse._7GOI.Cost = _7dAdGroupCosts == null ? 0 : (_7dAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M); goiResponse._7GOI.Profit = _7dAdGroupProfits == null ? 0 : (_7dAdGroupProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M); goiResponse._30GOI.Cost = _30dAdGroupCosts == null ? 0 : (_30dAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M); goiResponse._30GOI.Profit = _30dAdGroupProfits == null ? 0 : (_30dAdGroupProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M); goiResponse.CustomDaysGOI.Cost = customDaysAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = customDaysAdGroupProfits.FirstOrDefault(x => x.AdGroupId == levelId)?.Profit ?? 0M; goiResponse.TotalCost = totalAdGroupCosts.FirstOrDefault(x => x.AdGroupId == levelId)?.Cost ?? 0M; list.Add(goiResponse); } return list; } public IList CalculationAdLevelGOI(GOIRequest gOIRequest) { var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); DateTime? _7dEndDate = null; DateTime? _7dStartDate = null; DateTime? _7dEndTime = null; DateTime? _30dEndDate = null; DateTime? _30dStartDate = null; DateTime? _30dEndTime = null; if (!gOIRequest.OnlyCustomDate) { _7dEndDate = DateTime.Now.Date.AddDays(-1); _7dStartDate = _7dEndDate.Value.AddDays(-6); _7dEndTime = _7dEndDate.Value.AddDays(1).AddSeconds(-1); _30dEndDate = DateTime.Now.Date.AddDays(-1); _30dStartDate = _30dEndDate.Value.AddDays(-29); _30dEndTime = _30dEndDate.Value.AddDays(1).AddSeconds(-1); } var _7dAdCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdId.Value) && x.Date >= _7dStartDate && x.Date <= _7dEndDate) .GroupBy(x => x.AdId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdId = g.Key }); var _7dAdProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdId.Value) && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.AdId) .ToList(g => new { AdId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var _30dAdCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdId.Value) && x.Date >= _30dStartDate && x.Date <= _30dEndDate) .GroupBy(x => x.AdId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdId = g.Key }); var _30dAdProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdId.Value) && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.AdId) .ToList(g => new { AdId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var customDaysAdCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdId.Value) && x.Date >= gOIRequest.StartDate && x.Date <= gOIRequest.EndDate) .GroupBy(x => x.AdId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdId = g.Key }); var customDaysAdProfits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.AdId.Value) && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.AdId) .ToList(g => new { AdId = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var totalAdCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.AdId.Value)) .GroupBy(x => x.AdId) .ToList(g => new { Cost = g.Sum(g.Value.Cost), AdId = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDMultiLevelGOIResponse() { LevelId = levelId, BusinessType = gOIRequest.BusinessType }; goiResponse._7GOI.Cost = _7dAdCosts == null ? 0 : (_7dAdCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M); goiResponse._7GOI.Profit = _7dAdProfits == null ? 0 : (_7dAdProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M); goiResponse._30GOI.Cost = _30dAdCosts == null ? 0 : (_30dAdCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M); goiResponse._30GOI.Profit = _30dAdProfits == null ? 0 : (_30dAdProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M); goiResponse.CustomDaysGOI.Cost = customDaysAdCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = customDaysAdProfits.FirstOrDefault(x => x.AdId == levelId)?.Profit ?? 0M; goiResponse.TotalCost = totalAdCosts.FirstOrDefault(x => x.AdId == levelId)?.Cost ?? 0M; list.Add(goiResponse); } return list; } public IList CalculationSkuLevelGOI(SkuGOIRequest gOIRequest) { var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); DateTime? _7dEndDate = null; DateTime? _7dStartDate = null; DateTime? _7dEndTime = null; DateTime? _30dEndDate = null; DateTime? _30dStartDate = null; DateTime? _30dEndTime = null; if (!gOIRequest.OnlyCustomDate) { _7dEndDate = DateTime.Now.Date.AddDays(-1); _7dStartDate = _7dEndDate.Value.AddDays(-6); _7dEndTime = _7dEndDate.Value.AddDays(1).AddSeconds(-1); _30dEndDate = DateTime.Now.Date.AddDays(-1); _30dStartDate = _30dEndDate.Value.AddDays(-29); _30dEndTime = _30dEndDate.Value.AddDays(1).AddSeconds(-1); } var _7dSkuCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.Sku) && x.BusinessType == 134217728 && x.Date >= _7dStartDate && x.Date <= _7dEndDate) .GroupBy(x => x.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dSkuProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && jr.BusinessType == 134217728 && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.PopularizeSku) .ToList(g => new { Sku = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var _30dSkuCosts = gOIRequest.OnlyCustomDate ? null : fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.Sku) && x.BusinessType == 134217728 && x.Date >= _30dStartDate && x.Date <= _30dEndDate) .GroupBy(x => x.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dSkuProfits = gOIRequest.OnlyCustomDate ? null : fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && jr.BusinessType == 134217728 && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.PopularizeSku) .ToList(g => new { Sku = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var customDaysSkuCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.Sku) && x.BusinessType == 134217728 && x.Date >= gOIRequest.StartDate && x.Date <= gOIRequest.EndDate) .GroupBy(x => x.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var customDaysSkuProfits = fsql.Select().InnerJoin((jr, oc, o) => jr.OrderId == oc.OrderId) .InnerJoin((jr, oc, o) => jr.OrderId == o.Id) .Where((jr, oc, o) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && jr.BusinessType == 134217728 && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, oc, o) => jr.PopularizeSku) .ToList(g => new { Sku = g.Key, Profit = g.Sum(g.Value.Item2.Profit) }); var skuTotalCosts = fsql.Select().Where(x => gOIRequest.LevelIdList.Contains(x.Sku) && x.BusinessType == 134217728) .GroupBy(x => x.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDSkuLevelGOIResponse() { LevelId = levelId, BusinessType = gOIRequest.BusinessType }; goiResponse._7GOI.Cost = _7dSkuCosts == null ? 0 : (_7dSkuCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M); goiResponse._7GOI.Profit = _7dSkuProfits == null ? 0 : (_7dSkuProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M); goiResponse._30GOI.Cost = _30dSkuCosts == null ? 0 : (_30dSkuCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M); goiResponse._30GOI.Profit = _30dSkuProfits == null ? 0 : (_30dSkuProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M); goiResponse.CustomDaysGOI.Cost = customDaysSkuCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = customDaysSkuProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; goiResponse.TotalCost = skuTotalCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; list.Add(goiResponse); } return list; } public IList CalculationCampaignLevelProductGOI(GOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var campaignList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.CampaignId.Value)) .GroupBy(s => new { s.CampaignId, s.Sku }) .ToList(g => new { g.Key.CampaignId, g.Key.Sku }); var skuIds = campaignList.Select(campaign => campaign.Sku).Distinct().ToList(); var _7dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _7dStartDate && ocd.CreateTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _30dStartDate && ocd.CreateTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= gOIRequest.StartDate && ocd.CreateTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _totalCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDProductAndPopularizeLevelGOIResponse() { LevelId = levelId }; var currentLevelIdSkuIds = campaignList.Where(campaign => campaign.CampaignId == levelId).Select(campaign => campaign.Sku).Distinct().ToList(); goiResponse._7GOI.Cost = _7dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._7GOI.Profit = _7dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse._30GOI.Cost = _30dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._30GOI.Profit = _30dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.CustomDaysGOI.Cost = _customCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse.CustomDaysGOI.Profit = _customProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.TotalCost = _totalCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); list.Add(goiResponse); } return list; } public IList CalculationAdGroupLevelProductGOI(GOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var adGroupList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdGroupId.Value)) .GroupBy(s => new { s.AdGroupId, s.Sku }) .ToList(g => new { g.Key.AdGroupId, g.Key.Sku }); var skuIds = adGroupList.Select(adGroup => adGroup.Sku).Distinct().ToList(); var _7dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _7dStartDate && ocd.CreateTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _30dStartDate && ocd.CreateTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= gOIRequest.StartDate && ocd.CreateTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _totalCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDProductAndPopularizeLevelGOIResponse() { LevelId = levelId }; var currentLevelIdSkuIds = adGroupList.Where(adGroup => adGroup.AdGroupId == levelId).Select(adGroup => adGroup.Sku).Distinct().ToList(); goiResponse._7GOI.Cost = _7dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._7GOI.Profit = _7dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse._30GOI.Cost = _30dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._30GOI.Profit = _30dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.CustomDaysGOI.Cost = _customCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse.CustomDaysGOI.Profit = _customProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.TotalCost = _totalCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); list.Add(goiResponse); } return list; } public IList CalculationAdLevelProductGOI(GOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var adList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdId.Value)) .GroupBy(s => new { s.AdId, s.Sku }) .ToList(g => new { g.Key.AdId, g.Key.Sku }); var skuIds = adList.Select(ad => ad.Sku).Distinct().ToList(); var _7dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _7dStartDate && ocd.CreateTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _30dStartDate && ocd.CreateTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => skuIds.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= gOIRequest.StartDate && ocd.CreateTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _totalCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDProductAndPopularizeLevelGOIResponse() { LevelId = levelId }; var currentLevelIdSkuIds = adList.Where(ad => ad.AdId == levelId).Select(ad => ad.Sku).Distinct().ToList(); goiResponse._7GOI.Cost = _7dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._7GOI.Profit = _7dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse._30GOI.Cost = _30dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._30GOI.Profit = _30dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.CustomDaysGOI.Cost = _customCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse.CustomDaysGOI.Profit = _customProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.TotalCost = _totalCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); list.Add(goiResponse); } return list; } public IList CalculationSkuLevelProductGOI(SkuGOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var _7dCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => gOIRequest.LevelIdList.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _7dStartDate && ocd.CreateTime <= _7dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => gOIRequest.LevelIdList.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= _30dStartDate && ocd.CreateTime <= _30dEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => gOIRequest.LevelIdList.Contains(ocd.SkuId) && ocd.IsEnabled && ocd.CreateTime >= gOIRequest.StartDate && ocd.CreateTime <= customEndTime && o.OrderState != Enums.OrderState.已取消) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { Profit = g.Sum(g.Value.Item1.SkuGrossProfit), Sku = g.Key }); var _totalSkuCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDSkuLevelProductAndPopularizeGOIResponse() { LevelId = levelId }; goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; goiResponse.TotalCost = _totalSkuCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; list.Add(goiResponse); } return list; } public IList CalculationCampaignLevelPopularizeGOI(GOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var campaignList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.CampaignId.Value)) .GroupBy(s => new { s.CampaignId, s.Sku }) .ToList(g => new { g.Key.CampaignId, g.Key.Sku }); var skuIds = campaignList.Select(campaign => campaign.Sku).Distinct().ToList(); var _7dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _totalCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDProductAndPopularizeLevelGOIResponse() { LevelId = levelId }; var currentLevelIdSkuIds = campaignList.Where(campaign => campaign.CampaignId == levelId).Select(campaign => campaign.Sku).Distinct().ToList(); goiResponse._7GOI.Cost = _7dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._7GOI.Profit = _7dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse._30GOI.Cost = _30dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._30GOI.Profit = _30dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.CustomDaysGOI.Cost = _customCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse.CustomDaysGOI.Profit = _customProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.TotalCost = _totalCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); list.Add(goiResponse); } return list; } public IList CalculationAdGroupLevelPopularizeGOI(GOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var adGroupList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdGroupId.Value)) .GroupBy(s => new { s.AdGroupId, s.Sku }) .ToList(g => new { g.Key.AdGroupId, g.Key.Sku }); var skuIds = adGroupList.Select(adGroup => adGroup.Sku).Distinct().ToList(); var _7dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _totalCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDProductAndPopularizeLevelGOIResponse() { LevelId = levelId }; var currentLevelIdSkuIds = adGroupList.Where(adGroup => adGroup.AdGroupId == levelId).Select(adGroup => adGroup.Sku).Distinct().ToList(); goiResponse._7GOI.Cost = _7dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._7GOI.Profit = _7dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse._30GOI.Cost = _30dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._30GOI.Profit = _30dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.CustomDaysGOI.Cost = _customCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse.CustomDaysGOI.Profit = _customProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.TotalCost = _totalCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); list.Add(goiResponse); } return list; } public IList CalculationAdLevelPopularizeGOI(GOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var adList = fsql.Select().Where(s => gOIRequest.LevelIdList.Contains(s.AdId.Value)) .GroupBy(s => new { s.AdId, s.Sku }) .ToList(g => new { g.Key.AdId, g.Key.Sku }); var skuIds = adList.Select(ad => ad.Sku).Distinct().ToList(); var _7dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => skuIds.Contains(jr.PopularizeSku) && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _totalCosts = fsql.Select() .Where(jas => skuIds.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDProductAndPopularizeLevelGOIResponse() { LevelId = levelId }; var currentLevelIdSkuIds = adList.Where(ad => ad.AdId == levelId).Select(ad => ad.Sku).Distinct().ToList(); goiResponse._7GOI.Cost = _7dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._7GOI.Profit = _7dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse._30GOI.Cost = _30dCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse._30GOI.Profit = _30dProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.CustomDaysGOI.Cost = _customCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); goiResponse.CustomDaysGOI.Profit = _customProfits.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Profit); goiResponse.TotalCost = _totalCosts.Where(x => currentLevelIdSkuIds.Contains(x.Sku)).Sum(x => x.Cost); list.Add(goiResponse); } return list; } public IList CalculationSkuLevelPopularizeGOI(SkuGOIRequest gOIRequest) { var _7dEndDate = DateTime.Now.Date.AddDays(-1); var _7dStartDate = _7dEndDate.AddDays(-6); var _7dEndTime = _7dEndDate.AddDays(1).AddSeconds(-1); var _30dEndDate = DateTime.Now.Date.AddDays(-1); var _30dStartDate = _30dEndDate.AddDays(-29); var _30dEndTime = _30dEndDate.AddDays(1).AddSeconds(-1); var customEndTime = gOIRequest.EndDate.AddDays(1).AddSeconds(-1); var _7dCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && jas.Date >= _7dStartDate && jas.Date <= _7dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _7dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && jr.CookieTime >= _7dStartDate && jr.CookieTime <= _7dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _30dCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && jas.Date >= _30dStartDate && jas.Date <= _30dEndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _30dProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && jr.CookieTime >= _30dStartDate && jr.CookieTime <= _30dEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _customCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku) && jas.Date >= gOIRequest.StartDate && jas.Date <= gOIRequest.EndDate) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var _customProfits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) .Where((jr, ocd, o) => gOIRequest.LevelIdList.Contains(jr.PopularizeSku) && jr.CookieTime >= gOIRequest.StartDate && jr.CookieTime <= customEndTime && ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { Profit = g.Sum(g.Value.Item2.SkuGrossProfit), Sku = g.Key }); var _totalSkuCosts = fsql.Select() .Where(jas => gOIRequest.LevelIdList.Contains(jas.Sku)) .GroupBy(jas => jas.Sku) .ToList(g => new { Cost = g.Sum(g.Value.Cost), Sku = g.Key }); var list = new List(); foreach (var levelId in gOIRequest.LevelIdList) { var goiResponse = new JDSkuLevelProductAndPopularizeGOIResponse() { LevelId = levelId }; goiResponse._7GOI.Cost = _7dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; goiResponse._7GOI.Profit = _7dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; goiResponse._30GOI.Cost = _30dCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; goiResponse._30GOI.Profit = _30dProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; goiResponse.CustomDaysGOI.Cost = _customCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; goiResponse.CustomDaysGOI.Profit = _customProfits.FirstOrDefault(x => x.Sku == levelId)?.Profit ?? 0M; goiResponse.TotalCost = _totalSkuCosts.FirstOrDefault(x => x.Sku == levelId)?.Cost ?? 0M; list.Add(goiResponse); } return list; } } }