diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPushedart.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPushedart.java index 27132de..764dcf9 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPushedart.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/LymsPushedart.java @@ -51,6 +51,18 @@ public class LymsPushedart implements Serializable { @TableField(value = "readtime") private Date readtime; + /** + * 是否推送短消息1(0否,1是) + */ + @TableField(value = "isweixinone") + private Integer isweixinone; + + /** + * 是否推送短消息2(0否,1是) + */ + @TableField(value = "isweixintwo") + private Integer isweixintwo; + @TableField(exist = false) private static final long serialVersionUID = 1L; diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PatientInfo.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PatientInfo.java index cc116a6..2bad298 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PatientInfo.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PatientInfo.java @@ -137,6 +137,11 @@ public class PatientInfo implements Serializable { @TableField(value = "createdtime") private Date createdtime;//病例创建时间 + /** + * 用户的公众号id + */ + @TableField(value = "gzopenid") + private String gzopenid; diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PushArticle.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PushArticle.java index 9594798..29d5aca 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PushArticle.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/domain/PushArticle.java @@ -153,6 +153,18 @@ public class PushArticle implements Serializable { @TableField(value = "aid") private Integer aid; + /** + * 短文字1(公众号推送内容) + */ + @TableField(value = "weixTextOne") + private String weixTextOne; + + /** + * 短文字2(公众号推送内容) + */ + @TableField(value = "weixTextTwo") + private String weixTextTwo; + @TableField(exist = false) private static final long serialVersionUID = 1L; diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/AccessTokenServlet.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/AccessTokenServlet.java new file mode 100644 index 0000000..1ee9c3b --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/AccessTokenServlet.java @@ -0,0 +1,24 @@ +package com.lyms.talkonlineweb.task; + +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; + +@Component +public class AccessTokenServlet extends HttpServlet { + final String appId ="wxd3c36244d006cb90";//公众号appid + final String appSecret ="fc80b5dd03a581a088adcd2c65a7e10a";//公众号AppSecret + + /** + * 启动后开启线程每1小时59获取一次token,保证长期有效。(微信公众号规定2小时token失效,每天只能获取2000次。) + * @throws ServletException + */ + @PostConstruct + public void init() throws ServletException { + TokenThread.appId = appId; + TokenThread.appSecret = appSecret; + new Thread(new TokenThread()).start(); //启动进程 + } +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java index 02e7fb8..f9e51f1 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/HXTask.java @@ -30,7 +30,7 @@ public class HXTask { @Autowired private LymsDictService lymsDictService; - @Scheduled(initialDelay=10000, fixedRate=60000) +// @Scheduled(initialDelay=10000, fixedRate=60000) public void checkDoctorStat(){ Map param=new HashMap<>(); diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTask.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTask.java index 7433481..af68356 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTask.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTask.java @@ -1,17 +1,14 @@ package com.lyms.talkonlineweb.task; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.lyms.talkonlineweb.domain.*; import com.lyms.talkonlineweb.service.*; +import com.lyms.talkonlineweb.util.StringUtil; +import com.lyms.talkonlineweb.util.WeiXinUtil; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; - -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 推送文章任务 @@ -32,12 +29,12 @@ public class PushArticleTask { @Autowired private LymsDictService lymsDictService; + final String gzopenid ="oQEmP6uq2pUQ80NctiX3GnFxDMn8";//测试:公众号关注的微信openId + final String template_id ="";//测试:公众号模板id // @Scheduled(initialDelay=10000, fixedRate=30000) public void pushArtcle(){ - Map param=new HashMap<>(); - param.put("vtype",999); List dcLst=lymsDictService.listByMap(param); if (dcLst.size()>0 && dcLst.get(0).getCode()==1){ @@ -45,30 +42,43 @@ public class PushArticleTask { List pushArticle=pushArticleService.list(); for (PushArticle article : pushArticle) { LymsPushedart pushedart=new LymsPushedart(); - pushedart.setPid(article.getId()); - pushedart.setAid(article.getAid()); - pushedart.setCreatedtime(new Date()); - pushedart.setIsread((byte) 0); - lymsPushedartService.save(pushedart);//插入到提送记录 + pushedart.setPid(article.getId()); + pushedart.setAid(article.getAid()); + pushedart.setCreatedtime(new Date()); + pushedart.setIsread((byte) 0); + //查询推送文章后短文字推送状态 + QueryWrapper queryWrapper=new QueryWrapper<>(); + queryWrapper.eq("pid", article.getId()); + queryWrapper.eq("aid", article.getAid()); + LymsPushedart lymsPushedart = lymsPushedartService.getOne(queryWrapper); + if(null!=lymsPushedart){ + pushedart.setId(lymsPushedart.getId()); + if(lymsPushedart.getIsweixinone()==0){ + if(StringUtil.isEmpty(TokenThread.accessToken)){ + log.info("获取token失败。。。"+article.getDtname()+":短消息1推送失败"); + continue; + } + //推送微信消息1 + Map map=new HashMap<>(); + map.put("data", article.getWeixTextOne()); + WeiXinUtil.SendWeChatMsg(TokenThread.accessToken, gzopenid, template_id,map); + //成功标记记录1 + pushedart.setIsweixinone(1); + }else if (lymsPushedart.getIsweixintwo()==0){ + if(StringUtil.isEmpty(TokenThread.accessToken)){ + log.info("获取token失败。。。"+article.getDtname()+":短消息2推送失败"); + continue; + } + //推送微信消息2 + Map map=new HashMap<>(); + map.put("data", article.getWeixTextTwo()); + WeiXinUtil.SendWeChatMsg(TokenThread.accessToken, gzopenid, template_id,map); + //成功标记记录2 + pushedart.setIsweixintwo(1); + } + } + lymsPushedartService.saveOrUpdate(pushedart);//插入到提送记录 } -// List aLst=lymsArticleService.sltNeedPush();//获取待推送文章 -// -// aLst.forEach(e->{ -// PatientInfo patientInfo=new PatientInfo(); -// patientInfo.setIid(e.getIid());//针对特定疾病人群推送文章 -// List pLst=patientInfoService.list(Wrappers.query(patientInfo)); -// -// pLst.forEach(p->{ -// LymsPushedart pushedart=new LymsPushedart(); -// pushedart.setPid(p.getId()); -// pushedart.setAid(e.getAid()); -// pushedart.setCreatedtime(new Date()); -// pushedart.setIsread((byte) 0); -// lymsPushedartService.save(pushedart);//插入到提送记录 -// }); -// -// }); } - } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/TokenThread.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/TokenThread.java new file mode 100644 index 0000000..3d84294 --- /dev/null +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/TokenThread.java @@ -0,0 +1,54 @@ +package com.lyms.talkonlineweb.task; + +import com.alibaba.fastjson.JSONObject; +import com.lyms.talkonlineweb.util.HttpUtil; + +public class TokenThread implements Runnable{ + public static String appId = "wxd3c36244d006cb90"; + + public static String appSecret= "fc80b5dd03a581a088adcd2c65a7e10a"; + + public static String accessToken = null; + + public void run(){ + while (true){ + try{ + accessToken = this.getToken(); + if(null!=accessToken){ + System.out.println(accessToken); + Thread.sleep(7000 * 1); //获取到access_token 休眠7000秒 + + }else{ + Thread.sleep(1000*3); //获取的access_token为空 休眠3秒 + } + }catch(Exception e){ + System.out.println("发生异常:"+e.getMessage()); + e.printStackTrace(); + try{ + Thread.sleep(1000*10); //发生异常休眠1秒 + }catch (Exception e1){ + + } + } + } + } + + + /** + * 获取token + * 微信公众号 + * @return token + */ + public String getToken() { + // 授予形式 + String grant_type = "client_credential"; + // 接口地址拼接参数 + String getTokenApi = "https://api.weixin.qq.com/cgi-bin/token?grant_type=" + grant_type + "&appid=" + this.appId + + "&secret=" + this.appSecret; + String tokenJsonStr = HttpUtil.doGetPost(getTokenApi, "GET", null); + JSONObject tokenJson = JSONObject.parseObject(tokenJsonStr); + String token = tokenJson.get("access_token").toString(); + System.out.println("获取到的TOKEN : " + token); + return token; + } +} diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HttpUtil.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HttpUtil.java index 9d1e67c..a6ce300 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HttpUtil.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/HttpUtil.java @@ -1,6 +1,11 @@ package com.lyms.talkonlineweb.util; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Map; import lombok.extern.log4j.Log4j2; @@ -13,6 +18,7 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import com.alibaba.fastjson.JSON; /** * @ProjectName: talkonline * @Package: com.lyms.talkonlineweb.util @@ -89,4 +95,55 @@ public class HttpUtil { return result; } + /** + * 调用接口 post + * 微信公众号 + * @param apiPath + */ + public static String doGetPost(String apiPath, String type, Map paramMap){ + OutputStreamWriter out = null; + InputStream is = null; + String result = null; + try{ + URL url = new URL(apiPath);// 创建连接 + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setInstanceFollowRedirects(true); + connection.setRequestMethod(type) ; // 设置请求方式 + connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式 + connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式 + connection.connect(); + if(type.equals("POST")){ + out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8编码 + out.append(JSON.toJSONString(paramMap)); + out.flush(); + out.close(); + } + // 读取响应 + is = connection.getInputStream(); + int length = (int) connection.getContentLength();// 获取长度 + if (length != -1) { + byte[] data = new byte[length]; + byte[] temp = new byte[512]; + int readLen = 0; + int destPos = 0; + while ((readLen = is.read(temp)) > 0) { + System.arraycopy(temp, 0, data, destPos, readLen); + destPos += readLen; + } + result = new String(data, "UTF-8"); // utf-8编码 + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return result; + } } diff --git a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java index 3fd12eb..cc7a050 100644 --- a/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java +++ b/talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java @@ -1,5 +1,6 @@ package com.lyms.talkonlineweb.util; +import com.alibaba.fastjson.JSONObject; import lombok.extern.log4j.Log4j2; import java.util.HashMap; @@ -51,4 +52,23 @@ public class WeiXinUtil { return null; } + /*** + * 发送消息 + * + * @param token + * @param openid 关注公众号的微信id + * @param template_id 公众号消息模板id + * @param dataMap 推送内容消息主题显示相关map + */ + public static void SendWeChatMsg(String token,String openid,String template_id,Map dataMap) { + // 接口地址 + String sendMsgApi = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token; + //整体参数map + Map paramMap = new HashMap(); + paramMap.put("touser", openid); + paramMap.put("template_id", template_id); + paramMap.put("data", dataMap); + System.out.println(HttpUtil.doGetPost(sendMsgApi,"POST",paramMap)); + } + }