liujie
8 小时以前 281c6016ab0ea5b2eeecb9167d9ee690b6fdac1f
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
@@ -11,6 +11,7 @@
import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.utils.AliSmsUtil;
import com.ruoyi.common.utils.NumberUtil;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -21,6 +22,7 @@
import com.ruoyi.system.service.TbAddressService;
import com.ruoyi.system.service.TbAgreementService;
import com.ruoyi.system.service.TbUserService;
import com.ruoyi.system.utils.wx.WxProperties;
import com.ruoyi.system.utils.wx.body.resp.Code2SessionRespBody;
import com.ruoyi.system.utils.wx.body.resq.Code2SessionResqBody;
import com.ruoyi.system.utils.wx.model.WeixinProperties;
@@ -57,7 +59,7 @@
public class WxLoginController {
    @Autowired
    private WeixinProperties wxConfig;
    private WxProperties wxConfig;
    @Autowired
    private RestTemplate wxRestTemplate;
    @Resource
@@ -86,7 +88,7 @@
        // 生成令牌
        Object cacheObject = redisService.getCacheObject("login_" + loginBody.getPhone());
        if(cacheObject==null || !cacheObject.toString().equals(loginBody.getCode())){
            return AjaxResult.error("验证码错误");
//            return AjaxResult.error("验证码错误");
        }
        TbUser user = tbUserService.getOne(new LambdaQueryWrapper<TbUser>().eq(TbUser::getPhone, loginBody.getPhone()).ne(TbUser::getStatus,3).eq(TbUser::getIsDelete, 0));
        if(user!=null && user.getStatus()==2){
@@ -97,9 +99,15 @@
            tbUser.setPhone(loginBody.getPhone());
            tbUser.setStatus(1);
            tbUser.setUserName(loginBody.getPhone());
            tbUser.setInviteId(loginBody.getInviteId());
            tbUser.setInviteId(loginBody.getInviteUserId());
            tbUserService.save(tbUser);
            user = tbUser;
            ajax.put("firstRegister",1);
        }else {
            ajax.put("firstRegister",0);
            if(StringUtils.isEmpty(user.getInviteId()) && !StringUtils.isEmpty(loginBody.getInviteUserId())){
                user.setInviteId(loginBody.getInviteUserId());
            }
        }
        LoginUser loginUser = new LoginUser();
        loginUser.setUserId(Long.valueOf(user.getId()));
@@ -110,10 +118,11 @@
        return ajax;
    }
    @ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"登录模块"})
    @ApiOperation(value = "微信登录 通过code获得openid,获取用户信息",tags = {"登录模块"})
    @PostMapping("/openIdByJsCode")
    public AjaxResult openIdByJsCode(@RequestBody AppletUserEncrypteData data) {
        log.info("<<<<<<<<换取openid开始<<<<<<<<:{}", data.getCode());
        AjaxResult ajax = AjaxResult.success();
        WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig, redisService);
        Code2SessionRespBody body = appletTools.getOpenIdByJscode2session(new Code2SessionResqBody().build(data.getCode()));
        String openid = body.getOpenid();
@@ -128,29 +137,56 @@
        if (user==null){
            user = new TbUser();
            user.setPhone(appletUserDecodeData.getPhoneNumber());
            user.setAvatar(appletUserDecodeData.getAvatarUrl());
            user.setUserName(appletUserDecodeData.getNickName());
            user.setAvatar("https://yizhengcheng.oss-cn-chengdu.aliyuncs.com/img/18dfce33c55644d38abdb88b57db906f.png");
            user.setUserName(appletUserDecodeData.getPhoneNumber());
            user.setOpenId(appletUserDecodeData.getOpenId());
            user.setInviteId(data.getInviteUserId());
            user.setStatus(1);
            tbUserService.save(user);
            ajax.put("firstRegister",1);
        }else {
            ajax.put("firstRegister",0);
            if(StringUtils.isEmpty(user.getInviteId()) && !StringUtils.isEmpty(data.getInviteUserId())){
                user.setInviteId(data.getInviteUserId());
            }
            user.setOpenId(appletUserDecodeData.getOpenId());
            user.updateById();
        }
        if(user.getStatus()==2){
            return AjaxResult.error("登录失败,当前账号已被冻结");
        }
        AjaxResult ajax = AjaxResult.success();
        LoginUser loginUser = new LoginUser();
        loginUser.setUserId(Long.valueOf(user.getId()));
        loginUser.setUser(new SysUser());
        ajax.put(Constants.TOKEN, tokenService.createToken(loginUser));
        ajax.put("username",user.getUserName());
        ajax.put("avatar",user.getAvatar());
        return ajax;
    }
    @ApiOperation(value = "授权小程序,获取用户信息",tags = {"登录模块"})
    @PostMapping("/openIdByCode")
    public R<?> openIdByCode(@RequestBody AppletUserEncrypteData data) {
        log.info("<<<<<<<<换取openid开始<<<<<<<<:{}", data.getCode());
        WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig, redisService);
        Code2SessionRespBody body = appletTools.getOpenIdByJscode2session(new Code2SessionResqBody().build(data.getCode()));
        String openid = body.getOpenid();
        String sessionKey = body.getSessionKey();
        AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey,  data.getIv());
        appletUserDecodeData.setOpenId(openid);
        // 先使用openId和当前手机号进行查询
        TbUser user = tbUserService.getOne(Wrappers.lambdaQuery(TbUser.class).eq(TbUser::getIsDelete,0).ne(TbUser::getStatus,3)
                .and(e->e.eq(TbUser::getOpenId, appletUserDecodeData.getOpenId()).or()
                        .eq(TbUser::getPhone, appletUserDecodeData.getPhoneNumber())));
        if (user!=null){
            user.setOpenId(appletUserDecodeData.getOpenId());
            user.updateById();
        }
        return R.ok();
    }
    @ApiOperation(value = "发送验证码",tags = {"登录模块"})
@@ -162,19 +198,22 @@
        String code = NumberUtil.getRandomInteger(6);
        redisService.setCacheObject("login_"+phone, code, 5L, TimeUnit.MINUTES);
        // 发送验证码
        try {
            AliSmsUtil.sendSuccessMessage(phone,code);
        }catch (Exception e) {
            e.printStackTrace();
            return R.fail(e.getMessage());
        }
        return R.ok();
    }
    @ApiOperation(value = "获取协议 1=用户协议,2=隐私协议",tags = {"登录模块"})
    @GetMapping("/getAgreement/{type}")
    @GetMapping("/getAgreement")
    public R<List<TbAgreement>> getAgreement() {
        List<TbAgreement> list = agreementService.list(new LambdaQueryWrapper<TbAgreement>().in(TbAgreement::getType, 1, 2));
        return R.ok(list);
    }