This commit is contained in:
777
2025-09-26 15:40:59 +08:00
parent 0a3889a5cb
commit e2a03924a9
17 changed files with 391 additions and 4 deletions

View File

@@ -1,2 +1,21 @@
ALTER TABLE cai_anchor ALTER TABLE cai_anchor
ADD COLUMN `anchor_total_coin` bigint(20) default 0 COMMENT '主播总收入'; ADD COLUMN `anchor_total_coin` bigint(20) default 0 COMMENT '主播总收入';
CREATE TABLE `cai_love_rank_today`
(
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`data_type` tinyint NOT NULL default 2 COMMENT '日期类型 1-日榜 2-周榜 3-月榜',
`rank_time` date not null comment '榜单期数',
`begin_rank_time` date null comment '开始时间',
`end_rank_time` date null comment '结束时间',
`num` bigint(20) NOT NULL DEFAULT 0 COMMENT '数值',
`user_id` bigint(20) not null comment '用户ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_date` (`rank_time`, `num`) USING BTREE,
INDEX `idx_user_id` (`user_id`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci
ROW_FORMAT = DYNAMIC COMMENT ='魅力榜单实时数据';

View File

@@ -15,6 +15,7 @@ import com.ruoyi.cai.dto.app.vo.user.UserInfoVo;
import com.ruoyi.cai.dto.app.vo.user.UserListVo; import com.ruoyi.cai.dto.app.vo.user.UserListVo;
import com.ruoyi.cai.dto.app.vo.user.UserMinInfoVo; import com.ruoyi.cai.dto.app.vo.user.UserMinInfoVo;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.enums.home.AnchorListQueryTypeEnum;
import com.ruoyi.cai.manager.HomeManager; import com.ruoyi.cai.manager.HomeManager;
import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
@@ -53,6 +54,8 @@ public class IndexController {
private HomeManager homeManager; private HomeManager homeManager;
@Autowired @Autowired
private SystemConfigManager systemConfigManager; private SystemConfigManager systemConfigManager;
@Autowired
private LoveRankTodayService loveRankTodayService;
@GetMapping("/config") @GetMapping("/config")
@Operation(summary = "获取APP系统核心参数") @Operation(summary = "获取APP系统核心参数")
@@ -103,7 +106,12 @@ public class IndexController {
@Operation(summary = "首页查询主播接口-分页") @Operation(summary = "首页查询主播接口-分页")
@Log(title = "首页查询主播接口V2", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false) @Log(title = "首页查询主播接口V2", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false)
public R<List<AnchorListVo>> anchorPageV2(PageQuery page, AnchorListQuery query){ public R<List<AnchorListVo>> anchorPageV2(PageQuery page, AnchorListQuery query){
List<AnchorListVo> home = homeManager.getHomeV2(page, query); List<AnchorListVo> home;
if(AnchorListQueryTypeEnum.LOVE.getCode().equals(query.getType())){
home = loveRankTodayService.homePage(page, query);
}else{
home = homeManager.getHomeV2(page, query);
}
home.forEach(i -> { home.forEach(i -> {
if(i.getServiceTime() != null){ if(i.getServiceTime() != null){
i.setServiceTime(i.getServiceTime()/60); i.setServiceTime(i.getServiceTime()/60);

View File

@@ -5,11 +5,13 @@ import com.ruoyi.cai.dto.app.RankIdReq;
import com.ruoyi.cai.dto.app.vo.anchor.AnchorStatusDTO; import com.ruoyi.cai.dto.app.vo.anchor.AnchorStatusDTO;
import com.ruoyi.cai.dto.app.vo.rank.RankNodeInvite; import com.ruoyi.cai.dto.app.vo.rank.RankNodeInvite;
import com.ruoyi.cai.dto.app.vo.rank.RankNodeLove; import com.ruoyi.cai.dto.app.vo.rank.RankNodeLove;
import com.ruoyi.cai.dto.app.vo.rank.RankNodeRecharge;
import com.ruoyi.cai.dto.app.vo.rank.RankRemark; import com.ruoyi.cai.dto.app.vo.rank.RankRemark;
import com.ruoyi.cai.enums.GenderEnum; import com.ruoyi.cai.enums.GenderEnum;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.manager.AwardManager; import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.mapper.AnchorMapper; import com.ruoyi.cai.mapper.AnchorMapper;
import com.ruoyi.cai.rank.RankManager; import com.ruoyi.cai.rank.RankManager;
import com.ruoyi.cai.rank.RankNode; import com.ruoyi.cai.rank.RankNode;
@@ -31,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -81,6 +84,40 @@ public class RankAppController {
return R.ok(); return R.ok();
} }
@Resource
private AccountMapper accountMapper;
@GetMapping("/recharge")
@Operation(summary = "土豪榜")
@Log(title = "土豪榜单查询", businessType = BusinessType.OTHER, isPrintResponseData = true, isSaveDb = false)
public R<List<RankNodeRecharge>> rechargeRank(
@Parameter(description = "类型 1-上周 2-昨日 3-日榜 4-周榜 5-月榜 6-总榜") Integer type){
if(type == null){
return R.ok(Collections.emptyList());
}
Long userId = LoginHelper.getUserId();
long lastLove = 0;
List<RankNodeRecharge> rankNodeList = accountMapper.rankTotalPay(30);
for (int i = 0; i < rankNodeList.size(); i++) {
RankNodeRecharge rankNodeRecharge = rankNodeList.get(i);
rankNodeRecharge.setValue(rankNodeRecharge.getMoney().longValue());
if(!rankNodeRecharge.getUserId().equals(userId)){
rankNodeRecharge.setAvatar(GenderEnum.WOMEN.getDefaultAvatar());
rankNodeRecharge.setNickname(minNickname(rankNodeRecharge.getNickname()));
rankNodeRecharge.setUserId(null);
}
if(i == 0){
rankNodeRecharge.setDiffLastValue(0L);
}else{
rankNodeRecharge.setDiffLastValue(lastLove - rankNodeRecharge.getValue());
}
}
return R.ok(rankNodeList);
}
@GetMapping("/love") @GetMapping("/love")
@Operation(summary = "魅力榜") @Operation(summary = "魅力榜")
@Log(title = "魅力榜单查询", businessType = BusinessType.OTHER, isPrintResponseData = true, isSaveDb = false) @Log(title = "魅力榜单查询", businessType = BusinessType.OTHER, isPrintResponseData = true, isSaveDb = false)

View File

@@ -0,0 +1,55 @@
package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 魅力榜单实时数据
*/
@Data
@TableName("cai_love_rank_today")
public class LoveRankToday implements Serializable {
@TableId(value = "id",type = IdType.AUTO)
private Long id;
/**
* 日期类型 1-日榜 2-周榜 3-月榜
*/
private Integer dataType;
/**
* 榜单期数
*/
private LocalDate rankTime;
/**
* 开始时间
*/
private LocalDate beginRankTime;
/**
* 结束时间
*/
private LocalDate endRankTime;
/**
* 数值
*/
private Long num;
/**
* 用户ID
*/
private Long userId;
/**
* 创建时间
*/
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,22 @@
package com.ruoyi.cai.dto.app.vo.rank;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RankNodeRecharge {
@Schema(description = "用户ID只有当前用户才有数据其他用户因为保密问题没有")
private Long userId;
@Schema(description = "头像")
private String avatar;
@Schema(description = "昵称")
private String nickname;
private BigDecimal money;
@Schema(description = "数值")
private Long value;
@Schema(description = "距离上一名差距")
private Long diffLastValue;
}

View File

@@ -7,6 +7,7 @@ import lombok.Getter;
public enum RankTypeEnum { public enum RankTypeEnum {
LOVE(1,"魅力榜"), LOVE(1,"魅力榜"),
INVITE(2,"邀请榜"), INVITE(2,"邀请榜"),
PAY(3,"土豪榜"),
; ;
private final Integer code; private final Integer code;
private final String text; private final String text;

View File

@@ -183,7 +183,7 @@ public class ConsumerManager {
accountTotalManager.incsTrdPayIncomeCoin(resp.getUserId(), resp.getPrice()); accountTotalManager.incsTrdPayIncomeCoin(resp.getUserId(), resp.getPrice());
} }
}catch (Exception e){ }catch (Exception e){
log.error("主播消费记录失败-充值",e); log.error("用户充值记录失败-充值",e);
} }
try { try {
Account account = accountService.getByUserId(resp.getUserId()); Account account = accountService.getByUserId(resp.getUserId());

View File

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.Account; import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.dto.admin.vo.AccountAdminVo; import com.ruoyi.cai.dto.admin.vo.AccountAdminVo;
import com.ruoyi.cai.dto.app.vo.rank.RankNodeRecharge;
import com.ruoyi.cai.rank.RankNode;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* 用户账户Mapper接口 * 用户账户Mapper接口
@@ -38,4 +41,6 @@ public interface AccountMapper extends BaseMapper<Account> {
void incsPayTotal(@Param("userId") Long userId, @Param("rechargeCoin") Long rechargeCoin, @Param("price") BigDecimal price); void incsPayTotal(@Param("userId") Long userId, @Param("rechargeCoin") Long rechargeCoin, @Param("price") BigDecimal price);
void incsTrdPayTotal(@Param("userId") Long userId, @Param("price") BigDecimal price); void incsTrdPayTotal(@Param("userId") Long userId, @Param("price") BigDecimal price);
List<RankNodeRecharge> rankTotalPay(@Param("limit") int limit);
} }

View File

@@ -0,0 +1,17 @@
package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.LoveRankToday;
import com.ruoyi.cai.dto.app.query.index.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
public interface LoveRankTodayMapper extends BaseMapper<LoveRankToday> {
void insRank(@Param("id") Long id, @Param("value") Long value);
Page<AnchorListVo> homePage(Page<Object> build, @Param("query") AnchorListQuery query, @Param("monday") LocalDate monday);
}

View File

@@ -1,9 +1,12 @@
package com.ruoyi.cai.mq.handle; package com.ruoyi.cai.mq.handle;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ruoyi.cai.enums.rank.RankDataTypeEnum;
import com.ruoyi.cai.enums.rank.RankTypeEnum;
import com.ruoyi.cai.mq.CommonConsumerEnum; import com.ruoyi.cai.mq.CommonConsumerEnum;
import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO; import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO;
import com.ruoyi.cai.rank.RankManager; import com.ruoyi.cai.rank.RankManager;
import com.ruoyi.cai.service.LoveRankTodayService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -14,10 +17,15 @@ public class RankNotifyHandle implements IHandle {
@Autowired @Autowired
private RankManager rankManager; private RankManager rankManager;
@Autowired
private LoveRankTodayService loveRankTodayService;
@Override @Override
public void run(String message) { public void run(String message) {
RankNotifyDTO rank = JSON.parseObject(message, RankNotifyDTO.class); RankNotifyDTO rank = JSON.parseObject(message, RankNotifyDTO.class);
rankManager.addRank(rank); rankManager.addRank(rank);
if(RankTypeEnum.LOVE.getCode().equals(rank.getRankType())){
loveRankTodayService.addRank(rank);
}
} }
@Override @Override

View File

@@ -14,12 +14,14 @@ import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiDateUtil; import com.ruoyi.cai.util.CaiDateUtil;
import com.ruoyi.cai.util.CaiNumUtil; import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.cai.ws.constant.RedisConstant;
import com.ruoyi.yunxin.YunExecutor; import com.ruoyi.yunxin.YunExecutor;
import com.ruoyi.yunxin.Yunxin; import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.yunxin.resp.SendMsgResp; import com.ruoyi.yunxin.resp.SendMsgResp;
import com.ruoyi.yunxin.resp.YxCommonR; import com.ruoyi.yunxin.resp.YxCommonR;
import com.ruoyi.yunxin.resp.YxDataR; import com.ruoyi.yunxin.resp.YxDataR;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -43,6 +45,8 @@ public class YunxinHttpService {
private CaiProperties caiProperties; private CaiProperties caiProperties;
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired
private RedissonClient redissonClient;
/** /**
* 注册赠送消息 * 注册赠送消息
@@ -247,14 +251,34 @@ public class YunxinHttpService {
}); });
} }
private boolean checkFollowedSendMessage(Long toUid,
User followUser){
String key = String.format(RedisConstant.START_SEND_MESSAGE_CACHE, toUid);
Object o = redissonClient.getMap(key).get(followUser.getId());
return o != null;
}
private void setFollowedSendMessage(Long toUid,User followUser){
String key = String.format(RedisConstant.START_SEND_MESSAGE_CACHE, toUid);
redissonClient.getMap(key).put(followUser.getId(),1);
}
/** /**
* 关注发送消息 * 关注发送消息
* @param toUid * @param toUid 接收消息的用户
*/ */
public void followedSendMessage(Long toUid, public void followedSendMessage(Long toUid,
User followUser, User followUser,
LocalDateTime followTime){ LocalDateTime followTime){
YunExecutor.YUN_EXECUTOR.execute(() -> { YunExecutor.YUN_EXECUTOR.execute(() -> {
// 检测是否发送过通知
boolean checked = checkFollowedSendMessage(toUid, followUser);
if(checked){
log.error("用户已经发送过关注通知,无需再次发送 被关注人id:{}, 关注人id{} 昵称:{} 编号:{}",
toUid, followUser.getId(), followUser.getNickname(),followUser.getUsercode());
return;
}
SendFollowNoticeData data = new SendFollowNoticeData(); SendFollowNoticeData data = new SendFollowNoticeData();
data.setUserid(followUser.getId()); data.setUserid(followUser.getId());
data.setNickname(followUser.getNickname()); data.setNickname(followUser.getNickname());
@@ -268,6 +292,7 @@ public class YunxinHttpService {
if(r == null || !r.isSuccess()){ if(r == null || !r.isSuccess()){
log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r)); log.error("云信发送失败【sendCallAsync】r={}", JSON.toJSONString(r));
} }
this.setFollowedSendMessage(toUid, followUser);
}); });
} }

View File

@@ -0,0 +1,16 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.LoveRankToday;
import com.ruoyi.cai.dto.app.query.index.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO;
import com.ruoyi.common.core.domain.PageQuery;
import java.util.List;
public interface LoveRankTodayService extends IService<LoveRankToday> {
List<AnchorListVo> homePage(PageQuery pageQuery, AnchorListQuery query);
void addRank(RankNotifyDTO rank);
}

View File

@@ -0,0 +1,93 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.Anchor;
import com.ruoyi.cai.domain.LoveRankToday;
import com.ruoyi.cai.dto.app.query.index.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.cai.enums.rank.RankDataTypeEnum;
import com.ruoyi.cai.mapper.LoveRankTodayMapper;
import com.ruoyi.cai.mq.handle.dto.RankNotifyDTO;
import com.ruoyi.cai.service.AnchorService;
import com.ruoyi.cai.service.LoveRankTodayService;
import com.ruoyi.cai.util.IdLockManager;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.helper.LoginHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
@Service
public class LoveRankTodayServiceImpl extends ServiceImpl<LoveRankTodayMapper, LoveRankToday> implements LoveRankTodayService {
@Resource
private LoveRankTodayMapper loveRankTodayMapper;
@Autowired
private AnchorService anchorService;
@Override
public List<AnchorListVo> homePage(PageQuery pageQuery, AnchorListQuery query){
if(pageQuery.checkPageNum(20)){
return Collections.emptyList();
}
pageQuery.resetPageSize();
Anchor anchor = anchorService.getByUserId(LoginHelper.getUserId());
if(anchor != null && anchor.getHiddenStatus() == 1){
query.setHiddenStatusUser(true);
}
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取本周的周一(如果今天是周一,则返回今天)
LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
Page<AnchorListVo> page = baseMapper.homePage(pageQuery.build(), query,monday);
return page.getRecords();
}
@Override
public void addRank(RankNotifyDTO rank) {
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取本周的周一(如果今天是周一,则返回今天)
LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 获取本周的周日(如果今天是周日,则返回今天)
LocalDate sunday = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
LoveRankToday one = this.getOne(Wrappers.lambdaQuery(LoveRankToday.class)
.eq(LoveRankToday::getUserId, rank.getUserId())
.eq(LoveRankToday::getDataType, RankDataTypeEnum.WEEK.getCode())
.eq(LoveRankToday::getBeginRankTime, monday)
.last("limit 1"));
if(one == null){
AtomicReference<LoveRankToday> atomicReference = new AtomicReference<>();
IdLockManager.executeWithLock(String.valueOf(rank.getUserId()), () -> {
LoveRankToday rankData = this.getOne(Wrappers.lambdaQuery(LoveRankToday.class)
.eq(LoveRankToday::getUserId, rank.getUserId())
.eq(LoveRankToday::getDataType, RankDataTypeEnum.WEEK.getCode())
.eq(LoveRankToday::getBeginRankTime, monday)
.last("limit 1"));
if(rankData == null){
LoveRankToday saveData = new LoveRankToday();
saveData.setDataType(RankDataTypeEnum.WEEK.getCode());
saveData.setRankTime(monday);
saveData.setBeginRankTime(monday);
saveData.setEndRankTime(sunday);
saveData.setNum(0L);
saveData.setUserId(rank.getUserId());
this.save(saveData);
atomicReference.set(saveData);
}
});
one = atomicReference.get();
}
loveRankTodayMapper.insRank(one.getId(), rank.getPrice());
}
}

View File

@@ -0,0 +1,38 @@
package com.ruoyi.cai.util;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class IdLockManager {
// 存储ID对应的锁对象
private static final ConcurrentHashMap<String, Lock> idLocks = new ConcurrentHashMap<>();
/**
* 获取指定ID的锁
*/
public static Lock getLock(String id) {
// 不存在则创建,存在则返回已有的锁
return idLocks.computeIfAbsent(id, k -> new ReentrantLock());
}
/**
* 执行带ID锁的任务
*/
public static void executeWithLock(String id, Runnable task) {
Lock lock = getLock(id);
try {
lock.lock(); // 获取锁
task.run(); // 执行任务
} finally {
lock.unlock(); // 确保释放锁
}
}
/**
* 清理不再使用的锁(可选)
*/
public static void cleanUpLock(String id) {
idLocks.remove(id);
}
}

View File

@@ -11,4 +11,5 @@ public class RedisConstant {
public static final String USER_ROOM_DATA = REDIS_P + "room:%s:%s"; public static final String USER_ROOM_DATA = REDIS_P + "room:%s:%s";
public static final String INIT_ROOM_LOCK = REDIS_P + "lock:initRoom:%s-%s"; public static final String INIT_ROOM_LOCK = REDIS_P + "lock:initRoom:%s-%s";
public static final String Y4X_REDIS_CACHE = REDIS_P + "shareUrl:y4x:%s"; public static final String Y4X_REDIS_CACHE = REDIS_P + "shareUrl:y4x:%s";
public static final String START_SEND_MESSAGE_CACHE = REDIS_P + "starSendMessage:%s";
} }

View File

@@ -87,5 +87,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by t1.create_time desc order by t1.create_time desc
</select> </select>
<select id="rankTotalPay" resultType="com.ruoyi.cai.dto.app.vo.rank.RankNodeRecharge">
select
t2.id as user_id,
t2.avatar as avatar,
t2.nickname as nickname,
t1.total_buy_money as money
from cai_account t1
join cai_user t2 on t1.user_id = t2.id
order by t1.total_buy_coin desc
limit #{limit}
</select>
</mapper> </mapper>

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ruoyi.cai.mapper.LoveRankTodayMapper">
<delete id="insRank">
update cai_love_rank_today
set num = num + #{value}
where id = #{id}
</delete>
<select id="homePage" resultType="com.ruoyi.cai.dto.app.vo.AnchorListVo">
select
t1.id as user_id,t1.avatar,t1.gender,t1.nickname,t1.usercode,t2.service_time,
t1.city_id,t1.city,t2.give_score,
t2.price,t3.status as online
from cai_love_rank_today w
join cai_user t1 on t1.id = w.user_id
join cai_anchor t2 on t2.user_id = w.user_id
join cai_user_online t3 on t3.user_id = w.user_id
where t1.status = 0 and t1.is_anchor = 1 and t2.index_display = 1 and t1.usercode > 100
and w.rank_time = #{monday}
and t3.status = 1
and t2.open_video_status = 1
<if test="!query.hiddenStatusUser">
and t2.hidden_status = 0
</if>
<if test="query.price != null and query.price != 0">
and t2.price = #{query.price}
</if>
order by w.num desc
</select>
</mapper>