diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/DailySaleProductMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/DailySaleProductMapper.xml index 1cb03b7e3..b1605b729 100644 --- a/ruoyi-quartz/src/main/resources/mapper/quartz/DailySaleProductMapper.xml +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/DailySaleProductMapper.xml @@ -184,6 +184,32 @@ count DESC; + diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/DailySaleProductMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/DailySaleProductMapper.java index dff8814b3..f09ddb8b7 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/DailySaleProductMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/DailySaleProductMapper.java @@ -7,6 +7,7 @@ import com.ruoyi.xkt.dto.dailySale.DailySaleProdDTO; import com.ruoyi.xkt.dto.dailyStoreProd.DailyStoreProdSaleDTO; import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO; import com.ruoyi.xkt.dto.store.StoreIndexSaleTop10ResDTO; +import com.ruoyi.xkt.dto.storeHomepage.StoreRecommendResDTO; import org.apache.ibatis.annotations.Param; import java.util.Date; @@ -93,4 +94,13 @@ public interface DailySaleProductMapper extends BaseMapper { */ List prodCateSaleTop50List(@Param("oneMonthAgo") Date oneMonthAgo, @Param("yesterday") Date yesterday); + /** + * 获取当前档口销量最好的10件商品作为默认的推荐商品 + * + * @param storeId 档口ID + * @param fiveDaysAgo 5天前 + * @param yesterday 昨天 + * @return + */ + List selectStoreDefaultRecommendList(@Param("storeId") Long storeId, @Param("fiveDaysAgo") Date fiveDaysAgo, @Param("yesterday") Date yesterday); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java index 7ac9f4e2a..161a5bc47 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java @@ -21,6 +21,11 @@ import java.util.List; @Repository public interface StoreProductFileMapper extends BaseMapper { + /** + * 根据商品ID删除所有文件 + * + * @param storeProdId 商品ID + */ void updateDelFlagByStoreProdId(Long storeProdId); /** 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 bc06ee14e..09d745fe2 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 @@ -23,6 +23,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -47,6 +48,8 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { final StoreProductFileMapper prodFileMapper; final StoreProductCategoryAttributeMapper prodCateAttrMapper; final StoreCertificateMapper storeCertMapper; + final DailySaleProductMapper dailySaleProdMapper; + final DailyProdTagMapper dailyProdTagMapper; /** * 获取档口首页各个部分的图信息 @@ -164,7 +167,11 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { .eq(StoreHomepage::getStoreId, storeId).eq(StoreHomepage::getDelFlag, Constants.UNDELETED) .eq(StoreHomepage::getFileType, HomepageType.STORE_RECOMMENDED.getValue())); if (CollectionUtils.isEmpty(recommendList)) { - return Collections.emptyList(); + final Date yesterday = java.sql.Date.valueOf(LocalDate.now().minusDays(1)); + final Date fiveDaysAgo = java.sql.Date.valueOf(LocalDate.now().minusDays(6)); + // 如果档口未设置推荐商品,则筛选销量最好的10条商品 + List dailySaleTop10ProdList = this.dailySaleProdMapper.selectStoreDefaultRecommendList(storeId, fiveDaysAgo, yesterday); + return CollectionUtils.isEmpty(dailySaleTop10ProdList) ? Collections.emptyList() : this.getDefaultRecommendList(storeId, dailySaleTop10ProdList); } // 商品价格、主图、标签等 List attrList = this.storeProdMapper.selectPriceAndMainPicAndTagList(recommendList.stream() @@ -183,6 +190,42 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { .collect(Collectors.toList()); } + /** + * 获取默认的推荐推荐商品 + * + * @param storeId 档口ID + * @param dailySaleTop10ProdList 近5日销量排名前10的商品 + * @return List + */ + private List getDefaultRecommendList(Long storeId, List dailySaleTop10ProdList) { + // 获取商品标签 + List prodTagList = this.dailyProdTagMapper.selectList(new LambdaQueryWrapper() + .eq(DailyProdTag::getStoreId, storeId).eq(DailyProdTag::getDelFlag, Constants.UNDELETED) + .in(DailyProdTag::getStoreProdId, dailySaleTop10ProdList.stream().map(StoreRecommendResDTO::getStoreProdId).collect(Collectors.toList()))); + Map> tagMap = CollectionUtils.isEmpty(prodTagList) ? new HashMap<>() + : prodTagList.stream().collect(Collectors.groupingBy(x -> x.getStoreProdId().toString(), Collectors.mapping(DailyProdTag::getTag, Collectors.toList()))); + // 获取商品主图及视频等 + List prodFileList = this.prodFileMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductFile::getStoreId, storeId).eq(StoreProductFile::getDelFlag, Constants.UNDELETED).eq(StoreProductFile::getOrderNum, ORDER_NUM_1) + .in(StoreProductFile::getStoreProdId, dailySaleTop10ProdList.stream().map(StoreRecommendResDTO::getStoreProdId).collect(Collectors.toList())) + .in(StoreProductFile::getFileType, Arrays.asList(FileType.MAIN_PIC.getValue(), FileType.MAIN_PIC_VIDEO.getValue()))); + // 档口商品主图map + Map mainPicMap = prodFileList.stream().filter(x -> Objects.equals(x.getFileType(), FileType.MAIN_PIC.getValue())) + .collect(Collectors.toMap(x -> x.getStoreProdId().toString(), StoreProductFile::getFileId)); + // 档口商品视频map + Map videoMap = prodFileList.stream().filter(x -> Objects.equals(x.getFileType(), FileType.MAIN_PIC_VIDEO.getValue())) + .collect(Collectors.toMap(x -> x.getStoreProdId().toString(), StoreProductFile::getFileId)); + List fileList = this.fileMapper.selectList(new LambdaQueryWrapper().eq(SysFile::getDelFlag, Constants.UNDELETED) + .in(SysFile::getId, prodFileList.stream().map(StoreProductFile::getFileId).collect(Collectors.toList()))); + Map fileMap = CollectionUtils.isEmpty(fileList) ? new HashMap<>() : fileList.stream().collect(Collectors.toMap(SysFile::getId, SysFile::getFileUrl)); + dailySaleTop10ProdList.forEach(x -> { + x.setTags(tagMap.getOrDefault(x.getStoreProdId(), new ArrayList<>())); + x.setMainPicUrl(fileMap.get(mainPicMap.get(x.getStoreProdId()))); + x.setHasVideo(videoMap.containsKey(x.getStoreProdId())); + }); + return dailySaleTop10ProdList; + } + /** * 档口首页模板一返回数据 *