From 3f2441ae159dc969318bf3a38260a1a8f4a5b3ef Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 9 Oct 2023 19:19:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 6 + .../DataRepair/DataRepairBusiness.cs | 162 ++++++++++++++---- 2 files changed, 133 insertions(+), 35 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index 36204fd..2d16d68 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -78,5 +78,11 @@ namespace BBWYB.Server.API.Controllers { dataRepairBusiness.BatchCompleteOrder(); } + + [HttpPost] + public void RepairHistoryItemCount() + { + dataRepairBusiness.RepairHistoryItemCount(); + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index fb2be4e..3ea8042 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -514,49 +514,141 @@ namespace BBWYB.Server.Business { List insertSpuSaleInfoList = new List(); List insertSkuSaleInfoList = new List(); - var noOrderStateList = new List() { Enums.OrderState.已取消, Enums.OrderState.待付款 }; - var spuSaleGroups = fsql.Select() - .InnerJoin((osku, o) => osku.OrderId == o.Id) - .Where((osku, o) => !noOrderStateList.Contains(o.OrderState)) - .GroupBy((osku, o) => new { osku.ProductId, o.ShopId }) - .ToList(g => new - { - g.Key.ProductId, - g.Key.ShopId, - ItemCount = g.Sum(g.Value.Item1.ItemTotal) - }); - - var skuSaleGroups = fsql.Select() - .InnerJoin((osku, o) => osku.OrderId == o.Id) - .Where((osku, o) => !noOrderStateList.Contains(o.OrderState)) - .GroupBy((osku, o) => new { osku.ProductId, osku.SkuId, o.ShopId }) - .ToList(g => new - { - g.Key.ProductId, - g.Key.SkuId, - g.Key.ShopId, - ItemCount = g.Sum(g.Value.Item1.ItemTotal) - }); - - foreach (var spuSale in spuSaleGroups) + + #region 补销量 { - var insertSpuSale = new SpuTotalSaleInfo() + var spuSaleGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((osku, o) => new { osku.ProductId, o.ShopId }) + .ToList(g => new + { + g.Key.ProductId, + g.Key.ShopId, + ItemCount = g.Sum(g.Value.Item1.ItemTotal) + }); + + var skuSaleGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .Where((osku, o) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((osku, o) => new { osku.ProductId, osku.SkuId, o.ShopId }) + .ToList(g => new + { + g.Key.ProductId, + g.Key.SkuId, + g.Key.ShopId, + ItemCount = g.Sum(g.Value.Item1.ItemTotal) + }); + + foreach (var spuSale in spuSaleGroups) { - ProductId = spuSale.ProductId, - ShopId = spuSale.ShopId, - CreateTime = DateTime.Now, - IsEnabled = true, - ItemCount = Convert.ToInt64(spuSale.ItemCount), - UpdateTime = DateTime.Now, - LastOptimizationItemCount = Convert.ToInt64(spuSale.ItemCount), - LastOptimizationTime = DateTime.Now - }; + var itemCount = Convert.ToInt64(spuSale.ItemCount); + var insertSpuSale = new SpuTotalSaleInfo() + { + ProductId = spuSale.ProductId, + ShopId = spuSale.ShopId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = itemCount, + UpdateTime = DateTime.Now, + LastOptimizationItemCount = itemCount, + LastOptimizationTime = DateTime.Now, + FirstOptimizationCompletedItemCount = itemCount, + FirstPurchaseCompletedItemCount = 0, + IsFirstOptimizationCompleted = true, + IsFirstPurchaseCompleted = true + }; + insertSpuSaleInfoList.Add(insertSpuSale); + } + + foreach (var skuSale in skuSaleGroups) + { + var insertSkuSale = new SkuTotalSaleInfo() + { + ProductId = skuSale.ProductId, + SkuId = skuSale.SkuId, + ShopId = skuSale.ShopId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = Convert.ToInt64(skuSale.ItemCount), + UpdateTime = DateTime.Now + }; + insertSkuSaleInfoList.Add(insertSkuSale); + } } + #endregion + + #region 采购方案累计信息 + #region 采购件数 + /* + select opi.SchemeId,sum(osku.ItemTotal) from orderpurchaserelationinfo opi + inner join `order` o on opi.OrderId=o.Id + inner join ordersku osku on osku.OrderId=opi.OrderId and osku.SkuId=opi.BelongSkuId + where o.OrderState not in (0,6) and o.ShopId!=11 + group by opi.SchemeId; + */ + + { + var psItemCountGroups = fsql.Select() + .InnerJoin((opi, o, osku) => opi.OrderId == o.Id) + .InnerJoin((opi, o, osku) => osku.OrderId == opi.OrderId && osku.SkuId == opi.BelongSkuId) + .Where((opi, o, osku) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((opi, o, osku) => opi.SchemeId) + .ToList(g => new + { + SchemeId = g.Key, + ItemTotal = g.Sum(g.Value.Item3.ItemTotal) + }); + } + #endregion + + #region 采购金额 + /* + select opi.SchemeId,sum(osc.SkuAmount) from orderpurchaserelationinfo opi + inner join `order` o on opi.OrderId=o.Id + inner join orderSkuCost osc on osc.OrderId=opi.OrderId and osc.SkuId = opi.BelongSkuId + where o.OrderState not in (0,6) and o.ShopId!=11 + group by opi.SchemeId; + */ + { + var psAmountGroups = fsql.Select() + .InnerJoin((opi, o, osc) => opi.OrderId == o.Id) + .InnerJoin((opi, o, osc) => osc.OrderId == opi.OrderId && osc.SkuId == opi.BelongSkuId) + .Where((opi, o, osc) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11) + .GroupBy((opi, o, osc) => opi.SchemeId) + .ToList(g => new + { + SchemeId = g.Key, + Amount = g.Sum(g.Value.Item3.SkuAmount) + }); + } + #endregion + + + #endregion + + #region 采购商累计信息 + + #endregion + + fsql.Transaction(() => + { + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); + fsql.Delete().Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务).ExecuteAffrows(); + fsql.Update().Set(osku => osku.IsNeedOptimization, 0) + .Set(osku => osku.IsOptimizationCompleted, 0) + .Where(osku => osku.IsNeedOptimization == 1) + .ExecuteAffrows(); + fsql.Insert(insertSpuSaleInfoList).ExecuteAffrows(); + fsql.Insert(insertSkuSaleInfoList).ExecuteAffrows(); + }); } } } From 872ffd09a081373b3b736efe723b08d3c1a4c20f Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Tue, 10 Oct 2023 01:51:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E8=A1=A5=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ConverterExtensions.cs | 12 ++ .../DataRepair/DataRepairBusiness.cs | 125 +++++++++++++++++- 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/BBWYB.Common/Extensions/ConverterExtensions.cs b/BBWYB.Common/Extensions/ConverterExtensions.cs index 2bc884e..9f27cc3 100644 --- a/BBWYB.Common/Extensions/ConverterExtensions.cs +++ b/BBWYB.Common/Extensions/ConverterExtensions.cs @@ -13,5 +13,17 @@ return null; } } + + public static int? ToInt32(this object? o) + { + try + { + return Convert.ToInt32(o); + } + catch + { + return null; + } + } } } diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index 3ea8042..9f7905d 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -9,6 +9,7 @@ using FreeSql; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; +using System.Data; using System.Net.Http.Headers; using Yitter.IdGenerator; @@ -514,6 +515,9 @@ namespace BBWYB.Server.Business { List insertSpuSaleInfoList = new List(); List insertSkuSaleInfoList = new List(); + List updatePurchaseSchemeList = new List(); + List updatePurchaserList = new List(); + List insertSkuHistoryPurchaserRelationList = new List(); var noOrderStateList = new List() { Enums.OrderState.已取消, @@ -584,6 +588,7 @@ namespace BBWYB.Server.Business #endregion #region 采购方案累计信息 + #region 采购件数 /* select opi.SchemeId,sum(osku.ItemTotal) from orderpurchaserelationinfo opi @@ -604,6 +609,15 @@ namespace BBWYB.Server.Business SchemeId = g.Key, ItemTotal = g.Sum(g.Value.Item3.ItemTotal) }); + foreach (var psItemCount in psItemCountGroups) + { + updatePurchaseSchemeList.Add(new PurchaseScheme() + { + Id = psItemCount.SchemeId.Value, + PurchasedItemCount = Convert.ToInt32(psItemCount.ItemTotal), + PurchasedAmount = 0M + }); + } } #endregion @@ -626,14 +640,109 @@ namespace BBWYB.Server.Business SchemeId = g.Key, Amount = g.Sum(g.Value.Item3.SkuAmount) }); + foreach (var psAmount in psAmountGroups) + { + var ps = updatePurchaseSchemeList.FirstOrDefault(x => x.Id == psAmount.SchemeId); + if (ps == null) + { + ps = new PurchaseScheme() { Id = psAmount.SchemeId.Value, PurchasedItemCount = 0 }; + updatePurchaseSchemeList.Add(ps); + } + ps.PurchasedAmount = psAmount.Amount; + } } #endregion - #endregion #region 采购商累计信息 + { + #region 采购SKU数 + var purchaserPurchasedList = fsql.Select() + .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) + .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) + .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) + .GroupBy((opri, o, opi) => new { o.ShopId, opi.PurchaserId, opri.BelongSkuId }) + .ToList(g => new + { + g.Key.ShopId, + g.Key.PurchaserId, + g.Key.BelongSkuId + }); + + var purchaserPurchasedGroups = purchaserPurchasedList.GroupBy(x => x.PurchaserId); + foreach (var g in purchaserPurchasedGroups) + { + updatePurchaserList.Add(new Purchaser() + { + Id = g.Key, + PurchasedSkuCount = g.Count(), + PurchasedCount = 0 + }); + insertSkuHistoryPurchaserRelationList.AddRange(g.Select(x => new SkuHistoryPurchaserRelation() + { + CreateTime = DateTime.Now, + Id = idGenerator.NewLong(), + PurchaserId = x.PurchaserId, + ShopId = x.ShopId, + SkuId = x.BelongSkuId + })); + } + #endregion + + #region 采购次数 + /* + select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri + inner join `order` o on opri.OrderId=o.Id + inner join orderpurchaseinfo opi on opi.OrderId=opri.OrderId and opi.IsEnabled=1 + where o.OrderState not in (0,6) and o.ShopId !=11 and opi.PurchaserId is not null + group by opi.PurchaserId; + */ + var purchaserPurchasedCountList = fsql.Select() + .InnerJoin((opri, o, opi) => opri.OrderId == o.Id) + .InnerJoin((opri, o, opi) => opi.OrderId == opri.OrderId && opi.IsEnabled == true) + .Where((opri, o, opi) => !noOrderStateList.Contains(o.OrderState) && o.ShopId != 11 && !string.IsNullOrEmpty(opi.PurchaserId)) + .GroupBy((opri, o, opi) => opi.PurchaserId) + .ToList(g => new + { + PurchaserId = g.Key, + //Count = g.Count(g.Value.Item3.OrderId.Distinct()) + Count = SqlExt.DistinctCount(g.Value.Item3.OrderId) + }); + + foreach (var pcount in purchaserPurchasedCountList) + { + var p = updatePurchaserList.FirstOrDefault(x => x.Id == pcount.PurchaserId); + if (p == null) + { + p = new Purchaser() { Id = pcount.PurchaserId, PurchasedSkuCount = 0 }; + updatePurchaserList.Add(p); + } + p.PurchasedCount = Convert.ToInt32(pcount.Count); + } + //var purchaserPurchasedCountDataTable = fsql.Ado.ExecuteDataTable(@"select opi.PurchaserId,count(DISTINCT(opi.OrderId)) from orderpurchaserelationinfo opri + // inner join `order` o on opri.OrderId = o.Id + // inner join orderpurchaseinfo opi on opi.OrderId = opri.OrderId and opi.IsEnabled = 1 + // where o.OrderState not in (0, 6) and o.ShopId != 11 and opi.PurchaserId is not null + // group by opi.PurchaserId;"); + + //foreach (DataRow dataRow in purchaserPurchasedCountDataTable.Rows) + //{ + // var purchaserId = dataRow[0].ToString(); + // var count = dataRow[1].ToInt32() ?? 0; + + // var p = updatePurchaserList.FirstOrDefault(x => x.Id == purchaserId); + // if (p == null) + // { + // p = new Purchaser() { Id = purchaserId, PurchasedSkuCount = 0 }; + // updatePurchaserList.Add(p); + // } + // p.PurchasedCount = count; + + //} + #endregion + } #endregion fsql.Transaction(() => @@ -642,12 +751,26 @@ namespace BBWYB.Server.Business fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); fsql.Delete().Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务).ExecuteAffrows(); + fsql.Delete().Where(s => 1 == 1).ExecuteAffrows(); fsql.Update().Set(osku => osku.IsNeedOptimization, 0) .Set(osku => osku.IsOptimizationCompleted, 0) .Where(osku => osku.IsNeedOptimization == 1) .ExecuteAffrows(); + foreach (var updatePs in updatePurchaseSchemeList) + { + fsql.Update(updatePs.Id).Set(ps => ps.PurchasedItemCount, updatePs.PurchasedItemCount) + .Set(ps => ps.PurchasedAmount, updatePs.PurchasedAmount) + .ExecuteAffrows(); + } + foreach (var updatePurchaser in updatePurchaserList) + { + fsql.Update(updatePurchaser.Id).Set(p => p.PurchasedSkuCount, updatePurchaser.PurchasedSkuCount) + .Set(p => p.PurchasedCount, updatePurchaser.PurchasedCount) + .ExecuteAffrows(); + } fsql.Insert(insertSpuSaleInfoList).ExecuteAffrows(); fsql.Insert(insertSkuSaleInfoList).ExecuteAffrows(); + fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows(); }); } }