package com.jianwu.task;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Strings;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.jianwu.dao.SmsHttpInfoDao;
import com.jianwu.domain.SmsHttpInfo;
import com.jianwu.domain.SmsPre;
import com.jianwu.domain.SubmitReq;
import com.jianwu.manager.SmsMtManager;
import com.jianwu.manager.SmsPreManager;
import com.jianwu.service.result.SmsResult;
import com.jianwu.sms.dto.SendStatus;
import com.jianwu.util.Md5Utils;
import com.nodewind.member.sso.common.HttpUtils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* Created by tookbra on 2016/7/27.
*/
@Component
@EnableScheduling
public class SmsTask {
@Autowired
private SmsPreManager smsPreManager;
@Autowired
private SmsMtManager smsMtManager;
@Autowired
private SmsHttpInfoDao smsHttpInfoDao;
private static final ExecutorService bizThreadPool = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("smsBiz-%s").build()); private static final Logger logger = LoggerFactory.getLogger(SmsTask.class); // @PostConstruct
// public void sendSms() {
// bizThreadPool.submit(new Runnable() {
// @Override
// public void run() {
// while (true) {
// try {
// SmsPre smsPre = Constant.smsQueue.take();
// sendSms(smsPre);
// } catch (Exception e) {
// logger.error("发送号码异常:", e);
// e.printStackTrace();
// }
// }
// }
// });
// } //@Scheduled(cron = "0 0/1 * * * ?")
@Scheduled(fixedDelay = 1000*60*1)
void doTimeTask() {
logger.debug("定时短信扫描");
List<SmsPre> smsPreList = smsPreManager.findDestineSms();
if (!CollectionUtils.isEmpty(smsPreList)) {
logger.debug("当前定时短信"+smsPreList.size()+"条");
for (SmsPre smsPre : smsPreList) {
sendSms(smsPre);
}
} else {
logger.debug("当前没有定时短信");
}
} public SmsResult sendSms(SmsPre smsPre) {
SmsResult smsResult = new SmsResult();
List<String> phones = smsMtManager.getPhonesByPreId(smsPre.getPreId());
if (phones.isEmpty()) {
smsResult.setSuccess(false);
smsResult.setMsgGroup("");
smsResult.setRspcod("");
return smsResult;
}
logger.info("---smsPre.getCompanyId()---:" + smsPre.getCompanyId());
SmsHttpInfo smsHttpInfo = smsHttpInfoDao.findByCompanyId(smsPre.getCompanyId());
if (smsHttpInfo == null) {
return null;
}
logger.info("---smsHttpInfo---:" + smsHttpInfo.toString());
//发送下行短信请求
HttpUtils client = HttpUtils.getInstance();
SubmitReq submitReq = new SubmitReq();
submitReq.setEcName(smsHttpInfo.getEcName());
submitReq.setApId(smsHttpInfo.getApId());
submitReq.setSecretKey(smsHttpInfo.getSecretKey());
if (!Strings.isNullOrEmpty(smsPre.getSign())) {
submitReq.setContent(smsPre.getSmsContent().concat(smsPre.getSign()));
} else {
submitReq.setContent(smsPre.getSmsContent());
}
submitReq.setMobiles(StringUtils.join(phones, ","));
logger.info("---submitReq.getMobiles()---" + submitReq.getMobiles());
submitReq.setAddSerial(smsHttpInfo.getAddSerial());
submitReq.setSign(smsHttpInfo.getSign());
//以下stringBuffer顺序不能打乱
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(submitReq.getEcName());
stringBuffer.append(submitReq.getApId());
stringBuffer.append(submitReq.getSecretKey());
stringBuffer.append(submitReq.getMobiles());
stringBuffer.append(submitReq.getContent());
stringBuffer.append(submitReq.getSign());
stringBuffer.append(submitReq.getAddSerial());
submitReq.setMac(Md5Utils.digest(stringBuffer.toString()));
String reqText = JSON.toJSONString(submitReq);
logger.info("---reqText---:" + reqText);
//加密
String encode = Base64.encodeBase64String(reqText.getBytes());
logger.info("---encode---:" + encode);
String msg = client.sendHttpPost(smsHttpInfo.getSmsUrl(), encode, "application/json");
logger.info("---msg---:" + msg);
JSONObject json = JSON.parseObject(msg);
if (json.containsKey("rspcod")) {
smsResult.setRspcod(json.getString("rspcod"));
}
if (json.containsKey("msgGroup")) {
smsResult.setMsgGroup(json.getString("msgGroup"));
}
if (json.containsKey("success")) {
smsResult.setSuccess(json.getBoolean("success"));
}
logger.info(smsResult.getRspcod() + "," + smsResult.getMsgGroup() + "," + smsResult.isSuccess());
smsPre.setProcessResult(SendStatus.SENT.getValue());
smsPreManager.update(smsPre);
return smsResult;
}
} 、、、、、、、、、、、、、、、、、、、、、、、、、
package com.jianwu.sms.task;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.jianwu.sms.codec.cmpp.msg.sp.CmppSubmitRequestMessage;
import com.jianwu.sms.common.Constant;
import com.jianwu.sms.handler.SubmitMsgHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.annotation.PostConstruct;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger; /**
* Created by tookbra on 2016/7/27.
*/
@Component
public class SmsTask extends Task {
private static final ExecutorService bizThreadPool = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("smsBiz-%s").build()); private static final Logger logger = LoggerFactory.getLogger(SmsTask.class); static SpeedControl control = new SpeedControl(); @PostConstruct
public void sendSms() {
bizThreadPool.submit(new Runnable() {
@Override
public void run() {
while (true) {
try {
List<CmppSubmitRequestMessage> sendList = Constant.smsQueue.take();
for (CmppSubmitRequestMessage cmppSubmitRequestMessage : sendList) {
logger.info("发送号码:{}", cmppSubmitRequestMessage.getDestterminalId()[0]);
submitMsgHandler.sendSms(cmppSubmitRequestMessage);
control.control(cmppSubmitRequestMessage.getMsgContent());
}
control.clear();
} catch (Exception e) {
logger.error("发送号码异常:", e);
e.printStackTrace();
}
}
}
});
}
}

