Просмотр исходного кода

feat(mind): push WeChat template notifications for high-severity alerts

- EmotionAlertService.checkRiskAfterCheckin: push crisis alert to parents when checkin triggers high-severity alert
- MentalHealthScreenService.submitScreen: push crisis alert for severe screening results or suicide ideation
Xiaogang Liao 2 месяцев назад
Родитель
Сommit
56211c6197

+ 16 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/EmotionAlertService.java

@@ -29,6 +29,9 @@ public class EmotionAlertService {
     @Resource
     @Resource
     private EmotionCheckinMapper emotionCheckinMapper;
     private EmotionCheckinMapper emotionCheckinMapper;
 
 
+    @Resource
+    private WechatAlertTemplateService wechatAlertTemplateService;
+
     /**
     /**
      * 检查情绪打卡是否存在风险,返回新创建的告警列表
      * 检查情绪打卡是否存在风险,返回新创建的告警列表
      */
      */
@@ -97,6 +100,19 @@ public class EmotionAlertService {
             }
             }
         }
         }
 
 
+        // Push notifications for high-severity alerts
+        for (EmotionAlert alert : newAlerts) {
+            if ("high".equals(alert.getSeverity())) {
+                try {
+                    wechatAlertTemplateService.sendCrisisAlertToParents(
+                            alert.getChildId(), alert.getAlertType(),
+                            alert.getSeverity(), alert.getTitle(), alert.getMessage());
+                } catch (Exception e) {
+                    log.error("发送危机告警推送失败: {}", e.getMessage());
+                }
+            }
+        }
+
         return newAlerts;
         return newAlerts;
     }
     }
 
 

+ 19 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/MentalHealthScreenService.java

@@ -28,6 +28,9 @@ public class MentalHealthScreenService {
     @Resource
     @Resource
     private EmotionAlertMapper emotionAlertMapper;
     private EmotionAlertMapper emotionAlertMapper;
 
 
+    @Resource
+    private WechatAlertTemplateService wechatAlertTemplateService;
+
     private final ObjectMapper objectMapper = new ObjectMapper();
     private final ObjectMapper objectMapper = new ObjectMapper();
 
 
     // === PHQ-9 量表定义 ===
     // === PHQ-9 量表定义 ===
@@ -117,6 +120,22 @@ public class MentalHealthScreenService {
             createAlertFromScreen(screen, severity, riskFlags);
             createAlertFromScreen(screen, severity, riskFlags);
         }
         }
 
 
+        // Push notification for high-severity alerts
+        if ("severe".equals(severity) || riskFlags.contains("suicide_ideation")) {
+            try {
+                wechatAlertTemplateService.sendCrisisAlertToParents(
+                        screen.getChildId(), "psychological_screening",
+                        "high",
+                        "心理筛查风险告警",
+                        riskFlags.contains("suicide_ideation") ?
+                                "筛查发现自杀/自伤风险,请立即关注" :
+                                screen.getScreenType() + "筛查严重异常"
+                );
+            } catch (Exception e) {
+                log.error("发送筛查告警推送失败: {}", e.getMessage());
+            }
+        }
+
         return toVO(screen);
         return toVO(screen);
     }
     }