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.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.enums.CodeEnum;
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.ip.AddressUtils;
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 org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.client.RedisClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Collections;
@@ -66,6 +70,12 @@ public class CaiLoginManager {
private UnionService unionService;
@Autowired
private UnionUserService unionUserService;
@Autowired
private Yunxin yunxin;
@Resource
private ImUserClient imUserClient;
@Autowired
private UserCountService userCountService;
public String login(String username,String password){
@@ -246,6 +256,26 @@ public class CaiLoginManager {
add.setInviteId(user.getInviteId());
add.setImToken(IdUtil.simpleUUID());
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();
UserInfo userInfo = new UserInfo();
userInfo.setUserId(add.getId());
@@ -265,8 +295,18 @@ public class CaiLoginManager {
UserOnline userOnline = new UserOnline();
userOnline.setUserId(add.getId());
userOnlineService.save(userOnline);
UserCount userCount = new UserCount();
userCount.setUserId(add.getId());
userCountService.save(userCount);
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;
import cn.dev33.satoken.annotation.SaIgnore;
import com.ruoyi.cai.auth.CaiLoginManager;
import com.ruoyi.cai.auth.CaiRegisterUser;
import com.ruoyi.cai.auth.LoginCaiUser;
import com.ruoyi.cai.auth.RegisterCode;
import com.ruoyi.cai.auth.*;
import com.ruoyi.cai.enums.CodeEnum;
import com.ruoyi.cai.manager.CodeManager;
import com.ruoyi.cai.service.SmsVerifyService;
@@ -43,7 +40,14 @@ public class AuthAppController {
@PostMapping("/register/code")
@Operation(summary = "获取注册验证码")
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("发送成功");
}
@@ -56,4 +60,12 @@ public class AuthAppController {
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 正常
*/
private Integer status;
private String type;
private String typeDesc;
/**
* 接收号码
*/

View File

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

View File

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

View File

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

View File

@@ -2,6 +2,7 @@ package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.SmsVerify;
import com.ruoyi.cai.enums.CodeEnum;
/**
* 短信验证码Service接口
@@ -11,5 +12,5 @@ import com.ruoyi.cai.domain.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);
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;
@Override
public void put(String mobile){
String code = codeManager.put(CodeEnum.REGISTER, mobile);
public void put(CodeEnum codeEnum,String mobile){
String code = codeManager.put(codeEnum, mobile);
SmsVerify smsVerify = new SmsVerify();
smsVerify.setType(codeEnum.name());
smsVerify.setType(codeEnum.getName());
smsVerify.setReceivePhone(mobile);
smsVerify.setVerifyCode(code);
smsVerify.setSendInterface("阿里云");

View File

@@ -141,4 +141,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
.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)));
}
}