feat:增加运动健康接口
This commit is contained in:
@@ -0,0 +1,49 @@
|
|||||||
|
package com.cxx.home.controller;
|
||||||
|
|
||||||
|
import com.cxx.common.ReadView;
|
||||||
|
import com.cxx.common.WriteView;
|
||||||
|
import com.cxx.home.dto.health.HealthRecordDto;
|
||||||
|
import com.cxx.home.service.HealthService;
|
||||||
|
import com.cxx.home.vo.HealthQueryVo;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonView;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/health")
|
||||||
|
@Tag(name = "锻炼记录")
|
||||||
|
public class HealthController {
|
||||||
|
@Resource
|
||||||
|
private HealthService healthService;
|
||||||
|
|
||||||
|
@Operation(summary = "新增锻炼记录")
|
||||||
|
@PostMapping("")
|
||||||
|
public Boolean addExercise(@RequestBody @JsonView(WriteView.class) @Validated HealthRecordDto dto) {
|
||||||
|
return healthService.add(dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "更新锻炼记录")
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public Boolean updateExercise(@PathVariable("id") long id,
|
||||||
|
@RequestBody @JsonView(WriteView.class) HealthRecordDto dto) {
|
||||||
|
return healthService.update(id, dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "删除锻炼记录")
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public Boolean deleteExercise(@PathVariable("id") long id) {
|
||||||
|
return healthService.delete(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "查询锻炼记录")
|
||||||
|
@GetMapping("")
|
||||||
|
public @JsonView(ReadView.class) List<HealthRecordDto> queryExercise(HealthQueryVo queryVo) {
|
||||||
|
return healthService.query(queryVo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.cxx.home.converter;
|
||||||
|
|
||||||
|
import com.cxx.home.dto.health.HealthRecordDto;
|
||||||
|
import com.cxx.home.entity.HealthRecord;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper(componentModel = "spring")
|
||||||
|
public interface HealthConverter {
|
||||||
|
HealthRecord toEntity(HealthRecordDto dto);
|
||||||
|
|
||||||
|
List<HealthRecord> toEntities(List<HealthRecordDto> dto);
|
||||||
|
|
||||||
|
HealthRecordDto toDto(HealthRecord entities);
|
||||||
|
|
||||||
|
List<HealthRecordDto> toDtos(List<HealthRecord> entities);
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.cxx.home.dto.health;
|
||||||
|
|
||||||
|
import com.cxx.common.PlainView;
|
||||||
|
import com.cxx.common.ReadView;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonView;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@JsonView(PlainView.class)
|
||||||
|
public class HealthRecordDto {
|
||||||
|
@Schema(description = "id")
|
||||||
|
@JsonView(ReadView.class)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "运行项目")
|
||||||
|
private String sportProject;
|
||||||
|
|
||||||
|
@Schema(description = "运行时长")
|
||||||
|
private Integer sportDuration;
|
||||||
|
|
||||||
|
@Schema(description = "体重")
|
||||||
|
private Double weight;
|
||||||
|
|
||||||
|
@Schema(description = "记录日期")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||||
|
private LocalDate date;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.cxx.home.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.cxx.framework.data.AbstractEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("exercise_record")
|
||||||
|
public class ExerciseRecord extends AbstractEntity {
|
||||||
|
@TableField("project")
|
||||||
|
private String project;
|
||||||
|
|
||||||
|
@TableField("duration")
|
||||||
|
private Integer duration;
|
||||||
|
|
||||||
|
@TableField("date")
|
||||||
|
private LocalDate date;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.cxx.home.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.cxx.framework.data.AbstractEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("health_record")
|
||||||
|
public class HealthRecord extends AbstractEntity {
|
||||||
|
@TableField("sport_project")
|
||||||
|
private String sportProject;
|
||||||
|
|
||||||
|
@TableField("sport_duration")
|
||||||
|
private Integer sportDuration;
|
||||||
|
|
||||||
|
@TableField("weight")
|
||||||
|
private Double weight;
|
||||||
|
|
||||||
|
@TableField("date")
|
||||||
|
private LocalDate date;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.cxx.home.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.cxx.framework.data.AbstractEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("weight_record")
|
||||||
|
public class WeightRecord extends AbstractEntity {
|
||||||
|
@TableField("value")
|
||||||
|
private Double value;
|
||||||
|
|
||||||
|
@TableField("date")
|
||||||
|
private LocalDate date;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.cxx.home.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.cxx.home.entity.ExerciseRecord;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface ExerciseRecordMapper extends BaseMapper<ExerciseRecord> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.cxx.home.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.cxx.home.entity.HealthRecord;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface HealthRecordMapper extends BaseMapper<HealthRecord> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.cxx.home.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.cxx.home.entity.WeightRecord;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface WeightRecordMapper extends BaseMapper<WeightRecord> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.cxx.home.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.cxx.home.dto.health.HealthRecordDto;
|
||||||
|
import com.cxx.home.vo.HealthQueryVo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface HealthService {
|
||||||
|
List<HealthRecordDto> query(HealthQueryVo queryVo);
|
||||||
|
|
||||||
|
Boolean add(HealthRecordDto dto);
|
||||||
|
|
||||||
|
Boolean update(Long id, HealthRecordDto dto);
|
||||||
|
|
||||||
|
Boolean delete(Long id);
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
package com.cxx.home.service.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.cxx.framework.web.CustomException;
|
||||||
|
import com.cxx.home.converter.HealthConverter;
|
||||||
|
import com.cxx.home.dto.health.HealthRecordDto;
|
||||||
|
import com.cxx.home.entity.HealthRecord;
|
||||||
|
import com.cxx.home.mapper.HealthRecordMapper;
|
||||||
|
import com.cxx.home.service.HealthService;
|
||||||
|
import com.cxx.home.vo.HealthQueryVo;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class HealthServiceImpl implements HealthService {
|
||||||
|
@Resource
|
||||||
|
private HealthRecordMapper healthRecordMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private HealthConverter healthConverter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HealthRecordDto> query(HealthQueryVo queryVo) {
|
||||||
|
LocalDate startDate = LocalDate.parse(queryVo.getStartDate());
|
||||||
|
LocalDate endDate = LocalDate.parse(queryVo.getEndDate());
|
||||||
|
|
||||||
|
LambdaQueryWrapper<HealthRecord> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.ge(HealthRecord::getDate, startDate)
|
||||||
|
.le(HealthRecord::getDate, endDate)
|
||||||
|
.orderByDesc(HealthRecord::getDate);
|
||||||
|
|
||||||
|
return healthConverter.toDtos(healthRecordMapper.selectList(queryWrapper));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean add(HealthRecordDto dto) {
|
||||||
|
HealthRecord healthRecord = new HealthRecord();
|
||||||
|
BeanUtils.copyProperties(dto, healthRecord);
|
||||||
|
|
||||||
|
return healthRecordMapper.insert(healthRecord) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean update(Long id, HealthRecordDto dto) {
|
||||||
|
if (!healthRecordMapper.exists(new LambdaQueryWrapper<HealthRecord>()
|
||||||
|
.eq(HealthRecord::getId, id))) {
|
||||||
|
throw new CustomException("记录不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
HealthRecord healthRecord = new HealthRecord();
|
||||||
|
BeanUtils.copyProperties(dto, healthRecord);
|
||||||
|
healthRecord.setId(id);
|
||||||
|
|
||||||
|
return healthRecordMapper.updateById(healthRecord) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean delete(Long id) {
|
||||||
|
return healthRecordMapper.deleteById(id) == 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.cxx.home.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class HealthQueryVo {
|
||||||
|
@Schema(description = "开始日期")
|
||||||
|
private String startDate;
|
||||||
|
|
||||||
|
@Schema(description = "结束日期")
|
||||||
|
private String endDate;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user