master:档口标签功能;

pull/1121/head
liujiang 2025-04-18 20:50:48 +08:00
parent 7ed9677076
commit 862b59bd64
15 changed files with 569 additions and 14 deletions

View File

@ -45,4 +45,10 @@ public class DailySaleController extends BaseController {
return R.ok();
}
@PostMapping("/store-tag")
public R dailyStoreTag(SysJob sysJob) {
task.dailyStoreTag();
return R.ok();
}
}

View File

@ -0,0 +1,50 @@
package com.ruoyi.quartz.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.XktBaseEntity;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* daily_sale
*
* @author ruoyi
* @date 2025-03-26
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@Builder
public class DailyStoreTag extends XktBaseEntity {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId
private Long id;
/**
* ID
*/
private Long storeId;
/**
*
*/
private Integer type;
/**
*
*/
private String tag;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date voucherDate;
}

View File

@ -0,0 +1,13 @@
package com.ruoyi.quartz.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.quartz.domain.DailyStoreTag;
/**
*
*
* @author ruoyi
*/
public interface DailyStoreTagMapper extends BaseMapper<DailyStoreTag> {
}

View File

@ -9,20 +9,23 @@ import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.quartz.domain.DailySale;
import com.ruoyi.quartz.domain.DailySaleCustomer;
import com.ruoyi.quartz.domain.DailySaleProduct;
import com.ruoyi.quartz.domain.DailyStoreTag;
import com.ruoyi.quartz.dto.DailySaleCusDTO;
import com.ruoyi.quartz.dto.DailySaleDTO;
import com.ruoyi.quartz.dto.DailySaleProdDTO;
import com.ruoyi.quartz.dto.WeekCateSaleDTO;
import com.ruoyi.quartz.mapper.DailySaleCustomerMapper;
import com.ruoyi.quartz.mapper.DailySaleMapper;
import com.ruoyi.quartz.mapper.DailySaleProductMapper;
import com.ruoyi.quartz.mapper.WeekCateSaleMapper;
import com.ruoyi.quartz.mapper.*;
import com.ruoyi.system.mapper.SysProductCategoryMapper;
import com.ruoyi.xkt.mapper.StoreProductStorageMapper;
import com.ruoyi.xkt.mapper.StoreSaleDetailMapper;
import com.ruoyi.xkt.mapper.StoreSaleMapper;
import com.ruoyi.xkt.domain.Store;
import com.ruoyi.xkt.domain.StoreProduct;
import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO;
import com.ruoyi.xkt.enums.EProductStatus;
import com.ruoyi.xkt.enums.StoreStatus;
import com.ruoyi.xkt.enums.StoreTagType;
import com.ruoyi.xkt.mapper.*;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -48,6 +51,12 @@ public class XktTask {
final DailySaleProductMapper dailySaleProdMapper;
final SysProductCategoryMapper prodCateMapper;
final WeekCateSaleMapper weekCateSaleMapper;
final DailyStoreTagMapper dailyStoreTagMapper;
final UserSubscriptionsMapper userSubsMapper;
final UserFavoritesMapper userFavMapper;
final StoreProductStockMapper stockMapper;
final StoreMapper storeMapper;
final StoreProductMapper storeProdMapper;
/**
* 1
@ -161,6 +170,232 @@ public class XktTask {
this.prodCateMapper.updateById(updateList);
}
/**
*
*/
@Transactional
public void dailyStoreTag() {
// 先删除所有的档口标签,保证数据唯一性
List<DailyStoreTag> existList = this.dailyStoreTagMapper.selectList(new LambdaQueryWrapper<DailyStoreTag>()
.eq(DailyStoreTag::getDelFlag, Constants.UNDELETED));
if (CollectionUtils.isNotEmpty(existList)) {
this.dailyStoreTagMapper.deleteByIds(existList.stream().map(DailyStoreTag::getId).collect(Collectors.toList()));
}
List<DailyStoreTag> tagList = new ArrayList<>();
// 根据LocalDate 获取当前日期前一天
final Date yesterday = Date.from(LocalDate.now().minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
// 使用LocalDate 获取当前日期前一天的前一周,并转为 Date 格式
final Date oneWeekAgo = Date.from(LocalDate.now().minusDays(8).atStartOfDay(ZoneId.systemDefault()).toInstant());
// 使用LocalDate 获取当前日期前一天的前一个月
final Date oneMonthAgo = Date.from(LocalDate.now().minusDays(1).minusMonths(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
// 1. 打 销量榜 标签,这个是最重要标签
this.tagSaleRank(yesterday, oneMonthAgo, tagList);
// 2. 打 爆款频出 标签根据销量前50的商品中 档口 先后顺序排列
this.tagHotRank(yesterday, oneMonthAgo, tagList);
// 3. 打 新款频出 标签,根据最近一周档口商品上新速度,先后排序
this.tagNewProd(yesterday, oneWeekAgo, tagList);
// 4. 打 关注榜 标签,根据关注量,进行排序
this.tagAttentionRank(yesterday, tagList);
// 5. 打 收藏榜 标签,根据收藏量,进行排序
this.tagCollectionRank(yesterday, tagList);
// 6. 打 库存榜 标签,根据库存量,进行排序
this.tagStockTag(yesterday, oneMonthAgo, tagList);
// 打基础标签
this.tagBasicTag(yesterday, oneWeekAgo, tagList);
if (CollectionUtils.isEmpty(tagList)) {
return;
}
this.dailyStoreTagMapper.insert(tagList);
}
private void tagBasicTag(Date yesterday, Date oneWeekAgo, List<DailyStoreTag> tagList) {
// 7. 打 经营年限 标签
List<Store> storeList = this.storeMapper.selectList(new LambdaQueryWrapper<Store>()
.eq(Store::getDelFlag, Constants.UNDELETED)
.in(Store::getStoreStatus, Arrays.asList(StoreStatus.TRIAL_PERIOD.getValue(), StoreStatus.FORMAL_USE.getValue())));
storeList.forEach(x -> {
final Integer operateYears = ObjectUtils.defaultIfNull(x.getOperateYears(), 0);
tagList.add(DailyStoreTag.builder().storeId(x.getId()).type(StoreTagType.OPERATE_YEARS_RANK.getValue())
.tag(operateYears < 3 ? operateYears + "年新店" : operateYears + "年老店").voucherDate(yesterday).build());
});
// 8. 打 七日上新 标签
List<StoreProduct> newProdList = this.storeProdMapper.selectList(new LambdaQueryWrapper<StoreProduct>()
.eq(StoreProduct::getDelFlag, Constants.UNDELETED)
.in(StoreProduct::getProdStatus, Collections.singletonList(EProductStatus.ON_SALE.getValue()))
.between(StoreProduct::getCreateTime, oneWeekAgo, yesterday));
if (CollectionUtils.isEmpty(newProdList)) {
return;
}
newProdList.stream().map(StoreProduct::getStoreId).distinct().forEach(x -> {
tagList.add(DailyStoreTag.builder().storeId(x).type(StoreTagType.SEVEN_DAY_NEW_RANK.getValue())
.tag("七日上新").voucherDate(yesterday).build());
});
}
private void tagStockTag(Date yesterday, Date oneMonthAgo, List<DailyStoreTag> tagList) {
List<DailyStoreTagDTO> top10List = this.stockMapper.selectTop10List(yesterday, oneMonthAgo);
if (CollectionUtils.isEmpty(top10List)) {
return;
}
tagList.addAll(top10List.stream().map(x -> DailyStoreTag.builder().storeId(x.getStoreId()).type(StoreTagType.STOCK_RANK.getValue())
.tag("库存充足").voucherDate(yesterday).build()).collect(Collectors.toList()));
}
private void tagCollectionRank(Date yesterday, List<DailyStoreTag> tagList) {
List<DailyStoreTagDTO> top10List = this.userFavMapper.selectTop10List();
if (CollectionUtils.isEmpty(top10List)) {
return;
}
// 提前计算公共值,减少重复计算
int collectionRankValue = StoreTagType.COLLECTION_RANK.getValue();
// 定义标签映射规则
Map<Integer, String> rankTags = new HashMap<>();
rankTags.put(0, "收藏榜第一");
rankTags.put(1, "收藏榜第二");
rankTags.put(2, "收藏榜前三");
rankTags.put(3, "收藏榜前五");
rankTags.put(4, "收藏榜前五");
// 遍历 top10List 并生成标签
for (int i = 0; i < Math.min(10, top10List.size()); i++) { // 确保不会超出 top10List 的大小
DailyStoreTagDTO storeTagDTO = top10List.get(i);
if (ObjectUtils.isNotEmpty(storeTagDTO)) {
String tag = rankTags.getOrDefault(i, "收藏榜前十");
tagList.add(DailyStoreTag.builder()
.storeId(storeTagDTO.getStoreId())
.type(collectionRankValue)
.tag(tag)
.voucherDate(yesterday)
.build());
}
}
/* if (ObjectUtils.isNotEmpty(top10List.get(0))) {
tagList.add(DailyStoreTag.builder().storeId(top10List.get(0).getStoreId()).type(StoreTagType.COLLECTION_RANK.getValue())
.tag("收藏榜第一").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(top10List.get(1))) {
tagList.add(DailyStoreTag.builder().storeId(top10List.get(1).getStoreId()).type(StoreTagType.COLLECTION_RANK.getValue())
.tag("收藏榜第二").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(top10List.get(2))) {
tagList.add(DailyStoreTag.builder().storeId(top10List.get(2).getStoreId()).type(StoreTagType.COLLECTION_RANK.getValue())
.tag("收藏榜前三").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(top10List.get(3))) {
tagList.add(DailyStoreTag.builder().storeId(top10List.get(3).getStoreId()).type(StoreTagType.COLLECTION_RANK.getValue())
.tag("收藏榜前五").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(top10List.get(4))) {
tagList.add(DailyStoreTag.builder().storeId(top10List.get(4).getStoreId()).type(StoreTagType.COLLECTION_RANK.getValue())
.tag("收藏榜前五").voucherDate(yesterday).build());
}
if (CollectionUtils.isNotEmpty(top10List.stream().skip(5).collect(Collectors.toList()))) {
tagList.addAll(top10List.stream().skip(5).map(x -> DailyStoreTag.builder().storeId(x.getStoreId())
.type(StoreTagType.COLLECTION_RANK.getValue()).tag("收藏榜前十").voucherDate(yesterday).build())
.collect(Collectors.toList()));
}*/
}
private void tagAttentionRank(Date yesterday, List<DailyStoreTag> tagList) {
List<DailyStoreTagDTO> top10List = this.userSubsMapper.selectTop10List();
if (CollectionUtils.isEmpty(top10List)) {
return;
}
// 提前计算公共值,减少重复计算
int attentionRankValue = StoreTagType.ATTENTION_RANK.getValue();
// 定义标签映射规则
Map<Integer, String> rankTags = new HashMap<>();
rankTags.put(0, "关注榜第一");
rankTags.put(1, "关注榜第二");
rankTags.put(2, "关注榜前三");
rankTags.put(3, "关注榜前五");
rankTags.put(4, "关注榜前五");
// 遍历 top10List 并生成标签
for (int i = 0; i < Math.min(top10List.size(), 10); i++) { // 确保不会超出 top10List 的大小
// 构建 DailyStoreTag 对象并添加到 tagList
tagList.add(DailyStoreTag.builder()
.storeId(top10List.get(i).getStoreId())
.type(attentionRankValue)
.tag(rankTags.getOrDefault(i, "关注榜前十"))
.voucherDate(yesterday)
.build());
}
}
private void tagNewProd(Date yesterday, Date oneWeekAgo, List<DailyStoreTag> tagList) {
List<DailyStoreTagDTO> top20List = this.saleDetailMapper.selectTop20List(yesterday, oneWeekAgo);
if (CollectionUtils.isEmpty(top20List)) {
return;
}
tagList.addAll(top20List.stream().map(DailyStoreTagDTO::getStoreId).distinct().map(storeId -> DailyStoreTag.builder()
.storeId(storeId).type(StoreTagType.NEW_PRODUCT.getValue()).tag("新款频出").voucherDate(yesterday).build())
.collect(Collectors.toList()));
}
private void tagHotRank(Date yesterday, Date oneMonthAgo, List<DailyStoreTag> tagList) {
List<DailyStoreTagDTO> top50List = this.saleDetailMapper.selectTop50List(yesterday, oneMonthAgo);
if (CollectionUtils.isEmpty(top50List)) {
return;
}
tagList.addAll(top50List.stream().map(DailyStoreTagDTO::getStoreId).distinct().map(storeId -> DailyStoreTag.builder()
.storeId(storeId).type(StoreTagType.HOT_RANK.getValue()).tag("爆款频出").voucherDate(yesterday).build())
.collect(Collectors.toList()));
}
private void tagSaleRank(Date yesterday, Date oneMonthAgo, List<DailyStoreTag> tagList) {
// 统计最近一月数据。排名最优先 1. 销量榜 规则销量排名第1打标销量第一 销量第2、第3打标销量前三 销量前5打标销量前五销量第6-10打标销量前十
List<DailyStoreTagDTO> saleTop10List = this.saleDetailMapper.selectTop10List(yesterday, oneMonthAgo);
if (CollectionUtils.isEmpty(saleTop10List)) {
return;
}
// 提前计算公共值,减少重复计算
int salesRankValue = StoreTagType.SALES_RANK.getValue();
// 定义标签映射规则
Map<Integer, String> rankTags = new HashMap<>();
rankTags.put(0, "销量第一");
rankTags.put(1, "销量第二");
rankTags.put(2, "销量前三");
rankTags.put(3, "销量前五");
rankTags.put(4, "销量前五");
// 遍历 saleTop10List 并生成标签
for (int i = 0; i < Math.min(10, saleTop10List.size()); i++) { // 确保不会超出 saleTop10List 的大小
DailyStoreTagDTO storeTagDTO = saleTop10List.get(i);
if (ObjectUtils.isNotEmpty(storeTagDTO)) {
String tag = rankTags.getOrDefault(i, "销量前十");
tagList.add(DailyStoreTag.builder()
.storeId(storeTagDTO.getStoreId())
.type(salesRankValue)
.tag(tag)
.voucherDate(yesterday)
.build());
}
}
/*if (ObjectUtils.isNotEmpty(saleTop10List.get(0))) {
tagList.add(DailyStoreTag.builder().storeId(saleTop10List.get(0).getStoreId()).type(StoreTagType.SALES_RANK.getValue())
.tag("销量第一").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(saleTop10List.get(1))) {
tagList.add(DailyStoreTag.builder().storeId(saleTop10List.get(1).getStoreId()).type(StoreTagType.SALES_RANK.getValue())
.tag("销量第二").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(saleTop10List.get(2))) {
tagList.add(DailyStoreTag.builder().storeId(saleTop10List.get(2).getStoreId()).type(StoreTagType.SALES_RANK.getValue())
.tag("销量前三").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(saleTop10List.get(3))) {
tagList.add(DailyStoreTag.builder().storeId(saleTop10List.get(3).getStoreId()).type(StoreTagType.SALES_RANK.getValue())
.tag("销量前五").voucherDate(yesterday).build());
}
if (ObjectUtils.isNotEmpty(saleTop10List.get(4))) {
tagList.add(DailyStoreTag.builder().storeId(saleTop10List.get(4).getStoreId()).type(StoreTagType.SALES_RANK.getValue())
.tag("销量前五").voucherDate(yesterday).build());
}
if (CollectionUtils.isNotEmpty(saleTop10List.stream().skip(5).collect(Collectors.toList()))) {
tagList.addAll(saleTop10List.stream().skip(5).map(x -> DailyStoreTag.builder().storeId(x.getStoreId()).type(StoreTagType.SALES_RANK.getValue())
.tag("销量前十").voucherDate(yesterday).build()).collect(Collectors.toList()));
}*/
}
}

View File

@ -9,7 +9,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* u user_subscriptions
* user_subscriptions
*
* @author ruoyi
* @date 2025-03-26

View File

@ -0,0 +1,26 @@
package com.ruoyi.xkt.dto.dailyStoreTag;
import lombok.Data;
/**
* @author liujiang
* @version v1.0
* @date 2025/4/16 23:06
*/
@Data
public class DailyStoreTagDTO {
/**
* ID
*/
private Long storeId;
/**
* ID
*/
private Long storeProdId;
/**
*
*/
private Integer count;
}

View File

@ -0,0 +1,49 @@
package com.ruoyi.xkt.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
*
* @author liujiang
* @date 2025-04-02 23:42
*/
@Getter
@AllArgsConstructor
public enum StoreTagType {
// 销量榜
SALES_RANK(1, "销量榜"),
// 爆款频出
HOT_RANK(2, "爆款频出"),
// 新款频出
NEW_PRODUCT(3, "新款频出"),
// 关注榜
ATTENTION_RANK(4, "关注榜"),
// 收藏榜
COLLECTION_RANK(5, "收藏榜"),
// 库存榜
STOCK_RANK(6, "库存榜"),
// 经营年限榜
OPERATE_YEARS_RANK(7, "经营年限榜"),
// 七日上新
SEVEN_DAY_NEW_RANK(8, "七日上新"),
// 基础信息榜
BASIC_RANK(100, "基础榜"),
;
private final Integer value;
private final String label;
public static StoreTagType of(Integer value) {
for (StoreTagType e : StoreTagType.values()) {
if (e.getValue().equals(value)) {
return e;
}
}
return null;
}
}

View File

@ -2,10 +2,13 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.StoreProductStock;
import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO;
import com.ruoyi.xkt.dto.storeProdStorage.StoreProdStoragePageResDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO;
import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
@ -70,4 +73,11 @@ public interface StoreProductStockMapper extends BaseMapper<StoreProductStock> {
*/
List<StoreProdStockPageResDTO> selectStockPage(StoreProdStockPageDTO pageDTO);
/**
* 10
* @param yesterday
* @param oneMonthAgo
* @return
*/
List<DailyStoreTagDTO> selectTop10List(@Param("yesterday") Date yesterday,@Param("oneMonthAgo") Date oneMonthAgo);
}

View File

@ -2,7 +2,10 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.StoreSaleDetail;
import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
@ -12,13 +15,14 @@ import java.util.List;
* @date 2025-03-26
*/
public interface StoreSaleDetailMapper extends BaseMapper<StoreSaleDetail> {
/**
*
*
* @param id
* @return
*/
public StoreSaleDetail selectStoreSaleDetailByStoreSaleDetailId(Long id);
StoreSaleDetail selectStoreSaleDetailByStoreSaleDetailId(Long id);
/**
*
@ -26,7 +30,7 @@ public interface StoreSaleDetailMapper extends BaseMapper<StoreSaleDetail> {
* @param storeSaleDetail
* @return
*/
public List<StoreSaleDetail> selectStoreSaleDetailList(StoreSaleDetail storeSaleDetail);
List<StoreSaleDetail> selectStoreSaleDetailList(StoreSaleDetail storeSaleDetail);
/**
*
@ -34,7 +38,7 @@ public interface StoreSaleDetailMapper extends BaseMapper<StoreSaleDetail> {
* @param storeSaleDetail
* @return
*/
public int insertStoreSaleDetail(StoreSaleDetail storeSaleDetail);
int insertStoreSaleDetail(StoreSaleDetail storeSaleDetail);
/**
*
@ -42,7 +46,7 @@ public interface StoreSaleDetailMapper extends BaseMapper<StoreSaleDetail> {
* @param storeSaleDetail
* @return
*/
public int updateStoreSaleDetail(StoreSaleDetail storeSaleDetail);
int updateStoreSaleDetail(StoreSaleDetail storeSaleDetail);
/**
*
@ -50,7 +54,7 @@ public interface StoreSaleDetailMapper extends BaseMapper<StoreSaleDetail> {
* @param id
* @return
*/
public int deleteStoreSaleDetailByStoreSaleDetailId(Long id);
int deleteStoreSaleDetailByStoreSaleDetailId(Long id);
/**
*
@ -58,5 +62,30 @@ public interface StoreSaleDetailMapper extends BaseMapper<StoreSaleDetail> {
* @param storeSaleDetailIds
* @return
*/
public int deleteStoreSaleDetailByStoreSaleDetailIds(Long[] storeSaleDetailIds);
int deleteStoreSaleDetailByStoreSaleDetailIds(Long[] storeSaleDetailIds);
/**
*
* @param yesterday
* @param oneMonthAgo 1
* @return List<DailyStoreTagDTO>
*/
List<DailyStoreTagDTO> selectTop10List(@Param("yesterday") Date yesterday, @Param("oneMonthAgo") Date oneMonthAgo);
/**
* 50
* @param yesterday
* @param oneMonthAgo 1
* @return List<DailyStoreTagDTO>
*/
List<DailyStoreTagDTO> selectTop50List(@Param("yesterday") Date yesterday, @Param("oneMonthAgo") Date oneMonthAgo);
/**
* 20
* @param yesterday
* @param oneWeekAgo
* @return List<DailyStoreTagDTO>
*/
List<DailyStoreTagDTO> selectTop20List(@Param("yesterday") Date yesterday, @Param("oneWeekAgo") Date oneWeekAgo);
}

View File

@ -2,6 +2,7 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.UserFavorites;
import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO;
import com.ruoyi.xkt.dto.userFavorite.UserFavoritePageDTO;
import com.ruoyi.xkt.dto.userFavorite.UserFavoritePageResDTO;
@ -14,10 +15,18 @@ import java.util.List;
* @date 2025-03-26
*/
public interface UserFavoritesMapper extends BaseMapper<UserFavorites> {
/**
*
* @param pageDTO
* @return List<UserFavoritePageResDTO>
*/
List<UserFavoritePageResDTO> selectUserFavPage(UserFavoritePageDTO pageDTO);
/**
* 100
* @return List<DailyStoreTagDTO>
*/
List<DailyStoreTagDTO> selectTop10List();
}

View File

@ -2,6 +2,7 @@ package com.ruoyi.xkt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.xkt.domain.UserSubscriptions;
import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO;
import com.ruoyi.xkt.dto.userSubscriptions.UserSubscPageResDTO;
import org.apache.ibatis.annotations.Param;
@ -24,4 +25,10 @@ public interface UserSubscriptionsMapper extends BaseMapper<UserSubscriptions> {
*/
List<UserSubscPageResDTO> selectUserSubscPage(@Param("userId") Long userId, @Param("storeName") String storeName);
/**
* 10
* @return
*/
List<DailyStoreTagDTO> selectTop10List();
}

View File

@ -173,4 +173,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
create_time DESC
</select>
<select id="selectTop10List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
sps.store_id,
SUM(
IFNULL(size_30, 0) +
IFNULL(size_31, 0) +
IFNULL(size_32, 0) +
IFNULL(size_33, 0) +
IFNULL(size_34, 0) +
IFNULL(size_35, 0) +
IFNULL(size_36, 0) +
IFNULL(size_37, 0) +
IFNULL(size_38, 0) +
IFNULL(size_39, 0) +
IFNULL(size_40, 0) +
IFNULL(size_41, 0) +
IFNULL(size_42, 0) +
IFNULL(size_43, 0)
) AS count
FROM
store_product_stock sps
WHERE
sps.del_flag = 0
AND sps.create_time &gt;= #{oneMonthAgo}
AND sps.create_time &lt;= #{yesterday}
GROUP BY
sps.store_id
ORDER BY
count DESC
LIMIT 10
</select>
</mapper>

View File

@ -118,4 +118,63 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="selectTop10List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
ss.store_id,
SUM(IFNULL( ssd.quantity, 0 )) AS count
FROM
store_sale_detail ssd
JOIN store_sale ss ON ssd.store_sale_id = ss.id
WHERE
ssd.del_flag = 0
AND ssd.sale_type = 1
AND ssd.voucher_date between #{oneMonthAgo} AND #{yesterday}
GROUP BY
ss.store_id
ORDER BY
SUM(IFNULL( ssd.quantity, 0 )) DESC
LIMIT 10
</select>
<select id="selectTop50List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
ss.store_id,
ssd.store_prod_id,
SUM(IFNULL( ssd.quantity, 0 )) AS count
FROM
store_sale_detail ssd
JOIN store_sale ss ON ssd.store_sale_id = ss.id
WHERE
ssd.del_flag = 0
AND ssd.sale_type = 1
AND ssd.voucher_date between #{oneMonthAgo} AND #{yesterday}
GROUP BY
ss.store_id,
ssd.store_prod_id
ORDER BY
count DESC
LIMIT 50
</select>
<select id="selectTop20List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
sp.store_id,
SUM( id ) AS count
FROM
store_product sp
WHERE
sp.del_flag = 0
AND sp.create_time between #{oneWeekAgo} AND #{yesterday}
GROUP BY
sp.store_id
ORDER BY
count DESC
LIMIT 20
</select>
</mapper>

View File

@ -35,5 +35,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
uf.del_flag = 0 AND uf.user_id = #{userId}
</select>
<select id="selectTop10List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
uf.store_id,
COUNT( uf.id ) AS count
FROM
user_favorites uf
WHERE
uf.del_flag = 0
GROUP BY
uf.store_id
ORDER BY
count DESC
LIMIT 10
</select>
</mapper>

View File

@ -34,5 +34,19 @@
<if test="storeName != null and storeName != ''">and s.store_name = #{storeName}</if>
</select>
<select id="selectTop10List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
us.store_id,
SUM( us.id ) AS count
FROM
user_subscriptions us
WHERE
us.del_flag = 0
GROUP BY
us.store_id
ORDER BY
count DESC
</select>
</mapper>