java注解类定时器的更多相关文章

  1. Java 工具类 —— 定时器(Timer/TimerTask)

    import java.util.Timer; import java.util.TimerTask; public class Timer { .... public void schedule(T ...

  2. 认识下java注解的实现原理

    1,什么是注解 注解也叫元数据,例如常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包.类.接口.字段.方法参数.局部变量等进行注 ...

  3. java自定义注解类

    一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...

  4. Java 注释类之常用元注解

    Java 注释类之常用元注解 自定义Java注释类时,我们使用方式如下:   @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD ...

  5. Java中自定义注解类,并加以运用

    在Java框架中,经常会使用注解,而且还可以省很多事,来了解下自定义注解. 注解是一种能被添加到java代码中的元数据,类.方法.变量.参数和包都可以用注解来修饰.注解对于它所修饰的代码并没有直接的影 ...

  6. Java注解

    Java注解其实是代码里的特殊标记,使用其他工具可以对其进行处理.注解是一种元数据,起到了描述.配置的作用,生成文档,所有的注解都隐式地扩展自java.lang.annotation.Annotati ...

  7. 19.Java 注解

    19.Java注解 1.Java内置注解----注解代码 @Deprecated                                    //不推荐使用的过时方法 @Deprecated ...

  8. Java注解入门

    注解的分类   按运行机制分:   源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...

  9. java注解(Annotation)解析

    注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ ...

随机推荐

  1. Lintcode---统计比给定整数小的数的个数

    给定一个整数数组 (下标由 0 到 n-1,其中 n 表示数组的规模,数值范围由 0 到 10000),以及一个 查询列表.对于每一个查询,将会给你一个整数,请你返回该数组中小于给定整数的元素的数量. ...

  2. git 清除历史

    http://stackoverflow.com/questions/9683279/make-the-current-commit-the-only-initial-commit-in-a-git- ...

  3. 0xffff0000颜色表示

    0xffff0000表红色,意思是: A:ff=255 R:ff=255 G:00=0 B:00=0 可如下将(255,0,0,255)转成0xffff0000并输出: inline DWORD RG ...

  4. 3.2 Zend_Db_Select

    10.4. Zend_Db_Select 你能够使用该对象和它的对应方法构建一个select查询语句,然后生成 字符串符用来传送给zend_db_adapter进行查询或者读取结果. 你也能够在你的查 ...

  5. HTTP Basic auth认证

    Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...

  6. makefile之if函数

    #if 函数的语法是: #$(if <condition>,<then-part> ) #或 #$(if <condition>,<then-part> ...

  7. 5.3日,7:20开始 阮一峰js的早课学习

    Infinity - Infinity // NaN Infinity / Infinity // NaN Infinity + Infinity // Infinity Infinity * Inf ...

  8. 谈一谈APP支付失败的处理

    如题今天要描述一个问题是:程序在确认订单时拉起第三方支付,支付失败了,引起的问题. 为了能清楚的描述问题,我把场景复现一下,大家肯定都有过APP购物的体会,大家一定知道有一个按钮叫“确认”或者“结算” ...

  9. Android studio sha1

    1.打开android studio 在最下面找到Terminal 如下图 2. 输入命令  C:  进入c盘 3. 输入命令   cd Users\Administrator   其中Adminis ...

  10. lua工具库penlight--07函数编程(一)

    函数编程 序列 Lua 迭代器 (最简单的形式) 是一个函数,可以多次调用返回一个或多个值.for in语句理解迭代器和循环,直到该函数将返回nil. Lua有标准的序列迭代器 (ipairs和pai ...