From fce96ef468291fb9a0e6a4d34ab371315e9485d4 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期六, 03 十月 2026 00:59:44 +0800
Subject: [PATCH] ai优化

---
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/external/ExternalController.java |  109 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 78 insertions(+), 31 deletions(-)

diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/external/ExternalController.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/external/ExternalController.java
index 82a4bb2..c743e03 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/external/ExternalController.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/external/ExternalController.java
@@ -14,12 +14,38 @@
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.Map;
-import java.util.function.Consumer;
 
 import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.lihu.jh.framework.common.pojo.CommonResult.success;
-import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.APPOINTMENT_CREATE_FAIL;
+import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
 
+/**
+ * 渚涚涓夋柟锛圚IS / 闆嗘垚骞冲彴锛夎皟鐢ㄧ殑閫氱敤鎺ュ彛銆�
+ *
+ * <h3>璺敱鏂瑰紡</h3>
+ * 閫氳繃璇锋眰澶� {@code action} 鍖哄垎鏈嶅姟锛屽彇鍊艰 {@link ActionTypeEnum}銆�
+ *
+ * <h3>鏈鏀瑰姩瑕佺偣</h3>
+ * <ol>
+ *   <li><b>琛ユ敞鍐� ECG 涓撳睘 action</b>锛氭帴鍙f枃妗� 6.4/6.5 瀹氫箟
+ *       {@code S050402}锛圗CG 妫�鏌ラ绾︾姸鎬佹柊澧烇級銆亄@code S050502}锛圗CG 妫�鏌ラ绾︾姸鎬佹洿鏂帮級锛�
+ *       涓� pacs 鐨� {@code S050401}/{@code S050501} 骞跺垪銆傚疄娴嬫棩蹇椾腑杩欎袱涓紪鍙�
+ *       灏氭湭鍑虹幇锛�0 娆★級锛屾澶�**涓诲姩鍏煎**锛岄伩鍏嶉櫌鏂瑰垏鎹㈢紪鍙锋椂娑堟伅琚嫆銆�</li>
+ *   <li><b>鍏煎鏃犲悗缂�鍐欐硶</b>锛氭枃妗e畾涔� {@code S0201}/{@code S0202}锛�
+ *       鑰屽疄娴嬫姤鏂囦负 {@code S0201ECG}/{@code S0202ECG}锛屼袱鑰呭潎鎺ユ敹銆�</li>
+ *   <li><b>缁嗗寲閿欒鐮�</b>锛氬師瀹炵幇鎶婃墍鏈夊紓甯哥粺涓�鍘嬫垚
+ *       {@code APPOINTMENT_CREATE_FAIL}锛�"鐢宠鍗曞垱寤哄け璐�"锛夛紝
+ *       瀵艰嚧鎺掗殰鍥伴毦锛堟湰娆¢棶棰樻帓鏌ユ垚鏈嵆鏉ヨ嚜姝わ級銆傜幇鎸�
+ *       銆屾湭鐭� action / 鎶ユ枃瑙f瀽澶辫触 / 璁板綍涓嶅瓨鍦� / 鍏朵粬銆嶅尯鍒嗚繑鍥炪��</li>
+ * </ol>
+ *
+ * <h3>鍏充簬 S0405</h3>
+ * {@code S0405}锛堢敵璇峰崟鐘舵�佹洿鏂帮級鏄�**鍏ㄩ櫌閫氱敤**鏈嶅姟锛屽尰闄細鎶婃墍鏈夋鏌ョ瀹�
+ * 锛圕T/MRI/DR/瓒呭0鈥︼級鐨勭姸鎬佷竴骞舵帹閫併�備笟鍔″眰宸叉寜蹇冪數鑼冨洿杩囨护锛�
+ * 闈炲績鐢靛崟鍙鏃ュ織銆佷笉澶勭悊锛堣瑙� {@code HisEcgFilter}锛夈��
+ *
+ * @author 蹇冪數鎺掗槦瑁呮満绯荤粺
+ */
 @Tag(name = "渚涚涓夋柟璋冪敤鎺ュ彛")
 @RestController
 @RequestMapping("/ecg/external")
