From f9bf389b99e39f9fcc8a97435042717fda2da048 Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Sat, 24 May 2025 14:27:12 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E5=89=8D=E7=AB=AF=E6=8E=A8?= =?UTF-8?q?=E5=B9=BF=E8=90=A5=E9=94=80=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/xkt/WebsiteController.java | 28 +-- .../PCNewBottomBannerVO.java | 2 +- .../PCNewMidBrandVO.java | 2 +- .../PCNewMidHotLeftVO.java | 2 +- .../PCNewMidHotRightVO.java | 2 +- .../PCNewTopLeftBannerVO.java | 2 +- .../PCNewTopRightVO.java | 2 +- .../ruoyi/common/constant/CacheConstants.java | 8 + .../web/service/SysLoginService.java | 4 +- .../xkt/dto/advertRound/pc/PCSearchDTO.java | 39 ++++ .../PCNewBottomBannerDTO.java | 2 +- .../PCNewMidBrandDTO.java | 2 +- .../PCNewMidHotLeftDTO.java | 2 +- .../PCNewMidHotRightDTO.java | 2 +- .../pc/newProd/PCNewRecommendDTO.java | 39 ++++ .../PCNewTopLeftBannerDTO.java | 2 +- .../PCNewTopRightDTO.java | 2 +- .../ruoyi/xkt/service/IWebsiteService.java | 21 ++- .../xkt/service/impl/WebsiteServiceImpl.java | 166 +++++++++++++++--- 19 files changed, 284 insertions(+), 45 deletions(-) rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/{newArrival => newProd}/PCNewBottomBannerVO.java (90%) rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/{newArrival => newProd}/PCNewMidBrandVO.java (90%) rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/{newArrival => newProd}/PCNewMidHotLeftVO.java (90%) rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/{newArrival => newProd}/PCNewMidHotRightVO.java (92%) rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/{newArrival => newProd}/PCNewTopLeftBannerVO.java (90%) rename ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/{newArrival => newProd}/PCNewTopRightVO.java (90%) create mode 100644 xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/PCSearchDTO.java rename xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/{newArrival => newProd}/PCNewBottomBannerDTO.java (93%) rename xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/{newArrival => newProd}/PCNewMidBrandDTO.java (93%) rename xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/{newArrival => newProd}/PCNewMidHotLeftDTO.java (93%) rename xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/{newArrival => newProd}/PCNewMidHotRightDTO.java (94%) create mode 100644 xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewRecommendDTO.java rename xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/{newArrival => newProd}/PCNewTopLeftBannerDTO.java (93%) rename xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/{newArrival => newProd}/PCNewTopRightDTO.java (93%) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/WebsiteController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/WebsiteController.java index 6dee01a66..b5ff6caa7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/WebsiteController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/WebsiteController.java @@ -4,20 +4,25 @@ import cn.hutool.core.bean.BeanUtil; import com.ruoyi.common.core.controller.XktBaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.Page; +import com.ruoyi.web.controller.xkt.vo.advertRound.app.category.APPCateVO; import com.ruoyi.web.controller.xkt.vo.advertRound.app.index.APPIndexHotSaleRightFixVO; import com.ruoyi.web.controller.xkt.vo.advertRound.app.index.APPIndexMidBrandVO; -import com.ruoyi.web.controller.xkt.vo.advertRound.app.category.APPCateVO; import com.ruoyi.web.controller.xkt.vo.advertRound.app.own.APPOwnGuessLikeVO; import com.ruoyi.web.controller.xkt.vo.advertRound.pc.PCDownloadVO; import com.ruoyi.web.controller.xkt.vo.advertRound.pc.PCUserCenterVO; import com.ruoyi.web.controller.xkt.vo.advertRound.pc.index.*; -import com.ruoyi.web.controller.xkt.vo.advertRound.pc.newArrival.*; +import com.ruoyi.web.controller.xkt.vo.advertRound.pc.newProd.*; import com.ruoyi.web.controller.xkt.vo.advertRound.pc.store.PCStoreMidBannerVO; import com.ruoyi.web.controller.xkt.vo.advertRound.pc.store.PCStoreTopBannerVO; import com.ruoyi.web.controller.xkt.vo.advertRound.picSearch.PicSearchAdvertVO; import com.ruoyi.web.controller.xkt.website.IndexSearchVO; -import com.ruoyi.xkt.dto.advertRound.app.index.*; +import com.ruoyi.xkt.dto.advertRound.app.index.APPIndexHotSaleDTO; +import com.ruoyi.xkt.dto.advertRound.app.index.APPIndexNewProdDTO; +import com.ruoyi.xkt.dto.advertRound.app.index.APPIndexPopularSaleDTO; +import com.ruoyi.xkt.dto.advertRound.app.index.APPSearchDTO; +import com.ruoyi.xkt.dto.advertRound.pc.PCSearchDTO; import com.ruoyi.xkt.dto.advertRound.pc.index.PCIndexRecommendDTO; +import com.ruoyi.xkt.dto.advertRound.pc.newProd.PCNewRecommendDTO; import com.ruoyi.xkt.dto.es.ESProductDTO; import com.ruoyi.xkt.dto.website.IndexSearchDTO; import com.ruoyi.xkt.service.IWebsiteService; @@ -54,18 +59,23 @@ public class WebsiteController extends XktBaseController { return R.ok(websiteService.search(BeanUtil.toBean(searchVO, IndexSearchDTO.class))); } - - // PC 首页 新品馆 列表 - // TODO APP 首页 热卖精选、人气爆品、新品榜 PC 首页 新品馆 列表 - // TODO APP 首页 热卖精选、人气爆品、新品榜 PC 首页 新品馆 列表 - @ApiOperation(value = "PC 首页 为你推荐", httpMethod = "POST", response = R.class) @PostMapping("/pc/index/recommend") public R> pcIndexRecommendPage(@Validated @RequestBody IndexSearchVO searchVO) throws IOException { return R.ok(websiteService.pcIndexRecommendPage(BeanUtil.toBean(searchVO, IndexSearchDTO.class))); } + @ApiOperation(value = "PC 新品馆 为你推荐", httpMethod = "POST", response = R.class) + @PostMapping("/pc/new-prod/recommend") + public R> pcNewProdRecommendPage(@Validated @RequestBody IndexSearchVO searchVO) throws IOException { + return R.ok(websiteService.pcNewProdRecommendPage(BeanUtil.toBean(searchVO, IndexSearchDTO.class))); + } + @ApiOperation(value = "PC 搜索结果", httpMethod = "POST", response = R.class) + @PostMapping("/pc/search") + public R> psSearchPage(@Validated @RequestBody IndexSearchVO searchVO) throws IOException { + return R.ok(websiteService.psSearchPage(BeanUtil.toBean(searchVO, IndexSearchDTO.class))); + } @ApiOperation(value = "APP 首页 精选热卖列表", httpMethod = "POST", response = R.class) @PostMapping("/app/index/hot-sale") @@ -92,8 +102,6 @@ public class WebsiteController extends XktBaseController { } - - @ApiOperation(value = "PC 首页 顶部横向轮播图", httpMethod = "GET", response = R.class) @GetMapping("/pc/index/top/left") public R> getPcIndexTopLeftBanner() { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewBottomBannerVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewBottomBannerVO.java similarity index 90% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewBottomBannerVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewBottomBannerVO.java index 5a3a6a51a..12990d53a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewBottomBannerVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewBottomBannerVO.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newArrival; +package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidBrandVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidBrandVO.java similarity index 90% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidBrandVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidBrandVO.java index f5be462d9..78845c3b9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidBrandVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidBrandVO.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newArrival; +package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidHotLeftVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidHotLeftVO.java similarity index 90% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidHotLeftVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidHotLeftVO.java index b01af554a..22b03c5d2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidHotLeftVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidHotLeftVO.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newArrival; +package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidHotRightVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidHotRightVO.java similarity index 92% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidHotRightVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidHotRightVO.java index 2e421b2d8..9eae790bf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewMidHotRightVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewMidHotRightVO.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newArrival; +package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewTopLeftBannerVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewTopLeftBannerVO.java similarity index 90% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewTopLeftBannerVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewTopLeftBannerVO.java index 935d209be..acd08fe89 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewTopLeftBannerVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewTopLeftBannerVO.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newArrival; +package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewTopRightVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewTopRightVO.java similarity index 90% rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewTopRightVO.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewTopRightVO.java index 7a593b82b..d7191bf41 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newArrival/PCNewTopRightVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/advertRound/pc/newProd/PCNewTopRightVO.java @@ -1,4 +1,4 @@ -package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newArrival; +package com.ruoyi.web.controller.xkt.vo.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 87d378239..77ad9ed9f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -142,6 +142,14 @@ public class CacheConstants { * PC 下载页 */ public static final String PC_DOWNLOAD = "pc_download"; + /** + * PC 首页 为你推荐 + */ + public static final String PC_INDEX_RECOMMEND = "pc_index_recommend"; + /** + * PC 新品馆 为你推荐 + */ + public static final String PC_NEW_RECOMMEND = "pc_new_recommend"; /** diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 48421a981..51ea8035d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -63,8 +63,10 @@ public class SysLoginService */ public String login(String username, String password, String code, String uuid) { + // 验证码校验 - validateCaptcha(username, code, uuid); +// validateCaptcha(username, code, uuid); + // 登录前置校验 loginPreCheck(username, password); // 用户验证 diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/PCSearchDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/PCSearchDTO.java new file mode 100644 index 000000000..c682f5046 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/PCSearchDTO.java @@ -0,0 +1,39 @@ +package com.ruoyi.xkt.dto.advertRound.pc; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("PC 搜索 ") +@Data +@Accessors(chain = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class PCSearchDTO { + + @ApiModelProperty(value = "档口ID") + private String storeId; + @ApiModelProperty(value = "档口名称") + private String storeName; + @ApiModelProperty(value = "档口商品ID") + private String storeProdId; + @ApiModelProperty(value = "货号") + private String prodArtNum; + @ApiModelProperty(value = "主图") + private String mainPic; + @ApiModelProperty(value = "单价") + private String prodPrice; + @ApiModelProperty(value = "是否广告") + private Boolean advert; + @ApiModelProperty(value = "标签") + private List tags; + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewBottomBannerDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewBottomBannerDTO.java similarity index 93% rename from xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewBottomBannerDTO.java rename to xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewBottomBannerDTO.java index 85cbf95c1..d0b325d75 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewBottomBannerDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewBottomBannerDTO.java @@ -1,4 +1,4 @@ -package com.ruoyi.xkt.dto.advertRound.pc.newArrival; +package com.ruoyi.xkt.dto.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidBrandDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidBrandDTO.java similarity index 93% rename from xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidBrandDTO.java rename to xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidBrandDTO.java index d54f9205c..622fd79b9 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidBrandDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidBrandDTO.java @@ -1,4 +1,4 @@ -package com.ruoyi.xkt.dto.advertRound.pc.newArrival; +package com.ruoyi.xkt.dto.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidHotLeftDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidHotLeftDTO.java similarity index 93% rename from xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidHotLeftDTO.java rename to xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidHotLeftDTO.java index 59c551d56..3f2247b59 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidHotLeftDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidHotLeftDTO.java @@ -1,4 +1,4 @@ -package com.ruoyi.xkt.dto.advertRound.pc.newArrival; +package com.ruoyi.xkt.dto.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidHotRightDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidHotRightDTO.java similarity index 94% rename from xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidHotRightDTO.java rename to xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidHotRightDTO.java index 3b33095f7..0e6d1e637 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewMidHotRightDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewMidHotRightDTO.java @@ -1,4 +1,4 @@ -package com.ruoyi.xkt.dto.advertRound.pc.newArrival; +package com.ruoyi.xkt.dto.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewRecommendDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewRecommendDTO.java new file mode 100644 index 000000000..c0ef1a941 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewRecommendDTO.java @@ -0,0 +1,39 @@ +package com.ruoyi.xkt.dto.advertRound.pc.newProd; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("PC 新品馆 为你推荐") +@Data +@Accessors(chain = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class PCNewRecommendDTO { + + @ApiModelProperty(value = "档口ID") + private String storeId; + @ApiModelProperty(value = "档口名称") + private String storeName; + @ApiModelProperty(value = "档口商品ID") + private String storeProdId; + @ApiModelProperty(value = "货号") + private String prodArtNum; + @ApiModelProperty(value = "主图") + private String mainPic; + @ApiModelProperty(value = "单价") + private String prodPrice; + @ApiModelProperty(value = "是否广告") + private Boolean advert; + @ApiModelProperty(value = "标签") + private List tags; + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewTopLeftBannerDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewTopLeftBannerDTO.java similarity index 93% rename from xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewTopLeftBannerDTO.java rename to xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewTopLeftBannerDTO.java index 9aada88c9..f3b022d69 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewTopLeftBannerDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewTopLeftBannerDTO.java @@ -1,4 +1,4 @@ -package com.ruoyi.xkt.dto.advertRound.pc.newArrival; +package com.ruoyi.xkt.dto.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewTopRightDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewTopRightDTO.java similarity index 93% rename from xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewTopRightDTO.java rename to xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewTopRightDTO.java index cfd34be00..d31d913f1 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newArrival/PCNewTopRightDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/advertRound/pc/newProd/PCNewTopRightDTO.java @@ -1,4 +1,4 @@ -package com.ruoyi.xkt.dto.advertRound.pc.newArrival; +package com.ruoyi.xkt.dto.advertRound.pc.newProd; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IWebsiteService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IWebsiteService.java index 1648a79e0..2c85aa625 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IWebsiteService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IWebsiteService.java @@ -5,9 +5,10 @@ import com.ruoyi.xkt.dto.advertRound.app.category.APPCateDTO; import com.ruoyi.xkt.dto.advertRound.app.index.*; import com.ruoyi.xkt.dto.advertRound.app.own.APPOwnGuessLikeDTO; import com.ruoyi.xkt.dto.advertRound.pc.PCDownloadDTO; +import com.ruoyi.xkt.dto.advertRound.pc.PCSearchDTO; import com.ruoyi.xkt.dto.advertRound.pc.PCUserCenterDTO; import com.ruoyi.xkt.dto.advertRound.pc.index.*; -import com.ruoyi.xkt.dto.advertRound.pc.newArrival.*; +import com.ruoyi.xkt.dto.advertRound.pc.newProd.*; import com.ruoyi.xkt.dto.advertRound.pc.store.PCStoreMidBannerDTO; import com.ruoyi.xkt.dto.advertRound.pc.store.PCStoreTopBannerDTO; import com.ruoyi.xkt.dto.advertRound.picSearch.PicSearchAdvertDTO; @@ -238,6 +239,22 @@ public interface IWebsiteService { * @param searchDTO 搜索入参 * @return List */ - Page pcIndexRecommendPage(IndexSearchDTO searchDTO); + Page pcIndexRecommendPage(IndexSearchDTO searchDTO) throws IOException; + + /** + * PC 新品馆 为你推荐 + * + * @param searchDTO 搜索入参 + * @return Page + */ + Page pcNewProdRecommendPage(IndexSearchDTO searchDTO) throws IOException; + + /** + * PC 搜索结果 + * + * @param searchDTO 搜索入参 + * @return Page + */ + Page psSearchPage(IndexSearchDTO searchDTO) throws IOException; } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/WebsiteServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/WebsiteServiceImpl.java index 09124e138..d036088bf 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/WebsiteServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/WebsiteServiceImpl.java @@ -18,9 +18,10 @@ import com.ruoyi.xkt.dto.advertRound.app.category.APPCateDTO; import com.ruoyi.xkt.dto.advertRound.app.index.*; import com.ruoyi.xkt.dto.advertRound.app.own.APPOwnGuessLikeDTO; import com.ruoyi.xkt.dto.advertRound.pc.PCDownloadDTO; +import com.ruoyi.xkt.dto.advertRound.pc.PCSearchDTO; import com.ruoyi.xkt.dto.advertRound.pc.PCUserCenterDTO; import com.ruoyi.xkt.dto.advertRound.pc.index.*; -import com.ruoyi.xkt.dto.advertRound.pc.newArrival.*; +import com.ruoyi.xkt.dto.advertRound.pc.newProd.*; import com.ruoyi.xkt.dto.advertRound.pc.store.PCStoreMidBannerDTO; import com.ruoyi.xkt.dto.advertRound.pc.store.PCStoreTopBannerDTO; import com.ruoyi.xkt.dto.advertRound.picSearch.PicSearchAdvertDTO; @@ -285,32 +286,134 @@ public class WebsiteServiceImpl implements IWebsiteService { */ @Override @Transactional(readOnly = true) - public Page pcIndexRecommendPage(IndexSearchDTO searchDTO) { - - return null; + public Page pcIndexRecommendPage(IndexSearchDTO searchDTO) throws IOException { + Page page = this.search(searchDTO); + // 筛选出真实的数据 + List realDataList = page.getList().stream() + .map(esProduct -> BeanUtil.toBean(esProduct, PCIndexRecommendDTO.class).setAdvert(Boolean.FALSE)).collect(Collectors.toList()); + // APP 只有第一页 有数据 其它页暂时没有广告 + if (searchDTO.getPageNum() > 1) { + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), realDataList); + } + // 从redis中获取数据 + List redisList = this.redisCache.getCacheObject(CacheConstants.PC_ADVERT + CacheConstants.PC_INDEX_RECOMMEND); + if (CollectionUtils.isNotEmpty(redisList)) { + // 推广数据排在最前面,其次才是真实的数据 + CollectionUtils.addAll(redisList, realDataList); + // 添加广告的数据(PC的规则是将所有的广告数据全部放到最前面展示,不用给广告打标) + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), redisList); + } else { + // 从数据库查首页 推荐商品 推广(精准搜索是否存在推广,不存在从已过期的数据中拉数据来凑数) + List advertRoundList = this.advertRoundMapper.selectList(new LambdaQueryWrapper() + .isNotNull(AdvertRound::getStoreId).eq(AdvertRound::getDelFlag, Constants.UNDELETED) + .eq(AdvertRound::getTypeId, AdType.PC_HOME_PRODUCT_LIST.getValue()) + .eq(AdvertRound::getLaunchStatus, AdLaunchStatus.LAUNCHING.getValue())); + if (CollectionUtils.isNotEmpty(advertRoundList)) { + List attrList = storeProdMapper.selectPriceAndMainPicAndTagList(advertRoundList.stream() + .map(x -> x.getProdIdStr().split(",")).flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList())); + attrList = attrList.stream().peek(x -> x.setTags(StringUtils.isNotBlank(x.getTagStr()) ? Arrays.asList(x.getTagStr().split(",")) : null)).collect(Collectors.toList()); + Map attrMap = attrList.stream().collect(Collectors.toMap(StoreProdPriceAndMainPicAndTagDTO::getStoreProdId, x -> x)); + List indexRecommendList = new ArrayList<>(); + advertRoundList.stream().forEach(x -> { + // 这里是一个档口上传多个档口商品,所以需要对prodIdStr的逗号进行分割 + List prodIdList = Arrays.asList(x.getProdIdStr().split(",")).stream().map(Long::parseLong).collect(Collectors.toList()); + prodIdList.forEach(storeProdId -> { + StoreProdPriceAndMainPicAndTagDTO attrDto = attrMap.get(storeProdId); + indexRecommendList.add(new PCIndexRecommendDTO().setAdvert(Boolean.TRUE).setStoreId(x.getStoreId().toString()) + .setStoreProdId(storeProdId.toString()).setTags(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getTags() : null) + .setStoreName(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getStoreName() : "") + .setProdPrice(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getMinPrice().toString() : null) + .setProdArtNum(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getProdArtNum() : "") + .setMainPic(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getMainPicUrl() : "")); + }); + }); + // 将indexRecommendList 顺序打乱,不然一个档口的数据在同一地方展示 + Collections.shuffle(indexRecommendList); + // 放到redis中 有效期1天 + this.redisCache.setCacheObject(CacheConstants.PC_ADVERT + CacheConstants.PC_INDEX_RECOMMEND, indexRecommendList, 1, TimeUnit.DAYS); + CollectionUtils.addAll(indexRecommendList, realDataList); + // 添加了广告的数据 + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), indexRecommendList); + } + } + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), realDataList); } /** - * 在指定位置插入广告数据到列表中 + * PC 新品馆 为你推荐 * - * @param dataList 原始数据列表 - * @param adverts 广告数据列表 - * @param positions 插入广告的位置集合 - * @param 数据类型 - * @return 合并后的列表 + * @param searchDTO 搜索入参 + * @return Page */ - public static List insertAdvertsIntoList(List dataList, List adverts, Set positions) { - List mergedList = new ArrayList<>(); - int dataIndex = 0; - int advertIndex = 0; - for (int i = 0; i < dataList.size() + positions.size(); i++) { - if (positions.contains(i) && advertIndex < adverts.size()) { - mergedList.add(adverts.get(advertIndex++)); - } else if (dataIndex < dataList.size()) { - mergedList.add(dataList.get(dataIndex++)); + @Override + public Page pcNewProdRecommendPage(IndexSearchDTO searchDTO) throws IOException { + Page page = this.search(searchDTO); + // 筛选出真实的数据 + List realDataList = page.getList().stream() + .map(esProduct -> BeanUtil.toBean(esProduct, PCNewRecommendDTO.class).setAdvert(Boolean.FALSE)).collect(Collectors.toList()); + // APP 只有第一页 有数据 其它页暂时没有广告 + if (searchDTO.getPageNum() > 1) { + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), realDataList); + } + // 从redis中获取数据 + List redisList = this.redisCache.getCacheObject(CacheConstants.PC_ADVERT + CacheConstants.PC_NEW_RECOMMEND); + if (CollectionUtils.isNotEmpty(redisList)) { + // 推广数据排在最前面,其次才是真实的数据 + CollectionUtils.addAll(redisList, realDataList); + // 添加广告的数据(PC的规则是将所有的广告数据全部放到最前面展示,不用给广告打标) + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), redisList); + } else { + // 从数据库查新品馆 推荐商品 推广(精准搜索是否存在推广,不存在从已过期的数据中拉数据来凑数) + List advertRoundList = this.advertRoundMapper.selectList(new LambdaQueryWrapper() + .isNotNull(AdvertRound::getStoreId).eq(AdvertRound::getDelFlag, Constants.UNDELETED) + .eq(AdvertRound::getTypeId, AdType.PC_NEW_PROD_PRODUCT_LIST.getValue()) + .eq(AdvertRound::getLaunchStatus, AdLaunchStatus.LAUNCHING.getValue())); + if (CollectionUtils.isNotEmpty(advertRoundList)) { + List attrList = storeProdMapper.selectPriceAndMainPicAndTagList(advertRoundList.stream() + .map(x -> x.getProdIdStr().split(",")).flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList())); + attrList = attrList.stream().peek(x -> x.setTags(StringUtils.isNotBlank(x.getTagStr()) ? Arrays.asList(x.getTagStr().split(",")) : null)).collect(Collectors.toList()); + Map attrMap = attrList.stream().collect(Collectors.toMap(StoreProdPriceAndMainPicAndTagDTO::getStoreProdId, x -> x)); + List newRecommendList = new ArrayList<>(); + advertRoundList.stream().forEach(x -> { + // 这里是一个档口上传多个档口商品,所以需要对prodIdStr的逗号进行分割 + List prodIdList = Arrays.asList(x.getProdIdStr().split(",")).stream().map(Long::parseLong).collect(Collectors.toList()); + prodIdList.forEach(storeProdId -> { + StoreProdPriceAndMainPicAndTagDTO attrDto = attrMap.get(storeProdId); + newRecommendList.add(new PCNewRecommendDTO().setAdvert(Boolean.TRUE).setStoreId(x.getStoreId().toString()) + .setStoreProdId(storeProdId.toString()).setTags(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getTags() : null) + .setStoreName(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getStoreName() : "") + .setProdPrice(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getMinPrice().toString() : null) + .setProdArtNum(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getProdArtNum() : "") + .setMainPic(ObjectUtils.isNotEmpty(attrDto) ? attrDto.getMainPicUrl() : "")); + }); + }); + // newRecommendList 顺序打乱,不然一个档口的数据在同一地方展示 + Collections.shuffle(newRecommendList); + // 放到redis中 有效期1天 + this.redisCache.setCacheObject(CacheConstants.PC_ADVERT + CacheConstants.PC_NEW_RECOMMEND, newRecommendList, 1, TimeUnit.DAYS); + CollectionUtils.addAll(newRecommendList, realDataList); + // 添加了广告的数据 + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), newRecommendList); } } - return mergedList; + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), realDataList); + } + + /** + * PC 搜索结果 + * + * @param searchDTO 搜索入参 + * @return Page + */ + @Override + @Transactional(readOnly = true) + public Page psSearchPage(IndexSearchDTO searchDTO) throws IOException { + Page page = this.search(searchDTO); + // 筛选出真实的数据 + List realDataList = page.getList().stream() + .map(esProduct -> BeanUtil.toBean(esProduct, PCSearchDTO.class).setAdvert(Boolean.FALSE)).collect(Collectors.toList()); + // 暂时没有广告 + return new Page<>(page.getPageNum(), page.getPageSize(), page.getPages(), page.getTotal(), realDataList); } @@ -1883,6 +1986,29 @@ public class WebsiteServiceImpl implements IWebsiteService { return firstChar - 'A' + 1; } + /** + * 在指定位置插入广告数据到列表中 + * + * @param dataList 原始数据列表 + * @param adverts 广告数据列表 + * @param positions 插入广告的位置集合 + * @param 数据类型 + * @return 合并后的列表 + */ + public static List insertAdvertsIntoList(List dataList, List adverts, Set positions) { + List mergedList = new ArrayList<>(); + int dataIndex = 0; + int advertIndex = 0; + for (int i = 0; i < dataList.size() + positions.size(); i++) { + if (positions.contains(i) && advertIndex < adverts.size()) { + mergedList.add(adverts.get(advertIndex++)); + } else if (dataIndex < dataList.size()) { + mergedList.add(dataList.get(dataIndex++)); + } + } + return mergedList; + } + private static FieldValue newFieldValue(String value) { return FieldValue.of(value); }