package com.yeshi.fanli.service.impl.user; import java.math.BigDecimal; 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); } @Override public void sendExtractSuccessMsg(String phone, BigDecimal money) throws SMSException { String msg = Constant.smsConfig.getSmsExtractSuccess().replace("[签名]", Constant.smsConfig.getSmsSign()) .replace("[金额]", money.toString()); // 发送短信 TencentSMSUtil.sendSingleMsg(phone, msg); } @Override public void sendExtractFailMsg(String phone, BigDecimal money) throws SMSException { String msg = Constant.smsConfig.getSmsExtractFail().replace("[签名]", Constant.smsConfig.getSmsSign()) .replace("[金额]", money.toString()); // 发送短信 TencentSMSUtil.sendSingleMsg(phone, msg); } }