This commit is contained in:
77
2024-05-03 21:22:59 +08:00
parent 3df973e469
commit 2cfa18a4e3
9 changed files with 185 additions and 7 deletions

View File

@@ -256,8 +256,8 @@ management:
mail:
enabled: false
yunxin:
app-key: 748496374b04344194c68b53e411e09c123
app-secret: 77c09917d2de
app-key: d2de1a747ce5ffdf99517c6f9f16fd4e
app-secret: ef2b67d8cd8e
wx:
pay:
app-id: wxefe4087f9c1e0fd7

View File

@@ -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();
}
}

View File

@@ -13,6 +13,7 @@ import com.ruoyi.common.enums.DeviceType;
import com.ruoyi.common.enums.UserType;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 登录鉴权助手
@@ -26,6 +27,7 @@ import lombok.NoArgsConstructor;
*
* @author Lion Li
*/
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class LoginHelper {
@@ -67,6 +69,14 @@ public class LoginHelper {
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);
}
}
/**
* 获取用户(多级缓存)
*/

View File

@@ -20,7 +20,7 @@ public class UserStarListVo {
@Schema(description = "生日-缩减显示")
private String birthdayStr;
@Schema(description = "居住城市")
private String residenceCity;
private String residenceCityName;
@Schema(description = "学历")
private Integer education;
@Schema(description = "职业")

View File

@@ -4,11 +4,12 @@ import com.ruoyi.xq.enums.common.CodeEnum;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class SmsCodeReq {
@NotEmpty(message = "参数异常")
@NotNull(message = "参数异常")
private CodeEnum smsType;
@NotEmpty(message = "手机号不能为空")
private String mobile;

View 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("注册失败,云信异常");
}
}
}
}

View File

@@ -1,22 +1,30 @@
package com.ruoyi.xq.manager;
import com.alibaba.fastjson2.JSON;
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.domain.UserChatRecord;
import com.ruoyi.xq.domain.UserVip;
import com.ruoyi.xq.dto.app.im.ImMessageDTO;
import com.ruoyi.xq.dto.app.im.ImResp;
import com.ruoyi.xq.enums.ErrorEnum;
import com.ruoyi.xq.enums.common.SystemConfigEnum;
import com.ruoyi.xq.service.UserChatFilterService;
import com.ruoyi.xq.service.UserChatRecordService;
import com.ruoyi.xq.service.UserService;
import com.ruoyi.xq.service.UserVipService;
import com.ruoyi.yunxin.client.ImUserRefClient;
import com.ruoyi.yunxin.enums.YxImTypeEnum;
import com.ruoyi.yunxin.req.UpdateUinfoReq;
import com.ruoyi.yunxin.resp.YxCommonR;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@Slf4j
public class ImManager {
@@ -31,6 +39,10 @@ public class ImManager {
private UserService userService;
@Autowired
private UserVipService userVipService;
@Autowired
private SystemConfigManager systemConfigManager;
@Resource
private ImUserRefClient userRefClient;
public ImResp sendMessage(ImMessageDTO message) {
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);
}
}
}

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.domain.UserStar;
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.service.UserService;
import com.ruoyi.xq.service.UserStarService;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 用户关注Service业务层处理
*
@@ -65,7 +69,17 @@ public class UserStarServiceImpl extends ServiceImpl<UserStarMapper,UserStar> im
if(query.getQueryType() == 1){
return baseMapper.selectMyStar(pageQuery.build(),query);
}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{
throw new ServiceException("参数异常");
}

View File

@@ -5,14 +5,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="com.ruoyi.xq.mapper.UserStarMapper">
<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
from xq_user_star t1
join xq_user t2 on t1.star_user_id = t2.id
where t1.user_id = #{query.userId}
</select>
<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
from xq_user_star t1
join xq_user t2 on t1.user_id = t2.id