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.

140 lines
6.9 KiB

2 years ago
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
2 years ago
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
2 years ago
using FreeSql;
using System.Net.Http.Headers;
2 years ago
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class DataRepairBusiness : BaseBusiness, IDenpendency
{
private KuaiDi100Manager kuaiDi100Manager;
private PurchaseSchemeBusiness purchaseSchemeBusiness;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness) : base(fsql, nLogManager, idGenerator)
2 years ago
{
this.kuaiDi100Manager = kuaiDi100Manager;
this.purchaseSchemeBusiness = purchaseSchemeBusiness;
2 years ago
}
2 years ago
public void SubscribeKD100(string waybillNo, string targetCompanyCode)
{
kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
}
public void SupplementPurchaserInfo()
{
var purlList = fsql.Select<PurchaseSchemeProduct, PurchaseScheme, Purchaser>()
.InnerJoin((psp, ps, p) => psp.SkuPurchaseSchemeId == ps.Id)
.InnerJoin((psp, ps, p) => ps.PurchaserId == p.Id)
.Where((psp, ps, p) => ps.PurchasePlatform == Enums.Platform. && string.IsNullOrEmpty(p.Id2))
.ToList((psp, ps, 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?.Id2))
{
if (response.Purchaser.Id2.Length > 20)
Console.WriteLine(response.Purchaser.Id2);
var update = fsql.Update<Purchaser>(purchaseId).Set(p => p.Id2, response.Purchaser.Id2);
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 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) - osc.PurchaseFreight - osc.SkuAmount
};
insertOrderSkuCostList.Add(insert);
}
fsql.Transaction(() =>
{
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
});
}
2 years ago
}
}