This commit is contained in:
dute7liang
2024-01-01 15:56:56 +08:00
parent 3aa29bcefc
commit d2bd79204a
11 changed files with 121 additions and 18 deletions

View File

@@ -3,10 +3,10 @@ package com.ruoyi.cai.auth;
import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.cai.domain.*; import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.enums.CodeEnum; import com.ruoyi.cai.enums.CodeEnum;
import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.enums.SystemConfigEnum;
@@ -24,15 +24,19 @@ import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.system.service.SysLoginService; import com.ruoyi.system.service.SysLoginService;
import com.ruoyi.yunxin.Yunxin;
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 lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.redisson.client.RedisClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collections; import java.util.Collections;
@@ -66,6 +70,12 @@ public class CaiLoginManager {
private UnionService unionService; private UnionService unionService;
@Autowired @Autowired
private UnionUserService unionUserService; private UnionUserService unionUserService;
@Autowired
private Yunxin yunxin;
@Resource
private ImUserClient imUserClient;
@Autowired
private UserCountService userCountService;
public String login(String username,String password){ public String login(String username,String password){
@@ -246,6 +256,26 @@ public class CaiLoginManager {
add.setInviteId(user.getInviteId()); add.setInviteId(user.getInviteId());
add.setImToken(IdUtil.simpleUUID()); add.setImToken(IdUtil.simpleUUID());
userService.save(add); userService.save(add);
CreateUserReq req = new CreateUserReq();
req.setAccid(add.getId()+"");
req.setToken(add.getImToken());
req.setName(add.getNickname());
YxCommonR r = imUserClient.createUser(req);
if(!r.isSuccess()){
if(r.getCode() == 414){
UpdateTokenReq req1 = new UpdateTokenReq();
req1.setAccid(add.getId()+"");
req1.setToken(add.getImToken());
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("注册失败,云信异常");
}
}
String clientIP = ServletUtils.getClientIP(); String clientIP = ServletUtils.getClientIP();
UserInfo userInfo = new UserInfo(); UserInfo userInfo = new UserInfo();
userInfo.setUserId(add.getId()); userInfo.setUserId(add.getId());
@@ -265,8 +295,18 @@ public class CaiLoginManager {
UserOnline userOnline = new UserOnline(); UserOnline userOnline = new UserOnline();
userOnline.setUserId(add.getId()); userOnline.setUserId(add.getId());
userOnlineService.save(userOnline); userOnlineService.save(userOnline);
UserCount userCount = new UserCount();
userCount.setUserId(add.getId());
userCountService.save(userCount);
return add; return add;
} }
public void resetPassword(ResetPasswordReq code) {
User user = userService.getByUsername(code.getMobile());
if(user == null){
throw new ServiceException("账户不存在");
}
userService.resetPassword(code.getMobile(),code.getPassword());
}
} }

View File

@@ -0,0 +1,12 @@
package com.ruoyi.cai.auth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "充值密码入参")
public class ResetPasswordReq {
private String mobile;
private String code;
private String password;
}

View File

@@ -1,10 +1,7 @@
package com.ruoyi.cai.controller.app; package com.ruoyi.cai.controller.app;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import com.ruoyi.cai.auth.CaiLoginManager; import com.ruoyi.cai.auth.*;
import com.ruoyi.cai.auth.CaiRegisterUser;
import com.ruoyi.cai.auth.LoginCaiUser;
import com.ruoyi.cai.auth.RegisterCode;
import com.ruoyi.cai.enums.CodeEnum; import com.ruoyi.cai.enums.CodeEnum;
import com.ruoyi.cai.manager.CodeManager; import com.ruoyi.cai.manager.CodeManager;
import com.ruoyi.cai.service.SmsVerifyService; import com.ruoyi.cai.service.SmsVerifyService;
@@ -43,7 +40,14 @@ public class AuthAppController {
@PostMapping("/register/code") @PostMapping("/register/code")
@Operation(summary = "获取注册验证码") @Operation(summary = "获取注册验证码")
public R<Map<String,String>> registerCode(@RequestBody RegisterCode code){ public R<Map<String,String>> registerCode(@RequestBody RegisterCode code){
smsVerifyService.put(code.getMobile()); smsVerifyService.put(CodeEnum.REGISTER,code.getMobile());
return R.ok("发送成功");
}
@PostMapping("/resetPassword/code")
@Operation(summary = "获取充值密码验证码")
public R<Map<String,String>> resetPasswordCode(@RequestBody RegisterCode code){
smsVerifyService.put(CodeEnum.RESET_PASSWORD,code.getMobile());
return R.ok("发送成功"); return R.ok("发送成功");
} }
@@ -56,4 +60,12 @@ public class AuthAppController {
return R.ok(ajax); return R.ok(ajax);
} }
@PostMapping("/resetPassword")
@Operation(summary = "获取充值密码验证码")
public R<Boolean> resetPassword(@RequestBody ResetPasswordReq code){
caiLoginManager.resetPassword(code);
return R.ok("发送成功");
}
} }

