Prechádzať zdrojové kódy

feat(api): 添加血糖、血压和心率数据删除功能

- 在三个数据表中添加创建者、创建时间、更新者、更新时间和备注字段
- 添加删除数据的请求体类 DeleteBloodGlucoseDataRequest 等
- 实现删除接口并校验用户权限
- 修改响应体中的 ID 类型为 String 并更新相关转换逻辑
- 为所有数据类型添加删除 API 接口及其实现逻辑
mcbaiyun 1 mesiac pred
rodič
commit
85804159fe
18 zmenil súbory, kde vykonal 124 pridanie a 9 odobranie
  1. 5 1
      docs/DataBase/t_blood_glucose_data.txt
  2. 1 1
      docs/DataBase/t_blood_pressure_data.txt
  3. 1 1
      docs/DataBase/t_heart_rate_data.txt
  4. 12 0
      src/main/java/work/baiyun/chronicdiseaseapp/controller/BloodGlucoseDataController.java
  5. 12 0
      src/main/java/work/baiyun/chronicdiseaseapp/controller/BloodPressureDataController.java
  6. 12 0
      src/main/java/work/baiyun/chronicdiseaseapp/controller/HeartRateDataController.java
  7. 1 1
      src/main/java/work/baiyun/chronicdiseaseapp/model/vo/BloodGlucoseDataResponse.java
  8. 1 1
      src/main/java/work/baiyun/chronicdiseaseapp/model/vo/BloodPressureDataResponse.java
  9. 14 0
      src/main/java/work/baiyun/chronicdiseaseapp/model/vo/DeleteBloodGlucoseDataRequest.java
  10. 14 0
      src/main/java/work/baiyun/chronicdiseaseapp/model/vo/DeleteBloodPressureDataRequest.java
  11. 14 0
      src/main/java/work/baiyun/chronicdiseaseapp/model/vo/DeleteHeartRateDataRequest.java
  12. 1 1
      src/main/java/work/baiyun/chronicdiseaseapp/model/vo/HeartRateDataResponse.java
  13. 1 0
      src/main/java/work/baiyun/chronicdiseaseapp/service/BloodGlucoseDataService.java
  14. 1 0
      src/main/java/work/baiyun/chronicdiseaseapp/service/BloodPressureDataService.java
  15. 1 0
      src/main/java/work/baiyun/chronicdiseaseapp/service/HeartRateDataService.java
  16. 11 1
      src/main/java/work/baiyun/chronicdiseaseapp/service/impl/BloodGlucoseDataServiceImpl.java
  17. 11 1
      src/main/java/work/baiyun/chronicdiseaseapp/service/impl/BloodPressureDataServiceImpl.java
  18. 11 1
      src/main/java/work/baiyun/chronicdiseaseapp/service/impl/HeartRateDataServiceImpl.java

+ 5 - 1
docs/DataBase/t_blood_glucose_data.txt

@@ -4,7 +4,11 @@ CREATE TABLE `t_blood_glucose_data` (
   `measure_time` DATETIME NOT NULL COMMENT '测量时间',
   `type` VARCHAR(50) NOT NULL COMMENT '血糖测量类型',
   `value` DECIMAL(5,2) NOT NULL COMMENT '血糖值',
-  `version` INT DEFAULT 0 COMMENT '乐观锁版本号',
+  `create_user` BIGINT COMMENT '创建者ID',
+  `create_time` DATETIME COMMENT '创建时间',
+  `update_user` BIGINT COMMENT '更新者ID',
+  `update_time` DATETIME COMMENT '更新时间',
+  `version` INT DEFAULT 0 COMMENT '乐观锁版本号',  `remark` VARCHAR(255) COMMENT '备注',
   PRIMARY KEY (`id`),
   KEY `idx_bg_user_measure_time` (`user_id`, `measure_time`),
   KEY `idx_bg_user_id` (`user_id`),

+ 1 - 1
docs/DataBase/t_blood_pressure_data.txt

@@ -8,7 +8,7 @@ CREATE TABLE `t_blood_pressure_data` (
   `create_time` DATETIME COMMENT '创建时间',
   `update_user` BIGINT COMMENT '更新者ID',
   `update_time` DATETIME COMMENT '更新时间',
-  `version` INT DEFAULT 0 COMMENT '乐观锁版本号',
+  `version` INT DEFAULT 0 COMMENT '乐观锁版本号',  `remark` VARCHAR(255) COMMENT '备注',
   PRIMARY KEY (`id`),
   KEY `idx_bp_user_measure_time` (`user_id`, `measure_time`),
   KEY `idx_bp_user_id` (`user_id`)

+ 1 - 1
docs/DataBase/t_heart_rate_data.txt

@@ -7,7 +7,7 @@ CREATE TABLE `t_heart_rate_data` (
   `create_time` DATETIME COMMENT '创建时间',
   `update_user` BIGINT COMMENT '更新者ID',
   `update_time` DATETIME COMMENT '更新时间',
-  `version` INT DEFAULT 0 COMMENT '乐观锁版本号',
+  `version` INT DEFAULT 0 COMMENT '乐观锁版本号',  `remark` VARCHAR(255) COMMENT '备注',
   PRIMARY KEY (`id`),
   KEY `idx_hr_user_measure_time` (`user_id`, `measure_time`),
   KEY `idx_hr_user_id` (`user_id`)

+ 12 - 0
src/main/java/work/baiyun/chronicdiseaseapp/controller/BloodGlucoseDataController.java

@@ -12,6 +12,7 @@ import work.baiyun.chronicdiseaseapp.common.R;
 import work.baiyun.chronicdiseaseapp.model.vo.AddBloodGlucoseDataRequest;
 import work.baiyun.chronicdiseaseapp.model.vo.BloodGlucoseDataResponse;
 import work.baiyun.chronicdiseaseapp.model.vo.BaseQueryRequest;
+import work.baiyun.chronicdiseaseapp.model.vo.DeleteBloodGlucoseDataRequest;
 import work.baiyun.chronicdiseaseapp.service.BloodGlucoseDataService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
@@ -44,4 +45,15 @@ public class BloodGlucoseDataController {
             return R.fail(500, e.getMessage());
         }
     }
+
+    @Operation(summary = "删除血糖数据", description = "根据ID删除血糖测量记录")
+    @PostMapping(path = "/delete", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<?> delete(@RequestBody DeleteBloodGlucoseDataRequest req) {
+        try {
+            service.deleteBloodGlucoseData(req.getId());
+            return R.success(200, "ok");
+        } catch (Exception e) {
+            return R.fail(500, e.getMessage());
+        }
+    }
 }

+ 12 - 0
src/main/java/work/baiyun/chronicdiseaseapp/controller/BloodPressureDataController.java

@@ -12,6 +12,7 @@ import work.baiyun.chronicdiseaseapp.common.R;
 import work.baiyun.chronicdiseaseapp.model.vo.AddBloodPressureDataRequest;
 import work.baiyun.chronicdiseaseapp.model.vo.BloodPressureDataResponse;
 import work.baiyun.chronicdiseaseapp.model.vo.BaseQueryRequest;
+import work.baiyun.chronicdiseaseapp.model.vo.DeleteBloodPressureDataRequest;
 import work.baiyun.chronicdiseaseapp.service.BloodPressureDataService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
@@ -44,4 +45,15 @@ public class BloodPressureDataController {
             return R.fail(500, e.getMessage());
         }
     }
+
+    @Operation(summary = "删除血压数据", description = "根据ID删除血压测量记录")
+    @PostMapping(path = "/delete", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<?> delete(@RequestBody DeleteBloodPressureDataRequest req) {
+        try {
+            service.deleteBloodPressureData(req.getId());
+            return R.success(200, "ok");
+        } catch (Exception e) {
+            return R.fail(500, e.getMessage());
+        }
+    }
 }

+ 12 - 0
src/main/java/work/baiyun/chronicdiseaseapp/controller/HeartRateDataController.java

@@ -12,6 +12,7 @@ import work.baiyun.chronicdiseaseapp.common.R;
 import work.baiyun.chronicdiseaseapp.model.vo.AddHeartRateDataRequest;
 import work.baiyun.chronicdiseaseapp.model.vo.HeartRateDataResponse;
 import work.baiyun.chronicdiseaseapp.model.vo.BaseQueryRequest;
+import work.baiyun.chronicdiseaseapp.model.vo.DeleteHeartRateDataRequest;
 import work.baiyun.chronicdiseaseapp.service.HeartRateDataService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
@@ -44,4 +45,15 @@ public class HeartRateDataController {
             return R.fail(500, e.getMessage());
         }
     }
+
+    @Operation(summary = "删除心率数据", description = "根据ID删除心率测量记录")
+    @PostMapping(path = "/delete", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<?> delete(@RequestBody DeleteHeartRateDataRequest req) {
+        try {
+            service.deleteHeartRateData(req.getId());
+            return R.success(200, "ok");
+        } catch (Exception e) {
+            return R.fail(500, e.getMessage());
+        }
+    }
 }

+ 1 - 1
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/BloodGlucoseDataResponse.java

@@ -10,7 +10,7 @@ import java.time.LocalDateTime;
 @Data
 public class BloodGlucoseDataResponse {
     @Schema(description = "记录ID")
-    private Long id;
+    private String id;
 
     @Schema(description = "测量时间")
     private LocalDateTime measureTime;

+ 1 - 1
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/BloodPressureDataResponse.java

@@ -9,7 +9,7 @@ import java.time.LocalDateTime;
 @Data
 public class BloodPressureDataResponse {
     @Schema(description = "记录ID")
-    private Long id;
+    private String id;
 
     @Schema(description = "收缩压(mmHg)")
     private Integer systolicPressure;

+ 14 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/DeleteBloodGlucoseDataRequest.java

@@ -0,0 +1,14 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "删除血糖数据请求")
+@Data
+public class DeleteBloodGlucoseDataRequest {
+
+    @Schema(description = "记录ID")
+    @NotNull(message = "ID不能为空")
+    private String id;
+}

+ 14 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/DeleteBloodPressureDataRequest.java

@@ -0,0 +1,14 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "删除血压数据请求")
+@Data
+public class DeleteBloodPressureDataRequest {
+
+    @Schema(description = "记录ID")
+    @NotNull(message = "ID不能为空")
+    private String id;
+}

+ 14 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/DeleteHeartRateDataRequest.java

@@ -0,0 +1,14 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "删除心率数据请求")
+@Data
+public class DeleteHeartRateDataRequest {
+
+    @Schema(description = "记录ID")
+    @NotNull(message = "ID不能为空")
+    private String id;
+}

+ 1 - 1
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/HeartRateDataResponse.java

@@ -9,7 +9,7 @@ import java.time.LocalDateTime;
 @Data
 public class HeartRateDataResponse {
     @Schema(description = "记录ID")
-    private Long id;
+    private String id;
 
     @Schema(description = "心率(次/分钟)")
     private Integer heartRate;

+ 1 - 0
src/main/java/work/baiyun/chronicdiseaseapp/service/BloodGlucoseDataService.java

@@ -8,4 +8,5 @@ import work.baiyun.chronicdiseaseapp.model.vo.AddBloodGlucoseDataRequest;
 public interface BloodGlucoseDataService {
     void addBloodGlucoseData(AddBloodGlucoseDataRequest request);
     Page<BloodGlucoseDataResponse> listBloodGlucoseData(BaseQueryRequest request);
+    void deleteBloodGlucoseData(String id);
 }

+ 1 - 0
src/main/java/work/baiyun/chronicdiseaseapp/service/BloodPressureDataService.java

@@ -8,4 +8,5 @@ import work.baiyun.chronicdiseaseapp.model.vo.AddBloodPressureDataRequest;
 public interface BloodPressureDataService {
     void addBloodPressureData(AddBloodPressureDataRequest request);
     Page<BloodPressureDataResponse> listBloodPressureData(BaseQueryRequest request);
+    void deleteBloodPressureData(String id);
 }

+ 1 - 0
src/main/java/work/baiyun/chronicdiseaseapp/service/HeartRateDataService.java

@@ -8,4 +8,5 @@ import work.baiyun.chronicdiseaseapp.model.vo.AddHeartRateDataRequest;
 public interface HeartRateDataService {
     void addHeartRateData(AddHeartRateDataRequest request);
     Page<HeartRateDataResponse> listHeartRateData(BaseQueryRequest request);
+    void deleteHeartRateData(String id);
 }

+ 11 - 1
src/main/java/work/baiyun/chronicdiseaseapp/service/impl/BloodGlucoseDataServiceImpl.java

@@ -45,6 +45,7 @@ public class BloodGlucoseDataServiceImpl implements BloodGlucoseDataService {
         List<BloodGlucoseDataResponse> responses = result.getRecords().stream().map(r -> {
             BloodGlucoseDataResponse resp = new BloodGlucoseDataResponse();
             BeanUtils.copyProperties(r, resp);
+            resp.setId(r.getId().toString());
             return resp;
         }).collect(Collectors.toList());
 
@@ -56,5 +57,14 @@ public class BloodGlucoseDataServiceImpl implements BloodGlucoseDataService {
         return responsePage;
     }
 
-    
+    @Override
+    public void deleteBloodGlucoseData(String id) {
+        Long userId = work.baiyun.chronicdiseaseapp.util.SecurityUtils.getCurrentUserId();
+        Long recordId = Long.parseLong(id);
+        BloodGlucoseData record = bloodGlucoseDataMapper.selectById(recordId);
+        if (record == null || !record.getUserId().equals(userId)) {
+            throw new RuntimeException("记录不存在或无权限删除");
+        }
+        bloodGlucoseDataMapper.deleteById(recordId);
+    }
 }

+ 11 - 1
src/main/java/work/baiyun/chronicdiseaseapp/service/impl/BloodPressureDataServiceImpl.java

@@ -45,6 +45,7 @@ public class BloodPressureDataServiceImpl implements BloodPressureDataService {
         List<BloodPressureDataResponse> responses = result.getRecords().stream().map(r -> {
             BloodPressureDataResponse resp = new BloodPressureDataResponse();
             BeanUtils.copyProperties(r, resp);
+            resp.setId(r.getId().toString());
             return resp;
         }).collect(Collectors.toList());
 
@@ -56,5 +57,14 @@ public class BloodPressureDataServiceImpl implements BloodPressureDataService {
         return responsePage;
     }
 
-    
+    @Override
+    public void deleteBloodPressureData(String id) {
+        Long userId = work.baiyun.chronicdiseaseapp.util.SecurityUtils.getCurrentUserId();
+        Long recordId = Long.parseLong(id);
+        BloodPressureData record = bloodPressureDataMapper.selectById(recordId);
+        if (record == null || !record.getUserId().equals(userId)) {
+            throw new RuntimeException("记录不存在或无权限删除");
+        }
+        bloodPressureDataMapper.deleteById(recordId);
+    }
 }

+ 11 - 1
src/main/java/work/baiyun/chronicdiseaseapp/service/impl/HeartRateDataServiceImpl.java

@@ -45,6 +45,7 @@ public class HeartRateDataServiceImpl implements HeartRateDataService {
         List<HeartRateDataResponse> responses = result.getRecords().stream().map(r -> {
             HeartRateDataResponse resp = new HeartRateDataResponse();
             BeanUtils.copyProperties(r, resp);
+            resp.setId(r.getId().toString());
             return resp;
         }).collect(Collectors.toList());
 
@@ -56,5 +57,14 @@ public class HeartRateDataServiceImpl implements HeartRateDataService {
         return responsePage;
     }
 
-    
+    @Override
+    public void deleteHeartRateData(String id) {
+        Long userId = work.baiyun.chronicdiseaseapp.util.SecurityUtils.getCurrentUserId();
+        Long recordId = Long.parseLong(id);
+        HeartRateData record = heartRateDataMapper.selectById(recordId);
+        if (record == null || !record.getUserId().equals(userId)) {
+            throw new RuntimeException("记录不存在或无权限删除");
+        }
+        heartRateDataMapper.deleteById(recordId);
+    }
 }