1 controller层
2 这里主表为任务表记录了各种用户的健康任务
3 CkdPatientOutsideHealth
4 具体的健康数据表为
5 CkdBmiRecord记录了各种身高体重等数据
6 /**
7 * 查询主表表周期时间内健康任务中BMI的健康数据
8 *
9 * @return
10 */
11 @RequestMapping("/selectCkdBMiRecord/{StartDate}/{EndDate}/{Code}")
12 public Result selectCkdBMiRecord(@PathVariable("StartDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date StartDate, @PathVariable("EndDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date EndDate) {
13 Result result = new Result<>();
14 //格式化时间 这里设置
15 String strDateFormat = "yyyy-MM-dd";
16 SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
17 sdf.format(StartDate);
18 sdf.format(EndDate);
19 //先查询出条件为 code:BMI 开始时间-结束时间
20 List<CkdPatientOutsideHealth> listP = iCkdPatientOutsideHealthService.lambdaQuery()
21 //这里选取code 为BMI条件
22 .in(CkdPatientOutsideHealth::getCode, "BMI")
23 //设置大于开始的时间
24 .ge(CkdPatientOutsideHealth::getStartDate, StartDate)
25 //设置小于结束的时间
26 .le(CkdPatientOutsideHealth::getEndDate, EndDate) .list();
27 //根据长度判断是否有数据
28 if (listP.size() == 0) {
29 result.setError("无法查询到该期间的数据");
30 return result;
31 }
32 //获取所有用户id
33 List listid = listP.stream().map(CkdPatientOutsideHealth::getUserId).collect(Collectors.toList());
34 //批量查询
35 List<CkdBmiRecord> bmiRecordList = iCkdBmiRecordService.listByIds(listid);
36 result.setData(bmiRecordList);
37 return result;
38 }
39
40 /**
41 * 保存根据身高,体重当前任务周期内执行的BMI数据
42 *
43 * @return
44 */
45 @RequestMapping(value = "/SaveCkdBMiRecord", method = RequestMethod.POST)
46 @Transactional(rollbackFor = Exception.class)
47 public Result SaveCkdBMiRecord(Integer userId, @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, Integer finished, String code, Float weight, Integer height) {
48 CkdPatientOutsideHealth ckdPatientOutsideHealth = new CkdPatientOutsideHealth();
49 ckdPatientOutsideHealth.setUserId(userId);
50 ckdPatientOutsideHealth.setStartDate(startDate);
51 ckdPatientOutsideHealth.setFinished(finished);
52 ckdPatientOutsideHealth.setCode(code);
53 //格式化时间
54 Date startDates = ckdPatientOutsideHealth.getStartDate();
55 String strDateFormat = "yyyy-MM-dd HH:mm:ss";
56 SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
57 sdf.format(startDates);
58 Result result = new Result<>();
59 //判断是否为执行任务
60 if (ckdPatientOutsideHealth.getFinished().equals(0)) {
61 //code进行判断,如果为BMI
62 if (ckdPatientOutsideHealth.getCode().equals("BMI") && ckdPatientOutsideHealth.getStartDate().equals(startDate)) {
63 //进行一个表的
64 CkdBmiRecord ckdBmiRecord = iCkdBmiRecordService.getById(ckdPatientOutsideHealth.getUserId());
65 ckdBmiRecord.setHeight(height);
66 ckdBmiRecord.setWeight(weight);
67 //判断是身高,体重是否为空,不为空进行计算
68 if (ckdBmiRecord.getHeight() != 0 && ckdBmiRecord.getWeight() != 0) {
69 DecimalFormat df = new DecimalFormat("0.0000");
70 //BMI 体质公式: 体重指数(BMI)=体重(kg)÷身高^2(m) 这里height为Integer 默认输入为cm 故乘100
71 ckdBmiRecord.setBmi(Float.parseFloat(df.format(weight / (((float) height / 100) * ((float) height / 100)))));
72 //进行对应的useid修改
73 iCkdBmiRecordService.update(new UpdateWrapper<CkdBmiRecord>().lambda()
74 .eq(CkdBmiRecord::getUserId, ckdBmiRecord.getUserId())
75 .set(true, CkdBmiRecord::getHeight, ckdBmiRecord.getHeight())
76 .set(true, CkdBmiRecord::getWeight, ckdBmiRecord.getWeight())
77 .set(true, CkdBmiRecord::getBmi, ckdBmiRecord.getBmi())
78 );
79 } else {
80 result.setError("身高体重不能为空或0");
81 }
82 } else {
83 result.setError("codeerror");
84 }
85 } else {
86 result.setError("无法保存已完成的任务");
87 }
88 return result;
89 }