This commit is contained in:
77
2024-07-07 23:06:17 +08:00
parent f919eb9a26
commit cf66c432d3
11 changed files with 143 additions and 3 deletions

View File

@@ -37,7 +37,11 @@ public class HomeRecommendJob {
}catch (Exception e){ }catch (Exception e){
log.error("刷新首页推荐置顶用户失败",e); log.error("刷新首页推荐置顶用户失败",e);
} }
try {
homeManager.refreshAnchorBannerCache();
}catch (Exception e){
log.error("刷新首页主播推荐失败",e);
}
} }
} }

View File

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.AnchorBanner; import com.ruoyi.cai.domain.AnchorBanner;
import com.ruoyi.cai.dto.admin.vo.anchorBanner.AnchorBannerAdminVo;
import com.ruoyi.cai.service.AnchorBannerService; import com.ruoyi.cai.service.AnchorBannerService;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.RepeatSubmit;
@@ -41,8 +42,8 @@ public class AnchorBannerController extends BaseController {
*/ */
@SaCheckPermission("cai:anchorBanner:list") @SaCheckPermission("cai:anchorBanner:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<AnchorBanner> list(AnchorBanner bo, PageQuery pageQuery) { public TableDataInfo<AnchorBannerAdminVo> list(AnchorBannerAdminVo bo, PageQuery pageQuery) {
Page<AnchorBanner> page = anchorBannerService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); Page<AnchorBannerAdminVo> page = anchorBannerService.pageAdmin(pageQuery, bo);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }

View File

@@ -81,6 +81,14 @@ public class IndexController {
return R.ok(BeanConvertUtil.convertListTo(res, IndexBannerVo::new)); return R.ok(BeanConvertUtil.convertListTo(res, IndexBannerVo::new));
} }
@GetMapping("/anchor/hot")
@Operation(summary = "首页查询技师主播推荐")
@Log(title = "首页查询技师主播推荐", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false)
public R<List<AnchorListVo>> anchorHot(){
List<AnchorListVo> home = homeManager.getAnchorBannerCache();
return R.ok(home);
}
@GetMapping("/anchor/page") @GetMapping("/anchor/page")
@Operation(summary = "首页查询主播接口-分页") @Operation(summary = "首页查询主播接口-分页")
@Log(title = "首页查询主播接口", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false) @Log(title = "首页查询主播接口", businessType = BusinessType.OTHER,isPrintResponseData = false, isSaveDb = false)

View File

