public class DailyCountFilter implements SmsFilter {
private int ipDailyMaxSendCount;
private int mobileDailyMaxSendCount;
private SmsDao smsDao;
// 省略了部分无用代码
@Override
public boolean filter(SmsEntity smsEntity) {
if (smsDao.getMobileCount(smsEntity.getMobile()) >= mobileDailyMaxSendCount) {
return false;
}
if (smsDao.getIPCount(smsEntity.getIp()) >= ipDailyMaxSendCount) {
return false;
}
smsDao.saveEntity(smsEntity);
return true;
}
}
// 在上面代码的基础上, 再添加如下代码
public class DailyCountFilter implements SmsFilter {
private Scheduler sched;
@Override
public void init() throws SchedulerException {
smsDao.createTable(0); // 创建这个月的数据表
smsDao.createTable(1); // 创建下个月的数据表
SchedulerFactory sf = new StdSchedulerFactory();
sched = sf.getScheduler(); // 创建Quartz容器
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("smsDao", smsDao); // 创建运行任务时需要使用的数据map
// 创建job对象, 该对象执行实际的任务
JobDetail job = JobBuilder.newJob(CreateSmsTableJob.class)
.usingJobData(jobDataMap)
.withIdentity("create sms table job").build();
// 创建trigger对象, 该对象用来描述触发执行job的时间规则
// 比如这里的每月20号2点
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("create sms table trigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 2 20 * ?"))// 每月的20号2点
.build();
sched.scheduleJob(job, trigger); // 注册任务和触发规则
sched.start(); // 启动调度
}
@Override
public void destroy() {
try {
sched.shutdown();
}
catch (SchedulerException e) {}
}
public static class CreateSmsTableJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
SmsDao smsDao = (SmsDao) dataMap.get("smsDao"); // 获得传过来的smsDao对象
smsDao.createTable(1); // 创建下个月的数据表
smsDao.createTable(2); // 创建下下个月的数据表
}
}
}
public class SmsDao {
/**
* 创建新的日志表
*
* @param monthExcursion 偏移的月数
*/
public void createTable(int monthExcursion){
String sql = "CREATE TABLE IF NOT EXISTS "
+ getTableName(monthExcursion) + " LIKE sms";
// 执行sql语句
}
/**
* 保存SmsEntity实体对象
*/
public void saveEntity(SmsEntity smsEntity){
String sql = "INSERT INTO "
+ getNowTableName() + " (mobile, ip, type) VALUES(?, ?, ?)";
// 执行sql语句
}
/**
* 获得指定手机号今天请求发送短信的次数
*
* @param mobile 用户手机号
* @return 今天请求发送短信的次数
*/
public long getMobileCount(String mobile){
String sql = "SELECT count(id) FROM "
+ getNowTableName() + " WHERE mobile=? AND time >= CURDATE()";
// 执行sql语句, 返回查询结果
}
// 省略了getIPCount方法
/**
* 获得现在使用的表的名字
*/
private String getNowTableName() {
return getTableName(0);
}
private DateFormat dateFormat = new SimpleDateFormat("yyyy_MM");
/**
* 获得相对现在偏移monthExcursion月的表名
*
* @param monthExcursion 偏移的月数
* @return 对应月的表名
*/
private String getTableName(int monthExcursion) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, monthExcursion);
Date date = calendar.getTime();
return "sms_" + dateFormat.format(date);
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有