diff --git a/platform-dal/src/main/java/com/lyms/platform/pojo/VolumeComponentAnalysisModel.java b/platform-dal/src/main/java/com/lyms/platform/pojo/VolumeComponentAnalysisModel.java index dcef113..3db4dd9 100644 --- a/platform-dal/src/main/java/com/lyms/platform/pojo/VolumeComponentAnalysisModel.java +++ b/platform-dal/src/main/java/com/lyms/platform/pojo/VolumeComponentAnalysisModel.java @@ -4,6 +4,8 @@ import com.lyms.platform.beans.SerialIdEnum; import com.lyms.platform.common.result.BaseModel; import org.springframework.data.mongodb.core.mapping.Document; +import java.util.Date; + /** * 体成分分析 */ @@ -13,8 +15,9 @@ public class VolumeComponentAnalysisModel extends BaseModel { private String id; //医院id private String hospitalId; - //病人id + //病人档案id private String patientId; + //病人id private String pid; //就诊卡号 private String vcCardNo; @@ -22,6 +25,13 @@ public class VolumeComponentAnalysisModel extends BaseModel { private String certNo; //证件类型Id private String certType; + //创建日期(测量日期) + private Date created; + // 孕前体重 + private String beforeWeight; + //手机号码 + private String phone; + private Integer yn; private String parentId; @@ -35,7 +45,7 @@ public class VolumeComponentAnalysisModel extends BaseModel { private String sex;// 1;,                    //性别 (男1,女2) private String height;// 178.5;,              //身高 private String birthYear;// 1985;,            //出生年份 - private String weight; // 72.5;,              //体重 + private String weight; // 72.5;,              //体重(当前体重) private String fat;// 23.1;,                 //脂肪 private String bone;// 3.8;,                //骨质 private String protein;// 18.6;,             //蛋白质 @@ -76,8 +86,8 @@ public class VolumeComponentAnalysisModel extends BaseModel { private String rlMuscle;// 14.3;      //右下肢肌肉 private String weightMax; // 84.5;,    //体重正常范围的高值 private String weightMin; // 69.5;,    //体重正常范围的低值 - private String fatMax; // 22.5;,      //体重正常范围的高值 - private String fatMin; // 13.6;,      //体重正常范围的低值 + private String fatMax; // 22.5;,      //脂肪正常范围的高值 + private String fatMin; // 13.6;,      //脂肪正常范围的低值 private String boneMax; // 3.7;,    //骨质正常范围的高值 private String boneMin; // 3.1;,    //骨质正常范围的低值 private String proteinMax; // 22.5;,    //蛋白质正常范围的高值 @@ -99,6 +109,38 @@ public class VolumeComponentAnalysisModel extends BaseModel { private String vfiMax; // 5;,    //内脏脂肪指数正常范围的高值 private String vfiMin; // 10;    //内脏脂肪指数正常范围的低值 + public Integer getYn() { + return yn; + } + + public void setYn(Integer yn) { + this.yn = yn; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getBeforeWeight() { + return beforeWeight; + } + + public void setBeforeWeight(String beforeWeight) { + this.beforeWeight = beforeWeight; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + public static long getSerialVersionUID() { return serialVersionUID; } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/VolumeComponentAnalysisController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/VolumeComponentAnalysisController.java index c293871..9a1c519 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/VolumeComponentAnalysisController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/VolumeComponentAnalysisController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; +import java.text.ParseException; /** * 体成分分析 @@ -59,9 +60,8 @@ public class VolumeComponentAnalysisController extends BaseController { @RequestMapping(value = "/queryComponentAnalysis", method = RequestMethod.GET) @ResponseBody @TokenRequired - public BaseObjectResponse queryComponentAnalysis(String key, String vcCardNo, Integer stateWeek, Integer endWeek, Integer age, - Integer fetusNumber, Integer page, Integer limit, HttpServletRequest request) { - return volumeComponentAnalysisFacade.queryComponentAnalysis(page, limit, key, vcCardNo, stateWeek, endWeek, age, fetusNumber, getUserId(request)); + public BaseObjectResponse queryComponentAnalysis(String key, String start ,String end ,Integer page, Integer limit, HttpServletRequest request) throws ParseException { + return volumeComponentAnalysisFacade.queryComponentAnalysis(page, limit, key, start, end, getUserId(request)); } /** 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 6f6e501..8736dd7 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 @@ -1,5 +1,6 @@ package com.lyms.platform.operate.web.facade; +import com.alibaba.druid.util.StringUtils; import com.lyms.platform.common.constants.ErrorCodeConstants; import com.lyms.platform.common.enums.YnEnums; import com.lyms.platform.common.result.BaseObjectResponse; @@ -7,6 +8,8 @@ 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.common.utils.MongoConvertHelper; +import com.lyms.platform.common.utils.ReflectionUtils; 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; @@ -14,13 +17,17 @@ import com.lyms.platform.pojo.BodyMassAnalysisModel; import com.lyms.platform.pojo.Patients; import com.lyms.platform.pojo.TemporaryUserModel; import com.lyms.platform.pojo.VolumeComponentAnalysisModel; +import org.apache.poi.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; @Component @@ -41,7 +48,23 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { private PatientWeightService patientWeightService; public BaseObjectResponse addComponentAnalysis(VolumeComponentAnalysisModel volume) { - mongoTemplate.insert(volume); + //20200204 李泉渝 @涛涛 同一天多次测量就是修改 + List vc = mongoTemplate.find(Query.query(Criteria.where("patientId").is(volume.getPatientId()) + .and("pid").is(volume.getPid()) + .and("certNo").is(volume.getCertNo()) + .and("created").is(volume.getCreated()) + ), VolumeComponentAnalysisModel.class); + if(vc.isEmpty()){ + volume.setCreated(new Date()); + volume.setYn(YnEnums.YES.getId()); + mongoTemplate.insert(volume); + }else { + volume.setCreated(new Date()); + volume.setYn(YnEnums.YES.getId()); + Update update = MongoConvertHelper.convertToNativeUpdate(ReflectionUtils.getUpdateField(volume)); + mongoTemplate.updateFirst(Query.query(Criteria.where("id").is(vc.get(0).getId())), update, VolumeComponentAnalysisModel.class); + } + BaseObjectResponse objectResponse = new BaseObjectResponse(); objectResponse.setErrorcode(ErrorCodeConstants.SUCCESS); objectResponse.setErrormsg("成功"); @@ -51,8 +74,49 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { /** * 查询体成分分析列表信息 + * + * 需求: + 搜索条件: 查询号(身份证号,手机号,姓名) 测量日期 + 显示列:姓名 身份证号 手机号码 身高 孕前体重 当前体重 测量日期 */ - public BaseObjectResponse queryComponentAnalysis(Integer page, Integer limit, String key, String vcCardNo, Integer stateWeek, Integer endWeek, Integer age, + public BaseObjectResponse queryComponentAnalysis(Integer page, Integer limit, String key,String start ,String end , Integer userId) throws ParseException { + + List hospital = groupsFacade.findGroupHospital(userId, false); + Criteria criteria = Criteria.where("yn").ne("0").and("hospitalId").in(hospital); +// Criteria criteria = Criteria.where("yn").ne("0").and("hospitalId").in("211"); + //查询号(身份证号,手机号,姓名) + if(!StringUtils.isEmpty(key)){ + criteria.orOperator(Criteria.where("phone").regex(key), Criteria.where("name").regex(key), Criteria.where("certNo").regex(key)); + } + //测量日期 + if (!StringUtils.isEmpty(start) && !StringUtils.isEmpty(end) ) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date start1 = simpleDateFormat.parse(start); + Date end1 = simpleDateFormat.parse(end); + criteria.and("created").gt(start1).lte(end1); + } + PageResult pageResult = findMongoPage(VolumeComponentAnalysisModel.class, new Query(criteria).with(new Sort(Sort.Direction.DESC, "created")), page, limit); + List bloodSugars = (List) pageResult.getGrid(); + List list = new ArrayList(); + for (VolumeComponentAnalysisModel temporaryUser : bloodSugars) { + Map map = new HashMap<>(); + // 身份证号 手机号码 身高 孕前体重 当前体重 测量日期 + map.put("id", temporaryUser.getId()); + map.put("name", temporaryUser.getName()); + map.put("certNo", temporaryUser.getCertNo() ); + map.put("phone", temporaryUser.getPhone()); + map.put("height", temporaryUser.getHeight()); + map.put("beforeWeight", temporaryUser.getBeforeWeight()); + map.put("weight", temporaryUser.getWeight()); + map.put("created", DateUtil.getyyyy_MM_dd(temporaryUser.getCreated())); + list.add(map); + } + pageResult.setGrid(list); + + return RespBuilder.buildSuccess(pageResult); + } + + /* public BaseObjectResponse queryComponentAnalysis(Integer page, Integer limit, String key, String vcCardNo, Integer stateWeek, Integer endWeek, Integer age, Integer fetusNumber, Integer userId) { mongoTemplate.find(Query.query(Criteria.where("").is(1)), VolumeComponentAnalysisModel.class); boolean flag = false; @@ -95,8 +159,24 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } pageResult.setGrid(list); return RespBuilder.buildSuccess(pageResult); + }*/ + public BaseResponse compositionReport(String id, Integer userId) { + List> data = new ArrayList(); + String hospitalId = autoMatchFacade.getHospitalId(userId); + VolumeComponentAnalysisModel volumeComponentAnalysisModel = mongoTemplate.findById(id, VolumeComponentAnalysisModel.class); + if (volumeComponentAnalysisModel != null) { + Patients patients = mongoTemplate.findOne(Query.query(Criteria.where("_id").is(volumeComponentAnalysisModel.getPatientId()).and("yn").is(YnEnums.YES.getId()).and("hospitalId").is(hospitalId)), Patients.class); + if (patients != null) { + data = setData(patients, volumeComponentAnalysisModel); + } + } + BaseObjectResponse objectResponse = new BaseObjectResponse(); + objectResponse.setErrorcode(ErrorCodeConstants.SUCCESS); + objectResponse.setErrormsg("成功"); + objectResponse.setData(data); + return objectResponse; } - +/* public BaseResponse compositionReport(String id, Integer userId) { List> data = new ArrayList(); String hospitalId = autoMatchFacade.getHospitalId(userId); @@ -113,87 +193,216 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { objectResponse.setData(data); return objectResponse; } +*/ public List> setData(Patients patients, VolumeComponentAnalysisModel volumeComponentAnalysisModel) { + + //第一页开始 List> data = new ArrayList<>(); - Map userMap = new HashMap<>(); //用户基本信息 + 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()); + userMap.put("week", DateUtil.getWeekDesc(patients.getLastMenses(), new Date()));//孕周 + //获取bmi值 + double bmi = Double.valueOf(patientWeightService.getBmi( + volumeComponentAnalysisModel.getWeight(),//当前体重 + volumeComponentAnalysisModel.getHeight()));//当前身高^ + //计算热量值 + Map kmap = computeKulServiceManager.getComputeKulByRisk("").getComputeKul( + Double.parseDouble(volumeComponentAnalysisModel.getBeforeWeight()),//孕前体重 + Double.parseDouble(volumeComponentAnalysisModel.getWeight()),//当前体重 + DateUtil.getWeek(patients.getLastMenses(), new Date()),//孕周 + bmi,//bmi + "1",//1单胎 + volumeComponentAnalysisModel.getHeight(),//孕前身高(当前身高^) + "0");//默认0 + userMap.put("kacl", kmap.get("kulStart"));//能量值 + userMap.put("bmi",volumeComponentAnalysisModel.getBmi());//bmi值 + userMap.put("yqWeight", volumeComponentAnalysisModel.getBeforeWeight());//孕前体重 + userMap.put("currentWeight", 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()); +// componentInfo.put("water", Double.valueOf(volumeComponentAnalysisModel.getIcw() + Double.valueOf(volumeComponentAnalysisModel.getEcw()))); + componentInfo.put("water",volumeComponentAnalysisModel.getWater());//身体总水分 + componentInfo.put("waterMax",volumeComponentAnalysisModel.getWaterMax());//身体总 水分正常范围的高值 + componentInfo.put("waterMin",volumeComponentAnalysisModel.getWaterMax());//身体总 水分正常范围的低值 + componentInfo.put("icw", volumeComponentAnalysisModel.getIcw());//细胞内液 + Map componentMap = rangeMap(DateUtil.getWeek2(patients.getLastMenses(), new Date()),//孕周 + Double.valueOf(volumeComponentAnalysisModel.getWeight()),//体重 + "xbny"); + componentInfo.put("icwMax", componentMap.get("max"));//细胞内液高值 + componentInfo.put("icwMin", componentMap.get("min"));//细胞内液低值 + componentInfo.put("ecw", volumeComponentAnalysisModel.getEcw());//细胞外液 + Map componentMap1 = rangeMap(DateUtil.getWeek2(patients.getLastMenses(), new Date()),//孕周 + Double.valueOf(volumeComponentAnalysisModel.getWeight()),//体重 + "xbwy"); + componentInfo.put("ecwMax", componentMap1.get("max"));//细胞外液高值 + componentInfo.put("ecwMin", componentMap1.get("min"));//细胞外液低值 + componentInfo.put("muscle", volumeComponentAnalysisModel.getMuscle());//肌肉 + componentInfo.put("muscleMax", volumeComponentAnalysisModel.getMuscleMax());//肌肉正常范围的高值 + componentInfo.put("muscleMin", volumeComponentAnalysisModel.getMuscleMin());//肌肉正常范围的低值 + componentInfo.put("lbm", volumeComponentAnalysisModel.getLbm());//瘦体重(去脂体重) + componentInfo.put("weight", volumeComponentAnalysisModel.getWeight());//体重 + componentInfo.put("protein", volumeComponentAnalysisModel.getProtein());//蛋白质 + componentInfo.put("proteinMax", volumeComponentAnalysisModel.getProtein());//蛋白质正常范围的高值 + componentInfo.put("proteinMin", volumeComponentAnalysisModel.getProtein());//蛋白质正常范围的低值 + componentInfo.put("bone", volumeComponentAnalysisModel.getBone());//骨质 + componentInfo.put("boneMax", volumeComponentAnalysisModel.getBone());//骨质正常范围的高值 + componentInfo.put("boneMin", volumeComponentAnalysisModel.getBone());//骨质正常范围的低值 + componentInfo.put("fat", volumeComponentAnalysisModel.getFat());//脂肪 + componentInfo.put("fatMax", volumeComponentAnalysisModel.getFatMax());//脂肪正常范围的高值 + componentInfo.put("fatMin", volumeComponentAnalysisModel.getFatMin());//脂肪正常范围的低值 data.add(componentInfo); + + //体型判定(体型判定2赋值) + Map somatotype = new HashMap<>(); + //基本评估 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()); + basicInfo.put("basicWeight", volumeComponentAnalysisModel.getWeight());//体重 + basicInfo.put("basicWeightMax", volumeComponentAnalysisModel.getWeightMax());//体重正常范围的高值 + basicInfo.put("basicWeightMin", volumeComponentAnalysisModel.getWeightMin());//体重正常范围的低值 + basicInfo.put("basicMuscle", volumeComponentAnalysisModel.getMuscle());//肌肉 + basicInfo.put("basicMuscleMax", volumeComponentAnalysisModel.getMuscleMax());//肌肉正常范围的高值 + basicInfo.put("basicMuscleMin", volumeComponentAnalysisModel.getMuscleMin());//肌肉正常范围的低值 + basicInfo.put("basicPbf", volumeComponentAnalysisModel.getPbf());//体脂百分比 + basicInfo.put("basicPbfMax", volumeComponentAnalysisModel.getPbf());//体脂率正常范围的高值 + basicInfo.put("basicPbfMin", volumeComponentAnalysisModel.getPbf());//体脂率正常范围的低值 + basicInfo.put("basicBone", volumeComponentAnalysisModel.getBone());//骨质 + basicInfo.put("basicBoneMax", volumeComponentAnalysisModel.getBone());//骨质正常范围的高值 + basicInfo.put("basicBoneMin", volumeComponentAnalysisModel.getBone());//骨质正常范围的低值 + basicInfo.put("basicWater",volumeComponentAnalysisModel.getWater());//身体总水分 + basicInfo.put("basicWaterMax",volumeComponentAnalysisModel.getWaterMax());//身体总 水分正常范围的高值 + basicInfo.put("basicWaterMin",volumeComponentAnalysisModel.getWaterMax());//身体总 水分正常范围的低值 + basicInfo.put("basicSmm", volumeComponentAnalysisModel.getSmm());//骨骼肌 + basicInfo.put("basicSmmMax", volumeComponentAnalysisModel.getSmmMax());//骨骼肌正常范围的高值 + basicInfo.put("basicSmmMin", volumeComponentAnalysisModel.getSmmMin());//骨骼肌正常范围的低值 + basicInfo.put("basicBmi", volumeComponentAnalysisModel.getBmi());//体质指数 + basicInfo.put("basicBmiMax", volumeComponentAnalysisModel.getBmiMax());//体质指数正常范围的高值 + basicInfo.put("basicBmiMin", volumeComponentAnalysisModel.getBmiMin());//体质指数正常范围的低值 + basicInfo.put("basicWhr", volumeComponentAnalysisModel.getWhr());//腰臀比(2位小数) + basicInfo.put("basicWhrMax", volumeComponentAnalysisModel.getWhrMax());//腰臀比正常范围的高值 + basicInfo.put("basicWhrMin", volumeComponentAnalysisModel.getWhrMin());//腰臀比正常范围的低值 data.add(basicInfo); + + //体重管理 + Map weightManagement = new HashMap<>(); + weightManagement.put("standardWeight",volumeComponentAnalysisModel.getStandardWeight());//标准体重 + weightManagement.put("weightControl",volumeComponentAnalysisModel.getWeightControl());//体重控制 + weightManagement.put("fatControl",volumeComponentAnalysisModel.getFatControl());//脂肪控制量 + weightManagement.put("muscleControl",volumeComponentAnalysisModel.getMuscleControl());//肌肉控制量 + data.add(weightManagement); + //内脏脂肪分析 Map viscusInfo = new HashMap<>(); - viscusInfo.put("trFat", volumeComponentAnalysisModel.getTrFat()); - viscusInfo.put("visceralLevel", volumeComponentAnalysisModel.getVfi()); + viscusInfo.put("viscusTrFat", volumeComponentAnalysisModel.getTrFat());//躯干脂肪量 总量 + viscusInfo.put("viscusVfi", 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 edemaAnalysis = new HashMap<>(); + if(!StringUtils.isEmpty(volumeComponentAnalysisModel.getWater()) && !StringUtils.isEmpty(volumeComponentAnalysisModel.getWeight()) ){ + String water = volumeComponentAnalysisModel.getWater();//水分 + String weight = volumeComponentAnalysisModel.getWeight();//体重 + double waterd = Double.parseDouble(water); + double weightd = Double.parseDouble(weight); + double moistureRate = weightd / waterd; + edemaAnalysis.put("moistureRate", moistureRate);//身体水分率 + } + edemaAnalysis.put("edema", volumeComponentAnalysisModel.getEdema());//水肿系数 + edemaAnalysis.put("edemaMax", volumeComponentAnalysisModel.getEdemaMax());//水肿系数正常范围的高值 + edemaAnalysis.put("edemaMin", volumeComponentAnalysisModel.getEdemaMin());//水肿系数正常范围的低值 + if(!StringUtils.isEmpty(volumeComponentAnalysisModel.getEdema()) + && !StringUtils.isEmpty(volumeComponentAnalysisModel.getEdemaMax()) + && !StringUtils.isEmpty(volumeComponentAnalysisModel.getEdemaMin()) ){ + String edema = volumeComponentAnalysisModel.getEdema(); + double edemad = Double.parseDouble(edema); + String edemaMax = volumeComponentAnalysisModel.getEdemaMax(); + double edemaMaxd = Double.parseDouble(edemaMax); + String edemaMin = volumeComponentAnalysisModel.getEdemaMin(); + double edemaMind = Double.parseDouble(edemaMin); + if(edemad < edemaMind){ + edemaAnalysis.put("gzf", 1);//1干燥 正常浮肿 + }else if(edemad < edemaMaxd){ + edemaAnalysis.put("gzf", 2);//2浮肿 干燥正常 + }else if((edemad > edemaMind) && edemad < edemaMaxd){ + edemaAnalysis.put("gzf", 0);//0正常 浮肿干燥 + }else { + edemaAnalysis.put("gzf", null); + } + } + edemaAnalysis.put("icw", volumeComponentAnalysisModel.getIcw());//细胞内液 + edemaAnalysis.put("ecw", volumeComponentAnalysisModel.getEcw());//细胞外液 + data.add(edemaAnalysis); + + //肥胖分析 + Map obesityAnalysis = new HashMap<>(); + if(bmi <18.5 ){ + obesityAnalysis.put("obesity", 1);//体重较轻1 + }else if(bmi > 18.5 && bmi < 24.9){ + obesityAnalysis.put("obesity", 2);//正常2 + }else if(bmi > 25 && bmi < 29.9){ + obesityAnalysis.put("obesity", 3);//超重3 + }else if(bmi >= 30){ + obesityAnalysis.put("obesity", 4);//肥胖4 + } + data.add(obesityAnalysis); + //节段分析 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()); + limbsInfo.put("limbsTrWater", volumeComponentAnalysisModel.getTrWater());//躯干水分 + limbsInfo.put("limbsLaWater", volumeComponentAnalysisModel.getLaWater());//左上肢水分 + limbsInfo.put("limbsRaWater", volumeComponentAnalysisModel.getRaWater());//右上肢水分 + limbsInfo.put("limbsLlWater", volumeComponentAnalysisModel.getLlWater());//左下肢水分 + limbsInfo.put("limbsRlWater", volumeComponentAnalysisModel.getRlWater());//右下肢水分 + limbsInfo.put("limbsTrFat", volumeComponentAnalysisModel.getTrFat());//躯干脂肪 + limbsInfo.put("limbsLaFat", volumeComponentAnalysisModel.getLaFat());//左上肢脂肪 + limbsInfo.put("limbsRaFat", volumeComponentAnalysisModel.getRaFat());//右上肢脂肪 + limbsInfo.put("limbsLlFat", volumeComponentAnalysisModel.getLlFat());//左下肢脂肪 + limbsInfo.put("limbsRlFat", 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"); + + //营养评估 + Map nutritionalAssessment = new HashMap<>(); + nutritionalAssessment.put("nutritionalBmr", volumeComponentAnalysisModel.getBmr());//基础代谢 + nutritionalAssessment.put("protein", range(DateUtil.getWeek2(patients.getLastMenses(), new Date()),//孕周 + Double.valueOf(volumeComponentAnalysisModel.getWeight()),//体重 + Double.valueOf(volumeComponentAnalysisModel.getProtein()),//蛋白质 + "dbz")); + nutritionalAssessment.put("fat", range(DateUtil.getWeek(patients.getLastMenses(), new Date()), + Double.valueOf(volumeComponentAnalysisModel.getWeight()), + Double.valueOf(volumeComponentAnalysisModel.getFat()), + "zf")); + nutritionalAssessment.put("wjy", range(DateUtil.getWeek(patients.getLastMenses(), new Date()), + Double.valueOf(volumeComponentAnalysisModel.getWeight()), + Double.valueOf(volumeComponentAnalysisModel.getBone()), + "wjy")); + data.add(nutritionalAssessment); + //第一页结束 + + //第二、三页开始 //获取体质 String tz = range(DateUtil.getWeek(patients.getLastMenses(), new Date()), - Double.valueOf(volumeComponentAnalysisModel.getWeight()), Double.valueOf(volumeComponentAnalysisModel.getProtein()), "zf"); + 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"); - + Double.valueOf(volumeComponentAnalysisModel.getWeight()), + Double.valueOf(volumeComponentAnalysisModel.getProtein()), + "jr"); //无机盐 - String wjy = range(DateUtil.getWeek(patients.getLastMenses(), new Date()), Double.valueOf(volumeComponentAnalysisModel.getWeight()), - Double.valueOf(volumeComponentAnalysisModel.getBone()), "wjy"); + 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")); + System.out.println("kulStart: "+kulStart); int k1 = ((int) kulStart / 100) * 100; double k2 = kulStart - k1; if (k2 > 50) { @@ -207,28 +416,22 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } String type = null; String evaluationType = null; - //低体脂低肌肉 - if ("不足".equals(tz) && "不足".equals(jr)) { + if ("不足".equals(tz) && "低肌肉".equals(jr)) {//低体脂低肌肉(3、体脂不足肌肉不足:) type = "5"; evaluationType = "3"; - //超体制底肌肉 - } else if ("过量".equals(tz) && "不足".equals(jr)) { + } else if ("过量".equals(tz) && "低肌肉".equals(jr)) {//超体制底肌肉(4、体脂过量肌肉不足:) type = "3"; evaluationType = "4"; - //低肌肉 - } else if ("正常".equals(tz) && "不足".equals(jr)) { + } else if ("低肌肉".equals(jr)) {//低肌肉(5、肌肉不足:) type = "2"; evaluationType = "5"; - //低体脂 - } else if ("不足".equals(tz) && "正常".equals(jr)) { + } else if ("不足".equals(tz)) {//低体脂(2、体脂不足:) type = "4"; evaluationType = "2"; - //超体制 - } else if ("过量".equals(tz) && "正常".equals(jr)) { + } else if ("过量".equals(tz)) {//超体制(1、体脂过量:) type = "1"; evaluationType = "1"; - //正常 - } else { + } else {//正常 type = "6"; evaluationType = "8"; } @@ -237,24 +440,58 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } else if ("不足".equals(wjy)) { evaluationType = "6"; } + //体型判定2 star + if ("过量".equals(tz) && "低肌肉".equals(jr) && (bmi>18.5 && bmi<24.9)) { + somatotype.put("somatotype","1");//隐形肥胖型 + } else if ("过量".equals(tz) && "正常".equals(jr) && (bmi>18.5 && bmi<24.9)) { + somatotype.put("somatotype","2");//脂肪过多型 + }else if (bmi>=30) { + somatotype.put("somatotype","3");//肥胖型 + }else if ("正常".equals(tz) && "低肌肉".equals(jr) && (bmi>18.5 && bmi<24.9)) { + somatotype.put("somatotype","4");//肌肉不足型 + }else if ("正常".equals(tz) && "正常".equals(jr) && (bmi>18.5 && bmi<24.9)) { + somatotype.put("somatotype","5");//健康匀称型 + }else if ("正常".equals(tz) && "肌肉过量".equals(jr) && (bmi>25 && bmi<29.9)) { + somatotype.put("somatotype","6");//超重肌肉型 + }else if (bmi < 18.5) { + somatotype.put("somatotype","7");//消瘦型 + }else if ("不足".equals(tz) && "正常".equals(jr) && (bmi>18.5 && bmi<24.9)) { + somatotype.put("somatotype","8");//低脂肪型 + }else if ("不足".equals(tz) && "肌肉过量".equals(jr) && (bmi>18.5 && bmi<24.9)) { + somatotype.put("somatotype","9");//运动员型 + } + data.add(somatotype); + //体型判定2 end + Integer week = DateUtil.getWeek(patients.getLastMenses()); + //计算孕期 + Integer pregnancy=0; + if (week <= 12) { + pregnancy = 0; + } else if (week >= 13 && week <= 28) { + pregnancy = 1; + } else if (week >= 28 && week <= 40) { + pregnancy = 2; + } //报告内容 - BodyMassAnalysisModel bodyMassAnalysisModel = mongoTemplate.findOne(Query.query(Criteria.where("type").is(type).and("kcal").is(k1)), BodyMassAnalysisModel.class); - //食谱 + BodyMassAnalysisModel bodyMassAnalysisModel = mongoTemplate.findOne( + Query.query(Criteria.where("type").is(type).and("kcal").is(k1).and("pregnancy").is(pregnancy)), + 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()); + 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()); + dietInfo.put("diet", bodyMassAnalysisModel.getEarlySuggests());//膳食 } else if (week >= 13 && week <= 28) { dietInfo.put("diet", bodyMassAnalysisModel.getMiddleSuggests()); } else if (week >= 28 && week <= 40) { @@ -273,15 +510,23 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { recipeRulesInfo.put("recipesRule", nutrition.getRecipesRule()); data.add(recipeRulesInfo); } + //第二、三页结束 return data; } - private String range(Integer week, double weight, double value, String type) { + /** + * + * @param week 孕周 + * @param weight 体重 + * @param value 蛋白质 + * @param type dbz类型 + * @return + */ + private String range(Integer week, double weight, double value, String type) { //孕早期 if (week >= 0 && week <= 12) { - //蛋白质 - if ("dbz".equals(type)) { + if ("dbz".equals(type)) {//蛋白质 double d = weight * 0.13;//最低 double c = weight * 0.17;//最高 if (value < d) { @@ -289,17 +534,17 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } else { return "正常"; } - } else if ("zf".equals(type)) { + } else if ("zf".equals(type)) {//脂肪 double b = weight * 21.4; double c = weight * 0.35; if (value < b) { - return "不足"; + return "不足";//体成分分析体型判定--体脂不足 } else if (value > c) { - return "过量"; + return "过量";//体成分分析体型判定--体脂过量 } else { - return "正常"; + return "正常";//体成分分析体型判定--体脂正常 } - } else if ("wjy".equals(type)) { + } else if ("wjy".equals(type)) {//无机盐 double b = weight * 0.033; double c = weight * 0.047; if (value < b) { @@ -313,13 +558,16 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { double b = weight * 0.65; double c = weight * 0.8; if (value < b) { - return "低肌肉"; + return "低肌肉";//体成分分析体型判定--肌肉不足 + }if (value > c) { + return "肌肉过量";//体成分分析体型判定--肌肉过量 } else { - return "正常"; + return "正常";//体成分分析体型判定--肌肉正常范围内 } } + //孕中期 - } else if (week >= 13 && week <= 28) { + } else if (week >= 13 && week <= 28) {//蛋白质 if ("dbz".equals(type)) { double d = weight * 0.15; double c = weight * 0.18; @@ -328,7 +576,7 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } else { return "正常"; } - } else if ("zf".equals(type)) { + } else if ("zf".equals(type)) {//脂肪 double b = weight * 21.4; double c = weight * 0.35; if (value < b) { @@ -338,7 +586,7 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } else { return "正常"; } - } else if ("wjy".equals(type)) { + } else if ("wjy".equals(type)) {//无机盐 double b = weight * 0.034; double c = weight * 0.048; if (value < b) { @@ -358,7 +606,7 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } } //孕晚期 - } else if (week >= 29 && week <= 40) { + } else if (week >= 29 && week <= 40) {//蛋白质 if ("dbz".equals(type)) { double b = weight * 15.78; double c = weight * 19.2; @@ -367,7 +615,7 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } else { return "正常"; } - } else if ("zf".equals(type)) { + } else if ("zf".equals(type)) {//脂肪 double b = weight * 0.25; double c = weight * 0.35; if (value < b) { @@ -377,7 +625,7 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } else { return "正常"; } - } else if ("wjy".equals(type)) { + } else if ("wjy".equals(type)) {//无机盐 double b = weight * 0.035; double c = weight * 0.055; if (value < b) { @@ -399,4 +647,56 @@ public class VolumeComponentAnalysisFacade extends BaseServiceImpl { } return ""; } + /** + * + * @param week 孕周 + * @param weight 体重 + * @param type xbny 细胞内液含量正常范围 类型 + * @return + */ + private Map rangeMap(Integer week, double weight, String type) { + Map map = new HashMap<>(); + //孕早期 + if (week >= 0 && week <= 12) { + if ("xbny".equals(type)) {//细胞内液含量正常范围 + double min = weight * 0.175; + double max = weight * 0.188; + map.put("min", Double.toString(min)); + map.put("max", Double.toString(max)); + }else if ("xbwy".equals(type)) {//细胞外液体含量正常范围 + double min = weight * 0.12; + double max = weight * 0.16; + map.put("min", Double.toString(min)); + map.put("max", Double.toString(max)); + } + //孕中期 + } else if (week >= 13 && week <= 28) {//蛋白质 + if ("xbny".equals(type)) { + double min = weight * 0.175; + double max = weight * 0.188; + map.put("min", Double.toString(min)); + map.put("max", Double.toString(max)); + }else if ("xbwy".equals(type)) { + double min = weight * 0.13; + double max = weight * 0.17; + map.put("min", Double.toString(min)); + map.put("max", Double.toString(max)); + } + //孕晚期 + } else if (week >= 29 && week <= 40) {//蛋白质 + if ("xbny".equals(type)) { + double min = weight * 0.175; + double max = weight * 0.188; + map.put("min", Double.toString(min)); + map.put("max", Double.toString(max)); + }else if ("xbwy".equals(type)) { + double min = weight * 0.15; + double max = weight * 0.18; + map.put("min", Double.toString(min)); + map.put("max", Double.toString(max)); + } + + } + return map; + } } \ No newline at end of file