Browse Source

健康档案新增 时 腰围 臀围 登记等级
健康数据检测的时候 腰围 臀围 登记等级

xgb 1 week ago
parent
commit
07ac934a93

+ 8 - 0
fs-service/src/main/java/com/fs/his/config/HealthIndicatorConfig.java

@@ -30,6 +30,14 @@ public class HealthIndicatorConfig {
      * BMI指标
      */
     private Map<String, Object> bmi;
+    /**
+     * 腰围
+     */
+    private Map<String, Object> waist;
+    /**
+     * 臀围
+     */
+    private Map<String, Object> hip;
 
     public static final String SEVERITY = "severity";
 

+ 2 - 2
fs-service/src/main/java/com/fs/his/enums/HealthDataTypeEnum.java

@@ -11,8 +11,8 @@ import lombok.Getter;
 @Getter
 public enum HealthDataTypeEnum {
     // 0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI
-    WAIST( 0, "腰围",""),
-    HIP( 1, "臀围",""),
+    WAIST( 0, "腰围","waist"),
+    HIP( 1, "臀围","hip"),
     GLUCOSE( 2, "血糖","bloodGlucose"),
     BLOOD_PRESSURE( 3, "血压","bloodPressure"),
     URIC_ACID( 4, "尿酸","uricAcid"),

+ 103 - 104
fs-service/src/main/java/com/fs/his/service/impl/FsUserHealthDataServiceImpl.java

@@ -245,6 +245,52 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
         return HealthIndicatorConfig.fromJson(str);
     }
 
+    /**
+     * @Description: 解析健康指标配置
+     * @Param:
+     * @Return:
+     * @Author xgb
+     * @Date 2025/9/3 10:55
+     */
+    private String parseHealthIndicatorConfig(Map<String, Object> map,String key,String level) {
+        if (StringUtils.equalsAny(key, "severity", "male", "female")) {
+            // 处理严重程度级别
+            List<Map<String, Object>> severityList = (List<Map<String, Object>>) map.get(key);
+            for (Map<String, Object> severity : severityList) {
+                if (level.equals(severity.get("level"))) {
+                    return (String) severity.get("range");
+                }
+            }
+        } else {
+            // 处理普通键值
+            Map<String, Object> keyMap = (Map<String, Object>) map.get(key);
+            if (keyMap != null) {
+                return (String) keyMap.get(level);
+            }
+        }
+        return null;
+    }
+
+    private String parseHealthIndicatorConfigTwo(Map<String, Object> map,String key,String level,String subType) {
+        if ("severity".equals(key)) {
+            // 处理血压严重程度级别
+            List<Map<String, Object>> severityList = (List<Map<String, Object>>) map.get("severity");
+            for (Map<String, Object> severity : severityList) {
+                // 同时匹配级别和血压类型(收缩压/舒张压)
+                if (level.equals(severity.get("level")) && subType.equals(severity.get("type"))) {
+                    return (String) severity.get("range");
+                }
+            }
+        } else {
+            // 处理保护范围等
+            Map<String, Object> keyMap = (Map<String, Object>) map.get(key);
+            if (keyMap != null) {
+                return (String) keyMap.get(level);
+            }
+        }
+        return null;
+    }
+
     /**
      * 获取健康指标值
      *
@@ -262,85 +308,24 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
 
         try {
             switch (type) {
-                case "bloodGlucose":
-                    Map<String, Object> bloodGlucose = config.getBloodGlucose();
-                    if ("severity".equals(key)) {
-                        // 处理严重程度级别
-                        List<Map<String, Object>> severityList = (List<Map<String, Object>>) bloodGlucose.get("severity");
-                        for (Map<String, Object> severity : severityList) {
-                            if (level.equals(severity.get("level"))) {
-                                return (String) severity.get("range");
-                            }
-                        }
-                    } else {
-                        // 处理普通键值
-                        Map<String, Object> keyMap = (Map<String, Object>) bloodGlucose.get(key);
-                        if (keyMap != null) {
-                            return (String) keyMap.get(level);
-                        }
-                    }
-                    break;
-
-                case "bloodPressure":
-                    Map<String, Object> bloodPressure = config.getBloodPressure();
-                    if ("severity".equals(key)) {
-                        // 处理血压严重程度级别
-                        List<Map<String, Object>> severityList = (List<Map<String, Object>>) bloodPressure.get("severity");
-                        for (Map<String, Object> severity : severityList) {
-                            // 同时匹配级别和血压类型(收缩压/舒张压)
-                            if (level.equals(severity.get("level")) && subType.equals(severity.get("type"))) {
-                                return (String) severity.get("range");
-                            }
-                        }
-                    } else {
-                        // 处理保护范围等
-                        Map<String, Object> keyMap = (Map<String, Object>) bloodPressure.get(key);
-                        if (keyMap != null) {
-                            return (String) keyMap.get(level);
-                        }
-                    }
-                    break;
-
-                case "uricAcid":
-                    Map<String, Object> uricAcid = config.getUricAcid();
-                    if ("male".equals(key) || "female".equals(key)) {
-                        List<Map<String, Object>> genderList = (List<Map<String, Object>>) uricAcid.get(key);
-                        if (genderList != null) {
-                            for (Map<String, Object> severity : genderList) {
-                                if (level.equals(severity.get("level"))) {
-                                    return (String) severity.get("range");
-                                }
-                            }
-                        }
-                    } else {
-                        Map<String, Object> keyMap = (Map<String, Object>) uricAcid.get(key);
-                        if (keyMap != null) {
-                            return (String) keyMap.get(level);
-                        }
-                    }
-                    break;
-
-                case "bmi":
-                    Map<String, Object> bmi = config.getBmi();
-                    if ("severity".equals(key)) {
-                        // 处理BMI严重程度级别
-                        List<Map<String, Object>> severityList = (List<Map<String, Object>>) bmi.get("severity");
-                        for (Map<String, Object> severity : severityList) {
-                            if (level.equals(severity.get("level"))) {
-                                return (String) severity.get("range");
-                            }
-                        }
-                    }
-                    break;
-
+                case "bloodGlucose": // 血糖
+                    return parseHealthIndicatorConfig(config.getBloodGlucose(), key, level);
+                case "bloodPressure": // 血压
+                    return parseHealthIndicatorConfigTwo(config.getBloodPressure(), key, level, subType);
+                case "uricAcid":// 尿酸
+                    return parseHealthIndicatorConfig(config.getUricAcid(), key, level);
+                case "waist":// 腰围
+                    return parseHealthIndicatorConfig(config.getWaist(), key, level);
+                case "hip":// 臀围
+                    return parseHealthIndicatorConfig(config.getHip(), key, level);
+                case "bmi":// BMI
+                    return parseHealthIndicatorConfig(config.getBmi(), key, level);
                 default:
                     throw new ServiceException("不支持的健康指标类型: " + type);
             }
         } catch (Exception e) {
             throw new ServiceException("获取健康指标值失败: " + e.getMessage());
         }
-
-        return null;
     }
 
     /**
@@ -412,7 +397,9 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
                 // 如果没有匹配的级别,则返回异常数据
                 return HealthDataLevelEnum.EXCEPTION.getValue();
             // 可以继续添加其他类型,如血压、尿酸等
-            case URIC_ACID:
+            case URIC_ACID: // 尿酸
+            case WAIST: // 腰围
+            case HIP: // 臀围
                 // 判断性别 0-男 1-女
                 String sex = fsUserHealthData.getSex();
                 String key;
@@ -500,26 +487,6 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
 
         }
 
-        // 若存在腰围
-        if (fsUserHealthProfile.getWaistCircumference() != null) {
-            /** 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI) */
-            fsUserHealthData.setMeasurementType(HealthDataTypeEnum.WAIST.getValue());
-            fsUserHealthData.setValue1(fsUserHealthProfile.getWaistCircumference());
-            if (insertFsUserHealthData(fsUserHealthData) <= 0) {
-                throw new ServiceException("腰围数据登记失败");
-            }
-        }
-
-        // 若存在臀围
-        if (fsUserHealthProfile.getHipCircumference() != null) {
-            /** 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI) */
-            fsUserHealthData.setMeasurementType(HealthDataTypeEnum.HIP.getValue());
-            fsUserHealthData.setValue1(fsUserHealthProfile.getHipCircumference());
-            if (insertFsUserHealthData(fsUserHealthData) <= 0) {
-                throw new ServiceException("臀围数据登记失败");
-            }
-        }
-
         // 若存在血压
         if (fsUserHealthProfile.getSystolicPressure() != null && fsUserHealthProfile.getDiastolicPressure() != null) {
 
@@ -551,7 +518,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
             // 查询用户信息获取 性别
             FsUserInfo fsUserInfo = fsUserInfoService.selectFsUserInfoById(fsUserHealthProfile.getUserId());
             if (fsUserInfo == null || StringUtils.isEmpty(fsUserInfo.getSex())) {
-                throw new ServiceException("无法获取用户性别,请完善用户信息");
+                throw new ServiceException("用户已注销或不存在");
             }
 
             /** 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI) */
@@ -564,6 +531,43 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
                 throw new ServiceException("尿酸数据登记失败");
             }
         }
