123
This commit is contained in:
@@ -28,17 +28,17 @@ public class UserStartAppController {
|
|||||||
@PostMapping("/star")
|
@PostMapping("/star")
|
||||||
@Operation(summary = "关注用户")
|
@Operation(summary = "关注用户")
|
||||||
@Log(title = "关注用户", businessType = BusinessType.OTHER, isSaveDb = true)
|
@Log(title = "关注用户", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||||
public R<Boolean> star(@RequestBody StarOrVisitorReq starOrVisitorReq){
|
public R<Void> star(@RequestBody StarOrVisitorReq starOrVisitorReq){
|
||||||
boolean bool = userFollowService.star(starOrVisitorReq);
|
userFollowService.star(starOrVisitorReq);
|
||||||
return R.ok(bool);
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/unstar")
|
@PostMapping("/unstar")
|
||||||
@Operation(summary = "取消关注用户")
|
@Operation(summary = "取消关注用户")
|
||||||
@Log(title = "取消关注用户", businessType = BusinessType.OTHER, isSaveDb = true)
|
@Log(title = "取消关注用户", businessType = BusinessType.OTHER, isSaveDb = true)
|
||||||
public R<Boolean> unStar(@RequestBody StarOrVisitorReq starOrVisitorReq){
|
public R<Void> unStar(@RequestBody StarOrVisitorReq starOrVisitorReq){
|
||||||
boolean bool = userFollowService.unStar(starOrVisitorReq);
|
userFollowService.unStar(starOrVisitorReq);
|
||||||
return R.ok(bool);
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
|
|||||||
@@ -22,16 +22,17 @@ public class UserFollow implements Serializable {
|
|||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关注人ID
|
* 关注人ID (关注人 关注了 被关注人)
|
||||||
*/
|
*/
|
||||||
private Long userId;
|
private Long userId;
|
||||||
/**
|
/**
|
||||||
* 被关注人ID
|
* 被关注人ID (关注人 关注了 被关注人)
|
||||||
*/
|
*/
|
||||||
private Long followUser;
|
private Long followUser;
|
||||||
/**
|
/**
|
||||||
* 状态 0 未查看 1 已查看
|
* 状态 0 未查看 1 已查看
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
private Integer isWatch;
|
private Integer isWatch;
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ruoyi.cai.dto.app.vo.user;
|
package com.ruoyi.cai.dto.app.vo.user;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@@ -7,7 +8,12 @@ import java.time.LocalDateTime;
|
|||||||
@Data
|
@Data
|
||||||
public class UserStarOrVisitorList extends UserBaseVo {
|
public class UserStarOrVisitorList extends UserBaseVo {
|
||||||
|
|
||||||
|
@Schema(description = "发生时间")
|
||||||
private LocalDateTime happenTime;
|
private LocalDateTime happenTime;
|
||||||
|
|
||||||
private Integer isWatch;
|
@Schema(description = "是否回关 0-否 1-是")
|
||||||
|
private Integer callBackStar = 0;
|
||||||
|
@Schema(description = "是否为VIP")
|
||||||
|
private Integer isVip = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.ruoyi.cai.dto.commom.member;
|
||||||
|
|
||||||
|
import com.ruoyi.cai.enums.UserMemberTypeEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CheckUserMemberDTO {
|
||||||
|
private Long userId;
|
||||||
|
private UserMemberTypeEnum memberType;
|
||||||
|
}
|
||||||
@@ -139,7 +139,7 @@ public class ImService {
|
|||||||
private UserBlacklistService userBlacklistService;
|
private UserBlacklistService userBlacklistService;
|
||||||
|
|
||||||
private Long getByImPrice(Long userId){
|
private Long getByImPrice(Long userId){
|
||||||
UserMemberTypeEnum userMemberType = userMemberService.checkUserMember(userId);
|
UserMemberTypeEnum userMemberType = userMemberService.checkUserIsMember(userId);
|
||||||
if(userMemberType == null){
|
if(userMemberType == null){
|
||||||
return 10L;
|
return 10L;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,5 +15,14 @@ import org.apache.ibatis.annotations.Param;
|
|||||||
*/
|
*/
|
||||||
public interface UserFollowMapper extends BaseMapper<UserFollow> {
|
public interface UserFollowMapper extends BaseMapper<UserFollow> {
|
||||||
|
|
||||||
Page<UserStarOrVisitorList> pageApp(@Param("build") Page<Object> build, @Param("query") StarQuery query);
|
/**
|
||||||
|
* 查询我的关注 (我关注的人)
|
||||||
|
*/
|
||||||
|
Page<UserStarOrVisitorList> pageMyStarApp(@Param("build") Page<Object> build, @Param("query") StarQuery query);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询我的粉丝 (关注我的人)
|
||||||
|
*/
|
||||||
|
Page<UserStarOrVisitorList> pageMyFansApp(@Param("build") Page<Object> build, @Param("query") StarQuery query);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import com.ruoyi.cai.dto.app.vo.user.MemberInfoVo;
|
|||||||
import com.ruoyi.cai.enums.UserMemberTypeEnum;
|
import com.ruoyi.cai.enums.UserMemberTypeEnum;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员管理Service接口
|
* 会员管理Service接口
|
||||||
*
|
*
|
||||||
@@ -27,7 +29,9 @@ public interface UserMemberService extends IService<UserMember> {
|
|||||||
* @param userId
|
* @param userId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
UserMemberTypeEnum checkUserMember(Long userId);
|
UserMemberTypeEnum checkUserIsMember(Long userId);
|
||||||
|
|
||||||
|
List<Long> checkUserIsMember(List<Long> userId);
|
||||||
|
|
||||||
void relieveMember(Long id);
|
void relieveMember(Long id);
|
||||||
|
|
||||||
|
|||||||
@@ -7,17 +7,25 @@ import com.ruoyi.cai.domain.UserCount;
|
|||||||
import com.ruoyi.cai.domain.UserFollow;
|
import com.ruoyi.cai.domain.UserFollow;
|
||||||
import com.ruoyi.cai.dto.app.query.StarQuery;
|
import com.ruoyi.cai.dto.app.query.StarQuery;
|
||||||
import com.ruoyi.cai.dto.app.query.StarOrVisitorReq;
|
import com.ruoyi.cai.dto.app.query.StarOrVisitorReq;
|
||||||
|
import com.ruoyi.cai.dto.app.vo.user.UserBaseVo;
|
||||||
import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList;
|
import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList;
|
||||||
import com.ruoyi.cai.mapper.UserFollowMapper;
|
import com.ruoyi.cai.mapper.UserFollowMapper;
|
||||||
import com.ruoyi.cai.service.UserCountService;
|
import com.ruoyi.cai.service.UserCountService;
|
||||||
import com.ruoyi.cai.service.UserFollowService;
|
import com.ruoyi.cai.service.UserFollowService;
|
||||||
|
import com.ruoyi.cai.service.UserMemberService;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
import com.ruoyi.common.helper.LoginHelper;
|
import com.ruoyi.common.helper.LoginHelper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
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 org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关注表Service业务层处理
|
* 关注表Service业务层处理
|
||||||
*
|
*
|
||||||
@@ -30,6 +38,8 @@ public class UserFollowServiceImpl extends ServiceImpl<UserFollowMapper, UserFol
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserCountService userCountService;
|
private UserCountService userCountService;
|
||||||
|
@Autowired
|
||||||
|
private UserMemberService userMemberService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long getFansNumByUserId(Long userId){
|
public Long getFansNumByUserId(Long userId){
|
||||||
@@ -71,7 +81,68 @@ public class UserFollowServiceImpl extends ServiceImpl<UserFollowMapper, UserFol
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<UserStarOrVisitorList> pageApp(PageQuery pageQuery, StarQuery query) {
|
public Page<UserStarOrVisitorList> pageApp(PageQuery pageQuery, StarQuery query) {
|
||||||
|
if(query.getType() == null){
|
||||||
|
throw new ServiceException("参数异常");
|
||||||
|
}
|
||||||
|
if(query.getType() != 1 && query.getType() != 2){
|
||||||
|
throw new ServiceException("参数异常");
|
||||||
|
}
|
||||||
query.setUserId(LoginHelper.getUserId());
|
query.setUserId(LoginHelper.getUserId());
|
||||||
return baseMapper.pageApp(pageQuery.build(),query);
|
// 类型 1=查询我的关注 2=查询我的粉丝
|
||||||
|
if(query.getType() == 1){
|
||||||
|
return this.pageMyStarApp(pageQuery,query);
|
||||||
|
}else{
|
||||||
|
return this.pageMyFansApp(pageQuery,query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询我的关注
|
||||||
|
*/
|
||||||
|
private Page<UserStarOrVisitorList> pageMyStarApp(PageQuery pageQuery, StarQuery query){
|
||||||
|
Page<UserStarOrVisitorList> page = baseMapper.pageMyStarApp(pageQuery.build(), query);
|
||||||
|
List<UserStarOrVisitorList> records = page.getRecords();
|
||||||
|
if(!CollectionUtils.isEmpty(records)){
|
||||||
|
List<Long> userIds = records.stream().map(UserBaseVo::getUserId).collect(Collectors.toList());
|
||||||
|
// 我关注的人ID
|
||||||
|
if(!CollectionUtils.isEmpty(userIds)){
|
||||||
|
List<UserFollow> list = this.list(Wrappers.lambdaQuery(UserFollow.class)
|
||||||
|
.select(UserFollow::getUserId,UserFollow::getFollowUser)
|
||||||
|
.in(UserFollow::getUserId, userIds)
|
||||||
|
.eq(UserFollow::getFollowUser, query.getUserId()));
|
||||||
|
Set<Long> callBackUserIds = list.stream().map(UserFollow::getUserId).collect(Collectors.toSet());
|
||||||
|
List<Long> vipUserIds = userMemberService.checkUserIsMember(userIds);
|
||||||
|
for (UserStarOrVisitorList record : records) {
|
||||||
|
record.setCallBackStar(callBackUserIds.contains(record.getUserId())?1:0);
|
||||||
|
record.setIsVip(vipUserIds.contains(record.getUserId())?1:0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询我的粉丝
|
||||||
|
*/
|
||||||
|
private Page<UserStarOrVisitorList> pageMyFansApp(PageQuery pageQuery, StarQuery query){
|
||||||
|
Page<UserStarOrVisitorList> page = baseMapper.pageMyFansApp(pageQuery.build(), query);
|
||||||
|
List<UserStarOrVisitorList> records = page.getRecords();
|
||||||
|
if(!CollectionUtils.isEmpty(records)){
|
||||||
|
// 我的粉丝ID
|
||||||
|
List<Long> userIds = records.stream().map(UserBaseVo::getUserId).collect(Collectors.toList());
|
||||||
|
if(!CollectionUtils.isEmpty(userIds)){
|
||||||
|
List<UserFollow> list = this.list(Wrappers.lambdaQuery(UserFollow.class)
|
||||||
|
.select(UserFollow::getUserId,UserFollow::getFollowUser)
|
||||||
|
.eq(UserFollow::getUserId, query.getUserId())
|
||||||
|
.in(UserFollow::getFollowUser, userIds));
|
||||||
|
Set<Long> callBackUserIds = list.stream().map(UserFollow::getFollowUser).collect(Collectors.toSet());
|
||||||
|
List<Long> vipUserIds = userMemberService.checkUserIsMember(userIds);
|
||||||
|
for (UserStarOrVisitorList record : records) {
|
||||||
|
record.setCallBackStar(callBackUserIds.contains(record.getUserId())?1:0);
|
||||||
|
record.setIsVip(vipUserIds.contains(record.getUserId())?1:0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return page;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ruoyi.cai.service.impl;
|
package com.ruoyi.cai.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@@ -23,7 +24,9 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员管理Service业务层处理
|
* 会员管理Service业务层处理
|
||||||
@@ -60,7 +63,7 @@ public class UserMemberServiceImpl extends ServiceImpl<UserMemberMapper, UserMem
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserMemberTypeEnum checkUserMember(Long userId){
|
public UserMemberTypeEnum checkUserIsMember(Long userId){
|
||||||
List<UserMember> list = this.list(Wrappers.lambdaQuery(UserMember.class)
|
List<UserMember> list = this.list(Wrappers.lambdaQuery(UserMember.class)
|
||||||
.eq(UserMember::getUserId, userId)
|
.eq(UserMember::getUserId, userId)
|
||||||
.eq(UserMember::getMemberStatus, MemberStatusEnum.NORMAL.getCode())
|
.eq(UserMember::getMemberStatus, MemberStatusEnum.NORMAL.getCode())
|
||||||
@@ -76,6 +79,19 @@ public class UserMemberServiceImpl extends ServiceImpl<UserMemberMapper, UserMem
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> checkUserIsMember(List<Long> userId) {
|
||||||
|
if(CollectionUtil.isEmpty(userId)){
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<UserMember> list = this.list(Wrappers.lambdaQuery(UserMember.class)
|
||||||
|
.select(UserMember::getUserId)
|
||||||
|
.in(UserMember::getUserId, userId)
|
||||||
|
.eq(UserMember::getMemberStatus, MemberStatusEnum.NORMAL.getCode())
|
||||||
|
.le(UserMember::getExpireDate, LocalDateTime.now()));
|
||||||
|
return list.stream().map(UserMember::getUserId).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void relieveMember(Long id) {
|
public void relieveMember(Long id) {
|
||||||
this.update(Wrappers.lambdaUpdate(UserMember.class)
|
this.update(Wrappers.lambdaUpdate(UserMember.class)
|
||||||
|
|||||||
@@ -11,20 +11,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<result property="remark" column="remark"/>
|
<result property="remark" column="remark"/>
|
||||||
<result property="createTime" column="create_time"/>
|
<result property="createTime" column="create_time"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
<select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList">
|
<select id="pageMyStarApp" resultType="com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList">
|
||||||
select
|
select
|
||||||
t1.create_time as happen_time,t1.is_watch,
|
t1.create_time as happen_time,
|
||||||
t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age
|
t2.id as user_id, t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age
|
||||||
|
from cai_user_follow t1
|
||||||
|
join cai_user t2 on t1.follow_user = t2.id
|
||||||
|
where t1.user_id = #{query.userId}
|
||||||
|
order by create_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="pageMyFansApp" resultType="com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList">
|
||||||
|
select
|
||||||
|
t1.create_time as happen_time,
|
||||||
|
t2.id as user_id, t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age
|
||||||
from cai_user_follow t1
|
from cai_user_follow t1
|
||||||
join cai_user t2 on t1.user_id = t2.id
|
join cai_user t2 on t1.user_id = t2.id
|
||||||
<where>
|
where t1.follow_user = #{query.userId}
|
||||||
<if test="query.type == 1">
|
|
||||||
and t1.user_id = #{query.userId}
|
|
||||||
</if>
|
|
||||||
<if test="query.type == 2">
|
|
||||||
and t1.follow_user = #{query.userId}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
order by create_time desc
|
order by create_time desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user