信鸽推送

来源:互联网 发布:幸运点灯笼 源码 编辑:程序博客网 时间:2024/04/27 14:04
package com.ucmed.nbpt.service.push;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONObject;

import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;

import com.tencent.xinge.Message;
import com.tencent.xinge.MessageIOS;
import com.tencent.xinge.TagTokenPair;
import com.tencent.xinge.XingeApp;
import com.ucmed.common.net.RequestMaker;
import com.ucmed.common.util.DateUtil;
import com.ucmed.nbpt.dataobject.push.PushMessage;
import com.ucmed.nbpt.dataobject.push.SetPush;
import com.ucmed.nbpt.model.UserSessionModel;
import com.ucmed.nbpt.service.UserSessionService;


public class PublicPushProvider {

    public static final Logger LOG = Logger.getLogger(PublicPushProvider.class);
    
    private RequestMaker pushRequestMaker;

    private PushMessageService pushMessageService;

    private SetPushService setPushService;

    private UserSessionService userSessionService;
    
    private XingeApp xinGeApp;
    
    
    private XingeApp xinGeAppIOS;
    
    /**
     * 是否测试:0 不是 1:是
     */
    private boolean isTest=true;
    
    public void setPushRequestMaker(RequestMaker pushRequestMaker) {
        this.pushRequestMaker = pushRequestMaker;
    }
    
    public void setIsTest(boolean isTest) {
        this.isTest = isTest;
    }
    
    public void setSetPushService(SetPushService setPushService) {
        this.setPushService = setPushService;
    }
    
    public void setPushMessageService(PushMessageService pushMessageService) {
        this.pushMessageService = pushMessageService;
    }

    public void setUserSessionService(UserSessionService userSessionService) {
        this.userSessionService = userSessionService;
    }

    public void setXinGeApp(XingeApp xinGeApp) {
        this.xinGeApp = xinGeApp;
    }
    
    public void setXinGeAppIOS(XingeApp xinGeAppIOS) {
        this.xinGeAppIOS = xinGeAppIOS;
    }

    /**
     * 推送消息
     *
     * @param model
     * @return
     */
    public void pushMsg(PushMessage model, String name, String barcode,
            String type) {
        SetPush push = setPushService.selectByNameAndbarcode(name, type,
                barcode);
        if (push != null) {
            try {
                JSONObject p = new JSONObject();
                p.put("soft_id", getSoftId(push.getDeviceType()));
                p.put("is_test", isTest ? "1" : "0");
                p.put("device", push.getDevice());
                p.put("alert", model.getContent());
                Map<String, String> msg = new HashMap<String, String>();
                msg.put("msg_type", model.getType());
                msg.put("target_id", model.getTargetId().toString());
                msg.put("date", DateUtil.formatDate6(model.getCreateTime()));
                if (model.getTmp1() != null)
                    msg.put("tmp1", model.getTmp1());
                if (model.getTmp2() != null)
                    msg.put("tmp2", model.getTmp2());
                if (model.getTmp3() != null)
                    msg.put("tmp3", model.getTmp3());
                if (model.getTmp4() != null)
                    msg.put("tmp4", model.getTmp4());
                p.put("message", msg);
                pushRequestMaker.requestActionParams(
                        "api.push.message.push", p);
            } catch (Exception e) {
                LOG.error("", e);
            }
        }
        pushMessageService.addPushMessage(model);
    }

    
    /**
     * 医院通安卓大众版56
     * @param userType
     * @return
     */
    private Object getSoftId(String userType) {
        String softId = null;
        if ("0".equals(userType)) {//0:Android大众
            softId = "56";//原来的推送softId是
        } else if ("1".equals(userType)) {
            softId = "14";
        } else if ("2".equals(userType)) {
            softId = "16";
        } else if ("3".equals(userType)) {//3:ios大众版
            softId = "47";
        } else if ("4".equals(userType)) {
            softId = "23";
        } else if ("5".equals(userType)) {
            
        }
        return softId;
    }

    /**
     * 医院通推送
     * @param model
     */
    public void pushMsgHealth(PushMessage model) {
        JSONObject obj = new JSONObject();
        //通过用户id 和 用户类型type  1医生2大众  查询出需要推送的用户
        List<UserSessionModel> pushList = userSessionService.getUserPush(
                model.getAcceptId(), model.getAcceptType());
        if (CollectionUtils.isNotEmpty(pushList)) {
            for (UserSessionModel push : pushList) {
                    try {
                        //通过设备号查询 该用户最后的session
                        UserSessionModel  session = userSessionService.getLastUserSession(push.getDevice());
                        //该设备号最后登录的用户是当前用户就推送
                        if(session.getUserId().longValue()==model.getAcceptId().longValue()){
                            JSONObject p = new JSONObject();
                            p.put("device", push.getDevice());
                            //p.put("title", "医院通");
                            p.put("sound", "default");
                            p.put("alert", model.getContent());
                            Map<String, String> msg = new HashMap<String, String>();
                            msg.put("msg_type", model.getType());
                            msg.put("target_id", model.getTargetId().toString());
                            msg.put("date",
                                    DateUtil.formatDate6(model.getCreateTime()));
                            if (model.getTmp1() != null)
                                msg.put("tmp1", model.getTmp1());
                            if (model.getTmp2() != null)
                                msg.put("tmp2", model.getTmp2());
                            if (model.getTmp3() != null)
                                msg.put("tmp3", model.getTmp3());
                                msg.put("tmp4", "医院通");
                                msg.put("sound", "default");
                            p.put("message", msg);
                             obj =  pushRequestMaker.requestActionParams(
                                    "api.push.message.push", p);
                            model.setRetInfo(obj.optString("return_code","-1"));
                        }
                    } catch (Exception e) {
                        obj.put("return_code", -1);
                        LOG.error("", e);
                    }
                }
            //推送流水
            pushMessageService.addPushMessage(model);
        }
    }
    
