极光短信推送

package org.rabbit.consumer.jpush.sms;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.rabbit.common.delay.sms.Payload;
import org.rabbit.common.delay.sms.Sms;
import org.rabbit.consumer.spring.SpringContextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jsms.api.JSMSClient;
import cn.jsms.api.common.model.BatchSMSPayload;
import cn.jsms.api.common.model.BatchSMSResult;
import cn.jsms.api.common.model.RecipientPayload;
import cn.jsms.api.common.model.RecipientPayload.Builder;

public class SMSClient {
	private static final Logger logger = LoggerFactory.getLogger(SMSClient.class);
	static ExecutorService pool = Executors.newFixedThreadPool(20);
	private static String appKey;
	private static String masterSecret;

	private static JSMSClient client;

	static {
		JSMSProperties jsmsProperties = SpringContextUtils.getBean(JSMSProperties.class);
		appKey = jsmsProperties.getAppKey();
		masterSecret = jsmsProperties.getMasterSecret();
		client = new JSMSClient(masterSecret, appKey);
	}

	public static void send(final Sms sms) {
		pool.execute(new Runnable() {
			@Override
			public void run() {
				List<RecipientPayload> list = new ArrayList<RecipientPayload>();
				for (Payload payload : sms.getPayloads()) {
					Builder builder = new RecipientPayload.Builder().setMobile(payload.getNumber());
					for (Map.Entry<String, String> entry : payload.getParam().entrySet()) {
						builder.addTempPara(entry.getKey(), entry.getValue());
					}
					list.add(builder.build());
				}
				RecipientPayload[] recipientPayloads = new RecipientPayload[list.size()];
				BatchSMSPayload smsPayload = BatchSMSPayload.newBuilder().setTempId(sms.getTempId())
						.setRecipients(list.toArray(recipientPayloads)).build();
				try {
					BatchSMSResult result = client.sendBatchTemplateSMS(smsPayload);
					if (logger.isInfoEnabled()) {
						logger.info("Jpush sms push result :{}" + result);
					}
				} catch (APIConnectionException e) {
					if (logger.isErrorEnabled()) {
						logger.error("Connection error. Should retry later. ", e);
					}
				} catch (APIRequestException e) {
					if (logger.isErrorEnabled()) {
						logger.error("Error response from JPush server. Should review and fix it. ", e);
					}
				}
			}
		});
	}
}
package org.rabbit.common.delay.sms;

import java.io.Serializable;

import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

import org.service.core.entity.BaseEntity;

public class Sms extends BaseEntity implements Serializable {
	private static final long serialVersionUID = 1860751506802678210L;
	@NotNull(message = "{sms.payloads.not.null.valid}", groups = { Insert.class })
	@Valid
	private Payload[] payloads;
	@NotNull(message = "{sms.tempId.not.null.valid}", groups = { Insert.class })
	private Integer tempId;
	@NotNull(message = "{sms.time.not.null.valid}", groups = { Insert.class })
	@Min(value = 0, message = "{sms.time.min.valid}", groups = { Insert.class })
	private Long time;

	public Payload[] getPayloads() {
		return payloads;
	}

	public void setPayloads(Payload[] payloads) {
		this.payloads = payloads;
	}

	public Integer getTempId() {
		return tempId;
	}

	public void setTempId(Integer tempId) {
		this.tempId = tempId;
	}

	public Long getTime() {
		return time;
	}

	public void setTime(Long time) {
		this.time = time;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

}
package org.rabbit.consumer.jpush.sms;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class JSMSProperties {
	@Value("${jpush.sms.appKey}")
	private String appKey;
	@Value("${jpush.sms.masterSecret}")
	private String masterSecret;

	public String getAppKey() {
		return appKey;
	}

	public void setAppKey(String appKey) {
		this.appKey = appKey;
	}

	public String getMasterSecret() {
		return masterSecret;
	}

	public void setMasterSecret(String masterSecret) {
		this.masterSecret = masterSecret;
	}

}

猜你喜欢

转载自blog.csdn.net/sinat_21184471/article/details/81353377
今日推荐