|  | @@ -245,52 +245,6 @@ 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;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 获取健康指标值
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -308,24 +262,85 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              switch (type) {
 | 
	
		
			
				|  |  | -                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);
 | 
	
		
			
				|  |  | +                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;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  default:
 | 
	
		
			
				|  |  |                      throw new ServiceException("不支持的健康指标类型: " + type);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          } catch (Exception e) {
 | 
	
		
			
				|  |  |              throw new ServiceException("获取健康指标值失败: " + e.getMessage());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return null;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -397,9 +412,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
 | 
	
		
			
				|  |  |                  // 如果没有匹配的级别,则返回异常数据
 | 
	
		
			
				|  |  |                  return HealthDataLevelEnum.EXCEPTION.getValue();
 | 
	
		
			
				|  |  |              // 可以继续添加其他类型,如血压、尿酸等
 | 
	
		
			
				|  |  | -            case URIC_ACID: // 尿酸
 | 
	
		
			
				|  |  | -            case WAIST: // 腰围
 | 
	
		
			
				|  |  | -            case HIP: // 臀围
 | 
	
		
			
				|  |  | +            case URIC_ACID:
 | 
	
		
			
				|  |  |                  // 判断性别 0-男 1-女
 | 
	
		
			
				|  |  |                  String sex = fsUserHealthData.getSex();
 | 
	
		
			
				|  |  |                  String key;
 | 
	
	
		
			
				|  | @@ -487,6 +500,26 @@ 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) {
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -518,7 +551,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) */
 | 
	
	
		
			
				|  | @@ -531,43 +564,6 @@ 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("臀围数据登记失败");
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
	
		
			
				|  | @@ -582,7 +578,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 == 0 || type == 1 || type == 4) { // 尿酸查询等级信息时需要性别信息
 | 
	
		
			
				|  |  | +        if (type == 4) { // 尿酸查询等级信息时需要性别信息
 | 
	
		
			
				|  |  |              // 根据userId 查询用户信息
 | 
	
		
			
				|  |  |              FsUserInfo user = fsUserInfoService.selectFsUserInfoById(fsUserHealthData.getUserId());
 | 
	
		
			
				|  |  |              if (StringUtils.isEmpty(user.getSex()) || "2".equals(user.getSex())) {
 | 
	
	
		
			
				|  | @@ -591,7 +587,7 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
 | 
	
		
			
				|  |  |              fsUserHealthData.setSex(user.getSex());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          // 2-血糖,3-血压,4-尿酸 5-BMI 判断等级
 | 
	
		
			
				|  |  | -        if (type == 0 || type == 1 || type == 2 || type == 3 || type == 4) {
 | 
	
		
			
				|  |  | +        if (type == 2 || type == 3 || type == 4) {
 | 
	
		
			
				|  |  |              // 计算测量值对应等级
 | 
	
		
			
				|  |  |              int level = getHealthIndicatorLevel(fsUserHealthData);
 | 
	
		
			
				|  |  |              fsUserHealthData.setLevel(level);
 | 
	
	
		
			
				|  | @@ -603,8 +599,13 @@ public class FsUserHealthDataServiceImpl extends ServiceImpl<FsUserHealthDataMap
 | 
	
		
			
				|  |  |              int level = getHealthIndicatorLevel(fsUserHealthData);
 | 
	
		
			
				|  |  |              fsUserHealthData.setLevel(level);
 | 
	
		
			
				|  |  |              fsUserHealthData.setValue1(value1);
 | 
	
		
			
				|  |  | -        }else {
 | 
	
		
			
				|  |  | -            throw new ServiceException("不支持的测量类型");
 | 
	
		
			
				|  |  | +        } 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());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          // 登记检测数据信息
 | 
	
		
			
				|  |  |          if (insertFsUserHealthData(fsUserHealthData) <= 0) {
 |