123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package com.care.client.controller;
- import cn.hutool.core.date.DateUtil;
- import com.care.client.service.PassportService;
- import com.care.client.vo.MemberInitParams;
- import com.care.common.entity.CareMemberInfo;
- import com.care.common.service.CareMemberInfoService;
- import com.care.common.service.SmsSendService;
- import com.care.common.util.CheckUtils;
- import com.care.common.util.JwtUtils;
- import com.care.common.util.Result;
- import com.google.common.cache.Cache;
- import com.google.common.cache.CacheBuilder;
- import io.swagger.annotations.*;
- import org.apache.commons.codec.digest.DigestUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.web.bind.annotation.*;
- import javax.annotation.Resource;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Random;
- import java.util.concurrent.TimeUnit;
- @Api(tags = "登录")
- @RestController
- @RequestMapping("/pinanbao")
- public class PassportController {
- @Resource
- private PassportService passportService;
- @Resource
- private SmsSendService smsSendService;
- @Resource
- private CareMemberInfoService careMemberInfoService;
- public final Cache<String, String> smsTimeoutCache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build();
- @ApiOperation(value = "小程序登录", notes = "小程序授权登录,微信登录传参:loginType=wx,code; 密码登录:loginType=pwd, phone, password")
- @ApiParam(name = "params", value = "登录参数")
- @PostMapping("login")
- public Result<Object> login(@RequestBody MemberInitParams params) {
- CheckUtils.valueIsNull(params, "loginType");
- if ("wx".equalsIgnoreCase(params.getLoginType())) {
- CheckUtils.valueIsNull(params, "code");
- } else if ("pwd".equalsIgnoreCase(params.getLoginType())) {
- if (StringUtils.isBlank(params.getPhone())) {
- return Result.error("请输入手机号码");
- }
- if (StringUtils.isBlank(params.getPassword())) {
- return Result.error("请输入密码");
- }
- }
- return passportService.login(params);
- }
- @ApiOperation(value = "小程序登录", notes = "微信登录解密手机号")
- @PostMapping("decodePhoneNumber")
- public Result<Object> decodePhoneNumber(@RequestBody Map<String,String> body) {
- return passportService.decodePhoneNumber(body.get("code"),body.get("encryptedData"),body.get("iv"));
- }
- @ApiOperation(value = "新用户注册", notes = "新用户注册")
- @GetMapping("registerPhone")
- @ApiImplicitParams(value = {
- @ApiImplicitParam(paramType = "query", name = "phone", value = "电话号码"),
- @ApiImplicitParam(paramType = "query", name = "vcode", value = "验证码"),
- @ApiImplicitParam(paramType = "query", name = "password", value = "密码 "),
- })
- public Result<Object> registerPhone(@RequestHeader(value = "token") String token,
- @RequestParam(value = "phone", required = true) String phone,
- @RequestParam(value = "vcode", required = true) String vcode,
- @RequestParam(value = "password", required = true) String password) {
- if (StringUtils.isBlank(phone)) {
- return Result.error("请输入手机号");
- }
- if(careMemberInfoService.detailByPhone(phone) != null){
- return Result.error("该账号已经注册");
- }
- if (!StringUtils.equalsIgnoreCase(vcode, smsTimeoutCache.getIfPresent(phone))) {
- return Result.error("请输入正确的验证码");
- }
- if (StringUtils.isBlank(password)) {
- return Result.error("请输入密码");
- }
- if (StringUtils.isNotBlank(phone) && StringUtils.isNotBlank(password)) {
- CareMemberInfo careMemberInfo = new CareMemberInfo();
- careMemberInfo.setPhone(phone);
- careMemberInfo.setPassword(DigestUtils.md5Hex(password));
- careMemberInfo.setCreateTime(DateUtil.date());
- boolean flag = careMemberInfoService.save(careMemberInfo);
- if (flag) {
- return Result.success();
- }
- }
- return Result.error("注册失败");
- }
- @ApiOperation(value = " 获取验证码", notes = "获取验证码")
- @GetMapping("getVCode")
- @ApiImplicitParams(value = {
- @ApiImplicitParam(paramType = "query", name = "phone", value = "电话号码"),
- @ApiImplicitParam(paramType = "query", name = "type", value = "类型:1手机号注册,2密码重置,3修改注册手机号"),
- })
- public Result<String> getVCode(@RequestParam(value = "phone", required = true) String phone,
- @RequestParam(value = "type", required = true) String type) {
- String vcode = String.format("%04d",new Random().nextInt(9999));
- boolean flag = false;
- if("1".equals(type)){
- if(careMemberInfoService.detailByPhone(phone) != null){
- return Result.error("该手机号已经注册");
- }
- flag = smsSendService.sendSmsCode4RegisterPhone(phone, vcode);
- } else if("2".equals(type)){
- flag = smsSendService.sendSmsCode4ModifyPassword(phone, vcode);
- } else if("3".equals(type)){
- flag = smsSendService.sendSmsCode4ModifyPhone(phone, vcode);
- }
- if (flag) {
- smsTimeoutCache.put(phone, vcode);
- return Result.success();
- } else {
- return Result.error("获取验证码失败");
- }
- }
- @ApiOperation(value = "校验验证码", notes = "校验验证码")
- @GetMapping("checkVCode")
- @ApiImplicitParams(value = {
- @ApiImplicitParam(paramType = "query", name = "phone", value = "电话号码"),
- })
- public Result<String> checkVCode(@RequestParam(value = "phone", required = true) String phone,
- @RequestParam(value = "vcode", required = true) String vcode) {
- if(StringUtils.equalsIgnoreCase(vcode, smsTimeoutCache.getIfPresent(phone))){
- return Result.success();
- } else {
- return Result.error("请输入正确的验证码");
- }
- }
- @ApiOperation(value = "设置新密码", notes = "设置新密码, 传值:手机号,密码,确认密码,验证码")
- @ApiParam(name = "params", value = "登录参数")
- @PostMapping("changePwd")
- public Result<Object> changePwd(@RequestBody MemberInitParams params) {
- if (StringUtils.isBlank(params.getPhone())) {
- return Result.error("手机号码不能为空");
- }
- if (StringUtils.isBlank(params.getPassword())) {
- return Result.error("请输入密码");
- }
- if (StringUtils.isBlank(params.getPasswordAgain())) {
- return Result.error("请再次输入密码");
- }
- if (!params.getPassword().equals(params.getPasswordAgain())) {
- return Result.error("两次输入密码不一致");
- }
- if (StringUtils.isBlank(params.getVcode())) {
- return Result.error("验证码不能为空");
- }
- if (!StringUtils.equalsIgnoreCase(params.getVcode(), smsTimeoutCache.getIfPresent(params.getPhone()))) {
- return Result.error("验证码无效");
- }
- CareMemberInfo careMemberInfo = careMemberInfoService.detailByPhone(params.getPhone());
- if (careMemberInfo == null) {
- return Result.error("该手机号未注册");
- }
- boolean flag = passportService.changePwd(params.getPassword(), careMemberInfo.getId());
- if (flag) {
- return Result.success();
- }
- return Result.error("设置新密码失败");
- }
- @ApiOperation(value = "小程序登出", notes = "小程序登出")
- @PostMapping("logout")
- public Result<Object> logout(@RequestHeader String token) {
- passportService.logout(token);
- return Result.success();
- }
- }
|