diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/VolumeComponentAnalysisFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/VolumeComponentAnalysisFacade.java index df58573..6f6e501 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/VolumeComponentAnalysisFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/VolumeComponentAnalysisFacade.java @@ -7,7 +7,10 @@ import com.lyms.platform.common.result.BaseResponse; import com.lyms.platform.common.result.PageResult; import com.lyms.platform.common.result.RespBuilder; import com.lyms.platform.common.utils.DateUtil; +import com.lyms.platform.operate.web.service.PatientWeightService; import com.lyms.platform.operate.web.service.impl.BaseServiceImpl; +import com.lyms.platform.operate.web.service.impl.ComputeKulServiceManager; +import com.lyms.platform.pojo.BodyMassAnalysisModel; import com.lyms.platform.pojo.Patients; import com.lyms.platform.pojo.TemporaryUserModel; import com.lyms.platform.pojo.VolumeComponentAnalysisModel; @@ -18,7 +21,6 @@ import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletRequest; import java.util.*; @Component @@ -32,6 +34,12 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { @Autowired private AutoMatchFacade autoMatchFacade; + @Autowired + private ComputeKulServiceManager computeKulServiceManager; + + @Autowired + private PatientWeightService patientWeightService; + public BaseObjectResponse addComponentAnalysis(VolumeComponentAnalysisModel volume) { mongoTemplate.insert(volume); BaseObjectResponse objectResponse = new BaseObjectResponse(); @@ -96,23 +104,299 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { if (volumeComponentAnalysisModel != null) { Patients patients = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(volumeComponentAnalysisModel.getParentId()).and("yn").is(YnEnums.YES.getId()).and("hospitalId").is(hospitalId)), Patients.class); if (patients != null) { - Map userMap = new HashMap<>(); - userMap.put("username", patients.getUsername()); - userMap.put("age", patients.getAge()); - userMap.put("height", volumeComponentAnalysisModel.getHeight()); - userMap.put("week", DateUtil.getWeekDesc(patients.getLastMenses(), new Date())); - userMap.put("kacl", "能量值"); - userMap.put("bmi", "bmi值"); - userMap.put("yqWeight", "孕前体重"); - userMap.put("weight", volumeComponentAnalysisModel.getWeight()); - data.add(userMap); + data = setData(patients, volumeComponentAnalysisModel); } - Map basicsInfo = new HashMap<>(); - basicsInfo.put("basicsInfo", volumeComponentAnalysisModel); } - - return null; + BaseObjectResponse objectResponse = new BaseObjectResponse(); + objectResponse.setErrorcode(ErrorCodeConstants.SUCCESS); + objectResponse.setErrormsg("成功"); + objectResponse.setData(data); + return objectResponse; } + public List> setData(Patients patients, VolumeComponentAnalysisModel volumeComponentAnalysisModel) { + List> data = new ArrayList<>(); + Map userMap = new HashMap<>(); + //用户基本信息 + userMap.put("username", patients.getUsername()); + userMap.put("age", patients.getAge()); + userMap.put("height", volumeComponentAnalysisModel.getHeight()); + userMap.put("week", DateUtil.getWeekDesc(patients.getLastMenses(), new Date())); + userMap.put("kacl", "能量值"); + userMap.put("bmi", "bmi值"); + userMap.put("yqWeight", "孕前体重"); + userMap.put("weight", volumeComponentAnalysisModel.getWeight()); + data.add(userMap); + //人体成分分析信息 + Map componentInfo = new HashMap<>(); + + componentInfo.put("icw", volumeComponentAnalysisModel.getIcw()); + componentInfo.put("ecw", volumeComponentAnalysisModel.getEcw()); + componentInfo.put("protein", volumeComponentAnalysisModel.getProtein()); + componentInfo.put("inorganicSalt", volumeComponentAnalysisModel.getBone());//无机盐 + componentInfo.put("fat", volumeComponentAnalysisModel.getFat()); + componentInfo.put("waterContent", Double.valueOf(volumeComponentAnalysisModel.getIcw() + Double.valueOf(volumeComponentAnalysisModel.getEcw()))); + componentInfo.put("muscle", volumeComponentAnalysisModel.getMuscle()); + componentInfo.put("weight", volumeComponentAnalysisModel.getWeight()); + data.add(componentInfo); + //基本评估 + Map basicInfo = new HashMap<>(); + basicInfo.put("weight", volumeComponentAnalysisModel.getWeight()); + basicInfo.put("muscle", volumeComponentAnalysisModel.getMuscle()); + basicInfo.put("pbf", volumeComponentAnalysisModel.getPbf()); + basicInfo.put("bone", volumeComponentAnalysisModel.getBone()); + basicInfo.put("smm", volumeComponentAnalysisModel.getSmm()); + data.add(basicInfo); + //内脏脂肪分析 + Map viscusInfo = new HashMap<>(); + viscusInfo.put("trFat", volumeComponentAnalysisModel.getTrFat()); + viscusInfo.put("visceralLevel", volumeComponentAnalysisModel.getVfi()); + data.add(viscusInfo); + //营养评估 + Map basalMetabolismInfo = new HashMap<>(); + basalMetabolismInfo.put("bmr", volumeComponentAnalysisModel.getBmr()); + basalMetabolismInfo.put("protein", range(DateUtil.getWeek(patients.getLastMenses(), new Date()), + Double.valueOf(volumeComponentAnalysisModel.getWeight()), Double.valueOf(volumeComponentAnalysisModel.getProtein()), "dbz")); + basalMetabolismInfo.put("fat", range(DateUtil.getWeek(patients.getLastMenses(), new Date()), Double.valueOf(volumeComponentAnalysisModel.getWeight()), + Double.valueOf(volumeComponentAnalysisModel.getFat()), "zf")); + basalMetabolismInfo.put("wjy", range(DateUtil.getWeek(patients.getLastMenses(), new Date()), Double.valueOf(volumeComponentAnalysisModel.getWeight()), + Double.valueOf(volumeComponentAnalysisModel.getBone()), "wjy")); + data.add(basalMetabolismInfo); + //节段分析 + Map limbsInfo = new HashMap<>(); + limbsInfo.put("trWater", volumeComponentAnalysisModel.getTrWater());//躯干水分 + limbsInfo.put("laWater", volumeComponentAnalysisModel.getLaWater());//左上肢水分 + limbsInfo.put("raWater", volumeComponentAnalysisModel.getRaWater());//右上肢水分 + limbsInfo.put("llWater", volumeComponentAnalysisModel.getLlWater());//左下肢水分 + limbsInfo.put("rlWater", volumeComponentAnalysisModel.getRlWater());//右下肢水分 + + limbsInfo.put("trFat", volumeComponentAnalysisModel.getTrFat()); + limbsInfo.put("laFat", volumeComponentAnalysisModel.getLaFat()); + limbsInfo.put("raFat", volumeComponentAnalysisModel.getRaFat()); + limbsInfo.put("llFat", volumeComponentAnalysisModel.getLlFat()); + limbsInfo.put("rlFat", volumeComponentAnalysisModel.getRlFat()); + data.add(limbsInfo); + //报告内容 + double bmi = Double.valueOf(patientWeightService.getBmi("65", "175")); + //计算热量值 + Map kmap = computeKulServiceManager.getComputeKulByRisk("").getComputeKul(56.5, + Double.parseDouble(volumeComponentAnalysisModel.getWeight()), DateUtil.getWeek(patients.getLastMenses(), new Date()), + bmi, "1", "175", "0"); + //获取体质 + String tz = range(DateUtil.getWeek(patients.getLastMenses(), new Date()), + Double.valueOf(volumeComponentAnalysisModel.getWeight()), Double.valueOf(volumeComponentAnalysisModel.getProtein()), "zf"); + //肌肉的计算规则 + String jr = range(DateUtil.getWeek(patients.getLastMenses(), new Date()), + Double.valueOf(volumeComponentAnalysisModel.getWeight()), Double.valueOf(volumeComponentAnalysisModel.getProtein()), "zf"); -} + //无机盐 + String wjy = range(DateUtil.getWeek(patients.getLastMenses(), new Date()), Double.valueOf(volumeComponentAnalysisModel.getWeight()), + Double.valueOf(volumeComponentAnalysisModel.getBone()), "wjy"); + + double kulStart = Double.valueOf(kmap.get("kulStart")); + int k1 = ((int) kulStart / 100) * 100; + double k2 = kulStart - k1; + if (k2 > 50) { + k1 += 100; + } + + if (k1 < 1000) { + k1 = 1000; + } else if (k1 > 3300) { + k1 = 3300; + } + String type = null; + String evaluationType = null; + //低体脂低肌肉 + if ("不足".equals(tz) && "不足".equals(jr)) { + type = "5"; + evaluationType = "3"; + //超体制底肌肉 + } else if ("过量".equals(tz) && "不足".equals(jr)) { + type = "3"; + evaluationType = "4"; + //低肌肉 + } else if ("正常".equals(tz) && "不足".equals(jr)) { + type = "2"; + evaluationType = "5"; + //低体脂 + } else if ("不足".equals(tz) && "正常".equals(jr)) { + type = "4"; + evaluationType = "2"; + //超体制 + } else if ("过量".equals(tz) && "正常".equals(jr)) { + type = "1"; + evaluationType = "1"; + //正常 + } else { + type = "6"; + evaluationType = "8"; + } + if ("过量".equals(wjy)) { + evaluationType = "7"; + } else if ("不足".equals(wjy)) { + evaluationType = "6"; + } + + //报告内容 + BodyMassAnalysisModel bodyMassAnalysisModel = mongoTemplate.findOne(Query.query(Criteria.where("type").is(type).and("kcal").is(k1)), BodyMassAnalysisModel.class); + //食谱 + if (null != bodyMassAnalysisModel) { + Map recipesInfo = new HashMap<>(); + recipesInfo.put("breakfast", bodyMassAnalysisModel.getBreakfast()); + recipesInfo.put("breakfastAdd", bodyMassAnalysisModel.getBreakfastAdd()); + recipesInfo.put("lunch", bodyMassAnalysisModel.getLunch()); + recipesInfo.put("lunchAdd", bodyMassAnalysisModel.getLunchAdd()); + recipesInfo.put("dinner", bodyMassAnalysisModel.getDinner()); + recipesInfo.put("dinnerAdd", bodyMassAnalysisModel.getDinnerAdd()); + data.add(recipesInfo); + Integer week = DateUtil.getWeek(patients.getLastMenses()); + //膳食结构 + Map dietInfo = new HashMap<>(); + if (week <= 12) { + dietInfo.put("diet", bodyMassAnalysisModel.getEarlySuggests()); + } else if (week >= 13 && week <= 28) { + dietInfo.put("diet", bodyMassAnalysisModel.getMiddleSuggests()); + } else if (week >= 28 && week <= 40) { + dietInfo.put("diet", bodyMassAnalysisModel.getLaterSuggests()); + } + data.add(dietInfo); + } + BodyMassAnalysisModel nutrition = mongoTemplate.findOne(Query.query(Criteria.where("evaluationType").is(evaluationType)), BodyMassAnalysisModel.class); + if (null != nutrition) { + //人体成分营养评价 + Map nutritionInfo = new HashMap<>(); + nutritionInfo.put("nutritionalEvaluation", nutrition.getNutritionalEvaluationInfo()); + data.add(nutritionInfo); + //食谱规则 + Map recipeRulesInfo = new HashMap<>(); + recipeRulesInfo.put("recipesRule", nutrition.getRecipesRule()); + data.add(recipeRulesInfo); + } + + return data; + } + + private String range(Integer week, double weight, double value, String type) { + //孕早期 + if (week >= 0 && week <= 12) { + //蛋白质 + if ("dbz".equals(type)) { + double d = weight * 0.13;//最低 + double c = weight * 0.17;//最高 + if (value < d) { + return "不足"; + } else { + return "正常"; + } + } else if ("zf".equals(type)) { + double b = weight * 21.4; + double c = weight * 0.35; + if (value < b) { + return "不足"; + } else if (value > c) { + return "过量"; + } else { + return "正常"; + } + } else if ("wjy".equals(type)) { + double b = weight * 0.033; + double c = weight * 0.047; + if (value < b) { + return "不足"; + } else if (value > c) { + return "过量"; + } else { + return "正常"; + } + } else if ("jr".equals(type)) { + double b = weight * 0.65; + double c = weight * 0.8; + if (value < b) { + return "低肌肉"; + } else { + return "正常"; + } + } + //孕中期 + } else if (week >= 13 && week <= 28) { + if ("dbz".equals(type)) { + double d = weight * 0.15; + double c = weight * 0.18; + if (value < d) { + return "不足"; + } else { + return "正常"; + } + } else if ("zf".equals(type)) { + double b = weight * 21.4; + double c = weight * 0.35; + if (value < b) { + return "不足"; + } else if (value > c) { + return "过量"; + } else { + return "正常"; + } + } else if ("wjy".equals(type)) { + double b = weight * 0.034; + double c = weight * 0.048; + if (value < b) { + return "不足"; + } else if (value > c) { + return "过量"; + } else { + return "正常"; + } + } else if ("jr".equals(type)) { + double b = weight * 0.67; + double c = weight * 0.8; + if (value < b) { + return "低肌肉"; + } else { + return "正常"; + } + } + //孕晚期 + } else if (week >= 29 && week <= 40) { + if ("dbz".equals(type)) { + double b = weight * 15.78; + double c = weight * 19.2; + if (value < b) { + return "不足"; + } else { + return "正常"; + } + } else if ("zf".equals(type)) { + double b = weight * 0.25; + double c = weight * 0.35; + if (value < b) { + return "不足"; + } else if (value > c) { + return "过量"; + } else { + return "正常"; + } + } else if ("wjy".equals(type)) { + double b = weight * 0.035; + double c = weight * 0.055; + if (value < b) { + return "不足"; + } else if (value > c) { + return "过量"; + } else { + return "正常"; + } + } else if ("jr".equals(type)) { + double b = weight * 0.7; + double c = weight * 0.85; + if (value < b) { + return "低肌肉"; + } else { + return "正常"; + } + } + } + return ""; + } +} \ No newline at end of file