|
@@ -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) {
|