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 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(() => serviceProvider.GetService()); } 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(); 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(); 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(); 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); } } }