diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 28285a9..b31afcd 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -143,5 +143,16 @@ namespace BBWYB.Server.API.Controllers //{ // purchaseSchemeBusiness.EditPurchaseRatio(request); //} + + /// + /// 根据慧眼标的Id获取慧眼采购方案(含全部配件基本信息) + /// + /// + /// + [HttpPost] + public IList GetPurchaseSchemeByHYBDId([FromBody]QueryHYSchemeRequest request) + { + return purchaseSchemeBusiness.GetPurchaseSchemeByHYBDId(request); + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index 5549279..c447a9b 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -273,7 +273,9 @@ namespace BBWYB.Server.Business ItemList = list, Purchaser = purchaser, PurchaseProductId = request.PurchaseProductId, - PurchasePlatform = Enums.Platform.阿里巴巴 + PurchasePlatform = Enums.Platform.阿里巴巴, + ProductName = jobject["globalData"]["tempModel"]["offerTitle"]?.ToString(), + ProductLogo = list.FirstOrDefault()?.Logo }; } catch diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index e08c632..6a15dcb 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1,10 +1,15 @@ 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 MySqlX.XDevAPI; +using Newtonsoft.Json; +using Org.BouncyCastle.Asn1.X509.Qualified; +using System.Net.Http.Headers; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -12,10 +17,16 @@ namespace BBWYB.Server.Business public class PurchaseSchemeBusiness : BaseBusiness, IDenpendency { private PurchaseProductAPIService purchaseProductAPIService; + private RestApiService restApiService; - public PurchaseSchemeBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, PurchaseProductAPIService purchaseProductAPIService) : base(fsql, nLogManager, idGenerator) + public PurchaseSchemeBusiness(IFreeSql fsql, + NLogManager nLogManager, + IIdGenerator idGenerator, + PurchaseProductAPIService purchaseProductAPIService, + RestApiService restApiService) : base(fsql, nLogManager, idGenerator) { this.purchaseProductAPIService = purchaseProductAPIService; + this.restApiService = restApiService; } private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest @@ -204,6 +215,16 @@ namespace BBWYB.Server.Business if (batchCURDSchemeRequest.EditPurchaseSchemeList != null && batchCURDSchemeRequest.EditPurchaseSchemeList.Count() > 0) { + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => string.IsNullOrEmpty(ps.ProductId) || + string.IsNullOrEmpty(ps.SkuId) || + ps.PurchaseSchemeProductList.Any(psp => string.IsNullOrEmpty(psp.ProductId) || + string.IsNullOrEmpty(psp.SkuId) || + psp.PurchaseSchemeProductSkuList.Any(pss => string.IsNullOrEmpty(pss.ProductId) || + string.IsNullOrEmpty(pss.SkuId))))) + { + throw new BusinessException("更新方案缺少ProductId/SkuId"); + } + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) || string.IsNullOrEmpty(pp.PurchaserName)))) throw new BusinessException("更新方案中有采购商Id/Name/Location为空"); @@ -217,6 +238,16 @@ namespace BBWYB.Server.Business if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count() > 0) { + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => string.IsNullOrEmpty(ps.ProductId) || + string.IsNullOrEmpty(ps.SkuId) || + ps.PurchaseSchemeProductList.Any(psp => string.IsNullOrEmpty(psp.ProductId) || + string.IsNullOrEmpty(psp.SkuId) || + psp.PurchaseSchemeProductSkuList.Any(pss => string.IsNullOrEmpty(pss.ProductId) || + string.IsNullOrEmpty(pss.SkuId))))) + { + throw new BusinessException("新增方案缺少ProductId/SkuId"); + } + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) || string.IsNullOrEmpty(pp.PurchaserName)))) throw new BusinessException("新增方案中有采购商Id/Name/Location为空"); @@ -237,6 +268,11 @@ namespace BBWYB.Server.Business var dbPurchaseSchemeList_sameGroup = dbPurchaseSchemeList.Where(ps => ps.SchemeGroupId == addPurchaseScheme.SchemeGroupId).ToList(); if (dbPurchaseSchemeList_sameGroup.Any(ps => ps.SkuId == addPurchaseScheme.SkuId)) throw new BusinessException($"采购方案分组中Sku不允许重复,{dbSchemeGroup.GroupName}已存在{addPurchaseScheme.SkuId}的采购方案"); + if (!string.IsNullOrEmpty(addPurchaseScheme.HYSchemeId)) + { + if (dbPurchaseSchemeList.Any(ps => ps.HYSchemeId == addPurchaseScheme.HYSchemeId)) + throw new BusinessException($"慧眼方案Id{addPurchaseScheme.HYSchemeId}已被其他采购方案使用"); + } } } @@ -419,7 +455,7 @@ namespace BBWYB.Server.Business .WhereIf(!string.IsNullOrEmpty(request.PurchaserId), (psp, p) => psp.PurchaserId == request.PurchaserId) .Where((psp, p) => psp.SkuPurchaseSchemeId == ps.Id).Any()); } - var sql = select.ToSql(); + //var sql = select.ToSql(); var purchaseSchemeList = select.OrderByDescending(ps => ps.CreateTime).ToList(); @@ -499,6 +535,9 @@ namespace BBWYB.Server.Business }); if (basicInfo != null) { + schemeProduct.PurchaseProductLogo = basicInfo.ProductLogo; + schemeProduct.PurchaseProductName = basicInfo.ProductName; + foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList) { var basicSku = basicInfo.ItemList.FirstOrDefault(x => x.PurchaseSkuId == schemeProductSku.PurchaseSkuId); @@ -688,5 +727,115 @@ namespace BBWYB.Server.Business } return list; } + + /// + /// 根据慧眼标的Id获取采购方案(含全部配件基本信息) + /// + /// + /// + /// + public IList GetPurchaseSchemeByHYBDId(QueryHYSchemeRequest request) + { + if (request.ShopId == 0) + throw new BusinessException("缺少店铺Id"); + if (string.IsNullOrEmpty(request.ProductId)) + throw new BusinessException("缺少商品Id"); + if (string.IsNullOrEmpty(request.HYBDId)) + throw new BusinessException("缺少标的Id"); + + var hyHttpResult = restApiService.SendRequest("http://hyapi.qiyue666.com", "/HuiYan/ItemPlan/GetPlanByOrderId", $"orderId={request.HYBDId}", null, HttpMethod.Get); + if (hyHttpResult.StatusCode != System.Net.HttpStatusCode.OK) + throw new BusinessException(hyHttpResult.Content); + var hyResponse = JsonConvert.DeserializeObject>>(hyHttpResult.Content); + if (!hyResponse.Success) + throw new BusinessException(hyResponse.Msg); + if (hyResponse.Data == null || hyResponse.Data.Count() == 0) + throw new BusinessException("该标的Id缺少采购方案"); + var hySchemeList = hyResponse.Data; + var hySchemeIdList = hySchemeList.Select(x => x.Id.ToString()).ToList(); + var dbSchemeList = fsql.Select().Where(ps => ps.ProductId == request.ProductId && + !string.IsNullOrEmpty(ps.HYSchemeId) && + hySchemeIdList.Contains(ps.HYSchemeId)).ToList(); + + var resultList = new List(); + foreach (var hyScheme in hySchemeList) + { + if (hyScheme.PlanItems == null || hyScheme.PlanItems.Count() == 0) + continue; + + var hySchemeResponse = new HYPurchaseSchemeResponse() + { + Id = 0, + CreateTime = DateTime.Now, + HYBDId = request.HYBDId, + IsAdded = dbSchemeList.Any(ps => ps.HYBDId == request.HYBDId && ps.HYSchemeId == hyScheme.Id.ToString()), + HYSchemeId = hyScheme.Id.ToString(), + ProductId = request.ProductId, + ShopId = request.ShopId + }; + resultList.Add(hySchemeResponse); + + foreach (var hySchemeProduct in hyScheme.PlanItems) + { + var basicInfo = GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() + { + FirstApiMode = Enums.PurchaseProductAPIMode.Spider, + PriceMode = Enums.PurchaseOrderMode.批发, + Platform = Enums.Platform.阿里巴巴, + PurchaseProductId = hySchemeProduct.ItemId + }); + + var hySchemeProductResponse = new PurchaseSchemeProductResponse() + { + Id = 0, + ProductId = request.ProductId, + PurchasePlatform = Enums.Platform.阿里巴巴, + PurchaseProductId = hySchemeProduct.ItemId, + PurchaseProductLogo = basicInfo.ProductLogo, + PurchaseProductName = basicInfo.ProductName, + PurchaserId = basicInfo.Purchaser?.Id, + PurchaserId2 = basicInfo.Purchaser?.Id2, + PurchaserMemberId = basicInfo.Purchaser?.MemberId, + PurchaserLocation = basicInfo.Purchaser?.Location, + PurchaserName = basicInfo.Purchaser?.Name, + PurchaseUrl = $"https://detail.1688.com/offer/{hySchemeProduct.ItemId}.html" + }; + hySchemeResponse.PurchaseSchemeProductList.Add(hySchemeProductResponse); + + if (!hySchemeResponse.PurchaserList.Any(p => p.Id == hySchemeProductResponse.PurchaserId)) + { + hySchemeResponse.PurchaserList.Add(new Purchaser() + { + Id = hySchemeProductResponse.PurchaserId, + Id2 = hySchemeProductResponse.PurchaserId2, + Location = hySchemeProductResponse.PurchaserLocation, + Name = hySchemeProductResponse.PurchaserName, + Platform = hySchemeProductResponse.PurchasePlatform, + MemberId = hySchemeProductResponse.PurchaserMemberId + }); + } + + foreach (var skuBasicInfo in basicInfo.ItemList) + { + var hySchemeProductSkuResponse = new PurchaseSchemeProductSkuResponse() + { + Id = 0, + ActualPrice = skuBasicInfo.Price, + ProductId = request.ProductId, + PurchaseProductId = skuBasicInfo.PurchaseProductId, + PurchaseRatio = 1, + PurchaseSkuId = skuBasicInfo.PurchaseSkuId, + PurchaseSkuLogo = skuBasicInfo.Logo, + PurchaseSkuPrice = skuBasicInfo.Price, + PurchaseSkuSpecId = skuBasicInfo.PurchaseSkuSpecId, + PurchaseSkuTitle = skuBasicInfo.Title + }; + hySchemeProductResponse.PurchaseSchemeProductSkuList.Add(hySchemeProductSkuResponse); + hySchemeResponse.DefaultCost += skuBasicInfo.Price; + } + } + } + return resultList; + } } } diff --git a/BBWYB.Server.Model/Dto/Core/HY/HYPurchaseScheme.cs b/BBWYB.Server.Model/Dto/Core/HY/HYPurchaseScheme.cs new file mode 100644 index 0000000..ed39981 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Core/HY/HYPurchaseScheme.cs @@ -0,0 +1,51 @@ +namespace BBWYB.Server.Model.Dto +{ + public class HYPurchaseScheme + { + /// + /// HY方案Id + /// + public int Id { get; set; } + + public string TeamitemsId { get; set; } + + public string UserId { get; set; } + + /// + /// 配件数量 + /// + public int SkuCount { get; set; } + + public IList PlanItems { get; set; } + } + + public class HYPurchaseSchemeProduct + { + public string Id { get; set; } + + /// + /// 慧眼方案Id + /// + public int SupplierTaskPlanId { get; set; } + + /// + /// Taobao=0 Jd=1 ALBB=2 PDD=3 + /// + public int Platform { get; set; } + + /// + /// 采购商品Id + /// + public string ItemId { get; set; } + } + + public class HYPurchaseSchemeProductSku + { + + } + + public class HYSupplierInfo + { + + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/hy/QueryHYSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/hy/QueryHYSchemeRequest.cs new file mode 100644 index 0000000..ab142fe --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/hy/QueryHYSchemeRequest.cs @@ -0,0 +1,17 @@ +namespace BBWYB.Server.Model.Dto +{ + public class QueryHYSchemeRequest + { + public long ShopId { get; set; } + + /// + /// 店铺商品Id + /// + public string ProductId { get; set; } + + /// + /// 慧眼标的Id + /// + public string HYBDId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/HY/HYPurchaseSchemeResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/HY/HYPurchaseSchemeResponse.cs new file mode 100644 index 0000000..8e60df2 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/HY/HYPurchaseSchemeResponse.cs @@ -0,0 +1,10 @@ +namespace BBWYB.Server.Model.Dto +{ + public class HYPurchaseSchemeResponse : PurchaseSchemeResponse + { + /// + /// 是否已经添加到SPU之中 + /// + public bool IsAdded { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseProductBasicInfoResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseProductBasicInfoResponse.cs index 336d112..d4bd3ff 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseProductBasicInfoResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseProductBasicInfoResponse.cs @@ -11,6 +11,10 @@ namespace BBWYB.Server.Model.Dto public string PurchaseProductId { get; set; } + public string ProductName { get; set; } + + public string ProductLogo { get; set; } + /// /// 采购SKU基础信息列表 /// diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs index affd828..7010514 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -12,6 +12,16 @@ public string PurchaserMemberId { get; set; } + /// + /// 采购商品标题 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值 + /// + public string PurchaseProductName { get; set; } + + /// + /// 采购商品Logo 仅在查询条件IncludePurchaseSkuBasicInfo=1时具备该值 + /// + public string PurchaseProductLogo { get; set; } + public new List PurchaseSchemeProductSkuList { get; set; } public PurchaseSchemeProductResponse()