| | |
| | | package com.yeshi.fanli.service.impl.user;
|
| | |
|
| | | import java.util.Date;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.stereotype.Service;
|
| | |
|
| | | import com.yeshi.fanli.dao.mybatis.SMSHistoryMapper;
|
| | | import com.yeshi.fanli.entity.bus.user.SMSHistory;
|
| | | import com.yeshi.fanli.exception.SMSException;
|
| | | import com.yeshi.fanli.service.inter.user.SMSService;
|
| | | import com.yeshi.fanli.util.Constant;
|
| | | import com.yeshi.fanli.util.RedisManager;
|
| | | import com.yeshi.fanli.util.StringUtil;
|
| | | import com.yeshi.fanli.util.TencentSMSUtil;
|
| | |
|
| | | @Service
|
| | | public class SMSServiceImpl implements SMSService {
|
| | |
|
| | | @Resource
|
| | | private SMSHistoryMapper smsHistoryMapper;
|
| | |
|
| | | @Resource
|
| | | private RedisManager redisManager;
|
| | |
|
| | | @Override
|
| | | public String sendLoginVCode(String phone) throws SMSException {
|
| | | boolean limit = redisManager.isSmsFrequencyLimit(phone, SMSHistory.TYPE_LOGIN);
|
| | | if (limit)
|
| | | throw new SMSException(1001, "请过60秒再试");
|
| | | String msgCode = StringUtil.getVerifyCode(6);
|
| | | System.out.println(msgCode);
|
| | | // 验证码模板
|
| | | String msg = Constant.smsConfig.getSmsLogin().replace("[签名]", Constant.smsConfig.getSmsSign()).replace("[验证码]",
|
| | | msgCode);
|
| | | // 发送短信
|
| | | TencentSMSUtil.sendSingleMsg(phone, msg);
|
| | | // 缓存
|
| | | redisManager.sendSms(phone, SMSHistory.TYPE_LOGIN);
|
| | | redisManager.saveSMSVCode(phone, SMSHistory.TYPE_LOGIN, msgCode);
|
| | | SMSHistory smsHistory = new SMSHistory();
|
| | | smsHistory.setContent(msg);
|
| | | smsHistory.setCreateTime(new Date());
|
| | | smsHistory.setPhone(phone);
|
| | | smsHistory.setType(SMSHistory.TYPE_LOGIN);
|
| | | smsHistoryMapper.insertSelective(smsHistory);
|
| | | return msgCode;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void sendBindVCode(String phone) throws SMSException {
|
| | | boolean limit = redisManager.isSmsFrequencyLimit(phone, SMSHistory.TYPE_BIND);
|
| | | if (limit)
|
| | | throw new SMSException(1001, "请过60秒再试");
|
| | | String msgCode = StringUtil.getRandomCode(6);
|
| | | String msg = Constant.smsConfig.getSmsBind().replace("[签名]", Constant.smsConfig.getSmsSign()).replace("[验证码]",
|
| | | msgCode);
|
| | | // 发送短信
|
| | | TencentSMSUtil.sendSingleMsg(phone, msg);
|
| | | // 缓存
|
| | | redisManager.sendSms(phone, SMSHistory.TYPE_BIND);
|
| | | redisManager.saveSMSVCode(phone, SMSHistory.TYPE_BIND, msgCode);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void sendExtractVCode(String phone) throws SMSException {
|
| | | boolean limit = redisManager.isSmsFrequencyLimit(phone, SMSHistory.TYPE_EXTRACT);
|
| | | if (limit)
|
| | | throw new SMSException(1001, "请过60秒再试");
|
| | | String msgCode = StringUtil.getRandomCode(6);
|
| | | String msg = Constant.smsConfig.getSmsExtract().replace("[签名]", Constant.smsConfig.getSmsSign())
|
| | | .replace("[验证码]", msgCode);
|
| | | // 发送短信
|
| | | TencentSMSUtil.sendSingleMsg(phone, msg);
|
| | | // 缓存
|
| | | redisManager.sendSms(phone, SMSHistory.TYPE_EXTRACT);
|
| | | redisManager.saveSMSVCode(phone, SMSHistory.TYPE_EXTRACT, msgCode);
|
| | | }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.service.impl.user; |
| | | |
| | | import com.yeshi.fanli.dao.mybatis.SMSHistoryMapper; |
| | | import com.yeshi.fanli.entity.SystemEnum; |
| | | import com.yeshi.fanli.entity.bus.user.SMSHistory; |
| | | import com.yeshi.fanli.exception.config.SMSException; |
| | | import com.yeshi.fanli.service.inter.user.SMSService; |
| | | import com.yeshi.fanli.util.*; |
| | | import net.sf.json.JSONObject; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | @Service |
| | | public class SMSServiceImpl implements SMSService { |
| | | |
| | | @Resource |
| | | private SMSHistoryMapper smsHistoryMapper; |
| | | |
| | | @Resource |
| | | private RedisManager redisManager; |
| | | |
| | | @Override |
| | | public String sendLoginVCode(SystemEnum system, String phone, int codeLength) throws SMSException { |
| | | boolean limit = redisManager.isSmsFrequencyLimit(phone, SMSHistory.TYPE_LOGIN); |
| | | if (limit) |
| | | throw new SMSException(1001, "请过60秒再试"); |
| | | |
| | | String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("sms-login-tencent-latest-" + phone)); |
| | | |
| | | String msgCode = StringUtil.getVerifyCode(codeLength); |
| | | |
| | | // 验证码模板 |
| | | String msg = Constant.smsConfig.getSmsLogin().replace("[签名]", system.getSmsAlias()).replace("[验证码]", |
| | | msgCode); |
| | | if (Constant.IS_TEST) |
| | | System.out.println(msg); |
| | | // 发送短信 |
| | | // 发送间隔2分钟内的采用阿里云短信发送 |
| | | String cacheString = redisManager.getCommonString(key); |
| | | if (StringUtil.isNullOrEmpty(cacheString) || Integer.parseInt(cacheString) < 2) { |
| | | TencentSMSUtil.sendSingleMsg(phone, msg); |
| | | redisManager.increase(key); |
| | | redisManager.expire(key, 120); |
| | | } else { |
| | | redisManager.removeCommonString(key); |
| | | // 发送阿里云短信 |
| | | JSONObject data = new JSONObject(); |
| | | data.put("code", msgCode); |
| | | AliyunSMSUtil.sendSingleMsg(phone, Constant.smsConfig.getAliyunLoginTemplatecode(), data.toString()); |
| | | } |
| | | // 缓存 |
| | | redisManager.sendSms(phone, SMSHistory.TYPE_LOGIN); |
| | | redisManager.saveSMSVCode(phone, SMSHistory.TYPE_LOGIN, msgCode); |
| | | |
| | | SMSHistory smsHistory = new SMSHistory(); |
| | | smsHistory.setContent(msg); |
| | | smsHistory.setCreateTime(new Date()); |
| | | smsHistory.setPhone(phone); |
| | | smsHistory.setType(SMSHistory.TYPE_LOGIN); |
| | | smsHistoryMapper.insertSelective(smsHistory); |
| | | return msgCode; |
| | | } |
| | | |
| | | @Override |
| | | public void sendBindVCode(SystemEnum system, String phone, int codeLength) throws SMSException { |
| | | boolean limit = redisManager.isSmsFrequencyLimit(phone, SMSHistory.TYPE_BIND); |
| | | if (limit) |
| | | throw new SMSException(1001, "请过60秒再试"); |
| | | String msgCode = StringUtil.getVerifyCode(codeLength); |
| | | |
| | | // 验证码模板 |
| | | String msg = Constant.smsConfig.getSmsBind().replace("[签名]", system.getSmsAlias()).replace("[验证码]", |
| | | msgCode); |
| | | // 发送短信 |
| | | TencentSMSUtil.sendSingleMsg(phone, msg); |
| | | |
| | | // 缓存 |
| | | redisManager.sendSms(phone, SMSHistory.TYPE_BIND); |
| | | redisManager.saveSMSVCode(phone, SMSHistory.TYPE_BIND, msgCode); |
| | | |
| | | SMSHistory smsHistory = new SMSHistory(); |
| | | smsHistory.setContent(msg); |
| | | smsHistory.setCreateTime(new Date()); |
| | | smsHistory.setPhone(phone); |
| | | smsHistory.setType(SMSHistory.TYPE_BIND); |
| | | smsHistoryMapper.insertSelective(smsHistory); |
| | | } |
| | | |
| | | @Override |
| | | public void sendRemoveVCode(SystemEnum system, String phone, int codeLength) throws SMSException { |
| | | boolean limit = redisManager.isSmsFrequencyLimit(phone, SMSHistory.TYPE_REMVOE); |
| | | if (limit) |
| | | throw new SMSException(1001, "请过60秒再试"); |
| | | String msgCode = StringUtil.getVerifyCode(codeLength); |
| | | |
| | | // 验证码模板 |
| | | String msg = Constant.smsConfig.getSmsBind().replace("[签名]", system.getSmsAlias()).replace("[验证码]", |
| | | msgCode); |
| | | // 发送短信 |
| | | TencentSMSUtil.sendSingleMsg(phone, msg); |
| | | |
| | | // 缓存 |
| | | redisManager.sendSms(phone, SMSHistory.TYPE_REMVOE); |
| | | redisManager.saveSMSVCode(phone, SMSHistory.TYPE_REMVOE, msgCode); |
| | | |
| | | SMSHistory smsHistory = new SMSHistory(); |
| | | smsHistory.setContent(msg); |
| | | smsHistory.setCreateTime(new Date()); |
| | | smsHistory.setPhone(phone); |
| | | smsHistory.setType(SMSHistory.TYPE_REMVOE); |
| | | smsHistoryMapper.insertSelective(smsHistory); |
| | | } |
| | | |
| | | @Override |
| | | public void sendExtractVCode(SystemEnum system, String phone) throws SMSException { |
| | | boolean limit = redisManager.isSmsFrequencyLimit(phone, SMSHistory.TYPE_EXTRACT); |
| | | if (limit) |
| | | throw new SMSException(1001, "请过60秒再试"); |
| | | String msgCode = StringUtil.getRandomCode(6); |
| | | String msg = Constant.smsConfig.getSmsExtract().replace("[签名]", system.getSmsAlias()) |
| | | .replace("[验证码]", msgCode); |
| | | // 发送短信 |
| | | TencentSMSUtil.sendSingleMsg(phone, msg); |
| | | // 缓存 |
| | | redisManager.sendSms(phone, SMSHistory.TYPE_EXTRACT); |
| | | redisManager.saveSMSVCode(phone, SMSHistory.TYPE_EXTRACT, msgCode); |
| | | } |
| | | |
| | | @Override |
| | | public void sendExtractSuccessMsg(SystemEnum system, String phone, BigDecimal money) throws SMSException { |
| | | String msg = Constant.smsConfig.getSmsExtractSuccess().replace("[签名]", system.getSmsAlias()) |
| | | .replace("[金额]", money.toString()); |
| | | // 发送短信 |
| | | TencentSMSUtil.sendSingleMsg(phone, msg); |
| | | } |
| | | |
| | | @Override |
| | | public void sendExtractFailMsg(SystemEnum system, String phone, BigDecimal money) throws SMSException { |
| | | String msg = Constant.smsConfig.getSmsExtractFail().replace("[签名]", system.getSmsAlias()) |
| | | .replace("[金额]", money.toString()); |
| | | // 发送短信 |
| | | TencentSMSUtil.sendSingleMsg(phone, msg); |
| | | } |
| | | |
| | | } |