|  | @@ -0,0 +1,88 @@
 | 
	
		
			
				|  |  | +package com.yonge.cooleshow.tenant.controller;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import com.wf.captcha.SpecCaptcha;
 | 
	
		
			
				|  |  | +import com.wf.captcha.utils.CaptchaUtil;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.biz.dal.service.SmsCodeService;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.controller.BaseController;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.security.SecurityConstants;
 | 
	
		
			
				|  |  | +import com.yonge.toolset.base.exception.BizException;
 | 
	
		
			
				|  |  | +import io.swagger.annotations.Api;
 | 
	
		
			
				|  |  | +import io.swagger.annotations.ApiImplicitParam;
 | 
	
		
			
				|  |  | +import io.swagger.annotations.ApiImplicitParams;
 | 
	
		
			
				|  |  | +import io.swagger.annotations.ApiOperation;
 | 
	
		
			
				|  |  | +import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | +import org.springframework.data.redis.core.RedisTemplate;
 | 
	
		
			
				|  |  | +import org.springframework.web.bind.annotation.PostMapping;
 | 
	
		
			
				|  |  | +import org.springframework.web.bind.annotation.RequestMapping;
 | 
	
		
			
				|  |  | +import org.springframework.web.bind.annotation.RestController;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  | +import javax.servlet.http.HttpServletResponse;
 | 
	
		
			
				|  |  | +import java.util.concurrent.TimeUnit;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@RestController
 | 
	
		
			
				|  |  | +@RequestMapping("${app-config.url.tenant:}/code")
 | 
	
		
			
				|  |  | +@Api(tags = "验证码服务")
 | 
	
		
			
				|  |  | +public class SmsCodeController extends BaseController {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private SmsCodeService smsCodeService;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private RedisTemplate<String,String> redisTemplate;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @ApiOperation(value = "发送短信验证码")
 | 
	
		
			
				|  |  | +    @ApiImplicitParams({  @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
 | 
	
		
			
				|  |  | +                          @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号,LOGOFF:用户注销)", required = true, dataType = "String") })
 | 
	
		
			
				|  |  | +    @PostMapping(value = "/sendSmsCode")
 | 
	
		
			
				|  |  | +    public Object sendLoginVerifyCode(String mobile,String type) throws Exception {
 | 
	
		
			
				|  |  | +        smsCodeService.sendValidCode(mobile, type, ClientEnum.TEACHER);
 | 
	
		
			
				|  |  | +        return succeed();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @ApiOperation(value = "校验短信验证码")
 | 
	
		
			
				|  |  | +    @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
 | 
	
		
			
				|  |  | +                         @ApiImplicitParam(name = "code", value = "短信验证码", required = true, dataType = "String"),
 | 
	
		
			
				|  |  | +                         @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
 | 
	
		
			
				|  |  | +    @PostMapping(value = "/verifySmsCode")
 | 
	
		
			
				|  |  | +    public Object verifySmsCode(String phone,String code,String type) {
 | 
	
		
			
				|  |  | +        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
 | 
	
		
			
				|  |  | +            return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(smsCodeService.verifyValidCode(phone, code, type)){
 | 
	
		
			
				|  |  | +            return succeed();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return failed("验证码校验失败");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @PostMapping(value = "/verifyImageCode")
 | 
	
		
			
				|  |  | +    @ApiOperation("校验登录图形验证码")
 | 
	
		
			
				|  |  | +    @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
 | 
	
		
			
				|  |  | +            @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String") })
 | 
	
		
			
				|  |  | +    public Object verifyImageCode(String phone,String code){
 | 
	
		
			
				|  |  | +        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
 | 
	
		
			
				|  |  | +            return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String redisKey = MessageTypeEnum.KAPTCHA_SESSION_KEY + phone;
 | 
	
		
			
				|  |  | +        if(redisTemplate.hasKey(redisKey)){
 | 
	
		
			
				|  |  | +            if(StringUtils.equalsIgnoreCase(redisTemplate.opsForValue().get(redisKey),code)){
 | 
	
		
			
				|  |  | +                return succeed();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return failed(SecurityConstants.VERIFY_FAILURE);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @RequestMapping("/getImageCode")
 | 
	
		
			
				|  |  | +    @ApiOperation("获取登录图片验证码")
 | 
	
		
			
				|  |  | +    @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String")
 | 
	
		
			
				|  |  | +    public void getLoginImage(HttpServletRequest request, HttpServletResponse response,String phone) throws Exception {
 | 
	
		
			
				|  |  | +        if(StringUtils.isEmpty(phone)){
 | 
	
		
			
				|  |  | +            throw new BizException("请输入手机号");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        SpecCaptcha specCaptcha = new SpecCaptcha(125, 45, 4);
 | 
	
		
			
				|  |  | +        redisTemplate.opsForValue().set(MessageTypeEnum.KAPTCHA_SESSION_KEY + phone,specCaptcha.text(),3, TimeUnit.MINUTES);
 | 
	
		
			
				|  |  | +        CaptchaUtil.out(specCaptcha, request, response);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |