From 16e073741e2806b9ee5c39a01dc363da84cb6c7b Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Mon, 6 Oct 2025 21:08:05 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E5=95=86=E5=9F=8E=E6=A1=A3?= =?UTF-8?q?=E5=8F=A3=E9=A6=96=E9=A1=B5=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=B0=83=E4=BC=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StoreHomeTemplateFiveResVO.java | 11 ++- .../StoreHomeTemplateFiveResDTO.java | 11 ++- .../impl/StoreHomepageServiceImpl.java | 93 ++++++++++++++++--- 3 files changed, 102 insertions(+), 13 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeTemplateFiveResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeTemplateFiveResVO.java index 056957077..8b9438cb9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeTemplateFiveResVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeTemplateFiveResVO.java @@ -20,7 +20,7 @@ public class StoreHomeTemplateFiveResVO { @ApiModelProperty(value = "顶部右侧商品") List topRightList; @ApiModelProperty(value = "右侧店铺公告") - String notice; + SHTFNoticeVO notice; @ApiModelProperty(value = "店家推荐") List recommendList; @ApiModelProperty(value = "销量排行") @@ -38,4 +38,13 @@ public class StoreHomeTemplateFiveResVO { private Integer orderNum; } + @Data + @ApiModel + public static class SHTFNoticeVO { + @ApiModelProperty(value = "标题") + private String noticeTitle; + @ApiModelProperty(value = "内容") + private String noticeContent; + } + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeTemplateFiveResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeTemplateFiveResDTO.java index 20c665e93..47ba10ec4 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeTemplateFiveResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeTemplateFiveResDTO.java @@ -22,10 +22,19 @@ public class StoreHomeTemplateFiveResDTO { @ApiModelProperty(value = "顶部右侧商品") List topRightList; @ApiModelProperty(value = "右侧店铺公告") - String notice; + SHTFNoticeDTO notice; @ApiModelProperty(value = "店家推荐") List recommendList; @ApiModelProperty(value = "销量排行") List saleRankList; + @Data + @ApiModel + public static class SHTFNoticeDTO { + @ApiModelProperty(value = "标题") + private String noticeTitle; + @ApiModelProperty(value = "内容") + private String noticeContent; + } + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java index 8bbc91bc2..68ef91b9a 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java @@ -727,26 +727,97 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { Notice storeNotice = storeNoticeList.stream() .filter(x -> Objects.equals(x.getPerpetuity(), 2) || (x.getEffectStart().before(now) && x.getEffectEnd().after(now))) .findFirst().orElse(null); -// templateFive.setNotice(BeanUtil.toBean(storeNotice, StoreHomeTemplateTwoResDTO.SHTTNoticeDTO.class)); + templateFive.setNotice(BeanUtil.toBean(storeNotice, StoreHomeTemplateFiveResDTO.SHTFNoticeDTO.class)); } - - // 其他区域 List otherList = this.storeHomeMapper.selectList(new LambdaQueryWrapper() .eq(StoreHomepage::getStoreId, storeId).eq(StoreHomepage::getDelFlag, Constants.UNDELETED) .in(StoreHomepage::getFileType, Arrays.asList(HomepageType.POPULAR_SALES.getValue(), HomepageType.SLIDING_PICTURE_SMALL.getValue(), HomepageType.SEASON_NEW_PRODUCTS.getValue(), HomepageType.STORE_RECOMMENDED.getValue(), HomepageType.SALES_RANKING.getValue()))); - if (CollectionUtils.isEmpty(otherList)) { + // 商品ID列表 + List prodIdList = CollectionUtils.isEmpty(otherList) ? new ArrayList<>() : otherList.stream().map(StoreHomepage::getBizId).collect(Collectors.toList()); + // 筛选商品最新的50条数据 + List latest50ProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProduct::getStoreId, storeId).eq(StoreProduct::getDelFlag, Constants.UNDELETED) + .orderByDesc(StoreProduct::getCreateTime).last("LIMIT 50")); + CollectionUtils.addAll(prodIdList, latest50ProdList.stream().map(StoreProduct::getId).collect(Collectors.toList())); + if (CollectionUtils.isEmpty(latest50ProdList)) { return templateFive; } - final List storeProdIdList = otherList.stream().map(StoreHomepage::getBizId).collect(Collectors.toList()); - List attrList = storeProdMapper.selectPriceAndMainPicAndTagList(storeProdIdList); - Map attrMap = attrList.stream().collect(Collectors.toMap(StoreProdPriceAndMainPicAndTagDTO::getStoreProdId, x -> x)); - return templateFive - .setTopRightList(this.getTemplateTypeList(otherList, attrMap, HomepageType.SLIDING_PICTURE_SMALL.getValue(), 2)) - .setRecommendList(this.getTemplateTypeList(otherList, attrMap, HomepageType.STORE_RECOMMENDED.getValue(), 10)) - .setSaleRankList(this.getTemplateTypeList(otherList, attrMap, HomepageType.SALES_RANKING.getValue(), 10)); + // 商品价格、主图、标签等 + List attrList = this.storeProdMapper.selectPriceAndMainPicAndTagList(prodIdList); + Map attrMap = attrList.stream() + .collect(Collectors.toMap(StoreProdPriceAndMainPicAndTagDTO::getStoreProdId, Function.identity())); + // 顶部右侧商品2条 + List topRightList = otherList.stream().filter(x -> Objects.equals(x.getFileType(), HomepageType.SLIDING_PICTURE_SMALL.getValue())).collect(Collectors.toList()); + List topRightRecommendList; + if (CollectionUtils.isEmpty(topRightList)) { + // 从latest50ProdList中随机选取最多2条数据 + List randomProductList = getRandomElements(latest50ProdList, 2); + topRightRecommendList = randomProductList.stream().map(x -> { + StoreProdPriceAndMainPicAndTagDTO dto = attrMap.get(x.getId()); + return BeanUtil.toBean(dto, StoreHomeTemplateItemResDTO.class) + .setDisplayType(AdDisplayType.PRODUCT.getValue()).setProdPrice(ObjectUtils.isNotEmpty(dto) ? dto.getMinPrice() : null) + .setTags(ObjectUtils.isNotEmpty(dto) && StringUtils.isNotBlank(dto.getTagStr()) ? StrUtil.split(dto.getTagStr(), ",") : null); + }).collect(Collectors.toList()); + } else { + topRightRecommendList = topRightList.stream().map(x -> { + StoreProdPriceAndMainPicAndTagDTO dto = attrMap.get(x.getId()); + return BeanUtil.toBean(dto, StoreHomeTemplateItemResDTO.class) + .setDisplayType(AdDisplayType.PRODUCT.getValue()).setProdPrice(ObjectUtils.isNotEmpty(dto) ? dto.getMinPrice() : null) + .setTags(ObjectUtils.isNotEmpty(dto) && StringUtils.isNotBlank(dto.getTagStr()) ? StrUtil.split(dto.getTagStr(), ",") : null); + }).collect(Collectors.toList()); + } + // 顶部右侧推荐商品 + templateFive.setTopRightList(topRightRecommendList); + + // 店家推荐 10条 + List storeRecommendList = otherList.stream().filter(x -> Objects.equals(x.getFileType(), HomepageType.STORE_RECOMMENDED.getValue())).collect(Collectors.toList()); + List recommendList; + if (CollectionUtils.isEmpty(storeRecommendList)) { + // 从latest50ProdList中随机选取最多5条数据 + List randomProductList = getRandomElements(latest50ProdList, 10); + recommendList = randomProductList.stream().map(x -> { + StoreProdPriceAndMainPicAndTagDTO dto = attrMap.get(x.getId()); + return BeanUtil.toBean(dto, StoreHomeTemplateItemResDTO.class) + .setDisplayType(AdDisplayType.PRODUCT.getValue()).setProdPrice(ObjectUtils.isNotEmpty(dto) ? dto.getMinPrice() : null) + .setTags(ObjectUtils.isNotEmpty(dto) && StringUtils.isNotBlank(dto.getTagStr()) ? StrUtil.split(dto.getTagStr(), ",") : null); + }).collect(Collectors.toList()); + } else { + recommendList = storeRecommendList.stream().map(x -> { + StoreProdPriceAndMainPicAndTagDTO dto = attrMap.get(x.getId()); + return BeanUtil.toBean(dto, StoreHomeTemplateItemResDTO.class) + .setDisplayType(AdDisplayType.PRODUCT.getValue()).setProdPrice(ObjectUtils.isNotEmpty(dto) ? dto.getMinPrice() : null) + .setTags(ObjectUtils.isNotEmpty(dto) && StringUtils.isNotBlank(dto.getTagStr()) ? StrUtil.split(dto.getTagStr(), ",") : null); + }).collect(Collectors.toList()); + } + // 档口推荐列表 + templateFive.setRecommendList(recommendList); + + List saleRankRecommendList; + // 销量排行 10条 + List salesRankingList = otherList.stream().filter(x -> Objects.equals(x.getFileType(), HomepageType.SALES_RANKING.getValue())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(salesRankingList)) { + // 从latest50ProdList中随机选取最多10条数据 + List randomProductList = getRandomElements(latest50ProdList, 10); + saleRankRecommendList = randomProductList.stream().map(x -> { + StoreProdPriceAndMainPicAndTagDTO dto = attrMap.get(x.getId()); + return BeanUtil.toBean(dto, StoreHomeTemplateItemResDTO.class) + .setDisplayType(AdDisplayType.PRODUCT.getValue()).setProdPrice(ObjectUtils.isNotEmpty(dto) ? dto.getMinPrice() : null) + .setTags(ObjectUtils.isNotEmpty(dto) && StringUtils.isNotBlank(dto.getTagStr()) ? StrUtil.split(dto.getTagStr(), ",") : null); + }).collect(Collectors.toList()); + } else { + saleRankRecommendList = salesRankingList.stream().map(x -> { + StoreProdPriceAndMainPicAndTagDTO dto = attrMap.get(x.getId()); + return BeanUtil.toBean(dto, StoreHomeTemplateItemResDTO.class) + .setDisplayType(AdDisplayType.PRODUCT.getValue()).setProdPrice(ObjectUtils.isNotEmpty(dto) ? dto.getMinPrice() : null) + .setTags(ObjectUtils.isNotEmpty(dto) && StringUtils.isNotBlank(dto.getTagStr()) ? StrUtil.split(dto.getTagStr(), ",") : null); + }).collect(Collectors.toList()); + } + // 销量排行列表 + templateFive.setSaleRankList(saleRankRecommendList); + return templateFive; } /**