trick9191 7 سال پیش
والد
کامیت
bc5c77f520

+ 87 - 0
common/common-entity/src/main/java/com/yihu/wlyy/entity/wechat/vo/WechatMsgVo.java

@ -0,0 +1,87 @@
package com.yihu.wlyy.entity.wechat.vo;
/**
 * Created by Trick on 2018/4/12.
 */
public class WechatMsgVo {
    //微信:access_token
    private String accessToken;
    //模板消息类型
    private Integer type;
    //openid
    private String openid;
    //头部
    private String first;
    //微信模板关键字,用“,”分割
    private String keywords;
    //微信模板备注
    private String remark;
    //跳转链接地址
    private String url;
    //要推送的姓名
    private String name;
    public String getAccessToken() {
        return accessToken;
    }
    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getOpenid() {
        return openid;
    }
    public void setOpenid(String openid) {
        this.openid = openid;
    }
    public String getFirst() {
        return first;
    }
    public void setFirst(String first) {
        this.first = first;
    }
    public String getKeywords() {
        return keywords;
    }
    public void setKeywords(String keywords) {
        this.keywords = keywords;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

+ 111 - 825
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -5,6 +5,7 @@ import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.wechat.WechatPushLog;
import com.yihu.wlyy.entity.wechat.WechatTemplate;
import com.yihu.wlyy.entity.wechat.WechatTemplateData;
import com.yihu.wlyy.entity.wechat.vo.WechatMsgVo;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.wechat.WechatPushLogDao;
import com.yihu.wlyy.util.HttpUtil;
@ -39,164 +40,97 @@ public class PushMsgTask {
    private HttpUtil httpUtil;
    @Value("${server.server_url}")
    private String server_url;
    @Value("${pushMes.method}")
    private String putMesMethod;
    @Value("${pushMes.redis_prescription_title}")
    private String redisQueue;
    @Value("${putMesType.wechat}")
    private String putMesType;
    //模板id
    @Value("${wechat.message.template_sign_success}")
    private String template_sign_success;
    @Value("${wechat.message.template_sign_failed}")
    private String template_sign_failed;
    @Value("${wechat.message.template_consult_notice}")
    private String template_consult_notice;
    @Value("${wechat.message.template_health_notice}")
    private String template_health_notice;
    @Value("${wechat.message.template_termination}")
    private String template_termination;
    @Value("${wechat.message.template_appoint_success}")
    private String template_appoint_success;
    @Value("${wechat.message.template_appoint_failed}")
    private String template_appoint_failed;
    @Value("${wechat.message.template_expenses_remind}")
    private String template_expenses_remind;
    @Value("${wechat.message.template_healthy_article}")
    private String template_healthy_article;
    @Value("${wechat.message.template_doctor_change}")
    private String template_doctor_change;
    @Value("${wechat.message.template_doctor_survey}")
    private String template_doctor_survey;
    @Value("${wechat.message.template_doctor_audit}")
    private String template_doctor_audit;//审核结果通知
    @Value("${wechat.message.template_doctor_service}")
    private String template_doctor_service;//服务结果通知
    @Value("${wechat.message.template_physical_examination}")
    private String template_physical_examination;//体检提醒
    @Value("${wechat.message.doctor_invitel_template}")
    private String doctor_invitel_template;
    @Value("${wechat.message.template_deal_with}")
    private String template_deal_with;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private WechatPushLogDao wechatPushLogDao;
    @Autowired
    private WeiXinAccessTokenUtils accessTokenUtils;
    @Autowired
    private WeiXinOpenIdUtils weiXinOpenIdUtils;
    @Autowired
    private PatientDao patientDao;
    /**
     * 添加一条推送消息
     *
     * @param receiver 接收人
     * @param type     消息类型
     * @param title    消息标题
     * @param msg      消息内容
     * @param data     消息数据
     * 微信推送类型枚举
     * 新增模板在此添加枚举类型
     */
    public void put(String receiver, String type, String title, String msg, String data) {
        try {
            JSONObject json = new JSONObject();
            json.put("receiver", receiver);
            json.put("type", type);
            json.put("title", title);
            json.put("msg", msg);
            json.put("data", data);
            queue.put(json);
        } catch (Exception e) {
            logger.error("添加到消息队列失败!", e);
            e.printStackTrace();
    public enum pushType{
        consult("咨询回复",1),
        health_education("健康教育",2);
        private String name;
        private int value;
        pushType(String name, int value) {
            this.name = name;
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getValue() {
            return value;
        }
        public void setValue(int value) {
            this.value = value;
        }
    }
    /**
     * 添加微信消息
     *
     * 通过类型获取模板
     * 新增模板在此添加枚举类型与模板映射
     * @param type
     * @param data
     * @return
     */
    public void putWxMsg(String access_token, int type, String openid, String name, JSONObject data) {
    public String getWeChatTempId(Integer type){
        try {
            JSONObject json = new JSONObject();
            json.put("wx", true);
            json.put("access_token", access_token);
            json.put("type", type);
            json.put("openid", openid);
            json.put("name", name);
            json.put("data", data);
            //如果是内网推送到redis,如果是外网推送到内存队列
            if (putMesMethod.equals("1")) {
                JSONObject mes = new JSONObject();
                mes.put("title", putMesType);
                mes.put("value", json.toString());
                redisTemplate.opsForList().leftPush(redisQueue, mes.toString());
            } else {
                queue.put(json);
            if(pushType.consult.getValue()==type){
                return template_consult_notice;
            }else if(pushType.health_education.getValue()==type){
                return template_health_notice;
            }else {
                return "";
            }
        } catch (Exception e) {
            logger.error("添加到微信消息列队列失败!", e);
            e.printStackTrace();
        }catch (Exception e){
            return "";
        }
    }
    /**
     * 根据type及场景值添加微信消息
     * @param access_token
     * @param type
     * @param scene
     * @param openid
     * @param name
     * @param data  packageTemplate方法打包后的模板数据
     * 微信消息接口
     */
    public void putWxMsg(String access_token, int type,String scene, String openid, String name, JSONObject data) {
    public void putWxMsg(WechatMsgVo wx) {
        try {
            JSONObject json = new JSONObject();
            json.put("wx", true);
            json.put("access_token", access_token);
            json.put("type", type);
            json.put("scene", scene);
            json.put("openid", openid);
            json.put("name", name);
            json.put("data", data);
            //如果是内网推送到redis,如果是外网推送到内存队列
            if (putMesMethod.equals("1")) {
                JSONObject mes = new JSONObject();
                mes.put("title", putMesType);
                mes.put("value", json.toString());
                redisTemplate.opsForList().leftPush(redisQueue, mes.toString());
            } else {
                queue.put(json);
            }
            json.put("access_token", wx.getAccessToken());
            json.put("type", wx.getType());
            json.put("openid", wx.getOpenid());
            json.put("name", wx.getName());
            json.put("keywords",wx.getKeywords() );
            json.put("url",wx.getUrl());
            json.put("first",wx.getFirst());
            json.put("remark",wx.getRemark());
            queue.put(json);
        } catch (Exception e) {
            logger.error("添加到微信消息列队列失败!", e);
            e.printStackTrace();
        }
    }
    public void put(JSONArray array) {
        if (array == null || array.length() == 0) {
            return;
        }
        for (int i = 0; i < array.length(); i++) {
            JSONObject json = array.getJSONObject(i);
            if (json == null) {
                continue;
            }
            try {
                queue.put(json);
            } catch (Exception e) {
                logger.error("批量添加到消息队列失败!", e);
            }
        }
    }
    @PostConstruct
    private void run() {
@ -218,40 +152,12 @@ public class PushMsgTask {
                try {
                    // 如果queue为空,则当前线程会堵塞,直到有新数据加入
                    JSONObject json = queue.take();
                    boolean wx = json.has("wx") ? json.getBoolean("wx") : false;
                    if (wx) {
                        // 推送微信消息
                        JSONObject data = json.has("data") ? json.getJSONObject("data") : null;
                        if (data == null) {
                            continue;
                        }
                        // 消息类型:1:签约成功 2:签约失败 3:咨询回复通知 4:健康指导提醒
                        int type = json.has("type") ? json.getInt("type") : -1;
                        if (type == -1) {
                            continue;
                        }
                        String scene = json.has("scene") ? json.getString("scene") : "";
                        String access_token = json.has("access_token") ? json.getString("access_token") : "";
                        String openid = json.has("openid") ? json.getString("openid") : "";
                        String name = json.has("name") ? json.getString("name") : "";
//                        String name = data.has("name") ? json.getString("name") : "";
                        // 发送消息到微信端
                        sendWeixinMessage(access_token, type, openid, name, data);
//                        sendWeixinMessage(access_token, type,scene, openid, name, data);
                    } else {
                        // 推送平台消息
                        String receiver = json.has("receiver") ? json.getString("receiver") : "";
                        String type = json.has("type") ? json.getString("type") : "";
                        String title = json.has("title") ? json.getString("title") : "";
                        String msg = json.has("msg") ? json.getString("msg") : "";
                        String data = json.has("data") ? json.getString("data") : "";
                        boolean res = httpUtil.pushMessage(receiver, type, title, msg, data);
                        if (res) {
                            logger.info("消息推送成功!");
                        } else {
                            logger.error("消息推送失败!");
                        }
                    }
                    String accessToken = json.getString("access_token");
                    Integer type = json.getInt("type");
                    String name = json.getString("name");
                    String openid = json.getString("openid");
                    // 发送消息到微信端
                    sendWeixinMessage(accessToken, type, openid, name, json);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
@ -260,35 +166,7 @@ public class PushMsgTask {
        }
    }
//	private static final String signSuccess = "0D2vYZVRzFz15p9Y_pkZ1DKutDq8UOsks79FXUKS0tA";
//	private static final String signFalied = "My2VNERjJt4NXR4Ibh42pdrP6B6ka8rQxZeWinQh99s";
//	private static final String consultNotice = "0mF_vHj-ILx8EH8DwzmAi7LqzjqYiU9IrSRRmziTZyc";
//	private static final String healthNotice = "uv31ES_VCmq3tBYtyGmEQvIwU_zh9LDhF3bFpbIUt5g";
//	private static final String termination = "C0tdXtA_8k-Cy4a1EkzQuI877vqaqAtRkc-e_Gsd7sk";
//	private static final String appointmentSuccess = "FY3Pqa66tHIE1Fv-irbFBPOh5cYP71fkOzfZKH4S-Fo";
//	private static final String appointmentCancel = "tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s";
//	private static final String url = "http://www.xmtyw.cn/wlyy/wx/html/";
    /**
     * 发送微信模板消息
     *
     * @param type 1:签约成功  2:签约失败  3:咨询回复通知  4:健康指导提醒  5:解约申请通知  6:预约挂号成功通知  7:预约取消通知 8 缴费提醒 9 健康教育  10 签约医生变更(信息变更通知)
     *             18 产检提醒和产检就诊提醒 19:续方审核结果通知(0.不通过 1.通过 2。调整处方并通过) 20:服务结果通知 11.代办事项通知 21体检提醒
     * @param json 当type==1||type==2时:{"first":"消息主题",”doctor":"医生code","doctorName":"医生名","date":"签约时间","content":"签约内容","remark":"消息备注"}
     *             type==3时:{"first":"消息主题","consult":"医生咨询编号","consultcontent":"咨询内容","replycontent":"回复内容","doctorName":"医生名","remark":"消息备注"}
     *             type==4时:{"first":"消息主题","date":"指导时间","orgName":"指导机构","doctorName":"指导医生名","content":"指导内容","remark":"消息备注"}
     *             type==5时:{"first":"消息主题","date":"解约时间",”doctor":"医生code","doctorName":"医生名","orgName":"解约机构","remark":"消息备注"}
     *             type==6时:{"first":"消息主题","date":"预约时间",”id":"预约ID","doctorName":"医生名","orgName":"预约医院","deptName":"预约科室","remark":"消息备注"}
     *             type==7时:{"first":"消息主题","name":"就诊人名","date":"预约时间","doctorName":"医生名","orgName":"预约医院","remark":"消息备注"}
     *             type==9时:{"first":"消息主题","name":"患教标题","doctorName":"医生名","date":"发送时间","remark":"消息备注"}
     *             type==10时:{"first":"消息主题","name":"患教标题","doctorName":"医生名","date":"发送时间","remark":"消息备注"}
     *             <p>
     *             type==11时:{"first":"消息主题","name":"患教标题","doctorName":"医生名","date":"发送时间","remark":"消息备注"}
     *             type==19时:{"first":"消息主题","keyword1":"审核结果","keyword2":"审核医生","remark":"消息备注"}
     *             type==20时:{"first":"消息主题","keyword1":"服务项目","keyword2":"操作医生","keyword3":"服务时间","remark":"消息备注"}
     * @return
     */
    public boolean sendWeixinMessage(String access_token, int type, String openid, String name, JSONObject json) {
    public boolean sendWeixinMessage(String access_token, Integer type, String openid, String name, JSONObject json) {
        try {
            if (StringUtils.isEmpty(openid)) {
                logger.error("send wechat message failed:openid is empty");
@ -296,71 +174,15 @@ public class PushMsgTask {
            }
            if (access_token != null) {
                String token_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
                String params = typeMsg(type, openid, name, json);
                String params = typeMsg(type,openid,json);
                if (params == "") {
                    logger.error("参数错误!error");
                    return false;
                }
                WechatPushLog log = new WechatPushLog();
                log.setType(type);
                log.setCreateTime(new Date());
                log.setName(name);
                log.setOpenid(openid);
                if (!json.isNull("toUser")) {
                    log.setPatient(json.getString("toUser"));
                }
                log.setRequest(json.toString());
                String result = httpUtil.sendPost(token_url, params);
                JSONObject jsonResult = new JSONObject(result);
                log.setResponse(result);
                if (Integer.parseInt(jsonResult.get("errcode").toString()) == 0) {
                    logger.info("微信信息推送成功!success");
                    log.setStatus(1);
                    wechatPushLogDao.save(log);
                    return true;
                } else {
                    log.setStatus(0);
                    wechatPushLogDao.save(log);
                    logger.error("错误编码:" + jsonResult.get("errcode").toString() + "  错误提示:" + jsonResult.get("errmsg").toString());
                    return false;
                }
            } else {
                logger.error("获取access_token失败!");
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("微信信息推送失败!");
            return false;
        }
    }
    /**
     *
     * @param access_token
     * @param type
     * @param openid
     * @param name
     * @param json
     * @return
     */
    public boolean sendWeixinMessage(String access_token, int type,String scene, String openid, String name, JSONObject json) {
        try {
            if (StringUtils.isEmpty(openid)) {
                logger.error("send wechat message failed:openid is empty");
                return false;
            }
            if (access_token != null) {
                String token_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
                String params = json.toString();
                if (params == "") {
                    logger.error("参数错误!error");
                    return false;
                }
                //微信推送日志
                WechatPushLog log = new WechatPushLog();
                log.setType(type);
                log.setScene(scene);
                log.setCreateTime(new Date());
                log.setName(name);
                log.setOpenid(openid);
@ -399,12 +221,16 @@ public class PushMsgTask {
     * @param type
     * @return
     */
    public String typeMsg(int type, String openid, String name, JSONObject json) {
    public String typeMsg(Integer type, String openid, JSONObject json) {
        try {
            String url = server_url + "wx/html/";
            WechatTemplate temp = new WechatTemplate();
            temp.setTouser(openid);
            temp.setTopcolor("#000000");
            temp.setTemplate_id(getWeChatTempId(type));
            temp.setUrl(url +json.getString("url"));
            Map<String, WechatTemplateData> m = new HashMap<String, WechatTemplateData>();
            WechatTemplateData first = new WechatTemplateData();
            first.setColor("#000000");
@ -414,400 +240,20 @@ public class PushMsgTask {
            remark.setColor("#000000");
            remark.setValue(json.getString("remark"));
            m.put("remark", remark);
            String temp_id = "";
            if (type == 3) {
                if (json.has("isPublic") && json.getInt("isPublic") == 1) {
                    temp.setUrl(url + "jbsq/html/public-consult-detail.html?openid=" + openid + "&code=" + json.getString("consult") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                } else {
                    temp.setUrl(url + "yszx/html/consulting-doctor.html?openid=" + openid + "&consult=" + json.getString("consult") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                }
                temp_id = template_consult_notice;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("consultcontent"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("replycontent"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword3", keyword3);
            } else if (type == 1 || type == 2) {
                if (type == 1) {
                    temp_id = template_sign_success;
                } else {
                    temp_id = template_sign_failed;
                }
                String isRenew = "0";
                if (json.has("isRenew")) {
                    isRenew = "1";
                }
                String signState = "0";
                if (json.has("signState")) {
                    signState = (String) json.get("signState");
                }
                if (json.has("isRenew") && type == 2) {
                    //如果续签失败,不发送详情
                } else {
                    if (json.has("agent") && ("1".equals(json.getString("agent")))) {
//                        发送给授权代理人
                        temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&isRenew=" + isRenew + "&signState=" + signState + "&represented=" + json.getString("represented") + "&signCode=" + json.getString("signCode"));
                    } else if (json.has("agent") && ("0".equals(json.getString("agent")))) {
//                        发送给自己
                        temp.setUrl(url + "qygl/html/pay_flow.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&isRenew=" + isRenew + "&signState=" + signState + "&represented=" + json.getString("represented") + "&signCode=" + json.getString("signCode"));
                    }
                }
                temp.setTouser(openid);
                temp.setTopcolor("#000000");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(name);
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("date"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("content"));
                m.put("keyword4", keyword4);
            } else if (type == 4) {
                temp.setUrl(url + "yszd/html/guidance-detail.html?openid=" + openid + "&toUser=" + json.getString("toUser") + "&id=" + String.valueOf(json.get("id")) + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_health_notice;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("date"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("orgName"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(name);
                m.put("keyword4", keyword4);
                WechatTemplateData keyword5 = new WechatTemplateData();
                keyword5.setColor("#000000");
                keyword5.setValue(json.getString("content"));
                m.put("keyword5", keyword5);
            } else if (type == 5) {
                temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_termination;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(name);
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("orgName"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("keyword4", keyword4);
            } else if (type == 6) {
                temp.setUrl(url + "wdyy/html/detail-appointment.html?openid=" + openid + "&orgCode=" + json.get("orgCode") + "&id=" + json.getString("id") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_appoint_success;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("orgName"));
                m.put("hospitalname", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("deptName"));
                m.put("deptname", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("doctorname", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("planstarttime", keyword4);
            } else if (type == 7) {
                temp.setUrl(url + "wdyy/html/my-appointment.html?openid=" + openid + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_appoint_failed;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("name"));
                m.put("keynote1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("date"));
                m.put("keynote2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keynote3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("orgName"));
                m.put("keynote4", keyword4);
            } else if (type == 8) {
                //temp.setUrl(url + "wdyy/html/my-appointment.html?openid=" + openid + "&toUser=" + json.getString("toUser"));
                temp_id = template_expenses_remind;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("first", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue("以协议为准");
                m.put("keyword1", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue("家庭医生签约");
                m.put("keyword2", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("content"));
                m.put("remark", keyword4);
            } else if (type == 9) {
                temp.setUrl(url + "jkjy/html/article.html?openid=" + openid + "&dataId=" + json.getString("article") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_healthy_article;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("first"));
                m.put("first", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("title"));
                m.put("keyword1", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword2", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("keyword3", keyword4);
                WechatTemplateData keyword5 = new WechatTemplateData();
                keyword5.setColor("#000000");
                keyword5.setValue(json.getString("remark"));
                m.put("remark", keyword5);
            } else if (type == 10) {
                if (json.has("url")) {
                    temp.setUrl(url + json.getString("url"));
                } else {
                    temp.setUrl(url + "qygl/html/signing-doctors.html?openid=" + openid + "&state=" + openid + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                }
                temp.setTemplate_id(template_doctor_change);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
            } else if (type == 11) {
                if (json.has("url")) {
                    temp.setUrl(url + json.getString("url"));
                } else {
                    String xinurl = url + "survey/html/survey_info.html?openid=" + openid + "&state=" + openid + "&survey_id=" + json.getString("survey_id") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented");
//                temp.setUrl(url + "survey/html/survey_info.html?openid=" + openid + "&state=" + openid + "&survey_id=" + json.getString("survey_id") + "&toUser=" + json.getString("toUser") + "&toName=" + name);
                    temp.setUrl(xinurl);
                }
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                logger.info("type=====>openId " + openid);
            } else if (type == 12) {
                temp.setUrl(url + "jtgx/html/application-msg-list.html?openid=" + openid + "&member=" + json.getString("member") + "&toUser=" + json.getString("member") + "&toName=" + name);
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
//                WechatTemplateData  keyword3= new WechatTemplateData();
//                keyword3.setColor("#000000");
//                keyword3.setValue(json.getString("keyword3"));
//                m.put("keyword3", keyword3);
//
//                WechatTemplateData  keyword4= new WechatTemplateData();
//                keyword4.setColor("#000000");
//                keyword4.setValue(json.getString("keyword4"));
//                m.put("keyword4", keyword4);
            } else if (type == 13) {
                temp.setUrl(url + "jtgx/html/family.html?openid=" + openid);
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
//                WechatTemplateData  keyword3= new WechatTemplateData();
//                keyword3.setColor("#000000");
//                keyword3.setValue(json.getString("keyword3"));
//                m.put("keyword3", keyword3);
//
//                WechatTemplateData  keyword4= new WechatTemplateData();
//                keyword4.setColor("#000000");
//                keyword4.setValue(json.getString("keyword4"));
//                m.put("keyword4", keyword4);
            } else if (type == 14) {
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 15) {
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
            } else if (type == 16) {
                temp.setUrl(url + "xuqian/html/information.html?openid=" + openid + "&changeDoctor=" + 1 + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 17) {
                temp.setUrl(url + "yszx/html/manyidu.html?openid=" + openid + "&consult=" + json.getString("consult") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 18) {
                if (json.has("wlyygc")) {
                    temp.setUrl(json.getString("url"));
                }else {
                    temp.setUrl(url + json.getString("url"));
                }
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 19) {
                temp.setUrl(url + json.getString("url"));
                temp.setTemplate_id(template_doctor_audit);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 20) {
                temp.setUrl(url + json.getString("url"));
                temp.setTemplate_id(template_doctor_service);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
            }else if (type == 21) {
                if (json.has("url")) {
                    temp.setUrl(url + json.getString("url"));
                }
                temp.setTemplate_id(template_physical_examination);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("keyword4"));
                m.put("keyword4", keyword4);
                WechatTemplateData keyword5 = new WechatTemplateData();
                keyword5.setColor("#000000");
                keyword5.setValue(json.getString("keyword5"));
                m.put("keyword5", keyword5);
            String keywords =json.getString("keywords");
            String keyword[] = keywords.split(",");
            for(int i=0;i<keyword.length ;i++){
                WechatTemplateData wckw = new WechatTemplateData();
                wckw.setColor("#000000");
                wckw.setValue(keyword[i]);
                m.put("keyword"+(i+1), wckw);
            }
            temp.setData(m);
            ObjectMapper mapper = new ObjectMapper();
            String strJson = mapper.writeValueAsString(temp);
            //System.out.println("send message================>" + strJson);
            logger.error("send message================>" + strJson);
            return strJson;
        } catch (Exception e) {
@ -816,226 +262,66 @@ public class PushMsgTask {
        }
    }
    /**
     * 添加含发送代理人微信消息
     *
     * @param code 居民code
     * @param type 模板类型
     * @param json 模板消息体加上跳转URL
     * @return
     */
    @Deprecated
    public Boolean putAgentWxMsg(String code, int type, JSONObject json) {
        Boolean flag = false;
        try {
            String url = json.has("url") ? json.getString("url") : null;
            String first = json.has("first") ? json.getString("first") : "";
            Patient patient = patientDao.findByCode(code);
            String name = patient.getName();
            String openId = patient.getOpenid();
            if (StringUtils.isNotEmpty(openId) && !("undefined".equals(openId))) {
                putWxMsg(accessTokenUtils.getAccessToken(), type, openId, name, json);
                flag = true;
            } else {
                //发送代理人
                org.json.JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(code, openId);
                if (jsonArray != null && jsonArray.length() > 0) {
                    for (int i = 0; i < jsonArray.length(); i++) {
                        org.json.JSONObject j = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        org.json.JSONObject data = json;
                        data.remove("first");
                        data.remove("url");
                        data.put("url", url + "&represented=" + member.getCode());
                        data.put("first", weiXinOpenIdUtils.getTitleMes(patient, j.getInt("relation"), name) + first);
                        if (StringUtils.isNotEmpty(member.getOpenid()) && !("undefined".equals(member.getOpenid()))) {
                            putWxMsg(accessTokenUtils.getAccessToken(), type, member.getOpenid(), name, data);
                            flag = true;
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    /**
     * 添加含发送代理人微信消息
     *
     * @param code 发送对象code
     * @param type 模板类型
     * @param scene 模板场景值
     * @param wechatTemplate 微信消息模板推送内容
     * @return
     */
    public Boolean putAgentWxMsg(String code, int type,String scene, WechatTemplate wechatTemplate) {
        Boolean flag = false;
        try {
            Patient patient = patientDao.findByCode(code);
            String name = patient.getName();
            String openId = patient.getOpenid();
             ObjectMapper mapper = new ObjectMapper();
            String data = mapper.writeValueAsString(wechatTemplate);
            JSONObject wechatContent = new JSONObject(data);
            if (StringUtils.isNotEmpty(openId) && !("undefined".equals(openId))) {
                putWxMsg(accessTokenUtils.getAccessToken(), type, scene, openId, name, wechatContent);
                flag = true;
            } else {
                //发送代理人
                org.json.JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(code, openId);
                if (jsonArray != null && jsonArray.length() > 0) {
                    for (int i = 0; i < jsonArray.length(); i++) {
                        org.json.JSONObject j = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        Map<String, WechatTemplateData> contentData = wechatTemplate.getData();
                        WechatTemplateData firstData = contentData.get("first");
                        String url = wechatTemplate.getUrl();
                        String first = firstData.getValue();
                        WechatTemplateData firstKeyword = new WechatTemplateData();
                        firstKeyword.setColor("#000000");
                        firstKeyword.setValue(weiXinOpenIdUtils.getTitleMes(patient, j.getInt("relation"), name) + first);
                        contentData.put("first", firstKeyword);
                        //替换掉原toUser、toName的值
                        int start = url.indexOf("&toUser=");
                        int end = url.indexOf("&", start + 1);
                        String touser = url.substring(start, end);
                        url = url.replace(touser, "&toUser=" + member.getCode());
                        wechatTemplate.setTouser(member.getOpenid());
                        wechatTemplate.setUrl(url);
                        wechatTemplate.setData(contentData);
    @Deprecated
    public void put(String receiver, String type, String title, String msg, String data) {
        try {
                        String data1 = mapper.writeValueAsString(wechatTemplate);
                        JSONObject wechatContent1 = new JSONObject(data1);
                        if (StringUtils.isNotEmpty(member.getOpenid()) && !("undefined".equals(member.getOpenid()))) {
                            putWxMsg(accessTokenUtils.getAccessToken(), type, scene, openId, name, wechatContent1);
                            flag = true;
                        }
                    }
                }
            }
        } catch (Exception e) {
            logger.error("添加到消息队列失败!", e);
            e.printStackTrace();
        }
        return flag;
    }
    @Deprecated
    public void putWxMsg(String access_token, int type,String scene, String openid, String name, JSONObject data) {
        try {
    /**
     * 根据type 匹配对应模板ID
     *
     * @param type 见WechatPushLog说明
     * @return
     */
    private String getTemplateId(int type) throws Exception {
        String templateId = null;
        switch (type) {
            case 1:
                templateId = template_sign_success;
                break;
            case 2:
                templateId = template_sign_failed;
                break;
            case 3:
                templateId = template_consult_notice;
                break;
            case 4:
                templateId = template_health_notice;
                break;
            case 5:
                templateId = template_termination;
                break;
            case 6:
                templateId = template_appoint_success;
                break;
            case 7:
                templateId = template_appoint_failed;
                break;
            case 8:
                templateId = template_expenses_remind;
                break;
            case 9:
                templateId = template_healthy_article;
                break;
            case 10:
                templateId = template_doctor_change;
                break;
            case 11:
                templateId = template_doctor_survey;
                break;
            case 12:
                templateId = template_doctor_audit;
                break;
            case 13:
                templateId = template_doctor_service;
                break;
            case 14:
                templateId = template_physical_examination;
                break;
            case 15:
                templateId = doctor_invitel_template;
                break;
            case 16:
                templateId = template_deal_with;
                break;
        } catch (Exception e) {
            logger.error("添加到微信消息列队列失败!", e);
            e.printStackTrace();
        }
        return templateId;
    }
    /**
     * 构建微信模板数据 默认字体黑色
     *
     * @param type      模板类型见日志实体类
     * @param openid    发送对象openid
     * @param first    消息头
     * @param remark   备注
     * @param url   带参全路径跳转链接
     * @param keywords 消息体
     * @return
     */
    public WechatTemplate packageTemplate(int type,String openid, String first, String remark, String url, List<String> keywords) throws Exception{
        WechatTemplate temp = new WechatTemplate();
    @Deprecated
    public void putWxMsg(String access_token, int type, String openid, String name, JSONObject data) {
        try {
            String templateId = getTemplateId(type);
            Map<String, WechatTemplateData> m = new HashMap<String, WechatTemplateData>();
        } catch (Exception e) {
            logger.error("添加到微信消息列队列失败!", e);
            e.printStackTrace();
        }
    }
            WechatTemplateData firstKeyword = new WechatTemplateData();
            firstKeyword.setColor("#000000");
            firstKeyword.setValue(first);
            m.put("first", firstKeyword);
            WechatTemplateData remarkKeyword = new WechatTemplateData();
            remarkKeyword.setColor("#000000");
            remarkKeyword.setValue(remark);
            m.put("remark", remarkKeyword);
            for (int i=0;i<keywords.size();i++){
                WechatTemplateData tempKeyword = new WechatTemplateData();
                tempKeyword.setColor("#000000");
                tempKeyword.setValue(keywords.get(i));
                m.put("keyword"+(i+1), tempKeyword);
    @Deprecated
    public void put(JSONArray array) {
        if (array == null || array.length() == 0) {
            return;
        }
        for (int i = 0; i < array.length(); i++) {
            JSONObject json = array.getJSONObject(i);
            if (json == null) {
                continue;
            }
            try {
                queue.put(json);
            } catch (Exception e) {
                logger.error("批量添加到消息队列失败!", e);
            }
            temp.setTouser(openid);
            temp.setTemplate_id(templateId);
            temp.setTopcolor("#000000");
            temp.setUrl(url);
            temp.setData(m);
           /* ObjectMapper mapper = new ObjectMapper();
            String data = mapper.writeValueAsString(temp);
            result = new JSONObject(data);*/
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return temp;
    }
}