package com.ruoyi.app.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.app.annotation.AuthToken; import com.ruoyi.app.annotation.PassToken; import com.ruoyi.app.base.AppLoginUser; import com.ruoyi.app.base.AppTokenService; import com.ruoyi.app.domain.TbAppUser; import com.ruoyi.app.service.ITbAppUserService; import com.ruoyi.app.util.AliSMSUtil; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.Map; /** * 会员登录 * * @author Alex * @date 2020-09-24 */ @Api(value = "APP登录",tags = "APP登录") @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/app" ) public class AppLoginController { @Autowired AppTokenService appTokenService; @Autowired private ITbAppUserService userService; /** * 登录 */ @PassToken @ApiOperation(value = "APP登录", notes = "APP登录") @PostMapping("/login") public AjaxResult login(String mobile, String captcha){ if (StringUtils.isBlank(mobile)) { return AjaxResult.error("手机号不能为空"); } if (StringUtils.isBlank(captcha)){ return AjaxResult.error("验证码不能为空"); } TbAppUser appUser = userService.getOne(new QueryWrapper() .eq("mobile",mobile) ); // 为空则新增 if (appUser == null) { appUser = new TbAppUser(); Date date = new Date(); appUser.setMobile(mobile); appUser.setNickName(mobile); appUser.setRole("USER"); appUser.setQrcode(DateUtils.getCurrentTimeRandom()); appUser.setCreateTime(date); appUser.setUpdateTime(date); boolean ck = userService.save(appUser); if (!ck){ return AjaxResult.error("未知异常,登录失败"); } appUser.setCreateBy(appUser.getId()); appUser.setUpdateBy(appUser.getId()); ck = userService.updateById(appUser); if (!ck){ return AjaxResult.error("未知异常,登录失败"); } } //手机短信验证 // TODO 调试通过,以后测试在放开注释 // boolean ckCaptcha = AliSMSUtil.getInstance().validateSmsCode(mobile, captcha); // if (!ckCaptcha) { // return AjaxResult.error("验证码错误"); // } //每次登录前,先删除缓存,保证登录唯一性 appTokenService.delLoginUser(mobile); JSONObject jsonObject = new JSONObject(); AppLoginUser loginUser = new AppLoginUser(); loginUser.setUser(appUser); String token = appTokenService.createToken(loginUser); jsonObject.put("token", token); jsonObject.put("user", appUser); return AjaxResult.success(jsonObject); } /** * 发送短信验证码 * @param type 1、用户注册;2、登录确认;3、身份验证;4、登录异常;5、修改密码;6、信息变更; * @param mobile 手机号码 * @return */ @PassToken @ApiOperation(value = "发送短信验证码", notes = "发送短信验证码") @GetMapping("/captchaSend") public AjaxResult sendCaptcha(Integer type, String mobile){ if(StringUtils.isBlank(mobile)){ return AjaxResult.error("请输入手机号"); } Map map = AliSMSUtil.getInstance().sendSmsCode(type, mobile); if(map.get("code").equals("200")) { return AjaxResult.success("发送成功"); } return AjaxResult.error(map.get("msg")); } /** * 校验验证码 * @param mobile * @param captcha * @return */ @PassToken @ApiOperation(value = "校验短信验证码", notes = "校验短信验证码") @GetMapping("/captchaValidate") public AjaxResult validateCaptcha(String mobile, String captcha){ if (StringUtils.isBlank(mobile)) { return AjaxResult.error("手机号不能为空"); } if (StringUtils.isBlank(captcha)){ return AjaxResult.error("验证码不能为空"); } //手机短信验证 boolean ckCaptcha = AliSMSUtil.getInstance().validateSmsCode(mobile, captcha); if (!ckCaptcha) { return AjaxResult.error("验证码错误"); } return AjaxResult.success("验证成功"); } @ApiOperation(value = "getUser", notes = "getUser") // @AuthToken @GetMapping("/getLoginUser") public AjaxResult getLoginUser(HttpServletRequest request){ AppLoginUser user = appTokenService.getLoginUser(request); return AjaxResult.success(user); } public static void main(String[] args) { // System.out.println(DateUtils.getCurrentTimeRandom()); String code = "1111111"; String params = "{\"code1\":\""+code+"\"}"; JSONObject jsonObject = JSON.parseObject(params); jsonObject.getString("code"); System.out.println(jsonObject.getString("code")); } }