极光推送


package com.jsecode.esb.web.action;

import java.util.ArrayList;
import java.util.List;

import com.jsecode.esb.model.mempo.PushMsg;
import com.jsecode.esb.model.protocol.jpush.PushResponse;

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jiguang.common.resp.ResponseWrapper;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;

public class JGPushMsg {

	private final static String APP_KEY;

	private final static String MASTER_SECRET;

	private static JPushClient jPushClient;

	static {
		APP_KEY = "d4d6faf05f6582f07bbc72ad";// jPushProp.get(APP_KEY);
		MASTER_SECRET = "08163a439cee5045c42bb797";// jPushProp.get(MASTER_SECRET);

		jPushClient = new JPushClient(MASTER_SECRET, APP_KEY, null, ClientConfig.getInstance());

	}

	/*
	 * public static void sentMessage(List<PushMsg> listMsg) { List<PushPayload>
	 * listPushPayLoad = toPushPayload(listMsg); try { for(PushPayload
	 * pushPayLoad : listPushPayLoad) { jPushClient.sendPush(pushPayLoad); } }
	 * catch (APIConnectionException e) { e.printStackTrace(); } catch
	 * (APIRequestException e) { e.printStackTrace(); } }
	 */
	public static List<PushResponse<PushResult>> sentMessage(List<PushMsg> listMsg) {
		List<PushResponse<PushResult>> listJPushResp = new ArrayList<PushResponse<PushResult>>();

		for (PushMsg pushMsg : listMsg) {

			listJPushResp.add(doSend(pushMsg));

			// 设置一秒发送一个,因为频率太高,会发送失败
			waiting(1000);
		}
		return listJPushResp;
	}

	public static void waiting(long millis) {
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	private static PushResponse<PushResult> doSend(PushMsg pushMsg) {
		PushResult pushResult = null;
		try {
			pushResult = jPushClient.sendPush(buildPushObject_all_alias_alert(pushMsg));
		} catch (APIRequestException e) {
			e.printStackTrace();
			ResponseWrapper wrapper = new ResponseWrapper();
			wrapper.responseCode = e.getErrorCode();
			wrapper.responseContent = e.getErrorMessage();
			pushResult = new PushResult();
			pushResult.setResponseWrapper(wrapper);
		} catch (Exception e) {
			e.printStackTrace();
			ResponseWrapper wrapper = new ResponseWrapper();
			wrapper.responseCode = 500;
			wrapper.responseContent = e.getMessage();
			pushResult = new PushResult();
			pushResult.setResponseWrapper(wrapper);
		}
		return new PushResponse<PushResult>(pushResult, pushMsg);
	}

	private static PushPayload buildPushObject_all_alias_alert(PushMsg pushMsg) {
		return PushPayload.newBuilder().setPlatform(Platform.all())
				.setAudience(Audience.alias(pushMsg.getAppusername()))
				.setNotification(Notification.alert(pushMsg.getMsgContent())).build();
	}

	public static void main(String[] args) {
		/*
		 * JGPushMsgConfig config = new JGPushMsgConfig();
		 * config.setAppKey("d4d6faf05f6582f07bbc72ad");
		 * config.setMasterSecret("08163a439cee5045c42bb797");
		 * config.setPlatform(Platform.all());
		 * 
		 * JGPushMsg msg = config.createJSPushMsg();
		 * 
		 * msg.setContent("内容"); msg.addReceivers(List); msg.addReceiver(xx)
		 * 
		 * msg.send();
		 * 
		 * if (JGPushMsg.sendToAllAndroid(list,"公务车", "hello",
		 * "this is a ios Devtest", "") == 1) { System.out.println("success"); }
		 */

		List<PushMsg> pushMsg = new ArrayList<PushMsg>();
		PushMsg pm = new PushMsg();
		pm.setMsgQueueId((long) 123);
		// pm.setAppusername("kk");
		pm.setAppusername("superuser");
		pm.setMsgContent("XXX");
		pushMsg.add(pm);
		JGPushMsg.sentMessage(pushMsg);

	}
}


package com.jsecode.esb.threadwork.thread;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import com.alibaba.fastjson.JSONObject;
import com.jsecode.esb.model.mempo.PushMsg;
import com.jsecode.esb.model.protocol.jpush.PushResponse;
import com.jsecode.esb.service.IMessageService;
import com.jsecode.esb.web.action.JGPushMsg;
import com.jsecode.platform.timer.WorkThread;
import com.jsecode.platform.util.FastJsonHelper;
import com.jsecode.platform.util.Util;

import cn.jpush.api.push.PushResult;

public class JpushTableRefreshThread extends WorkThread {
	