@@ -27,18 +53,20 @@
 @Slf4j
 public class ExternalController {
 
+    /** 璇锋眰澶翠腑鐨� action 閿悕 */
+    private static final String HEADER_ACTION = "action";
+
     @Resource
     private AppointmentService appointmentService;
 
     /**
-     * 閫氱敤鎺ュ彛
-     * <p>
-     * 鏀寔浠ヤ笅action绫诲瀷锛�
-     * - S0201ECG: 棰勭害鍒涘缓
-     * - S0202ECG: 棰勭害鏇存柊
+     * 閫氱敤鎺ュ彛銆�
      *
-     * @param dataMap 璇锋眰鏁版嵁
-     * @param headers 璇锋眰澶达紝蹇呴』鍖呭惈action瀛楁
+     * <p>鏀寔鐨� action 瑙� {@link ActionTypeEnum}锛屽寘鎷細
+     * 鐢宠鍗曟柊澧�/鏇存柊銆佺敵璇峰崟鐘舵�佹洿鏂般�佹鏌ラ绾︾姸鎬佹柊澧�/鏇存柊銆�
+     *
+     * @param dataMap 璇锋眰鏁版嵁锛圚L7 V3 杞崲鍚庣殑 Map锛�
+     * @param headers 璇锋眰澶达紝蹇呴』鍖呭惈 {@code action}
      * @return 澶勭悊缁撴灉
      */
     @PermitAll
@@ -47,35 +75,54 @@
     public CommonResult<Boolean> generalInterface(
             @RequestBody @NotNull(message = "璇锋眰鏁版嵁涓嶈兘涓虹┖") Map<String, Object> dataMap,
             @RequestHeader @NotEmpty(message = "璇锋眰澶翠笉鑳戒负绌�") Map<String, String> headers) {
-        log.info("[generalInterface][寮�濮嬪鐞嗚姹� action({}) dataMap({})]", headers.get("action"), dataMap);
 
-        String actionType = headers.get("action");
-        ActionTypeEnum action = ActionTypeEnum.getByType(actionType);
+        String rawAction = headers.get(HEADER_ACTION);
+        ActionTypeEnum action = ActionTypeEnum.getByType(rawAction);
         if (action == null) {
-            log.warn("[generalInterface][鏈煡鐨刟ction绫诲瀷 action({})]", actionType);
-            throw exception(APPOINTMENT_CREATE_FAIL);
+            // 涓嶅啀鍚炴垚"鐢宠鍗曞垱寤哄け璐�"锛屾槑纭憡鐭� action 涓嶅彈鏀寔
+            log.warn("[generalInterface][涓嶆敮鎸佺殑 action({})锛岃鏍稿鎺ュ彛鏂囨。 6.x 浜ゆ槗缂栧彿]", rawAction);
+            throw exception(HIS_ACTION_NOT_SUPPORTED);
         }
 
+        log.info("[generalInterface][寮�濮嬪鐞嗚姹� action({}) dataMap({})]", rawAction, dataMap);
+
         try {
-            // 浣跨敤绛栫暐妯″紡澶勭悊涓嶅悓鐨刟ction
-            Map<ActionTypeEnum, Consumer<Map<String, Object>>> actionHandlers = Map.of(
-                    ActionTypeEnum.S0201ECG, appointmentService::handleAppointmentCreate,
-                    ActionTypeEnum.S0202ECG, appointmentService::handleAppointmentUpdate,
-                    ActionTypeEnum.S040501HIS, appointmentService::handleAppointmentStateUpdate,
-                    ActionTypeEnum.S050401, appointmentService::handleCheckAppointmentUpdate,
-                    ActionTypeEnum.S0405, appointmentService::handleAppointmentStatusUpdate,
-                    ActionTypeEnum.S050501, appointmentService::handleCheckAppointmentUpdate
-            );
-
-            Consumer<Map<String, Object>> handler = actionHandlers.get(action);
-            if (handler == null) {
-                throw exception(APPOINTMENT_CREATE_FAIL);
-            }
-
-            handler.accept(dataMap);
+            dispatch(action, dataMap);
             return success(true);
+        } catch (cn.lihu.jh.framework.common.exception.ServiceException e) {
+            // 涓氬姟寮傚父锛氫繚鐣欏師濮嬮敊璇爜涓庝俊鎭紝渚夸簬 HIS 渚у畾浣�
+            log.error("[generalInterface][涓氬姟澶勭悊澶辫触 action({}) code({}) msg({})]",
+                    rawAction, e.getCode(), e.getMessage());
+            throw e;
         } catch (Exception e) {
-            throw exception(APPOINTMENT_CREATE_FAIL);
+            // 鏈鏈熷紓甯革細鎶ユ枃瑙f瀽澶辫触銆佸瓧娈电己澶卞鑷寸殑 NPE/绫诲瀷杞崲寮傚父绛�
+            log.error("[generalInterface][鎶ユ枃澶勭悊寮傚父 action({}) dataMap({})]", rawAction, dataMap, e);
+            throw exception(HIS_MESSAGE_PARSE_FAIL);
+        }
+    }
+
+    /**
+     * 鎸� action 鍒嗘淳鍒板搴斿鐞嗗櫒銆�
+     * <p>
+     * 浣跨敤 {@link ActionTypeEnum} 鐨勫垎缁勬柟娉曡�岄潪 Map 鏄犲皠锛屾槸涓轰簡璁�
+     * 銆屽悓涓�鏈嶅姟鐨勫绉嶇紪鍙枫�嶏紙pacs / ECG銆佹湁鍚庣紑 / 鏃犲悗缂�锛夎蛋鍚屼竴澶勭悊鍣紝
+     * 閬垮厤鏂板缂栧彿鏃舵紡閰嶃��
+     */
+    private void dispatch(ActionTypeEnum action, Map<String, Object> dataMap) {
+        if (action.isApplyCreate()) {
+            appointmentService.handleAppointmentCreate(dataMap);
+        } else if (action.isApplyUpdate()) {
+            appointmentService.handleAppointmentUpdate(dataMap);
+        } else if (action.isApplyStatusUpdate()) {
+            appointmentService.handleAppointmentStateUpdate(dataMap);
+        } else if (action.isAppointmentStatusCreate()
+                || action.isAppointmentStatusUpdate()) {
+            // 妫�鏌ラ绾︾姸鎬侊細鏂板(S050401/S050402) 涓� 鏇存柊(S050501/S050502)
+            // 鎶ユ枃缁撴瀯鐩稿悓锛岃蛋鍚屼竴澶勭悊鍣�
+            appointmentService.handleCheckAppointmentUpdate(dataMap);
+        } else {
+            // 鏋氫妇鏂板浣嗘湭鎺ュ叆鍒嗘淳閫昏緫鏃剁殑鍏滃簳锛岄伩鍏嶉潤榛樺拷鐣�
+            throw exception(HIS_ACTION_NOT_SUPPORTED);
         }
     }
 }

--
Gitblit v1.9.3