liubing 4 lat temu
rodzic
commit
add38e2bc5

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/message/SystemMessageDO.java

@ -57,6 +57,7 @@ public class SystemMessageDO extends UuidIdentityEntity {
     *是否删除
     */
    private String del;
    private String over;//是否操作结束 是否操作结束 1否,0是
    /**
     *已读时间
     */
@ -164,4 +165,12 @@ public class SystemMessageDO extends UuidIdentityEntity {
        this.createTime = createTime;
    }
    @Column(name = "over")
    public String getOver() {
        return over;
    }
    public void setOver(String over) {
        this.over = over;
    }
}

+ 11 - 0
svr/svr-door-serivce/src/main/java/com/yihu/jw/door/controller/doctor/DoctorDoorServiceAuditController.java

@ -167,4 +167,15 @@ public class DoctorDoorServiceAuditController extends BaseController {
            return error(-1, "获取失败!"+e.getMessage());
        }
    }
    @RequestMapping(value = "myMyTest",method = RequestMethod.POST)
    @ApiOperation("测试")
    public String myMyTest(){
        try {
            return write(200,"请求成功","data",doorServiceApplicationService.myMyTest());
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"请求失败"+e.getMessage());
        }
    }
}

+ 100 - 46
svr/svr-door-serivce/src/main/java/com/yihu/jw/door/service/DoorOrderService.java

@ -3,13 +3,16 @@ package com.yihu.jw.door.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.netflix.discovery.converters.Auto;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.door.dao.*;
import com.yihu.jw.door.util.MessageUtil;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.im.ConsultDo;
import com.yihu.jw.entity.base.im.ConsultTeamDo;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.door.*;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.im.dao.ConsultDao;
import com.yihu.jw.im.dao.ConsultTeamDao;
import com.yihu.jw.im.util.ImUtil;
@ -19,6 +22,7 @@ import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import jxl.Workbook;
import jxl.write.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.jsoup.Jsoup;
@ -97,6 +101,8 @@ public class DoorOrderService {
    @Autowired
    private ImUtil imUtill;
    @Autowired
    private MessageUtil messageUtil;
    @Autowired
    private ConsultDao consultDao;
    @Autowired
    private ConsultTeamDao consultTeamDao;
@ -109,6 +115,10 @@ public class DoorOrderService {
    private WlyyDoorServiceOrderDao wlyyDoorServiceOrderDao;
    @Autowired
    private WlyyDoorFeeDetailDao wlyyDoorFeeDetailDao;
    @Value("${wechat.id}")
    private String wxId;
    @Autowired
    private  BaseDoctorDao baseDoctorDao;
    /**
     * 顶部状态栏订单各分类总条数
@ -440,7 +450,7 @@ public class DoorOrderService {
        doorServiceOrderDao.save(doorServiceOrder);
//        this.messageDao.orderMessageDel(doorServiceOrder.getDoctor(),orderId);
        messageUtil.orderMessageDel(null,orderId,"407",doorServiceOrder.getDoctor());
        if(doorServiceOrder.getType() == null|| doorServiceOrder.getType() != 3) {
            //获取咨询
@ -476,32 +486,44 @@ public class DoorOrderService {
        }
        // 发送微信模板消息通知患者医生已接单
        BasePatientDO patient = patientInfoService.findById(doorServiceOrder.getPatient());
        BasePatientDO patient = patientInfoService.findById(doorServiceOrder.getPatient());//·
        // 获取微信模板
        ConsultDo consult = consultDao.queryByRelationCode(orderId);
        try{
/*            WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_process_feedback","smyyyjjd");
            String first = templateConfig.getFirst();
            first = first.replace("key1",(patient.getName()==null?"":patient.getName()));
            first = first.replace("key2", null != doorServiceOrder.getDoctorName() ? doorServiceOrder.getDoctorName() : "");
            String keyword1 = templateConfig.getKeyword1();
            org.json.JSONObject json = new org.json.JSONObject();
            json.put("first", first);
            json.put("keyword1", DateUtil.dateToStrShort(new Date()));
            json.put("keyword2", "上门服务已接单");
            json.put("url", templateConfig.getUrl());
            json.put("remark", templateConfig.getRemark());
            if(consult != null) {
                json.put("consult", consult.getCode());
        try {
            String patientName=patient.getName()==null?"":patient.getName();
            String doctorName=doorServiceOrder.getDoctorName()!=null? doorServiceOrder.getDoctorName() : "";
            String first = patientName+",您好!您的上门预约服务已由"+doctorName+"医生接单了";
            String contentMsg = "";
            String remark = "您可点击消息查看详情。";
            String url ="appoint_service/html/appoint-serviceDetail.html";
            if ("xm_xzzx_wx".equalsIgnoreCase(wxId)){
                String responseMsg =messageUtil.sendWXMes(wxId,patient.getId(),patient.getIdcard(),first,contentMsg,remark,url);
            }else if ("xm_zsyy_wx".equalsIgnoreCase(wxId)) {
                String responseMsg =messageUtil.ehospitalNotice(patient.getName(),patient.getIdcard(),patient.getMobile(),first,contentMsg,remark,url);
            }
            logger.info("上门服务已接单推送前");
            pushMsgTask.putWxMsg(tokenUtils.getAccessToken(), 30, patient.getOpenid(), patient.getName(), json);
            logger.info("上门服务已接单推送后");*/
        }catch (Exception e) {
        }catch (Exception e){
            logger.error(e.getMessage());
        }
        //  待接单消息设为已操作, 434 医生接单-- 王五接受了服务工单12345678
        List<SystemMessageDO> messages = messageUtil.findSystemMesage(orderId,"403,407");
        if (CollectionUtils.isEmpty(messages)){
            logger.error("当前工单没有医生待接单消息!orderId:" + orderId);
        }else {
            messages.forEach(message->{
                messageUtil.orderMessageDel(message.getId(),message.getRelationCode(),message.getType(),message.getReceiver());
                if (message.getType().equals("403") ) {
                    BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doorServiceOrder.getDispatcher());//·
                    String msg=doorServiceOrder.getDispatcherName() + "接受了服务工单"+ doorServiceOrder.getNumber();
                    messageUtil.saveSystemMessage(message.getId(),message.getRelationCode(),"医生接单","434",doorServiceOrder.getDoctor(),doorServiceOrder.getDoctorName(),
                            doorServiceOrder.getDispatcher(),doorServiceOrder.getDispatcherName(),baseDoctorDO.getIdcard(),msg,message.getOver());
                }
                else{
                    message.setOver("0");
                    messageUtil.saveSystemMessage(message);
                }
            });
        }
