using BBWY.Common.Http; using BBWY.Common.Models; using BBWY.Server.Model; using BBWY.Server.Model.Db; using BBWY.Server.Model.Db.Mds; using FreeSql; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.IO; namespace BBWY.Server.Business { public class TestBusiness : BasePlatformRelayBusiness, IDenpendency { private FreeSqlMultiDBManager freeSqlMultiDBManager; private VenderBusiness venderBusiness; private IFreeSql fsql; public TestBusiness(RestApiService restApiService, IOptions options, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, YunDingBusiness yunDingBusiness, IFreeSql fsql) : base(restApiService, options, yunDingBusiness) { this.freeSqlMultiDBManager = freeSqlMultiDBManager; this.venderBusiness = venderBusiness; this.fsql = fsql; } public void SyncVenderId() { var noVenderShops = freeSqlMultiDBManager.MDSfsql.Select().Where(s => !string.IsNullOrEmpty(s.AppToken) && !string.IsNullOrEmpty(s.ShopId) && string.IsNullOrEmpty(s.VenderId)).ToList(); //IList < IUpdate < Shops >> updateShops = new List>(); foreach (var noVenderShop in noVenderShops) { if (string.IsNullOrEmpty(noVenderShop.AppKey)) { } var venderResponse = venderBusiness.GetVenderInfo(new Model.Dto.PlatformRequest() { AppKey = noVenderShop.AppKey, AppSecret = noVenderShop.AppSecret, AppToken = noVenderShop.AppToken, Platform = (Enums.Platform)noVenderShop.PlatformId }); freeSqlMultiDBManager.MDSfsql.Update(noVenderShop.Id).Set(s => s.VenderId, venderResponse.VenderId).ExecuteAffrows(); } } public void StatisticsProduct() { var shopList = venderBusiness.GetShopList(platform: Enums.Platform.京东); var list = new List(); foreach (var shop in shopList) { long shopId = long.Parse(shop.ShopId); var productCount = fsql.Select().Where(p => p.ShopId == shopId) .Where(p => p.State == 8) .Count(); var productSkuCount = fsql.Select().Where(p => p.ShopId == shopId) .Where(p => p.State == 1) .Count(); var jpspu_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.ProductId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.ProductId,o.ShopId order by maxTime desc,osku1.ProductId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join product p on t.ProductId = p.Id where o.StorageType=0 and p.state=8 group by t.ShopId"; //京配spu数 var jpspu = fsql.Ado.QuerySingle(jpspu_sql); var jpsku_sql = $"select count(1) as Count,t.ShopId from (select max(osku1.Id) as oskuId,max(osku1.CreateTime) as maxTime,osku1.SkuId,o.ShopId from OrderSku osku1 inner join `Order` o on osku1.OrderId=o.Id where o.OrderState !=6 and o.IsGift=0 and o.StartTime>='2022-05-01' and o.ShopId='{shopId}' Group By osku1.SkuId,o.ShopId order by maxTime desc,osku1.SkuId desc,o.ShopId desc) as t inner join orderSku osku on t.oskuId=osku.Id inner join `order` o on osku.OrderId=o.Id inner join productsku psku on t.SkuId = psku.Id where o.StorageType=0 and psku.State=1 group by t.ShopId"; var jpsku = fsql.Ado.QuerySingle(jpsku_sql); //list.Add($"{shop.ShopName},{productCount},{productSkuCount},{productSkuCount}/{productCount},{jpspu?.Count ?? 0},{jpsku?.Count ?? 0},{(productCount == 0 ? 0 : Math.Round(1.0 * jpspu?.Count ?? 0 / productCount * 100, 2))}%,{(productSkuCount == 0 ? 0 : Math.Round(1.0 * jpsku?.Count ?? 0 / productSkuCount * 100, 2))}%"); var jpspuCount = jpspu?.Count ?? 0; var jpskuCount = jpsku?.Count ?? 0; var jpspuPercent = productCount == 0 ? 0 : Math.Round(1.0 * jpspuCount / productCount * 100, 2); var jpskuPercent = productSkuCount == 0 ? 0 : Math.Round(1.0 * jpskuCount / productSkuCount * 100, 2); list.Add($"{shop.ShopName},{productCount},{productSkuCount},{productSkuCount}/{productCount},{jpspuCount},{jpskuCount},{jpspuPercent}%,{jpskuPercent}%"); } list.Insert(0, "店铺,SPU数,SKU数,SKU/SPU,京配SPU数,京配SKU数,京配SPU占比,京配SKU占比"); var filePath = Path.Combine(AppContext.BaseDirectory, "result.csv"); File.WriteAllLines(filePath, list, System.Text.Encoding.UTF8); } } public class JPCount { public int Count { get; set; } public long ShopId { get; set; } } }