init
This commit is contained in:
@@ -256,8 +256,8 @@ management:
|
|||||||
mail:
|
mail:
|
||||||
enabled: false
|
enabled: false
|
||||||
yunxin:
|
yunxin:
|
||||||
app-key: 748496374b04344194c68b53e411e09c123
|
app-key: d2de1a747ce5ffdf99517c6f9f16fd4e
|
||||||
app-secret: 77c09917d2de
|
app-secret: ef2b67d8cd8e
|
||||||
wx:
|
wx:
|
||||||
pay:
|
pay:
|
||||||
app-id: wxefe4087f9c1e0fd7
|
app-id: wxefe4087f9c1e0fd7
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.ruoyi.test.business;
|
||||||
|
|
||||||
|
import com.ruoyi.xq.im.ImOp;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
@Slf4j
|
||||||
|
public class ImTest {
|
||||||
|
@Autowired
|
||||||
|
private ImOp imOp;
|
||||||
|
@Test
|
||||||
|
public void refresh(){
|
||||||
|
imOp.refreshIm();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import com.ruoyi.common.enums.DeviceType;
|
|||||||
import com.ruoyi.common.enums.UserType;
|
import com.ruoyi.common.enums.UserType;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录鉴权助手
|
* 登录鉴权助手
|
||||||
@@ -26,6 +27,7 @@ import lombok.NoArgsConstructor;
|
|||||||
*
|
*
|
||||||
* @author Lion Li
|
* @author Lion Li
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class LoginHelper {
|
public class LoginHelper {
|
||||||
|
|
||||||
@@ -67,6 +69,14 @@ public class LoginHelper {
|
|||||||
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
|
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void logoutApp(Long userId){
|
||||||
|
try {
|
||||||
|
StpUtil.logout(UserType.APP_USER.getUserType() + ":" + userId);
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("强制T人下线失败! userId={}",userId,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户(多级缓存)
|
* 获取用户(多级缓存)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class UserStarListVo {
|
|||||||
@Schema(description = "生日-缩减显示")
|
@Schema(description = "生日-缩减显示")
|
||||||
private String birthdayStr;
|
private String birthdayStr;
|
||||||
@Schema(description = "居住城市")
|
@Schema(description = "居住城市")
|
||||||
private String residenceCity;
|
private String residenceCityName;
|
||||||
@Schema(description = "学历")
|
@Schema(description = "学历")
|
||||||
private Integer education;
|
private Integer education;
|
||||||
@Schema(description = "职业")
|
@Schema(description = "职业")
|
||||||
|
|||||||
@@ -4,11 +4,12 @@ import com.ruoyi.xq.enums.common.CodeEnum;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class SmsCodeReq {
|
public class SmsCodeReq {
|
||||||
|
|
||||||
@NotEmpty(message = "参数异常")
|
@NotNull(message = "参数异常")
|
||||||
private CodeEnum smsType;
|
private CodeEnum smsType;
|
||||||
@NotEmpty(message = "手机号不能为空")
|
@NotEmpty(message = "手机号不能为空")
|
||||||
private String mobile;
|
private String mobile;
|
||||||
|
|||||||
89
ruoyi-xq/src/main/java/com/ruoyi/xq/im/ImOp.java
Normal file
89
ruoyi-xq/src/main/java/com/ruoyi/xq/im/ImOp.java
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
package com.ruoyi.xq.im;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
import com.ruoyi.common.helper.LoginHelper;
|
||||||
|
import com.ruoyi.xq.domain.User;
|
||||||
|
import com.ruoyi.xq.manager.ImManager;
|
||||||
|
import com.ruoyi.xq.service.UserService;
|
||||||
|
import com.ruoyi.yunxin.client.ImUserClient;
|
||||||
|
import com.ruoyi.yunxin.req.CreateUserReq;
|
||||||
|
import com.ruoyi.yunxin.req.UpdateTokenReq;
|
||||||
|
import com.ruoyi.yunxin.resp.YxCommonR;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class ImOp {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ImUserClient imUserClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ImManager imManager;
|
||||||
|
|
||||||
|
|
||||||
|
public void refreshImToken(String usercode){
|
||||||
|
User user = userService.getByUsercode(usercode);
|
||||||
|
if(user == null){
|
||||||
|
throw new ServiceException("用户不存在");
|
||||||
|
}
|
||||||
|
String imToken = IdUtil.simpleUUID();
|
||||||
|
userService.update(Wrappers.lambdaUpdate(User.class).eq(User::getId,user.getId()).set(User::getImToken, imToken));
|
||||||
|
this.register(user.getId(),imToken,user.getNickname());
|
||||||
|
imManager.updateImInfo(user.getId(),user.getAvatar(),user.getNickname(),user.getGender());
|
||||||
|
LoginHelper.logoutApp(user.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshImNoSaveToken(){
|
||||||
|
List<User> list = userService.list();
|
||||||
|
for (User user : list) {
|
||||||
|
this.register(user.getId(),user.getImToken(),user.getNickname());
|
||||||
|
imManager.updateImInfo(user.getId(),user.getAvatar(),user.getNickname(),user.getGender());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void refreshIm(){
|
||||||
|
List<User> list = userService.list();
|
||||||
|
for (User user : list) {
|
||||||
|
String imToken = IdUtil.simpleUUID();
|
||||||
|
userService.update(Wrappers.lambdaUpdate(User.class).eq(User::getId,user.getId()).set(User::getImToken, imToken));
|
||||||
|
this.register(user.getId(),imToken,user.getNickname());
|
||||||
|
imManager.updateImInfo(user.getId(),user.getAvatar(),user.getNickname(),user.getGender());
|
||||||
|
LoginHelper.logoutApp(user.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register(Long userId,String token,String nickname){
|
||||||
|
CreateUserReq req = new CreateUserReq();
|
||||||
|
req.setAccid(userId+"");
|
||||||
|
req.setToken(token);
|
||||||
|
req.setName(nickname);
|
||||||
|
YxCommonR r = imUserClient.createUser(req);
|
||||||
|
if(!r.isSuccess()){
|
||||||
|
if(r.getCode() == 414){
|
||||||
|
UpdateTokenReq req1 = new UpdateTokenReq();
|
||||||
|
req1.setAccid(userId+"");
|
||||||
|
req1.setToken(token);
|
||||||
|
YxCommonR commonR = imUserClient.updateToken(req1);
|
||||||
|
if(!commonR.isSuccess()){
|
||||||
|
log.error("刷新云token失败,{}", JSON.toJSONString(commonR));
|
||||||
|
throw new ServiceException("注册失败,云信异常");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
log.error("创建云信账号失败,{}", JSON.toJSONString(r));
|
||||||
|
throw new ServiceException("注册失败,云信异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,30 @@
|
|||||||
package com.ruoyi.xq.manager;
|
package com.ruoyi.xq.manager;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
|
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.xq.domain.User;
|
import com.ruoyi.xq.domain.User;
|
||||||
import com.ruoyi.xq.domain.UserChatRecord;
|
import com.ruoyi.xq.domain.UserChatRecord;
|
||||||
import com.ruoyi.xq.domain.UserVip;
|
import com.ruoyi.xq.domain.UserVip;
|
||||||
import com.ruoyi.xq.dto.app.im.ImMessageDTO;
|
import com.ruoyi.xq.dto.app.im.ImMessageDTO;
|
||||||
import com.ruoyi.xq.dto.app.im.ImResp;
|
import com.ruoyi.xq.dto.app.im.ImResp;
|
||||||
import com.ruoyi.xq.enums.ErrorEnum;
|
import com.ruoyi.xq.enums.ErrorEnum;
|
||||||
|
import com.ruoyi.xq.enums.common.SystemConfigEnum;
|
||||||
import com.ruoyi.xq.service.UserChatFilterService;
|
import com.ruoyi.xq.service.UserChatFilterService;
|
||||||
import com.ruoyi.xq.service.UserChatRecordService;
|
import com.ruoyi.xq.service.UserChatRecordService;
|
||||||
import com.ruoyi.xq.service.UserService;
|
import com.ruoyi.xq.service.UserService;
|
||||||
import com.ruoyi.xq.service.UserVipService;
|
import com.ruoyi.xq.service.UserVipService;
|
||||||
|
import com.ruoyi.yunxin.client.ImUserRefClient;
|
||||||
import com.ruoyi.yunxin.enums.YxImTypeEnum;
|
import com.ruoyi.yunxin.enums.YxImTypeEnum;
|
||||||
|
import com.ruoyi.yunxin.req.UpdateUinfoReq;
|
||||||
|
import com.ruoyi.yunxin.resp.YxCommonR;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ImManager {
|
public class ImManager {
|
||||||
@@ -31,6 +39,10 @@ public class ImManager {
|
|||||||
private UserService userService;
|
private UserService userService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserVipService userVipService;
|
private UserVipService userVipService;
|
||||||
|
@Autowired
|
||||||
|
private SystemConfigManager systemConfigManager;
|
||||||
|
@Resource
|
||||||
|
private ImUserRefClient userRefClient;
|
||||||
|
|
||||||
public ImResp sendMessage(ImMessageDTO message) {
|
public ImResp sendMessage(ImMessageDTO message) {
|
||||||
Long fromUserId = message.getFromUserId();
|
Long fromUserId = message.getFromUserId();
|
||||||
@@ -101,4 +113,37 @@ public class ImManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void updateImInfo(Long userId, String avatar, String nickname, Integer gender) {
|
||||||
|
if(userId == null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(StringUtils.isBlank(avatar) && StringUtils.isBlank(nickname) && gender == null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
UpdateUinfoReq uinfoReq = new UpdateUinfoReq();
|
||||||
|
uinfoReq.setAccid(userId+"");
|
||||||
|
if(StringUtils.isNotBlank(avatar)){
|
||||||
|
String icon = avatar;
|
||||||
|
if(!avatar.startsWith("http")){
|
||||||
|
String cosDomain = systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN);
|
||||||
|
icon = cosDomain + avatar;
|
||||||
|
}
|
||||||
|
uinfoReq.setIcon(icon);
|
||||||
|
}
|
||||||
|
if(StringUtils.isNotBlank(nickname)){
|
||||||
|
uinfoReq.setName(nickname);
|
||||||
|
}
|
||||||
|
if(gender != null){
|
||||||
|
uinfoReq.setGender(gender+"");
|
||||||
|
}
|
||||||
|
YxCommonR r = userRefClient.updateUinfo(uinfoReq);
|
||||||
|
if(!r.isSuccess()){
|
||||||
|
log.error("云信更新失败,【updateImInfo】需要检查!userId={},avatar={},nickname={} data={}",
|
||||||
|
userId, avatar, nickname, JSON.toJSONString(r));
|
||||||
|
}
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error("云信调用失败!【updateImInfo】",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
import com.ruoyi.common.helper.LoginHelper;
|
||||||
import com.ruoyi.xq.domain.User;
|
import com.ruoyi.xq.domain.User;
|
||||||
import com.ruoyi.xq.domain.UserStar;
|
import com.ruoyi.xq.domain.UserStar;
|
||||||
import com.ruoyi.xq.dto.app.userstar.UserStarQuery;
|
import com.ruoyi.xq.dto.app.userstar.UserStarQuery;
|
||||||
@@ -13,9 +14,12 @@ import com.ruoyi.xq.dto.app.userstar.vo.UserStarListVo;
|
|||||||
import com.ruoyi.xq.mapper.UserStarMapper;
|
import com.ruoyi.xq.mapper.UserStarMapper;
|
||||||
import com.ruoyi.xq.service.UserService;
|
import com.ruoyi.xq.service.UserService;
|
||||||
import com.ruoyi.xq.service.UserStarService;
|
import com.ruoyi.xq.service.UserStarService;
|
||||||
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户关注Service业务层处理
|
* 用户关注Service业务层处理
|
||||||
*
|
*
|
||||||
@@ -65,7 +69,17 @@ public class UserStarServiceImpl extends ServiceImpl<UserStarMapper,UserStar> im
|
|||||||
if(query.getQueryType() == 1){
|
if(query.getQueryType() == 1){
|
||||||
return baseMapper.selectMyStar(pageQuery.build(),query);
|
return baseMapper.selectMyStar(pageQuery.build(),query);
|
||||||
}else if(query.getQueryType() == 2){
|
}else if(query.getQueryType() == 2){
|
||||||
return baseMapper.selectStarMe(pageQuery.build(),query);
|
Long userId = LoginHelper.getUserId();
|
||||||
|
User user = userService.getById(userId);
|
||||||
|
Page<UserStarListVo> page = baseMapper.selectStarMe(pageQuery.build(), query);
|
||||||
|
if(user == null || BooleanUtils.isNotTrue(user.getOpenVip())){
|
||||||
|
List<UserStarListVo> records = page.getRecords();
|
||||||
|
for (UserStarListVo record : records) {
|
||||||
|
record.setUserId(null);
|
||||||
|
record.setNickname("***");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return page;
|
||||||
}else{
|
}else{
|
||||||
throw new ServiceException("参数异常");
|
throw new ServiceException("参数异常");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<mapper namespace="com.ruoyi.xq.mapper.UserStarMapper">
|
<mapper namespace="com.ruoyi.xq.mapper.UserStarMapper">
|
||||||
|
|
||||||
<select id="selectMyStar" resultType="com.ruoyi.xq.dto.app.userstar.vo.UserStarListVo">
|
<select id="selectMyStar" resultType="com.ruoyi.xq.dto.app.userstar.vo.UserStarListVo">
|
||||||
select t2.id as user_id, t2.avatar, t2.gender, t2.nickname, t2.birthday, t2.residence_city,
|
select t2.id as user_id, t2.avatar, t2.gender, t2.nickname, t2.birthday, t2.residence_city_name,
|
||||||
t2.education, t2.profession
|
t2.education, t2.profession
|
||||||
from xq_user_star t1
|
from xq_user_star t1
|
||||||
join xq_user t2 on t1.star_user_id = t2.id
|
join xq_user t2 on t1.star_user_id = t2.id
|
||||||
where t1.user_id = #{query.userId}
|
where t1.user_id = #{query.userId}
|
||||||
</select>
|
</select>
|
||||||
<select id="selectStarMe" resultType="com.ruoyi.xq.dto.app.userstar.vo.UserStarListVo">
|
<select id="selectStarMe" resultType="com.ruoyi.xq.dto.app.userstar.vo.UserStarListVo">
|
||||||
select t2.id as user_id, t2.avatar, t2.gender, t2.nickname, t2.birthday, t2.residence_city,
|
select t2.id as user_id, t2.avatar, t2.gender, t2.nickname, t2.birthday, t2.residence_city_name,
|
||||||
t2.education, t2.profession
|
t2.education, t2.profession
|
||||||
from xq_user_star t1
|
from xq_user_star t1
|
||||||
join xq_user t2 on t1.user_id = t2.id
|
join xq_user t2 on t1.user_id = t2.id
|
||||||
|
|||||||
Reference in New Issue
Block a user