From 5e0e7ad230dfba76d00e224e27c8488383396e0e Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期日, 20 九月 2026 17:36:00 +0800
Subject: [PATCH] 【景宁】定时发送异常信息-景宁配置
---
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java | 1
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java | 79 +++++++++++++++----
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java | 7 +
ruoyi-admin/src/main/resources/application-ls.yml | 4
ruoyi-common/src/main/java/com/ruoyi/common/utils/TemplateUtils.java | 104 ++++++++++++++++++++++++++
5 files changed, 175 insertions(+), 20 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index 86a1719..c826b55 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -960,6 +960,13 @@
ryTask.dealSubtaskDeadline(orgid, day);
return AjaxResult.success("銆恉ealSubtaskDeadline銆戝悓姝ヤ换鍔″凡鍚姩锛屽ぉ鏁颁负" + day + "澶╋紝璇风◢鍚庢煡鐪嬬粨鏋�");
}
+
+ @PostMapping("/sendExceptInfo")
+ public AjaxResult sendExceptInfo() throws Exception {
+ ryTask.sendExceptInfo();
+ return AjaxResult.success("sendExceptInfo");
+ }
+
/**
* 甯edis缂撳瓨鐨勭粺璁℃煡璇紝渚沺atItem鍜宲atItemCount鍏辩敤锛屾潯浠朵笉鍙樻椂鐩存帴鍛戒腑缂撳瓨
*/
diff --git a/ruoyi-admin/src/main/resources/application-ls.yml b/ruoyi-admin/src/main/resources/application-ls.yml
index 7678506..b03d3b5 100644
--- a/ruoyi-admin/src/main/resources/application-ls.yml
+++ b/ruoyi-admin/src/main/resources/application-ls.yml
@@ -257,7 +257,9 @@
isEncryp: 0
#鏂囦欢涓婁紶鍦板潃
-fileUpload: https://9.208.2.190:8092
+#fileUpload: https://9.208.2.190:8092
+#profile: /profile-api
+fileUpload: https://221.12.19.26:8093
profile: /profile-api
# 椤圭洰鐩稿叧閰嶇疆 涓芥按
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/TemplateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TemplateUtils.java
new file mode 100644
index 0000000..04d0eef
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TemplateUtils.java
@@ -0,0 +1,104 @@
+package com.ruoyi.common.utils;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class TemplateUtils {
+ private static final Pattern PATTERN = Pattern.compile("\\$\\{([^}]+)\\}");
+ private static final ObjectMapper OM = new ObjectMapper();
+
+ public static String render(String template, Object bean) {
+ if (template == null || bean == null) {
+ return template;
+ }
+ Matcher matcher = PATTERN.matcher(template);
+ StringBuffer sb = new StringBuffer();
+ while (matcher.find()) {
+ String exp = matcher.group(1);
+ Object val = getValueByExp(bean, exp);
+ String strVal = val == null ? "" : val.toString();
+ matcher.appendReplacement(sb, Matcher.quoteReplacement(strVal));
+ }
+ matcher.appendTail(sb);
+ return sb.toString();
+ }
+
+ private static Object getValueByExp(Object root, String exp) {
+ try {
+ Object curr = root;
+ if (exp.contains("#json.")) {
+ String[] parts = exp.split("#json\\.", 2);
+ String beanField = parts[0];
+ String jsonPath = parts[1];
+
+ Object jsonStrObj = getBeanField(curr, beanField);
+ // ========== Java8 鍏煎淇敼鐐� ==========
+ if (!(jsonStrObj instanceof String)) {
+ return null;
+ }
+ String jsonStr = (String) jsonStrObj;
+ if (jsonStr.trim().isEmpty()) {
+ return null;
+ }
+ JsonNode node = OM.readTree(jsonStr);
+ return getJsonNode(node, jsonPath);
+ }
+
+ String[] props = exp.split("\\.");
+ for (String p : props) {
+ curr = getBeanField(curr, p);
+ if (curr == null) {
+ break;
+ }
+ }
+ return curr;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private static Object getBeanField(Object bean, String fieldName)
+ throws IntrospectionException, InvocationTargetException, IllegalAccessException {
+ if (bean == null) {
+ return null;
+ }
+ PropertyDescriptor pd = new PropertyDescriptor(fieldName, bean.getClass());
+ Method getter = pd.getReadMethod();
+ return getter.invoke(bean);
+ }
+
+ private static Object getJsonNode(JsonNode node, String path) {
+ String[] arr = path.split("\\.");
+ JsonNode curr = node;
+ for (String k : arr) {
+ curr = curr.get(k);
+ if (curr == null) {
+ return null;
+ }
+ }
+ return curr.isValueNode() ? curr.asText() : curr.toString();
+ }
+
+ // 娴嬭瘯
+ public static void main(String[] args) {
+ class User {
+ private String name = "寮犱笁";
+ private Integer age = 25;
+ private String ext = "{\"phone\":\"13800138000\",\"addr\":{\"city\":\"鏉窞\"}}";
+
+ public String getName() { return name; }
+ public Integer getAge() { return age; }
+ public String getExt() { return ext; }
+ }
+ User u = new User();
+ String tpl = "濮撳悕:${name},骞撮緞:${age},鎵嬫満鍙�:${ext#json.phone},鍩庡競:${ext#json.addr.city}";
+ System.out.println(render(tpl, u));
+ }
+}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index 34ada0f..e86b2f6 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -8,6 +8,7 @@
import com.google.gson.Gson;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.service.IDingTalkService;
import com.ruoyi.common.dx.MessageSend;
@@ -23,6 +24,7 @@
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysUserService;
import com.smartor.common.LSHospTokenUtil;
import com.smartor.common.MtSubmitSmUtil;
import com.smartor.common.QwenLLMUtil;
@@ -108,6 +110,9 @@
@Autowired
private IDingTalkService dingTalkService;
+
+ @Autowired
+ private ISysUserService userService;
@Value("${localIP}")
@@ -283,31 +288,67 @@
subtaskDetailTraceVO.setHandleFlag("0");
List<ServiceSubtaskDetailTrace> serviceSubtaskDetailTraces =
serviceSubtaskDetailTraceService.selectServiceSubtaskDetailTtraceList(subtaskDetailTraceVO);
- // 鎶� dutyDeptPersonCode 鏁寸悊鍒� list 涓紙濡傛灉澶氫釜浜虹敤閫楀彿鍒嗗壊锛屽垯灞曞紑骞跺幓閲嶏級
- List<String> dutyDeptPersonCodeList = serviceSubtaskDetailTraces.stream()
- .map(ServiceSubtaskDetailTrace::getDutyDeptPersonCode)
- .filter(StringUtils::isNotBlank)
- .flatMap(code -> Arrays.stream(code.split(",")))
- .map(String::trim)
- .filter(StringUtils::isNotBlank).distinct() // 鍘婚噸
- .collect(Collectors.toList());
// 鑾峰彇鈥滃紓甯稿唴瀹规彁閱�"
SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique("send.except.content");
String exceptContent = sysConfig.getConfigValue();
// 鑾峰彇鈥滃唴瀹规彁閱掓祴璇曚汉宸ュ彿鈥�
- String testPerson = sysConfigMapper.checkConfigKeyUnique("send.test.person").getConfigValue();
- if (StringUtils.isNotBlank(testPerson)) {
- String[] split = testPerson.split(",");
- if (CollectionUtils.isEmpty(dutyDeptPersonCodeList)) dutyDeptPersonCodeList = Arrays.asList(split);
- else dutyDeptPersonCodeList.addAll(Arrays.asList(split));
- }
+ SysConfig testPersonConfig = sysConfigMapper.checkConfigKeyUnique("send.test.person");
+ String testPerson = ObjectUtils.isNotEmpty(testPersonConfig) ? testPersonConfig.getConfigValue() : "";
+ if(CollectionUtils.isNotEmpty(serviceSubtaskDetailTraces)){
+ for (ServiceSubtaskDetailTrace serviceSubtaskDetailTrace : serviceSubtaskDetailTraces) {
+ List<String> dutyDeptPersonCodeList = new ArrayList<>();
+ // 鎶� dutyDeptPersonCode 鏁寸悊鍒� list 涓紙濡傛灉澶氫釜浜虹敤閫楀彿鍒嗗壊锛屽垯灞曞紑骞跺幓閲嶏級
+ String dutyDeptPersonCodeStr = serviceSubtaskDetailTrace.getDutyDeptPersonCode();
+ if(StringUtils.isNotEmpty(dutyDeptPersonCodeStr)){
+ String[] dutyDeptPersonCodeSplit = dutyDeptPersonCodeStr.split(",");
+ if (CollectionUtils.isEmpty(dutyDeptPersonCodeList)) {
+ dutyDeptPersonCodeList = new ArrayList<>(Arrays.asList(dutyDeptPersonCodeSplit));
+ } else {
+ dutyDeptPersonCodeList.addAll(Arrays.asList(dutyDeptPersonCodeSplit));
+ }
- if (CollectionUtils.isNotEmpty(dutyDeptPersonCodeList)) {
- for (String dutyDeptPersonCode : dutyDeptPersonCodeList) {
- log.info("銆恠endExceptInfo銆戝彂閫佷汉宸ュ彿锛歿}", dutyDeptPersonCode);
- String dutyDeptPerson = dingTalkService.getDingTalkUserByMobile(dutyDeptPersonCode);
- dingTalkService.sendDingTalkText(exceptContent, dutyDeptPerson);
+ }
+
+ if (StringUtils.isNotBlank(testPerson)) {
+ String[] split = testPerson.split(",");
+ if (CollectionUtils.isEmpty(dutyDeptPersonCodeList)) {
+ dutyDeptPersonCodeList = new ArrayList<>(Arrays.asList(split));
+ } else {
+ dutyDeptPersonCodeList.addAll(Arrays.asList(split));
+ }
+ }
+
+ if (CollectionUtils.isNotEmpty(dutyDeptPersonCodeList)) {
+ for (String dutyDeptPersonCode : dutyDeptPersonCodeList) {
+ log.info("銆恠endExceptInfo銆戝彂閫佷汉宸ュ彿锛歿}", dutyDeptPersonCode);
+ SysUser sysUser = new SysUser();
+ SysUser sysUserVo = new SysUser();
+ sysUserVo.setUserCode(dutyDeptPersonCode);
+// sysUserVo.setOrgid(serviceSubtaskDetailTrace.getOrgid());
+ List<SysUser> users = userService.getUserList(sysUserVo);
+ String phoneNumber = "";
+ if(ObjectUtils.isNotEmpty(users)){
+ sysUser = users.get(0);
+ phoneNumber = sysUser.getPhonenumber();
+ }else {
+ continue;
+ }
+
+ if(StringUtils.isEmpty(phoneNumber)){
+ continue;
+ }
+ String dutyDeptPerson = dingTalkService.getDingTalkUserByMobile(phoneNumber);
+ if(StringUtils.isNotBlank(dutyDeptPerson)){
+ String context = TemplateUtils.render(exceptContent, serviceSubtaskDetailTrace);
+ dingTalkService.sendDingTalkText(context, dutyDeptPerson);
+ //鏇存柊鐘舵��
+ serviceSubtaskDetailTrace.setHandleFlag("1");
+ serviceSubtaskDetailTrace.setUpdateTime(new Date());
+ serviceSubtaskDetailTraceService.updateServiceSubtaskDetailTtrace(serviceSubtaskDetailTrace);
+ }
+ }
+ }
}
}
}
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
index 53166aa..c4d03e0 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -260,6 +260,7 @@
pmks.setDeptcheckFlag("0");
pmks.setInhospstate("1");
pmks.setFuflag("1");
+ pmks.setPatid(16685L);
List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
//1.鍏ラ櫌瀹f暀
--
Gitblit v1.9.3