Commit 2cf7ccd0 authored by liming's avatar liming

好友接口

parent c9108fa5
package com.antai.sport.http.server.constants;
/**
* @Author liming
* @Date 2021/8/23 15:42
* @Email lmmax@126.com
* @Description:
*/
public class FriendRequestStatus {
public final static Integer WAIT = 10;
public final static Integer ACCEPT = 20;
public final static Integer REJECT = 30;
}
package com.antai.sport.http.server.constants;
/**
* @Author liming
* @Date 2021/8/23 15:42
* @Email lmmax@126.com
* @Description:
*/
public class FriendStatus {
public final static Integer ALONE = 1;
public final static Integer TOGETHER = 2;
}
...@@ -2,14 +2,14 @@ package com.antai.sport.http.server.game.api.business.sport.social.controller; ...@@ -2,14 +2,14 @@ package com.antai.sport.http.server.game.api.business.sport.social.controller;
import com.antai.sport.http.server.common.annotation.LoginSportUser; import com.antai.sport.http.server.common.annotation.LoginSportUser;
import com.antai.sport.http.server.common.base.Result; import com.antai.sport.http.server.common.base.Result;
import com.antai.sport.http.server.game.api.business.sport.social.dto.ReqFriendRequestResponse;
import com.antai.sport.http.server.game.api.business.sport.social.dto.RespFriendRequestToMe;
import com.antai.sport.http.server.game.api.business.sport.social.service.FriendsService; import com.antai.sport.http.server.game.api.business.sport.social.service.FriendsService;
import com.antai.sport.http.server.repository.sport.entity.SportUser; import com.antai.sport.http.server.repository.sport.entity.SportUser;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
...@@ -29,4 +29,26 @@ public class FriendsController { ...@@ -29,4 +29,26 @@ public class FriendsController {
public ResponseEntity<Result<List<Long>>> getFriends(@LoginSportUser SportUser loginUser) { public ResponseEntity<Result<List<Long>>> getFriends(@LoginSportUser SportUser loginUser) {
return success(friendsService.getFriends(loginUser)); return success(friendsService.getFriends(loginUser));
} }
@ApiOperation(value = "查询发给我的好友请求")
@GetMapping("/requests")
public ResponseEntity<Result<List<RespFriendRequestToMe>>> getFriendsRequestToMe(@LoginSportUser SportUser loginUser) {
return success(friendsService.getFriendsRequestToMe(loginUser));
}
@ApiOperation(value = "发送好友请求", notes = "当重复提交待确认好友申请或已经是好友时会报业务异常,应在前端展示")
@GetMapping("/send/request/{targetUserId}")
public ResponseEntity<Result> sendFriendRequest(@PathVariable("targetUserId") Long targetUserId, @LoginSportUser SportUser loginUser) {
friendsService.sendFriendRequest(targetUserId, loginUser);
return success();
}
@ApiOperation(value = "响应好友请求")
@PostMapping("/response")
public ResponseEntity<Result> requestResponse(@RequestBody ReqFriendRequestResponse param, @LoginSportUser SportUser loginUser) {
friendsService.requestResponse(param, loginUser);
return success();
}
} }
package com.antai.sport.http.server.game.api.business.sport.social.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("好友响应请求参数")
public class ReqFriendRequestResponse {
@ApiModelProperty("好友请求id")
private Long requestId;
@ApiModelProperty("通过或拒绝")
private Boolean result;
}
package com.antai.sport.http.server.game.api.business.sport.social.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@ApiModel("好友请求")
@Data
public class RespFriendRequestToMe {
@ApiModelProperty("好友请求id")
private Integer requestId;
@ApiModelProperty("好友请求id")
private Long senderId;
@ApiModelProperty("状态 10:待接受 20:已接受 30:已拒绝")
private Integer status;
@ApiModelProperty("发出请求时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
}
package com.antai.sport.http.server.game.api.business.sport.social.mapper;
import com.antai.sport.http.server.game.api.business.sport.social.dto.RespFriendRequestToMe;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SportUserFriendRequestBusinessMapper {
List<RespFriendRequestToMe> getFriendsRequestToMe(Long sportUserId);
Boolean existFriendRequest(@Param("sportUserId") Long sportUserId, @Param("targetUserId") Long targetUserId);
}
package com.antai.sport.http.server.game.api.business.sport.social.mapper; package com.antai.sport.http.server.game.api.business.sport.social.mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
public interface SportUserFriendsBusinessMapper { public interface SportUserFriendsBusinessMapper {
List<Long> getFriends(Long sportUserId); List<Long> getFriends(Long sportUserId);
Boolean existFriend(@Param("sportUserId") Long sportUserId, @Param("targetUserId") Long targetUserId);
} }
package com.antai.sport.http.server.game.api.business.sport.social.service; package com.antai.sport.http.server.game.api.business.sport.social.service;
import com.antai.sport.http.server.common.annotation.LoginSportUser; import com.antai.sport.http.server.common.exception.BusinessException;
import com.antai.sport.http.server.constants.DeleteStatus;
import com.antai.sport.http.server.constants.FriendRequestStatus;
import com.antai.sport.http.server.constants.FriendStatus;
import com.antai.sport.http.server.game.api.business.sport.social.dto.ReqFriendRequestResponse;
import com.antai.sport.http.server.game.api.business.sport.social.dto.RespFriendRequestToMe;
import com.antai.sport.http.server.game.api.business.sport.social.mapper.SportUserFriendRequestBusinessMapper;
import com.antai.sport.http.server.game.api.business.sport.social.mapper.SportUserFriendsBusinessMapper; import com.antai.sport.http.server.game.api.business.sport.social.mapper.SportUserFriendsBusinessMapper;
import com.antai.sport.http.server.repository.sport.entity.SportUser; import com.antai.sport.http.server.repository.sport.entity.SportUser;
import com.antai.sport.http.server.repository.sport.entity.SportUserFriendRequest;
import com.antai.sport.http.server.repository.sport.entity.SportUserFriends;
import com.antai.sport.http.server.repository.sport.mapper.SportUserFriendRequestMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportUserFriendsMapper; import com.antai.sport.http.server.repository.sport.mapper.SportUserFriendsMapper;
import com.antai.sport.http.server.repository.sport.mapper.SportUserMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@Service @Service
...@@ -16,9 +28,93 @@ public class FriendsService { ...@@ -16,9 +28,93 @@ public class FriendsService {
private SportUserFriendsMapper sportUserFriendsMapper; private SportUserFriendsMapper sportUserFriendsMapper;
@Resource @Resource
private SportUserFriendsBusinessMapper sportUserFriendsBusinessMapper; private SportUserFriendsBusinessMapper sportUserFriendsBusinessMapper;
@Resource
private SportUserFriendRequestBusinessMapper sportUserFriendRequestBusinessMapper;
@Resource
private SportUserFriendRequestMapper sportUserFriendRequestMapper;
@Resource
private SportUserMapper sportUserMapper;
public List<Long> getFriends(@LoginSportUser SportUser loginUser) { public List<Long> getFriends(SportUser loginUser) {
return sportUserFriendsBusinessMapper.getFriends(loginUser.getId()); return sportUserFriendsBusinessMapper.getFriends(loginUser.getId());
} }
public List<RespFriendRequestToMe> getFriendsRequestToMe(SportUser loginUser) {
return sportUserFriendRequestBusinessMapper.getFriendsRequestToMe(loginUser.getId());
}
public void sendFriendRequest(Long targetUserId, SportUser loginUser) {
if (sportUserMapper.selectById(targetUserId) == null) {
throw new BusinessException("您请求的用户不存在");
}
if (sportUserFriendsBusinessMapper.existFriend(loginUser.getId(), targetUserId)) {
throw new BusinessException("你们已经是好友关系");
}
if (sportUserFriendRequestBusinessMapper.existFriendRequest(loginUser.getId(), targetUserId)) {
throw new BusinessException("您已经发起好友申请,不需要重复申请!");
}
SportUserFriendRequest request = new SportUserFriendRequest();
request.setSportUserId(loginUser.getId());
request.setTargetUserId(targetUserId);
request.setStatus(FriendRequestStatus.WAIT);
sportUserFriendRequestMapper.insert(request);
}
public void requestResponse(ReqFriendRequestResponse param, SportUser loginUser) {
if (param.getResult() == null) {
throw new BusinessException("响应结果参数异常");
}
SportUserFriendRequest request = sportUserFriendRequestMapper.selectById(param.getRequestId());
if (request == null) {
throw new BusinessException("好友请求不存在");
}
if (param.getResult() == null) {
throw new BusinessException("响应结果参数异常");
}
if (!request.getTargetUserId().equals(loginUser.getId())) {
throw new BusinessException("请求好友不是当前用户,响应请求失败");
}
request.setStatus(param.getResult() ? FriendRequestStatus.ACCEPT : FriendRequestStatus.REJECT);
request.setLmDate(LocalDateTime.now());
sportUserFriendRequestMapper.updateById(request);
if (param.getResult()) {
//建立我和他的好友关系
QueryWrapper<SportUserFriends> myFriendQuery = new QueryWrapper<>();
myFriendQuery.eq("deleted", DeleteStatus.UNDELETED).eq("sport_user_id", request.getTargetUserId())
.eq("friend_id", request.getSportUserId());
SportUserFriends myFriend = sportUserFriendsMapper.selectOne(myFriendQuery);
if (myFriend == null) {
myFriend = new SportUserFriends();
myFriend.setSportUserId(request.getTargetUserId());
myFriend.setFriendId(request.getSportUserId());
myFriend.setStatus(FriendStatus.TOGETHER);
sportUserFriendsMapper.insert(myFriend);
} else {
if (myFriend.getStatus().equals(FriendStatus.ALONE)) {
myFriend.setStatus(FriendStatus.TOGETHER);
sportUserFriendsMapper.updateById(myFriend);
}
}
//建立他和我的好友关系
QueryWrapper<SportUserFriends> theirFriendQuery = new QueryWrapper<>();
theirFriendQuery.eq("deleted", DeleteStatus.UNDELETED).eq("sport_user_id", request.getSportUserId())
.eq("friend_id", request.getTargetUserId());
SportUserFriends theirFriend = sportUserFriendsMapper.selectOne(theirFriendQuery);
if (theirFriend == null) {
theirFriend = new SportUserFriends();
theirFriend.setSportUserId(request.getSportUserId());
theirFriend.setFriendId(request.getTargetUserId());
theirFriend.setStatus(FriendStatus.TOGETHER);
sportUserFriendsMapper.insert(theirFriend);
} else {
if (theirFriend.getStatus().equals(FriendStatus.ALONE)) {
theirFriend.setStatus(FriendStatus.TOGETHER);
sportUserFriendsMapper.updateById(theirFriend);
}
}
}
}
} }
...@@ -73,6 +73,12 @@ public class SportUserController { ...@@ -73,6 +73,12 @@ public class SportUserController {
return success(); return success();
} }
@ApiOperation(value = "批量查询用户信息",notes = "body传入id数组")
@PostMapping("/users/info")
public ResponseEntity<Result<List<RespUserInfo>>> userInfo(@RequestBody List<Long> ids) {
return success(sportUserService.userInfo(ids));
}
// @ApiOperation(value = "用户角色信息获取") // @ApiOperation(value = "用户角色信息获取")
// @GetMapping("/user/role") // @GetMapping("/user/role")
// public ResponseEntity<Result<List<RespSportSection>>> getUserRole(@LoginSportUser SportUser loginUser) { // public ResponseEntity<Result<List<RespSportSection>>> getUserRole(@LoginSportUser SportUser loginUser) {
......
...@@ -23,6 +23,7 @@ import org.springframework.data.redis.core.RedisTemplate; ...@@ -23,6 +23,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils; import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.PathVariable;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -319,4 +320,20 @@ public class SportUserService { ...@@ -319,4 +320,20 @@ public class SportUserService {
} }
return userInfo; return userInfo;
} }
public List<RespUserInfo> userInfo(List<Long> ids){
QueryWrapper<SportUser> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id",ids);
List<SportUser> userList = sportUserMapper.selectList(queryWrapper);
List<RespUserInfo> resultList = new ArrayList<>(userList.size());
userList.forEach(user->{
RespUserInfo item = new RespUserInfo();
item.setUserId(user.getId());
item.setName(user.getNickname());
item.setAvatar(user.getAvatar());
resultList.add(item);
});
return resultList;
}
} }
package com.antai.sport.http.server.game.api.business.sport.user.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Map;
@Data
@ApiModel("用户信息")
public class RespUserInfo {
@ApiModelProperty("用户Id")
private Long userId;
@ApiModelProperty("用户姓名")
private String name;
@ApiModelProperty("头像")
private String avatar;
@ApiModelProperty("外观")
private Map<String,String> Appearance;
}
<?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.antai.sport.http.server.game.api.business.sport.social.mapper.SportUserFriendRequestBusinessMapper">
<select id="getFriendsRequestToMe"
resultType="com.antai.sport.http.server.game.api.business.sport.social.dto.RespFriendRequestToMe">
select id as requestId,sport_user_id as senderId,status,ct_date as createTime
from sport_user_friend_request
where deleted = 0
and target_user_id = #{sportUserId}
order by status,ct_date desc
</select>
<select id="existFriendRequest" resultType="java.lang.Boolean">
select count(0)>0
from sport_user_friend_request
where deleted = 0
and sport_user_id = #{sportUserId}
and target_user_id = #{targetUserId}
and status = 10
</select>
</mapper>
...@@ -8,5 +8,12 @@ ...@@ -8,5 +8,12 @@
where deleted = 0 where deleted = 0
and sport_user_id = #{sportUserId} and sport_user_id = #{sportUserId}
</select> </select>
<select id="existFriend" resultType="java.lang.Boolean">
select count(1)>0
from sport_user_friends
where deleted = 0
and sport_user_id = #{sportUserId}
and friend_id = #{targetUserId}
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment