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