From f9fc1053df9c0ea89a77e47dd4f864ccf18437d7 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Wed, 10 Apr 2024 10:01:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=96=B0=E5=A2=9E):=20=E6=A0=B9=E6=8D=AEs?= =?UTF-8?q?kuId=E8=8E=B7=E5=8F=96=E4=BF=83=E9=94=80=E4=B8=8E=E4=BC=98?= =?UTF-8?q?=E6=83=A0=E5=88=B8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../ssyx/client/ActivityFeignClient.java | 9 ++- .../client/product/ProductFeignClient.java | 5 ++ .../ssyx/client/search/SearchFeignClient.java | 5 ++ .../activity/api/ActivityApiController.java | 11 ++-- .../activity/mapper/CouponInfoMapper.java | 12 +++- .../activity/service/ActivityInfoService.java | 9 +++ .../activity/service/CouponInfoService.java | 9 +++ .../service/impl/ActivityInfoServiceImpl.java | 55 +++++++++-------- .../service/impl/CouponInfoServiceImpl.java | 18 ++++++ .../module/ActivityInfoServiceModule.java | 47 +++++++++++++++ .../resources/mapper/CouponInfoMapper.xml | 32 ++++++++++ service/service-home/pom.xml | 5 ++ .../ssyx/home/config/ThreadPoolConfig.java | 19 ++++++ .../home/controller/ItemApiController.java | 31 ++++++++++ .../ssyx/home/service/ItemService.java | 13 ++++ .../home/service/impl/ItemServiceImpl.java | 59 +++++++++++++++++++ .../product/api/ProductInnerController.java | 7 +++ .../src/main/resources/application-dev.yml | 4 +- .../search/controller/SkuApiController.java | 7 +++ .../ssyx/search/service/SkuService.java | 7 +++ .../search/service/impl/SkuServiceImpl.java | 25 ++++++++ .../src/main/resources/application-dev.yml | 8 +-- 23 files changed, 360 insertions(+), 39 deletions(-) create mode 100644 service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/module/ActivityInfoServiceModule.java create mode 100644 service/service-home/src/main/java/com/atguigu/ssyx/home/config/ThreadPoolConfig.java create mode 100644 service/service-home/src/main/java/com/atguigu/ssyx/home/controller/ItemApiController.java create mode 100644 service/service-home/src/main/java/com/atguigu/ssyx/home/service/ItemService.java create mode 100644 service/service-home/src/main/java/com/atguigu/ssyx/home/service/impl/ItemServiceImpl.java diff --git a/.idea/misc.xml b/.idea/misc.xml index fb0bd54..9b83232 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/ActivityFeignClient.java b/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/ActivityFeignClient.java index 37e68be..147c5ec 100644 --- a/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/ActivityFeignClient.java +++ b/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/ActivityFeignClient.java @@ -1,6 +1,8 @@ package com.atguigu.ssyx.client; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -8,7 +10,12 @@ import java.util.List; import java.util.Map; @FeignClient(value = "service-activity", path = "/api/activity") -public interface ActivityFeignClient { // 根据skuId列表获取促销信息 +public interface ActivityFeignClient { + // 根据skuId列表获取促销信息 @PostMapping("inner/findActivity") Map> findActivity(@RequestBody List skuIdList); + + // 根据skuId获取促销与优惠券信息 + @GetMapping("inner/findActivityAndCoupon/{skuId}/{userId}") + Map findActivityAndCoupon(@PathVariable Long skuId, @PathVariable Long userId); } diff --git a/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java b/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java index 9c39ed3..ee793ac 100644 --- a/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java +++ b/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java @@ -3,6 +3,7 @@ package com.atguigu.ssyx.client.product; import com.atguigu.ssyx.common.result.Result; import com.atguigu.ssyx.model.product.Category; import com.atguigu.ssyx.model.product.SkuInfo; +import com.atguigu.ssyx.vo.product.SkuInfoVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -40,4 +41,8 @@ public interface ProductFeignClient { // 获取新人专享 @GetMapping("inner/findNewPersonSkuInfoList") Result> findNewPersonSkuInfoList(); + + // 根据skuId获取sku信息 + @GetMapping("inner/getSkuInfoVo/{skuId}") + SkuInfoVo getSkuInfoVo(@PathVariable Long skuId); } diff --git a/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SearchFeignClient.java b/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SearchFeignClient.java index 0e7bf63..add4a81 100644 --- a/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SearchFeignClient.java +++ b/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SearchFeignClient.java @@ -3,6 +3,7 @@ package com.atguigu.ssyx.client.search; import com.atguigu.ssyx.model.search.SkuEs; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @@ -11,4 +12,8 @@ public interface SearchFeignClient { // 获取爆品商品 @GetMapping("inner/findHotSkuList") List findHotSkuList(); + + // 更新商品incrHotScore + @GetMapping("inner/incrHotScore/{skuId}") + Boolean incrHotScore(@PathVariable Long skuId); } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java index aeae84e..07425cc 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java @@ -5,10 +5,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @@ -26,4 +23,10 @@ public class ActivityApiController { public Map> findActivity(@RequestBody List skuIdList) { return activityInfoService.findActivity(skuIdList); } + + @ApiOperation(value = "根据skuId获取促销与优惠券信息") + @GetMapping("inner/findActivityAndCoupon/{skuId}/{userId}") + public Map findActivityAndCoupon(@PathVariable Long skuId, @PathVariable Long userId) { + return activityInfoService.findActivityAndCoupon(skuId, userId); + } } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java index 28eed15..5533162 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java @@ -4,6 +4,8 @@ import com.atguigu.ssyx.model.activity.CouponInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** *

* 优惠券信息 Mapper 接口 @@ -14,5 +16,13 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface CouponInfoMapper extends BaseMapper { - + /** + * * 根据skuId获取活动规则数据 + * + * @param id 商品id + * @param categoryId 分类id + * @param userId 用户id + * @return 优惠卷信息列表 + */ + List selectCouponInfoList(Long id, Long categoryId, Long userId); } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java index 9f246a7..aa73529 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java @@ -50,4 +50,13 @@ public interface ActivityInfoService extends IService { * @return Map> */ Map> findActivity(List skuIdList); + + /** + * * 根据skuId获取促销与优惠券信息 + * + * @param skuId 商品id + * @param userId 用户id + * @return 营销的活动 + */ + Map findActivityAndCoupon(Long skuId, Long userId); } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java index d9c4e80..edd2668 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java @@ -57,4 +57,13 @@ public interface CouponInfoService extends IService { * @return 根据关键字获取sku列表,活动使用 */ List findCouponByKeyword(String keyword); + + /** + * * 获取优惠券信息 + * + * @param skuId 商品id + * @param userId 用户id + * @return 优惠卷列表 + */ + List findCouponInfo(Long skuId, Long userId); } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/ActivityInfoServiceImpl.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/ActivityInfoServiceImpl.java index a3db3d5..9bbdb73 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/ActivityInfoServiceImpl.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/ActivityInfoServiceImpl.java @@ -4,11 +4,13 @@ import com.atguigu.ssyx.activity.mapper.ActivityInfoMapper; import com.atguigu.ssyx.activity.mapper.ActivityRuleMapper; import com.atguigu.ssyx.activity.mapper.ActivitySkuMapper; import com.atguigu.ssyx.activity.service.ActivityInfoService; +import com.atguigu.ssyx.activity.service.CouponInfoService; +import com.atguigu.ssyx.activity.service.module.ActivityInfoServiceModule; import com.atguigu.ssyx.client.product.ProductFeignClient; -import com.atguigu.ssyx.enums.ActivityType; import com.atguigu.ssyx.model.activity.ActivityInfo; import com.atguigu.ssyx.model.activity.ActivityRule; import com.atguigu.ssyx.model.activity.ActivitySku; +import com.atguigu.ssyx.model.activity.CouponInfo; import com.atguigu.ssyx.model.product.SkuInfo; import com.atguigu.ssyx.vo.activity.ActivityRuleVo; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -36,6 +38,10 @@ public class ActivityInfoServiceImpl extends ServiceImpl findActivityRuleList(Long id) { + public Map findActivityRuleList(Long activityId) { Map result = new HashMap<>(); // 活动信息列表 List activityInfoList = activityRuleMapper.selectList( - Wrappers.lambdaQuery().eq(ActivityRule::getActivityId, id) + Wrappers.lambdaQuery().eq(ActivityRule::getActivityId, activityId) ); result.put("activityRuleList", activityInfoList); // 查询活动列表 List activitySkuList = activitySkuMapper.selectList( - Wrappers.lambdaQuery().eq(ActivitySku::getActivityId, id) + Wrappers.lambdaQuery().eq(ActivitySku::getActivityId, activityId) ); List skuIdList = activitySkuList.stream().map(ActivitySku::getSkuId).collect(Collectors.toList()); @@ -159,7 +165,7 @@ public class ActivityInfoServiceImpl extends ServiceImpl ruleList = new ArrayList<>(); // 把规则名称处理 for (ActivityRule activityRule : activityRuleList) { - ruleList.add(this.getRuleDesc(activityRule)); + ruleList.add(module.getRuleDesc(activityRule)); } result.put(skuId, ruleList); } @@ -167,25 +173,22 @@ public class ActivityInfoServiceImpl extends ServiceImpl findActivityAndCoupon(Long skuId, Long userId) { + // 一个sku只能有一个促销活动,一个活动有多个活动规则(如满赠,满100送10,满500送50) + List activityRuleList = module.findActivityRuleList(skuId); + // 获取优惠券信息 + List couponInfoList = couponInfoService.findCouponInfo(skuId, userId); + Map map = new HashMap<>(); + map.put("activityRuleList", activityRuleList); + map.put("couponInfoList", couponInfoList); + return map; } } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java index 961a880..dae86d4 100644 --- a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java @@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,6 +30,8 @@ public class CouponInfoServiceImpl extends ServiceImpl findCouponInfo(Long skuId, Long userId) { + SkuInfo skuInfo = productFeignClient.getSkuInfo(skuId).getData(); + if (null == skuInfo) return new ArrayList<>(); + // 根据skuId获取活动规则数据 + return couponInfoMapper.selectCouponInfoList(skuInfo.getId(), skuInfo.getCategoryId(), userId); + } } diff --git a/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/module/ActivityInfoServiceModule.java b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/module/ActivityInfoServiceModule.java new file mode 100644 index 0000000..3936435 --- /dev/null +++ b/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/module/ActivityInfoServiceModule.java @@ -0,0 +1,47 @@ +package com.atguigu.ssyx.activity.service.module; + +import com.atguigu.ssyx.activity.mapper.ActivityInfoMapper; +import com.atguigu.ssyx.enums.ActivityType; +import com.atguigu.ssyx.model.activity.ActivityRule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class ActivityInfoServiceModule { + @Autowired + private ActivityInfoMapper activityInfoMapper; + + // 根据skuId获取活动规则数据 + public List findActivityRuleList(Long skuId) { + List activityRuleList = activityInfoMapper.findActivityRule(skuId); + activityRuleList.forEach(activityRule -> { + String ruleDesc = this.getRuleDesc(activityRule); + activityRule.setRuleDesc(ruleDesc); + }); + return activityRuleList; + } + + // 构造规则名称的方法 + public String getRuleDesc(ActivityRule activityRule) { + ActivityType activityType = activityRule.getActivityType(); + StringBuilder ruleDesc = new StringBuilder(); + if (activityType == ActivityType.FULL_REDUCTION) { + ruleDesc + .append("满") + .append(activityRule.getConditionAmount()) + .append("元减") + .append(activityRule.getBenefitAmount()) + .append("元"); + } else { + ruleDesc + .append("满") + .append(activityRule.getConditionNum()) + .append("元打") + .append(activityRule.getBenefitDiscount()) + .append("折"); + } + return ruleDesc.toString(); + } +} diff --git a/service/service-activity/src/main/resources/mapper/CouponInfoMapper.xml b/service/service-activity/src/main/resources/mapper/CouponInfoMapper.xml index da11c25..3be11f9 100644 --- a/service/service-activity/src/main/resources/mapper/CouponInfoMapper.xml +++ b/service/service-activity/src/main/resources/mapper/CouponInfoMapper.xml @@ -2,4 +2,36 @@ + + diff --git a/service/service-home/pom.xml b/service/service-home/pom.xml index 8157393..4d56fd3 100644 --- a/service/service-home/pom.xml +++ b/service/service-home/pom.xml @@ -23,6 +23,11 @@ service-user-client 1.0-SNAPSHOT + + com.atguigu + service-activity-client + 1.0-SNAPSHOT + com.atguigu service-product-client diff --git a/service/service-home/src/main/java/com/atguigu/ssyx/home/config/ThreadPoolConfig.java b/service/service-home/src/main/java/com/atguigu/ssyx/home/config/ThreadPoolConfig.java new file mode 100644 index 0000000..334e294 --- /dev/null +++ b/service/service-home/src/main/java/com/atguigu/ssyx/home/config/ThreadPoolConfig.java @@ -0,0 +1,19 @@ +package com.atguigu.ssyx.home.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Configuration +public class ThreadPoolConfig { + @Bean + public ThreadPoolExecutor threadPoolExecutor() { + return new ThreadPoolExecutor(2, 5, 2, + TimeUnit.SECONDS, new ArrayBlockingQueue<>(3), Executors.defaultThreadFactory(), + new ThreadPoolExecutor.AbortPolicy()); + } +} diff --git a/service/service-home/src/main/java/com/atguigu/ssyx/home/controller/ItemApiController.java b/service/service-home/src/main/java/com/atguigu/ssyx/home/controller/ItemApiController.java new file mode 100644 index 0000000..6de05ae --- /dev/null +++ b/service/service-home/src/main/java/com/atguigu/ssyx/home/controller/ItemApiController.java @@ -0,0 +1,31 @@ +package com.atguigu.ssyx.home.controller; + +import com.atguigu.ssyx.common.context.BaseContext; +import com.atguigu.ssyx.common.result.Result; +import com.atguigu.ssyx.home.service.ItemService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +@Api(tags = "商品详情") +@RestController +@RequestMapping("api/home") +public class ItemApiController { + @Autowired + private ItemService itemService; + + @ApiOperation(value = "获取sku详细信息") + @GetMapping("item/{id}") + public Result> index(@PathVariable Long id, HttpServletRequest request) { + Long userId = BaseContext.getUserId(); + Map item = itemService.getItem(id, userId); + return Result.success(item); + } +} \ No newline at end of file diff --git a/service/service-home/src/main/java/com/atguigu/ssyx/home/service/ItemService.java b/service/service-home/src/main/java/com/atguigu/ssyx/home/service/ItemService.java new file mode 100644 index 0000000..60c2560 --- /dev/null +++ b/service/service-home/src/main/java/com/atguigu/ssyx/home/service/ItemService.java @@ -0,0 +1,13 @@ +package com.atguigu.ssyx.home.service; + +import java.util.Map; + +public interface ItemService { + /** + * * 获取sku详细信息 + * + * @param userId 用户id + * @return sku详细信息 + */ + Map getItem(Long skuId, Long userId); +} diff --git a/service/service-home/src/main/java/com/atguigu/ssyx/home/service/impl/ItemServiceImpl.java b/service/service-home/src/main/java/com/atguigu/ssyx/home/service/impl/ItemServiceImpl.java new file mode 100644 index 0000000..2a34d1f --- /dev/null +++ b/service/service-home/src/main/java/com/atguigu/ssyx/home/service/impl/ItemServiceImpl.java @@ -0,0 +1,59 @@ +package com.atguigu.ssyx.home.service.impl; + +import com.atguigu.ssyx.client.ActivityFeignClient; +import com.atguigu.ssyx.client.product.ProductFeignClient; +import com.atguigu.ssyx.client.search.SearchFeignClient; +import com.atguigu.ssyx.home.service.ItemService; +import com.atguigu.ssyx.vo.product.SkuInfoVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ThreadPoolExecutor; + +@Service +public class ItemServiceImpl implements ItemService { + @Autowired + private ThreadPoolExecutor threadPoolExecutor; + @Autowired + private ProductFeignClient productFeignClient; + @Autowired + private ActivityFeignClient activityFeignClient; + @Autowired + private SearchFeignClient searchFeignClient; + + /** + * * 获取sku详细信息 + * + * @param userId 用户id + * @return sku详细信息 + */ + @Override + public Map getItem(Long skuId, Long userId) { + HashMap result = new HashMap<>(); + + CompletableFuture skuInfoVoFuture = CompletableFuture.supplyAsync(() -> { + // 远程调用实现 + SkuInfoVo skuInfoVo = productFeignClient.getSkuInfoVo(skuId); + result.put("skuInfoVo", skuInfoVo); + return skuInfoVo; + }, threadPoolExecutor); + + // 获取优惠卷信息 + CompletableFuture activityFuture = CompletableFuture.runAsync(() -> { + Map activityMap = activityFeignClient.findActivityAndCoupon(skuId, userId); + result.putAll(activityMap); + }, threadPoolExecutor); + + // 更新商品热度 + CompletableFuture voidCompletableFuture = CompletableFuture.runAsync(() -> { + searchFeignClient.incrHotScore(skuId); + }, threadPoolExecutor); + + // 任务组合 + CompletableFuture.allOf(skuInfoVoFuture, activityFuture, voidCompletableFuture).join(); + return result; + } +} diff --git a/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java b/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java index 39a5556..055507b 100644 --- a/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java +++ b/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnerController.java @@ -5,6 +5,7 @@ import com.atguigu.ssyx.model.product.Category; import com.atguigu.ssyx.model.product.SkuInfo; import com.atguigu.ssyx.product.service.CategoryService; import com.atguigu.ssyx.product.service.SkuInfoService; +import com.atguigu.ssyx.vo.product.SkuInfoVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -68,4 +69,10 @@ public class ProductInnerController { List newPersonList = skuInfoService.findNewPersonList(); return Result.success(newPersonList); } + + @ApiOperation(value = "根据skuId获取sku信息") + @GetMapping("inner/getSkuInfoVo/{skuId}") + public SkuInfoVo getSkuInfoVo(@PathVariable Long skuId) { + return skuInfoService.getSkuInfoVo(skuId); + } } diff --git a/service/service-product/src/main/resources/application-dev.yml b/service/service-product/src/main/resources/application-dev.yml index 5dd30b0..a672197 100644 --- a/service/service-product/src/main/resources/application-dev.yml +++ b/service/service-product/src/main/resources/application-dev.yml @@ -3,8 +3,8 @@ server: bunny: rabbitmq: - host: 192.168.1.4 - # host: 192.168.3.98 + # host: 192.168.1.4 + host: 192.168.3.98 port: 5672 username: bunny password: "02120212" diff --git a/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java b/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java index d1fdaa7..07d6e9d 100644 --- a/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java +++ b/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java @@ -50,4 +50,11 @@ public class SkuApiController { public List findHotSkuList() { return skuService.findHotSkuList(); } + + @ApiOperation(value = "更新商品incrHotScore") + @GetMapping("inner/incrHotScore/{skuId}") + public Boolean incrHotScore(@PathVariable Long skuId) { + skuService.incrHotScore(skuId); + return true; + } } diff --git a/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java b/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java index 6271c63..bf625b4 100644 --- a/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java +++ b/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java @@ -37,4 +37,11 @@ public interface SkuService { * @return 分页结果 */ Page search(Pageable pageRequest, SkuEsQueryVo searchParamVo); + + /** + * * 更新商品incrHotScore + * + * @param skuId 商品id + */ + void incrHotScore(Long skuId); } diff --git a/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java b/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java index 288f4da..519b6f3 100644 --- a/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java +++ b/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java @@ -15,12 +15,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -31,6 +33,8 @@ public class SkuServiceImpl implements SkuService { private ProductFeignClient productFeignClient; @Autowired private ActivityFeignClient activityFeignClient; + @Autowired + private RedisTemplate redisTemplate; /** * 上架商品 @@ -122,4 +126,25 @@ public class SkuServiceImpl implements SkuService { } return pageModel; } + + /** + * * 更新商品incrHotScore + * + * @param skuId 商品id + */ + @Override + public void incrHotScore(Long skuId) { + // 定义key + String hotKey = "hotScore"; + // 更新热度,当到达一直值时再去更新ES中内容 + Double hotScore = redisTemplate.opsForZSet().incrementScore(hotKey, "skuId:" + skuId, 1); + // 规则 + if (hotScore % 10 == 0) { + Optional optional = skuRepository.findById(skuId); + SkuEs skuEs = optional.get(); + skuEs.setHotScore(Math.round(hotScore)); + // 如果有id值是更新,没有id值是添加 + skuRepository.save(skuEs); + } + } } diff --git a/service/service-search/src/main/resources/application-dev.yml b/service/service-search/src/main/resources/application-dev.yml index 7fe5120..ff04e2c 100644 --- a/service/service-search/src/main/resources/application-dev.yml +++ b/service/service-search/src/main/resources/application-dev.yml @@ -3,15 +3,15 @@ server: bunny: rabbitmq: - host: 192.168.1.4 - # host: 192.168.3.98 + # host: 192.168.1.4 + host: 192.168.3.98 port: 5672 username: bunny password: "02120212" elasticsearch: - uris: http://192.168.1.4:9200 - # uris: http://192.168.3.98:9200 + # uris: http://192.168.1.4:9200 + uris: http://192.168.3.98:9200 nacos: server-addr: z-bunny.cn:8848