package com.js.ai.modules.pointwall.action;
import java.io.IOException;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.js.ai.common.utils.CacheUtils;
import com.js.ai.common.utils.StringUtils;
import com.js.ai.common.web.BaseController;
import com.js.ai.modules.pointwall.util.JsonHandle;
import com.js.ai.modules.pointwall.util.SysConfigUtil;
import com.js.ai.smssend.SendValidCode;
/**
*
* @ClassName: SendSmsAction
* @Description: 短信验证码 Controller
* @author:
* @date:
*/
@Controller
@RequestMapping(value = "${adminPath}/client")
public class SendSmsAction extends BaseController {
private static Logger logger = Logger.getLogger(SendSmsAction.class);
/**
*
* @Title: sendSms
* @Description: 发送短信验证码
* @param request
* @param response
* @throws IOException
*
* @return: void
*/
@RequestMapping(value = "sendSMS")
@ResponseBody
public String sendSms(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
String uuid = request.getParameter("uuid");// 获取客户端发送的手机唯一标识码
String phone = request.getParameter("phone");// 获取客户端发送手机号码
String phone_map = (String) CacheUtils.get(phone);// 根据手机号这个key取出对应的uuid值,限制同一个手机号五分钟内只能发送一次号码
String uuid_map = (String) CacheUtils.get(uuid);// 取出uuid的值来限制一台手机五分钟内只能发送一条短息。
HashMap<String, String> map = new HashMap<String, String>();
int smsCode = 100000 + (int) (Math.random() * 899999);// 随机验证码
String verificationCode = String.valueOf(smsCode);// 验证码
if (StringUtils.isEmpty(uuid_map)) {// 第一次为空的时候则插入缓存中
CacheUtils.put(uuid, uuid);// 用同一个uuid即作为key 也作为value
if (StringUtils.isNotBlank(phone) && StringUtils.isEmpty(phone_map)) {
CacheUtils.put(phone, phone);
String result = SendValidCode.sendMessage(SysConfigUtil.SMS_ZH, SysConfigUtil.SMS_PW, phone,
SysConfigUtil.SMS_QM, verificationCode, SysConfigUtil.SMS_WAY);
logger.info("客户端第一次发送短信" + phone + ">>>>" + uuid);
} else {// 即使同一个号码 在不同的手机上 也同样限制为在五分钟内只能 发送一次短信获取验证码
map.put("sendSMS", "error");
logger.info("当前在五分钟内不能重复发送短信" + phone + ">>>>" + uuid);
}
} else {
if (uuid_map.equals(uuid)) {// 第二次之后进来,则判断uuid是否一样,如果是则代表五分钟内不能发送短信
map.put("sendSMS", "error");
logger.info("当前在五分钟内不能重复发送短信" + phone + "=====" + uuid);
} else {
if (StringUtils.isNotBlank(phone)) {// 法则发送信息,并重新赋值
String result = SendValidCode.sendMessage(SysConfigUtil.SMS_ZH, SysConfigUtil.SMS_PW, phone,
SysConfigUtil.SMS_QM, verificationCode, SysConfigUtil.SMS_WAY);
CacheUtils.put(phone, phone);
CacheUtils.put(uuid, uuid);// 用同一个uuid即作为key 也作为value
logger.info("当前不在五分钟内允许发送短信");
}
}
}
map.put("Checkcode", verificationCode);
String Checkcode = JsonHandle.toJson(map);
return Checkcode;
}
}