You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

777 lines
38 KiB

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 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 RestApiService restApiService;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
{
this.kuaiDi100Manager = kuaiDi100Manager;
this.purchaseSchemeBusiness = purchaseSchemeBusiness;
this.purchaseOrderBusiness = purchaseOrderBusiness;
this.freeSqlMultiDBManager = freeSqlMultiDBManager;
this.venderBusiness = venderBusiness;
this.opPlatformClientFactory = opPlatformClientFactory;
this.restApiService = restApiService;
}
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<OrderCostDetail, Order>().InnerJoin((ocd, o) => ocd.OrderId == o.Id)
.Where((ocd, o) => ocd.IsEnabled == true &&
o.IsPurchased == true &&
o.OrderState != Enums.OrderState. &&
!fsql.Select<OrderSkuCost>().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<OrderSku>().Where(osku => orderIds.Contains(osku.OrderId)).ToList();
var insertOrderSkuCostList = new List<OrderSkuCost>();
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<PurchaseSchemeProduct, Purchaser>()
.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<IUpdate<Purchaser>> updatePurchaserList = new List<IUpdate<Purchaser>>();
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<Purchaser>(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<PurchaseSchemeGroup>().Where(psg => 1 == 1).ExecuteAffrows();
fsql.Delete<PurchaseSchemeGroupIndex>().Where(psgi => 1 == 1).ExecuteAffrows();
fsql.Update<PurchaseScheme>().Set(ps => ps.SchemeGroupId == 0).Where(ps => 1 == 1).ExecuteAffrows();
});
List<PurchaseSchemeGroup> insertSchemeGroups = new List<PurchaseSchemeGroup>();
List<PurchaseSchemeGroupIndex> insertSchemeGroupIndexs = new List<PurchaseSchemeGroupIndex>();
Queue<IUpdate<PurchaseScheme>> updatePurchaseSchemeQueue = new Queue<IUpdate<PurchaseScheme>>();
var purchaseSchemeList = fsql.Select<PurchaseScheme>().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<PurchaseScheme> currentIndexSchemeList = new List<PurchaseScheme>();
//取每个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>(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<IUpdate<PurchaseScheme>>();
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<TimeLimitTask> insertComputationTaskList = new List<TimeLimitTask>();
var time = DateTime.Parse("2023-09-01");
var orderList = fsql.Select<Order>().Where(o => o.StartTime <= time && o.OrderState == Enums.OrderState.).ToList();
var orderIdsList = orderList.Select(o => o.Id).ToList();
var checmComputationTaskList = fsql.Select<TimeLimitTask>().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.
});
}
}
fsql.Transaction(() =>
{
if (insertComputationTaskList.Count() > 0)
fsql.Insert(insertComputationTaskList).ExecuteAffrows();
fsql.Update<Order>().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<Model.Db.BBWY.PurchaseOrderV2>().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<Order>(c_cancel_orderIdlist).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
});
}
}
public void BSyncToC()
{
var time = DateTime.Parse("2023-09-01");
var orderList = fsql.Select<Order>().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 = "https://bbwy.qiyue666.com";
var result = restApiService.SendRequest(url, "api/BatchPurchase/UpdatePurchaseOrderState", new
{
OrderId = order.Id,
PurchaseOrderState = order.OrderState
}, null, HttpMethod.Post);
Console.WriteLine($"{i}/{count},{order.Id},{result.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<HistoryPurchaseScheme> insertHistoryPSList = new List<HistoryPurchaseScheme>();
List<HistoryPurchaseSchemeProduct> insertHistoryPSPList = new List<HistoryPurchaseSchemeProduct>();
List<HistoryPurchaseSchemeProductSku> insertHistoryPSSList = new List<HistoryPurchaseSchemeProductSku>();
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<HistoryPurchaseSchemeProductSku>();
historyPss.HistoryId = idGenerator.NewLong();
historyPss.Version = newVersion;
insertHistoryPSSList.Add(historyPss);
#endregion
}
#region 处理历史版本
var historyPsp = psp.Map<HistoryPurchaseSchemeProduct>();
historyPsp.HistoryId = idGenerator.NewLong();
historyPsp.Version = newVersion;
insertHistoryPSPList.Add(historyPsp);
#endregion
}
#region 处理历史版本
var historyPs = ps.Map<HistoryPurchaseScheme>();
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<PurchaseScheme>(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.已取消, Enums.OrderState.已完成 };
//var orderList = fsql.Select<Order>().Where(o => o.StartTime < time && !orderStateList.Contains(o.OrderState)).ToList();
var orderList = fsql.Select<Order>().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<IUpdate<Order>> updateOrderQueue = new Queue<IUpdate<Order>>();
List<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>();
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>(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>(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>(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<SpuTotalSaleInfo> insertSpuSaleInfoList = new List<SpuTotalSaleInfo>();
List<SkuTotalSaleInfo> insertSkuSaleInfoList = new List<SkuTotalSaleInfo>();
List<PurchaseScheme> updatePurchaseSchemeList = new List<PurchaseScheme>();
List<Purchaser> updatePurchaserList = new List<Purchaser>();
List<SkuHistoryPurchaserRelation> insertSkuHistoryPurchaserRelationList = new List<SkuHistoryPurchaserRelation>();
var noOrderStateList = new List<Enums.OrderState?>()
{
Enums.OrderState.,
Enums.OrderState.
};
#region 补销量
{
var spuSaleGroups = fsql.Select<OrderSku, Order>()
.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<OrderSku, Order>()
.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<OrderPurchaseRelationInfo, Order, OrderSku>()
.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<OrderPurchaseRelationInfo, Order, OrderSkuCost>()
.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<OrderPurchaseRelationInfo, Order, OrderPurchaseInfo>()
.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<OrderPurchaseRelationInfo, Order, OrderPurchaseInfo>()
.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<SpuTotalSaleInfo>().Where(s => 1 == 1).ExecuteAffrows();
fsql.Delete<SkuTotalSaleInfo>().Where(s => 1 == 1).ExecuteAffrows();
fsql.Delete<SkuOptimizationHistory>().Where(s => 1 == 1).ExecuteAffrows();
fsql.Delete<TimeLimitTask>().Where(t => t.TaskType == Enums.TimeLimitTaskType.).ExecuteAffrows();
fsql.Delete<SkuHistoryPurchaserRelation>().Where(s => 1 == 1).ExecuteAffrows();
fsql.Update<OrderSku>().Set(osku => osku.IsNeedOptimization, 0)
.Set(osku => osku.IsOptimizationCompleted, 0)
.Where(osku => osku.IsNeedOptimization == 1)
.ExecuteAffrows();
foreach (var updatePs in updatePurchaseSchemeList)
{
fsql.Update<PurchaseScheme>(updatePs.Id).Set(ps => ps.PurchasedItemCount, updatePs.PurchasedItemCount)
.Set(ps => ps.PurchasedAmount, updatePs.PurchasedAmount)
.ExecuteAffrows();
}
foreach (var updatePurchaser in updatePurchaserList)
{
fsql.Update<Purchaser>(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();
});
}
}
}