@@ -6,6 +6,7 @@ import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserCount; import com.ruoyi.cai.domain.UserCount;
import com.ruoyi.cai.im.ImManager; import com.ruoyi.cai.im.ImManager;
import com.ruoyi.cai.manager.AwardManager; import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.HomeManager;
import com.ruoyi.cai.service.DynamicService; import com.ruoyi.cai.service.DynamicService;
import com.ruoyi.cai.service.UserCountService; import com.ruoyi.cai.service.UserCountService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
@@ -37,6 +38,17 @@ public class UserTest {
private AwardManager awardManager; private AwardManager awardManager;
@Autowired @Autowired
private CaiLoginManager caiLoginManager; private CaiLoginManager caiLoginManager;
@Autowired
private HomeManager homeManager;
@Test
public void refreshHome(){
try {
homeManager.refreshAnchorBannerCache();
}catch (Exception e){
log.error("刷新首页主播推荐失败",e);
}
}
@Test @Test
public void caiLoginManager(){ public void caiLoginManager(){

View File

@@ -23,6 +23,8 @@ public class RedisHttpConstant {
public static final String HOME_RECOMMEND_TOP_REDIS = REDIS_P + "homeRecommendAnchorTop"; public static final String HOME_RECOMMEND_TOP_REDIS = REDIS_P + "homeRecommendAnchorTop";
public static final String HOME_RECOMMEND_REDIS = REDIS_P + "homeRecommendAnchor"; public static final String HOME_RECOMMEND_REDIS = REDIS_P + "homeRecommendAnchor";
public static final String HOME_ANCHOR_BANNER_REDIS = REDIS_P + "homeAnchorBanner";
public static final String HOME_NEW_REDIS = REDIS_P + "homeNewAnchor"; public static final String HOME_NEW_REDIS = REDIS_P + "homeNewAnchor";
public static final String HOME_ACTIVE_REDIS = REDIS_P + "homeActiveAnchor"; public static final String HOME_ACTIVE_REDIS = REDIS_P + "homeActiveAnchor";
} }

View File

@@ -0,0 +1,31 @@
package com.ruoyi.cai.dto.admin.vo.anchorBanner;
import com.ruoyi.cai.domain.AnchorBanner;
import com.ruoyi.common.annotation.Sensitive;
import com.ruoyi.common.enums.SensitiveStrategy;
import lombok.Data;
@Data
public class AnchorBannerAdminVo extends AnchorBanner {
/**
* 昵称
*/
private String nickname;
/**
* 手机号
*/
@Sensitive(strategy = SensitiveStrategy.PHONE)
private String mobile;
/**
* 头像
*/
private String avatar;
/**
* 性别
*/
private Integer gender;
private Integer age;
private Integer isAnchor;
}

View File

@@ -9,6 +9,7 @@ import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.enums.home.AnchorListQueryTypeEnum; import com.ruoyi.cai.enums.home.AnchorListQueryTypeEnum;
import com.ruoyi.cai.mq.AmqpHttpProducer; import com.ruoyi.cai.mq.AmqpHttpProducer;
import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO; import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO;
import com.ruoyi.cai.service.AnchorBannerService;
import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.AnchorService;
import com.ruoyi.cai.service.AnchorTopService; import com.ruoyi.cai.service.AnchorTopService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
@@ -42,6 +43,8 @@ public class HomeManager {
private UserService userService; private UserService userService;
@Autowired @Autowired
private UserForbidManager userForbidManager; private UserForbidManager userForbidManager;
@Autowired
private AnchorBannerService anchorBannerService;
public void refreshHomeAnchorTopCache(){ public void refreshHomeAnchorTopCache(){
List<AnchorListVo> anchorTop = anchorTopService.anchorTop(4); List<AnchorListVo> anchorTop = anchorTopService.anchorTop(4);
@@ -49,6 +52,12 @@ public class HomeManager {
bucket.set(anchorTop); bucket.set(anchorTop);
} }
public void refreshAnchorBannerCache(){
List<AnchorListVo> anchorList = anchorBannerService.anchorBanner();
RBucket<List<AnchorListVo>> bucket = redissonClient.getBucket(RedisHttpConstant.HOME_ANCHOR_BANNER_REDIS);
bucket.set(anchorList);
}
public void refreshHomeRecommendCache(){ public void refreshHomeRecommendCache(){
PageQuery pageQuery = new PageQuery(); PageQuery pageQuery = new PageQuery();
pageQuery.setPageSize(200); pageQuery.setPageSize(200);
@@ -94,6 +103,13 @@ public class HomeManager {
bucket.set(records); bucket.set(records);
} }
public List<AnchorListVo> getAnchorBannerCache(){
RBucket<List<AnchorListVo>> bucket = redissonClient.getBucket(RedisHttpConstant.HOME_ANCHOR_BANNER_REDIS);
List<AnchorListVo> list = bucket.get();
Collections.shuffle(list);
int endIndex = Math.min(5, list.size());
return list.subList(0,endIndex);
}
public List<AnchorListVo> getHomeCache(PageQuery pageQuery,AnchorListQuery query){ public List<AnchorListVo> getHomeCache(PageQuery pageQuery,AnchorListQuery query){
AnchorListQueryTypeEnum anchorListQueryTypeEnum = AnchorListQueryTypeEnum.getByCode(query.getType()); AnchorListQueryTypeEnum anchorListQueryTypeEnum = AnchorListQueryTypeEnum.getByCode(query.getType());

View File

@@ -1,7 +1,13 @@
package com.ruoyi.cai.mapper; package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.AnchorBanner; import com.ruoyi.cai.domain.AnchorBanner;
import com.ruoyi.cai.dto.admin.vo.anchorBanner.AnchorBannerAdminVo;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 主播首页推荐Mapper接口 * 主播首页推荐Mapper接口
@@ -11,4 +17,8 @@ import com.ruoyi.cai.domain.AnchorBanner;
*/ */
public interface AnchorBannerMapper extends BaseMapper<AnchorBanner> { public interface AnchorBannerMapper extends BaseMapper<AnchorBanner> {
Page<AnchorBannerAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") AnchorBannerAdminVo bo);
List<AnchorListVo> pageApp();
} }

View File

@@ -1,7 +1,13 @@
package com.ruoyi.cai.service; package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.AnchorBanner; import com.ruoyi.cai.domain.AnchorBanner;
import com.ruoyi.cai.dto.admin.vo.anchorBanner.AnchorBannerAdminVo;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.common.core.domain.PageQuery;
import java.util.List;
/** /**
* 主播首页推荐Service接口 * 主播首页推荐Service接口
@@ -12,4 +18,9 @@ import com.ruoyi.cai.domain.AnchorBanner;
public interface AnchorBannerService extends IService<AnchorBanner> { public interface AnchorBannerService extends IService<AnchorBanner> {
boolean saveData(AnchorBanner bo); boolean saveData(AnchorBanner bo);
Page<AnchorBannerAdminVo> pageAdmin(PageQuery pageQuery, AnchorBannerAdminVo bo);
List<AnchorListVo> anchorBanner();
} }

View File

@@ -1,17 +1,23 @@
package com.ruoyi.cai.service.impl; package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.Anchor; import com.ruoyi.cai.domain.Anchor;
import com.ruoyi.cai.domain.AnchorBanner; import com.ruoyi.cai.domain.AnchorBanner;
import com.ruoyi.cai.domain.User; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.dto.admin.vo.anchorBanner.AnchorBannerAdminVo;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.cai.mapper.AnchorBannerMapper; import com.ruoyi.cai.mapper.AnchorBannerMapper;
import com.ruoyi.cai.service.AnchorBannerService; import com.ruoyi.cai.service.AnchorBannerService;
import com.ruoyi.cai.service.AnchorService; import com.ruoyi.cai.service.AnchorService;
import com.ruoyi.cai.service.UserService; import com.ruoyi.cai.service.UserService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* 主播首页推荐Service业务层处理 * 主播首页推荐Service业务层处理
* *
@@ -42,4 +48,14 @@ public class AnchorBannerServiceImpl extends ServiceImpl<AnchorBannerMapper, Anc
this.save(bo); this.save(bo);
return true; return true;
} }
@Override
public Page<AnchorBannerAdminVo> pageAdmin(PageQuery pageQuery, AnchorBannerAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(), bo);
}
@Override
public List<AnchorListVo> anchorBanner() {
return baseMapper.pageApp();
}
} }

View File

@@ -0,0 +1,29 @@
<?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.AnchorBannerMapper">
<select id="pageAdmin" resultType="com.ruoyi.cai.dto.admin.vo.anchorBanner.AnchorBannerAdminVo">
select
t1.*,t2.age,t2.avatar,t2.usercode,t2.nickname,t2.mobile,t2.gender,t2.age,t2.city,t2.is_anchor
from cai_anchor_banner t1
left join cai_user t2 on t1.user_id = t2.id
<where>
<if test="bo.mobile != null and bo.mobile != ''">
and t2.mobile = #{bo.mobile}
</if>
<if test="bo.usercode != null and bo.usercode != ''">
and t2.usercode = #{bo.usercode}
</if>
</where>
order by t1.create_time desc
</select>
<select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.AnchorListVo">
select t1.id as user_id,t1.avatar,t1.gender,t1.city,t1.nickname,t1.usercode,t1.city_id,t1.city,t2.give_score,
t2.price,t3.status as online
from cai_anchor_banner p
join cai_user t1 on p.user_id = t1.id
join cai_anchor t2 on t1.id = t2.user_id
join cai_user_online t3 on t1.id = t3.user_id
where t1.status = 0 and t1.is_anchor = 1 and t1.usercode > 100 and p.open_status = 1
limit 100
</select>
</mapper>