	@Resource(name = "messageService")
    private IMessageService messageService;
	
	
	public JpushTableRefreshThread(){
        this(60);
    }
    
    public JpushTableRefreshThread(int threadSleepSecond){
        super("消息数据刷新工作线程", threadSleepSecond);
    }

	@Override
	protected void working() throws Exception {
		// 获取所有未推送的消息
        List<PushMsg> receivers = messageService.searchAllUnpushedMsgReceivers();
        if(Util.isEmpty(receivers)) {
            return;
        }
        Date date = new Date();
        //List<MsgInfo> serviceMsgs = new ArrayList<MsgInfo>();
        List<PushMsg> pushedReceivers = new ArrayList<PushMsg>();
        int i = 0;
        for(PushMsg msg : receivers){
        	// 单次最多推送50条
            if(i == 50) {
                break;
            }
        	//设为已推送
            msg.setProcessed((short) 1);
            msg.setProcessedTime(date);

            //MsgInfo serviceMsg = new MsgInfo();
            String content;
            try{
                content = createContent(msg);
                msg.setMsgContent(content);
            }catch(Exception e){
                continue;
            }

            //serviceMsg.setMSG_CONTENT(content);
            //serviceMsgs.add(serviceMsg);
            pushedReceivers.add(msg);
            i++;
        }
        
        // 调用极光进行推送
        /*JPushClient jPushClient = new JPushClient();
        jPushClient.setAppKey("d4d6faf05f6582f07bbc72ad");
        jPushClient.setMasterSecret("08163a439cee5045c42bb797");
        jPushClient.setPlatform(Platform.all());*/
        
        
        //JGPushMsg.sentMessage(pushedReceivers);
        List<PushResponse<PushResult>> listJPushResp = JGPushMsg.sentMessage(pushedReceivers);
        // 推送成功后插入推送记录, 更新处理状态
        messageService.processAfterPushMessageFor(listJPushResp);
        
        
		
	}
	
	private String createContent(PushMsg msg) throws Exception{
        //MsgContent contentObj = new MsgContent();
		//contentObj.setContent(content);
        //return FastJsonHelper.toJSONString(contentObj);
		
        String content = getContent(msg.getMsgContent());
        
        return content;
    }
	
	private String getContent(String content) throws IOException{
        JSONObject json = FastJsonHelper.parseObject(content);
        JSONObject aps = json.getJSONObject("aps");
        return aps.getString("alert");
    }
	
	
    class MsgContent {
        private String content;
        private String sendTime;
        private String type;
        private String appcode;
        private String version;
        private String address;
        private String pushtype;
        private String msgflag;
        private String subtitle;
        private String suburl;
        private String priority;
        private String usertype;
        private String users;

        public String getContent(){
            return content;
        }

        public void setContent(String content){
            this.content = content;
        }

        public String getSendTime(){
            return sendTime;
        }

        public void setSendTime(String sendTime){
            this.sendTime = sendTime;
        }

        public String getType(){
            return type;
        }

        public void setType(String type){
            this.type = type;
        }

        public String getAppcode(){
            return appcode;
        }

        public void setAppcode(String appcode){
            this.appcode = appcode;
        }

        public String getVersion(){
            return version;
        }

        public void setVersion(String version){
            this.version = version;
        }