    /**
     * 信鸽推送
     * @param model
     */
    @SuppressWarnings("unchecked")
    public void pushXinGe(PushMessage model){
        JSONObject obj = new JSONObject();
        //通过用户id 和 用户类型type  1医生2大众  查询出需要推送的用户
        List<UserSessionModel> pushList = userSessionService.getUserPush(
                model.getAcceptId(), model.getAcceptType());
        if (CollectionUtils.isNotEmpty(pushList)) {
            for (UserSessionModel push : pushList) {
                    try {
                        //通过设备号查询 该用户最后的session
                        UserSessionModel  session = userSessionService.getLastUserSession(push.getDevice());
                        //该设备号最后登录的用户是当前用户就推送
                        if(session.getUserId().longValue()==model.getAcceptId().longValue()){
                            JSONObject p = new JSONObject();
                            p.put("alert", model.getContent());
                            Map<String, String> msg = new HashMap<String, String>();
                            msg.put("msg_type", model.getType());
                            msg.put("target_id", model.getTargetId().toString());
                            msg.put("date",
                                    DateUtil.formatDate6(model.getCreateTime()));
                            if (model.getTmp1() != null){
                                msg.put("tmp1", model.getTmp1());
                            }
                            if (model.getTmp2() != null){
                                msg.put("tmp2", model.getTmp2());
                            }
                            if (model.getTmp3() != null){
                                msg.put("tmp3", model.getTmp3());
                                msg.put("sound", "default");
                            }
                            if (model.getContent() != null){
                                msg.put("content", model.getContent());
                            }
                            p.put("message", msg);
//                            XingeApp xinge = new XingeApp(Constants.XINGE_ANDROID_PATIENT_ACCESSID,
//                                    Constants.XINGE_ANDROID_PATIENT_SECRETKEY);
                            
                            org.json.JSONObject ret = new org.json.JSONObject();
                            String deviceType = session.getDeviceType();
                            //设备号类型 0:Android大众,1:Android医生,2:ios医生版,3:ios大众版,4:win8大众版
                            if ("0".equals(deviceType)) {
                                //安卓Message
                                Message mess = new Message(); // $mess = new MessageIOS();
                                mess.setType(Message.TYPE_MESSAGE);
                                mess.setTitle(model.getTmp4());
                                mess.setContent(model.getContent());
                                mess.setCustom(JSONObject.fromObject(msg));
                                ret = xinGeApp.pushSingleAccount(0, push.getDevice(), mess);
                                model.setRetInfo(ret.optString("ret_code")+","+push.getDevice());
                            }else if ("3".equals(deviceType)) {
                                MessageIOS ios = new MessageIOS();
                                ios.setAlert(model.getTmp4());
                                ios.setBadge(1);
                                ios.setSound("beep.wav");
                                ios.setCustom(JSONObject.fromObject(msg));
                                
                                //为设备号设置Tag
                                List<TagTokenPair> pairs = new ArrayList<TagTokenPair>();
                                pairs.add(new TagTokenPair("tag1",push.getDevice()));
                                org.json.JSONObject retTag = xinGeAppIOS.BatchSetTag(pairs);
                                if(0 == retTag.optInt("ret_code")) {
                                    List<String> list = new ArrayList<String>();
                                    list.add("tag1");
                                    ret = xinGeAppIOS.pushTags(0, list, "OR", ios,2);
                                    org.json.JSONObject retDel = xinGeAppIOS.BatchDelTag(pairs);
                                    LOG.info("苹果推送成功删除tag! ret_code:"+retDel);
                                }
//                                ret = xinGeAppIOS.pushSingleAccount(0, push.getDevice(), ios, xinGeAppIOS.IOSENV_PROD);
                                model.setRetInfo(ret.optString("ret_code")+","+push.getDevice());
                            } else {
                                LOG.error("device_type 设备号类型传入有误!推送失败");
                                 model.setRetInfo("device_type 设备号类型传入有误!推送失败");
                            }
                        }
                    } catch (Exception e) {
                        obj.put("return_code", -1);
                        LOG.error("", e);
                    }
                }
            //推送流水
            pushMessageService.addPushMessage(model);
        }
    }
}

一些配置如图:
0 0
原创粉丝点击