diff --git a/guigu-ssyx-parent/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/activity/ActivityFeignClient.java b/guigu-ssyx-parent/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/activity/ActivityFeignClient.java index 1c855f7..c661b41 100644 --- a/guigu-ssyx-parent/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/activity/ActivityFeignClient.java +++ b/guigu-ssyx-parent/service-client/service-activity-client/src/main/java/com/atguigu/ssyx/client/activity/ActivityFeignClient.java @@ -1,6 +1,9 @@ package com.atguigu.ssyx.client.activity; +import io.swagger.annotations.ApiOperation; 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; @@ -19,4 +22,8 @@ public interface ActivityFeignClient { @PostMapping("/api/activity/inner/findActivity") Map> findActivity(@RequestBody List skuIdList); + + @ApiOperation("根据skuID获取营销数据和优惠卷") + @GetMapping("/api/activity/inner/findActivityAndCoupon/{skuId}/{userId}") + Map findActivityAndCoupon(@PathVariable("skuId") Long skuId, @PathVariable("userId") Long userId); } diff --git a/guigu-ssyx-parent/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java b/guigu-ssyx-parent/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java index 41e2f56..29836ec 100644 --- a/guigu-ssyx-parent/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java +++ b/guigu-ssyx-parent/service-client/service-product-client/src/main/java/com/atguigu/ssyx/client/product/ProductFeignClient.java @@ -2,6 +2,7 @@ package com.atguigu.ssyx.client.product; 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; @@ -70,7 +71,7 @@ public interface ProductFeignClient { * @return */ @GetMapping("/api/product/inner/findAllCategoryList") - public List findAllCategoryList(); + List findAllCategoryList(); /** * 获取新人优惠 @@ -78,5 +79,14 @@ public interface ProductFeignClient { * @return */ @GetMapping("/api/product/inner/findNewPersonSkuInfoList") - public List findNewPersonSkuInfoList(); + List findNewPersonSkuInfoList(); + + /** + * 根据skuId获取sku信息 + * + * @param skuId + * @return + */ + @GetMapping("/api/product/inner/getSkuInfoVo/{skuId}") + SkuInfoVo getSkuInfoVo(@PathVariable Long skuId); } diff --git a/guigu-ssyx-parent/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SkuFeignClient.java b/guigu-ssyx-parent/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SkuFeignClient.java index 6b18626..2e59749 100644 --- a/guigu-ssyx-parent/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SkuFeignClient.java +++ b/guigu-ssyx-parent/service-client/service-search-client/src/main/java/com/atguigu/ssyx/client/search/SkuFeignClient.java @@ -1,8 +1,10 @@ package com.atguigu.ssyx.client.search; import com.atguigu.ssyx.model.search.SkuEs; +import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @@ -17,5 +19,9 @@ import java.util.List; public interface SkuFeignClient { @GetMapping("/api/search/sku/inner/findHotSkuList") - public List findHotSkuList(); + List findHotSkuList(); + + @ApiOperation(value = "更新商品热度") + @GetMapping("/api/search/sku/inner/incrHotScore/{skuId}") + Boolean incrHotScore(@PathVariable("skuId") Long skuId); } diff --git a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java index 4738b6b..ce33a3e 100644 --- a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java +++ b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/api/ActivityApiController.java @@ -4,10 +4,7 @@ import com.atguigu.ssyx.activity.service.ActivityInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -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 javax.annotation.Resource; import java.util.List; @@ -34,4 +31,10 @@ public class ActivityApiController { public Map> findActivity(@RequestBody List skuIdList) { return activityInfoService.findActivity(skuIdList); } + + @ApiOperation("根据skuID获取营销数据和优惠卷") + @GetMapping("inner/findActivityAndCoupon/{skuId}/{userId}") + public Map findActivityAndCoupon(@PathVariable Long skuId, @PathVariable Long userId) { + return activityInfoService.findActivityAndCoupon(skuId, userId); + } } diff --git a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java index d1728d6..7bd5e7b 100644 --- a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java +++ b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/CouponInfoMapper.java @@ -2,6 +2,9 @@ package com.atguigu.ssyx.activity.mapper; import com.atguigu.ssyx.model.activity.CouponInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -13,4 +16,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface CouponInfoMapper extends BaseMapper { + /** + * 根据条件查询:skuId + 分类id + userId + * + * @param id + * @param categoryId + * @param userId + * @return + */ + List selectCouponInfoList( + @Param("skuId") Long id, @Param("categoryId") Long categoryId, @Param("userId") Long userId); } diff --git a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/xml/CouponInfoMapper.xml b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/xml/CouponInfoMapper.xml deleted file mode 100644 index da11c25..0000000 --- a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/mapper/xml/CouponInfoMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java index 1fe6536..f424299 100644 --- a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java +++ b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/ActivityInfoService.java @@ -60,4 +60,13 @@ public interface ActivityInfoService extends IService { * @return */ Map> findActivity(List skuIdList); + + /** + * 根据skuID获取营销数据和优惠卷 + * + * @param skuId + * @param userId + * @return + */ + Map findActivityAndCoupon(Long skuId, Long userId); } diff --git a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java index e8c6e43..4573e02 100644 --- a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java +++ b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/CouponInfoService.java @@ -58,4 +58,14 @@ public interface CouponInfoService extends IService { * @return */ List findCouponByKeyword(String keyword); + + /** + * 根据skuId+userId查询优惠卷信息 + * + * @param skuId + * @param userId + * @return + */ + + List findCouponInfoList(Long skuId, Long userId); } diff --git a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/ActivityInfoServiceImpl.java b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/ActivityInfoServiceImpl.java index df2c3db..4d158e8 100644 --- a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/ActivityInfoServiceImpl.java +++ b/guigu-ssyx-parent/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.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.LambdaQueryWrapper; @@ -51,6 +53,9 @@ public class ActivityInfoServiceImpl extends ServiceImpl findActivityAndCoupon(Long skuId, Long userId) { + //1 根据skuId获取sku营销活动,一个活动有多个规则 + List activityRuleList = this.findActivityRuleBySkuId(skuId); + + //2 根据skuId+userId查询优惠卷信息 + List couponInfoList = couponInfoService.findCouponInfoList(skuId, userId); + + //3 封装到map集合,返回 + Map map = new HashMap<>(); + map.put("couponInfoList", couponInfoList); + map.put("activityRuleList", activityRuleList); + return map; + } + + //根据skuId获取活动规则数据 + public List findActivityRuleBySkuId(Long skuId) { + List activityRuleList = baseMapper.findActivityRule(skuId); + + for (ActivityRule activityRule : activityRuleList) { + String ruleDesc = this.getRuleDesc(activityRule); + activityRule.setRuleDesc(ruleDesc); + } + return activityRuleList; + } } diff --git a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java index c0b7810..1877179 100644 --- a/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java +++ b/guigu-ssyx-parent/service/service-activity/src/main/java/com/atguigu/ssyx/activity/service/impl/CouponInfoServiceImpl.java @@ -120,6 +120,11 @@ public class CouponInfoServiceImpl extends ServiceImpl findCouponByKeyword(String keyword) { return baseMapper.selectList(new LambdaQueryWrapper().like(CouponInfo::getCouponName, keyword)); } + + /** + * 根据skuId+userId查询优惠卷信息 + * + * @param skuId + * @param userId + * @return + */ + @Override + public List findCouponInfoList(Long skuId, Long userId) { + //远程调用:根据skuId获取skuInfo + SkuInfo skuInfo = productFeignClient.getSkuInfo(skuId); + + //根据条件查询:skuId + 分类id + userId + List couponInfoList = baseMapper.selectCouponInfoList(skuInfo.getId(), skuInfo.getCategoryId(), userId); + + return couponInfoList; + } } diff --git a/guigu-ssyx-parent/service/service-activity/src/main/resources/mapper/CouponInfoMapper.xml b/guigu-ssyx-parent/service/service-activity/src/main/resources/mapper/CouponInfoMapper.xml new file mode 100644 index 0000000..6a34809 --- /dev/null +++ b/guigu-ssyx-parent/service/service-activity/src/main/resources/mapper/CouponInfoMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + diff --git a/guigu-ssyx-parent/service/service-home/pom.xml b/guigu-ssyx-parent/service/service-home/pom.xml index efdd0cf..90a0704 100644 --- a/guigu-ssyx-parent/service/service-home/pom.xml +++ b/guigu-ssyx-parent/service/service-home/pom.xml @@ -35,6 +35,16 @@ 1.0-SNAPSHOT compile + + org.springframework.boot + spring-boot-starter-actuator + + + com.atguigu + service-activity-client + 1.0-SNAPSHOT + compile + diff --git a/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/config/ThreadPoolConfig.java b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/config/ThreadPoolConfig.java new file mode 100644 index 0000000..c5a7b48 --- /dev/null +++ b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/config/ThreadPoolConfig.java @@ -0,0 +1,26 @@ +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; + +/** + * ClassName: ThreadPoolConfig + * Package: com.atguigu.ssyx.home.config + * + * @author yovinchen + * @Create 2023/10/8 14:47 + */ + +@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/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/controller/HomeApiController.java b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/controller/HomeApiController.java index c50389a..97e34a9 100644 --- a/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/controller/HomeApiController.java +++ b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/controller/HomeApiController.java @@ -4,10 +4,12 @@ import com.atguigu.ssyx.client.product.ProductFeignClient; import com.atguigu.ssyx.common.auth.AuthContextHolder; import com.atguigu.ssyx.common.result.Result; import com.atguigu.ssyx.home.service.HomeService; +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; @@ -27,7 +29,8 @@ import java.util.Map; @RestController @RequestMapping("api/home") public class HomeApiController { - + @Autowired + private ItemService itemService; @Resource private ProductFeignClient productFeignClient; @Autowired @@ -42,13 +45,18 @@ public class HomeApiController { return Result.ok(map); } - @ApiOperation(value = "获取分类信息") @GetMapping("category") public Result category() { return Result.ok(productFeignClient.findAllCategoryList()); } - + @GetMapping("item/{id}") + @ApiOperation("商品详情") + public Result index(@PathVariable Long id) { + Long userId = AuthContextHolder.getUserId(); + Map map = itemService.item(id, userId); + return Result.ok(map); + } } diff --git a/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/service/ItemService.java b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/service/ItemService.java new file mode 100644 index 0000000..a998d71 --- /dev/null +++ b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/service/ItemService.java @@ -0,0 +1,21 @@ +package com.atguigu.ssyx.home.service; + +import java.util.Map; + +/** + * ClassName: ItemService + * Package: com.atguigu.ssyx.home.service + * + * @author yovinchen + * @Create 2023/10/7 15:01 + */ +public interface ItemService { + /** + * 商品详情 + * + * @param skuId + * @param userId + * @return + */ + Map item(Long skuId, Long userId); +} diff --git a/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/service/impl/ItemServiceImpl.java b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/service/impl/ItemServiceImpl.java new file mode 100644 index 0000000..f91d573 --- /dev/null +++ b/guigu-ssyx-parent/service/service-home/src/main/java/com/atguigu/ssyx/home/service/impl/ItemServiceImpl.java @@ -0,0 +1,75 @@ +package com.atguigu.ssyx.home.service.impl; + +import com.atguigu.ssyx.client.activity.ActivityFeignClient; +import com.atguigu.ssyx.client.product.ProductFeignClient; +import com.atguigu.ssyx.client.search.SkuFeignClient; +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 javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * ClassName: ItemServiceImpl + * Package: com.atguigu.ssyx.home.service.impl + * + * @author yovinchen + * @Create 2023/10/7 15:02 + */ +@Service +public class ItemServiceImpl implements ItemService { + + @Autowired + private ProductFeignClient productFeignClient; + + @Autowired + private ActivityFeignClient activityFeignClient; + + @Autowired + private SkuFeignClient skuFeignClient; + @Resource + private ThreadPoolExecutor threadPoolExecutor; + + /** + * 商品详情 + * + * @param skuId + * @param userId + * @return + */ + @Override + public Map item(Long skuId, Long userId) { + Map result = new HashMap<>(); + + //skuId查询 + CompletableFuture skuInfocompletableFuture = CompletableFuture.supplyAsync(() -> { + //远程调用获取sku对应数据 + SkuInfoVo skuInfoVo = productFeignClient.getSkuInfoVo(skuId); + result.put("skuInfoVo", skuInfoVo); + return skuInfoVo; + }, threadPoolExecutor); + + //sku对应优惠卷信息 + CompletableFuture activityCompletableFuture = CompletableFuture.runAsync(() -> { + //远程调用获取优惠卷 + Map activityMap = activityFeignClient.findActivityAndCoupon(skuId, userId); + result.putAll(activityMap); + }, threadPoolExecutor); + + //更新商品热度 + CompletableFuture hotCompletableFuture = CompletableFuture.runAsync(() -> { + //远程调用更新热度 + skuFeignClient.incrHotScore(skuId); + }, threadPoolExecutor); + + //任务组合 + CompletableFuture.allOf(skuInfocompletableFuture, activityCompletableFuture, hotCompletableFuture) + .join(); + return result; + } +} diff --git a/guigu-ssyx-parent/service/service-home/src/main/resources/application-dev.yml b/guigu-ssyx-parent/service/service-home/src/main/resources/application-dev.yml index 4978d32..5534117 100644 --- a/guigu-ssyx-parent/service/service-home/src/main/resources/application-dev.yml +++ b/guigu-ssyx-parent/service/service-home/src/main/resources/application-dev.yml @@ -1,5 +1,6 @@ server: port: 8207 + feign: sentinel: enabled: true diff --git a/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnnerController.java b/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnnerController.java index 94f6e30..6c2ac7e 100644 --- a/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnnerController.java +++ b/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/api/ProductInnnerController.java @@ -4,6 +4,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.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -68,4 +69,10 @@ public class ProductInnnerController { public List findNewPersonSkuInfoList() { return skuInfoService.findNewPersonSkuInfoList(); } + + @ApiOperation(value = "根据skuId获取sku信息") + @GetMapping("inner/getSkuInfoVo/{skuId}") + public SkuInfoVo getSkuInfoVo(@PathVariable Long skuId) { + return skuInfoService.getSkuInfoVo(skuId); + } } diff --git a/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/SkuInfoService.java b/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/SkuInfoService.java index f97b7f8..279249c 100644 --- a/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/SkuInfoService.java +++ b/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/SkuInfoService.java @@ -35,7 +35,7 @@ public interface SkuInfoService extends IService { void saveSkuInfo(SkuInfoVo skuInfoVo); /** - * 获取商品sku信息 + * 根据id获取商品sku信息 * * @param id * @return diff --git a/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/impl/SkuInfoServiceImpl.java b/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/impl/SkuInfoServiceImpl.java index fe8e463..df29a41 100644 --- a/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/impl/SkuInfoServiceImpl.java +++ b/guigu-ssyx-parent/service/service-product/src/main/java/com/atguigu/ssyx/product/service/impl/SkuInfoServiceImpl.java @@ -134,7 +134,6 @@ public class SkuInfoServiceImpl extends ServiceImpl impl /** * 修改商品sku信息 - * * @param skuInfoVo */ @Override diff --git a/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java b/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java index 203abcb..07ac284 100644 --- a/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java +++ b/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/controller/SkuApiController.java @@ -62,4 +62,11 @@ public class SkuApiController { Page pageModel = skuService.search(pageable, searchParamVo); return Result.ok(pageModel); } + + @ApiOperation(value = "更新商品热度") + @GetMapping("inner/incrHotScore/{skuId}") + public Boolean incrHotScore(@PathVariable("skuId") Long skuId) { + skuService.incrHotScore(skuId); + return true; + } } diff --git a/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java b/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java index 60ecf2f..8df728f 100644 --- a/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java +++ b/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/SkuService.java @@ -48,4 +48,11 @@ public interface SkuService { * @return */ Page search(Pageable pageable, SkuEsQueryVo searchParamVo); + + /** + * 更新商品热度 + * + * @param skuId + */ + void incrHotScore(Long skuId); } diff --git a/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java b/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java index dd39dd5..4af0669 100644 --- a/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java +++ b/guigu-ssyx-parent/service/service-search/src/main/java/com/atguigu/ssyx/search/service/impl/SkuServiceImpl.java @@ -16,6 +16,7 @@ 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 org.springframework.util.StringUtils; @@ -23,6 +24,7 @@ import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -38,12 +40,16 @@ public class SkuServiceImpl implements SkuService { @Autowired private ProductFeignClient productFeignClient; + @Autowired private ActivityFeignClient activityFeignClient; @Autowired private SkuRepository skuRepository; + @Autowired + private RedisTemplate redisTemplate; + /** * 上架商品列表 * @@ -155,4 +161,25 @@ public class SkuServiceImpl implements SkuService { return pageModel; } + + /** + * 更新商品热度 + * + * @param skuId + */ + @Override + public void incrHotScore(Long skuId) { + String key = "hotScore"; + //redis保存数据,每次+1 + Double hotScore = redisTemplate.opsForZSet() + .incrementScore(key, "skuId:" + skuId, 1); + //规则 + if (hotScore % 10 == 0) { + //更新es + Optional optional = skuRepository.findById(skuId); + SkuEs skuEs = optional.get(); + skuEs.setHotScore(Math.round(hotScore)); + skuRepository.save(skuEs); + } + } }