+
+        // 若存在腰围
+        if (fsUserHealthProfile.getWaistCircumference() != null) {
+            // 查询用户信息获取 性别
+            FsUserInfo fsUserInfo = fsUserInfoService.selectFsUserInfoById(fsUserHealthProfile.getUserId());
+            if (fsUserInfo == null || StringUtils.isEmpty(fsUserInfo.getSex())) {
+                throw new ServiceException("用户已注销或不存在");
+            }
+
+            /** 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI) */
+            fsUserHealthData.setMeasurementType(HealthDataTypeEnum.WAIST.getValue());
+            fsUserHealthData.setValue1(fsUserHealthProfile.getWaistCircumference());
+            fsUserHealthData.setSex(fsUserInfo.getSex());
+            int healthIndicatorLevel = getHealthIndicatorLevel(fsUserHealthData);
+            fsUserHealthData.setLevel(healthIndicatorLevel);
+            if (insertFsUserHealthData(fsUserHealthData) <= 0) {
+                throw new ServiceException("腰围数据登记失败");
+            }
+        }
+
+        // 若存在臀围
+        if (fsUserHealthProfile.getHipCircumference() != null) {
+            // 查询用户信息获取 性别
+            FsUserInfo fsUserInfo = fsUserInfoService.selectFsUserInfoById(fsUserHealthProfile.getUserId());
+            if (fsUserInfo == null || StringUtils.isEmpty(fsUserInfo.getSex())) {
+                throw new ServiceException("用户已注销或不存在");
+            }
+            /** 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI) */
+            fsUserHealthData.setMeasurementType(HealthDataTypeEnum.HIP.getValue());
+            fsUserHealthData.setValue1(fsUserHealthProfile.getHipCircumference());
+            fsUserHealthData.setSex(fsUserInfo.getSex());
+            int healthIndicatorLevel = getHealthIndicatorLevel(fsUserHealthData);
+            fsUserHealthData.setLevel(healthIndicatorLevel);
+            if (insertFsUserHealthData(fsUserHealthData) <= 0) {
+                throw new ServiceException("臀围数据登记失败");
+            }
+        }
     }
 
     /**
@@ -578,7 +582,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
     public void addHealthData(FsUserHealthData fsUserHealthData) {
         int type = fsUserHealthData.getMeasurementType();
         // 0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI
-        if (type == 4) { // 尿酸查询等级信息时需要性别信息
+        if (type == 0 || type == 1 || type == 4) { // 尿酸查询等级信息时需要性别信息
             // 根据userId 查询用户信息
             FsUserInfo user = fsUserInfoService.selectFsUserInfoById(fsUserHealthData.getUserId());
             if (StringUtils.isEmpty(user.getSex()) || "2".equals(user.getSex())) {
@@ -587,7 +591,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
             fsUserHealthData.setSex(user.getSex());
         }
         // 2-血糖,3-血压,4-尿酸 5-BMI 判断等级
-        if (type == 2 || type == 3 || type == 4) {
+        if (type == 0 || type == 1 || type == 2 || type == 3 || type == 4) {
             // 计算测量值对应等级
             int level = getHealthIndicatorLevel(fsUserHealthData);
             fsUserHealthData.setLevel(level);
@@ -599,13 +603,8 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
             int level = getHealthIndicatorLevel(fsUserHealthData);
             fsUserHealthData.setLevel(level);
             fsUserHealthData.setValue1(value1);
-        } else if (type == 0 || type == 1) {
-            // 获取性别信息
-            FsUserInfo user = fsUserInfoService.selectFsUserInfoById(fsUserHealthData.getUserId());
-            if (user == null || StringUtils.isEmpty(user.getSex())) {
-                throw new ServiceException("无法获取用户性别,请完善用户信息");
-            }
-            fsUserHealthData.setSex(user.getSex());
+        }else {
+            throw new ServiceException("不支持的测量类型");
         }
         // 登记检测数据信息
         if (insertFsUserHealthData(fsUserHealthData) <= 0) {

+ 1 - 0
fs-service/src/main/resources/application-dev.yml

@@ -44,6 +44,7 @@ spring:
                 # 主库数据源
                 master:
                     url: jdbc:mysql://139.186.77.83:3306/zk_target_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+#                    url: jdbc:mysql://139.186.77.83:3306/ylrz_his_scrm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                     username: Rtroot
                     password: Rtroot
                 # 初始连接数