Merge remote-tracking branch 'origin/wzj-main' into wzj-main
This commit is contained in:
commit
8a5397e5f6
@ -27,4 +27,11 @@ public interface CacheConstants {
|
|||||||
*/
|
*/
|
||||||
String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
|
String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户
|
||||||
|
*/
|
||||||
|
String MEMEBER="MEMEBER:";
|
||||||
|
|
||||||
|
String MEMBER_FANS="MEMBER_FANS:";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,89 +0,0 @@
|
|||||||
package org.dromara.common.web.core;
|
|
||||||
|
|
||||||
import cn.hutool.http.HttpStatus;
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 表格分页数据对象
|
|
||||||
*
|
|
||||||
* @author Lion Li
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
public class Page<T> implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 总记录数
|
|
||||||
*/
|
|
||||||
private long total;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 列表数据
|
|
||||||
*/
|
|
||||||
private List<T> rows;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 消息状态码
|
|
||||||
*/
|
|
||||||
private int code;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 消息内容
|
|
||||||
*/
|
|
||||||
private String msg;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页
|
|
||||||
*
|
|
||||||
* @param list 列表数据
|
|
||||||
* @param total 总记录数
|
|
||||||
*/
|
|
||||||
public Page(List<T> list, long total) {
|
|
||||||
this.rows = list;
|
|
||||||
this.total = total;
|
|
||||||
this.code = HttpStatus.HTTP_OK;
|
|
||||||
this.msg = "查询成功";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据分页对象构建表格分页数据对象
|
|
||||||
*/
|
|
||||||
public static <T> Page<T> build(IPage<T> page) {
|
|
||||||
Page<T> rspData = new Page<>();
|
|
||||||
rspData.setCode(HttpStatus.HTTP_OK);
|
|
||||||
rspData.setMsg("查询成功");
|
|
||||||
rspData.setRows(page.getRecords());
|
|
||||||
rspData.setTotal(page.getTotal());
|
|
||||||
return rspData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据数据列表构建表格分页数据对象
|
|
||||||
*/
|
|
||||||
public static <T> Page<T> build(List<T> list) {
|
|
||||||
Page<T> rspData = new Page<>();
|
|
||||||
rspData.setCode(HttpStatus.HTTP_OK);
|
|
||||||
rspData.setMsg("查询成功");
|
|
||||||
rspData.setRows(list);
|
|
||||||
rspData.setTotal(list.size());
|
|
||||||
return rspData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建表格分页数据对象
|
|
||||||
*/
|
|
||||||
public static <T> Page<T> build() {
|
|
||||||
Page<T> rspData = new Page<>();
|
|
||||||
rspData.setCode(HttpStatus.HTTP_OK);
|
|
||||||
rspData.setMsg("查询成功");
|
|
||||||
return rspData;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -140,6 +140,10 @@
|
|||||||
<groupId>org.dromara</groupId>
|
<groupId>org.dromara</groupId>
|
||||||
<artifactId>ruoyi-common-mongo</artifactId>
|
<artifactId>ruoyi-common-mongo</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara</groupId>
|
||||||
|
<artifactId>ruoyi-member</artifactId>
|
||||||
|
</dependency>
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>com.github.pagehelper</groupId>-->
|
<!-- <groupId>com.github.pagehelper</groupId>-->
|
||||||
<!-- <artifactId>pagehelper</artifactId>-->
|
<!-- <artifactId>pagehelper</artifactId>-->
|
||||||
|
@ -1,297 +0,0 @@
|
|||||||
package com.wzj.soopin.content.controller;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
|
|
||||||
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
|
|
||||||
import com.wzj.soopin.content.domain.po.Users;
|
|
||||||
import com.wzj.soopin.content.result.GraceJSONResult;
|
|
||||||
import com.wzj.soopin.content.result.ResponseStatusEnum;
|
|
||||||
import com.wzj.soopin.content.service.FansService;
|
|
||||||
import com.wzj.soopin.content.service.UserService;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@RequestMapping("fans")
|
|
||||||
@RestController
|
|
||||||
public class FansController extends BaseInfoProperties {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserService userService;
|
|
||||||
@Autowired
|
|
||||||
private FansService fansService;
|
|
||||||
|
|
||||||
@PostMapping("follow")
|
|
||||||
public GraceJSONResult follow(@RequestParam String myId,
|
|
||||||
@RequestParam String vlogerId) {
|
|
||||||
// 从redis中获取拉黑信息
|
|
||||||
String redisKey = REDIS_USER_BLOCK + ":" + myId;
|
|
||||||
Boolean hasKey = redis.keyIsExist(redisKey);
|
|
||||||
if(hasKey){
|
|
||||||
List<String> blockUserList = new ArrayList<>();
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
|
|
||||||
|
|
||||||
for (String report : reports) {
|
|
||||||
try {
|
|
||||||
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
|
|
||||||
// 处理拉黑信息
|
|
||||||
String queryvlogerId = (String) reportMap.get("vlogerId");
|
|
||||||
blockUserList.add(queryvlogerId);
|
|
||||||
} catch (JsonProcessingException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
System.out.println(blockUserList);
|
|
||||||
Boolean isBlock = blockUserList.contains(vlogerId);
|
|
||||||
if(isBlock){
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.ON_BLOCK);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断两个id不能为空
|
|
||||||
if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断当前用户,自己不能关注自己
|
|
||||||
if (myId.equalsIgnoreCase(vlogerId)) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 是否已经存在关系
|
|
||||||
Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
|
|
||||||
if(flow){
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.FANS_INFO_UPDATED_ISFAN_EXIST_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断两个id对应的用户是否存在
|
|
||||||
Users vloger = userService.getUser(vlogerId);
|
|
||||||
Users myInfo = userService.getUser(myId);
|
|
||||||
|
|
||||||
// fixme: 两个用户id的数据库查询后的判断,是分开好?还是合并判断好?
|
|
||||||
if (myInfo == null || vloger == null) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// 保存粉丝关系到数据库
|
|
||||||
fansService.doFollow(myId, vlogerId);
|
|
||||||
|
|
||||||
// 博主的粉丝+1,我的关注+1
|
|
||||||
redis.increment(REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
|
|
||||||
redis.increment(REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
|
|
||||||
|
|
||||||
// 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈
|
|
||||||
redis.set(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId, "1");
|
|
||||||
//
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("cancel")
|
|
||||||
public GraceJSONResult cancel(@RequestParam String myId,
|
|
||||||
@RequestParam String vlogerId) {
|
|
||||||
// 判断两个id不能为空
|
|
||||||
if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
|
||||||
}
|
|
||||||
// 是否已经存在关系
|
|
||||||
Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
|
|
||||||
if(!flow){
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.FANS_INFO_UPDATED_ISFLOW_EXIST_ERROR);
|
|
||||||
}
|
|
||||||
// 删除业务的执行
|
|
||||||
fansService.doCancel(myId, vlogerId);
|
|
||||||
|
|
||||||
// 博主的粉丝-1,我的关注-1
|
|
||||||
redis.decrement(REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
|
|
||||||
redis.decrement(REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
|
|
||||||
|
|
||||||
// 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈
|
|
||||||
redis.del(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("queryBlockVloger")
|
|
||||||
public GraceJSONResult queryBlockVloger(@RequestParam String myId,
|
|
||||||
@RequestParam String vlogerId) {
|
|
||||||
// 从redis中获取拉黑信息
|
|
||||||
String redisKey = REDIS_USER_BLOCK + ":" + myId;
|
|
||||||
Boolean hasKey = redis.keyIsExist(redisKey);
|
|
||||||
if(hasKey){
|
|
||||||
List<String> blockUserList = new ArrayList<>();
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
|
|
||||||
|
|
||||||
for (String report : reports) {
|
|
||||||
try {
|
|
||||||
Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
|
|
||||||
// 处理拉黑信息
|
|
||||||
String queryvlogerId = (String) reportMap.get("vlogerId");
|
|
||||||
blockUserList.add(queryvlogerId);
|
|
||||||
} catch (JsonProcessingException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
System.out.println(blockUserList);
|
|
||||||
return GraceJSONResult.ok(blockUserList.contains(vlogerId));
|
|
||||||
}else{
|
|
||||||
return GraceJSONResult.ok(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("block")
|
|
||||||
public GraceJSONResult block(@RequestParam String myId,
|
|
||||||
@RequestParam String vlogerId) {
|
|
||||||
// 先执行cancel
|
|
||||||
// 判断两个id不能为空
|
|
||||||
if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
|
||||||
}
|
|
||||||
// 是否已经存在关系
|
|
||||||
Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
|
|
||||||
if(flow){
|
|
||||||
// 删除业务的执行
|
|
||||||
fansService.doCancel(myId, vlogerId);
|
|
||||||
|
|
||||||
// 博主的粉丝-1,我的关注-1
|
|
||||||
redis.decrement(REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
|
|
||||||
redis.decrement(REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
|
|
||||||
|
|
||||||
// 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈
|
|
||||||
redis.del(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId);
|
|
||||||
}
|
|
||||||
// 拉黑
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
||||||
String blockTime = LocalDateTime.now().format(formatter);
|
|
||||||
try{
|
|
||||||
Map<String, String> blockInfo = new HashMap<>();
|
|
||||||
blockInfo.put("vlogerId", vlogerId);
|
|
||||||
blockInfo.put("myId", myId);
|
|
||||||
blockInfo.put("time", blockTime);
|
|
||||||
// 转成 JSON 字符串
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
String blockJson = objectMapper.writeValueAsString(blockInfo);
|
|
||||||
String redisKey = REDIS_USER_BLOCK + ":" + myId ;
|
|
||||||
log.info("写入Redis => key: {}, value: {}", redisKey, blockJson);
|
|
||||||
redis.rpush(redisKey , blockJson);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}catch (JsonProcessingException e){
|
|
||||||
// 打日志,或者抛出业务异常
|
|
||||||
e.printStackTrace();
|
|
||||||
throw new RuntimeException("JSON序列化失败: " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("cancelBlock")
|
|
||||||
public GraceJSONResult cancelBlock(@RequestParam String myId,
|
|
||||||
@RequestParam String vlogerId) {
|
|
||||||
// 判断两个id不能为空
|
|
||||||
if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
|
||||||
}
|
|
||||||
// 解除拉黑
|
|
||||||
String redisKey = REDIS_USER_BLOCK + ":" + myId;
|
|
||||||
Boolean hasKey = redis.keyIsExist(redisKey);
|
|
||||||
if(hasKey){
|
|
||||||
List<String> blockList = redis.lrange(redisKey, 0, -1);
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
if (blockList != null && !blockList.isEmpty()) {
|
|
||||||
for (String item : blockList) {
|
|
||||||
try {
|
|
||||||
Map<String, String> itemMap = objectMapper.readValue(item, new TypeReference<Map<String, String>>() {});
|
|
||||||
String storedVlogerId = itemMap.get("vlogerId");
|
|
||||||
|
|
||||||
if (storedVlogerId != null && storedVlogerId.equals(vlogerId)) {
|
|
||||||
redis.lrem(redisKey, 1, item); // 删除找到的 JSON 字符串
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}catch (JsonProcessingException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}else{
|
|
||||||
return GraceJSONResult.error();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("blockVideo")
|
|
||||||
public GraceJSONResult blockVideo(@RequestParam String myId,
|
|
||||||
@RequestParam String vlogId,
|
|
||||||
@RequestParam String reason,
|
|
||||||
@RequestParam(defaultValue = "") String description) {
|
|
||||||
// 判断两个id不能为空
|
|
||||||
if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogId)) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
|
||||||
}
|
|
||||||
// 拉黑
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
||||||
String blockTime = LocalDateTime.now().format(formatter);
|
|
||||||
//
|
|
||||||
try{
|
|
||||||
Map<String, String> blockInfo = new HashMap<>();
|
|
||||||
blockInfo.put("vlogId", vlogId);
|
|
||||||
blockInfo.put("reporter", myId);
|
|
||||||
blockInfo.put("time", blockTime);
|
|
||||||
blockInfo.put("reason", reason);
|
|
||||||
blockInfo.put("description", description);
|
|
||||||
// 转成 JSON 字符串
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
String blockJson = objectMapper.writeValueAsString(blockInfo);
|
|
||||||
|
|
||||||
String redisKey = REDIS_VIDEO_BLOCK + ":" + myId ;
|
|
||||||
log.info("写入Redis => key: {}, value: {}", redisKey, blockJson);
|
|
||||||
redis.rpush(redisKey , blockJson);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}catch (JsonProcessingException e){
|
|
||||||
// 打日志,或者抛出业务异常
|
|
||||||
e.printStackTrace();
|
|
||||||
throw new RuntimeException("JSON序列化失败: " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("queryDoIFollowVloger")
|
|
||||||
public GraceJSONResult queryDoIFollowVloger(@RequestParam String myId,
|
|
||||||
@RequestParam String vlogerId) {
|
|
||||||
return GraceJSONResult.ok(fansService.queryDoIFollowVloger(myId, vlogerId));
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("queryMyFollows")
|
|
||||||
public GraceJSONResult queryMyFollows(@RequestParam String myId,
|
|
||||||
@RequestParam Integer page,
|
|
||||||
@RequestParam Integer pageSize) {
|
|
||||||
return GraceJSONResult.ok(
|
|
||||||
fansService.queryMyFollows(
|
|
||||||
myId,
|
|
||||||
page,
|
|
||||||
pageSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("queryMyFans")
|
|
||||||
public GraceJSONResult queryMyFans(@RequestParam String myId,
|
|
||||||
@RequestParam Integer page,
|
|
||||||
@RequestParam Integer pageSize) {
|
|
||||||
return GraceJSONResult.ok(
|
|
||||||
fansService.queryMyFans(
|
|
||||||
myId,
|
|
||||||
page,
|
|
||||||
pageSize));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,210 +0,0 @@
|
|||||||
package com.wzj.soopin.content.controller;
|
|
||||||
|
|
||||||
|
|
||||||
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
|
|
||||||
import com.wzj.soopin.content.domain.bo.LoginWithPasswordBO;
|
|
||||||
import com.wzj.soopin.content.domain.bo.RegistLoginBO;
|
|
||||||
import com.wzj.soopin.content.domain.po.Users;
|
|
||||||
import com.wzj.soopin.content.domain.vo.UsersVO;
|
|
||||||
import com.wzj.soopin.content.result.GraceJSONResult;
|
|
||||||
import com.wzj.soopin.content.result.ResponseStatusEnum;
|
|
||||||
import com.wzj.soopin.content.service.UserService;
|
|
||||||
import com.wzj.soopin.content.utils.GsonUtil;
|
|
||||||
import com.wzj.soopin.content.utils.IPUtil;
|
|
||||||
import com.wzj.soopin.content.utils.SMSUtils;
|
|
||||||
import io.swagger.annotations.Api;
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author vercen
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2023/5/25 10:47
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("passport")
|
|
||||||
public class PassportController extends BaseInfoProperties {
|
|
||||||
@Autowired
|
|
||||||
private SMSUtils smsUtils;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserService userService;
|
|
||||||
|
|
||||||
// @Autowired
|
|
||||||
// private PasswordEncoder passwordEncoder;
|
|
||||||
|
|
||||||
@PostMapping("getSMSCode")
|
|
||||||
public Object getSMSCode(@RequestParam String mobile, HttpServletRequest request) throws Exception {
|
|
||||||
if (StringUtils.isBlank(mobile)) {
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO 获得用户ip 限制时间60s只能1次
|
|
||||||
String userIp = IPUtil.getRequestIp(request);
|
|
||||||
|
|
||||||
redis.setnx60s(MOBILE_SMSCODE + ":" + userIp, userIp);
|
|
||||||
String code = (int) ((Math.random() * 9 + 1) * 100000) + "";
|
|
||||||
|
|
||||||
smsUtils.sendSMS(mobile, code);
|
|
||||||
|
|
||||||
log.info(code);
|
|
||||||
redis.set(MOBILE_SMSCODE + ":" + mobile, code, 30 * 60);
|
|
||||||
// TODO 验证码放入redis
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("login")
|
|
||||||
public Object login(@Valid @RequestBody RegistLoginBO registLoginBO) {
|
|
||||||
|
|
||||||
String rediscode = redis.get(MOBILE_SMSCODE + ":" + registLoginBO.getMobile());
|
|
||||||
|
|
||||||
if (StringUtils.isBlank(rediscode) || !rediscode.equalsIgnoreCase(registLoginBO.getSmsCode())) {
|
|
||||||
System.out.println("rediscode" + rediscode);
|
|
||||||
System.out.println("registLoginBO.getMobile()" + registLoginBO.getSmsCode());
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SMS_CODE_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
Users user = userService.queryMobileIsExist(registLoginBO.getMobile());
|
|
||||||
if (user == null) {
|
|
||||||
user = userService.createUser(registLoginBO.getMobile());
|
|
||||||
}
|
|
||||||
String uToken = UUID.randomUUID().toString();
|
|
||||||
log.info(uToken);
|
|
||||||
redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
|
|
||||||
|
|
||||||
// 清除验证码
|
|
||||||
redis.del(MOBILE_SMSCODE + ":" + user.getMobile());
|
|
||||||
|
|
||||||
// 返回给前端
|
|
||||||
UsersVO usersVO = new UsersVO();
|
|
||||||
BeanUtils.copyProperties(user, usersVO);
|
|
||||||
usersVO.setUserToken(uToken);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok(usersVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从商城系统登录
|
|
||||||
*
|
|
||||||
* @param mobile
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@PostMapping("loginFromShop")
|
|
||||||
public String loginFromShop(String mobile, String memberId) {
|
|
||||||
// 创建短视频系统账号
|
|
||||||
return Optional.ofNullable(userService.createUserFromShop(mobile, memberId))//
|
|
||||||
.map(user -> {
|
|
||||||
String uToken = UUID.randomUUID().toString();
|
|
||||||
log.info(uToken);
|
|
||||||
redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
|
|
||||||
// 返回给前端
|
|
||||||
UsersVO usersVO = new UsersVO();
|
|
||||||
BeanUtils.copyProperties(user, usersVO);
|
|
||||||
usersVO.setUserToken(uToken);
|
|
||||||
|
|
||||||
return GsonUtil.beanToJson(usersVO);
|
|
||||||
})//
|
|
||||||
.orElseGet(() -> StringUtils.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从商城登录获取短视频账户信息
|
|
||||||
*
|
|
||||||
* @param memberId
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@PostMapping("getUserFromShop")
|
|
||||||
public String getUserFromShop(String memberId) {
|
|
||||||
return userService.getUserInfoFromShop(memberId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*@PostMapping("login")
|
|
||||||
public Object login(@Valid @RequestBody RegistLoginBO registLoginBO) {
|
|
||||||
String rediscode = redis.get(MOBILE_SMSCODE + ":" + registLoginBO.getMobile());
|
|
||||||
|
|
||||||
if (StringUtils.isBlank(rediscode) || !rediscode.equalsIgnoreCase(registLoginBO.getSmsCode())) {
|
|
||||||
System.out.println("rediscode" + rediscode);
|
|
||||||
System.out.println("registLoginBO.getMobile()" + registLoginBO.getSmsCode());
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.SMS_CODE_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 手机号
|
|
||||||
String mobile = registLoginBO.getMobile();
|
|
||||||
Users user = userService.queryMobileIsExist(mobile);
|
|
||||||
Token shopToken = null;
|
|
||||||
if (user == null) {
|
|
||||||
Map<String, Object> result = userService.createUserNew(mobile);
|
|
||||||
if (CommonUtil.isEmpty(result)) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.FAILED);
|
|
||||||
}
|
|
||||||
user = (Users) result.get("user");
|
|
||||||
shopToken = (Token) result.get("token");
|
|
||||||
} else {
|
|
||||||
shopToken = userService.getShopToken(user.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
String uToken = UUID.randomUUID().toString();
|
|
||||||
log.info(uToken);
|
|
||||||
redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
|
|
||||||
|
|
||||||
// 清除验证码
|
|
||||||
redis.del(MOBILE_SMSCODE + ":" + user.getMobile());
|
|
||||||
|
|
||||||
// 返回给前端
|
|
||||||
UsersVO usersVO = new UsersVO();
|
|
||||||
BeanUtils.copyProperties(user, usersVO);
|
|
||||||
usersVO.setUserToken(uToken);
|
|
||||||
//usersVO.setShopToken(shopToken);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok(usersVO);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@PostMapping("loginWithPassword")
|
|
||||||
public Object loginWithPassword(@Valid @RequestBody LoginWithPasswordBO loginWithPasswordBO) {
|
|
||||||
String phone = loginWithPasswordBO.getMobile();
|
|
||||||
String password = loginWithPasswordBO.getPassword();
|
|
||||||
log.info(phone);
|
|
||||||
log.info(password);
|
|
||||||
Users user = userService.queryMobileIsExist(phone);
|
|
||||||
if (user == null) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.USER_NOT_EXIST_ERROR);
|
|
||||||
}
|
|
||||||
// if (!passwordEncoder.matches(password, user.getPassword())) {
|
|
||||||
// return GraceJSONResult.errorCustom(ResponseStatusEnum.USER_PASSWORD_ERROR);
|
|
||||||
// }
|
|
||||||
|
|
||||||
String uToken = UUID.randomUUID().toString();
|
|
||||||
log.info(uToken);
|
|
||||||
redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
|
|
||||||
// 商城token
|
|
||||||
// Token shopToken = userService.getShopToken(user.getId());
|
|
||||||
|
|
||||||
// 返回给前端
|
|
||||||
UsersVO usersVO = new UsersVO();
|
|
||||||
BeanUtils.copyProperties(user, usersVO);
|
|
||||||
usersVO.setUserToken(uToken);
|
|
||||||
// usersVO.setShopToken(shopToken);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok(usersVO);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("logout")
|
|
||||||
public Object logout(@RequestParam String userId) {
|
|
||||||
|
|
||||||
redis.del(REDIS_USER_TOKEN + ":" + userId);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,145 +0,0 @@
|
|||||||
package com.wzj.soopin.content.controller;
|
|
||||||
|
|
||||||
|
|
||||||
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
|
|
||||||
import com.wzj.soopin.content.domain.bo.UpdatedUserBO;
|
|
||||||
import com.wzj.soopin.content.domain.po.Users;
|
|
||||||
import com.wzj.soopin.content.domain.vo.UsersVO;
|
|
||||||
import com.wzj.soopin.content.enums.FileTypeEnum;
|
|
||||||
import com.wzj.soopin.content.enums.UserInfoModifyType;
|
|
||||||
import com.wzj.soopin.content.result.GraceJSONResult;
|
|
||||||
import com.wzj.soopin.content.result.ResponseStatusEnum;
|
|
||||||
import com.wzj.soopin.content.service.UserService;
|
|
||||||
import com.wzj.soopin.content.utils.MinIOUtils;
|
|
||||||
import io.swagger.annotations.Api;
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author vercen
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2023/5/20 14:32
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@Slf4j
|
|
||||||
@RequestMapping("userInfo")
|
|
||||||
public class UserInfoController extends BaseInfoProperties {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
UserService userService;
|
|
||||||
|
|
||||||
// @ResponseBody
|
|
||||||
@ApiOperation(value = "根据userId返回个人信息")
|
|
||||||
@GetMapping("query")
|
|
||||||
public Object query(@RequestParam String userId){
|
|
||||||
Users user = userService.getUser(userId);
|
|
||||||
|
|
||||||
UsersVO usersVO = new UsersVO();
|
|
||||||
BeanUtils.copyProperties(user, usersVO);
|
|
||||||
|
|
||||||
|
|
||||||
// 我的关注博主总数量
|
|
||||||
String myFollowsCountsStr = redis.get(REDIS_MY_FOLLOWS_COUNTS + ":" + userId);
|
|
||||||
// 我的粉丝总数
|
|
||||||
String myFansCountsStr = redis.get(REDIS_MY_FANS_COUNTS + ":" + userId);
|
|
||||||
// 用户获赞总数,视频博主(点赞/喜欢)总和
|
|
||||||
// String likedVlogCountsStr = redis.get(REDIS_VLOG_BE_LIKED_COUNTS + ":" + userId);
|
|
||||||
String likedVlogerCountsStr = redis.get(REDIS_VLOGER_BE_LIKED_COUNTS + ":" + userId);
|
|
||||||
|
|
||||||
Integer myFollowsCounts = 0;
|
|
||||||
Integer myFansCounts = 0;
|
|
||||||
Integer likedVlogCounts = 0;
|
|
||||||
Integer likedVlogerCounts = 0;
|
|
||||||
Integer totalLikeMeCounts = 0;
|
|
||||||
|
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(myFollowsCountsStr)) {
|
|
||||||
myFollowsCounts = Integer.valueOf(myFollowsCountsStr);
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotBlank(myFansCountsStr)) {
|
|
||||||
myFansCounts = Integer.valueOf(myFansCountsStr);
|
|
||||||
}
|
|
||||||
// if (StringUtils.isNotBlank(likedVlogCountsStr)) {
|
|
||||||
// likedVlogCounts = Integer.valueOf(likedVlogCountsStr);
|
|
||||||
// }
|
|
||||||
if (StringUtils.isNotBlank(likedVlogerCountsStr)) {
|
|
||||||
likedVlogerCounts = Integer.valueOf(likedVlogerCountsStr);
|
|
||||||
}
|
|
||||||
totalLikeMeCounts = likedVlogCounts + likedVlogerCounts;
|
|
||||||
|
|
||||||
usersVO.setMyFollowsCounts(myFollowsCounts);
|
|
||||||
usersVO.setMyFansCounts(myFansCounts);
|
|
||||||
usersVO.setTotalLikeMeCounts(totalLikeMeCounts);
|
|
||||||
|
|
||||||
//usersVO.setMyFansCounts((Integer) myFansCounts);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok(usersVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("modifyUserInfo")
|
|
||||||
public GraceJSONResult modifyUserInfo(@RequestBody UpdatedUserBO updatedUserBO, @RequestParam Integer type) throws Exception {
|
|
||||||
|
|
||||||
UserInfoModifyType.checkUserInfoTypeIsRight(type);
|
|
||||||
Users newUserInfo = userService.updateUserInfo(updatedUserBO, type);
|
|
||||||
return GraceJSONResult.ok(newUserInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("modifyImage")
|
|
||||||
public GraceJSONResult modifyImage(@RequestParam String userId,
|
|
||||||
@RequestParam Integer type,
|
|
||||||
MultipartFile file) throws Exception {
|
|
||||||
|
|
||||||
if (type != FileTypeEnum.BGIMG.type && type != FileTypeEnum.FACE.type) {
|
|
||||||
return GraceJSONResult.errorCustom(ResponseStatusEnum.FILE_UPLOAD_FAILD);
|
|
||||||
}
|
|
||||||
|
|
||||||
String fileName = file.getOriginalFilename();
|
|
||||||
|
|
||||||
// MinIOUtils.uploadFile(minIOConfig.getBucketName(),
|
|
||||||
// fileName,
|
|
||||||
// file.getInputStream());
|
|
||||||
//
|
|
||||||
// String imgUrl = minIOConfig.getFileHost()
|
|
||||||
// + "/"
|
|
||||||
// + minIOConfig.getBucketName()
|
|
||||||
// + "/"
|
|
||||||
// + fileName;
|
|
||||||
|
|
||||||
|
|
||||||
// 修改图片地址到数据库
|
|
||||||
UpdatedUserBO updatedUserBO = new UpdatedUserBO();
|
|
||||||
updatedUserBO.setId(userId);
|
|
||||||
|
|
||||||
// if (type == FileTypeEnum.BGIMG.type) {
|
|
||||||
// updatedUserBO.setBgImg(imgUrl);
|
|
||||||
// } else {
|
|
||||||
// updatedUserBO.setFace(imgUrl);
|
|
||||||
// }
|
|
||||||
Users users = userService.updateUserInfo(updatedUserBO);
|
|
||||||
|
|
||||||
return GraceJSONResult.ok(users);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ApiOperation(value = "根据昵称搜索用户")
|
|
||||||
@GetMapping("searchByNickname")
|
|
||||||
public GraceJSONResult searchByNickname(@RequestParam String nickname,
|
|
||||||
@RequestParam(defaultValue = "") String id,
|
|
||||||
@RequestParam Integer page,
|
|
||||||
@RequestParam Integer pageSize){
|
|
||||||
try {
|
|
||||||
return GraceJSONResult.ok(userService.searchByNickname(nickname, page, pageSize,id));
|
|
||||||
} catch (Exception e) {
|
|
||||||
// 记录异常日志
|
|
||||||
log.error("搜索用户时发生异常,nickname: {}, page: {}, pageSize: {}", nickname, page, pageSize, e);
|
|
||||||
return GraceJSONResult.errorMsg("搜索用户时发生异常,请稍后重试");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,14 +1,17 @@
|
|||||||
package com.wzj.soopin.content.controller.admin;
|
package com.wzj.soopin.content.controller.admin;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.tencentcloudapi.vod.v20180717.models.*;
|
import com.tencentcloudapi.vod.v20180717.models.*;
|
||||||
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
|
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
|
||||||
import com.wzj.soopin.content.mapper.FansMapper;
|
|
||||||
import com.wzj.soopin.content.mapper.FansMapperCustom;
|
|
||||||
import com.wzj.soopin.content.mapper.MyLikedVlogMapper;
|
import com.wzj.soopin.content.mapper.MyLikedVlogMapper;
|
||||||
import com.wzj.soopin.content.result.GraceJSONResult;
|
import com.wzj.soopin.content.result.GraceJSONResult;
|
||||||
import com.wzj.soopin.content.service.VlogUploadService;
|
import com.wzj.soopin.content.service.VlogUploadService;
|
||||||
import com.wzj.soopin.content.utils.RedisOperator;
|
import com.wzj.soopin.content.utils.RedisOperator;
|
||||||
import com.wzj.soopin.content.utils.TencentCloudUtil;
|
import com.wzj.soopin.content.utils.TencentCloudUtil;
|
||||||
|
import com.wzj.soopin.member.domain.vo.FansVO;
|
||||||
|
import com.wzj.soopin.member.mapper.FansMapper;
|
||||||
|
import com.wzj.soopin.member.service.IFansService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import io.swagger.annotations.ApiParam;
|
import io.swagger.annotations.ApiParam;
|
||||||
@ -23,8 +26,6 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Api(tags = "管理端-视频上传接口")
|
@Api(tags = "管理端-视频上传接口")
|
||||||
@RequestMapping("admin/vlog/upload")
|
@RequestMapping("admin/vlog/upload")
|
||||||
@ -50,10 +51,9 @@ public class VlogUploadController extends BaseInfoProperties {
|
|||||||
private MyLikedVlogMapper myLikedVlogMapper;
|
private MyLikedVlogMapper myLikedVlogMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FansMapper fansMapper;
|
private IFansService fansService;
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private FansMapperCustom fansMapperCustom;
|
|
||||||
|
|
||||||
@ApiOperation("获取腾讯云点播视频列表")
|
@ApiOperation("获取腾讯云点播视频列表")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@ -180,7 +180,7 @@ public class VlogUploadController extends BaseInfoProperties {
|
|||||||
fansCounts = Integer.valueOf(fansCountsStr);
|
fansCounts = Integer.valueOf(fansCountsStr);
|
||||||
} else {
|
} else {
|
||||||
// Redis 中没有,从数据库查询
|
// Redis 中没有,从数据库查询
|
||||||
fansCounts = fansMapper.countFansByVlogerId(vlog.getVlogerId());
|
fansCounts = fansService.countFansByVlogerId(vlog.getVlogerId());
|
||||||
// 可以选择在这里将数据库查询结果写入 Redis,以便下次使用
|
// 可以选择在这里将数据库查询结果写入 Redis,以便下次使用
|
||||||
if (fansCounts != null) {
|
if (fansCounts != null) {
|
||||||
redis.set(REDIS_MY_FANS_COUNTS + ":" + vlog.getVlogerId(), String.valueOf(fansCounts));
|
redis.set(REDIS_MY_FANS_COUNTS + ":" + vlog.getVlogerId(), String.valueOf(fansCounts));
|
||||||
@ -267,10 +267,8 @@ public class VlogUploadController extends BaseInfoProperties {
|
|||||||
List<Map<String, Object>> likedUsers = myLikedVlogMapper.selectLikedUsersByVlogId(vlog.getId());
|
List<Map<String, Object>> likedUsers = myLikedVlogMapper.selectLikedUsersByVlogId(vlog.getId());
|
||||||
result.put("likedUsers", likedUsers);
|
result.put("likedUsers", likedUsers);
|
||||||
|
|
||||||
// 查询粉丝列表
|
|
||||||
Map<String, Object> fansQueryMap = new HashMap<>();
|
IPage<FansVO> fansList = fansService.queryMyFans(vlog.getVlogerId(),0,10);
|
||||||
fansQueryMap.put("myId", vlog.getVlogerId());
|
|
||||||
List<com.wzj.soopin.content.domain.vo.FansVO> fansList = fansMapperCustom.queryMyFans(fansQueryMap);
|
|
||||||
result.put("fansList", fansList);
|
result.put("fansList", fansList);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
package com.wzj.soopin.content.mapper;
|
|
||||||
|
|
||||||
import com.wzj.soopin.content.domain.po.Fans;
|
|
||||||
import com.wzj.soopin.content.domain.po.Vlog;
|
|
||||||
import com.wzj.soopin.content.domain.vo.FansVO;
|
|
||||||
import com.wzj.soopin.content.domain.vo.VlogerVO;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
public interface FansMapperCustom extends BaseMapperPlus<Vlog, VlogerVO> {
|
|
||||||
|
|
||||||
public List<VlogerVO> queryMyFollows(@Param("paramMap") Map<String, Object> map);
|
|
||||||
|
|
||||||
public List<FansVO> queryMyFans(@Param("paramMap") Map<String, Object> map);
|
|
||||||
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
package com.wzj.soopin.content.mapper;
|
|
||||||
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import com.wzj.soopin.content.domain.bo.UpdatedUserBO;
|
|
||||||
import com.wzj.soopin.content.domain.po.Users;
|
|
||||||
import com.wzj.soopin.content.domain.vo.UsersVO;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
import org.apache.ibatis.annotations.Select;
|
|
||||||
import org.apache.ibatis.annotations.Update;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface UsersMapper extends BaseMapper<Users> {
|
|
||||||
|
|
||||||
@Select("SELECT * FROM t_users WHERE nickname LIKE CONCAT('%', #{nickname}, '%')")
|
|
||||||
List<UsersVO> searchByNickname(String nickname);
|
|
||||||
@Update("UPDATE t_users SET nickname = #{nickname} WHERE id = #{id}")
|
|
||||||
int updateNickname(UpdatedUserBO user);
|
|
||||||
@Update("UPDATE t_users SET sex = #{sex} WHERE id = #{id}")
|
|
||||||
int updateSex(UpdatedUserBO user);
|
|
||||||
@Update("UPDATE t_users SET birthday = #{birthday} WHERE id = #{id}")
|
|
||||||
int updateBirthday(UpdatedUserBO user);
|
|
||||||
@Update("UPDATE t_users SET description = #{description} WHERE id = #{id}")
|
|
||||||
int updateDescription(UpdatedUserBO user);
|
|
||||||
@Update("UPDATE t_users SET province = #{province},city = #{city},district = #{district} WHERE id = #{id}")
|
|
||||||
int updateLocation(UpdatedUserBO user);
|
|
||||||
@Update("UPDATE t_users SET imooc_num = #{imoocNum},can_imooc_num_be_updated = 0 WHERE id = #{id}")
|
|
||||||
int updateVnum(UpdatedUserBO user);
|
|
||||||
@Select("SELECT * FROM t_users WHERE imooc_num = #{imoocNum}")
|
|
||||||
List<UsersVO> selectByImoocNum(@Param("imoocNum") String imoocNum);
|
|
||||||
|
|
||||||
Users selectByPrimaryKey(String userId);
|
|
||||||
|
|
||||||
void updateByPrimaryKeySelective(Users users);
|
|
||||||
|
|
||||||
int inset(Users user);
|
|
||||||
}
|
|
@ -1,82 +0,0 @@
|
|||||||
package com.wzj.soopin.content.service;
|
|
||||||
|
|
||||||
|
|
||||||
import com.wzj.soopin.content.domain.bo.UpdatedUserBO;
|
|
||||||
import com.wzj.soopin.content.domain.mo.Token;
|
|
||||||
import com.wzj.soopin.content.domain.po.Users;
|
|
||||||
import com.wzj.soopin.content.domain.vo.UsersVO;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author vercen
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2023/5/25 21:02
|
|
||||||
*/
|
|
||||||
public interface UserService {
|
|
||||||
/**
|
|
||||||
* 判断用户是否存在,如果存在则返回用户信息
|
|
||||||
*/
|
|
||||||
public Users queryMobileIsExist(String mobile);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建用户信息,并且返回用户对象
|
|
||||||
*/
|
|
||||||
public Users createUser(String mobile);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据用户主键查询用户信息
|
|
||||||
*/
|
|
||||||
public Users getUser(String userId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户信息修改
|
|
||||||
*/
|
|
||||||
public Users updateUserInfo(UpdatedUserBO updatedUserBO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户信息修改
|
|
||||||
*/
|
|
||||||
public Users updateUserInfo(UpdatedUserBO updatedUserBO, Integer type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建用户打通短视频和商城系统
|
|
||||||
*
|
|
||||||
* @param mobile
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
Map<String, Object> createUserNew(String mobile);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取商城token
|
|
||||||
*
|
|
||||||
* @param userId
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
Token getShopToken(String userId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从商城系统创建账号
|
|
||||||
*
|
|
||||||
* @param mobile
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
Users createUserFromShop(String mobile, String memberId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从商城系统获取短视频账户信息
|
|
||||||
* @param memberId
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
String getUserInfoFromShop(String memberId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据昵称搜索用户
|
|
||||||
* @param nickname
|
|
||||||
* @param page
|
|
||||||
* @param pageSize
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<UsersVO> searchByNickname(String nickname, Integer page, Integer pageSize, String id);
|
|
||||||
}
|
|
@ -7,7 +7,10 @@ import com.wzj.soopin.content.domain.po.Users;
|
|||||||
import com.wzj.soopin.content.enums.MessageEnum;
|
import com.wzj.soopin.content.enums.MessageEnum;
|
||||||
import com.wzj.soopin.content.mapper.repository.MessageRepository;
|
import com.wzj.soopin.content.mapper.repository.MessageRepository;
|
||||||
import com.wzj.soopin.content.service.MsgService;
|
import com.wzj.soopin.content.service.MsgService;
|
||||||
import com.wzj.soopin.content.service.UserService;
|
import com.wzj.soopin.member.domain.po.Member;
|
||||||
|
import com.wzj.soopin.member.mapper.MemberMapper;
|
||||||
|
import com.wzj.soopin.member.service.IMemberService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
@ -21,13 +24,13 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class MsgServiceImpl extends BaseInfoProperties implements MsgService {
|
public class MsgServiceImpl extends BaseInfoProperties implements MsgService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MessageRepository messageRepository;
|
private MessageRepository messageRepository;
|
||||||
|
|
||||||
@Autowired
|
private final MemberMapper memberMapper;
|
||||||
private UserService userService;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createMsg(String fromUserId,
|
public void createMsg(String fromUserId,
|
||||||
@ -35,13 +38,13 @@ public class MsgServiceImpl extends BaseInfoProperties implements MsgService {
|
|||||||
Integer type,
|
Integer type,
|
||||||
Map msgContent) {
|
Map msgContent) {
|
||||||
|
|
||||||
Users fromUser = userService.getUser(fromUserId);
|
Member fromUser = memberMapper.selectById(fromUserId);
|
||||||
|
|
||||||
MessageMO messageMO = new MessageMO();
|
MessageMO messageMO = new MessageMO();
|
||||||
|
|
||||||
messageMO.setFromUserId(fromUserId);
|
messageMO.setFromUserId(fromUserId);
|
||||||
messageMO.setFromNickname(fromUser.getNickname());
|
messageMO.setFromNickname(fromUser.getNickname());
|
||||||
messageMO.setFromFace(fromUser.getFace());
|
messageMO.setFromFace(fromUser.getAvatar());
|
||||||
|
|
||||||
messageMO.setToUserId(toUserId);
|
messageMO.setToUserId(toUserId);
|
||||||
|
|
||||||
|
@ -1,320 +0,0 @@
|
|||||||
package com.wzj.soopin.content.service.impl;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
|
|
||||||
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
|
|
||||||
import com.wzj.soopin.content.domain.bo.UpdatedUserBO;
|
|
||||||
import com.wzj.soopin.content.domain.exceptions.GraceException;
|
|
||||||
import com.wzj.soopin.content.domain.mo.Token;
|
|
||||||
import com.wzj.soopin.content.domain.po.Fans;
|
|
||||||
import com.wzj.soopin.content.domain.po.UserMember;
|
|
||||||
import com.wzj.soopin.content.domain.po.Users;
|
|
||||||
import com.wzj.soopin.content.domain.result.ResponseStatusEnum;
|
|
||||||
import com.wzj.soopin.content.domain.vo.UsersVO;
|
|
||||||
import com.wzj.soopin.content.enums.Sex;
|
|
||||||
import com.wzj.soopin.content.enums.UserInfoModifyType;
|
|
||||||
import com.wzj.soopin.content.enums.YesOrNo;
|
|
||||||
import com.wzj.soopin.content.mapper.FansMapper;
|
|
||||||
import com.wzj.soopin.content.mapper.FansMapperCustom;
|
|
||||||
import com.wzj.soopin.content.mapper.UserMemberMapper;
|
|
||||||
import com.wzj.soopin.content.mapper.UsersMapper;
|
|
||||||
import com.wzj.soopin.content.service.FansService;
|
|
||||||
import com.wzj.soopin.content.service.UserService;
|
|
||||||
import com.wzj.soopin.content.utils.*;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import org.springframework.util.LinkedMultiValueMap;
|
|
||||||
import org.springframework.util.MultiValueMap;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author vercen
|
|
||||||
* @version 1.0
|
|
||||||
* @date 2023/5/25 21:02
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
public class UserServiceImpl extends BaseInfoProperties implements UserService {
|
|
||||||
@Autowired
|
|
||||||
private UsersMapper usersMapper;
|
|
||||||
@Autowired
|
|
||||||
private FansMapperCustom fansMapperCustom;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserMemberMapper userMemberMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private FansMapper fansMapper;
|
|
||||||
|
|
||||||
//@Autowired
|
|
||||||
//public RedisOperator redis;
|
|
||||||
|
|
||||||
@Resource(name = "redisTemplate")
|
|
||||||
private RedisTemplate<String, Object> redisTemplate;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private Sid sid;
|
|
||||||
private static final String USER_FACE1 = "http://43.143.227.203:29000/bucket/logo.png";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Users queryMobileIsExist(String mobile) {
|
|
||||||
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
|
|
||||||
queryWrapper.eq(Users::getMobile, mobile);
|
|
||||||
return usersMapper.selectOne(queryWrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Users createUser(String mobile) {
|
|
||||||
String userId = sid.nextShort();
|
|
||||||
|
|
||||||
Users user = new Users();
|
|
||||||
user.setId(userId);
|
|
||||||
user.setPassword(mobile);
|
|
||||||
user.setMobile(mobile);
|
|
||||||
user.setNickname("用户:" + DesensitizationUtil.commonDisplay(mobile));
|
|
||||||
user.setImoocNum("用户:" + DesensitizationUtil.commonDisplay(mobile));
|
|
||||||
user.setFace(USER_FACE1);
|
|
||||||
user.setBirthday(DateUtil.stringToDate("1999-01-01"));
|
|
||||||
user.setSex(Sex.secret.type);
|
|
||||||
user.setBgImg(USER_FACE1);
|
|
||||||
user.setCountry("中国");
|
|
||||||
user.setProvince("");
|
|
||||||
user.setCity("");
|
|
||||||
user.setDistrict("");
|
|
||||||
user.setDescription("这家伙很懒,什么都没留下~");
|
|
||||||
user.setCanImoocNumBeUpdated(YesOrNo.YES.type);
|
|
||||||
|
|
||||||
usersMapper.insert(user);
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Users getUser(String userId) {
|
|
||||||
return usersMapper.selectById(userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
@Override
|
|
||||||
public Users updateUserInfo(UpdatedUserBO updatedUserBO) {
|
|
||||||
Users users = new Users();
|
|
||||||
BeanUtils.copyProperties(updatedUserBO, users);
|
|
||||||
usersMapper.updateById(users);
|
|
||||||
return getUser(updatedUserBO.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
|
||||||
@Override
|
|
||||||
public Users updateUserInfo(UpdatedUserBO updatedUserBO, Integer type) {
|
|
||||||
LambdaUpdateWrapper<Users> updateWrapper = new LambdaUpdateWrapper<>();
|
|
||||||
updateWrapper.eq(Users::getId, updatedUserBO.getId());
|
|
||||||
|
|
||||||
UserInfoModifyType modifyType = UserInfoModifyType.getTypeByValue(type);
|
|
||||||
switch (modifyType) {
|
|
||||||
case NICKNAME:
|
|
||||||
updateWrapper.set(Users::getNickname, updatedUserBO.getNickname());
|
|
||||||
break;
|
|
||||||
case SEX:
|
|
||||||
updateWrapper.set(Users::getSex, updatedUserBO.getSex());
|
|
||||||
break;
|
|
||||||
case BIRTHDAY:
|
|
||||||
updateWrapper.set(Users::getBirthday, updatedUserBO.getBirthday());
|
|
||||||
break;
|
|
||||||
case LOCATION:
|
|
||||||
updateWrapper.set(Users::getCountry, updatedUserBO.getCountry())
|
|
||||||
.set(Users::getProvince, updatedUserBO.getProvince())
|
|
||||||
.set(Users::getCity, updatedUserBO.getCity())
|
|
||||||
.set(Users::getDistrict, updatedUserBO.getDistrict());
|
|
||||||
break;
|
|
||||||
case DESC:
|
|
||||||
updateWrapper.set(Users::getDescription, updatedUserBO.getDescription());
|
|
||||||
break;
|
|
||||||
case IMOOCNUM:
|
|
||||||
if (updatedUserBO.getCanImoocNumBeUpdated() == YesOrNo.NO.type) {
|
|
||||||
GraceException.display(ResponseStatusEnum.USER_INFO_CANT_UPDATED_IMOOCNUM_ERROR);
|
|
||||||
}
|
|
||||||
// 校验唯一性
|
|
||||||
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
|
|
||||||
queryWrapper.eq(Users::getImoocNum, updatedUserBO.getImoocNum());
|
|
||||||
if (usersMapper.selectCount(queryWrapper) > 0) {
|
|
||||||
GraceException.display(ResponseStatusEnum.USER_INFO_UPDATED_IMOOCNUM_EXIST_ERROR);
|
|
||||||
}
|
|
||||||
updateWrapper.set(Users::getImoocNum, updatedUserBO.getImoocNum());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
usersMapper.update(null, updateWrapper);
|
|
||||||
return getUser(updatedUserBO.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional(rollbackFor = RuntimeException.class)
|
|
||||||
@Override
|
|
||||||
public Map<String, Object> createUserNew(String mobile) {
|
|
||||||
String userId = sid.nextShort();
|
|
||||||
Users user = new Users();
|
|
||||||
user.setId(userId);
|
|
||||||
// user.setPassword(passwordEncoder.encode(mobile));
|
|
||||||
user.setMobile(mobile);
|
|
||||||
user.setNickname("用户:" + DesensitizationUtil.commonDisplay(mobile));
|
|
||||||
user.setImoocNum("用户:" + DesensitizationUtil.commonDisplay(mobile));
|
|
||||||
user.setFace(USER_FACE1);
|
|
||||||
user.setBirthday(DateUtil.stringToDate("1999-01-01"));
|
|
||||||
user.setSex(Sex.secret.type);
|
|
||||||
user.setBgImg(USER_FACE1);
|
|
||||||
user.setCountry("中国");
|
|
||||||
user.setProvince("");
|
|
||||||
user.setCity("");
|
|
||||||
user.setDistrict("");
|
|
||||||
user.setDescription("这家伙很懒,什么都没留下~");
|
|
||||||
user.setBgImg("");
|
|
||||||
user.setCanImoocNumBeUpdated(YesOrNo.YES.type);
|
|
||||||
|
|
||||||
int row = usersMapper.insert(user);
|
|
||||||
|
|
||||||
if (row > 0) {
|
|
||||||
Map<String, Object> result = Maps.newHashMap();
|
|
||||||
result.put("user", user);
|
|
||||||
String url = "http://localhost:8888/buyer/passport/member/registerFromTik";
|
|
||||||
MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
|
|
||||||
param.add("userName", mobile);
|
|
||||||
param.add("password", mobile);
|
|
||||||
param.add("mobilePhone", mobile);
|
|
||||||
param.add("userId", user.getId());
|
|
||||||
|
|
||||||
RestTemplateUtil.post(null, null, null, url, param, String.class, t -> {
|
|
||||||
if (t.getStatusCode() == HttpStatus.OK) {
|
|
||||||
String content = t.getBody();
|
|
||||||
if (StringUtils.isNotBlank(content)) {
|
|
||||||
Token token = GsonUtil.jsonToBean(content, Token.class);
|
|
||||||
result.put("token", token);
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("账号注册异常");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("账号注册异常");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Token getShopToken(String userId) {
|
|
||||||
Token[] tokens = { null };
|
|
||||||
String url = "http://localhost:8888/buyer/passport/member/getTokenFromTik";
|
|
||||||
MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
|
|
||||||
param.add("userId", userId);
|
|
||||||
RestTemplateUtil.post(null, null, null, url, param, String.class, t -> {
|
|
||||||
if (t.getStatusCode() == HttpStatus.OK) {
|
|
||||||
String content = t.getBody();
|
|
||||||
if (StringUtils.isNotBlank(content)) {
|
|
||||||
tokens[0] = GsonUtil.jsonToBean(content, Token.class);
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("账号注册异常");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("账号注册异常");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return tokens[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional(rollbackFor = RuntimeException.class)
|
|
||||||
@Override
|
|
||||||
public Users createUserFromShop(String mobile, String memberId) {
|
|
||||||
String tempMobile = StringUtils.isBlank(mobile) ? "unionID" : mobile;
|
|
||||||
// 获得全局唯一主键
|
|
||||||
String userId = sid.nextShort();
|
|
||||||
Users user = new Users();
|
|
||||||
user.setId(userId);
|
|
||||||
user.setPassword(tempMobile);
|
|
||||||
user.setMobile(tempMobile);
|
|
||||||
user.setNickname("用户:" + DesensitizationUtil.commonDisplay(tempMobile));
|
|
||||||
user.setImoocNum("WZJ" + (System.currentTimeMillis() / 1000) + (int)(Math.random() * 1000));
|
|
||||||
user.setFace(USER_FACE1);
|
|
||||||
user.setBirthday(DateUtil.stringToDate("1999-01-01"));
|
|
||||||
user.setSex(Sex.secret.type);
|
|
||||||
user.setBgImg("https://wuzhongjie.com.cn/download/logo.png"); // 测试用地址
|
|
||||||
user.setCountry("中国");
|
|
||||||
user.setProvince("");
|
|
||||||
user.setCity("");
|
|
||||||
user.setDistrict("");
|
|
||||||
user.setDescription("这家伙很懒,什么都没留下~");
|
|
||||||
user.setCanImoocNumBeUpdated(YesOrNo.YES.type);
|
|
||||||
// user.setCreatedTime(new Date());
|
|
||||||
// user.setUpdatedTime(new Date());
|
|
||||||
|
|
||||||
// 短视频用户与商城账号关系
|
|
||||||
UserMember userMember = new UserMember();
|
|
||||||
userMember.setUserId(user.getId());
|
|
||||||
userMember.setMemberId(memberId);
|
|
||||||
|
|
||||||
if (usersMapper.insert(user) > 0 && userMemberMapper.insert(userMember) > 0) {
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getUserInfoFromShop(String memberId) {
|
|
||||||
return Optional.ofNullable(userMemberMapper.getUserByMemberId(memberId))//
|
|
||||||
.map(user -> {
|
|
||||||
String uToken = UUID.randomUUID().toString();
|
|
||||||
//redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
|
|
||||||
redisTemplate.opsForValue().set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
|
|
||||||
// 返回给前端
|
|
||||||
UsersVO usersVO = new UsersVO();
|
|
||||||
BeanUtils.copyProperties(user, usersVO);
|
|
||||||
usersVO.setUserToken(uToken);
|
|
||||||
|
|
||||||
return GsonUtil.beanToJson(usersVO);
|
|
||||||
})//
|
|
||||||
.orElseGet(() -> StringUtils.EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<UsersVO> searchByNickname(String nickname, Integer page, Integer pageSize, String currentUserId) {
|
|
||||||
Page<Users> pageParam = new Page<>(page, pageSize);
|
|
||||||
LambdaQueryWrapper<Users> queryWrapper = new LambdaQueryWrapper<>();
|
|
||||||
queryWrapper.like(Users::getNickname, nickname);
|
|
||||||
|
|
||||||
Page<Users> usersPage = usersMapper.selectPage(pageParam, queryWrapper);
|
|
||||||
List<Users> usersList = usersPage.getRecords();
|
|
||||||
|
|
||||||
List<UsersVO> usersVOList = usersList.stream().map(u -> {
|
|
||||||
UsersVO userVO = new UsersVO();
|
|
||||||
BeanUtils.copyProperties(u, userVO);
|
|
||||||
|
|
||||||
// 查询当前用户是否关注了该用户
|
|
||||||
LambdaQueryWrapper<Fans> fansWrapper = new LambdaQueryWrapper<>();
|
|
||||||
fansWrapper.eq(Fans::getVlogerId, u.getId())
|
|
||||||
.eq(Fans::getFanId, currentUserId);
|
|
||||||
|
|
||||||
Fans fans= fansMapper.selectOne(fansWrapper);
|
|
||||||
if(fans!=null) {
|
|
||||||
userVO.setFollowed(true);
|
|
||||||
}
|
|
||||||
return userVO;
|
|
||||||
}).collect(Collectors.toList());
|
|
||||||
|
|
||||||
return usersVOList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -15,11 +15,11 @@ import com.wzj.soopin.content.enums.YesOrNo;
|
|||||||
import com.wzj.soopin.content.mapper.MyLikedVlogMapper;
|
import com.wzj.soopin.content.mapper.MyLikedVlogMapper;
|
||||||
import com.wzj.soopin.content.mapper.VlogMapper;
|
import com.wzj.soopin.content.mapper.VlogMapper;
|
||||||
import com.wzj.soopin.content.mapper.VlogMapperCustom;
|
import com.wzj.soopin.content.mapper.VlogMapperCustom;
|
||||||
import com.wzj.soopin.content.service.FansService;
|
|
||||||
import com.wzj.soopin.content.service.MsgService;
|
import com.wzj.soopin.content.service.MsgService;
|
||||||
import com.wzj.soopin.content.service.VlogService;
|
import com.wzj.soopin.content.service.VlogService;
|
||||||
import com.wzj.soopin.content.utils.PagedGridResult;
|
import com.wzj.soopin.content.utils.PagedGridResult;
|
||||||
import com.wzj.soopin.content.utils.Sid;
|
import com.wzj.soopin.content.utils.Sid;
|
||||||
|
import com.wzj.soopin.member.service.IFansService;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -39,7 +39,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MyLikedVlogMapper myLikedVlogMapper;
|
private MyLikedVlogMapper myLikedVlogMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private FansService fansService;
|
private IFansService fansService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private MsgService msgService;
|
private MsgService msgService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="queryMyFans" resultType="com.wzj.soopin.content.domain.vo.FansVO" parameterType="map">
|
<select id="queryMyFans" resultType="com.wzj.soopin.member.domain.vo.FansVO" parameterType="map">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
u.id as fanId,
|
u.id as fanId,
|
||||||
|
@ -0,0 +1,282 @@
|
|||||||
|
package com.wzj.soopin.member.controller;
|
||||||
|
|
||||||
|
import com.wzj.soopin.member.service.IFansService;
|
||||||
|
import com.wzj.soopin.member.service.IMemberService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@RequestMapping("/ums/fans")
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class FansController {
|
||||||
|
|
||||||
|
|
||||||
|
private final IMemberService memberService;
|
||||||
|
private final IFansService fansService;
|
||||||
|
|
||||||
|
// @PostMapping("follow")
|
||||||
|
// public R<IPage<FansVO>> follow(@RequestParam String myId,
|
||||||
|
// @RequestParam String vlogerId) {
|
||||||
|
// // 从redis中获取拉黑信息
|
||||||
|
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId;
|
||||||
|
// Boolean hasKey = redis.keyIsExist(redisKey);
|
||||||
|
// if(hasKey){
|
||||||
|
// List<String> blockUserList = new ArrayList<>();
|
||||||
|
// ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
// List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
|
||||||
|
//
|
||||||
|
// for (String report : reports) {
|
||||||
|
// try {
|
||||||
|
// Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
|
||||||
|
// // 处理拉黑信息
|
||||||
|
// String queryvlogerId = (String) reportMap.get("vlogerId");
|
||||||
|
// blockUserList.add(queryvlogerId);
|
||||||
|
// } catch (JsonProcessingException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// System.out.println(blockUserList);
|
||||||
|
// Boolean isBlock = blockUserList.contains(vlogerId);
|
||||||
|
// if(isBlock){
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.ON_BLOCK);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 判断两个id不能为空
|
||||||
|
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 判断当前用户,自己不能关注自己
|
||||||
|
// if (myId.equalsIgnoreCase(vlogerId)) {
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 是否已经存在关系
|
||||||
|
// Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
|
||||||
|
// if(flow){
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.FANS_INFO_UPDATED_ISFAN_EXIST_ERROR);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 判断两个id对应的用户是否存在
|
||||||
|
// Users vloger = userService.getUser(vlogerId);
|
||||||
|
// Users myInfo = userService.getUser(myId);
|
||||||
|
//
|
||||||
|
// // fixme: 两个用户id的数据库查询后的判断,是分开好?还是合并判断好?
|
||||||
|
// if (myInfo == null || vloger == null) {
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
|
||||||
|
// }
|
||||||
|
////
|
||||||
|
// // 保存粉丝关系到数据库
|
||||||
|
// fansService.doFollow(myId, vlogerId);
|
||||||
|
//
|
||||||
|
// // 博主的粉丝+1,我的关注+1
|
||||||
|
// redis.increment(BaseInfoProperties.REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
|
||||||
|
// redis.increment(BaseInfoProperties.REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
|
||||||
|
//
|
||||||
|
// // 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈
|
||||||
|
// redis.set(BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId, "1");
|
||||||
|
////
|
||||||
|
// return GraceJSONResult.ok();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//// @PostMapping("cancel")
|
||||||
|
//// public GraceJSONResult cancel(@RequestParam String myId,
|
||||||
|
//// @RequestParam String vlogerId) {
|
||||||
|
//// // 判断两个id不能为空
|
||||||
|
//// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
||||||
|
//// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
||||||
|
//// }
|
||||||
|
//// // 是否已经存在关系
|
||||||
|
//// Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
|
||||||
|
//// if(!flow){
|
||||||
|
//// return GraceJSONResult.errorCustom(ResponseStatusEnum.FANS_INFO_UPDATED_ISFLOW_EXIST_ERROR);
|
||||||
|
//// }
|
||||||
|
//// // 删除业务的执行
|
||||||
|
//// fansService.doCancel(myId, vlogerId);
|
||||||
|
////
|
||||||
|
//// // 博主的粉丝-1,我的关注-1
|
||||||
|
//// redis.decrement(BaseInfoProperties.REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
|
||||||
|
//// redis.decrement(BaseInfoProperties.REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
|
||||||
|
////
|
||||||
|
//// // 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈
|
||||||
|
//// redis.del(BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId);
|
||||||
|
////
|
||||||
|
//// return GraceJSONResult.ok();
|
||||||
|
//// }
|
||||||
|
//
|
||||||
|
// @GetMapping("queryBlockVloger")
|
||||||
|
// public GraceJSONResult queryBlockVloger(@RequestParam String myId,
|
||||||
|
// @RequestParam String vlogerId) {
|
||||||
|
// // 从redis中获取拉黑信息
|
||||||
|
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId;
|
||||||
|
// Boolean hasKey = redis.keyIsExist(redisKey);
|
||||||
|
// if(hasKey){
|
||||||
|
// List<String> blockUserList = new ArrayList<>();
|
||||||
|
// ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
// List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
|
||||||
|
//
|
||||||
|
// for (String report : reports) {
|
||||||
|
// try {
|
||||||
|
// Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
|
||||||
|
// // 处理拉黑信息
|
||||||
|
// String queryvlogerId = (String) reportMap.get("vlogerId");
|
||||||
|
// blockUserList.add(queryvlogerId);
|
||||||
|
// } catch (JsonProcessingException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// System.out.println(blockUserList);
|
||||||
|
// return GraceJSONResult.ok(blockUserList.contains(vlogerId));
|
||||||
|
// }else{
|
||||||
|
// return GraceJSONResult.ok(false);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @PostMapping("block")
|
||||||
|
// public GraceJSONResult block(@RequestParam String myId,
|
||||||
|
// @RequestParam String vlogerId) {
|
||||||
|
// // 先执行cancel
|
||||||
|
// // 判断两个id不能为空
|
||||||
|
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
||||||
|
// }
|
||||||
|
// // 是否已经存在关系
|
||||||
|
// Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
|
||||||
|
// if(flow){
|
||||||
|
// // 删除业务的执行
|
||||||
|
// fansService.doCancel(myId, vlogerId);
|
||||||
|
//
|
||||||
|
// // 博主的粉丝-1,我的关注-1
|
||||||
|
// redis.decrement(BaseInfoProperties.REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
|
||||||
|
// redis.decrement(BaseInfoProperties.REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
|
||||||
|
//
|
||||||
|
// // 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈
|
||||||
|
// redis.del(BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId);
|
||||||
|
// }
|
||||||
|
// // 拉黑
|
||||||
|
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
// String blockTime = LocalDateTime.now().format(formatter);
|
||||||
|
// try{
|
||||||
|
// Map<String, String> blockInfo = new HashMap<>();
|
||||||
|
// blockInfo.put("vlogerId", vlogerId);
|
||||||
|
// blockInfo.put("myId", myId);
|
||||||
|
// blockInfo.put("time", blockTime);
|
||||||
|
// // 转成 JSON 字符串
|
||||||
|
// ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
// String blockJson = objectMapper.writeValueAsString(blockInfo);
|
||||||
|
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId ;
|
||||||
|
// log.info("写入Redis => key: {}, value: {}", redisKey, blockJson);
|
||||||
|
// redis.rpush(redisKey , blockJson);
|
||||||
|
//
|
||||||
|
// return GraceJSONResult.ok();
|
||||||
|
// }catch (JsonProcessingException e){
|
||||||
|
// // 打日志,或者抛出业务异常
|
||||||
|
// e.printStackTrace();
|
||||||
|
// throw new RuntimeException("JSON序列化失败: " + e.getMessage());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @PostMapping("cancelBlock")
|
||||||
|
// public GraceJSONResult cancelBlock(@RequestParam String myId,
|
||||||
|
// @RequestParam String vlogerId) {
|
||||||
|
// // 判断两个id不能为空
|
||||||
|
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
||||||
|
// }
|
||||||
|
// // 解除拉黑
|
||||||
|
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId;
|
||||||
|
// Boolean hasKey = redis.keyIsExist(redisKey);
|
||||||
|
// if(hasKey){
|
||||||
|
// List<String> blockList = redis.lrange(redisKey, 0, -1);
|
||||||
|
// ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
// if (blockList != null && !blockList.isEmpty()) {
|
||||||
|
// for (String item : blockList) {
|
||||||
|
// try {
|
||||||
|
// Map<String, String> itemMap = objectMapper.readValue(item, new TypeReference<Map<String, String>>() {});
|
||||||
|
// String storedVlogerId = itemMap.get("vlogerId");
|
||||||
|
//
|
||||||
|
// if (storedVlogerId != null && storedVlogerId.equals(vlogerId)) {
|
||||||
|
// redis.lrem(redisKey, 1, item); // 删除找到的 JSON 字符串
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }catch (JsonProcessingException e){
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return GraceJSONResult.ok();
|
||||||
|
// }else{
|
||||||
|
// return GraceJSONResult.error();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @PostMapping("blockVideo")
|
||||||
|
// public GraceJSONResult blockVideo(@RequestParam String myId,
|
||||||
|
// @RequestParam String vlogId,
|
||||||
|
// @RequestParam String reason,
|
||||||
|
// @RequestParam(defaultValue = "") String description) {
|
||||||
|
// // 判断两个id不能为空
|
||||||
|
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogId)) {
|
||||||
|
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
|
||||||
|
// }
|
||||||
|
// // 拉黑
|
||||||
|
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
// String blockTime = LocalDateTime.now().format(formatter);
|
||||||
|
// //
|
||||||
|
// try{
|
||||||
|
// Map<String, String> blockInfo = new HashMap<>();
|
||||||
|
// blockInfo.put("vlogId", vlogId);
|
||||||
|
// blockInfo.put("reporter", myId);
|
||||||
|
// blockInfo.put("time", blockTime);
|
||||||
|
// blockInfo.put("reason", reason);
|
||||||
|
// blockInfo.put("description", description);
|
||||||
|
// // 转成 JSON 字符串
|
||||||
|
// ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
// String blockJson = objectMapper.writeValueAsString(blockInfo);
|
||||||
|
//
|
||||||
|
// String redisKey = BaseInfoProperties.REDIS_VIDEO_BLOCK + ":" + myId ;
|
||||||
|
// log.info("写入Redis => key: {}, value: {}", redisKey, blockJson);
|
||||||
|
// redis.rpush(redisKey , blockJson);
|
||||||
|
//
|
||||||
|
// return GraceJSONResult.ok();
|
||||||
|
// }catch (JsonProcessingException e){
|
||||||
|
// // 打日志,或者抛出业务异常
|
||||||
|
// e.printStackTrace();
|
||||||
|
// throw new RuntimeException("JSON序列化失败: " + e.getMessage());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// @GetMapping("queryDoIFollowVloger")
|
||||||
|
// public GraceJSONResult queryDoIFollowVloger(@RequestParam String myId,
|
||||||
|
// @RequestParam String vlogerId) {
|
||||||
|
// return GraceJSONResult.ok(fansService.queryDoIFollowVloger(myId, vlogerId));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @GetMapping("queryMyFollows")
|
||||||
|
// public GraceJSONResult queryMyFollows(@RequestParam String myId,
|
||||||
|
// @RequestParam Integer page,
|
||||||
|
// @RequestParam Integer pageSize) {
|
||||||
|
// return GraceJSONResult.ok(
|
||||||
|
// fansService.queryMyFollows(
|
||||||
|
// myId,
|
||||||
|
// page,
|
||||||
|
// pageSize));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @GetMapping("queryMyFans")
|
||||||
|
// public GraceJSONResult queryMyFans(@RequestParam String myId,
|
||||||
|
// @RequestParam Integer page,
|
||||||
|
// @RequestParam Integer pageSize) {
|
||||||
|
// return GraceJSONResult.ok(
|
||||||
|
// fansService.queryMyFans(
|
||||||
|
// myId,
|
||||||
|
// page,
|
||||||
|
// pageSize));
|
||||||
|
// }
|
||||||
|
}
|
@ -1,8 +1,9 @@
|
|||||||
package com.wzj.soopin.content.domain.po;
|
package com.wzj.soopin.member.domain.po;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import org.dromara.common.core.domain.model.BaseAudit;
|
import org.dromara.common.core.domain.model.BaseAudit;
|
||||||
@ -10,12 +11,14 @@ import org.dromara.common.tenant.core.TenantEntity;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@TableName( "t_fans")
|
@TableName( "ums_fans")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class Fans extends BaseAudit {
|
public class Fans extends BaseAudit {
|
||||||
@TableId
|
|
||||||
private String id;
|
|
||||||
|
@ApiModelProperty("ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 作家用户id
|
* 作家用户id
|
||||||
@ -23,7 +26,7 @@ public class Fans extends BaseAudit {
|
|||||||
@TableField( "vloger_id")
|
@TableField( "vloger_id")
|
||||||
private String vlogerId;
|
private String vlogerId;
|
||||||
|
|
||||||
private Date createdTime;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,4 +1,4 @@
|
|||||||
package com.wzj.soopin.content.domain.vo;
|
package com.wzj.soopin.member.domain.vo;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
@ -1,9 +1,8 @@
|
|||||||
package com.wzj.soopin.content.mapper;
|
package com.wzj.soopin.member.mapper;
|
||||||
|
|
||||||
import com.wzj.soopin.content.domain.po.Fans;
|
|
||||||
import com.wzj.soopin.content.domain.po.Vlog;
|
import com.wzj.soopin.member.domain.po.Fans;
|
||||||
import com.wzj.soopin.content.domain.vo.FansVO;
|
import com.wzj.soopin.member.domain.vo.FansVO;
|
||||||
import com.wzj.soopin.content.domain.vo.VlogerVO;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
@ -1,8 +1,10 @@
|
|||||||
package com.wzj.soopin.content.service;
|
package com.wzj.soopin.member.service;
|
||||||
|
|
||||||
import com.wzj.soopin.content.utils.PagedGridResult;
|
|
||||||
|
|
||||||
public interface FansService {
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.wzj.soopin.member.domain.vo.FansVO;
|
||||||
|
|
||||||
|
public interface IFansService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关注
|
* 关注
|
||||||
@ -19,17 +21,15 @@ public interface FansService {
|
|||||||
*/
|
*/
|
||||||
public boolean queryDoIFollowVloger(String myId, String vlogerId);
|
public boolean queryDoIFollowVloger(String myId, String vlogerId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询我关注的博主列表
|
|
||||||
*/
|
|
||||||
public PagedGridResult queryMyFollows(String myId,
|
|
||||||
Integer page,
|
|
||||||
Integer pageSize);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询我的粉丝列表
|
* 查询我的粉丝列表
|
||||||
*/
|
*/
|
||||||
public PagedGridResult queryMyFans(String myId,
|
public IPage<FansVO> queryMyFans(String myId,
|
||||||
Integer page,
|
Integer page,
|
||||||
Integer pageSize);
|
Integer pageSize);
|
||||||
|
|
||||||
|
|
||||||
|
Integer countFansByVlogerId(String vlogerId);
|
||||||
}
|
}
|
@ -1,53 +1,39 @@
|
|||||||
package com.wzj.soopin.content.service.impl;
|
package com.wzj.soopin.member.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.wzj.soopin.content.domain.base.BaseInfoProperties;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.wzj.soopin.content.domain.base.RabbitMQConfig;
|
import com.wzj.soopin.member.domain.po.Fans;
|
||||||
import com.wzj.soopin.content.domain.mo.MessageMO;
|
import com.wzj.soopin.member.domain.vo.FansVO;
|
||||||
import com.wzj.soopin.content.domain.po.Fans;
|
import com.wzj.soopin.member.mapper.FansMapper;
|
||||||
import com.wzj.soopin.content.domain.vo.FansVO;
|
import com.wzj.soopin.member.service.IFansService;
|
||||||
import com.wzj.soopin.content.domain.vo.VlogerVO;
|
|
||||||
import com.wzj.soopin.content.enums.MessageEnum;
|
|
||||||
import com.wzj.soopin.content.mapper.FansMapper;
|
|
||||||
import com.wzj.soopin.content.mapper.FansMapperCustom;
|
|
||||||
import com.wzj.soopin.content.service.FansService;
|
|
||||||
import com.wzj.soopin.content.service.MsgService;
|
|
||||||
import com.wzj.soopin.content.utils.JsonUtils;
|
|
||||||
import com.wzj.soopin.content.utils.PagedGridResult;
|
|
||||||
import com.wzj.soopin.content.utils.Sid;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.dromara.common.core.constant.CacheConstants;
|
||||||
import org.dromara.common.core.enums.YesOrNo;
|
import org.dromara.common.core.enums.YesOrNo;
|
||||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.dromara.common.redis.config.RedisConfig;
|
||||||
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
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.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class FansServiceImpl extends BaseInfoProperties implements FansService {
|
public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IFansService {
|
||||||
|
|
||||||
private final FansMapper fansMapper;
|
|
||||||
private final FansMapperCustom fansMapperCustom;
|
private final RedisCache redisCache;
|
||||||
private final MsgService msgService;
|
|
||||||
private final RabbitTemplate rabbitTemplate;
|
|
||||||
@Autowired
|
|
||||||
private Sid sid;
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public void doFollow(String myId, String vlogerId) {
|
public void doFollow(String myId, String vlogerId) {
|
||||||
String fid = sid.nextShort();
|
|
||||||
|
|
||||||
Fans fans = new Fans();
|
Fans fans = new Fans();
|
||||||
fans.setId(fid);
|
|
||||||
fans.setFanId(myId);
|
fans.setFanId(myId);
|
||||||
fans.setVlogerId(vlogerId);
|
fans.setVlogerId(vlogerId);
|
||||||
|
|
||||||
@ -56,17 +42,17 @@ public class FansServiceImpl extends BaseInfoProperties implements FansService {
|
|||||||
if (vloger != null) {
|
if (vloger != null) {
|
||||||
fans.setIsFanFriendOfMine(YesOrNo.YES.type);
|
fans.setIsFanFriendOfMine(YesOrNo.YES.type);
|
||||||
vloger.setIsFanFriendOfMine(YesOrNo.YES.type);
|
vloger.setIsFanFriendOfMine(YesOrNo.YES.type);
|
||||||
fansMapper.updateById(vloger);
|
baseMapper.updateById(vloger);
|
||||||
} else {
|
} else {
|
||||||
fans.setIsFanFriendOfMine(YesOrNo.NO.type);
|
fans.setIsFanFriendOfMine(YesOrNo.NO.type);
|
||||||
}
|
}
|
||||||
fansMapper.insert(fans);
|
baseMapper.insert(fans);
|
||||||
|
|
||||||
// 系统消息:关注
|
// 系统消息:关注
|
||||||
MessageMO messageMO = new MessageMO();
|
// MessageMO messageMO = new MessageMO();
|
||||||
messageMO.setFromUserId(myId);
|
// messageMO.setFromUserId(myId);
|
||||||
messageMO.setToUserId(vlogerId);
|
// messageMO.setToUserId(vlogerId);
|
||||||
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_MSG, "sys.msg." + MessageEnum.FOLLOW_YOU.enValue, JsonUtils.objectToJson(messageMO));
|
// rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_MSG, "sys.msg." + MessageEnum.FOLLOW_YOU.enValue, JsonUtils.objectToJson(messageMO));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Fans queryFansRelationship(String fanId, String vlogerId) {
|
public Fans queryFansRelationship(String fanId, String vlogerId) {
|
||||||
@ -74,7 +60,7 @@ public class FansServiceImpl extends BaseInfoProperties implements FansService {
|
|||||||
queryWrapper.eq(Fans::getVlogerId, vlogerId)
|
queryWrapper.eq(Fans::getVlogerId, vlogerId)
|
||||||
.eq(Fans::getFanId, fanId);
|
.eq(Fans::getFanId, fanId);
|
||||||
|
|
||||||
return fansMapper.selectOne(queryWrapper);
|
return baseMapper.selectOne(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@ -86,13 +72,13 @@ public class FansServiceImpl extends BaseInfoProperties implements FansService {
|
|||||||
// 抹除双方的朋友关系,自己的关系删除即可
|
// 抹除双方的朋友关系,自己的关系删除即可
|
||||||
Fans pendingFan = queryFansRelationship(vlogerId, myId);
|
Fans pendingFan = queryFansRelationship(vlogerId, myId);
|
||||||
pendingFan.setIsFanFriendOfMine(YesOrNo.NO.type);
|
pendingFan.setIsFanFriendOfMine(YesOrNo.NO.type);
|
||||||
fansMapper.updateById(pendingFan);
|
baseMapper.updateById(pendingFan);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除自己的关注关联表记录
|
// 删除自己的关注关联表记录
|
||||||
LambdaQueryWrapper<Fans> deleteWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<Fans> deleteWrapper = new LambdaQueryWrapper<>();
|
||||||
deleteWrapper.eq(Fans::getId, fan.getId());
|
deleteWrapper.eq(Fans::getId, fan.getId());
|
||||||
fansMapper.delete(deleteWrapper);
|
baseMapper.delete(deleteWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -101,27 +87,19 @@ public class FansServiceImpl extends BaseInfoProperties implements FansService {
|
|||||||
return vloger != null;
|
return vloger != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public PagedGridResult queryMyFollows(String myId, Integer page, Integer pageSize) {
|
|
||||||
Map<String, Object> map = new HashMap<>();
|
|
||||||
map.put("myId", myId);
|
|
||||||
|
|
||||||
Page<VlogerVO> pageParam = new Page<>(page, pageSize);
|
|
||||||
List<VlogerVO> list = fansMapperCustom.queryMyFollows(map);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PagedGridResult queryMyFans(String myId, Integer page, Integer pageSize) {
|
public IPage<FansVO> queryMyFans(String myId, Integer pageNo, Integer pageSize) {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
map.put("myId", myId);
|
map.put("myId", myId);
|
||||||
|
// 查询粉丝列表
|
||||||
Page<FansVO> pageParam = new Page<>(page, pageSize);
|
Page<FansVO> page=new Page<>();
|
||||||
List<FansVO> list = fansMapperCustom.queryMyFans(map);
|
page.setCurrent(pageNo);
|
||||||
|
page.setSize(pageSize);
|
||||||
for (FansVO f : list) {
|
for (FansVO f : page.getRecords()) {
|
||||||
String relationship = redis.get(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + f.getFanId());
|
String relationship = redisCache.getCacheObject(
|
||||||
|
CacheConstants.MEMBER_FANS + ":" + myId + ":" + f.getFanId());
|
||||||
if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) {
|
if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) {
|
||||||
f.setFriend(true);
|
f.setFriend(true);
|
||||||
}
|
}
|
||||||
@ -129,4 +107,9 @@ public class FansServiceImpl extends BaseInfoProperties implements FansService {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer countFansByVlogerId(String vlogerId) {
|
||||||
|
return baseMapper.countFansByVlogerId(vlogerId);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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" >
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
<mapper namespace="com.wzj.soopin.content.mapper.FansMapper" >
|
<mapper namespace="com.wzj.soopin.member.mapper.FansMapper" >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<select id="getFollowedVlogerIds" resultType="com.wzj.soopin.content.domain.po.Fans" parameterType="map">
|
<select id="getFollowedVlogerIds" resultType="com.wzj.soopin.member.domain.po.Fans" parameterType="map">
|
||||||
|
|
||||||
SELECT vloger_id, is_fan_friend_of_mine FROM t_fans
|
SELECT vloger_id, is_fan_friend_of_mine FROM t_fans
|
||||||
WHERE fan_id = #{currentUserId}
|
WHERE fan_id = #{currentUserId}
|
@ -1,9 +1,9 @@
|
|||||||
package org.dromara.system.controller.common;
|
package org.dromara.system.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.wzj.soopin.member.domain.po.Address;
|
import com.wzj.soopin.member.domain.po.Address;
|
||||||
import com.wzj.soopin.member.mapper.AddressMapper;
|
import org.dromara.system.mapper.AddressMapper;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.dromara.common.core.config.RuoYiConfig;
|
import org.dromara.common.core.config.RuoYiConfig;
|
||||||
@ -35,9 +35,9 @@ import java.util.stream.Collectors;
|
|||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
public class CommonController
|
public class SysAddressController
|
||||||
{
|
{
|
||||||
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
|
private static final Logger log = LoggerFactory.getLogger(SysAddressController.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerConfig serverConfig;
|
private ServerConfig serverConfig;
|
@ -1,4 +1,4 @@
|
|||||||
package com.wzj.soopin.member.mapper;
|
package org.dromara.system.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
@ -13,12 +13,5 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
|
@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
|
||||||
public interface AddressMapper extends BaseMapper<Address> {
|
public interface AddressMapper extends BaseMapper<Address> {
|
||||||
/**
|
|
||||||
* 查询【请填写功能名称】列表
|
|
||||||
*
|
|
||||||
* @param address 【请填写功能名称】
|
|
||||||
* @return 【请填写功能名称】集合
|
|
||||||
*/
|
|
||||||
List<Address> selectByEntity(Address address);
|
|
||||||
|
|
||||||
}
|
}
|
@ -2,7 +2,7 @@
|
|||||||
<!DOCTYPE mapper
|
<!DOCTYPE mapper
|
||||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.wzj.soopin.member.mapper.AddressMapper">
|
<mapper namespace="org.dromara.system.mapper.AddressMapper">
|
||||||
|
|
||||||
<resultMap type="Address" id="AddressResult">
|
<resultMap type="Address" id="AddressResult">
|
||||||
<result property="id" column="id"/>
|
<result property="id" column="id"/>
|
Loading…
x
Reference in New Issue
Block a user