From 699f7ecfb642eb8e57ba0334bf2440f83550a008 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 26 Nov 2023 02:13:21 +0800 Subject: [PATCH] =?UTF-8?q?SPU=E8=81=9A=E5=90=88=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=90=A5=E4=B8=9A=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SiNan.Business/AggregationBusiness.cs | 29 ++- SiNan.Business/GOIBusiness.cs | 16 +- SiNan.Model/Core/ActualAmountBySpu.cs | 12 ++ .../AggregationJDPopularizeSpuDaily.cs | 6 + SiNan.Model/Db/Order/OrderSku.cs | 202 ++++++++++++++++-- 5 files changed, 241 insertions(+), 24 deletions(-) create mode 100644 SiNan.Model/Core/ActualAmountBySpu.cs diff --git a/SiNan.Business/AggregationBusiness.cs b/SiNan.Business/AggregationBusiness.cs index 73f2cb3..33828a3 100644 --- a/SiNan.Business/AggregationBusiness.cs +++ b/SiNan.Business/AggregationBusiness.cs @@ -1,6 +1,7 @@ using FreeSql; using SiNan.Common.Log; using SiNan.Common.Models; +using SiNan.Model; using SiNan.Model.Core; using SiNan.Model.Db; using SiNan.Model.Dto; @@ -99,9 +100,9 @@ namespace SiNan.Business var i = 0; var spuGroups = (from s in spuIdList - let num = i++ - group s by num / 10 into g - select g.ToArray()).ToList(); //10个spu为一组 + let num = i++ + group s by num / 10 into g + select g.ToArray()).ToList(); //10个spu为一组 var spuGroupCount = spuGroups.Count(); var spuGroupIndex = 0; @@ -121,6 +122,7 @@ namespace SiNan.Business var aggregationDate_ProductLevelList = goiBusiness.StatisticsProductLevelGOI(currentGroupSkuIdList, startDate_aggregationDate, endDate_aggregationDate); var aggregationDate_PopularizeLevelList = goiBusiness.StatisticsPopularizeLevelGOI(currentGroupSkuIdList, startDate_aggregationDate, endDate_aggregationDate); + var aggregationDate_SpuActualAmountList = StatisticsActualAmountBySpu(spuGroup, startDate_aggregationDate, endDate_aggregationDate); IList recent7d_ProductLevelList = null; IList recent7d_PopularizeLevelList = null; IList recent30d_ProductLevelList = null; @@ -177,7 +179,8 @@ namespace SiNan.Business ProductLevelProfit = spugoi_AggregationDate_ProductLevel?.Profit ?? 0M, ProductLevelGOI = spugoi_AggregationDate_ProductLevel?.GOI ?? 0M, PopularizeLevelProfit = spugoi_AggregationDate_PopularizeLevel?.Profit ?? 0M, - PopularizeLevelGOI = spugoi_AggregationDate_PopularizeLevel?.GOI ?? 0M + PopularizeLevelGOI = spugoi_AggregationDate_PopularizeLevel?.GOI ?? 0M, + ActualAmount = aggregationDate_SpuActualAmountList.FirstOrDefault(x => x.Spu == spuId)?.ActualAmount ?? 0M }; insertAggregationSpuDailyList.Add(spuDailyAggregation); #endregion @@ -369,6 +372,24 @@ namespace SiNan.Business }); } } + + private IList StatisticsActualAmountBySpu(IList spuList, DateTime startDate, DateTime endDate) + { + var list = fsql.Select().InnerJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => o.OrderState != Enums.OrderState.已取消 && + o.IsGift == false && + o.StartTime >= startDate && + o.EndTime <= endDate && + osku.Price > 0 && + spuList.Contains(osku.ProductId)) + .GroupBy((osku, o) => osku.ProductId) + .ToList(g => new ActualAmountBySpu + { + ActualAmount = g.Sum(g.Value.Item1.ActualAmount), + Spu = g.Key + }); + return list; + } #endregion #region 计划聚合任务 diff --git a/SiNan.Business/GOIBusiness.cs b/SiNan.Business/GOIBusiness.cs index 2afeb14..200d232 100644 --- a/SiNan.Business/GOIBusiness.cs +++ b/SiNan.Business/GOIBusiness.cs @@ -37,7 +37,8 @@ namespace SiNan.Business ocd.IsEnabled && o.StartTime >= startDate && o.StartTime <= endDate && - o.OrderState != Enums.OrderState.已取消) + o.OrderState != Enums.OrderState.已取消 && + o.IsGift == false) .GroupBy((ocd, o) => ocd.SkuId) .ToList(g => new { @@ -74,10 +75,10 @@ namespace SiNan.Business var profits = fsql.Select() .InnerJoin((jr, ocd, o) => jr.OrderId == ocd.OrderId) .InnerJoin((jr, ocd, o) => jr.OrderId == o.Id) - .Where((jr, ocd, o) => skuIdList.Contains(jr.PopularizeSku)) + .Where((jr, ocd, o) => o.OrderState != Enums.OrderState.已取消 && o.IsGift == false && ocd.IsEnabled == true) .WhereIf(startDate != null, (jr, ocd, o) => jr.CookieTime >= startDate) .WhereIf(endDate != null, (jr, ocd, o) => jr.CookieTime <= endDate) - .Where((jr, ocd, o) => ocd.IsEnabled == true && o.OrderState != Enums.OrderState.已取消) + .Where((jr, ocd, o) => skuIdList.Contains(jr.PopularizeSku)) .GroupBy((jr, ocd, o) => jr.PopularizeSku) .ToList(g => new { @@ -109,7 +110,8 @@ namespace SiNan.Business ocd.IsEnabled && o.StartTime >= startDate && o.StartTime <= endDate && - o.OrderState != Enums.OrderState.已取消) + o.OrderState != Enums.OrderState.已取消 && + o.IsGift == false) .ToAggregate((ocd, o) => ocd.Sum(ocd.Key.SkuGrossProfit)); return new GOIByShop() @@ -137,7 +139,8 @@ namespace SiNan.Business .Where((jr, oc, o) => campaignIdList.Contains(jr.CampaignId.Value) && jr.CookieTime >= startDate && jr.CookieTime <= endDate && - o.OrderState != Enums.OrderState.已取消) + o.OrderState != Enums.OrderState.已取消 && + o.IsGift == false) .GroupBy((jr, oc, o) => jr.CampaignId) .ToList(g => new { @@ -174,7 +177,8 @@ namespace SiNan.Business .Where((jr, oc, o) => adGroupIdList.Contains(jr.AdGroupId.Value) && jr.CookieTime >= startDate && jr.CookieTime <= endDate && - o.OrderState != Enums.OrderState.已取消) + o.OrderState != Enums.OrderState.已取消 && + o.IsGift == false) .GroupBy((jr, oc, o) => jr.AdGroupId) .ToList(g => new { diff --git a/SiNan.Model/Core/ActualAmountBySpu.cs b/SiNan.Model/Core/ActualAmountBySpu.cs new file mode 100644 index 0000000..d789e99 --- /dev/null +++ b/SiNan.Model/Core/ActualAmountBySpu.cs @@ -0,0 +1,12 @@ +namespace SiNan.Model.Core +{ + public class ActualAmountBySpu + { + /// + /// 实收金额 + /// + public decimal ActualAmount { get; set; } + + public string Spu { get; set; } + } +} diff --git a/SiNan.Model/Db/Aggregation/AggregationJDPopularizeSpuDaily.cs b/SiNan.Model/Db/Aggregation/AggregationJDPopularizeSpuDaily.cs index efaab41..674ec02 100644 --- a/SiNan.Model/Db/Aggregation/AggregationJDPopularizeSpuDaily.cs +++ b/SiNan.Model/Db/Aggregation/AggregationJDPopularizeSpuDaily.cs @@ -54,6 +54,12 @@ namespace SiNan.Model.Db [Column(DbType = "bigint")] public long? ShopId { get; set; } + /// + /// 商品营业额(SKU实收之和) + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ActualAmount { get; set; } = 0.00M; + } } diff --git a/SiNan.Model/Db/Order/OrderSku.cs b/SiNan.Model/Db/Order/OrderSku.cs index 9a1c6ac..8668bf4 100644 --- a/SiNan.Model/Db/Order/OrderSku.cs +++ b/SiNan.Model/Db/Order/OrderSku.cs @@ -1,27 +1,153 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; namespace SiNan.Model.Db { + /// + /// 订单SKU + /// [Table(Name = "ordersku", DisableSyncStructure = true)] public partial class OrderSku { + /// + /// 商家Id + /// + [Column(IsIgnore = true)] + public long ShopId { get; set; } - [Column(DbType = "bigint(1)", IsPrimary = true)] + [Column(DbType = "bigint", IsPrimary = true)] public long Id { get; set; } + /// + /// 京东支付优惠,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? JdZhiFuYouHui { get; set; } = 0.00M; + + /// + /// plus会员95折优惠,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Plus95 { get; set; } = 0.00M; + + /// + /// 余额,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Balance { get; set; } = 0.00M; + + /// + /// 基础优惠,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? BaseDiscount { get; set; } = 0.00M; + + /// + /// 基础运费,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? BaseFee { get; set; } = 0.00M; + + /// + /// 优惠券,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? Coupon { get; set; } = 0.00M; + [Column(DbType = "datetime")] public DateTime? CreateTime { get; set; } + /// + /// 东券,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? DongQuan { get; set; } = 0.00M; + + /// + /// 满期赠促销 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ExpiryGiftDiscount { get; set; } = 0.00M; + + /// + /// 全球购一般贸易税(包税),计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? GlobalGeneralIncludeTax { get; set; } = 0.00M; + + /// + /// 全球购一般贸易税,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? GlobalGeneralTax { get; set; } = 0.00M; + + /// + /// 是否退款 + /// + public bool? IsRefund { get; set; } = false; + /// /// 销售数量 /// - [Column(DbType = "int(1)")] + [Column(DbType = "int")] public int? ItemTotal { get; set; } + /// + /// 京豆,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? JingDou { get; set; } = 0.00M; + + /// + /// 京券,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? JingQuan { get; set; } = 0.00M; + + /// + /// 京享礼金(首单礼金或重逢礼金),计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? JingXiangLiJin { get; set; } = 0.00M; + + /// + /// 礼金优惠,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? LiJinYouHui { get; set; } = 0.00M; + + /// + /// Logo + /// + public string Logo { get; set; } + + /// + /// 落地配服务,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? LuoDiPeiService { get; set; } = 0.00M; + + /// + /// 满减,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ManJian { get; set; } = 0.00M; + + /// + /// 代发Id + /// + [Column(DbType = "bigint")] + public long? OrderDropShippingId { get; set; } + [Column(StringLength = 50)] public string OrderId { get; set; } + /// + /// 按比例平台承担优惠券,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PingTaiChengDanYouHuiQuan { get; set; } = 0.00M; + /// /// 销售单价 /// @@ -37,32 +163,80 @@ namespace SiNan.Model.Db [Column(StringLength = 50)] public string ProductNo { get; set; } + /// + /// 跨店满减促销 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? PromotionDiscount { get; set; } = 0.00M; + + /// + /// 偏远运费,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? RemoteFee { get; set; } = 0.00M; + + /// + /// 应付金额,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ShouldPay { get; set; } = 0.00M; + [Column(StringLength = 50, IsNullable = false)] public string SkuId { get; set; } + /// + /// 超级红包,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? SuperRedEnvelope { get; set; } = 0.00M; + + /// + /// 全球购税费,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? TaxFee { get; set; } = 0.00M; + /// /// Sku标题 /// - [Column(StringLength = 255)] public string Title { get; set; } - [Column(StringLength = 255)] - public string Logo { get; set; } + /// + /// 退换货无忧,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? TuiHuanHuoWuYou { get; set; } = 0.00M; /// - /// 代发信息Id + /// 商家运费,计价单位:元 /// - [Column(DbType = "bigint(1)", IsNullable = true)] - public long? OrderDropShippingId { get; set; } + [Column(DbType = "decimal(18,2)")] + public decimal? VenderFee { get; set; } = 0.00M; /// - /// 是否售后 + /// 限品类东券,计价单位:元 /// - [Column(DbType = "bit")] - public bool IsRefund { get; set; } = false; + [Column(DbType = "decimal(18,2)")] + public decimal? XianPinLeiDongQuan { get; set; } = 0.00M; + + /// + /// 限品类京券,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? XianPinLeiJingQuan { get; set; } = 0.00M; + + /// + /// 支付营销优惠,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ZhiFuYingXiaoYouHui { get; set; } = 0.00M; + + /// + /// 实收金额,计价单位:元 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? ActualAmount { get; set; } = 0.00M; - [Column(IsIgnore = true)] - public long ShopId { get; set; } } }