|
@@ -0,0 +1,784 @@
|
|
|
|
|
+package com.fs.app.controller;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
|
|
+import com.fs.app.annotation.Login;
|
|
|
|
|
+import com.fs.app.param.*;
|
|
|
|
|
+import com.fs.app.utils.WxUtil;
|
|
|
|
|
+import com.fs.common.VerifyCodeUtil;
|
|
|
|
|
+import com.fs.common.annotation.RepeatSubmit;
|
|
|
|
|
+import com.fs.common.core.domain.R;
|
|
|
|
|
+import com.fs.common.core.redis.RedisCache;
|
|
|
|
|
+import com.fs.common.exception.ServiceException;
|
|
|
|
|
+import com.fs.common.service.ISmsService;
|
|
|
|
|
+import com.fs.common.utils.ServletUtils;
|
|
|
|
|
+import com.fs.common.utils.ip.IpUtils;
|
|
|
|
|
+import com.fs.common.utils.sign.Md5Utils;
|
|
|
|
|
+import com.fs.core.config.WxOpenProperties;
|
|
|
|
|
+import com.fs.his.domain.FsUser;
|
|
|
|
|
+import com.fs.his.mapper.FsUserMapper;
|
|
|
|
|
+import com.fs.his.service.IFsUserNewTaskService;
|
|
|
|
|
+import com.fs.his.service.IFsUserService;
|
|
|
|
|
+import com.fs.his.vo.FsUserRegisterParam;
|
|
|
|
|
+import io.swagger.annotations.Api;
|
|
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.apache.ibatis.annotations.Param;
|
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
|
|
+
|
|
|
|
|
+import javax.crypto.Cipher;
|
|
|
|
|
+import javax.crypto.spec.SecretKeySpec;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
+
|
|
|
|
|
+import static com.fs.his.utils.PhoneUtil.encryptPhone;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+@Api("app登录接口2")
|
|
|
|
|
+@RestController
|
|
|
|
|
+@RequestMapping(value="/app2/app")
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+public class AppLoginController2 extends AppBaseController{
|
|
|
|
|
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IFsUserService userService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private FsUserMapper userMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IFsUserNewTaskService userNewTaskService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WxOpenProperties openProperties;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RedisCache redisCache;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private ISmsService smsService;
|
|
|
|
|
+ @ApiOperation("注册app用户")
|
|
|
|
|
+ @PostMapping("/register")
|
|
|
|
|
+ @RepeatSubmit
|
|
|
|
|
+ public R registerDoctor(@Validated @RequestBody FsUserRegisterParam param){
|
|
|
|
|
+ FsUser fsUser = findUserByPhone(param.getPhone());
|
|
|
|
|
+
|
|
|
|
|
+// if (fsUser == null) {
|
|
|
|
|
+// // 尝试使用加密后的手机号查询
|
|
|
|
|
+// fsUser = userService.selectFsUserByPhone(encryptPhone(param.getPhone()));
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
|
|
+ if (fsUser != null && StringUtils.isNotEmpty(fsUser.getPassword())) {
|
|
|
|
|
+ return R.error("此账号已经注册");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ FsUser user = new FsUser();
|
|
|
|
|
+ if (fsUser != null) {
|
|
|
|
|
+ // 更新已有用户的密码
|
|
|
|
|
+ user.setUserId(fsUser.getUserId());
|
|
|
|
|
+ user.setPassword(Md5Utils.hash(param.getPassword()));
|
|
|
|
|
+ user.setUpdateTime(new DateTime());
|
|
|
|
|
+ userService.updateFsUser(user);
|
|
|
|
|
+ return R.ok("注册成功");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 创建新用户
|
|
|
|
|
+ user.setPhone(param.getPhone());
|
|
|
|
|
+ user.setNickName("app用户" + param.getPhone().substring(param.getPhone().length() - 4));
|
|
|
|
|
+ user.setStatus(1);
|
|
|
|
|
+ user.setAvatar("https://cos.his.cdwjyyh.com/fs/20240926/420728ee06e54575ba82665dedb4756b.png");
|
|
|
|
|
+ user.setPassword(Md5Utils.hash(param.getPassword()));
|
|
|
|
|
+ user.setCreateTime(new Date());
|
|
|
|
|
+
|
|
|
|
|
+ if (userService.insertFsUser(user) > 0) {
|
|
|
|
|
+ return R.ok("注册成功");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.error("注册失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @ApiOperation("登录")
|
|
|
|
|
+ @PostMapping("/login")
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public R login(@Validated @RequestBody FsUserLoginParam param) {
|
|
|
|
|
+ int loginType = param.getLoginType();
|
|
|
|
|
+ switch (loginType) {
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ return handleLoginType1(param);
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ return handleLoginType3(param);
|
|
|
|
|
+ default:
|
|
|
|
|
+ return R.error("请选择正确的登陆类型!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @ApiOperation("找回密码")
|
|
|
|
|
+ @PostMapping("/editPwd")
|
|
|
|
|
+ public R login(@Validated @RequestBody FsUserEditPwdParam param) {
|
|
|
|
|
+ FsUser user = userService.selectFsUserByPhone(encryptPhone(param.getPhone()));
|
|
|
|
|
+ if (user==null){
|
|
|
|
|
+ return R.error("用户不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ String code = redisCache.getCacheObject(user.getPhone());
|
|
|
|
|
+ if(StringUtils.isEmpty(code)){
|
|
|
|
|
+ return R.error("验证码已过期");
|
|
|
|
|
+ }
|
|
|
|
|
+ if(!code.equals(param.getCode())){
|
|
|
|
|
+ return R.error("验证码不正确");
|
|
|
|
|
+ }
|
|
|
|
|
+ FsUser userMap=new FsUser();
|
|
|
|
|
+ userMap.setUserId(user.getUserId());
|
|
|
|
|
+ userMap.setPassword(Md5Utils.hash(param.getPassword()));
|
|
|
|
|
+ if (userService.updateFsUser(userMap)>0){
|
|
|
|
|
+ return R.ok("新密码设置成功");
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.error("新密码设置失败,请稍后再试!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @ApiOperation("微信登录")
|
|
|
|
|
+ @PostMapping("/loginByWeChat")
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public R loginByWeChat(@Validated @RequestBody FsUserLoginByWeChatParam param) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (StringUtils.isBlank(param.getCode())) {
|
|
|
|
|
+ return R.error("code不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ logger.info("zyp app微信登录,param:{},输出appid,{},secret:{}", param, openProperties.getAppId(), openProperties.getSecret());
|
|
|
|
|
+ Map result = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
|
|
|
|
|
+ String accessToken = result.get("access_token").toString();
|
|
|
|
|
+ String unionid = result.get("unionid").toString();
|
|
|
|
|
+
|
|
|
|
|
+ String openid = result.get("openid").toString();
|
|
|
|
|
+
|
|
|
|
|
+ Map userInfo = WxUtil.getUserInfo(accessToken, openid);
|
|
|
|
|
+
|
|
|
|
|
+ String nickname = userInfo.get("nickname").toString();
|
|
|
|
|
+ Integer sex = (Integer) userInfo.get("sex");
|
|
|
|
|
+ String avatar = userInfo.get("headimgurl").toString();
|
|
|
|
|
+ FsUser user = userService.selectFsUserByUnionid(unionid);
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
|
+ if (user == null) {
|
|
|
|
|
+ user = new FsUser();
|
|
|
|
|
+ user.setLoginDevice(param.getLoginDevice()!=null ? param.getLoginDevice() : null);
|
|
|
|
|
+ user.setSource(param.getSource()!=null ? param.getSource() : null);
|
|
|
|
|
+ user.setNickName(nickname);
|
|
|
|
|
+ user.setAvatar(avatar);
|
|
|
|
|
+ if (sex!=0){
|
|
|
|
|
+ user.setSex(sex);
|
|
|
|
|
+ }
|
|
|
|
|
+ user.setUnionId(unionid);
|
|
|
|
|
+ user.setCreateTime(new Date());
|
|
|
|
|
+ user.setAppId(openProperties.getAppId());
|
|
|
|
|
+ user.setStatus(1);
|
|
|
|
|
+ if (StringUtils.isNotEmpty(param.getJpushId())) {
|
|
|
|
|
+ user.setJpushId(param.getJpushId());
|
|
|
|
|
+ }
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
|
|
+ userService.insertFsUser(user);
|
|
|
|
|
+ map.put("isNew", true);
|
|
|
|
|
+ map.put("unionid",unionid);
|
|
|
|
|
+ return R.ok(map);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (StringUtils.isNotEmpty(param.getJpushId())) {
|
|
|
|
|
+ updateExistingUserJpushId(user, param.getJpushId());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isEmpty(user.getPhone())) {
|
|
|
|
|
+ map.put("isNew", true);
|
|
|
|
|
+ map.put("unionid",user.getUnionId());
|
|
|
|
|
+ return R.ok(map);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ int isFirstLogin = userNewTaskService.performTaskOne(user.getUserId());
|
|
|
|
|
+ String token = jwtUtils.generateToken(user.getUserId());
|
|
|
|
|
+ redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
|
|
|
|
|
+ map.put("token", token);
|
|
|
|
|
+ map.put("user", user);
|
|
|
|
|
+ map.put("isFirst",isFirstLogin);
|
|
|
|
|
+ return R.ok(map);
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ logger.error("zyp 登录失败:{}", e.getMessage());
|
|
|
|
|
+ return R.error("登录失败");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @ApiOperation("绑定手机号")
|
|
|
|
|
+ @PostMapping("/setPhone")
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public R setPhone(@Validated @RequestBody FsUserEditPhoneParam param) {
|
|
|
|
|
+ logger.info("fcj 绑定手机号入参:{}", param);
|
|
|
|
|
+ FsUser user = userService.selectFsUserByUnionid(param.getUnionId());
|
|
|
|
|
+ if (user==null){
|
|
|
|
|
+ return R.error("用户数据不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+// //验证码绑定,需要校验验证码
|
|
|
|
|
+ if (param.getBindType()!=null){
|
|
|
|
|
+ String redisCode = redisCache.getCacheObject("sms:code:" + param.getPhone());
|
|
|
|
|
+ if (StringUtils.isEmpty(redisCode)){
|
|
|
|
|
+ return R.error("验证码已过期,请重新发送");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!redisCode.equals(param.getCode())) {
|
|
|
|
|
+ return R.error("验证码错误");
|
|
|
|
|
+ }
|
|
|
|
|
+ redisCache.deleteObject("sms:code:" + param.getPhone());
|
|
|
|
|
+ }
|
|
|
|
|
+ FsUser userMap = findUserByPhone(param.getPhone());
|
|
|
|
|
+ //绑定的手机号已存在用户的情况,将微信登录的时候创建的新号的UnionId移动到老号中,删除新号(将两个号合并)
|
|
|
|
|
+ if (userMap!=null){
|
|
|
|
|
+ if (userMap.getUserId().equals(user.getUserId())) {
|
|
|
|
|
+ user.setPhone(param.getPhone());
|
|
|
|
|
+ user.setLoginDevice(param.getLoginDevice());
|
|
|
|
|
+ user.setSource(param.getSource());
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
|
|
+ userService.updateFsUser(user);
|
|
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(userMap.getUnionId())&&!userMap.getUnionId().equals(user.getUnionId())){
|
|
|
|
|
+ return R.error("该手机号已绑定其他微信");
|
|
|
|
|
+ }
|
|
|
|
|
+ //合并规则修改 保留手机号存在的用户 合并掉unionid存在但手机号不存在的用户
|
|
|
|
|
+ FsUser keepUser;
|
|
|
|
|
+ FsUser deleteUser;
|
|
|
|
|
+ // 判断哪个用户有手机号,优先保留有手机号的用户
|
|
|
|
|
+ if (StringUtils.isNotEmpty(user.getPhone()) && StringUtils.isEmpty(userMap.getPhone())) {
|
|
|
|
|
+ // 当前用户有手机号,保留当前用户
|
|
|
|
|
+ keepUser = user;
|
|
|
|
|
+ deleteUser = userMap;
|
|
|
|
|
+ } else if (StringUtils.isNotEmpty(userMap.getPhone()) && StringUtils.isEmpty(user.getPhone())) {
|
|
|
|
|
+ // userMap 用户有手机号,保留 userMap 用户
|
|
|
|
|
+ keepUser = userMap;
|
|
|
|
|
+ deleteUser = user;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果两个用户都有或都没有手机号,则按创建时间判断,保留较早创建的用户
|
|
|
|
|
+ if (userMap.getCreateTime().before(user.getCreateTime())) {
|
|
|
|
|
+ keepUser = userMap;
|
|
|
|
|
+ deleteUser = user;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ keepUser = user;
|
|
|
|
|
+ deleteUser = userMap;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ keepUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
|
|
+ keepUser.setSource(param.getSource());
|
|
|
|
|
+ keepUser.setUnionId(user.getUnionId());
|
|
|
|
|
+ keepUser.setPhone(param.getPhone());
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ keepUser.setLastIp(ipAddr);
|
|
|
|
|
+ if (userService.updateFsUser(keepUser)>0){
|
|
|
|
|
+ userService.realDeleteFsUserByUserId(deleteUser.getUserId());
|
|
|
|
|
+ return generateTokenAndReturn(keepUser);
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.error("绑定手机号失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ user.setPhone(param.getPhone());
|
|
|
|
|
+ user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null );
|
|
|
|
|
+ user.setSource(param.getSource()!= null ? param.getSource() : null);
|
|
|
|
|
+ userMap = new FsUser();
|
|
|
|
|
+ userMap.setLoginDevice(param.getLoginDevice());
|
|
|
|
|
+ userMap.setSource(param.getSource());
|
|
|
|
|
+ userMap.setUserId(user.getUserId());
|
|
|
|
|
+ userMap.setPhone(param.getPhone());
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ userMap.setLastIp(ipAddr);
|
|
|
|
|
+ if (userService.updateFsUser(userMap)>0){
|
|
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.error("绑定手机号失败");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @ApiOperation("绑定微信")
|
|
|
|
|
+ @PostMapping("/bindWeChat")
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public R bindWeChat(@Validated @RequestBody FsUserEditUnionidParam param) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ logger.info("zyp app绑定微信,param:{}", param);
|
|
|
|
|
+ Map result = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
|
|
|
|
|
+ if (!result.containsKey("access_token")) {
|
|
|
|
|
+ return R.error("微信授权失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ String accessToken = result.get("access_token").toString();
|
|
|
|
|
+ String unionid = result.get("unionid").toString();
|
|
|
|
|
+ String openid = result.get("openid").toString();
|
|
|
|
|
+ Map userInfo = WxUtil.getUserInfo(accessToken, openid);
|
|
|
|
|
+ String nickname = userInfo.get("nickname").toString();
|
|
|
|
|
+ Integer sex = (Integer) userInfo.get("sex");
|
|
|
|
|
+ String avatar = userInfo.get("headimgurl").toString();
|
|
|
|
|
+ FsUser user = findUserByPhone(param.getPhone());
|
|
|
|
|
+ if (user!=null && StringUtils.isEmpty(user.getUnionId())){
|
|
|
|
|
+ FsUser userByUnionId = userMapper.selectFsUserByUnionid(unionid);
|
|
|
|
|
+ //绑定的微信已存在用户的情况,将手机号一键登录的时候创建的新号的手机号移动到老号中,删除新号(将两个号合并)
|
|
|
|
|
+ if (userByUnionId!=null){
|
|
|
|
|
+ if (StringUtils.isNotEmpty(userByUnionId.getPhone())&&!user.getPhone().equals(userByUnionId.getPhone())){
|
|
|
|
|
+ return R.error("该微信已绑定其他手机号");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (userByUnionId.getUserId().equals(user.getUserId())) {
|
|
|
|
|
+ user.setPhone(param.getPhone());
|
|
|
|
|
+ user.setLoginDevice(param.getLoginDevice());
|
|
|
|
|
+ user.setSource(param.getSource());
|
|
|
|
|
+ user.setUnionId(unionid);
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
|
|
+ userService.updateFsUser(user);
|
|
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
|
|
+ }
|
|
|
|
|
+ //改一下合并规则 将unionid存在的用户保留 合并掉手机号存在但unionid不存在的用户,而且如果被合并的用户如果有source 就转移过去用
|
|
|
|
|
+ // 合并用户逻辑:优先保留有 union_id 的用户
|
|
|
|
|
+ FsUser keepUser;
|
|
|
|
|
+ FsUser deleteUser;
|
|
|
|
|
+
|
|
|
|
|
+ // 判断哪个用户有 union_id,优先保留有 union_id 的用户
|
|
|
|
|
+ if (StringUtils.isNotEmpty(user.getUnionId()) && StringUtils.isEmpty(userByUnionId.getUnionId())) {
|
|
|
|
|
+ // 当前用户有 union_id,保留当前用户
|
|
|
|
|
+ keepUser = user;
|
|
|
|
|
+ deleteUser = userByUnionId;
|
|
|
|
|
+ } else if (StringUtils.isNotEmpty(userByUnionId.getUnionId()) && StringUtils.isEmpty(user.getUnionId())) {
|
|
|
|
|
+ // union_id 用户有 union_id,保留 union_id 用户
|
|
|
|
|
+ keepUser = userByUnionId;
|
|
|
|
|
+ deleteUser = user;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果两个用户都有或都没有 union_id,则按创建时间判断,保留较早创建的用户
|
|
|
|
|
+ if (user.getCreateTime().before(userByUnionId.getCreateTime())) {
|
|
|
|
|
+ keepUser = user;
|
|
|
|
|
+ deleteUser = userByUnionId;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ keepUser = userByUnionId;
|
|
|
|
|
+ deleteUser = user;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 更新保留用户的信息
|
|
|
|
|
+ keepUser.setUnionId(unionid);
|
|
|
|
|
+ keepUser.setPhone(param.getPhone());
|
|
|
|
|
+ // 如果保留用户没有 source,而被删除用户有 source,则转移 source
|
|
|
|
|
+ if (StringUtils.isEmpty(keepUser.getSource()) && StringUtils.isNotEmpty(deleteUser.getSource())) {
|
|
|
|
|
+ keepUser.setSource(deleteUser.getSource());
|
|
|
|
|
+ } else if (param.getSource() != null) {
|
|
|
|
|
+ keepUser.setSource(param.getSource());
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果保留用户没有 loginDevice,而被删除用户有 loginDevice,则转移 loginDevice
|
|
|
|
|
+ if (StringUtils.isEmpty(keepUser.getLoginDevice()) && StringUtils.isNotEmpty(deleteUser.getLoginDevice())) {
|
|
|
|
|
+ keepUser.setLoginDevice(deleteUser.getLoginDevice());
|
|
|
|
|
+ } else if (param.getLoginDevice() != null) {
|
|
|
|
|
+ keepUser.setLoginDevice(param.getLoginDevice());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ keepUser.setNickName(nickname);
|
|
|
|
|
+ keepUser.setAvatar(avatar);
|
|
|
|
|
+ keepUser.setSex(sex);
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ keepUser.setLastIp(ipAddr);
|
|
|
|
|
+ if (userService.updateFsUser(keepUser)>0){
|
|
|
|
|
+ userService.realDeleteFsUserByUserId(deleteUser.getUserId());
|
|
|
|
|
+ return generateTokenAndReturn(keepUser);
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ return R.error("绑定微信失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ }else {
|
|
|
|
|
+ user.setSource(param.getSource() != null ? param.getSource() : null );
|
|
|
|
|
+ user.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
|
|
+ user.setNickName(nickname);
|
|
|
|
|
+ user.setAvatar(avatar);
|
|
|
|
|
+ user.setSex(sex);
|
|
|
|
|
+ user.setUnionId(unionid);
|
|
|
|
|
+ user.setAppOpenId(openid);
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ user.setLastIp(ipAddr);
|
|
|
|
|
+ if (userService.updateFsUser(user)>0){
|
|
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ return R.error("绑定微信失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.error("数据参数异常!");
|
|
|
|
|
+ }catch (Exception e){
|
|
|
|
|
+ logger.error("zyp 登录失败:{}", e.getMessage());
|
|
|
|
|
+ return R.error("登录失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private void updateExistingUserJpushId(FsUser user, String jpushId) {
|
|
|
|
|
+ FsUser userMap = new FsUser();
|
|
|
|
|
+ userMap.setUserId(user.getUserId());
|
|
|
|
|
+ userMap.setJpushId(jpushId);
|
|
|
|
|
+ if (StringUtils.isNotEmpty(user.getAppOpenId())) {
|
|
|
|
|
+ userMap.setAppOpenId(user.getAppOpenId());
|
|
|
|
|
+ }
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ userMap.setLastIp(ipAddr);
|
|
|
|
|
+ userService.updateFsUser(userMap);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private R generateTokenAndReturn(FsUser user) {
|
|
|
|
|
+ String token = jwtUtils.generateToken(user.getUserId());
|
|
|
|
|
+ redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
|
|
|
|
|
+ int isFirstLogin = userNewTaskService.performTaskOne(user.getUserId());
|
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
|
+ map.put("token", token);
|
|
|
|
|
+ map.put("user", user);
|
|
|
|
|
+ map.put("isFirst",isFirstLogin);
|
|
|
|
|
+ return R.ok(map);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private R handleLoginType1(FsUserLoginParam param) {
|
|
|
|
|
+ if (StringUtils.isEmpty(param.getPhone()) || StringUtils.isEmpty(param.getPassword())) {
|
|
|
|
|
+ return R.error("账号或密码不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ FsUser user = findUserByPhone(param.getPhone());
|
|
|
|
|
+ // 校验用户是否存在及账号状态
|
|
|
|
|
+ if (user == null) {
|
|
|
|
|
+ return R.error("该手机账户不存在");
|
|
|
|
|
+ } else if (user.getStatus() == 0) {
|
|
|
|
|
+ return R.error("账号已停用");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(param.getJpushId())) {
|
|
|
|
|
+ updateExistingUserJpushId(user, param.getJpushId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!Md5Utils.hash(param.getPassword()).equals(user.getPassword())) {
|
|
|
|
|
+ return R.error("密码不正确");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private R handleLoginType3(FsUserLoginParam param) {
|
|
|
|
|
+ // 根据手机号查询用户
|
|
|
|
|
+ FsUser user = null;
|
|
|
|
|
+ List<FsUser> usersByPhone = findUsersByPhone(param.getPhone());
|
|
|
|
|
+ if (CollectionUtil.isEmpty(usersByPhone)){
|
|
|
|
|
+ FsUser newUser = createNewUser(param);
|
|
|
|
|
+ if (StringUtils.isNotEmpty(newUser.getJpushId())) {
|
|
|
|
|
+// try {
|
|
|
|
|
+// //发送注册优惠券
|
|
|
|
|
+// fsUserCouponService.sendRegisterCoupon(newUser);
|
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
|
+// logger.error("发送注册优惠券失败:{}",e.getMessage());
|
|
|
|
|
+// }
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.ok().put("isNew",true).put("phone",encryptPhone(param.getPhone()));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (usersByPhone.size()==1){
|
|
|
|
|
+ user = usersByPhone.get(0);
|
|
|
|
|
+ if (StringUtils.isEmpty(user.getUnionId())){
|
|
|
|
|
+ if (user.getPhone().length()<=11){
|
|
|
|
|
+ FsUser fsUser = new FsUser();
|
|
|
|
|
+ fsUser.setUserId(user.getUserId());
|
|
|
|
|
+ fsUser.setPhone(encryptPhone(param.getPhone()));
|
|
|
|
|
+ String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
|
|
|
|
|
+ fsUser.setLastIp(ipAddr);
|
|
|
|
|
+ userMapper.updateFsUser(fsUser);
|
|
|
|
|
+ logger.info("zyp \n【手机加密】:{}",encryptPhone(param.getPhone()));
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.ok().put("isNew",true).put("phone",encryptPhone(param.getPhone()));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(param.getJpushId())) {
|
|
|
|
|
+ updateExistingUserJpushId(user, param.getJpushId());
|
|
|
|
|
+// try {
|
|
|
|
|
+// //发送注册优惠券
|
|
|
|
|
+// fsUserCouponService.sendRegisterCoupon(user);
|
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
|
+// logger.error("发送注册优惠券失败:{}",e.getMessage());
|
|
|
|
|
+// }
|
|
|
|
|
+ }
|
|
|
|
|
+ }else {
|
|
|
|
|
+ return R.ok().put("users",usersByPhone);
|
|
|
|
|
+ }
|
|
|
|
|
+ return generateTokenAndReturn(user);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private List<FsUser> findUsersByPhone(String phone) {
|
|
|
|
|
+ // 先根据加密手机号查询用户
|
|
|
|
|
+ String jiami = (encryptPhone(phone));
|
|
|
|
|
+ List<FsUser> fsUsers = userMapper.selectFsUsersByPhoneLimitOne(jiami);
|
|
|
|
|
+ if (CollectionUtil.isEmpty(fsUsers)) {
|
|
|
|
|
+ fsUsers = userMapper.selectFsUsersByPhoneLimitOne(encryptPhoneOldKey(phone));
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果没有找到用户,再根据手机号查询
|
|
|
|
|
+ if (CollectionUtil.isEmpty(fsUsers)) {
|
|
|
|
|
+ fsUsers = userMapper.selectFsUsersByPhoneLimitOne(phone);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ return fsUsers;
|
|
|
|
|
+ }
|
|
|
|
|
+ private FsUser createNewUser(FsUserLoginParam param) {
|
|
|
|
|
+ FsUser newUser = new FsUser();
|
|
|
|
|
+ newUser.setLoginDevice(param.getLoginDevice() != null ? param.getLoginDevice() : null);
|
|
|
|
|
+ newUser.setSource(param.getSource() != null ? param.getSource() : null );
|
|
|
|
|
+ newUser.setNickName("匿名用户**");
|
|
|
|
|
+ newUser.setPhone(param.getPhone());
|
|
|
|
|
+ newUser.setCreateTime(new Date());
|
|
|
|
|
+ newUser.setStatus(1);
|
|
|
|
|
+ newUser.setAvatar("https://cos.his.cdwjyyh.com/fs/20240926/420728ee06e54575ba82665dedb4756b.png");
|
|
|
|
|
+ if (StringUtils.isNotEmpty(param.getJpushId())) {
|
|
|
|
|
+ newUser.setJpushId(param.getJpushId());
|
|
|
|
|
+ }
|
|
|
|
|
+ userService.insertFsUser(newUser);
|
|
|
|
|
+ return newUser;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private FsUser findUserByPhone(String phone) {
|
|
|
|
|
+ // 先根据加密手机号查询用户
|
|
|
|
|
+ String jiami = (encryptPhone(phone));
|
|
|
|
|
+ FsUser user = userMapper.selectFsUserByPhoneLimitOne(jiami);
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有找到用户,再根据手机号查询
|
|
|
|
|
+ if (user == null) {
|
|
|
|
|
+ user = userMapper.selectFsUserByPhoneLimitOne(phone);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ return user;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/loginTest")
|
|
|
|
|
+ public R loginTest(@RequestBody String userId) {
|
|
|
|
|
+ FsUser user = userMapper.selectFsUserByUserId(Long.parseLong(userId));
|
|
|
|
|
+ if (user!=null){
|
|
|
|
|
+ String token = jwtUtils.generateToken(user.getUserId());
|
|
|
|
|
+ redisCache.setCacheObject("userToken:" + user.getUserId(), token, 604800, TimeUnit.SECONDS);
|
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
|
+ map.put("token", token);
|
|
|
|
|
+ map.put("user", user);
|
|
|
|
|
+ return R.ok(map);
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.error("用户不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 退出清除jpushId
|
|
|
|
|
+ */
|
|
|
|
|
+ @Login
|
|
|
|
|
+ @GetMapping("/logout")
|
|
|
|
|
+ public R logout() {
|
|
|
|
|
+ String userId = getUserId();
|
|
|
|
|
+ FsUser fsUser = new FsUser();
|
|
|
|
|
+ fsUser.setUserId(Long.parseLong(userId));
|
|
|
|
|
+ fsUser.setJpushId("");
|
|
|
|
|
+ if (userMapper.updateFsUser(fsUser)>0) {
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.error("用户不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 更新jpushId
|
|
|
|
|
+ */
|
|
|
|
|
+ @Login
|
|
|
|
|
+ @GetMapping("/updatePushId")
|
|
|
|
|
+ public R updatePushId(@Param("pushId") String pushId) {
|
|
|
|
|
+ String userId = getUserId();
|
|
|
|
|
+ FsUser fsUser = new FsUser();
|
|
|
|
|
+ fsUser.setUserId(Long.parseLong(userId));
|
|
|
|
|
+ fsUser.setJpushId(pushId);
|
|
|
|
|
+ if (userMapper.updateFsUser(fsUser)>0) {
|
|
|
|
|
+ return R.ok();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.error("用户不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/sendCode")
|
|
|
|
|
+ public R sendCode(@RequestBody Map<String, String> body){
|
|
|
|
|
+ String phone = body.get("phone");
|
|
|
|
|
+ String encryptPhone = encryptPhone(phone);
|
|
|
|
|
+// List<FsUser> user = userService.selectFsUserListByPhone(encryptPhone);
|
|
|
|
|
+// if(CollectionUtil.isEmpty(user)){
|
|
|
|
|
+// user = userService.selectFsUserListByPhone(encryptPhoneOldKey(phone));
|
|
|
|
|
+// }
|
|
|
|
|
+// if (CollectionUtil.isEmpty(user)){
|
|
|
|
|
+// return R.error("此电话号码未绑定用户");
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
|
|
+ // 验证码 key(3分钟有效)
|
|
|
|
|
+ String smsCodeKey = "sms:code:" + phone;
|
|
|
|
|
+ // 冷却 key(60秒内不能重复发送)
|
|
|
|
|
+ String smsCooldownKey = "sms:cooldown:" + phone;
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否在 60 秒冷却期
|
|
|
|
|
+ if (redisCache.getCacheObject(smsCooldownKey) != null) {
|
|
|
|
|
+ return R.error("验证码已发送,请稍后再试");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 生成新验证码
|
|
|
|
|
+ String smsCode = VerifyCodeUtil.generateCode();
|
|
|
|
|
+
|
|
|
|
|
+ // 发送短信
|
|
|
|
|
+ smsService.sendCaptcha(phone, smsCode, "验证码");
|
|
|
|
|
+
|
|
|
|
|
+ // 缓存验证码(3分钟有效)
|
|
|
|
|
+ redisCache.setCacheObject(smsCodeKey, smsCode, 180, TimeUnit.SECONDS);
|
|
|
|
|
+ // 设置冷却时间(60秒内不能再发)
|
|
|
|
|
+ redisCache.setCacheObject(smsCooldownKey, "1", 60, TimeUnit.SECONDS);
|
|
|
|
|
+
|
|
|
|
|
+ return R.ok("验证码已发送");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 用于查询 使用老的数据加密
|
|
|
|
|
+ * @param text
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ private static String OLD_KEY = "2c8d1a7f4e9b3c6ae6d5c4b3a291f8c9";
|
|
|
|
|
+ public static String encryptPhoneOldKey(String text) {
|
|
|
|
|
+ String encryptedText=null;
|
|
|
|
|
+ try {
|
|
|
|
|
+ SecretKeySpec secretKey = new SecretKeySpec(OLD_KEY.getBytes(), "AES");
|
|
|
|
|
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
|
|
|
|
|
+ // Encryption
|
|
|
|
|
+ cipher.init(Cipher.ENCRYPT_MODE, secretKey);
|
|
|
|
|
+ byte[] encryptedBytes = cipher.doFinal(text.getBytes());
|
|
|
|
|
+ encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+ return encryptedText;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/loginByPhone")
|
|
|
|
|
+ public R loginByPhone(@RequestBody Map<String,String> map){
|
|
|
|
|
+ String phone = map.get("phone");
|
|
|
|
|
+ String code = map.get("code");
|
|
|
|
|
+ String encryptPhone = encryptPhone(phone);
|
|
|
|
|
+ List<FsUser> user = userService.selectFsUserListByPhone(encryptPhone);
|
|
|
|
|
+ if (CollectionUtil.isEmpty(user)){
|
|
|
|
|
+ user = userService.selectFsUserListByPhone(encryptPhoneOldKey(phone));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (CollectionUtil.isEmpty(user)){
|
|
|
|
|
+ return R.error("此电话号码未绑定用户");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (user.size()>1){
|
|
|
|
|
+ //如果出现了一个手机号多个用户的情况,找出登陆过app的那个用户
|
|
|
|
|
+ user.removeIf(fsUser -> StringUtils.isEmpty(fsUser.getHistoryApp()));
|
|
|
|
|
+ }
|
|
|
|
|
+ String redisCode = redisCache.getCacheObject("sms:code:" + phone);
|
|
|
|
|
+ if (StringUtils.isEmpty(redisCode)){
|
|
|
|
|
+ return R.error("验证码已过期,请重新发送");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!redisCode.equals(code)) {
|
|
|
|
|
+ return R.error("验证码错误");
|
|
|
|
|
+ }
|
|
|
|
|
+ updateExistingUserJpushId(user.get(0), map.get("jpushId"));
|
|
|
|
|
+ return generateTokenAndReturn(user.get(0));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/registerSendCode")
|
|
|
|
|
+ public R registerSendCode(@RequestBody Map<String, String> body){
|
|
|
|
|
+ String phone = body.get("phone");
|
|
|
|
|
+ String encryptPhone = encryptPhone(phone);
|
|
|
|
|
+ List<FsUser> user = userService.selectFsUserListByPhone(encryptPhone);
|
|
|
|
|
+ if(CollectionUtil.isEmpty(user)){
|
|
|
|
|
+ user = userService.selectFsUserListByPhone(encryptPhoneOldKey(phone));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!CollectionUtil.isEmpty(user)){
|
|
|
|
|
+ return R.error("此电话号码已注册");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 验证码 key(存验证码,3分钟有效)
|
|
|
|
|
+ String smsCodeKey = "sms:code:" + phone;
|
|
|
|
|
+ // 发送冷却 key(限制60秒内不能再次发送)
|
|
|
|
|
+ String smsCooldownKey = "sms:cooldown:" + phone;
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否在60秒冷却时间内
|
|
|
|
|
+ if (redisCache.getCacheObject(smsCooldownKey) != null) {
|
|
|
|
|
+ return R.error("验证码已发送,请稍后再试");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 生成新的验证码
|
|
|
|
|
+ String smsCode = VerifyCodeUtil.generateCode();
|
|
|
|
|
+
|
|
|
|
|
+ // 发送短信
|
|
|
|
|
+ smsService.sendCaptcha(phone, smsCode, "验证码");
|
|
|
|
|
+
|
|
|
|
|
+ // 缓存验证码(3分钟有效)
|
|
|
|
|
+ redisCache.setCacheObject(smsCodeKey, smsCode, 180, TimeUnit.SECONDS);
|
|
|
|
|
+ // 设置冷却时间(60秒内不能再发)
|
|
|
|
|
+ redisCache.setCacheObject(smsCooldownKey, "1", 60, TimeUnit.SECONDS);
|
|
|
|
|
+
|
|
|
|
|
+ return R.ok("验证码已发送");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/registerByPhone")
|
|
|
|
|
+ public R registerByPhone(@RequestBody Map<String,String> map){
|
|
|
|
|
+ String phone = map.get("phone");
|
|
|
|
|
+ String code = map.get("code");
|
|
|
|
|
+ String password = map.get("password");
|
|
|
|
|
+ String encryptPhone = encryptPhone(phone);
|
|
|
|
|
+ List<FsUser> users = userService.selectFsUserListByPhone(encryptPhone);
|
|
|
|
|
+ if (users == null || CollectionUtil.isEmpty(users)){
|
|
|
|
|
+ String s = encryptPhoneOldKey(phone);
|
|
|
|
|
+ users = userService.selectFsUserListByPhone(s);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!CollectionUtil.isEmpty(users)){
|
|
|
|
|
+ return R.error("此账号已经注册");
|
|
|
|
|
+ }
|
|
|
|
|
+ String redisCode = redisCache.getCacheObject("sms:code:" + phone);
|
|
|
|
|
+ if (StringUtils.isEmpty(redisCode)){
|
|
|
|
|
+ return R.error("验证码已过期,请重新发送");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!redisCode.equals(code)) {
|
|
|
|
|
+ return R.error("验证码错误");
|
|
|
|
|
+ }
|
|
|
|
|
+ FsUser user = new FsUser();
|
|
|
|
|
+ // 创建新用户
|
|
|
|
|
+ user.setPhone(phone);
|
|
|
|
|
+ user.setJpushId(map.get("jpushId"));
|
|
|
|
|
+ user.setSource(map.get("source"));
|
|
|
|
|
+ user.setNickName("app用户" + phone.substring(phone.length() - 4));
|
|
|
|
|
+ user.setStatus(1);
|
|
|
|
|
+ user.setAvatar("https://cos.his.cdwjyyh.com/fs/20240926/420728ee06e54575ba82665dedb4756b.png");
|
|
|
|
|
+ user.setPassword(Md5Utils.hash(password));
|
|
|
|
|
+ user.setCreateTime(new Date());
|
|
|
|
|
+ if (userService.insertFsUser(user) > 0) {
|
|
|
|
|
+ return R.ok("注册成功");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return R.error("注册失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/resetPassword")
|
|
|
|
|
+ public R resetPassword(@RequestBody Map<String, String> body){
|
|
|
|
|
+ String phone = body.get("phone");
|
|
|
|
|
+ String code = body.get("code");
|
|
|
|
|
+ String newPassword = body.get("newPassword");
|
|
|
|
|
+ String confirmPassword = body.get("confirmPassword");
|
|
|
|
|
+ if (!newPassword.equals(confirmPassword)){
|
|
|
|
|
+ throw new ServiceException("两次输入密码不一致,请检查");
|
|
|
|
|
+ }
|
|
|
|
|
+ String encryptPhone = encryptPhone(phone);
|
|
|
|
|
+ List<FsUser> user = userService.selectFsUserListByPhone(encryptPhone);
|
|
|
|
|
+ if (CollectionUtil.isEmpty(user)){
|
|
|
|
|
+ user = userService.selectFsUserListByPhone(encryptPhoneOldKey(phone));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (CollectionUtil.isEmpty(user)){
|
|
|
|
|
+ return R.error("此电话号码未绑定用户");
|
|
|
|
|
+ }
|
|
|
|
|
+ String redisCode = redisCache.getCacheObject("sms:code:" + phone);
|
|
|
|
|
+ if (StringUtils.isEmpty(redisCode)){
|
|
|
|
|
+ return R.error("验证码已过期,请重新发送");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!redisCode.equals(code)) {
|
|
|
|
|
+ return R.error("验证码错误");
|
|
|
|
|
+ }
|
|
|
|
|
+ String password = Md5Utils.hash(newPassword);
|
|
|
|
|
+ return userService.updatePasswordByPhone(password,encryptPhone);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|