This commit is contained in:
dute7liang
2023-12-23 22:34:25 +08:00
parent e29a4edf7c
commit 59d048e1a6
30 changed files with 705 additions and 28 deletions

View File

@@ -0,0 +1,30 @@
package com.ruoyi.cai.controller.app;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.dto.app.query.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.cai.service.CaiAnchorService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/cai/anchor")
public class CaiAnchorAppController {
@Autowired
private CaiAnchorService anchorService;
@GetMapping("/page")
public TableDataInfo<AnchorListVo> page(PageQuery page, AnchorListQuery query){
Page<AnchorListVo> res = anchorService.pageApp(page,query);
return TableDataInfo.build(res);
}
}

View File

@@ -1,19 +0,0 @@
package com.ruoyi.cai.controller.app;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.helper.LoginHelper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/cai/user")
public class CaiAppUserController {
@GetMapping("/info")
public R<LoginUser> info(String user){
LoginUser loginUser = LoginHelper.getLoginUser();
return R.ok(loginUser);
}
}

View File

@@ -18,7 +18,7 @@ import java.util.Map;
@RestController
@RequestMapping("/cai/auth")
@SaIgnore
public class CaiAppAuthController {
public class CaiAuthAppController {
@Autowired
private CaiLoginManager caiLoginManager;

View File

@@ -0,0 +1,42 @@
package com.ruoyi.cai.controller.app;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.dto.app.query.UserQuery;
import com.ruoyi.cai.dto.app.vo.UserInfoVo;
import com.ruoyi.cai.dto.app.vo.UserListVo;
import com.ruoyi.cai.service.CaiUserService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.helper.LoginHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/cai/user")
public class CaiUserAppController {
@Autowired
private CaiUserService caiUserService;
@GetMapping("/current/info")
public R<LoginUser> currentInfo(){
LoginUser loginUser = LoginHelper.getLoginUser();
return R.ok(loginUser);
}
@GetMapping("/page")
public TableDataInfo<UserListVo> page(PageQuery page, UserQuery query){
Page<UserListVo> res = caiUserService.pageApp(page,query);
return TableDataInfo.build(res);
}
@GetMapping("/info")
public R<UserInfoVo> info(String usercode){
UserInfoVo res = caiUserService.info(usercode);
return R.ok(res);
}
}

View File

@@ -28,7 +28,15 @@ public class CaiAnchor implements Serializable{
/**
* 用户ID
*/
private Integer userId;
private Long userId;
/**
* 技能ID
*/
private Integer skillId;
/**
* 价格默认50彩币
*/
private Long price;
/**
* 开启视频接听 0 未开启 1 已开启
*/

View File

@@ -0,0 +1,42 @@
package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 用户在线状态对象 cai_user_online
*
* @author 77
* @date 2023-12-23
*/
@Data
@TableName("cai_user_online")
public class CaiUserOnline implements Serializable {
private static final long serialVersionUID=1L;
/**
* 用户ID
*/
@TableId(value = "user_id")
private Integer userId;
/**
* 在线状态:0=离线,1=在线
*/
private Integer status;
/**
* 状态更新时间13位时间戳
*/
private Long receiveTime;
/**
* 最后在线时间
*/
private LocalDateTime lastLiveTime;
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.cai.dto.app.query;
import lombok.Data;
@Data
public class AnchorListQuery {
/**
* 0-默认查询
* 1-活跃查询
* 2-新人查询
* 3-同城查询
*/
private Integer type;
private String city;
}

View File

@@ -0,0 +1,12 @@
package com.ruoyi.cai.dto.app.query;
import lombok.Data;
@Data
public class UserQuery {
private String nickname;
private String usercode;
private Integer gender;
}

View File

@@ -0,0 +1,34 @@
package com.ruoyi.cai.dto.app.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class AnchorListVo {
/**
* 头像
*/
private String avatar;
/**
* 性别 0 未知 1 女 2 男
*/
private Integer gender;
/**
* 城市
*/
private Long city;
/**
* 昵称
*/
private String nickname;
/**
* 用户号/ID号
*/
private String usercode;
/**
* 用户评分
*/
private BigDecimal giveScore;
}

View File

@@ -0,0 +1,41 @@
package com.ruoyi.cai.dto.app.vo;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class DynamicImageVo {
private Integer id;
/**
* 用户ID
*/
private Integer userId;
/**
* 动态ID
*/
private Long dynamicId;
/**
* 物理路径
*/
private String url;
/**
* 宽度
*/
private Long width;
/**
* 高度
*/
private Long height;
/**
* 图片大小
*/
private Long size;
/**
* 类型
*/
private String exts;
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,42 @@
package com.ruoyi.cai.dto.app.vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class DynamicVo {
/**
*
*/
private Long id;
/**
* 用户ID
*/
private Integer userId;
/**
* 内容
*/
private String content;
/**
* 城市ID
*/
private Integer cityId;
/**
* 是否有附件 0 没有 1 有
*/
private Integer isAttach;
/**
* 状态 0 审核中 1可用 2 不可用
*/
private Integer status;
/**
* 排序字段
*/
private Long sort;
private LocalDateTime createTime;
private List<DynamicImageVo> imageList;
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.cai.dto.app.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class GuardTotalVo implements Serializable {
/**
* 被守护人的user_id(大咖)
*/
private Long fromUserId;
/**
* 守护人的user_id
*/
private Long toUserId;
private String userAvatar;
/**
* 累计守护符个数
*/
private Long guardNum;
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.cai.dto.app.vo;
import lombok.Data;
@Data
public class UserGiftVo {
/**
* 接受者
*/
private Long toUid;
/**
* 礼物ID
*/
private Long giftId;
/**
* 礼物数量
*/
private Long giftCount;
}

View File

@@ -0,0 +1,45 @@
package com.ruoyi.cai.dto.app.vo;
import lombok.Data;
import java.util.Collections;
import java.util.List;
@Data
public class UserInfoVo {
private Long userId;
/**
* 是否是播主 0 否 1 是
*/
private Integer isAnchor;
private String usercode;
private String nickname;
private String avatar;
/**
* 价格默认50彩币
*/
private Long price;
/**
* 接单次数
*/
private Long serviceCount;
private Long fansNum;
private Boolean star;
// TODO
private String status;
private List<String> albumList = Collections.emptyList();
private List<GuardTotalVo> guardTotalList = Collections.emptyList();
private List<DynamicVo> dynamicList = Collections.emptyList();
private List<UserGiftVo> giftList = Collections.emptyList();
}

View File

@@ -0,0 +1,39 @@
package com.ruoyi.cai.dto.app.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class UserListVo {
/**
* 头像
*/
private String avatar;
/**
* 性别 0 未知 1 女 2 男
*/
private Integer gender;
/**
* 城市
*/
private Long city;
/**
* 昵称
*/
private String nickname;
/**
* 用户号/ID号
*/
private String usercode;
private Integer age;
/**
* 最后在线时间
*/
private LocalDateTime lastLiveTime;
}

View File

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.CaiAnchor;
import com.ruoyi.cai.dto.admin.vo.CaiAnchorAdminVo;
import com.ruoyi.cai.dto.app.query.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import org.apache.ibatis.annotations.Param;
/**
@@ -15,4 +17,6 @@ import org.apache.ibatis.annotations.Param;
public interface CaiAnchorMapper extends BaseMapper<CaiAnchor> {
Page<CaiAnchorAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") CaiAnchorAdminVo bo);
Page<AnchorListVo> pageApp(@Param("build") Page<Object> build, @Param("query") AnchorListQuery query);
}

View File

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.CaiUser;
import com.ruoyi.cai.dto.admin.vo.CaiUserAdminVo;
import com.ruoyi.cai.dto.app.query.UserQuery;
import com.ruoyi.cai.dto.app.vo.UserListVo;
import org.apache.ibatis.annotations.Param;
/**
@@ -15,4 +17,6 @@ import org.apache.ibatis.annotations.Param;
public interface CaiUserMapper extends BaseMapper<CaiUser> {
Page<CaiUserAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("query") CaiUser query);
Page<UserListVo> pageApp(@Param("build") Page<Object> build, @Param("query") UserQuery query);
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cai.domain.CaiUserOnline;
/**
* 用户在线状态Mapper接口
*
* @author 77
* @date 2023-12-23
*/
public interface CaiUserOnlineMapper extends BaseMapper<CaiUserOnline> {
}

View File

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiAnchor;
import com.ruoyi.cai.dto.admin.vo.CaiAnchorAdminVo;
import com.ruoyi.cai.dto.app.query.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.common.core.domain.PageQuery;
/**
@@ -15,4 +17,8 @@ import com.ruoyi.common.core.domain.PageQuery;
public interface CaiAnchorService extends IService<CaiAnchor> {
Page<CaiAnchorAdminVo> pageAdmin(PageQuery pageQuery, CaiAnchorAdminVo bo);
Page<AnchorListVo> pageApp(PageQuery pageQuery, AnchorListQuery query);
CaiAnchor getByUserId(Long userId);
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiUserOnline;
/**
* 用户在线状态Service接口
*
* @author 77
* @date 2023-12-23
*/
public interface CaiUserOnlineService extends IService<CaiUserOnline> {
}

View File

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.auth.LoginCaiUser;
import com.ruoyi.cai.domain.CaiUser;
import com.ruoyi.cai.dto.admin.vo.CaiUserAdminVo;
import com.ruoyi.cai.dto.app.query.UserQuery;
import com.ruoyi.cai.dto.app.vo.UserInfoVo;
import com.ruoyi.cai.dto.app.vo.UserListVo;
import com.ruoyi.common.core.domain.PageQuery;
/**
@@ -20,4 +23,10 @@ public interface CaiUserService extends IService<CaiUser> {
void register(LoginCaiUser caiUser);
Page<CaiUserAdminVo> pageAdmin(PageQuery pageQuery, CaiUser query);
Page<UserListVo> pageApp(PageQuery page, UserQuery query);
UserInfoVo info(String userCode);
CaiUser getByUserCode(String userCode);
}

View File

@@ -1,13 +1,15 @@
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.CaiAnchor;
import com.ruoyi.cai.dto.admin.vo.CaiAnchorAdminVo;
import com.ruoyi.cai.dto.app.query.AnchorListQuery;
import com.ruoyi.cai.dto.app.vo.AnchorListVo;
import com.ruoyi.cai.mapper.CaiAnchorMapper;
import com.ruoyi.cai.service.CaiAnchorService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -25,4 +27,17 @@ public class CaiAnchorServiceImpl extends ServiceImpl<CaiAnchorMapper,CaiAnchor>
public Page<CaiAnchorAdminVo> pageAdmin(PageQuery pageQuery, CaiAnchorAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(),bo);
}
@Override
public Page<AnchorListVo> pageApp(PageQuery pageQuery, AnchorListQuery query) {
if(query.getType() != null && query.getType() != 3){
query.setCity(null);
}
return baseMapper.pageApp(pageQuery.build(),query);
}
@Override
public CaiAnchor getByUserId(Long userId){
return this.getOne(Wrappers.lambdaQuery(CaiAnchor.class).eq(CaiAnchor::getUserId,userId));
}
}

View File

@@ -0,0 +1,20 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiUserOnline;
import com.ruoyi.cai.mapper.CaiUserOnlineMapper;
import com.ruoyi.cai.service.CaiUserOnlineService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* 用户在线状态Service业务层处理
*
* @author 77
* @date 2023-12-23
*/
@RequiredArgsConstructor
@Service
public class CaiUserOnlineServiceImpl extends ServiceImpl<CaiUserOnlineMapper,CaiUserOnline> implements CaiUserOnlineService {
}

View File

@@ -4,11 +4,17 @@ 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.auth.LoginCaiUser;
import com.ruoyi.cai.domain.CaiAnchor;
import com.ruoyi.cai.domain.CaiUser;
import com.ruoyi.cai.dto.admin.vo.CaiUserAdminVo;
import com.ruoyi.cai.dto.app.query.UserQuery;
import com.ruoyi.cai.dto.app.vo.UserInfoVo;
import com.ruoyi.cai.dto.app.vo.UserListVo;
import com.ruoyi.cai.mapper.CaiUserMapper;
import com.ruoyi.cai.service.CaiUserService;
import com.ruoyi.cai.service.*;
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;
/**
@@ -19,6 +25,18 @@ import org.springframework.stereotype.Service;
*/
@Service
public class CaiUserServiceImpl extends ServiceImpl<CaiUserMapper, CaiUser> implements CaiUserService {
@Autowired
private CaiAnchorService anchorService;
@Autowired
private CaiUserFollowService userFollowService;
@Autowired
private CaiUserAlbumService caiUserAlbumService;
@Autowired
private CaiGuardTotalService guardTotalService;
@Autowired
private CaiDynamicService dynamicService;
@Autowired
private CaiUserGiftService userGiftService;
@Override
public CaiUser getByUsername(String username) {
@@ -35,4 +53,47 @@ public class CaiUserServiceImpl extends ServiceImpl<CaiUserMapper, CaiUser> impl
public Page<CaiUserAdminVo> pageAdmin(PageQuery pageQuery, CaiUser query) {
return baseMapper.pageAdmin(pageQuery.build(),query);
}
@Override
public Page<UserListVo> pageApp(PageQuery page, UserQuery query) {
return baseMapper.pageApp(page.build(),query);
}
@Override
public UserInfoVo info(String userCode) {
Long currentUserId = LoginHelper.getUserId();
CaiUser caiUser = this.getByUserCode(userCode);
if(caiUser == null){
return null;
}
Long userId = caiUser.getId();
CaiAnchor anchor = anchorService.getByUserId(userId);
UserInfoVo vo = new UserInfoVo();
vo.setIsAnchor(caiUser.getIsAnchor());
vo.setUsercode(caiUser.getUsercode());
vo.setNickname(caiUser.getNickname());
vo.setAvatar(caiUser.getAvatar());
if(anchor != null){
vo.setPrice(anchor.getPrice());
vo.setServiceCount(anchor.getServiceCount());
}else{
vo.setPrice(null);
vo.setServiceCount(null);
}
vo.setFansNum(userFollowService.getFansNumByUserId(userId));
vo.setStar(userFollowService.checkStar(currentUserId, userId));
vo.setAlbumList(caiUserAlbumService.getUserAlbum(userId,caiUser.getIsAnchor()));
if(caiUser.getIsAnchor() == 1){
vo.setGuardTotalList(guardTotalService.selectGuardTotalLimit(userId,10));
vo.setDynamicList(dynamicService.selectDynamicList(userId,10));
vo.setGiftList(userGiftService.selectGiftList(userId));
}
// vo.setStatus();
return vo;
}
@Override
public CaiUser getByUserCode(String userCode){
return this.getOne(Wrappers.lambdaQuery(CaiUser.class).eq(CaiUser::getUsercode,userCode).last("limit 1"));
}
}

View File

@@ -29,6 +29,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from cai_anchor t1
left join cai_user t2 on t1.user_id = t2.id
</select>
<select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.AnchorListVo">
select t1.avatar,t1.gender,t1.city,t1.nickname,t1.usercode,t2.give_score
from cai_user t1
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
<if test="query.city != null and query.city != ''">
and t1.city = #{query.city}
</if>
<if test="query.type != null">
<if test="query.type == 1">
order by t3.last_live_time desc
</if>
<if test="query.type == 1">
order by t1.create_time desc
</if>
</if>
</select>
</mapper>

View File

@@ -47,6 +47,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from cai_user t1
left join cai_user_info t2 on t1.id = t2.user_id
</select>
<select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.UserListVo">
select t1.avatar,t1.gender,t1.city,t1.nickname,t1.usercode,t1.age,t2.last_live_time
from cai_user t1
join cai_user_online t2 on t1.id = t2.user_id
where t1.status = 0
<if test="query.nickname != null and query.nickname != ''">
and t1.nickname like concat('%',#{query.nickname},'%')
</if>
<if test="query.usercode != null and query.usercode != ''">
and t1.usercode = #{query.usercode}
</if>
<if test="query.gender != null">
and t1.gender = #{query.gender}
</if>
</select>
</mapper>

View File

@@ -0,0 +1,16 @@
<?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.CaiUserOnlineMapper">
<resultMap type="com.ruoyi.cai.domain.CaiUserOnline" id="CaiUserOnlineResult">
<result property="userId" column="user_id"/>
<result property="status" column="status"/>
<result property="receiveTime" column="receive_time"/>
<result property="lastLiveTime" column="last_live_time"/>
<result property="createTime" column="create_time"/>
</resultMap>
</mapper>