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.PassToken; import com.ruoyi.app.base.AppLoginUser; import com.ruoyi.app.base.AppTokenService; import com.ruoyi.app.domain.TbAppUser; import com.ruoyi.app.domain.vo.AppLoginVo; import com.ruoyi.app.domain.vo.AppMemberVo; 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.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.IpUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; 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 { private final AppTokenService appTokenService; private final ITbAppUserService userService; /** * 登录 */ @PassToken @ApiOperation(value = "APP登录", notes = "APP登录") @PostMapping("/login") public AjaxResult login(@RequestBody AppLoginVo loginVo){ if (StringUtils.isBlank(loginVo.getMobile())) { return AjaxResult.error("手机号不能为空"); } if (StringUtils.isBlank(loginVo.getCaptcha())){ return AjaxResult.error("验证码不能为空"); } //手机短信验证 // boolean ckCaptcha = AliSMSUtil.getInstance().validateSmsCode(loginVo.getMobile(), loginVo.getCaptcha()); // if (!ckCaptcha) { // return AjaxResult.error("验证码错误"); // } AppMemberVo appUser = userService.getAppMember(null,loginVo.getMobile()); boolean ck; Date date = new Date(); // 为空则新增 if (appUser == null) { appUser = new AppMemberVo(); appUser.setMobile(loginVo.getMobile()); appUser.setNickName(loginVo.getMobile()); appUser.setQrcode(DateUtils.getCurrentTimeRandom()); appUser.setCreateTime(date); ck = userService.saveOrUpdate(appUser); if (!ck){ return AjaxResult.error("未知异常,登录失败"); } appUser.setCreateBy(appUser.getUserId().toString()); } String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); appUser.setClientId(loginVo.getClientId()); appUser.setLoginIp(ip); appUser.setLoginTime(date); appUser.setUpdateBy(appUser.getUserId().toString()); appUser.setUpdateTime(date); ck = userService.saveOrUpdate(appUser); if (!ck){ return AjaxResult.error("未知异常,登录失败"); } //每次登录前,先删除缓存,保证登录唯一性 appTokenService.delLoginUser(loginVo.getMobile()); 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 = "发送短信验证码") @ApiImplicitParams({ @ApiImplicitParam(name = "type", value = "1.用户注册;2.登录确认;3.身份验证;4.登录异常;5.修改密码;6.信息变更",paramType="int"), @ApiImplicitParam(name = "mobile", value = "手机号",paramType="string") }) @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") @ApiImplicitParams({ @ApiImplicitParam(name = "mobile", value = "手机号",paramType="string"), @ApiImplicitParam(name = "captcha", value = "验证码",paramType="string") }) 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("验证成功"); } }