master:档口推荐商品功能完善;

pull/1121/head
liujiang 2025-10-04 23:17:12 +08:00
parent 5338559de1
commit f8e9517b9a
4 changed files with 85 additions and 1 deletions

View File

@ -184,6 +184,32 @@
count DESC;
</select>
<select id="selectStoreDefaultRecommendList" resultType="com.ruoyi.xkt.dto.storeHomepage.StoreRecommendResDTO">
SELECT
dsp.store_id,
s.store_name,
dsp.store_prod_id,
dsp.prod_art_num,
sp.prod_title,
FALSE AS advert,
MIN( spcs.price ) AS minPrice
FROM
daily_sale_product dsp
JOIN store s ON dsp.store_id = s.id
JOIN store_product sp ON dsp.store_prod_id = sp.id
JOIN store_product_color_size spcs ON dsp.store_prod_id = spcs.store_prod_id AND spcs.del_flag = 0
WHERE
dsp.del_flag = 0
AND dsp.store_id = #{storeId}
AND dsp.voucher_date BETWEEN #{fiveDaysAgo} AND #{yesterday}
GROUP BY
dsp.store_id,
dsp.store_prod_id,
dsp.prod_art_num
ORDER BY
SUM( dsp.sale_num ) DESC
LIMIT 10
</select>

View File

@ -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<DailySaleProduct> {
*/
List<DailyStoreProdSaleDTO> prodCateSaleTop50List(@Param("oneMonthAgo") Date oneMonthAgo, @Param("yesterday") Date yesterday);
/**
* 10
*
* @param storeId ID
* @param fiveDaysAgo 5
* @param yesterday
* @return
*/
List<StoreRecommendResDTO> selectStoreDefaultRecommendList(@Param("storeId") Long storeId, @Param("fiveDaysAgo") Date fiveDaysAgo, @Param("yesterday") Date yesterday);
}

View File

@ -21,6 +21,11 @@ import java.util.List;
@Repository
public interface StoreProductFileMapper extends BaseMapper<StoreProductFile> {
/**
* ID
*
* @param storeProdId ID
*/
void updateDelFlagByStoreProdId(Long storeProdId);
/**

View File

@ -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<StoreRecommendResDTO> dailySaleTop10ProdList = this.dailySaleProdMapper.selectStoreDefaultRecommendList(storeId, fiveDaysAgo, yesterday);
return CollectionUtils.isEmpty(dailySaleTop10ProdList) ? Collections.emptyList() : this.getDefaultRecommendList(storeId, dailySaleTop10ProdList);
}
// 商品价格、主图、标签等
List<StoreProdPriceAndMainPicAndTagDTO> attrList = this.storeProdMapper.selectPriceAndMainPicAndTagList(recommendList.stream()
@ -183,6 +190,42 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService {
.collect(Collectors.toList());
}
/**
*
*
* @param storeId ID
* @param dailySaleTop10ProdList 510
* @return List<StoreRecommendResDTO>
*/
private List<StoreRecommendResDTO> getDefaultRecommendList(Long storeId, List<StoreRecommendResDTO> dailySaleTop10ProdList) {
// 获取商品标签
List<DailyProdTag> prodTagList = this.dailyProdTagMapper.selectList(new LambdaQueryWrapper<DailyProdTag>()
.eq(DailyProdTag::getStoreId, storeId).eq(DailyProdTag::getDelFlag, Constants.UNDELETED)
.in(DailyProdTag::getStoreProdId, dailySaleTop10ProdList.stream().map(StoreRecommendResDTO::getStoreProdId).collect(Collectors.toList())));
Map<String, List<String>> tagMap = CollectionUtils.isEmpty(prodTagList) ? new HashMap<>()
: prodTagList.stream().collect(Collectors.groupingBy(x -> x.getStoreProdId().toString(), Collectors.mapping(DailyProdTag::getTag, Collectors.toList())));
// 获取商品主图及视频等
List<StoreProductFile> prodFileList = this.prodFileMapper.selectList(new LambdaQueryWrapper<StoreProductFile>()
.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<String, Long> mainPicMap = prodFileList.stream().filter(x -> Objects.equals(x.getFileType(), FileType.MAIN_PIC.getValue()))
.collect(Collectors.toMap(x -> x.getStoreProdId().toString(), StoreProductFile::getFileId));
// 档口商品视频map
Map<String, Long> videoMap = prodFileList.stream().filter(x -> Objects.equals(x.getFileType(), FileType.MAIN_PIC_VIDEO.getValue()))
.collect(Collectors.toMap(x -> x.getStoreProdId().toString(), StoreProductFile::getFileId));
List<SysFile> fileList = this.fileMapper.selectList(new LambdaQueryWrapper<SysFile>().eq(SysFile::getDelFlag, Constants.UNDELETED)
.in(SysFile::getId, prodFileList.stream().map(StoreProductFile::getFileId).collect(Collectors.toList())));
Map<Long, String> 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;
}
/**
*
*