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.

184 lines
7.2 KiB

2 years ago
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Dto;
using Microsoft.Extensions.DependencyInjection;
2 years ago
using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class ProductBusiness : BaseBusiness, IDenpendency
{
private OP_PlatformClientFactory opPlatformClientFactory;
private Lazy<PurchaseSchemeBusiness> purchaseSchemeBusinessLazy;
private PurchaseSchemeBusiness purchaseSchemeBusiness => purchaseSchemeBusinessLazy.Value;
2 years ago
public ProductBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator)
2 years ago
{
this.opPlatformClientFactory = opPlatformClientFactory;
this.purchaseSchemeBusinessLazy = new Lazy<PurchaseSchemeBusiness>(() => serviceProvider.GetService<PurchaseSchemeBusiness>());
2 years ago
}
2 years ago
public OP_ProductListResponse GetProductList(OP_QueryProductRequest request)
2 years ago
{
return opPlatformClientFactory.GetClient(request.Platform).GetProductList(request);
}
2 years ago
public OP_ProductSkuListResponse GetProductSkuList(OP_QueryProductSkuRequest request)
2 years ago
{
return opPlatformClientFactory.GetClient(request.Platform).GetProductSkuList(request);
}
public BProductListResponse GetProductAndSkuList(QueryBProductRequest request)
{
if (string.IsNullOrEmpty(request.Spu) && !string.IsNullOrEmpty(request.Sku))
{
var skuResponse = GetProductSkuList(new OP_QueryProductSkuRequest()
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = request.Platform,
Sku = request.Sku,
Spu = request.Spu
});
if (skuResponse.Count > 0)
{
request.Spu = skuResponse.Items.FirstOrDefault().ProductId;
request.PageIndex = 1;
request.PageSize = 50;
}
}
var list = new List<BProductResponse>();
var spuResponse = GetProductList(new OP_QueryProductRequest()
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = request.PageIndex,
PageSize = request.PageSize,
Platform = request.Platform,
Spu = request.Spu
});
var skuIdList = new List<string>();
if (spuResponse.Items.Count() > 0)
{
foreach (var op_product in spuResponse.Items)
{
var bproduct = new BProductResponse()
{
Id = op_product.Id,
BrandName = op_product.BrandName,
CreateTime = op_product.CreateTime,
Logo = op_product.Logo,
ProductItemNum = op_product.ProductItemNum,
State = op_product.State,
Title = op_product.Title
};
list.Add(bproduct);
var skuResponse = GetProductSkuList(new OP_QueryProductSkuRequest
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = request.Platform,
Spu = op_product.Id
});
if (skuResponse.Count > 0)
{
bproduct.SkuList = skuResponse.Items.Select(x => new BProductSkuResponse()
{
CreateTime = x.CreateTime,
Id = x.Id,
Logo = x.Logo,
Price = x.Price,
ProductId = x.ProductId,
State = x.State,
Title = x.Title
}).ToList();
skuIdList.AddRange(skuResponse.Items.Select(s => s.Id));
}
}
}
var schemeCountRes = purchaseSchemeBusiness.GetPurchaseSchemeCountList(new QuerySchemeCountRequest()
{
SkuIdList = skuIdList
});
foreach (var bproduct in list)
{
foreach (var bsku in bproduct.SkuList)
bsku.SchemeCount = schemeCountRes.FirstOrDefault(ps => ps.SkuId == bsku.Id)?.SchemeCount ?? 0;
}
return new BProductListResponse()
{
Count = spuResponse.Count,
Items = list
};
}
public decimal? GetProductSkuPrice(QueryProductSkuPriceRequest request)
{
var response = GetProductSkuList(new OP_QueryProductSkuRequest()
{
AppSecret = request.AppSecret,
AppKey = request.AppKey,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 1,
Platform = (SDKAdapter.AdapterEnums.PlatformType)request.Platform,
Sku = request.Sku
});
return response.Items?.FirstOrDefault()?.Price;
}
public void EditProductPrice(OP_EditProductPriceRequest request)
{
var skuRequest = new OP_QueryProductSkuRequest()
{
AppKey = request.AppKey,
AppSecret = request.AppSecret,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = request.Platform,
Spu = request.Spu
};
var editSkuList = new List<OP_EditProductSkuPriceRequest>();
while (true)
{
var response = GetProductSkuList(skuRequest);
if (response.Items.Count > 0)
{
editSkuList.AddRange(response.Items.Select(sku => new OP_EditProductSkuPriceRequest()
{
Sku = sku.Id,
Price = sku.Price,
}));
}
if (response.Items.Count < 50)
break;
skuRequest.PageIndex++;
}
foreach (var editReq in request.EditSkuList)
{
var editSku = editSkuList.FirstOrDefault(x => x.Sku == editReq.Sku);
if (editSku != null)
editSku.Price = editReq.Price;
}
request.EditSkuList.Clear();
request.EditSkuList.AddRange(editSkuList);
opPlatformClientFactory.GetClient(request.Platform).EditProductPrice(request);
}
2 years ago
}
}