        public String getAddress(){
            return address;
        }

        public void setAddress(String address){
            this.address = address;
        }

        public String getPushtype(){
            return pushtype;
        }

        public void setPushtype(String pushtype){
            this.pushtype = pushtype;
        }

        public String getMsgflag(){
            return msgflag;
        }

        public void setMsgflag(String msgflag){
            this.msgflag = msgflag;
        }

        public String getSubtitle(){
            return subtitle;
        }

        public void setSubtitle(String subtitle){
            this.subtitle = subtitle;
        }

        public String getSuburl(){
            return suburl;
        }

        public void setSuburl(String suburl){
            this.suburl = suburl;
        }

        public String getPriority(){
            return priority;
        }

        public void setPriority(String priority){
            this.priority = priority;
        }

        public String getUsertype(){
            return usertype;
        }

        public void setUsertype(String usertype){
            this.usertype = usertype;
        }

        public String getUsers(){
            return users;
        }

        public void setUsers(String users){
            this.users = users;
        }
    }
	

}

void processAfterPushMessageFor(List<PushResponse<PushResult>> listResponse);

public void processAfterPushMessageFor(List<PushResponse<PushResult>> listResponse) {
        
        List<PushMsg> listPushMsg = new ArrayList<PushMsg>();
        // 推送成功后插入推送记录
        for(PushResponse<PushResult> response : listResponse){
            listPushMsg.add(response.getMsg());
            
            PushMsg msg = response.getMsg();
            
            MsgPushRecord record = new MsgPushRecord();
            if(Util.isNotEmpty(msg.getMsgQueueId())){
                record.setMsgQueueId(msg.getMsgQueueId());
            }
            if(Util.isNotEmpty(msg.getSubject())){
                record.setMsgSubject(msg.getSubject());
            }
            if(Util.isNotEmpty(msg.getMsgContent())){
                record.setMsgContent(msg.getMsgContent());
            }
            if(Util.isNotEmpty(msg.getMsgType())){
                record.setMsgType(msg.getMsgType());
            }
            if(Util.isNotEmpty(msg.getReceiverUserId())){
                record.setMsgReceiver(msg.getReceiverUserId());
            }
            if(Util.isNotEmpty(msg.getMsgCreateUserId())){
                record.setMsgCreateUserid(msg.getMsgCreateUserId());
            }
            if(Util.isNotEmpty(msg.getMsgCreateTime())){
                record.setMsgCreateTime(msg.getMsgCreateTime());
            }
            record.setMsgHasFile((short) 0);
            if(Util.isNotEmpty(msg.getProcessedTime())){
                record.setPushTime(msg.getProcessedTime());
            }
            record.setReturnCode(response.getResult().getResponseCode());
            record.setReturnMsg(response.getResult().getOriginalContent());
            record.setRepeatPushTimes(1);
            
            msgPushRecordDAO.save(record);
            
            if(Util.isNotEmpty(record.getPushId())){
                msg.setPushId(record.getPushId());
            }
            
        }
        
        // 推送成功后更新处理状态
        msgPushQueueDetailDAO.updateMsgProcessed(listPushMsg);
    }



public void updateMsgProcessed(List<PushMsg> receivers);

 

public void updateMsgProcessed(final List<PushMsg> receivers){
    final String sql = "update msg_push_queue_detail set processed = ?, processed_time = ?, push_id = ? where detail_id = ?";
    
    getHibernateTemplate().getSessionFactory().openSession().doWork(new Work(){
        @Override
        public void execute(Connection connection) throws SQLException{
            PreparedStatement statement = connection.prepareStatement(sql);
            for (PushMsg msg : receivers) {
                statement.setInt(1, msg.getProcessed());
                statement.setTimestamp(2, new Timestamp(msg.getProcessedTime().getTime()));
                statement.setLong(3, msg.getPushId());
                statement.setLong(4, msg.getDetailId());
                statement.addBatch();
            }
            statement.executeBatch();
        }
    });
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值