diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/consumer/ServeController.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/consumer/ServeController.java new file mode 100644 index 0000000..8ba5637 --- /dev/null +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/controller/consumer/ServeController.java @@ -0,0 +1,53 @@ +package com.jzo2o.foundations.controller.consumer; + +import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO; +import com.jzo2o.foundations.model.dto.response.ServeAggregationTypeSimpleResDTO; +import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO; +import com.jzo2o.foundations.service.IServeService; +import com.jzo2o.foundations.service.IServeTypeService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 用户端 - 服务相关接口 + * @author JIAN + */ +@RestController("consumerServeController") +@RequestMapping("/customer/serve") +@Api(tags = "用户端 - 服务相关接口") +public class ServeController { + /** + * 获取首页服务类型及服务项 + */ + @GetMapping("/firstPageServeList") + public List getFirstPageServeList(@RequestParam Long regionId) { + return serveService.getFirstPageServeList(regionId); + } + + /** + * 获取全部服务类型 + */ + @GetMapping("/serveTypeList") + public List getServeTypeList(@RequestParam Long regionId) { + return serveTypeService.getServeTypeList(regionId); + } + + /** + * 获取热门服务项 + */ + @GetMapping("/hotServeList") + public List getHotServeList(@RequestParam Long regionId) { + return serveService.getHotServeList(regionId); + } + + @Resource + private IServeService serveService; + @Resource + private IServeTypeService serveTypeService; +} \ No newline at end of file diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/mapper/ServeMapper.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/mapper/ServeMapper.java index 2712d1c..4947ee0 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/mapper/ServeMapper.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/mapper/ServeMapper.java @@ -2,6 +2,8 @@ package com.jzo2o.foundations.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.jzo2o.foundations.model.domain.Serve; +import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO; +import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO; import com.jzo2o.foundations.model.dto.response.ServeResDTO; import org.apache.ibatis.annotations.Param; @@ -20,4 +22,16 @@ public interface ServeMapper extends BaseMapper { * @param regionId 区域id */ List queryServeListByRegionId(@Param("regionId") Long regionId); + + /** + * 区域服务图标查询 + * @param regionId 区域id + */ + List queryServeIconListByRegionId(@Param("regionId") Long regionId); + + /** + * 区域热门服务查询 + * @param regionId 区域id + */ + List queryHotServeListByRegionId(Long regionId); } \ No newline at end of file diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java index fd57f7d..a1970b4 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/IServeService.java @@ -5,6 +5,8 @@ import com.jzo2o.common.model.PageResult; import com.jzo2o.foundations.model.domain.Serve; import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO; import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO; +import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO; +import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO; import com.jzo2o.foundations.model.dto.response.ServeResDTO; import java.math.BigDecimal; @@ -56,4 +58,16 @@ public interface IServeService extends IService { * 取消指定服务热门 */ Serve updateOffHot(Long id); + + /** + * 获取首页服务类型及服务项 + * @param regionId 地区id + */ + List getFirstPageServeList(Long regionId); + + /** + * 获取首页热门服务 + * @param regionId 地区id + */ + List getHotServeList(Long regionId); } \ No newline at end of file diff --git a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java index 3042c38..d004045 100644 --- a/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java +++ b/jzo2o-foundations/src/main/java/com/jzo2o/foundations/service/impl/ServeServiceImpl.java @@ -5,24 +5,34 @@ import com.jzo2o.common.expcetions.CommonException; import com.jzo2o.common.expcetions.ForbiddenOperationException; import com.jzo2o.common.model.PageResult; import com.jzo2o.common.utils.BeanUtils; +import com.jzo2o.common.utils.CollUtils; import com.jzo2o.common.utils.ObjectUtils; +import com.jzo2o.foundations.constants.RedisConstants; import com.jzo2o.foundations.enums.FoundationStatusEnum; import com.jzo2o.foundations.enums.HotStatusEnum; import com.jzo2o.foundations.mapper.RegionMapper; import com.jzo2o.foundations.mapper.ServeItemMapper; import com.jzo2o.foundations.mapper.ServeMapper; +import com.jzo2o.foundations.model.domain.Region; import com.jzo2o.foundations.model.domain.Serve; import com.jzo2o.foundations.model.domain.ServeItem; import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO; import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO; +import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO; +import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO; import com.jzo2o.foundations.model.dto.response.ServeResDTO; +import com.jzo2o.foundations.model.dto.response.ServeSimpleResDTO; import com.jzo2o.foundations.service.IServeService; import com.jzo2o.mysql.utils.PageHelperUtils; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -203,6 +213,57 @@ public class ServeServiceImpl extends ServiceImpl implements return serve; } + @Override + @Caching(cacheable = { + @Cacheable(value = RedisConstants.CacheName.SERVE_ICON, key = "#regionId", + cacheManager = RedisConstants.CacheManager.THIRTY_MINUTES, + unless = "#result.size() != 0"), // 防止缓存穿透 + @Cacheable(value = RedisConstants.CacheName.SERVE_ICON, key = "#regionId", + cacheManager = RedisConstants.CacheManager.FOREVER, + unless = "#result.size() == 0")}) + public List getFirstPageServeList(Long regionId) { + Region region = regionMapper.selectById(regionId); + if (ObjectUtils.isEmpty(region)) { + return Collections.emptyList(); + } + + List serveIconList = baseMapper.queryServeIconListByRegionId(regionId); + if (CollUtils.isEmpty(serveIconList)) { + return Collections.emptyList(); + } + + // 保留最多前两个类型及最多前4个服务项 + serveIconList = new ArrayList<>(serveIconList.subList(0, Math.min(serveIconList.size(), 2))); + serveIconList.forEach(res -> { + List serveResDTOList = res.getServeResDTOList(); + res.setServeResDTOList(new ArrayList<>(serveResDTOList.subList(0, Math.min(serveResDTOList.size(), 4)))); + }); + + return serveIconList; + } + + @Override + @Caching(cacheable = { + @Cacheable(value = RedisConstants.CacheName.HOT_SERVE, key = "#regionId", + cacheManager = RedisConstants.CacheManager.THIRTY_MINUTES, + unless = "#result.size() != 0"), // 防止缓存穿透 + @Cacheable(value = RedisConstants.CacheName.HOT_SERVE, key = "#regionId", + cacheManager = RedisConstants.CacheManager.FOREVER, + unless = "#result.size() == 0")}) + public List getHotServeList(Long regionId) { + Region region = regionMapper.selectById(regionId); + if (ObjectUtils.isEmpty(region)) { + return Collections.emptyList(); + } + + List hotServeList = baseMapper.queryHotServeListByRegionId(regionId); + if (CollUtils.isEmpty(hotServeList)) { + return Collections.emptyList(); + } + + return hotServeList; + } + @Resource private ServeItemMapper serveItemMapper; diff --git a/jzo2o-foundations/src/main/resources/mapper/ServeMapper.xml b/jzo2o-foundations/src/main/resources/mapper/ServeMapper.xml index 4d3ef71..6d47c61 100644 --- a/jzo2o-foundations/src/main/resources/mapper/ServeMapper.xml +++ b/jzo2o-foundations/src/main/resources/mapper/ServeMapper.xml @@ -19,4 +19,56 @@ JOIN serve_type st ON si.serve_type_id = st.id WHERE s.region_id = #{regionId} + + + + + + + + + + + + + + + + + + + \ No newline at end of file