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