Commit eef7ebb4200b5e0bc749db59b9fe9ff8ea90ef71
1 parent
4ffbbe003d
Exists in
master
文章推送优化2
Showing 4 changed files with 137 additions and 85 deletions
- talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ArticleController.java
- talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTask.java
- talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTaskData.java
- talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java
talkonlineweb/src/main/java/com/lyms/talkonlineweb/controller/ArticleController.java
View file @
eef7ebb
... | ... | @@ -393,7 +393,7 @@ |
393 | 393 | |
394 | 394 | /** |
395 | 395 | * 登录小程序后获取小程序关联公众号的OpenId |
396 | - * | |
396 | + * 同时检查是否关注了公众号 | |
397 | 397 | * @return |
398 | 398 | */ |
399 | 399 | @GetMapping("getGZOpenId") |
400 | 400 | |
... | ... | @@ -403,9 +403,13 @@ |
403 | 403 | if(StringUtil.isNotEmpty(patient.getCode())&&null!=patient.getId()){ |
404 | 404 | String openid = WeiXinUtil.getWxGzOpenId(patient.getCode()); |
405 | 405 | if(StringUtil.isNotEmpty(openid)){ |
406 | + patient.setGzopenid(openid); | |
406 | 407 | //更新到登录患者的gzopenid |
407 | - boolean b = lymsPatientService.updateById(patient); | |
408 | - if(b){ | |
408 | + lymsPatientService.updateById(patient); | |
409 | + //检查是否关注了公众号 | |
410 | + String subscribe = WeiXinUtil.getIsWxGZH(openid); | |
411 | + if(StringUtil.isNotEmpty(subscribe)){ | |
412 | + baseResponse.setObject(subscribe); | |
409 | 413 | baseResponse.setErrormsg("成功"); |
410 | 414 | return baseResponse; |
411 | 415 | } |
talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTask.java
View file @
eef7ebb
... | ... | @@ -52,107 +52,111 @@ |
52 | 52 | log.debug("开始给患者推送文章>>>>>>"); |
53 | 53 | //从LymsPushMessages记录表查询今天0点筛选出要推送的文章 |
54 | 54 | QueryWrapper<LymsPushMessages> queryWrapper = new QueryWrapper<>(); |
55 | - queryWrapper.apply("TO_DAYS(created_time) = TO_DAYS(NOW())"); | |
55 | + queryWrapper.apply("TO_DAYS(created_time) = TO_DAYS(NOW()) and state=0"); | |
56 | 56 | List<LymsPushMessages> lymsPushMessages=lymsPushMessagesService.list(queryWrapper); |
57 | 57 | for (LymsPushMessages lymsPushMessage : lymsPushMessages) { |
58 | - //推送的文章在LymsPushedart做记录。用于患者读取推送的文章 | |
59 | - LymsPushedart pushedart=new LymsPushedart(); | |
60 | - pushedart.setPid(lymsPushMessage.getPid()); | |
61 | - pushedart.setAid(lymsPushMessage.getAid()); | |
62 | - pushedart.setCreatedtime(new Date()); | |
63 | - pushedart.setIsread((byte) 0); | |
64 | - //PushedartId(如果null表示需要推送文章,否则需要推送短消息) | |
65 | - if(null!=lymsPushMessage.getPushedartId()){ | |
66 | - //获取token失败 | |
67 | - if(StringUtil.isEmpty(token)){ | |
68 | - //更新到LymsPushMessages记录 | |
69 | - lymsPushMessage.setState(2);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) | |
70 | - lymsPushMessage.setRemark("推送短消息"+(lymsPushMessage.getIsweixinOne()==1?"1":"2")+",获取token失败。。。"); | |
71 | - lymsPushMessage.setPushTime(new Date()); | |
72 | - lymsPushMessagesService.updateById(lymsPushMessage); | |
73 | - //更新到LymsPushedart记录 | |
74 | - if(lymsPushMessage.getIsweixinOne()==1){ | |
75 | - pushedart.setIsweixinone(2);//是否推送短消息1(0否,1是 2推送失败) | |
76 | - }else { | |
77 | - pushedart.setIsweixintwo(2);//是否推送短消息2(0否,1是 2推送失败) | |
78 | - } | |
79 | - lymsPushedartService.updateById(pushedart); | |
80 | - log.info("推送短消息"+(lymsPushMessage.getIsweixinOne()==1?"1":"2")+",获取token失败。。。"); | |
81 | - continue; | |
82 | - } | |
83 | - //公众号openId为空 | |
84 | - if(StringUtil.isEmpty(lymsPushMessage.getGzopenid())){ | |
85 | - //更新到LymsPushMessages记录 | |
86 | - lymsPushMessage.setState(2);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) | |
87 | - lymsPushMessage.setRemark(lymsPushMessage.getPname()+":公众号openId为空。。。"); | |
88 | - lymsPushMessage.setPushTime(new Date()); | |
89 | - lymsPushMessagesService.updateById(lymsPushMessage); | |
90 | - //更新到LymsPushedart记录 | |
91 | - if(lymsPushMessage.getIsweixinOne()==1){ | |
92 | - pushedart.setIsweixinone(2);//是否推送短消息1(0否,1是 2推送失败) | |
93 | - }else { | |
94 | - pushedart.setIsweixintwo(2);//是否推送短消息2(0否,1是 2推送失败) | |
95 | - } | |
96 | - lymsPushedartService.updateById(pushedart); | |
97 | - log.info(lymsPushMessage.getPname()+":公众号openId为空。。。"); | |
98 | - continue; | |
99 | - } | |
100 | - //LymsPushedart的主键id赋值,表示修改。找到以前的推送记录,修改短文字的推送状态 | |
101 | - pushedart.setId(lymsPushMessage.getPushedartId()); | |
102 | - if(lymsPushMessage.getIsweixinOne()==1){ | |
103 | - //推送微信消息1 | |
104 | - Map<String,Object> map=new HashMap<>(); | |
105 | - map.put("first",new DataEntity(lymsPushMessage.getWeixTextOne(),"#173177")); | |
106 | - map.put("keyword1",new DataEntity(lymsPushMessage.getPname(),"#173177")); | |
107 | - map.put("keyword2",new DataEntity(lymsPushMessage.getHname(),"#173177")); | |
108 | - map.put("keyword3",new DataEntity(lymsPushMessage.getDname(),"#173177")); | |
109 | - map.put("remark",new DataEntity("预祝您早日康复","#173177")); | |
110 | - Integer code= WeiXinUtil.SendWeChatMsg(token,lymsPushMessage.getGzopenid(),template_id,map); | |
111 | - if(null==code||code!=0){ | |
58 | + try { | |
59 | + //推送的文章在LymsPushedart做记录。用于患者读取推送的文章 | |
60 | + LymsPushedart pushedart=new LymsPushedart(); | |
61 | + pushedart.setPid(lymsPushMessage.getPid()); | |
62 | + pushedart.setAid(lymsPushMessage.getAid()); | |
63 | + pushedart.setCreatedtime(new Date()); | |
64 | + pushedart.setIsread((byte) 0); | |
65 | + //PushedartId(如果null表示需要推送文章,否则需要推送短消息) | |
66 | + if(null!=lymsPushMessage.getPushedartId()){ | |
67 | + //LymsPushedart的主键id赋值,表示修改。找到以前的推送记录,修改短文字的推送状态 | |
68 | + pushedart.setId(lymsPushMessage.getPushedartId()); | |
69 | + //获取token失败 | |
70 | + if(StringUtil.isEmpty(token)){ | |
112 | 71 | //更新到LymsPushMessages记录 |
113 | 72 | lymsPushMessage.setState(2);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) |
114 | - lymsPushMessage.setRemark("推送短消息1失败。。。"+lymsPushMessage.getPname()+"; code:"+code); | |
73 | + lymsPushMessage.setRemark("推送短消息"+(lymsPushMessage.getIsweixinOne()==1?"1":"2")+",获取token失败!"); | |
115 | 74 | lymsPushMessage.setPushTime(new Date()); |
116 | 75 | lymsPushMessagesService.updateById(lymsPushMessage); |
117 | 76 | //更新到LymsPushedart记录 |
118 | - pushedart.setIsweixinone(2);//是否推送短消息1(0否,1是 2推送失败) | |
77 | + if(lymsPushMessage.getIsweixinOne()==1){ | |
78 | + pushedart.setIsweixinone(2);//是否推送短消息1(0否,1是 2推送失败) | |
79 | + }else { | |
80 | + pushedart.setIsweixintwo(2);//是否推送短消息2(0否,1是 2推送失败) | |
81 | + } | |
119 | 82 | lymsPushedartService.updateById(pushedart); |
120 | - log.info("推送短消息1失败。。。"+lymsPushMessage.getPname()+"; code:"+code); | |
83 | + log.info("推送短消息"+(lymsPushMessage.getIsweixinOne()==1?"1":"2")+",获取token失败!"); | |
121 | 84 | continue; |
122 | 85 | } |
123 | - //成功标记记录1 | |
124 | - pushedart.setIsweixinone(1);//是否推送短消息1(0否,1是 2推送失败) | |
125 | - }else if(lymsPushMessage.getIsweixinTwo()==1){ | |
126 | - //推送微信消息2 | |
127 | - Map<String,Object> map=new HashMap<>(); | |
128 | - map.put("first",new DataEntity(lymsPushMessage.getWeixTextTwo(),"#173177")); | |
129 | - map.put("keyword1",new DataEntity(lymsPushMessage.getPname(),"#173177")); | |
130 | - map.put("keyword2",new DataEntity(lymsPushMessage.getHname(),"#173177")); | |
131 | - map.put("keyword3",new DataEntity(lymsPushMessage.getDname(),"#173177")); | |
132 | - map.put("remark",new DataEntity("预祝您早日康复","#173177")); | |
133 | - Integer code= WeiXinUtil.SendWeChatMsg(token,lymsPushMessage.getGzopenid(),template_id,map); | |
134 | - if(null==code||code!=0){ | |
86 | + //公众号openId为空 | |
87 | + if(StringUtil.isEmpty(lymsPushMessage.getGzopenid())){ | |
135 | 88 | //更新到LymsPushMessages记录 |
136 | 89 | lymsPushMessage.setState(2);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) |
137 | - lymsPushMessage.setRemark("推送短消息2失败。。。"+lymsPushMessage.getPname()+"; code:"+code); | |
90 | + lymsPushMessage.setRemark(lymsPushMessage.getPname()+":公众号openId为空!"); | |
138 | 91 | lymsPushMessage.setPushTime(new Date()); |
139 | 92 | lymsPushMessagesService.updateById(lymsPushMessage); |
140 | 93 | //更新到LymsPushedart记录 |
141 | - pushedart.setIsweixintwo(2);//是否推送短消息2(0否,1是 2推送失败) | |
94 | + if(lymsPushMessage.getIsweixinOne()==1){ | |
95 | + pushedart.setIsweixinone(2);//是否推送短消息1(0否,1是 2推送失败) | |
96 | + }else { | |
97 | + pushedart.setIsweixintwo(2);//是否推送短消息2(0否,1是 2推送失败) | |
98 | + } | |
142 | 99 | lymsPushedartService.updateById(pushedart); |
143 | - log.info("推送短消息2失败。。。"+lymsPushMessage.getPname()+"; code:"+code); | |
100 | + log.info(lymsPushMessage.getPname()+":公众号openId为空!"); | |
144 | 101 | continue; |
145 | 102 | } |
146 | - //成功标记记录2 | |
147 | - pushedart.setIsweixintwo(1);//是否推送短消息1(0否,1是 2推送失败) | |
103 | + if(lymsPushMessage.getIsweixinOne()==1){ | |
104 | + //推送微信消息1 | |
105 | + Map<String,Object> map=new HashMap<>(); | |
106 | + map.put("first",new DataEntity(lymsPushMessage.getWeixTextOne(),"#173177")); | |
107 | + map.put("keyword1",new DataEntity(lymsPushMessage.getPname(),"#173177")); | |
108 | + map.put("keyword2",new DataEntity(lymsPushMessage.getHname(),"#173177")); | |
109 | + map.put("keyword3",new DataEntity(lymsPushMessage.getDname(),"#173177")); | |
110 | + map.put("remark",new DataEntity("预祝您早日康复","#173177")); | |
111 | + Integer code= WeiXinUtil.SendWeChatMsg(token,lymsPushMessage.getGzopenid(),template_id,map); | |
112 | + if(null==code||code!=0){ | |
113 | + //更新到LymsPushMessages记录 | |
114 | + lymsPushMessage.setState(2);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) | |
115 | + lymsPushMessage.setRemark("推送短消息1失败。。。"+lymsPushMessage.getPname()+"; code:"+code); | |
116 | + lymsPushMessage.setPushTime(new Date()); | |
117 | + lymsPushMessagesService.updateById(lymsPushMessage); | |
118 | + //更新到LymsPushedart记录 | |
119 | + pushedart.setIsweixinone(2);//是否推送短消息1(0否,1是 2推送失败) | |
120 | + lymsPushedartService.updateById(pushedart); | |
121 | + log.info("推送短消息1失败!"+lymsPushMessage.getPname()+"; code:"+code); | |
122 | + continue; | |
123 | + } | |
124 | + //成功标记记录1 | |
125 | + pushedart.setIsweixinone(1);//是否推送短消息1(0否,1是 2推送失败) | |
126 | + }else if(lymsPushMessage.getIsweixinTwo()==1){ | |
127 | + //推送微信消息2 | |
128 | + Map<String,Object> map=new HashMap<>(); | |
129 | + map.put("first",new DataEntity(lymsPushMessage.getWeixTextTwo(),"#173177")); | |
130 | + map.put("keyword1",new DataEntity(lymsPushMessage.getPname(),"#173177")); | |
131 | + map.put("keyword2",new DataEntity(lymsPushMessage.getHname(),"#173177")); | |
132 | + map.put("keyword3",new DataEntity(lymsPushMessage.getDname(),"#173177")); | |
133 | + map.put("remark",new DataEntity("预祝您早日康复","#173177")); | |
134 | + Integer code= WeiXinUtil.SendWeChatMsg(token,lymsPushMessage.getGzopenid(),template_id,map); | |
135 | + if(null==code||code!=0){ | |
136 | + //更新到LymsPushMessages记录 | |
137 | + lymsPushMessage.setState(2);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) | |
138 | + lymsPushMessage.setRemark("推送短消息2失败!"+lymsPushMessage.getPname()+"; code:"+code); | |
139 | + lymsPushMessage.setPushTime(new Date()); | |
140 | + lymsPushMessagesService.updateById(lymsPushMessage); | |
141 | + //更新到LymsPushedart记录 | |
142 | + pushedart.setIsweixintwo(2);//是否推送短消息2(0否,1是 2推送失败) | |
143 | + lymsPushedartService.updateById(pushedart); | |
144 | + log.info("推送短消息2失败!"+lymsPushMessage.getPname()+"; code:"+code); | |
145 | + continue; | |
146 | + } | |
147 | + //成功标记记录2 | |
148 | + pushedart.setIsweixintwo(1);//是否推送短消息1(0否,1是 2推送失败) | |
149 | + } | |
148 | 150 | } |
151 | + //插入or更新到LymsPushedart记录 | |
152 | + lymsPushedartService.saveOrUpdate(pushedart); | |
153 | + //更新到LymsPushMessages记录 | |
154 | + lymsPushMessage.setState(1);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) | |
155 | + lymsPushMessage.setPushTime(new Date()); | |
156 | + lymsPushMessagesService.updateById(lymsPushMessage); | |
157 | + } catch (Exception e) { | |
158 | + e.printStackTrace(); | |
149 | 159 | } |
150 | - //插入or更新到LymsPushedart记录 | |
151 | - lymsPushedartService.saveOrUpdate(pushedart); | |
152 | - //更新到LymsPushMessages记录 | |
153 | - lymsPushMessage.setState(1);//推送状态:0待推送(9点开始推送) 1成功 2失败。(在备注写失败原因) | |
154 | - lymsPushMessage.setPushTime(new Date()); | |
155 | - lymsPushMessagesService.updateById(lymsPushMessage); | |
156 | 160 | } |
157 | 161 | } |
158 | 162 | } |
talkonlineweb/src/main/java/com/lyms/talkonlineweb/task/PushArticleTaskData.java
View file @
eef7ebb
... | ... | @@ -16,6 +16,7 @@ |
16 | 16 | import org.springframework.beans.factory.annotation.Autowired; |
17 | 17 | import org.springframework.scheduling.annotation.Scheduled; |
18 | 18 | import org.springframework.stereotype.Component; |
19 | +import org.springframework.util.CollectionUtils; | |
19 | 20 | import org.springframework.util.unit.DataUnit; |
20 | 21 | |
21 | 22 | import java.util.*; |
... | ... | @@ -78,6 +79,11 @@ |
78 | 79 | } |
79 | 80 | } |
80 | 81 | //保存到要推送的表lyms_push_messages |
82 | + List<LymsPushMessages> list = lymsPushMessagesService.list(new QueryWrapper<>(lymsPushMessages)); | |
83 | + if(!CollectionUtils.isEmpty(list)){ | |
84 | + log.info("要推送的文章已存在不需要再次推送>>>>>>"); | |
85 | + continue; | |
86 | + } | |
81 | 87 | lymsPushMessagesService.save(lymsPushMessages); |
82 | 88 | } catch (BeansException e) { |
83 | 89 | e.printStackTrace(); |
talkonlineweb/src/main/java/com/lyms/talkonlineweb/util/WeiXinUtil.java
View file @
eef7ebb
... | ... | @@ -3,6 +3,7 @@ |
3 | 3 | import com.alibaba.fastjson.JSON; |
4 | 4 | import com.alibaba.fastjson.JSONObject; |
5 | 5 | import com.lyms.talkonlineweb.result.BaseResponse; |
6 | +import com.lyms.talkonlineweb.task.AccessTokenServlet; | |
6 | 7 | import lombok.extern.log4j.Log4j2; |
7 | 8 | import org.springframework.util.CollectionUtils; |
8 | 9 | import org.springframework.util.StringUtils; |
... | ... | @@ -97,7 +98,8 @@ |
97 | 98 | // 接口地址 |
98 | 99 | String reqUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + Constant.GZ_APP_ID + "&secret=" + Constant.GZ_SECRET + "&code=" + code + "&grant_type="+Constant.GZ_AUTH; |
99 | 100 | log.info(reqUrl); |
100 | - String result = HttpUtil.getData(reqUrl); | |
101 | +// String result = HttpUtil.getData(reqUrl); | |
102 | + String result = repeatDoGetPost(reqUrl,"GET",null); | |
101 | 103 | log.info("result :" + result); |
102 | 104 | if (StringUtils.isEmpty(result)) { |
103 | 105 | log.info("取微信用户的公众号openid : 请求返回null..." ); |
... | ... | @@ -106,6 +108,42 @@ |
106 | 108 | Map<String, Object> resultMap = JSON.parseObject(result, HashMap.class); |
107 | 109 | if (resultMap.containsKey(OPEN_ID_KEY)) { |
108 | 110 | return resultMap.get(OPEN_ID_KEY).toString(); |
111 | + } | |
112 | + } catch (Exception e) { | |
113 | + e.printStackTrace(); | |
114 | + } | |
115 | + return null; | |
116 | + } | |
117 | + | |
118 | + /** | |
119 | + * 检查用户是否关注了公众号 | |
120 | + * | |
121 | + * @param openId 登录时获取的code | |
122 | + * @return 微信方获取openid | |
123 | + */ | |
124 | + public static String getIsWxGZH(String openId) | |
125 | + { | |
126 | + if (StringUtils.isEmpty(openId)) { | |
127 | + log.info("openId:null"); | |
128 | + return null; | |
129 | + } | |
130 | + if (StringUtils.isEmpty(AccessTokenServlet.accessToken)) { | |
131 | + log.info("accessToken:null"); | |
132 | + return null; | |
133 | + } | |
134 | + try { | |
135 | + // 接口地址 | |
136 | + String reqUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + AccessTokenServlet.accessToken + "&openid=" + openId + "&lang=zh_CN"; | |
137 | + log.info(reqUrl); | |
138 | + String result = repeatDoGetPost(reqUrl,"GET",null); | |
139 | + log.info("result :" + result); | |
140 | + if (StringUtils.isEmpty(result)) { | |
141 | + log.info("检查用户是否关注了公众号请求 : 返回null..." ); | |
142 | + return null; | |
143 | + } | |
144 | + Map<String, Object> resultMap = JSON.parseObject(result, HashMap.class); | |
145 | + if (resultMap.containsKey("subscribe")) { | |
146 | + return resultMap.get("subscribe").toString(); | |
109 | 147 | } |
110 | 148 | } catch (Exception e) { |
111 | 149 | e.printStackTrace(); |