using BBWYB.Common.Extensions; using BBWYB.Common.Http; using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; using System.Data; using System.Net.Http.Headers; using Yitter.IdGenerator; namespace BBWYB.Server.Business { public class DataRepairBusiness : BaseBusiness, IDenpendency { private KuaiDi100Manager kuaiDi100Manager; private PurchaseSchemeBusiness purchaseSchemeBusiness; private PurchaseOrderBusiness purchaseOrderBusiness; private FreeSqlMultiDBManager freeSqlMultiDBManager; private VenderBusiness venderBusiness; private OP_PlatformClientFactory opPlatformClientFactory; private PP_PlatformClientFactory pp_PlatformClientFactory; private RestApiService restApiService; private TimeLimitRules timeLimitRules; public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, PP_PlatformClientFactory pp_PlatformClientFactory, RestApiService restApiService, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) { this.kuaiDi100Manager = kuaiDi100Manager; this.purchaseSchemeBusiness = purchaseSchemeBusiness; this.purchaseOrderBusiness = purchaseOrderBusiness; this.freeSqlMultiDBManager = freeSqlMultiDBManager; this.venderBusiness = venderBusiness; this.opPlatformClientFactory = opPlatformClientFactory; this.pp_PlatformClientFactory = pp_PlatformClientFactory; this.restApiService = restApiService; this.timeLimitRules = timeLimitRules; } public void SubscribeKD100(string waybillNo, string targetCompanyCode) { kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); } public void SupplementOrderSkuCost() { var orderSkuCostList = fsql.Select().InnerJoin((ocd, o) => ocd.OrderId == o.Id) .Where((ocd, o) => ocd.IsEnabled == true && o.IsPurchased == true && o.OrderState != Enums.OrderState.已取消 && !fsql.Select().As("osc").Where(osc => osc.OrderId == o.Id).Any()) .GroupBy((ocd, o) => new { ocd.OrderId, ocd.SkuId }) .ToList(g => new { OrderId = g.Key.OrderId, SkuId = g.Key.SkuId, SkuAmount = g.Sum(g.Value.Item1.SkuAmount), PurchaseFreight = g.Sum(g.Value.Item1.PurchaseFreight) }); var orderIds = orderSkuCostList.Select(x => x.OrderId).Distinct().ToList(); var orderSkuList = fsql.Select().Where(osku => orderIds.Contains(osku.OrderId)).ToList(); var insertOrderSkuCostList = new List(); foreach (var osc in orderSkuCostList) { var osku = orderSkuList.FirstOrDefault(osku => osku.SkuId == osc.SkuId && osku.OrderId == osc.OrderId); var insert = new OrderSkuCost() { Id = idGenerator.NewLong(), CreateTime = DateTime.Now, DeliveryExpressFreight = 0M, OrderId = osc.OrderId, SkuId = osc.SkuId, OutPackAmount = 0M, PurchaseFreight = osc.PurchaseFreight, SkuAmount = osc.SkuAmount, TotalCost = osc.PurchaseFreight + osc.SkuAmount, Profit = ((osku.Price * osku.ItemTotal) ?? 0M) + osku.BuyerPayFreight - osc.PurchaseFreight - osc.SkuAmount }; insertOrderSkuCostList.Add(insert); } fsql.Transaction(() => { fsql.Insert(insertOrderSkuCostList).ExecuteAffrows(); }); } public void SupplementPurchaserInfo() { var purlList = fsql.Select() .InnerJoin((psp, p) => psp.PurchaserId == p.Id) .Where((psp, p) => p.Platform == Enums.Platform.阿里巴巴 && string.IsNullOrEmpty(p.MemberId)) .ToList((psp, p) => new { //psp.PurchaseUrl, psp.PurchaseProductId, p.Id }); var groups = purlList.GroupBy(p => p.Id); Console.WriteLine(groups.Count()); IList> updatePurchaserList = new List>(); int i = 1; foreach (var group in groups) { var purchaseId = group.Key; var productId = group.Max(p => p.PurchaseProductId); Thread.Sleep(1000); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"index {i}"); Console.ResetColor(); Console.WriteLine(); var response = purchaseSchemeBusiness.GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() { FirstApiMode = Enums.PurchaseProductAPIMode.Spider, Platform = Enums.Platform.阿里巴巴, PriceMode = Enums.PurchaseOrderMode.批发, PurchaseProductId = productId }); if (!string.IsNullOrEmpty(response?.Purchaser?.MemberId)) { if (response.Purchaser.MemberId.Length > 5) Console.WriteLine(response.Purchaser.MemberId); var update = fsql.Update(purchaseId).Set(p => p.MemberId, response.Purchaser.MemberId); updatePurchaserList.Add(update); } i++; if (updatePurchaserList.Count >= 10) { fsql.Transaction(() => { foreach (var update in updatePurchaserList) update.ExecuteAffrows(); }); updatePurchaserList.Clear(); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("更新数据库更新"); Console.ResetColor(); Console.WriteLine(); } } if (updatePurchaserList.Count() > 0) { fsql.Transaction(() => { foreach (var update in updatePurchaserList) update.ExecuteAffrows(); }); } } public void SupplementPurchaseSchemeGroup() { fsql.Transaction(() => { fsql.Delete().Where(psg => 1 == 1).ExecuteAffrows(); fsql.Delete().Where(psgi => 1 == 1).ExecuteAffrows(); fsql.Update().Set(ps => ps.SchemeGroupId == 0).Where(ps => 1 == 1).ExecuteAffrows(); }); List insertSchemeGroups = new List(); List insertSchemeGroupIndexs = new List(); Queue> updatePurchaseSchemeQueue = new Queue>(); var purchaseSchemeList = fsql.Select().OrderBy(ps => ps.Id).ToList(); var purchaseSchemeSpuGroups = purchaseSchemeList.GroupBy(ps => ps.ProductId); foreach (var purchaseSchemeSpuGroup in purchaseSchemeSpuGroups) { Console.WriteLine($"正在处理spu {purchaseSchemeSpuGroup.Key}"); var purchaseSchemeSkuGroups = purchaseSchemeSpuGroup.GroupBy(ps => ps.SkuId); var maxPsGroupCount = purchaseSchemeSkuGroups.Max(g => g.Count()); //该spu最大的采购分组数 var groupIndex = new PurchaseSchemeGroupIndex() { CreateTime = DateTime.Now, Index = maxPsGroupCount, ShopId = purchaseSchemeSpuGroup.First().ShopId, ProductId = purchaseSchemeSpuGroup.First().ProductId }; insertSchemeGroupIndexs.Add(groupIndex); for (var i = 0; i < maxPsGroupCount; i++) { Console.WriteLine($"正在处理第{i + 1}组"); IList currentIndexSchemeList = new List(); //取每个sku的第i个方案 foreach (var purchaseSchemeSkuGroup in purchaseSchemeSkuGroups) { var currentSkuPurchaseSchemeList = purchaseSchemeSkuGroup.ToList(); if (currentSkuPurchaseSchemeList.Count() >= (i + 1)) { var scheme = currentSkuPurchaseSchemeList[i]; currentIndexSchemeList.Add(scheme); } } var schemeGroupId = idGenerator.NewLong(); var insertSchemeGroup = new PurchaseSchemeGroup() { Id = schemeGroupId, //GroupName = schemeGroupId.Value.ToString(), GroupName = $"{purchaseSchemeSpuGroup.Key}-{i + 1}", CreateTime = DateTime.Now, ProductId = currentIndexSchemeList.First().ProductId, ShopId = currentIndexSchemeList.First().ShopId }; insertSchemeGroups.Add(insertSchemeGroup); foreach (var purchaseScheme in currentIndexSchemeList) { if (purchaseScheme.SchemeGroupId != schemeGroupId) { var update = fsql.Update(purchaseScheme.Id).Set(ps => ps.SchemeGroupId, schemeGroupId); updatePurchaseSchemeQueue.Enqueue(update); } } } } Console.WriteLine("数据库处理中"); fsql.Transaction(() => { if (insertSchemeGroups.Count() > 0) fsql.Insert(insertSchemeGroups).ExecuteAffrows(); if (insertSchemeGroupIndexs.Count() > 0) fsql.Insert(insertSchemeGroupIndexs).ExecuteAffrows(); }); var updatePurchaseSchemeList = new List>(); while (true) { if (updatePurchaseSchemeQueue.TryDequeue(out var update)) updatePurchaseSchemeList.Add(update); else break; if (updatePurchaseSchemeList.Count() == 10) { Console.WriteLine($"执行数据库 {DateTime.Now}"); fsql.Transaction(() => { foreach (var _update in updatePurchaseSchemeList) _update.ExecuteAffrows(); }); updatePurchaseSchemeList.Clear(); } } if (updatePurchaseSchemeList.Count() > 0) { Console.WriteLine($"最后执行数据库 {DateTime.Now}"); fsql.Transaction(() => { foreach (var _update in updatePurchaseSchemeList) _update.ExecuteAffrows(); }); } } public void RepairOrderStateToCheckComputation() { List insertComputationTaskList = new List(); var time = DateTime.Parse("2023-09-01"); var orderList = fsql.Select().Where(o => o.StartTime <= time && o.OrderState == Enums.OrderState.待验收).ToList(); var orderIdsList = orderList.Select(o => o.Id).ToList(); var checmComputationTaskList = fsql.Select().Where(t => t.TaskType == Enums.TimeLimitTaskType.待核算任务 && orderIdsList.Contains(t.OrderId)).ToList(); foreach (var order in orderList) { if (!checmComputationTaskList.Any(x => x.OrderId == order.Id)) { insertComputationTaskList.Add(new TimeLimitTask() { Id = idGenerator.NewLong(), OrderId = order.Id, CreateTme = DateTime.Now, //ExpirationTime = DateTime.Now.AddDays(1), OrderSn = order.OrderSn, Remark = "手工处理待核算", ShopId = order.ShopId, TaskType = Enums.TimeLimitTaskType.待核算任务, ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待核算任务, DateTime.Now) }); } } fsql.Transaction(() => { if (insertComputationTaskList.Count() > 0) fsql.Insert(insertComputationTaskList).ExecuteAffrows(); fsql.Update().Set(o => o.OrderState, Enums.OrderState.待核算) .Where(o => o.StartTime <= time && o.OrderState == Enums.OrderState.待验收) .ExecuteAffrows(); }); } public void SyncCCancelOrder() { var c_cancel_orderlist = freeSqlMultiDBManager.BBWYCfsql.Select().Where(p => p.OrderState == Enums.OrderState.已取消).ToList(); var c_cancel_orderIdlist = c_cancel_orderlist.Select(p => p.Id).ToList(); if (c_cancel_orderIdlist.Count() > 0) { fsql.Transaction(() => { fsql.Update(c_cancel_orderIdlist).Set(o => o.OrderState, Enums.OrderState.已取消).ExecuteAffrows(); }); } } public void BSyncToC() { var time = DateTime.Parse("2023-10-29"); var orderList = fsql.Select().Where(o => o.StartTime > time).OrderByDescending(o => o.Id).ToList(o => new { o.Id, o.OrderState }); var count = orderList.Count(); var i = 1; foreach (var order in orderList) { Thread.Sleep(500); try { var url = "http://bbwytest.qiyue666.com"; var result_orderState = restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new { OrderId = order.Id, PurchaseOrderState = order.OrderState }, null, HttpMethod.Post); var result_editPrice = restApiService.SendRequest(url, "/Api/PurchaseOrder/QuanTanEditPriceCallback", new { orderId = order.Id }, null, HttpMethod.Post); Console.WriteLine($"{i}/{count},{order.Id},{result_orderState.StatusCode},{result_editPrice.StatusCode}"); } catch (Exception ex) { } finally { i++; } } } public void SyncHistoryPurchaseScheme() { var qtShops = venderBusiness.GetShopList(platform: Enums.Platform.拳探); foreach (var shop in qtShops) { var psList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() { ShopId = long.Parse(shop.ShopId) }); List insertHistoryPSList = new List(); List insertHistoryPSPList = new List(); List insertHistoryPSSList = new List(); foreach (var ps in psList) { //var newVersion = ps.Version + 1; var newVersion = ps.Version; foreach (var psp in ps.PurchaseSchemeProductList) { foreach (var pss in psp.PurchaseSchemeProductSkuList) { #region 处理历史版本 var historyPss = pss.Map(); historyPss.HistoryId = idGenerator.NewLong(); historyPss.Version = newVersion; insertHistoryPSSList.Add(historyPss); #endregion } #region 处理历史版本 var historyPsp = psp.Map(); historyPsp.HistoryId = idGenerator.NewLong(); historyPsp.Version = newVersion; insertHistoryPSPList.Add(historyPsp); #endregion } #region 处理历史版本 var historyPs = ps.Map(); historyPs.HistoryId = idGenerator.NewLong(); historyPs.Version = newVersion; insertHistoryPSList.Add(historyPs); //updatePurchaseSchemeIdList.Add(ps.Id); #endregion } fsql.Transaction(() => { if (insertHistoryPSList.Count() > 0) fsql.Insert(insertHistoryPSList).ExecuteAffrows(); if (insertHistoryPSPList.Count() > 0) fsql.Insert(insertHistoryPSPList).ExecuteAffrows(); if (insertHistoryPSSList.Count() > 0) fsql.Insert(insertHistoryPSSList).ExecuteAffrows(); //if (updatePurchaseSchemeIdList.Count() > 0) // fsql.Update(updatePurchaseSchemeIdList).Set(ps => ps.Version + 1).ExecuteAffrows(); }); } } public void BatchCompleteOrder() { var time = DateTime.Parse("2023-09-01"); //var orderStateList = new List() { Enums.OrderState.待付款, Enums.OrderState.已取消, Enums.OrderState.已完成 }; //var orderList = fsql.Select().Where(o => o.StartTime < time && !orderStateList.Contains(o.OrderState)).ToList(); var orderList = fsql.Select().Where(o => o.StartTime < time && o.OrderState == Enums.OrderState.待付款).ToList(); var shops = venderBusiness.GetShopList(platform: Enums.Platform.拳探); var count = orderList.Count(); var i = 1; Queue> updateOrderQueue = new Queue>(); List> updateOrderList = new List>(); foreach (var order in orderList) { Console.WriteLine($"{i}/{count},{order.Id}"); try { var shop = shops.FirstOrDefault(s => s.ShopId == order.ShopId.ToString()); if (shop == null) { i++; continue; } var qtOrderList = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.拳探).GetOrderList(new OP_QueryOrderRequest() { AppKey = shop.AppKey, AppSecret = shop.AppSecret, AppToken = shop.AppToken, OrderId = order.Id, PageIndex = 1, PageSize = 100, Platform = AdapterEnums.PlatformType.拳探, SortTimeField = AdapterEnums.SortTimeField.Modify, SortType = AdapterEnums.SortType.Desc, StartDate = null, EndDate = null }); if (qtOrderList.Count == 0) { var update = fsql.Update(order.Id).Set(o => o.OrderState, Enums.OrderState.已取消); updateOrderQueue.Enqueue(update); i++; continue; } var qtOrder = qtOrderList.Items[0]; if (qtOrder.OrderState != "-1" && qtOrder.IsPay) { var update = fsql.Update(order.Id).Set(o => o.OrderState, Enums.OrderState.已完成); updateOrderQueue.Enqueue(update); } if ((qtOrder.OrderState == "-1" || !qtOrder.IsPay) && order.OrderState != Enums.OrderState.已取消) { var update = fsql.Update(order.Id).Set(o => o.OrderState, Enums.OrderState.已取消); updateOrderQueue.Enqueue(update); } } catch { } finally { i++; } } if (updateOrderQueue.Count() > 0) { while (true) { if (updateOrderQueue.TryDequeue(out var update)) updateOrderList.Add(update); else break; if (updateOrderList.Count() == 10) { Console.Write($"执行数据库 {DateTime.Now}"); fsql.Transaction(() => { foreach (var u in updateOrderList) { u.ExecuteAffrows(); } }); updateOrderList.Clear(); } } if (updateOrderList.Count() > 0) { Console.Write($"最后执行数据库 {DateTime.Now}"); fsql.Transaction(() => { foreach (var u in updateOrderList) { u.ExecuteAffrows(); } }); updateOrderList.Clear(); } } } public void RepairHistoryItemCount() { 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.已取消, Enums.OrderState.待付款 }; #region 补销量 { 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) { 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) }); foreach (var psItemCount in psItemCountGroups) { updatePurchaseSchemeList.Add(new PurchaseScheme() { Id = psItemCount.SchemeId.Value, PurchasedItemCount = Convert.ToInt32(psItemCount.ItemTotal), PurchasedAmount = 0M }); } } #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) }); 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(() => { 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.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(); }); } public void RepairPurchaseSkuLastPurchasePriceCost() { //IDictionary> updatePssDictionary = new Dictionary>(); List updatePssKeyList = new List(); var oriList = fsql.Select() .InnerJoin((ori, ps, psp, pr) => ori.SchemeId == ps.Id) .InnerJoin((ori, ps, psp, pr) => ps.Id == psp.SkuPurchaseSchemeId) .InnerJoin((ori, ps, psp, pr) => pr.Id == psp.PurchaserId) .Where((ori, ps, psp, pr) => pr.Platform == Enums.Platform.阿里巴巴 && fsql.Select().Where(pss => pss.PurchaseSkuId == ori.PurchaseSkuId && pss.LastPurchasePriceCost == null).Any()) .OrderByDescending((ori, ps, psp, pr) => ori.CreateTime) .ToList((ori, ps, psp, pr) => new { ori.OrderId, ori.PurchaseOrderId, ori.PurchaseSkuId, ori.SchemeId, ps.ShopId }); var purchaseAccountList = freeSqlMultiDBManager.MDSfsql.Select() .InnerJoin((pa, s) => pa.ShopId == s.Id) .Where((pa, s) => s.PlatformId == 10 && pa.PurchasePlatformId == "2") .ToList((pa, s) => new { s.ShopId, pa.AppKey, pa.AppSecret, pa.AppToken }); var client = pp_PlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); var puchaseOrderGroups = oriList.GroupBy(ori => ori.PurchaseOrderId); var count = puchaseOrderGroups.Count(); var poIndex = 0; foreach (var poGroup in puchaseOrderGroups) { var poId = poGroup.Key; poIndex++; Console.WriteLine($"查询采购单 {poId}, {poIndex}/{puchaseOrderGroups.Count()}"); try { var shopId = poGroup.FirstOrDefault().ShopId.ToString(); var purchaseAccount = purchaseAccountList.FirstOrDefault(s => s.ShopId == shopId); Thread.Sleep(1500); var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() { AppKey = purchaseAccount.AppKey, AppSecret = purchaseAccount.AppSecret, AppToken = purchaseAccount.AppToken, OrderId = poId }); foreach (var ori in poGroup) { var key = $"{ori.PurchaseSkuId}_{ori.SchemeId}"; if (updatePssKeyList.Contains(key)) continue; var purchaseSku = purchaseOrderSimpleInfo.ItemList.FirstOrDefault(x => x.SkuId == ori.PurchaseSkuId); if (purchaseSku != null) { Console.WriteLine($"更新 {key}"); var update = fsql.Update().Set(pss => pss.LastPurchasePriceCost, purchaseSku.Price) .Where(pss => pss.PurchaseSkuId == ori.PurchaseSkuId && pss.SkuPurchaseSchemeId == ori.SchemeId); update.ExecuteAffrows(); updatePssKeyList.Add(key); } } } catch (Exception ex) { Console.WriteLine($"{poId},{ex.Message}"); } } } public void RepairPurchaseSchemeLastPurchasePrice() { /* select opi.SchemeId,opi.PurchaseOrderId from orderpurchaserelationinfo opi inner join (select max(opi1.OrderId) as maxOrderId,opi1.SchemeId from orderpurchaserelationinfo opi1 group by opi1.SchemeId) as temp on opi.OrderId=temp.maxOrderId and opi.SchemeId=temp.SchemeId group by opi.SchemeId,opi.PurchaseOrderId */ var opiList = fsql.Select().ToList(); var pssList = fsql.Select().ToList(); var poList = fsql.Select().ToList(); var purchaseAccountList = freeSqlMultiDBManager.MDSfsql.Select() .InnerJoin((pa, s) => pa.ShopId == s.Id) .Where((pa, s) => s.PlatformId == 10 && pa.PurchasePlatformId == "2") .ToList((pa, s) => new { s.ShopId, pa.AppKey, pa.AppSecret, pa.AppToken }); var schemeGroups = fsql.Select() .GroupBy(opi1 => opi1.SchemeId) .WithTempQuery(g => new { MaxOrderId = g.Max(g.Value.OrderId), SchemeId = g.Value.SchemeId }) .From() .InnerJoin((opi1, opi2) => opi1.MaxOrderId == opi2.OrderId && opi1.SchemeId == opi2.SchemeId) .GroupBy((opi1, opi2) => new { opi2.SchemeId, opi2.PurchaseOrderId }) .ToList(g => new { g.Value.Item2.SchemeId, g.Value.Item2.PurchaseOrderId }).GroupBy(x => x.SchemeId); var client = pp_PlatformClientFactory.GetClient(AdapterEnums.PlatformType.阿里巴巴); IDictionary> purchaseOrderDictionary = new Dictionary>(); var index = 1; foreach (var schemeGroup in schemeGroups) { var schemeId = schemeGroup.Key; var lastPurchasePriceCost = 0M; foreach (var schemeItem in schemeGroup) { Thread.Sleep(1500); try { var poId = schemeItem.PurchaseOrderId; var currentOpiList = opiList.Where(x => x.SchemeId == schemeId && x.PurchaseOrderId == poId).ToList(); if (!purchaseOrderDictionary.TryGetValue(poId, out var _1688itemList)) { var po = poList.FirstOrDefault(x => x.PurchaseOrderId == poId); if (po == null) continue; var shopId = po.ShopId.ToString(); var pa = purchaseAccountList.FirstOrDefault(x => x.ShopId == shopId); var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() { AppKey = pa.AppKey, AppSecret = pa.AppSecret, AppToken = pa.AppToken, OrderId = poId }); _1688itemList = purchaseOrderSimpleInfo.ItemList; purchaseOrderDictionary.TryAdd(poId, _1688itemList); } foreach (var ppsku in _1688itemList) { if (currentOpiList.Any(x => x.PurchaseSkuId == ppsku.SkuId)) { var pss = pssList.FirstOrDefault(x => x.SkuPurchaseSchemeId == schemeId && x.PurchaseSkuId == ppsku.SkuId); if (pss != null) { lastPurchasePriceCost += ppsku.Price * (pss.PurchaseRatio ?? 1); } } } } catch (Exception ex) { Console.WriteLine($"{schemeItem.PurchaseOrderId},{ex.Message}"); } } fsql.Update(schemeId).Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost).ExecuteAffrows(); Console.WriteLine($"更新进度 {index}/{schemeGroups.Count()}"); index++; } Console.WriteLine(schemeGroups.Count()); } public void SyncProductCategory() { List insertList = new List(); List deletePurchaserExtendedIdList = new List(); var dbCategoryList = fsql.Select() .Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目) .ToList(); var client = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.拳探); var request = new OP_QueryProductCategoryRequest() { PageIndex = 1, PageSize = 50, AppKey = "BBWYB2023022501", AppSecret = "3a1521deccc6819d61788a0d6baae49e9", AppToken = "9" }; var qtCategoryList = new List(); var response = client.GetProductCategoryList(request); if (response.Items != null) qtCategoryList.AddRange(response.Items); //找出新增的类目 var newCategoryList = qtCategoryList.Where(c => !dbCategoryList.Any(dc => dc.Id == long.Parse(c.CategoryId))).ToList(); if (newCategoryList.Count() > 0) { insertList.AddRange(newCategoryList.Select(c => new PurchaserExtendedInfo() { Id = long.Parse(c.CategoryId), Name = c.CategoryName, CreateTime = DateTime.Now, Type = Enums.PurchaserBasicInfoType.主营类目 }).ToList()); } fsql.Insert(insertList).ExecuteAffrows(); //找出接口丢失的类目 } } }