View File

@@ -28,6 +28,8 @@ public class SmsVerify implements Serializable {
* 状态 0 过期,或者删除 1 正常 * 状态 0 过期,或者删除 1 正常
*/ */
private Integer status; private Integer status;
private String type;
private String typeDesc;
/** /**
* 接收号码 * 接收号码
*/ */

View File

@@ -37,11 +37,6 @@ public class Union implements Serializable {
* 是否开启提成 * 是否开启提成
*/ */
private Boolean enableRate; private Boolean enableRate;
/**
* 工会默认二级支付奖励比例
*/
@Deprecated
private BigDecimal defaultIncomeRate;
/** /**
* 全部人数 * 全部人数
*/ */

View File

@@ -4,7 +4,8 @@ import lombok.Getter;
@Getter @Getter
public enum CodeEnum { public enum CodeEnum {
REGISTER("注册短信") REGISTER("注册短信"),
RESET_PASSWORD("重置密码")
; ;
private final String name; private final String name;

View File

@@ -1,25 +1,34 @@
package com.ruoyi.cai.manager; package com.ruoyi.cai.manager;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.cai.domain.*; import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.app.query.AccountAliBankCardRes; import com.ruoyi.cai.dto.app.query.AccountAliBankCardRes;
import com.ruoyi.cai.dto.app.query.AnchorUpdateReq; import com.ruoyi.cai.dto.app.query.AnchorUpdateReq;
import com.ruoyi.cai.dto.app.query.UserUpdateReq; import com.ruoyi.cai.dto.app.query.UserUpdateReq;
import com.ruoyi.cai.dto.app.vo.*; import com.ruoyi.cai.dto.app.vo.AnchorVo;
import com.ruoyi.cai.dto.app.vo.CurrentUserInfoVo;
import com.ruoyi.cai.dto.app.vo.user.UserAccountVo; import com.ruoyi.cai.dto.app.vo.user.UserAccountVo;
import com.ruoyi.cai.dto.app.vo.user.UserAlbumDTO; import com.ruoyi.cai.dto.app.vo.user.UserAlbumDTO;
import com.ruoyi.cai.dto.app.vo.user.UserCountVo; import com.ruoyi.cai.dto.app.vo.user.UserCountVo;
import com.ruoyi.cai.service.*; import com.ruoyi.cai.service.*;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.BeanConvertUtil; import com.ruoyi.common.utils.BeanConvertUtil;
import com.ruoyi.yunxin.client.ImUserRefClient;
import com.ruoyi.yunxin.req.UpdateUinfoReq;
import com.ruoyi.yunxin.resp.YxCommonR;
import lombok.extern.slf4j.Slf4j;
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.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
@Component @Component
@Slf4j
public class CurrentUserManager { public class CurrentUserManager {
@Autowired @Autowired
private UserService userService; private UserService userService;
@@ -33,6 +42,8 @@ public class CurrentUserManager {
private AccountService accountService; private AccountService accountService;
@Autowired @Autowired
private AccountBankcardService accountBankcardService; private AccountBankcardService accountBankcardService;
@Resource
private ImUserRefClient userClient;
public CurrentUserInfoVo currentInfo() { public CurrentUserInfoVo currentInfo() {
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
@@ -87,15 +98,22 @@ public class CurrentUserManager {
public boolean userUpdate(UserUpdateReq res) { public boolean userUpdate(UserUpdateReq res) {
res.setUserId(LoginHelper.getUserId()); res.setUserId(LoginHelper.getUserId());
boolean updateFlag = false; boolean updateFlag = false;
boolean updateYunxin = false;
UpdateUinfoReq uinfoReq = new UpdateUinfoReq();
uinfoReq.setAccid(res.getUserId()+"");
LambdaUpdateWrapper<User> update = LambdaUpdateWrapper<User> update =
Wrappers.lambdaUpdate(User.class).eq(User::getId, res.getUserId()); Wrappers.lambdaUpdate(User.class).eq(User::getId, res.getUserId());
if(StringUtils.isNotEmpty(res.getNickname())){ if(StringUtils.isNotEmpty(res.getNickname())){
update.set(User::getNickname,res.getNickname()); update.set(User::getNickname,res.getNickname());
uinfoReq.setName(res.getNickname());
updateFlag=true; updateFlag=true;
updateYunxin=true;
} }
if(res.getBirthday() != null){ if(res.getBirthday() != null){
update.set(User::getBirthday,res.getBirthday()); update.set(User::getBirthday,res.getBirthday());
uinfoReq.setBirth(res.getBirthday().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
updateFlag=true; updateFlag=true;
updateYunxin=true;
} }
if(res.getCity() != null){ if(res.getCity() != null){
update.set(User::getCity,res.getCity()); update.set(User::getCity,res.getCity());
@@ -104,12 +122,20 @@ public class CurrentUserManager {
if(StringUtils.isNotEmpty(res.getAvatar())){ if(StringUtils.isNotEmpty(res.getAvatar())){
update.set(User::getAvatar,res.getAvatar()); update.set(User::getAvatar,res.getAvatar());
update.set(User::getAvatarState,1); update.set(User::getAvatarState,1);
// uinfoReq.setIcon(res.getAvatar());
// updateYunxin=true;
updateFlag=true; updateFlag=true;
} }
if(updateFlag){ if(updateFlag){
boolean flag = userService.update(update); boolean flag = userService.update(update);
if(flag){ if(flag){
userService.checkFinishStatus(res.getUserId()); userService.checkFinishStatus(res.getUserId());
if(updateYunxin){
YxCommonR r = userClient.updateUinfo(uinfoReq);
if(!r.isSuccess()){
log.error("云信更新失败,需要检查!{}", JSON.toJSONString(r));
}
}
} }
} }
return true; return true;

View File

@@ -2,6 +2,7 @@ package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.SmsVerify; import com.ruoyi.cai.domain.SmsVerify;
import com.ruoyi.cai.enums.CodeEnum;
/** /**
* 短信验证码Service接口 * 短信验证码Service接口
@@ -11,5 +12,5 @@ import com.ruoyi.cai.domain.SmsVerify;
*/ */
public interface SmsVerifyService extends IService<SmsVerify> { public interface SmsVerifyService extends IService<SmsVerify> {
void put(String mobile); void put(CodeEnum codeEnum, String mobile);
} }

View File

@@ -34,4 +34,6 @@ public interface UserService extends IService<User> {
boolean agreeProtocol(Long userId); boolean agreeProtocol(Long userId);
void checkFinishStatus(Long userId); void checkFinishStatus(Long userId);
void resetPassword(String mobile, String password);
} }

View File

@@ -26,9 +26,11 @@ public class SmsVerifyServiceImpl extends ServiceImpl<SmsVerifyMapper,SmsVerify>
private CodeManager codeManager; private CodeManager codeManager;
@Override @Override
public void put(String mobile){ public void put(CodeEnum codeEnum,String mobile){
String code = codeManager.put(CodeEnum.REGISTER, mobile); String code = codeManager.put(codeEnum, mobile);
SmsVerify smsVerify = new SmsVerify(); SmsVerify smsVerify = new SmsVerify();
smsVerify.setType(codeEnum.name());
smsVerify.setType(codeEnum.getName());
smsVerify.setReceivePhone(mobile); smsVerify.setReceivePhone(mobile);
smsVerify.setVerifyCode(code); smsVerify.setVerifyCode(code);
smsVerify.setSendInterface("阿里云"); smsVerify.setSendInterface("阿里云");

View File

@@ -141,4 +141,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
.set(User::getFinishStatus,1)); .set(User::getFinishStatus,1));
} }
} }
@Override
public void resetPassword(String mobile, String password) {
if(StringUtils.isEmpty(mobile) || StringUtils.isEmpty(password)){
throw new ServiceException("参数异常");
}
this.update(Wrappers.lambdaUpdate(User.class)
.eq(User::getMobile,mobile)
.set(User::getPassword,BCrypt.hashpw(password)));
}
} }