|
|
|
using BBWYB.Common.Log;
|
|
|
|
using BBWYB.Common.Models;
|
|
|
|
using BBWYB.Server.Model;
|
|
|
|
using BBWYB.Server.Model.Dto;
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
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;
|
|
|
|
|
|
|
|
public ProductBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator)
|
|
|
|
{
|
|
|
|
this.opPlatformClientFactory = opPlatformClientFactory;
|
|
|
|
this.purchaseSchemeBusinessLazy = new Lazy<PurchaseSchemeBusiness>(() => serviceProvider.GetService<PurchaseSchemeBusiness>());
|
|
|
|
}
|
|
|
|
|
|
|
|
public OP_ProductListResponse GetProductList(OP_QueryProductRequest request)
|
|
|
|
{
|
|
|
|
return opPlatformClientFactory.GetClient(request.Platform).GetProductList(request);
|
|
|
|
}
|
|
|
|
|
|
|
|
public OP_ProductSkuListResponse GetProductSkuList(OP_QueryProductSkuRequest request)
|
|
|
|
{
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|