增加BI重试,新增宜良福泰医院推送对接

master
zdnpc 4 weeks ago
parent 2390eeefe5
commit 9ef78a512f
  1. 35
      logs/info.log
  2. 3
      logs/info/info-2025-02-19.log
  3. 3
      src/main/java/com/ynxbd/push/config/IniConfig.java
  4. 5
      src/main/java/com/ynxbd/push/controller/ApiController.java
  5. 29
      src/main/java/com/ynxbd/push/controller/BI/BiController.java
  6. 20
      src/main/java/com/ynxbd/push/controller/BusinessController.java
  7. 1
      src/main/java/com/ynxbd/push/controller/MiddlePlatformController.java
  8. 2
      src/main/java/com/ynxbd/push/controller/SendMessageController.java
  9. 2
      src/main/java/com/ynxbd/push/helper/DesEncryptHelper.java
  10. 2
      src/main/java/com/ynxbd/push/helper/HisResultFormat.java
  11. 34
      src/main/java/com/ynxbd/push/helper/MessageApiHelper.java
  12. 4
      src/main/java/com/ynxbd/push/helper/RequestHelper.java
  13. 3
      src/main/java/com/ynxbd/push/helper/TemplateJsonStringHelper.java
  14. 3
      src/main/java/com/ynxbd/push/helper/TemplateSelectHelper.java
  15. 54
      src/main/java/com/ynxbd/push/httpRequest/tencent/WeChatDataRequest.java
  16. 5
      src/main/java/com/ynxbd/push/httpRequest/xbd/his/HisRequest.java
  17. 2
      src/main/java/com/ynxbd/push/httpRequest/xbd/wx/WxCacheRequest.java
  18. 67
      src/main/java/com/ynxbd/push/quartz/pushJob/BI/BiPush.java
  19. 12
      src/main/java/com/ynxbd/push/quartz/scheduler/AppQuartzScheduler.java
  20. 7
      src/main/java/com/ynxbd/push/rabbit/receive/RabbitReceiver.java
  21. 2
      src/main/java/com/ynxbd/push/rabbit/send/RabbitSender.java
  22. 6
      src/main/resources/application.yml
  23. 2
      src/main/resources/logback.xml
  24. 34
      src/main/resources/weChat.ini

