package com.yeshi.fanli.controller.client.v1; import java.io.PrintWriter; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.yeshi.utils.JsonUtil; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.exception.config.SMSException; import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService; import com.yeshi.fanli.service.inter.user.SMSService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKey; @Controller @RequestMapping("api/v1/sms") public class SMSController { @Resource private SMSService smsService; @Resource private RedisManager redisManager; @Resource private UserInfoService userInfoService; @Resource private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService; // 发送短信 @RequestSerializableByKey(key = "#phone+'-'+#uid+'-'+#type") @RequestMapping(value = "sendSMS", method = RequestMethod.POST) public void sendMSM(AcceptData acceptData, String phone, Long uid, Integer type, PrintWriter out) { sendMSM(acceptData, phone, uid, type, StringUtil.Md5(phone + "-" + "-" + uid + "-" + type), out); } public void sendMSM(AcceptData acceptData, String phone, Long uid, Integer type, String key, PrintWriter out) { try { if (phone.contains("**") && uid != null && uid > 0) { UserInfo userInfo = userInfoService.getUserById(uid); if (userInfo == null) { out.print(JsonUtil.loadFalseResult(2, "用户不存在")); return; } else if (StringUtil.isNullOrEmpty(userInfo.getPhone())) { out.print(JsonUtil.loadFalseResult(3, "尚未绑定电话号码")); return; } phone = userInfo.getPhone(); } if (!StringUtil.isMobile(phone)) { out.print(JsonUtil.loadFalseResult(4, "电话号码格式不正确")); return; } smsService.sendLoginVCode(phone, 6); out.print(JsonUtil.loadTrueResult("发送成功")); } catch (SMSException e) { out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg())); } } /** * 1.5.3 登录发送短信 * * @param acceptData * @param phone * @param uid * @param out */ @RequestMapping(value = "sendMSMLogin", method = RequestMethod.POST) public void sendMSMLogin(AcceptData acceptData, String phone, boolean slideVerify, PrintWriter out) { if (phone == null || !StringUtil.isMobile(phone.replaceAll(" ", ""))) { out.print(JsonUtil.loadFalseResult(1, "手机号输入有误,请修改")); return; } phone = phone.replaceAll(" ", ""); if (Constant.IS_TEST) { out.print(JsonUtil.loadTrueResult("发送成功")); return; } sendMSNnew(phone, slideVerify, 1, StringUtil.Md5(phone + "-" + acceptData.getDevice()), out); } /** * 1.5.3 绑定发送短信 * * @param acceptData * @param phone * @param uid * @param out */ @RequestSerializableByKey(key = "#acceptData.device+'-'+#phone") @RequestMapping(value = "sendMSMBind", method = RequestMethod.POST) public void sendMSMBind(AcceptData acceptData, String phone, boolean slideVerify, PrintWriter out) { if (phone == null || !StringUtil.isMobile(phone.replaceAll(" ", ""))) { out.print(JsonUtil.loadFalseResult(1, "手机号输入有误,请修改")); return; } phone = phone.replaceAll(" ", ""); // 判断手机号码是否被封禁 // ForbiddenUserIdentifyCode identifyCode1 = // forbiddenUserIdentifyCodeService // .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, // phone); // if (identifyCode1 != null && identifyCode1.getEffective() != null && // identifyCode1.getEffective()) { // out.print(JsonUtil.loadFalseResult(9001,"该电话号码被占用")); // return; // } // // 判断手机号码是否被封禁 UserInfo phoneUser = userInfoService.getEffectiveUserInfoByPhone(phone); if (phoneUser != null) { out.print(JsonUtil.loadFalseResult(9001, "该电话号码被占用")); return; } if (Constant.IS_TEST) { out.print(JsonUtil.loadTrueResult("发送成功")); return; } sendMSNnew(phone, slideVerify, 2, StringUtil.Md5(phone + "-" + acceptData.getDevice()), out); } public void sendMSNnew(String phone, boolean slideVerify, int type, String key, PrintWriter out) { try { int count = 0; String cachekey = null; if (type == 1) { // 登录验证码 cachekey = "sendMSNLoginCount" + phone; } else if (type == 2) { // 绑定验证码 cachekey = "sendMSNBindCount" + phone; } if (cachekey == null) { out.print(JsonUtil.loadFalseResult(1, "发送失败")); return; } String cacheValue = redisManager.getCommonString(cachekey); if (!StringUtil.isNullOrEmpty(cacheValue)) { count = Integer.parseInt(cacheValue); // 限制3次 if (count >= 3) { out.print(JsonUtil.loadFalseResult(3, "验证码次数超限,请稍后再试")); return; } } if (count == 2 && !slideVerify) { out.print(JsonUtil.loadFalseResult(2, "需要滑动验证")); return; } // 缓存一个小时 count++; redisManager.cacheCommonString(cachekey, count + "", 60 * 60); if (type == 1) { // 登录验证码 smsService.sendLoginVCode(phone, 4); } else if (type == 2) { // 绑定验证码 smsService.sendBindVCode(phone, 4); } out.print(JsonUtil.loadTrueResult("发送成功")); } catch (SMSException e) { out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg())); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "发送失败")); e.printStackTrace(); } } }