/*        List<Message> messages = messageDao.queryByRelationCodeAndTypeIn(orderId,new Integer[]{403,407});
        if(CollectionUtils.isEmpty(messages)){
            logger.error("当前工单没有医生待接单消息!orderId:" + orderId);
@ -537,8 +559,25 @@ public class DoorOrderService {
        }
        //给代预约医生发消息
        if (doorServiceOrder.getType() != null && doorServiceOrder.getType() == 3) {
            this.createMessage(doorServiceOrder.getId(), "system", doorServiceOrder.getProxyPatient(), 403, "代预约服务工单重新派单", doorServiceOrder.getPatientName() + "的代预约服务工单需重新派单,请您前往处理");
            BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doorServiceOrder.getProxyPatient());//·
            this.createMessage("代预约服务工单重新派单","403","system","system", doorServiceOrder.getId(), doorServiceOrder.getProxyPatient(),baseDoctorDO.getName() ,baseDoctorDO.getIdcard(), doorServiceOrder.getPatientName() + "的代预约服务工单需重新派单,请您前往处理");
        } else {
            messageUtil.orderMessageDel(null,orderId,"407",doorServiceOrder.getDoctor());
            if(StringUtils.isNotBlank(doorServiceOrder.getDispatcher())){
                BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doorServiceOrder.getDispatcher());//·
                this.createMessage("服务工单拒单待重新派单","404","system","system", doorServiceOrder.getId(), doorServiceOrder.getDispatcher(),baseDoctorDO.getName() , baseDoctorDO.getIdcard(),doorServiceOrder.getDoctorName() + "拒绝了" + doorServiceOrder.getProxyPatientName() + "的服务预约申请,请重新派单");
                //  调度员-派单-实时工单消息:435 医生拒单-- 王五拒绝了服务工单12345678
                List<SystemMessageDO> messages = messageUtil.findSystemMesage(orderId,"431,433");
                if (CollectionUtils.isEmpty(messages)) {
                    logger.error("当前工单没有医生待接单消息!orderId:" + orderId);
                } else {
                    SystemMessageDO message = messages.get(0);
                    messageUtil.orderMessageDel(message.getId(),message.getRelationCode(),message.getType(),message.getReceiver());
                    String msg=doorServiceOrder.getDoctorName() + "拒绝了服务工单" + doorServiceOrder.getNumber() + ", 请重新派单";
                    messageUtil.saveSystemMessage(message.getId(),message.getRelationCode(),"医生拒单","435",doorServiceOrder.getDoctor(),doorServiceOrder.getDoctorName(),
                            doorServiceOrder.getDispatcher(),doorServiceOrder.getDispatcherName(),baseDoctorDO.getIdcard(),msg,message.getOver());
                }
            }
/*            this.messageDao.orderMessageDel(doorServiceOrder.getDoctor(),orderId);
            if(StringUtils.isNotBlank(doorServiceOrder.getDispatcher())){
                // 派单消息
@ -571,28 +610,43 @@ public class DoorOrderService {
    /**
     * 添加【工单派单,转单】等系统消息
     * @param orderId
     * @param sender
     * @param receiver
     * @param Content
     */
    public void createMessage(String orderId,String sender,String receiver,int type,String title,String Content){
/*        Message message= new Message();
        message.setCzrq(new Date());
        message.setCreateTime(new Date());
        message.setRead(1);
        message.setState(1);
        message.setRelationCode(orderId);
        message.setOver("1");
        message.setReceiver(receiver);
        message.setSender(sender);
        message.setCode(getCode());
        message.setTitle(title);
        message.setContent(Content);
        //消息类型:401为资质申请审核
        message.setType(type);
        message.setDel("1");
        messageDao.save(message);*/
    public void createMessage(String title,String type,String sender,String senderName,String relationCode,String Receiver,String ReceiverName,String idCard,String msg) throws Exception {
        SystemMessageDO messageDO = new SystemMessageDO();
        messageDO.setTitle(title);
        messageDO.setType(type);
        messageDO.setSender(sender);
        messageDO.setSenderName(senderName);
        messageDO.setRelationCode(relationCode);
        messageDO.setReceiver(Receiver);
        messageDO.setReceiverName(ReceiverName);
        net.sf.json.JSONObject data = new net.sf.json.JSONObject();
        data.put("name", ReceiverName);
        data.put("age", IdCardUtil.getAgeForIdcard(idCard));
        data.put("gender", IdCardUtil.getSexForIdcard(idCard));
        data.put("msg", msg);
        messageDO.setData(msg);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = messageDO.getCreateTime();
        String dateTime=format.format(date);
        messageDO.setCreateTime(date);
        messageUtil.saveSystemMessage(messageDO);
///*        Message message= new Message();
//        message.setCzrq(new Date());
//        message.setCreateTime(new Date());
//        message.setRead(1);
//        message.setState(1);
//        message.setRelationCode(orderId);
//        message.setOver("1");
//        message.setReceiver(receiver);
//        message.setSender(sender);
//        message.setCode(getCode());
//        message.setTitle(title);
//        message.setContent(Content);
//        //消息类型:401为资质申请审核
//        message.setType(type);
//        message.setDel("1");
//        messageDao.save(message);*/
    }
    /**
@ -967,7 +1021,7 @@ public class DoorOrderService {
        BasePatientDO patient = patientInfoService.findById(one.getPatient());
        // 获取微信模板 smfwdwk-上门服务待付款
        ConsultDo consult = consultDao.queryByRelationCode(orderId);
        try {
        try {//·
/*            WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_process_feedback","fwyspf");
            String first = templateConfig.getFirst();
            first = first.replace("key1", DateUtil.dateToStr(new Date(), "yyyy-MM-dd HH:mm"));
@ -1032,7 +1086,7 @@ public class DoorOrderService {
        // 更新居民签约服务包服务项次数
        this.reduceServiceItemTimes(serverPackagePriceByOrderId(orderId), one.getPatient());
        // 发送微信消息通知--用户评价
        // 发送微信消息通知--用户评价//·
/*        BasePatientDO patient = patientInfoService.findById(one.getPatient());
        // 获取微信模板  fwyspf-服务医生评分
        ConsultDo consult = consultDao.queryByRelationCode(orderId);
@ -1377,7 +1431,7 @@ public class DoorOrderService {
        wlyyDoorServiceOrderService.orderWithPackageItemFeeAdd(new JSONObject(), jsonObjectParam, order);
        // 发送微信模板消息,通知居民服务项目已经变更(smyyyjjd-服务项目变更通知)
/*        BasePatientDO patient = patientInfoService.findById(order.getProxyPatient());
/*        BasePatientDO patient = patientInfoService.findById(order.getProxyPatient());//·
        ConsultDo consult = consultDao.queryByRelationCode(orderId);
        Integer status = 0;
        try{

+ 28 - 0
svr/svr-door-serivce/src/main/java/com/yihu/jw/door/service/DoorServiceApplicationService.java

@ -4,8 +4,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.door.dao.DoorServiceApplicationDao;
import com.yihu.jw.door.dao.DoorServiceVoucherDao;
import com.yihu.jw.door.util.MessageUtil;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
import com.yihu.jw.entity.door.WlyyDoorServiceApplicationDo;
import com.yihu.jw.entity.door.WlyyDoorServiceVoucherDo;
import com.yihu.jw.entity.hospital.family.WlyyPatientFamilyMemberDO;
@ -14,10 +16,12 @@ import com.yihu.jw.message.dao.MessageDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@ -60,6 +64,12 @@ public class DoorServiceApplicationService {
    private WechatTemplateConfigDao templateConfigDao;*/
    @Autowired
    private WlyyDoorServiceOrderService doorServiceOrderService;
    @Autowired
    private WxTemplateConfigDao wxTemplateConfigDao;
    @Autowired
    private BasePatientDao patientInfoService;
    @Autowired
    private MessageUtil messageUtil;
    @PostConstruct
    public void init() {
@ -635,5 +645,23 @@ public class DoorServiceApplicationService {
        return jsonObject;
    }
    public String myMyTest(){
//        String sql="select w.* from base.wx_template_config w where w.wechat_id='xm_ykyy_wx' and w.template_name='template_evaluate_notice' and w.scene='fwqjtx' and w.status=1";
//        List<WxTemplateConfigDO> config =  jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(WxTemplateConfigDO.class));
//        System.out.println("!");
//        //消息推送测试
//        String first = "王俊,您好!您的上门预约服务已由医生接单了";
//        String contentMsg = "";
//        String remark = "您可点击消息查看详情。";
//        String url ="https://www.baidu.com/s?ie=UTF-8&wd=%E7%99%BE%E5%BA%A6";
//
//        //模板消息
////        messageUtil.putTemplateWxMessage("97ed8a0a-4f07-4b85-ab02-b716c611a464","eee","zxxq","oULM4xCMTL9tuX_DjwEDdi6iaY0c",first,remark,url,"1231312312",DateUtil.getStringDate());
//
//        messageUtil.sendWXMes("xm_ykyy_wx","808080eb73e02e8f0173ebe51e1b007d","210503199507250313",first,contentMsg,remark,url);
        BasePatientDO patient = patientInfoService.findById("0000000067bab53a0167badd74f00004");
        return "ss";
    }
}

+ 411 - 0
svr/svr-door-serivce/src/main/java/com/yihu/jw/door/util/MessageUtil.java

@ -0,0 +1,411 @@
package com.yihu.jw.door.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import com.yihu.jw.entity.base.wx.WxAccessTokenDO;
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
import com.yihu.jw.entity.base.wx.WxWechatDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.exception.ApiException;
import com.yihu.jw.exception.code.ExceptionCode;
import com.yihu.jw.rm.base.WechatRequestMapping;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.jw.wechat.service.WxAccessTokenService;
import com.yihu.utils.network.HttpUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by liub on 2020/12/28.
 */
@Component
public class MessageUtil {
    private static Logger logger = LoggerFactory.getLogger(MessageUtil.class);
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    @Value("${hospital.url}")
    private String serverUrl;
    @Autowired
    private HttpClientUtil httpClientUtil;
    @Autowired
    private WeixinMessagePushUtils weixinMessagePushUtils;
    @Autowired
    private WxTemplateConfigDao wxTemplateConfigDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //发送微信模板消息
    public static String sendMessageUrl ="http://172.16.100.37:8090/hospitalPortal-sms/sms/sendMessage";
    /**
     *
     * @param wxId
     * @param patient 患者id
     * @param cardNo
     * @param first
     * @param noticeContent
     * @param remark
     * @param redirectUrl
     * @return
     */
    public String sendWXMes(String wxId,String patient,String cardNo,String first,String noticeContent,String remark,String redirectUrl){
        String msg="first:"+first+"contentMsg:"+noticeContent+"remark:"+remark;
        logger.info("发送的信息="+msg);
        JSONObject params = new JSONObject();
        params.put("transType","sms.hospital.notice");
        params.put("merchId","3501000014");
        JSONObject p = new JSONObject();
        String openId = "";
        if(StringUtils.isNotBlank(patient)){
            String sql = "select * from base.base_patient_wechat where wechat_id='"+wxId+"'and patient_id='"+patient+"' ";
            List<BasePatientWechatDo> paientWechatDos = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BasePatientWechatDo.class));
            if(paientWechatDos!=null&&paientWechatDos.size()>0){
                openId = paientWechatDos.get(0).getOpenid();
                p.put("openId",openId);
            }
        }else {
            p.put("cardNo",cardNo);
        }
        p.put("first",first);
        p.put("noticeTime", DateUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
        p.put("noticeContent",noticeContent);
        if(StringUtils.isNotBlank(redirectUrl)){
            p.put("redirectUrl",redirectUrl);
        }
        p.put("remark",remark);
        params.put("param",p);
        logger.info("params :"+params.toString());
        if(StringUtils.isNotBlank(openId)||StringUtils.isNotBlank(cardNo)){
            String rs = HttpUtil.sendPost(sendMessageUrl,params.toJSONString());
            JSONObject rsJson = JSON.parseObject(rs);
            String resCode = rsJson.getString("respCode");
            if("000000".equals(resCode)){
                return "1";
            }
            return "0";
        }else {
            return "-1";
        }
    }
    public String ehospitalNotice(String userName, String idCard, String phone, String title, String content, String contentString,String url) {
        String msg="first:"+title+"contentMsg:"+content+"remark:"+contentString;
        logger.info("发送的信息="+msg);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("userName", userName);
        jsonObject.put("idCard", idCard);
        jsonObject.put("phone", phone);
        jsonObject.put("title", title);
        jsonObject.put("url", url);
        jsonObject.put("content", content);
        jsonObject.put("contentString", contentString);
        System.out.println(serverUrl);
        String responseMsg = httpClientUtil.sendPost(serverUrl + "/interface/ehospitalNoticePush.htm", jsonObject.toString());
        logger.info("ehospitalNoticePushResult:" + responseMsg);
        return responseMsg;
    }
    public void putTemplateWxMessage(String wechatId,String templateName,String scene,String openId,String first,String remark,String url,String ...keywords){
        WxAccessTokenDO wxAccessTokenDO = getWxAccessTokenById(wechatId);
        if (wxAccessTokenDO==null){
            return;
        }
        WxTemplateConfigDO newConfig = new WxTemplateConfigDO();
        String sql="select w.* from base.wx_template_config w where w.wechat_id='"+wechatId+"' and w.template_name='"+templateName+"' and w.scene='"+scene+"' and w.status=1";
        List<WxTemplateConfigDO> configList =  jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(WxTemplateConfigDO.class));
        WxTemplateConfigDO config =null;
        if (configList.size()>=0){
            config = configList.get(0);
        }
        BeanUtils.copyProperties(config, newConfig);
        if (StringUtils.isNoneBlank(url)){
            newConfig.setUrl(url);
        }
        if (StringUtils.isNoneBlank(remark)){
            newConfig.setRemark(remark);
        }
        newConfig.setFirst(first);
        int keyLength = keywords.length;
        if (keyLength>=1){
            newConfig.setKeyword1(keywords[0]);
        }
        if (keyLength>=2){
            newConfig.setKeyword1(keywords[1]);
        }
        if (keyLength>=3){
            newConfig.setKeyword1(keywords[2]);
        }
        if (keyLength>=4){
            newConfig.setKeyword1(keywords[3]);
        }
        if (keyLength>=5){
            newConfig.setKeyword1(keywords[4]);
        }
        if (keyLength>=6){
            newConfig.setKeyword1(keywords[5]);
        }
        if (keyLength>=7){
            newConfig.setKeyword1(keywords[6]);
        }
        //发起微信消息模板推送
        weixinMessagePushUtils.putWxMsg(wxAccessTokenDO.getAccessToken(), openId, newConfig);
    }
    public WxAccessTokenDO getWxAccessTokenById(String wechatId) {
        try {
            //根据wechatCode查找出appid和appSecret
            String sql ="select * from base.wx_wechat w where w.id = '"+wechatId+"' and w.status!=-1";
            List<WxWechatDO> wxWechatList = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(WxWechatDO.class));
            WxWechatDO wxWechat=null;
            if (wxWechatList.size()>0){
                wxWechat = wxWechatList.get(0);
            }
            sql="select * from base.wx_access_token w where w.wechat_id ='"+wechatId+"' order by w.add_timestamp desc ";
            List<WxAccessTokenDO> wxAccessTokens =  jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(WxAccessTokenDO.class));
            if(wxWechat==null){
                throw new ApiException(WechatRequestMapping.WxConfig.message_fail_wxWechat_is_no_exist, ExceptionCode.common_error_params_code);
            }
            if(wxAccessTokens!=null&&wxAccessTokens.size()>0){
                for (WxAccessTokenDO accessToken : wxAccessTokens) {
                    if ((System.currentTimeMillis() - accessToken.getAddTimestamp()) < (accessToken.getExpiresIn() * 500)) {
                        return accessToken;
                    } else {
                        sql="DELETE  from  base.wx_access_token where wechat_id='"+accessToken.getWechatId()+"' and access_token='"+accessToken.getAccessToken()+"'";
                        jdbcTemplate.execute(sql);
                        break;
                    }
                }
            }
            String token_url = "https://api.weixin.qq.com/cgi-bin/token";
            String appId="";
            String appSecret="";
            appId = wxWechat.getAppId();
            appSecret = wxWechat.getAppSecret();
            if (org.springframework.util.StringUtils.isEmpty(appId)){
                throw new ApiException(WechatRequestMapping.WxConfig.message_fail_appId_is_null, ExceptionCode.common_error_params_code);
            }
            if (org.springframework.util.StringUtils.isEmpty(appSecret)){
                throw new ApiException(WechatRequestMapping.WxConfig.message_fail_appSecret_is_null, ExceptionCode.common_error_params_code);
            }
            Map<String, Object> params = new HashMap<>();
            params.put("grant_type", "client_credential");
            params.put("appid", appId);
            params.put("secret", appSecret);
            String result = HttpUtils.doGet(token_url, params).getContent();
            logger.info("--------------wechat token return:"+result+"---------------");
            org.json.JSONObject json = new org.json.JSONObject(result);
            if (json.has("access_token")) {
                sql="INSERT INTO `base`.`wx_access_token` (`id`, `wechat_id`, `access_token`, `add_timestamp`, `expires_in`, `czrq`, `code`) \n" +
                        "VALUES ('?1', '?2', '?3', '?4', '?5', '?6', '?7') ";
                String token = json.get("access_token").toString();
                String expires_in = json.get("expires_in").toString();
                WxAccessTokenDO newaccessToken = new WxAccessTokenDO();
                newaccessToken.setAccessToken(token);
                newaccessToken.setExpiresIn(Long.parseLong(expires_in));
                newaccessToken.setAddTimestamp(System.currentTimeMillis());
                newaccessToken.setCzrq(new Date());
                newaccessToken.setCode(UUID.randomUUID().toString().replace("-",""));
                newaccessToken.setWechatId(wechatId);
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                sql.replace("?1",UUID.randomUUID().toString().replace("-",""));
                sql.replace("?2",newaccessToken.getWechatId());
                sql.replace("?3",newaccessToken.getAccessToken());
                sql.replace("?4",newaccessToken.getAddTimestamp()+"");
                sql.replace("?5",newaccessToken.getExpiresIn()+"");
                sql.replace("?6",format.format(newaccessToken.getCzrq()));
                sql.replace("?7",newaccessToken.getCode());
                jdbcTemplate.execute(sql);
                return newaccessToken;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     *
     */
    public SystemMessageDO saveSystemMessage(String messageId,String relationCode,String title,String type,String sender,String senderName,String receiver,String receiverName,String idCard,String msg,String over) {
        SystemMessageDO messageDO = new SystemMessageDO();
        if (StringUtils.isBlank(messageId)){
            messageDO.setId(UUID.randomUUID().toString().replace("-",""));
        }
        messageDO.setTitle(title);
        messageDO.setType(type);
        messageDO.setSender(sender);
        messageDO.setSenderName(senderName);
        messageDO.setRelationCode(relationCode);
        messageDO.setReceiver(receiver);
        messageDO.setReceiverName(receiverName);
        net.sf.json.JSONObject data = new net.sf.json.JSONObject();
        data.put("name", receiverName);
        data.put("age", IdCardUtil.getAgeForIdcard(idCard));
        try {
            data.put("gender", IdCardUtil.getSexForIdcard(idCard));
        } catch (Exception e) {
            e.printStackTrace();
        }
        data.put("msg", msg);
        messageDO.setData(data.toString());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = messageDO.getCreateTime();
        String dateTime=format.format(date);
        String sql="INSERT INTO `base`.`base_system_message` (`id`, `type`, `title`, `sender`, `sender_name`, `receiver`, `receiver_name`, `relation_code`, `data`, `is_read`, `del`, `create_time`,`over`) \n" +
                "VALUES ('?!', '?2', '?3', '?4', '?5', '?6', '?7', '?8', '?9', '0', '1', '?10')";
        messageDO.setCreateTime(date);
        sql.replace("?1",messageDO.getId());
        sql.replace("?2",messageDO.getType());
        sql.replace("?3",messageDO.getTitle());
        sql.replace("?4",messageDO.getSender());
        sql.replace("?5",messageDO.getSenderName());
        sql.replace("?6",messageDO.getReceiver());
        sql.replace("?7",messageDO.getReceiverName());
        sql.replace("?8",messageDO.getRelationCode());
        sql.replace("?9",messageDO.getData());
        sql.replace("?10",dateTime);
        sql.replace("?11",over);
        jdbcTemplate.execute(sql);
        return messageDO;
    }
    public SystemMessageDO saveSystemMessage(SystemMessageDO messageDO){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (StringUtils.isBlank(messageDO.getId())){
            messageDO.setId(UUID.randomUUID().toString().replace("-",""));
        }
        Date date = messageDO.getCreateTime();
        String dateTime=format.format(date);
        String sql="INSERT INTO `base`.`base_system_message` (`id`, `type`, `title`, `sender`, `sender_name`, `receiver`, `receiver_name`, `relation_code`, `data`, `is_read`, `del`, `create_time`,`over`) \n" +
                "VALUES ('?!', '?2', '?3', '?4', '?5', '?6', '?7', '?8', '?9', '0', '1', '?10','?11')";
        messageDO.setCreateTime(date);
        sql.replace("?1",messageDO.getId());
        sql.replace("?2",messageDO.getType());
        sql.replace("?3",messageDO.getTitle());
        sql.replace("?4",messageDO.getSender());
        sql.replace("?5",messageDO.getSenderName());
        sql.replace("?6",messageDO.getReceiver());
        sql.replace("?7",messageDO.getReceiverName());
        sql.replace("?8",messageDO.getRelationCode());
        sql.replace("?9",messageDO.getData());
        sql.replace("?10",dateTime);
        sql.replace("?11",messageDO.getOver());
        jdbcTemplate.execute(sql);
        return messageDO;
    }
//    public void updateMessageByList(String orderId,String typeCondition,String title) {
//        List<SystemMessageDO> messages = findSystemMesage(orderId, "403,407");
//        if (CollectionUtils.isEmpty(messages)) {
//            logger.error("当前工单没有医生待接单消息!orderId:" + orderId);
//        } else {
//            messages.forEach(message -> {
//                orderMessageDel(message.getId(), message.getRelationCode(), message.getType(), message.getReceiver());
//                if (message.getType().equals("403")) {
//                    message.setTitle("医生接单");
//                    message.setType(434 + "");
//                    message.setReceiver(doorServiceOrder.getDispatcher());
//                    message.setReceiverName(doorServiceOrder.getDispatcherName());
//                    message.setSender(doorServiceOrder.getDoctor());
//                    message.setSenderName(doorServiceOrder.getDoctorName());
//                    message.setCreateTime(new Date());
//                    JSONObject data = JSONObject.parseObject(message.getData());
//                    String msg = doorServiceOrder.getDispatcherName() + "接受了服务工单" + doorServiceOrder.getNumber();
//                    BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doorServiceOrder.getDispatcher());//·
//                    data.put("name", message.getReceiverName());
//                    data.put("age", IdCardUtil.getAgeForIdcard(baseDoctorDO.getIdcard()));
//                    try {
//                        data.put("gender", IdCardUtil.getSexForIdcard(baseDoctorDO.getIdcard()));
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                    data.put("msg", msg);
//                    message.setData(data.toJSONString());
//                }
////                else{
////                    message.setOver("0");
////                }
//                saveSystemMessage(message);
//
//            });
//        }
//    }
    public List<SystemMessageDO> findSystemMesage(String relationCode,String type){
        StringBuilder sql =new StringBuilder("select * from base.base_system_message where 1=1 ");
        if (StringUtils.isNoneBlank(relationCode)){
            sql.append(" and relation_code='"+relationCode+"' ");
        }
        if (StringUtils.isNoneBlank(type)){
            sql.append(" and type in ('").append(type.replace(",","','")).append("') ");
        }
        List<SystemMessageDO> list = jdbcTemplate.query(sql.toString(),new BeanPropertyRowMapper<>(SystemMessageDO.class));
        return list;
    }
    public void orderMessageDel(String id,String relationCode,String type,String receiver){
        StringBuilder sql = new StringBuilder(" DELETE  from  base.base_system_message where 1=1 ");
        int runStatus=0;
        if (StringUtils.isNoneBlank(id)){
            sql.append(" and id='"+id+"' ");
            runStatus=1;
        }
        if (StringUtils.isNoneBlank(relationCode)){
            sql.append(" and relation_code='"+relationCode+"' ");
            runStatus=1;
        }
        if (StringUtils.isNoneBlank(type)){
            sql.append(" and type='"+type+"' ");
            runStatus=1;
        }
        if (StringUtils.isNoneBlank(receiver)){
            sql.append(" and receiver='"+receiver+"' ");
            runStatus=1;
        }
        if (runStatus==1){
            jdbcTemplate.execute(sql.toString());
        }
    }
    public  void test(){
        String sql="select w.* from base.wx_template_config w where w.wechat_id='xm_ykyy_wx' and w.template_name='template_evaluate_notice' and w.scene='fwqjtx' and w.status=1";
        List<Map<String,Object>> config =  jdbcTemplate.queryForList(sql);
//        wxTemplateConfigDao.findByWechatIdAndTemplateNameAndSceneAndStatus("xm_ykyy_wx", "template_pay_notice_jz", "mzxxtx", 1)
        System.out.println("!");
    }
    public static void main(String[] args){
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println(format.format(new Date()));
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("1");
    }
}