@ -1,3 +1,32 @@
[16:51:28.500][org.quartz.core.QuartzScheduler - shutdown - 666] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. [17:17:57.122][org.springframework.boot.StartupInfoLogger - logStarting - 55] Starting AppApplication v0.0.1 on LAPTOP-RQVAK2JK with PID 36224 (D:\ProgramCode\company\WxPush\wx_push\target\push-0.0.1.jar started by banality in D:\ProgramCode\company\WxPush\wx_push\target)
[16:51:28.505][org.quartz.core.QuartzScheduler - standby - 585] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. [17:17:57.133][org.springframework.boot.SpringApplication - logStartupProfileInfo - 651] No active profile set, falling back to default profiles: default
[16:51:28.506][org.quartz.core.QuartzScheduler - shutdown - 740] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. [17:18:00.535][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing ProtocolHandler ["http-nio-8123"]
[17:18:00.536][org.apache.juli.logging.DirectJDKLog - log - 173] Starting service [Tomcat]
[17:18:00.536][org.apache.juli.logging.DirectJDKLog - log - 173] Starting Servlet engine: [Apache Tomcat/9.0.36]
[17:18:00.668][org.apache.juli.logging.DirectJDKLog - log - 173] Initializing Spring embedded WebApplicationContext
[17:18:02.340][org.quartz.impl.StdSchedulerFactory - instantiate - 1220] Using default implementation for ThreadExecutor
[17:18:02.364][org.quartz.simpl.SimpleThreadPool - initialize - 268] Job execution threads will use class loader of thread: main
[17:18:02.403][org.quartz.core.SchedulerSignalerImpl - <init> - 61] Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[17:18:02.403][org.quartz.core.QuartzScheduler - <init> - 229] Quartz Scheduler v.2.3.2 created.
[17:18:02.405][org.quartz.simpl.RAMJobStore - initialize - 155] RAMJobStore initialized.
[17:18:02.407][org.quartz.core.QuartzScheduler - initialize - 294] Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
[17:18:02.407][org.quartz.impl.StdSchedulerFactory - instantiate - 1374] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[17:18:02.407][org.quartz.impl.StdSchedulerFactory - instantiate - 1378] Quartz scheduler version: 2.3.2
[17:18:03.550][org.apache.juli.logging.DirectJDKLog - log - 173] Starting ProtocolHandler ["http-nio-8123"]
[17:18:07.725][com.ynxbd.push.quartz.listener.AppStartQuartzJobListener - onApplicationEvent - 33] [<QUZRTZ DISPATCH>]Starting Quartz task ...
[17:18:07.740][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[17:18:08.630][com.ynxbd.push.config.IniConfig - <clinit> - 40] IP:192.168.12.119
[17:18:08.633][com.ynxbd.push.quartz.scheduler.AppQuartzScheduler - startWorkLoadJob - 172] [定时任务]:BI领导推送未设置时间,功能未开启
[17:18:08.633][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[17:18:08.634][com.ynxbd.push.quartz.scheduler.AppQuartzScheduler - startTodayRegJob - 154] [定时任务]:每日预约推送未设置时间,功能未开启,todayRegTimeMom-null,todayRegTimeNoon-null
[17:18:08.634][org.quartz.core.QuartzScheduler - start - 547] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[17:18:08.639][org.springframework.boot.StartupInfoLogger - logStarted - 61] Started AppApplication in 12.403 seconds (JVM running for 13.654)
[17:18:08.641][com.ynxbd.push.AppApplication - main - 22] 启动医院为:null
[17:18:08.655][com.ynxbd.push.AppApplication - main - 23] token_url路径:http://127.0.0.1:8080/wx/api/getWxAccessToken.do

@ -0,0 +1,3 @@
[16:51:28.500][org.quartz.core.QuartzScheduler - shutdown - 666] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down.
[16:51:28.505][org.quartz.core.QuartzScheduler - standby - 585] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
[16:51:28.506][org.quartz.core.QuartzScheduler - shutdown - 740] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete.

@ -32,6 +32,7 @@ public class IniConfig {
public static final String LEADER_TIME; public static final String LEADER_TIME;
public static final String TODAY_REG_TIME_MOM; public static final String TODAY_REG_TIME_MOM;
public static final String TODAY_REG_TIME_NOON; public static final String TODAY_REG_TIME_NOON;
public static final String NAME;
// 静态内部类保证Wini只实例化一次 // 静态内部类保证Wini只实例化一次
static { static {
@ -45,7 +46,7 @@ public class IniConfig {
LEADER_TIME = getInstance("leaderTime"); LEADER_TIME = getInstance("leaderTime");
TODAY_REG_TIME_MOM = getInstance("todayRegTimeMom"); TODAY_REG_TIME_MOM = getInstance("todayRegTimeMom");
TODAY_REG_TIME_NOON = getInstance("todayRegTimeNoon"); TODAY_REG_TIME_NOON = getInstance("todayRegTimeNoon");
NAME = getInstance("name");
} }
/** /**

@ -19,6 +19,11 @@ public class ApiController {
return "success"; return "success";
} }
/**
* 获取redis数据
* @param name 日期20250101
* @return
*/
@PostMapping("getRedis") @PostMapping("getRedis")
public JSONObject getRedis(String name) { public JSONObject getRedis(String name) {
log.info("name-{}",name); log.info("name-{}",name);

@ -1,11 +1,20 @@
package com.ynxbd.push.controller.BI; package com.ynxbd.push.controller.BI;
import com.ynxbd.push.entity.xbd.his.HIsWorkLoad;
import com.ynxbd.push.helper.HisResultFormat;
import com.ynxbd.push.helper.RedisHelper;
import com.ynxbd.push.httpRequest.xbd.his.HisRequest;
import com.ynxbd.push.quartz.pushJob.BI.BiPush; import com.ynxbd.push.quartz.pushJob.BI.BiPush;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* @author 李进才 * @author 李进才
* @ClassName BiController * @ClassName BiController
@ -19,10 +28,30 @@ public class BiController {
@GetMapping("workLoadPush") @GetMapping("workLoadPush")
public String workLoadPush(String openId) { public String workLoadPush(String openId) {
try { try {
// Date date = new Date();
// SimpleDateFormat formatter = new SimpleDateFormat();
// formatter.applyPattern("yyyyMMdd");
// String redisKeyDate = formatter.format(date);
// Thread.sleep(10000);
// List<HIsWorkLoad> targetList = new ArrayList<>();
// System.out.println("sssssssss----1");
// if (targetList.isEmpty()) {
// System.out.println("sssssssss----2");
// if (openId == null) {
// System.out.println("sssssssss----3");
// if (RedisHelper.getRedis().get(redisKeyDate + "_Count") == null || Integer.parseInt(RedisHelper.getRedis().get(redisKeyDate + "_Count")) < 2) {
// int count = RedisHelper.getRedis().get(redisKeyDate + "_Count") == null ? 0 : Integer.parseInt(RedisHelper.getRedis().get(redisKeyDate + "_Count")) + 1;
// RedisHelper.getRedis().set(redisKeyDate + "_Count", String.valueOf(count), 60 * 10);
// System.out.println("sssssssss----4");
// workLoadPush(null);
// }
// }
// }
BiPush.runJob(openId); BiPush.runJob(openId);
return "Success"; return "Success";
} }
catch (Exception e){ catch (Exception e){
e.printStackTrace();
log.error(e.toString()); log.error(e.toString());
return e.getMessage(); return e.getMessage();
} }

@ -8,6 +8,7 @@ import com.ynxbd.push.helper.BusinessHelper;
import com.ynxbd.push.rabbit.send.RabbitSender; import com.ynxbd.push.rabbit.send.RabbitSender;
import com.ynxbd.push.service.HisUniversalService; import com.ynxbd.push.service.HisUniversalService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -82,8 +83,8 @@ public class BusinessController {
@PostMapping("medicalRecord") @PostMapping("medicalRecord")
@ResponseBody @ResponseBody
public MessageSendResult medicalRecord(String organizeName, String patientId, String applyId) { public MessageSendResult medicalRecord(String organizeName, String patientId, String applyId, String content) {
log.info("进入接口-[病历复印] 病历复印可付费通知(医院通知)organizeName-{}, patientId-{} , applyId-{}", organizeName, patientId, applyId); log.info("进入接口-[病历复印] 病历复印可付费通知(医院通知)organizeName-{}, patientId-{} , applyId-{}, content-{}", organizeName, patientId, applyId, content);
MessageSendResult check = BusinessHelper.ParamsCheck(organizeName, patientId, null, null); MessageSendResult check = BusinessHelper.ParamsCheck(organizeName, patientId, null, null);
if (!check.getErrcode().equals("0")) { if (!check.getErrcode().equals("0")) {
return check; return check;
@ -93,6 +94,7 @@ public class BusinessController {
message.put("organizeName", organizeName); message.put("organizeName", organizeName);
message.put("patientId", patientId); message.put("patientId", patientId);
message.put("applyId", applyId); message.put("applyId", applyId);
message.put("content", content);
rabbitSender.TipSend(message); rabbitSender.TipSend(message);
return ResponseResult.JOIN_QUEUE.toMessResult(); return ResponseResult.JOIN_QUEUE.toMessResult();
} }
@ -125,8 +127,8 @@ public class BusinessController {
@PostMapping("cvms") @PostMapping("cvms")
@ResponseBody @ResponseBody
public MessageSendResult cvms(String content, String patientId, String url, String organizeName, String IdCard, String buttonName,String deptCode){ public MessageSendResult cvms(String content, String patientId, String url, String organizeName, String IdCard, String buttonName, String deptCode) {
log.info("进入接口-[危机值推送接口]-医院通知/工单提醒,content-{},patientId-{},url-{},organizeName-{},IdCard-{},buttonName-{},deptCode-{}", content, patientId, url, organizeName, IdCard,buttonName,deptCode); log.info("进入接口-[危机值推送接口]-医院通知/工单提醒,content-{},patientId-{},url-{},organizeName-{},IdCard-{},buttonName-{},deptCode-{}", content, patientId, url, organizeName, IdCard, buttonName, deptCode);
MessageSendResult check = BusinessHelper.ParamsCheck(organizeName, patientId, null, deptCode); MessageSendResult check = BusinessHelper.ParamsCheck(organizeName, patientId, null, deptCode);
if (!check.getErrcode().equals("0")) { if (!check.getErrcode().equals("0")) {
return check; return check;
@ -136,9 +138,9 @@ public class BusinessController {
return ResponseResult.PARAMETER_IS_NULL.toMessResult(); return ResponseResult.PARAMETER_IS_NULL.toMessResult();
} }
Map<String, String> message = new HashMap<>(); Map<String, String> message = new HashMap<>();
message.put("tip", IniConfig.TEMPLATE_VERSION?MessageTypeEnum.UNIVERSAL.CODE:MessageTypeEnum.CVMS.CODE); message.put("tip", IniConfig.TEMPLATE_VERSION ? MessageTypeEnum.UNIVERSAL.CODE : MessageTypeEnum.CVMS.CODE);
message.put("organizeName", organizeName); message.put("organizeName", organizeName);
message.put("buttonName",buttonName); message.put("buttonName", buttonName);
message.put("patientId", patientId); message.put("patientId", patientId);
message.put("deptCode", deptCode); message.put("deptCode", deptCode);
message.put("IdCard", IdCard); message.put("IdCard", IdCard);
@ -151,8 +153,8 @@ public class BusinessController {
@PostMapping("universal") @PostMapping("universal")
@ResponseBody @ResponseBody
public MessageSendResult universal(String content, String patientId, String url, String organizeName, String IdCard, String doctorCode,String buttonName) { public MessageSendResult universal(String content, String patientId, String url, String organizeName, String IdCard, String doctorCode, String buttonName) {
log.info("进入接口-[通用推送接口]-绑定通知,content-{},patientId-{},url-{},organizeName-{},IdCard-{},doctorCode-{},buttonName-{}", content, patientId, url, organizeName, IdCard, doctorCode,buttonName); log.info("进入接口-[通用推送接口]-绑定通知,content-{},patientId-{},url-{},organizeName-{},IdCard-{},doctorCode-{},buttonName-{}", content, patientId, url, organizeName, IdCard, doctorCode, buttonName);
MessageSendResult check = BusinessHelper.ParamsCheck(organizeName, patientId, null, doctorCode); MessageSendResult check = BusinessHelper.ParamsCheck(organizeName, patientId, null, doctorCode);
if (!check.getErrcode().equals("0")) { if (!check.getErrcode().equals("0")) {
return check; return check;
@ -164,7 +166,7 @@ public class BusinessController {
Map<String, String> message = new HashMap<>(); Map<String, String> message = new HashMap<>();
message.put("tip", MessageTypeEnum.UNIVERSAL.CODE); message.put("tip", MessageTypeEnum.UNIVERSAL.CODE);
message.put("organizeName", organizeName); message.put("organizeName", organizeName);
message.put("buttonName",buttonName); message.put("buttonName", buttonName);
message.put("patientId", patientId); message.put("patientId", patientId);
message.put("doctorCode", doctorCode); message.put("doctorCode", doctorCode);
message.put("IdCard", IdCard); message.put("IdCard", IdCard);

@ -45,7 +45,6 @@ public class MiddlePlatformController {
.pagePath(new StringBuilder().append("pages/index?id=").append(daoYiXunHospitalId) .pagePath(new StringBuilder().append("pages/index?id=").append(daoYiXunHospitalId)
.append("&poi=").append(deptCode).append("&appKey=").append(daoYiXunSecret).toString()) .append("&poi=").append(deptCode).append("&appKey=").append(daoYiXunSecret).toString())
.build(); .build();
return MessageApiHelper.templateMessageSend(sendMessageTemplate); return MessageApiHelper.templateMessageSend(sendMessageTemplate);
} }
} }

@ -130,7 +130,7 @@ public class SendMessageController {
} }
/** /**
* *
* *
* @param openId * @param openId
* @return * @return

@ -73,6 +73,8 @@ public class DesEncryptHelper {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(DesEncryptHelper.enCode("rui_mei", KEY)); System.out.println(DesEncryptHelper.enCode("rui_mei", KEY));
System.out.println(DesEncryptHelper.enCode("XBD-CRM", KEY));
System.out.println(DesEncryptHelper.deCode("3D48C80227DC4D7E8B30ED3C73F48031", KEY)); System.out.println(DesEncryptHelper.deCode("3D48C80227DC4D7E8B30ED3C73F48031", KEY));
System.out.println(DesEncryptHelper.deCode("14C8AD5516ED32E5", KEY));
} }
} }

@ -717,7 +717,7 @@ public class HisResultFormat {
JSONObject jsonResp = JSON.parseObject(respData); JSONObject jsonResp = JSON.parseObject(respData);
String code = jsonResp.getString("Code"); String code = jsonResp.getString("Code");
String message = jsonResp.getString("Msg"); String message = jsonResp.getString("Msg");
if ("200".equals(code) && "SUCCESS".equals(message)) { if ("200".equals(code)) {
String data = jsonResp.getString("Data"); String data = jsonResp.getString("Data");
return "".equals(data) ? null : data; return "".equals(data) ? null : data;
} }

@ -8,6 +8,7 @@ import com.ynxbd.push.entity.*;
import com.ynxbd.push.entity.enums.MsgParamEnum; import com.ynxbd.push.entity.enums.MsgParamEnum;
import com.ynxbd.push.entity.response.ResponseResult; import com.ynxbd.push.entity.response.ResponseResult;
import com.ynxbd.push.entity.tencent.*; import com.ynxbd.push.entity.tencent.*;
import com.ynxbd.push.entity.type.MessageTypeEnum;
import com.ynxbd.push.httpRequest.tencent.WeChatDataRequest; import com.ynxbd.push.httpRequest.tencent.WeChatDataRequest;
import com.ynxbd.push.httpRequest.xbd.wx.WxCacheRequest; import com.ynxbd.push.httpRequest.xbd.wx.WxCacheRequest;
import com.ynxbd.push.thread.ThreadConfig; import com.ynxbd.push.thread.ThreadConfig;
@ -65,7 +66,7 @@ public class MessageApiHelper {
* @return * @return
*/ */
public static MessageSendResult templateMessageSend(SendMessageTemplate template) { public static MessageSendResult templateMessageSend(SendMessageTemplate template) {
if(template.getCode()==null){ if (template.getCode() == null) {
template.setCode(""); template.setCode("");
} }
MessageSendResult messageSendResult = templateMessage(template); MessageSendResult messageSendResult = templateMessage(template);
@ -88,7 +89,7 @@ public class MessageApiHelper {
log.info("SendTenCentJson:{}", jsonMessage); log.info("SendTenCentJson:{}", jsonMessage);
return templateMessageSend(jsonMessage); return templateMessageSend(jsonMessage);
} catch (Exception e) { } catch (Exception e) {
log.error("消息推送出错:error-{}",e.toString()); log.error("消息推送出错:error-{}", e.toString());
return ResponseResult.MESSAGE_RESULT_ERROR_CODE.toMessResult(); return ResponseResult.MESSAGE_RESULT_ERROR_CODE.toMessResult();
} }
} }
@ -186,9 +187,10 @@ public class MessageApiHelper {
title = "医院通知"; title = "医院通知";
reportTemplateId = WeChatDataRequest.getTemplateId(title); reportTemplateId = WeChatDataRequest.getTemplateId(title);
} }
if(reportTemplateId==null){ if (reportTemplateId == null) {
log.error("获取模版Id失败,messageId-{},title-{}",messageId,title); log.error("获取模版Id失败,messageId-{},title-{}", messageId, title);
} }
MessageTypeEnum msgTypeEnum = MessageTypeEnum.toEnum(code);
if (!IniConfig.TEMPLATE_VERSION) { // 老版本默认参数用keyword关键字 if (!IniConfig.TEMPLATE_VERSION) { // 老版本默认参数用keyword关键字
code = ""; code = "";
} }
@ -230,13 +232,12 @@ public class MessageApiHelper {
.addParameter(patientId != null ? "patientId" : "cardNo", patientId != null ? patientId : idCard) .addParameter(patientId != null ? "patientId" : "cardNo", patientId != null ? patientId : idCard)
.addParameter("algorithm", "des") .addParameter("algorithm", "des")
.addParameter("isEncryptComma", "false") .addParameter("isEncryptComma", "false")
.addParameter("isLastBind", "true") .addParameter("isLastBind", msgTypeEnum != null && "MedicalRecord".equals(msgTypeEnum.CODE) ? "false" : "true")
.build(); .build();
WeChatResponse weChatResponse = LocalHttpClient.executeJsonResult(httpUriRequest, WeChatResponse.class); WeChatResponse weChatResponse = LocalHttpClient.executeJsonResult(httpUriRequest, WeChatResponse.class);
if (weChatResponse.getData() == null) { if (weChatResponse.getData() == null) {
return ResponseResult.NOT_FIND_DATA.toMessResult(); return ResponseResult.NOT_FIND_DATA.toMessResult();
} }
String openId = DesEncryptHelper.deCode(weChatResponse.getData().get(0));
SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder() SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder()
.template_id(reportTemplateId) .template_id(reportTemplateId)
.first(first) .first(first)
@ -248,9 +249,21 @@ public class MessageApiHelper {
.keyword4(keyword4) .keyword4(keyword4)
.keyword5(keyword5) .keyword5(keyword5)
.remark(remark) .remark(remark)
.openId(openId)
.url(url) .url(url)
.build(); .build();
if (msgTypeEnum != null && "MedicalRecord".equals(msgTypeEnum.CODE)) {
for (String enOpenId : weChatResponse.getData().get(0).split(",")) {
String openId = DesEncryptHelper.deCode(enOpenId);
sendMessageTemplate.setOpenId("");
sendMessageTemplate.setOpenId(openId);
MessageSendResult messageSendResult = templateMessageSend(sendMessageTemplate);
log.info("[{}]{}患者消息推送,推送结果代码-{},推送结果-{}", title, DesEncryptHelper.deCode(organizeName), messageSendResult.getErrcode(), messageSendResult.getErrmsg());
}
return ResponseResult.JOIN_QUEUE.toMessResult();
}
String openId = DesEncryptHelper.deCode(weChatResponse.getData().get(0));
sendMessageTemplate.setOpenId("");
sendMessageTemplate.setOpenId(openId);
MessageSendResult messageSendResult = templateMessageSend(sendMessageTemplate); MessageSendResult messageSendResult = templateMessageSend(sendMessageTemplate);
log.info("[{}]{}患者消息推送,推送结果代码-{},推送结果-{}", title, DesEncryptHelper.deCode(organizeName), messageSendResult.getErrcode(), messageSendResult.getErrmsg()); log.info("[{}]{}患者消息推送,推送结果代码-{},推送结果-{}", title, DesEncryptHelper.deCode(organizeName), messageSendResult.getErrcode(), messageSendResult.getErrmsg());
return ResponseResult.JOIN_QUEUE.toMessResult(); return ResponseResult.JOIN_QUEUE.toMessResult();
@ -274,8 +287,8 @@ public class MessageApiHelper {
code = ""; code = "";
} }
List<String> allDoctorOpenIdList = WeChatDataRequest.getAllOpenIdForDeptCode(deptCode); List<String> allDoctorOpenIdList = WeChatDataRequest.getAllOpenIdForDeptCode(deptCode);
if(allDoctorOpenIdList.isEmpty()){ if (allDoctorOpenIdList.isEmpty()) {
log.error("获取科室人员openId出错,deptCode-{}",deptCode); log.error("获取科室人员openId出错,deptCode-{}", deptCode);
return ResponseResult.NOT_FIND_DATA.toMessResult(); return ResponseResult.NOT_FIND_DATA.toMessResult();
} }
for (String interfaceOpenId : allDoctorOpenIdList) { for (String interfaceOpenId : allDoctorOpenIdList) {
@ -632,7 +645,7 @@ public class MessageApiHelper {
return ResponseResult.JOIN_QUEUE.toMessResult(); return ResponseResult.JOIN_QUEUE.toMessResult();
} }
try { try {
String openId =strTemp.get("openId")==null?reqWxOpenId(title, patientId, cardNo):strTemp.get("openId"); String openId = strTemp.get("openId") == null ? reqWxOpenId(title, patientId, cardNo) : strTemp.get("openId");
SendTemplate sendTemplate = SendTemplate.builder() SendTemplate sendTemplate = SendTemplate.builder()
.template_id(templateId) .template_id(templateId)
.message_id(messageId) .message_id(messageId)
@ -645,6 +658,7 @@ public class MessageApiHelper {
return templateMessageSend(JSONObject.toJSONString(sendTemplate)); return templateMessageSend(JSONObject.toJSONString(sendTemplate));
} catch (Exception e) { } catch (Exception e) {
log.error("失败:{}", e.getMessage());
return ResponseResult.NOT_FIND_DATA.toMessResult(); return ResponseResult.NOT_FIND_DATA.toMessResult();
} }
} }

@ -113,6 +113,10 @@ public class RequestHelper extends SimpleClientHttpRequestFactory {
* @return ResultVO * @return ResultVO
*/ */
public static String get(String url, Map<String, String> params) { public static String get(String url, Map<String, String> params) {
// SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
// factory.setConnectTimeout(5000); // 连接超时:5秒
// factory.setReadTimeout(60000); // 读取超时:60秒
// RestTemplate client = new RestTemplate(factory);
RestTemplate client = new RestTemplate(); RestTemplate client = new RestTemplate();
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/x-www-form-urlencoded"); headers.add("Content-Type", "application/x-www-form-urlencoded");

@ -371,6 +371,9 @@ public class TemplateJsonStringHelper {
public static String getUniversal(SendMessageTemplate key) { public static String getUniversal(SendMessageTemplate key) {
return "{\"data\":{\"time13\":{\"color\":\"#173177\",\"value\":\"" + key.getKeyword1() + "\"},\"thing16\":{\"color\":\"#173177\",\"value\":\"" + key.getKeyword2() + "\"},\"first\":{\"color\":\"#173177\",\"value\":\"" + key.getFirst() + "\"},\"remark\":{\"color\":\"#173177\",\"value\":\"" + key.getRemark() + "\"}},\"template_id\":\"" + key.getTemplate_id() + "\",\"touser\":\"" + key.getOpenId() + "\",\"url\":\"" + key.getUrl() + "\"}"; return "{\"data\":{\"time13\":{\"color\":\"#173177\",\"value\":\"" + key.getKeyword1() + "\"},\"thing16\":{\"color\":\"#173177\",\"value\":\"" + key.getKeyword2() + "\"},\"first\":{\"color\":\"#173177\",\"value\":\"" + key.getFirst() + "\"},\"remark\":{\"color\":\"#173177\",\"value\":\"" + key.getRemark() + "\"}},\"template_id\":\"" + key.getTemplate_id() + "\",\"touser\":\"" + key.getOpenId() + "\",\"url\":\"" + key.getUrl() + "\"}";
} }
public static String get17(SendMessageTemplate key) {
return "{\"data\":{\"time5\":{\"color\":\"#173177\",\"value\":\"" + key.getKeyword1() + "\"},\"thing3\":{\"color\":\"#173177\",\"value\":\"" + key.getKeyword2() + "\"}},\"template_id\":\"" + key.getTemplate_id() + "\",\"touser\":\"" + key.getOpenId() + "\",\"url\":\"" + key.getUrl() + "\"}";
}

@ -67,6 +67,9 @@ public class TemplateSelectHelper {
case "Universal": case "Universal":
jsonString = TemplateJsonStringHelper.getUniversal(sendMessageTemplate); jsonString = TemplateJsonStringHelper.getUniversal(sendMessageTemplate);
break; break;
case "17":
jsonString = TemplateJsonStringHelper.get17(sendMessageTemplate);
break;
default: default:
jsonString = TemplateJsonStringHelper.get(sendMessageTemplate); jsonString = TemplateJsonStringHelper.get(sendMessageTemplate);
} }

@ -41,15 +41,15 @@ public class WeChatDataRequest {
} }
public static List<String> getOpenIdForDoctorCode(String doctorCode) { public static List<String> getOpenIdForDoctorCode(String doctorCode) {
return RequestHelper.get("http://127.0.0.1:9090/micro/msg_push/doctor?doctCode="+doctorCode, null, WeChatResponse.class).getData(); return RequestHelper.get("http://127.0.0.1:9090/micro/msg_push/doctor?doctCode=" + doctorCode, null, WeChatResponse.class).getData();
} }
public static List<String> getAllOpenIdForDoctorCode(String doctorCode) { public static List<String> getAllOpenIdForDoctorCode(String doctorCode) {
return RequestHelper.get("http://127.0.0.1:9090/micro/msg_push/doctorOpenIds?doctCode="+doctorCode, null, WeChatResponse.class).getData(); return RequestHelper.get("http://127.0.0.1:9090/micro/msg_push/doctorOpenIds?doctCode=" + doctorCode, null, WeChatResponse.class).getData();
} }
public static List<String> getAllOpenIdForDeptCode(String deptCode){ public static List<String> getAllOpenIdForDeptCode(String deptCode) {
return RequestHelper.get("http://127.0.0.1:9090/micro/msg_push/deptOpenIds?deptCode="+deptCode, null, WeChatResponse.class).getData(); return RequestHelper.get("http://127.0.0.1:9090/micro/msg_push/deptOpenIds?deptCode=" + deptCode, null, WeChatResponse.class).getData();
} }
public static WeChatAllDoctorResponse getAllOpenIdForDoctorCode() { public static WeChatAllDoctorResponse getAllOpenIdForDoctorCode() {
@ -60,48 +60,48 @@ public class WeChatDataRequest {
return RequestHelper.get("http://127.0.0.1:9090/micro/doctor/getDocModuleLink?code=xsjc", null, WorkLoadResponse.class); return RequestHelper.get("http://127.0.0.1:9090/micro/doctor/getDocModuleLink?code=xsjc", null, WorkLoadResponse.class);
} }
public static List<Register> getTodayRegOpenId(){ public static List<Register> getTodayRegOpenId() {
return JSONObject.parseArray(RequestHelper.getJsonObj(IniConfig.getInstance("today_reg_url")==null?"http://127.0.0.1/wx/register/getTodayRegOpenId":IniConfig.getInstance("today_reg_url"),null).get("data").toString(),Register.class); return JSONObject.parseArray(RequestHelper.getJsonObj(IniConfig.getInstance("today_reg_url") == null ? "http://127.0.0.1/wx/register/getTodayRegOpenId" : IniConfig.getInstance("today_reg_url"), null).get("data").toString(), Register.class);
} }
public static List<Register> getTodayRegRecord(String startTime, String endTime){ public static List<Register> getTodayRegRecord(String startTime, String endTime) {
return JSONObject.parseArray(RequestHelper.getJsonObj("http://127.0.0.1/wx/register/getTodayRegRecord?startTime="+startTime+"&endTime="+endTime,null).get("data").toString(),Register.class); return JSONObject.parseArray(RequestHelper.getJsonObj("http://127.0.0.1/wx/register/getTodayRegRecord?startTime=" + startTime + "&endTime=" + endTime, null).get("data").toString(), Register.class);
} }
public static String todayRegSmS(String startTime, String endTime){ public static String todayRegSmS(String startTime, String endTime) {
return RequestHelper.getJsonObj("http://127.0.0.1/wx/api/sms/todayRegSmS?startTime="+startTime+"&endTime="+endTime,null).toString(); return RequestHelper.getJsonObj("http://127.0.0.1/wx/api/sms/todayRegSmS?startTime=" + startTime + "&endTime=" + endTime, null).toString();
} }
public static String GetOpenIdForPatientId(String patientId){ public static String GetOpenIdForPatientId(String patientId) {
String wx_openId_url = "http://wx.mzsrmyy.net/wx/patient/getOpenIdsByPatientId.do"; String wx_openId_url = "http://wx.mzsrmyy.net/wx/patient/getOpenIdsByPatientId.do";
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("patientId",patientId); params.put("patientId", patientId);
params.put("algorithm","des"); params.put("algorithm", "des");
params.put("isEncryptComma","false"); params.put("isEncryptComma", "false");
return DesEncryptHelper.deCode(RequestHelper.get(wx_openId_url,params,WeChatResponse.class).getData().get(0)); return DesEncryptHelper.deCode(RequestHelper.get(wx_openId_url, params, WeChatResponse.class).getData().get(0));
} }
private static TemplateList getTemplateList() { private static TemplateList getTemplateList() {
if(RedisHelper.getRedis().get("Template")!=null){ if (RedisHelper.getRedis().get("Template") != null) {
return JSONObject.parseObject(RedisHelper.getRedis().get("Template"), TemplateList.class); return JSONObject.parseObject(RedisHelper.getRedis().get("Template"), TemplateList.class);
} }
String tenCentTemplateListUrl = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token="+API.accessToken(WxCacheRequest.getAccessToken()); String tenCentTemplateListUrl = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=" + API.accessToken(WxCacheRequest.getAccessToken());
Map<String,String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("lang","zh_CN"); params.put("lang", "zh_CN");
TemplateList templateList = RequestHelper.get(tenCentTemplateListUrl,params,TemplateList.class); TemplateList templateList = RequestHelper.get(tenCentTemplateListUrl, params, TemplateList.class);
RedisHelper.getRedis().set("Template", JSONObject.toJSONString(templateList),86400); RedisHelper.getRedis().set("Template", JSONObject.toJSONString(templateList), 86400);
return templateList; return templateList;
} }
public static String getTemplateId(String title) { public static String getTemplateId(String title) {
List<Template> templateList= getTemplateList().getTemplate_list().stream().filter(p -> p.getTitle().equals(title)).collect(Collectors.toList()); List<Template> templateList = getTemplateList().getTemplate_list().stream().filter(p -> p.getTitle().equals(title)).collect(Collectors.toList());
if(templateList.isEmpty()){ if (templateList.isEmpty()) {
log.error("获取模版列表失败,模版名称-{}",title); log.error("获取模版列表失败,模版名称-{}", title);
return null; return null;
} }
if(templateList.size()>1){ if (templateList.size() > 1) {
if(templateList.stream().anyMatch(p->p.getDeputy_industry()==null)){ if (templateList.stream().anyMatch(p -> p.getDeputy_industry() == null)) {
return templateList.stream().filter(p->p.getDeputy_industry()==null).findFirst().get().getTemplate_id(); return templateList.stream().filter(p -> p.getDeputy_industry() == null).findFirst().get().getTemplate_id();
} }
} }
return templateList.get(0).getTemplate_id(); return templateList.get(0).getTemplate_id();

@ -1,13 +1,8 @@
package com.ynxbd.push.httpRequest.xbd.his; package com.ynxbd.push.httpRequest.xbd.his;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.push.config.IniConfig; import com.ynxbd.push.config.IniConfig;
import com.ynxbd.push.entity.tencent.WeChatResponse;
import com.ynxbd.push.helper.RequestHelper; import com.ynxbd.push.helper.RequestHelper;
import java.util.HashMap;
import java.util.Map;
/** /**
* @author 李进才 * @author 李进才
* @ClassName WorkLoadRequest * @ClassName WorkLoadRequest

@ -109,7 +109,7 @@ public class WxCacheRequest {
*/ */
private static AccessToken requestWxAccessToken() { private static AccessToken requestWxAccessToken() {
try { try {
String token_url = StringUtils.isNotBlank(IniConfig.TOKEN_URL)?IniConfig.TOKEN_URL:"http://127.0.0.1:8080/wx/api/getWxAccessToken.do"; String token_url = StringUtils.isNotBlank(IniConfig.TOKEN_URL) ? IniConfig.TOKEN_URL : "http://127.0.0.1:8080/wx/api/getWxAccessToken.do";
JSONObject respJson = RequestHelper.getJsonObj(token_url, null); JSONObject respJson = RequestHelper.getJsonObj(token_url, null);
String code = respJson.getString("code"); String code = respJson.getString("code");
if (!"200".equals(code)) { if (!"200".equals(code)) {

@ -28,47 +28,60 @@ import static com.ynxbd.push.entity.type.MessageTypeEnum.UNIVERSAL;
* @date 2022/9/7 14:23 * @date 2022/9/7 14:23
*/ */
@Slf4j @Slf4j
public class BiPush { public class BiPush {
public static void runJob(String openId){
if(IniConfig.getInstance("leaderTemplateId")==null&&WeChatDataRequest.getTemplateId("工单处理提醒")==null){ public static void runJob(String openId) {
String template_id = WeChatDataRequest.getTemplateId("工单处理提醒");
if (IniConfig.getInstance("leaderTemplateId") == null && template_id == null) {
return; return;
} }
Boolean isTest = false; boolean isTest = IniConfig.getInstance("leaderTest") != null;
if(IniConfig.getInstance("leaderTest")!=null){ String leaderTemplateId = template_id == null ? IniConfig.getInstance("leaderTemplateId") : template_id;
isTest = true;
}
String leaderTemplateId = WeChatDataRequest.getTemplateId("工单处理提醒")==null?IniConfig.getInstance("leaderTemplateId"):WeChatDataRequest.getTemplateId("工单处理提醒");
SimpleDateFormat sdf = new SimpleDateFormat(); SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd"); sdf.applyPattern("yyyy-MM-dd");
Date date = new Date(); Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat();
formatter.applyPattern("yyyyMMdd");
String redisKeyDate = formatter.format(date);
List<HIsWorkLoad> targetList = HisResultFormat.jsonToList(HisResultFormat.getRespData(HisRequest.getWorkLoad()), HIsWorkLoad.class); List<HIsWorkLoad> targetList = HisResultFormat.jsonToList(HisResultFormat.getRespData(HisRequest.getWorkLoad()), HIsWorkLoad.class);
if (targetList.isEmpty()) {
log.info("[领导推送工作量]无数据");
if (openId == null) {
if (RedisHelper.getRedis().get(redisKeyDate + "_Count") == null || Integer.parseInt(RedisHelper.getRedis().get(redisKeyDate + "_Count")) < 2) {
int count = RedisHelper.getRedis().get(redisKeyDate + "_Count") == null ? 0 : Integer.parseInt(RedisHelper.getRedis().get(redisKeyDate + "_Count")) + 1;
RedisHelper.getRedis().set(redisKeyDate + "_Count", String.valueOf(count), 60 * 10);
runJob(null);
log.info("[领导推送工作量]重试第{}次", count + 1);
}
}
return;
}
List<AllDoctorCode> allDoctorCodeList = WeChatDataRequest.getAllOpenIdForDoctorCode().getData(); List<AllDoctorCode> allDoctorCodeList = WeChatDataRequest.getAllOpenIdForDoctorCode().getData();
Map<String,String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("description", targetList.get(0).getDescription()); params.put("description", targetList.get(0).getDescription());
SimpleDateFormat formatter = new SimpleDateFormat(); RedisHelper.getRedis().set(redisKeyDate, JSONObject.toJSONString(params), 86400 * 7);
formatter.applyPattern("yyyyMMdd"); for (HIsWorkLoad target : targetList) {
RedisHelper.getRedis().set(formatter.format(date),JSONObject.toJSONString(params),86400); Optional<AllDoctorCode> allDoctorCodeStream = allDoctorCodeList.stream().filter(item -> item.getDoctCode().equals(target.getDoc_code())).findFirst();
for (HIsWorkLoad target: targetList) { if (!allDoctorCodeStream.isPresent()) {
Optional<AllDoctorCode> allDoctorCodeStream =allDoctorCodeList.stream().filter(item -> item.getDoctCode().equals(target.getDoc_code())).findFirst(); log.info("[领导推送工作量]{}未绑定微官网,openId:{}", target.getDoc_name(), target.getDoc_code());
if (!allDoctorCodeStream.isPresent()){
log.info("[领导推送工作量]{}未绑定微官网,openId:{}",target.getDoc_name(),target.getDoc_code());
continue; continue;
} }
if(IniConfig.TEMPLATE_VERSION){ if (IniConfig.TEMPLATE_VERSION) {
// 只要中文,数字,标点,防止BI那边加些乱七八糟的字符导致json格式不正确 // 只要中文,数字,标点,防止BI那边加些乱七八糟的字符导致json格式不正确
target.setDescription(target.getDescription().replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5.,,。?“”%]+","") .substring(0, 16)+ "……"); target.setDescription(target.getDescription().replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5.,,。?“”%]+", "").substring(0, 16) + "……");
} }
SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder() SendMessageTemplate sendMessageTemplate = SendMessageTemplate.builder()
.template_id(leaderTemplateId) .template_id(leaderTemplateId)
.code(Boolean.FALSE.equals(IniConfig.TEMPLATE_VERSION) ?"":UNIVERSAL.CODE) .code(Boolean.FALSE.equals(IniConfig.TEMPLATE_VERSION) ? "" : IniConfig.NAME.equals("宜良福泰医院") ? "17" : UNIVERSAL.CODE)
.keyword1(Objects.equals(IniConfig.getInstance("leaderTemplateMode"), "2") ?target.getDescription():sdf.format(date)) .keyword1(Objects.equals(IniConfig.getInstance("leaderTemplateMode"), "2") ? target.getDescription() : sdf.format(date))
.keyword2(Objects.equals(IniConfig.getInstance("leaderTemplateMode"), "2") ?sdf.format(date):target.getDescription()) .keyword2(Objects.equals(IniConfig.getInstance("leaderTemplateMode"), "2") ? sdf.format(date) : target.getDescription())
// .first(new StringBuilder().append("尊敬的").append(target.getDoc_name()).append("您好").toString()) // .first(new StringBuilder().append("尊敬的").append(target.getDoc_name()).append("您好").toString())
.url(IniConfig.DOMAIN+"wx/"+IniConfig.WECHAT_UI_PATH+"push-info.html#/bi-info") .url(IniConfig.DOMAIN + "wx/" + IniConfig.WECHAT_UI_PATH + "push-info.html?date=" + redisKeyDate)
// .openId(replenish.getOpenid()) // .openId(replenish.getOpenid())
.build(); .build();
if(isTest){
for (String testOpenId:IniConfig.getInstance("leaderTest").split(";")) { if (isTest) {
for (String testOpenId : IniConfig.getInstance("leaderTest").split(";")) {
sendMessageTemplate.setOpenId(""); sendMessageTemplate.setOpenId("");
sendMessageTemplate.setOpenId(testOpenId); sendMessageTemplate.setOpenId(testOpenId);
log.info("[领导推送工作量-测试项目]:openId={}, ErrCode={}, ", log.info("[领导推送工作量-测试项目]:openId={}, ErrCode={}, ",
@ -78,8 +91,8 @@ public class BiPush {
} }
break; break;
} }
if(openId!=null){ if (openId != null) {
for (String paramsOpenId:openId.split(";")) { for (String paramsOpenId : openId.split(";")) {
sendMessageTemplate.setOpenId(""); sendMessageTemplate.setOpenId("");
sendMessageTemplate.setOpenId(paramsOpenId); sendMessageTemplate.setOpenId(paramsOpenId);
log.info("[领导推送工作量-接口传参项目]:openId={}, ErrCode={}, ", log.info("[领导推送工作量-接口传参项目]:openId={}, ErrCode={}, ",
@ -90,7 +103,7 @@ public class BiPush {
break; break;
} }
Integer index = 1; Integer index = 1;
for (String interfaceOpenId:allDoctorCodeStream.get().getOpenIds()){ for (String interfaceOpenId : allDoctorCodeStream.get().getOpenIds()) {
sendMessageTemplate.setOpenId(AesCodeHelper.deCode(interfaceOpenId)); sendMessageTemplate.setOpenId(AesCodeHelper.deCode(interfaceOpenId));
log.info("[领导推送工作量]:openId={}, DoctorCode-{}-{}, ErrCode={}", log.info("[领导推送工作量]:openId={}, DoctorCode-{}-{}, ErrCode={}",
sendMessageTemplate.getOpenId(), sendMessageTemplate.getOpenId(),

@ -37,7 +37,7 @@ public class AppQuartzScheduler {
scheduler.start(); scheduler.start();
} }
public void startWorkloadJob() throws SchedulerException{ public void startWorkloadJob() throws SchedulerException {
startWorkLoadJob(scheduler); startWorkLoadJob(scheduler);
scheduler.start(); scheduler.start();
} }
@ -150,11 +150,11 @@ public class AppQuartzScheduler {
private void startTodayRegJob(Scheduler scheduler) throws SchedulerException { private void startTodayRegJob(Scheduler scheduler) throws SchedulerException {
JobDetail jobDetailMom = JobBuilder.newJob(TodayRegJob.class).withIdentity("TodayRegMom", "TodayRegMom").build(); JobDetail jobDetailMom = JobBuilder.newJob(TodayRegJob.class).withIdentity("TodayRegMom", "TodayRegMom").build();
JobDetail jobDetailNoon = JobBuilder.newJob(TodayRegJob.class).withIdentity("TodayRegNoon", "TodayRegNoon").build(); JobDetail jobDetailNoon = JobBuilder.newJob(TodayRegJob.class).withIdentity("TodayRegNoon", "TodayRegNoon").build();
if(IniConfig.TODAY_REG_TIME_MOM==null||IniConfig.TODAY_REG_TIME_NOON==null){ if (IniConfig.TODAY_REG_TIME_MOM == null || IniConfig.TODAY_REG_TIME_NOON == null) {
log.info("[定时任务]:每日预约推送未设置时间,功能未开启,todayRegTimeMom-{},todayRegTimeNoon-{}",IniConfig.TODAY_REG_TIME_MOM,IniConfig.TODAY_REG_TIME_NOON); log.info("[定时任务]:每日预约推送未设置时间,功能未开启,todayRegTimeMom-{},todayRegTimeNoon-{}", IniConfig.TODAY_REG_TIME_MOM, IniConfig.TODAY_REG_TIME_NOON);
return; return;
} }
log.info("[定时任务]:每日预约推送未设置时间,功能已经开启todayRegTimeMom-{},todayRegTimeNoon-{}",IniConfig.TODAY_REG_TIME_MOM,IniConfig.TODAY_REG_TIME_NOON); log.info("[定时任务]:每日预约推送未设置时间,功能已经开启todayRegTimeMom-{},todayRegTimeNoon-{}", IniConfig.TODAY_REG_TIME_MOM, IniConfig.TODAY_REG_TIME_NOON);
CronScheduleBuilder cronScheduleBuilderMom = CronScheduleBuilder.cronSchedule(IniConfig.TODAY_REG_TIME_MOM); CronScheduleBuilder cronScheduleBuilderMom = CronScheduleBuilder.cronSchedule(IniConfig.TODAY_REG_TIME_MOM);
CronScheduleBuilder cronScheduleBuilderNoon = CronScheduleBuilder.cronSchedule(IniConfig.TODAY_REG_TIME_NOON); CronScheduleBuilder cronScheduleBuilderNoon = CronScheduleBuilder.cronSchedule(IniConfig.TODAY_REG_TIME_NOON);
CronTrigger cronTriggerMom = TriggerBuilder.newTrigger().withIdentity("TodayRegMom", "TodayRegMom").withSchedule(cronScheduleBuilderMom).build(); CronTrigger cronTriggerMom = TriggerBuilder.newTrigger().withIdentity("TodayRegMom", "TodayRegMom").withSchedule(cronScheduleBuilderMom).build();
@ -168,11 +168,11 @@ public class AppQuartzScheduler {
*/ */
private void startWorkLoadJob(Scheduler scheduler) throws SchedulerException { private void startWorkLoadJob(Scheduler scheduler) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(WorkLoadJob.class).withIdentity("WorkLoad", "WorkLog").build(); JobDetail jobDetail = JobBuilder.newJob(WorkLoadJob.class).withIdentity("WorkLoad", "WorkLog").build();
if(IniConfig.LEADER_TIME==null){ if (IniConfig.LEADER_TIME == null) {
log.info("[定时任务]:BI领导推送未设置时间,功能未开启"); log.info("[定时任务]:BI领导推送未设置时间,功能未开启");
return; return;
} }
log.info("[定时任务]:BI领导推送设置时间,功能已经开启,推送时间-{}",IniConfig.LEADER_TIME); log.info("[定时任务]:BI领导推送设置时间,功能已经开启,推送时间-{}", IniConfig.LEADER_TIME);
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(IniConfig.LEADER_TIME); CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(IniConfig.LEADER_TIME);
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("WorkLoad", "WorkLog").withSchedule(cronScheduleBuilder).build(); CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("WorkLoad", "WorkLog").withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger); scheduler.scheduleJob(jobDetail, cronTrigger);

@ -7,6 +7,7 @@ import com.ynxbd.push.entity.type.MessageTypeEnum;
import com.ynxbd.push.helper.MessageApiHelper; import com.ynxbd.push.helper.MessageApiHelper;
import com.ynxbd.push.rabbit.send.RabbitSender; import com.ynxbd.push.rabbit.send.RabbitSender;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -139,11 +140,13 @@ public class RabbitReceiver {
String messageId = receiveMessage.get("message_id"); String messageId = receiveMessage.get("message_id");
String code = receiveMessage.get("tip"); String code = receiveMessage.get("tip");
String patientId = receiveMessage.get("patientId"); String patientId = receiveMessage.get("patientId");
String content = receiveMessage.get("content");
content = StringUtils.isBlank(content) ? "病历复印申请通知,请点击跳转查看" : content; // 病历复印申请已通过,请点击跳转付费
SimpleDateFormat sdf = new SimpleDateFormat(); SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd"); sdf.applyPattern("yyyy-MM-dd");
Date date = new Date(); Date date = new Date();
String url = IniConfig.DOMAIN + "wx/" + IniConfig.WECHAT_UI_PATH + "medical-record.html#/medical-record-history"; String url = IniConfig.DOMAIN + "wx/" + IniConfig.WECHAT_UI_PATH + "medical-record.html#/medical-record-history";
retry(MessageApiHelper.TemplateMessageForCode(organizeName, code, null, "医院通知", patientId, null, "病历复印申请已通过", sdf.format(date), "病历复印申请已通过,请点击跳转付费", null, null, null, "查看详情", url, messageId), receiveMessage); retry(MessageApiHelper.TemplateMessageForCode(organizeName, code, null, "医院通知", patientId, null, "病历复印申请已通过", sdf.format(date), content, null, null, null, "查看详情", url, messageId), receiveMessage);
} }
private void treatPlan(Map<String, String> receiveMessage) { private void treatPlan(Map<String, String> receiveMessage) {
@ -198,7 +201,7 @@ public class RabbitReceiver {
viewUrl = IniConfig.DOMAIN + "wx/" + IniConfig.WECHAT_UI_PATH + "push-universal.html?patientId=" + ("".equals(patientId)||patientId==null ? "": Base64.getEncoder().encodeToString(patientId.getBytes())) + "&content=" + Base64.getEncoder().encodeToString(UriUtils.encode(content, StandardCharsets.UTF_8.toString()).getBytes()) + "&time=" + Base64.getEncoder().encodeToString(sdf.format(date).getBytes()) + "&url=" + ("".equals(url)||url==null?"":Base64.getEncoder().encodeToString(UriUtils.encode(url, StandardCharsets.UTF_8.toString()).getBytes())) + "&buttonName=" + ("".equals(buttonName)||buttonName==null?"":Base64.getEncoder().encodeToString(UriUtils.encode(buttonName, StandardCharsets.UTF_8.toString()).getBytes())); viewUrl = IniConfig.DOMAIN + "wx/" + IniConfig.WECHAT_UI_PATH + "push-universal.html?patientId=" + ("".equals(patientId)||patientId==null ? "": Base64.getEncoder().encodeToString(patientId.getBytes())) + "&content=" + Base64.getEncoder().encodeToString(UriUtils.encode(content, StandardCharsets.UTF_8.toString()).getBytes()) + "&time=" + Base64.getEncoder().encodeToString(sdf.format(date).getBytes()) + "&url=" + ("".equals(url)||url==null?"":Base64.getEncoder().encodeToString(UriUtils.encode(url, StandardCharsets.UTF_8.toString()).getBytes())) + "&buttonName=" + ("".equals(buttonName)||buttonName==null?"":Base64.getEncoder().encodeToString(UriUtils.encode(buttonName, StandardCharsets.UTF_8.toString()).getBytes()));
} }
log.info("[通用消息推送] 转换链接打印 messageId-{}, url-{}",messageId, viewUrl); log.info("[通用消息推送] 转换链接打印 messageId-{}, url-{}",messageId, viewUrl);
if (IniConfig.TEMPLATE_VERSION) { if (IniConfig.TEMPLATE_VERSION && content.length() > 16) {
content = content.substring(0, 16) + "……"; content = content.substring(0, 16) + "……";
} }
retry(MessageApiHelper.TemplateMessageForCode(organizeName, code, IdCard, Boolean.FALSE.equals(IniConfig.TEMPLATE_VERSION) ? "绑定通知" : "工单处理提醒", patientId, doctorCode, null, sdf.format(date), content, null, null, null, null, viewUrl, messageId), receiveMessage); retry(MessageApiHelper.TemplateMessageForCode(organizeName, code, IdCard, Boolean.FALSE.equals(IniConfig.TEMPLATE_VERSION) ? "绑定通知" : "工单处理提醒", patientId, doctorCode, null, sdf.format(date), content, null, null, null, null, viewUrl, messageId), receiveMessage);

@ -1,6 +1,7 @@
package com.ynxbd.push.rabbit.send; package com.ynxbd.push.rabbit.send;
import com.ynxbd.push.helper.MapHelper; import com.ynxbd.push.helper.MapHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -16,6 +17,7 @@ import java.util.UUID;
* @date 2024/01/23 13:53:00 * @date 2024/01/23 13:53:00
*/ */
@Component @Component
@Slf4j
public class RabbitSender { public class RabbitSender {
@Autowired @Autowired
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;

@ -13,9 +13,9 @@ spring:
time-zone: GMT+8 time-zone: GMT+8
rabbitmq: rabbitmq:
host: 127.0.0.1 host: 127.0.0.1
port: 5672 port: 5672 # 石林县医院15672,其他5672
username: wxPush username: wxPush # 石林县医院guest,其他wxPush
password: wx.push.rabbit password: wx.push.rabbit # 石林县医院guest,其他wx.push.rabbit
virtual-host: / virtual-host: /
# 支持发布返回 # 支持发布返回
publisher-returns: true publisher-returns: true

@ -6,7 +6,7 @@
<property name="log.days" value="36500"/> <property name="log.days" value="36500"/>
<!-- 日志输出格式 --> <!-- 日志输出格式 -->
<property name="log.pattern" <property name="log.pattern"
value="[%d{HH:mm:ss.SSS}][%class - %method - %line] %msg%n"/> value="[%d{HH:mm:ss.SSS}][%class - %method - %line] %msg%n%n"/>
<!-- 控制台输出 --> <!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <appender name="console" class="ch.qos.logback.core.ConsoleAppender">

@ -1,7 +1,7 @@
 
[192.168.1.125] [192.168.12.117]
name=本地 name=本地
#leaderUrl = 200.200.200.70:01 leaderUrl = 10.20.10.41:8082
# 领导层BI推送 模版id # 领导层BI推送 模版id
#leaderTemplateId = iTgXzpqIre-0lFw2nq0iDCDAlVl0d2NhIT9X77dS5WY #leaderTemplateId = iTgXzpqIre-0lFw2nq0iDCDAlVl0d2NhIT9X77dS5WY
# 测试账号 openid # 测试账号 openid
@ -122,7 +122,7 @@ weChatUIPath = web/
[192.168.33.40] [192.168.33.40]
name = 玉龙县人民医院 name = 玉龙县人民医院
leaderUrl = 172.16.24.4: leaderUrl = 172.16.24.4:8080
# 领导层BI推送 模版id # 领导层BI推送 模版id
leaderTemplateId = a775Q5ikmGLDuX7rWcT8sRfU5IZZ4cvmjWYNJ36I5e4 leaderTemplateId = a775Q5ikmGLDuX7rWcT8sRfU5IZZ4cvmjWYNJ36I5e4
# 绑定通知 的模版 # 绑定通知 的模版
@ -132,7 +132,7 @@ leaderTemplateMode = 2
# 推送时间 每天「倒数第三位」点「倒数第四位」分触发 # 推送时间 每天「倒数第三位」点「倒数第四位」分触发
leaderTime = 0 30 07 * * ? leaderTime = 0 30 07 * * ?
domain = http://www.ljylxrmyy.com/ domain = http://www.ljylxrmyy.com/
weChatUIPath = weChatUIPath = web/
[192.168.11.7] [192.168.11.7]
@ -159,14 +159,14 @@ templateVersion = new
weChatUIPath = weChatUIPath =
[192.168.10.8] [192.167.100.56]
name = 宁蒗县人民医院 name = 宁蒗县人民医院
leaderTemplateId = X0iIY4uKZC_feYKD1RfrgIwXM9E0ryHdqs4xVrC00DY leaderTemplateId = X0iIY4uKZC_feYKD1RfrgIwXM9E0ryHdqs4xVrC00DY
leaderUrl = 192.168.10.43:8080 leaderUrl = 192.168.10.43:8080
leaderTime = 0 00 06 * * ? leaderTime = 0 00 06 * * ?
domain = http://www.nlxrmyy.cn/ domain = http://www.nlxrmyy.cn/
templateVersion = new templateVersion = new
weChatUIPath = weChatUIPath = web/
[192.168.104.201] [192.168.104.201]
@ -186,3 +186,25 @@ domain = http://www.msrmyy.com.cn/
templateVersion = new templateVersion = new
weChatUIPath = web/ weChatUIPath = web/
[192.168.197.250]
name = 景洪中傣医医院
leaderTemplateId = eBCXIDhdHiOD46RykuOIkwUAzT4YXb0AM9306_zMjtg
leaderUrl = 192.168.197.206:8087
leaderTime = 0 0 8 * * ?
#leaderTest = o5cEv5lKltTX76w6P4PzEDKuB1aQ
domain = https://www.jhszdyyy.cn/
templateVersion = new
weChatUIPath = web/
[200.200.200.13]
name = 宜良福泰医院
leaderTemplateId = 5717L3NsG6snWV1Rq9nWIZr1Oulgt4i8xLw6tVDb0Tc
leaderUrl = 200.200.200.10:8080
leaderTime = 0 0 8 * * ?
leaderTest = ogEHwv8VpNJf_y8j3HMy1nQ1CejM
domain = https://wx.ylftyy.top/
templateVersion = new
weChatUIPath = web/

Loading…
Cancel
Save