Просмотр исходного кода

feat(api): 统一返回分页数据结构并新增文档支持

- 血糖、血压、心率、体格及用户绑定接口统一使用新的分页响应 VO
- 新增各类数据对应的 PageResponse VO 类以提升 Swagger 文档可读性
- 物理数据分页接口增加完整字段映射包括 orders 等高级配置项
- 移除旧有的 UserBindingPageResult 引用确保代码一致性
mcbaiyun 1 месяц назад
Родитель
Сommit
e4b84c424d

+ 9 - 2
src/main/java/work/baiyun/chronicdiseaseapp/controller/BloodGlucoseDataController.java

@@ -57,7 +57,7 @@ public class BloodGlucoseDataController {
     @ApiResponses(value = {
         @ApiResponse(responseCode = "200", description = "成功查询血糖数据列表",
             content = @Content(mediaType = "application/json",
-                schema = @Schema(implementation = Page.class))),
+                schema = @Schema(implementation = work.baiyun.chronicdiseaseapp.model.vo.BloodGlucoseDataPageResponse.class))),
         @ApiResponse(responseCode = "500", description = "服务器内部错误",
             content = @Content(mediaType = "application/json",
                 schema = @Schema(implementation = Void.class)))
@@ -66,7 +66,14 @@ public class BloodGlucoseDataController {
     public R<?> list(@RequestBody BaseQueryRequest req) {
         try {
             Page<BloodGlucoseDataResponse> page = service.listBloodGlucoseData(req);
-            return R.success(200, "ok", page);
+            work.baiyun.chronicdiseaseapp.model.vo.BloodGlucoseDataPageResponse vo = new work.baiyun.chronicdiseaseapp.model.vo.BloodGlucoseDataPageResponse();
+            vo.setRecords(page.getRecords());
+            vo.setTotal(page.getTotal());
+            vo.setSize(page.getSize());
+            vo.setCurrent(page.getCurrent());
+            vo.setOptimizeCountSql(page.optimizeCountSql());
+            vo.setPages(page.getPages());
+            return R.success(200, "ok", vo);
         } catch (Exception e) {
             logger.error("list blood glucose data failed", e);
             return R.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());

+ 9 - 2
src/main/java/work/baiyun/chronicdiseaseapp/controller/BloodPressureDataController.java

@@ -57,7 +57,7 @@ public class BloodPressureDataController {
     @ApiResponses(value = {
         @ApiResponse(responseCode = "200", description = "成功查询血压数据列表",
             content = @Content(mediaType = "application/json",
-                schema = @Schema(implementation = Page.class))),
+                schema = @Schema(implementation = work.baiyun.chronicdiseaseapp.model.vo.BloodPressureDataPageResponse.class))),
         @ApiResponse(responseCode = "500", description = "服务器内部错误",
             content = @Content(mediaType = "application/json",
                 schema = @Schema(implementation = Void.class)))
@@ -66,7 +66,14 @@ public class BloodPressureDataController {
     public R<?> list(@RequestBody BaseQueryRequest req) {
         try {
             Page<BloodPressureDataResponse> page = service.listBloodPressureData(req);
-            return R.success(200, "ok", page);
+            work.baiyun.chronicdiseaseapp.model.vo.BloodPressureDataPageResponse vo = new work.baiyun.chronicdiseaseapp.model.vo.BloodPressureDataPageResponse();
+            vo.setRecords(page.getRecords());
+            vo.setTotal(page.getTotal());
+            vo.setSize(page.getSize());
+            vo.setCurrent(page.getCurrent());
+            vo.setOptimizeCountSql(page.optimizeCountSql());
+            vo.setPages(page.getPages());
+            return R.success(200, "ok", vo);
         } catch (Exception e) {
             logger.error("list blood pressure data failed", e);
             return R.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());

+ 9 - 2
src/main/java/work/baiyun/chronicdiseaseapp/controller/HeartRateDataController.java

@@ -57,7 +57,7 @@ public class HeartRateDataController {
     @ApiResponses(value = {
         @ApiResponse(responseCode = "200", description = "成功查询心率数据列表",
             content = @Content(mediaType = "application/json",
-                schema = @Schema(implementation = Page.class))),
+                schema = @Schema(implementation = work.baiyun.chronicdiseaseapp.model.vo.HeartRateDataPageResponse.class))),
         @ApiResponse(responseCode = "500", description = "服务器内部错误",
             content = @Content(mediaType = "application/json",
                 schema = @Schema(implementation = Void.class)))
@@ -66,7 +66,14 @@ public class HeartRateDataController {
     public R<?> list(@RequestBody BaseQueryRequest req) {
         try {
             Page<HeartRateDataResponse> page = service.listHeartRateData(req);
-            return R.success(200, "ok", page);
+            work.baiyun.chronicdiseaseapp.model.vo.HeartRateDataPageResponse vo = new work.baiyun.chronicdiseaseapp.model.vo.HeartRateDataPageResponse();
+            vo.setRecords(page.getRecords());
+            vo.setTotal(page.getTotal());
+            vo.setSize(page.getSize());
+            vo.setCurrent(page.getCurrent());
+            vo.setOptimizeCountSql(page.optimizeCountSql());
+            vo.setPages(page.getPages());
+            return R.success(200, "ok", vo);
         } catch (Exception e) {
             logger.error("list heart rate data failed", e);
             return R.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());

+ 25 - 2
src/main/java/work/baiyun/chronicdiseaseapp/controller/PhysicalDataController.java

@@ -57,7 +57,7 @@ public class PhysicalDataController {
     @ApiResponses(value = {
         @ApiResponse(responseCode = "200", description = "成功查询体格数据列表",
             content = @Content(mediaType = "application/json",
-                schema = @Schema(implementation = Page.class))),
+                schema = @Schema(implementation = work.baiyun.chronicdiseaseapp.model.vo.PhysicalDataPageResponse.class))),
         @ApiResponse(responseCode = "500", description = "服务器内部错误",
             content = @Content(mediaType = "application/json",
                 schema = @Schema(implementation = Void.class)))
@@ -66,7 +66,30 @@ public class PhysicalDataController {
     public R<?> listPhysicalData(@RequestBody BaseQueryRequest req) {
         try {
             Page<PhysicalDataResponse> page = physicalDataService.listPhysicalData(req);
-            return R.success(200, "ok", page);
+            // 转换为文档友好的VO
+            work.baiyun.chronicdiseaseapp.model.vo.PhysicalDataPageResponse vo = new work.baiyun.chronicdiseaseapp.model.vo.PhysicalDataPageResponse();
+            vo.setRecords(page.getRecords());
+            vo.setTotal(page.getTotal());
+            vo.setSize(page.getSize());
+            vo.setCurrent(page.getCurrent());
+            vo.setOptimizeCountSql(page.optimizeCountSql());
+            vo.setSearchCount(page.isSearchCount());
+            vo.setOptimizeJoinOfCountSql(false);
+            vo.setMaxLimit(page.getMaxLimit());
+            vo.setCountId(page.getCountId());
+            vo.setPages(page.getPages());
+            // orders 转换
+            if (page.getOrders() != null) {
+                java.util.List<work.baiyun.chronicdiseaseapp.model.vo.PhysicalDataPageResponse.OrderItem> orderItems = new java.util.ArrayList<>();
+                for (com.baomidou.mybatisplus.core.metadata.OrderItem item : page.getOrders()) {
+                    work.baiyun.chronicdiseaseapp.model.vo.PhysicalDataPageResponse.OrderItem oi = new work.baiyun.chronicdiseaseapp.model.vo.PhysicalDataPageResponse.OrderItem();
+                    oi.setColumn(item.getColumn());
+                    oi.setAsc(item.isAsc());
+                    orderItems.add(oi);
+                }
+                vo.setOrders(orderItems);
+            }
+            return R.success(200, "ok", vo);
         } catch (Exception e) {
             logger.error("list physical data failed", e);
             return R.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());

+ 18 - 5
src/main/java/work/baiyun/chronicdiseaseapp/controller/UserBindingController.java

@@ -20,7 +20,6 @@ import work.baiyun.chronicdiseaseapp.model.vo.CreateUserBindingRequest;
 import work.baiyun.chronicdiseaseapp.model.vo.DeleteUserBindingRequest;
 import work.baiyun.chronicdiseaseapp.model.vo.CheckUserBindingResponse;
 import work.baiyun.chronicdiseaseapp.model.vo.CheckUserBindingRequest;
-import work.baiyun.chronicdiseaseapp.model.vo.UserBindingPageResult;
 import work.baiyun.chronicdiseaseapp.enums.ErrorCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -80,7 +79,7 @@ public class UserBindingController {
     @ApiResponses(value = {
         @ApiResponse(responseCode = "200", description = "成功查询绑定关系列表",
             content = @Content(mediaType = "application/json",
-                schema = @Schema(implementation = UserBindingPageResult.class))),
+                schema = @Schema(implementation = work.baiyun.chronicdiseaseapp.model.vo.UserBindingPageResponse.class))),
         @ApiResponse(responseCode = "500", description = "服务器内部错误",
             content = @Content(mediaType = "application/json",
                 schema = @Schema(implementation = Void.class)))
@@ -89,7 +88,14 @@ public class UserBindingController {
     public R<?> listByPatient(Long patientUserId, String bindingType, @RequestBody BaseQueryRequest req) {
         try {
             Page<UserBindingResponse> page = userBindingService.listBindingsByPatient(patientUserId, bindingType, req);
-            return R.success(200, "ok", page);
+            work.baiyun.chronicdiseaseapp.model.vo.UserBindingPageResponse vo = new work.baiyun.chronicdiseaseapp.model.vo.UserBindingPageResponse();
+            vo.setRecords(page.getRecords());
+            vo.setTotal(page.getTotal());
+            vo.setSize(page.getSize());
+            vo.setCurrent(page.getCurrent());
+            vo.setOptimizeCountSql(page.optimizeCountSql());
+            vo.setPages(page.getPages());
+            return R.success(200, "ok", vo);
         } catch (Exception e) {
             logger.error("list bindings by patient failed", e);
             return R.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());
@@ -100,7 +106,7 @@ public class UserBindingController {
     @ApiResponses(value = {
         @ApiResponse(responseCode = "200", description = "成功查询被绑定关系列表",
             content = @Content(mediaType = "application/json",
-                schema = @Schema(implementation = UserBindingPageResult.class))),
+                schema = @Schema(implementation = work.baiyun.chronicdiseaseapp.model.vo.UserBindingPageResponse.class))),
         @ApiResponse(responseCode = "500", description = "服务器内部错误",
             content = @Content(mediaType = "application/json",
                 schema = @Schema(implementation = Void.class)))
@@ -109,7 +115,14 @@ public class UserBindingController {
     public R<?> listByBoundUser(Long boundUserId, String bindingType, @RequestBody BaseQueryRequest req) {
         try {
             Page<UserBindingResponse> page = userBindingService.listBindingsByBoundUser(boundUserId, bindingType, req);
-            return R.success(200, "ok", page);
+            work.baiyun.chronicdiseaseapp.model.vo.UserBindingPageResponse vo = new work.baiyun.chronicdiseaseapp.model.vo.UserBindingPageResponse();
+            vo.setRecords(page.getRecords());
+            vo.setTotal(page.getTotal());
+            vo.setSize(page.getSize());
+            vo.setCurrent(page.getCurrent());
+            vo.setOptimizeCountSql(page.optimizeCountSql());
+            vo.setPages(page.getPages());
+            return R.success(200, "ok", vo);
         } catch (Exception e) {
             logger.error("list bindings by bound user failed", e);
             return R.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());

+ 39 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/BloodGlucoseDataPageResponse.java

@@ -0,0 +1,39 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import java.util.List;
+
+@Schema(description = "血糖数据分页响应")
+@Data
+public class BloodGlucoseDataPageResponse {
+    @Schema(description = "数据列表")
+    private List<BloodGlucoseDataResponse> records;
+    @Schema(description = "总数")
+    private long total;
+    @Schema(description = "每页大小")
+    private long size;
+    @Schema(description = "当前页码")
+    private long current;
+    @Schema(description = "排序字段")
+    private List<OrderItem> orders;
+    @Schema(description = "是否优化 count SQL")
+    private boolean optimizeCountSql;
+    @Schema(description = "是否搜索 count")
+    private boolean searchCount;
+    @Schema(description = "是否优化 join count SQL")
+    private boolean optimizeJoinOfCountSql;
+    @Schema(description = "最大限制")
+    private Long maxLimit;
+    @Schema(description = "countId")
+    private String countId;
+    @Schema(description = "总页数")
+    private long pages;
+    @Data
+    public static class OrderItem {
+        @Schema(description = "排序字段名")
+        private String column;
+        @Schema(description = "是否升序")
+        private Boolean asc;
+    }
+}

+ 39 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/BloodPressureDataPageResponse.java

@@ -0,0 +1,39 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import java.util.List;
+
+@Schema(description = "血压数据分页响应")
+@Data
+public class BloodPressureDataPageResponse {
+    @Schema(description = "数据列表")
+    private List<BloodPressureDataResponse> records;
+    @Schema(description = "总数")
+    private long total;
+    @Schema(description = "每页大小")
+    private long size;
+    @Schema(description = "当前页码")
+    private long current;
+    @Schema(description = "排序字段")
+    private List<OrderItem> orders;
+    @Schema(description = "是否优化 count SQL")
+    private boolean optimizeCountSql;
+    @Schema(description = "是否搜索 count")
+    private boolean searchCount;
+    @Schema(description = "是否优化 join count SQL")
+    private boolean optimizeJoinOfCountSql;
+    @Schema(description = "最大限制")
+    private Long maxLimit;
+    @Schema(description = "countId")
+    private String countId;
+    @Schema(description = "总页数")
+    private long pages;
+    @Data
+    public static class OrderItem {
+        @Schema(description = "排序字段名")
+        private String column;
+        @Schema(description = "是否升序")
+        private Boolean asc;
+    }
+}

+ 39 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/HeartRateDataPageResponse.java

@@ -0,0 +1,39 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import java.util.List;
+
+@Schema(description = "心率数据分页响应")
+@Data
+public class HeartRateDataPageResponse {
+    @Schema(description = "数据列表")
+    private List<HeartRateDataResponse> records;
+    @Schema(description = "总数")
+    private long total;
+    @Schema(description = "每页大小")
+    private long size;
+    @Schema(description = "当前页码")
+    private long current;
+    @Schema(description = "排序字段")
+    private List<OrderItem> orders;
+    @Schema(description = "是否优化 count SQL")
+    private boolean optimizeCountSql;
+    @Schema(description = "是否搜索 count")
+    private boolean searchCount;
+    @Schema(description = "是否优化 join count SQL")
+    private boolean optimizeJoinOfCountSql;
+    @Schema(description = "最大限制")
+    private Long maxLimit;
+    @Schema(description = "countId")
+    private String countId;
+    @Schema(description = "总页数")
+    private long pages;
+    @Data
+    public static class OrderItem {
+        @Schema(description = "排序字段名")
+        private String column;
+        @Schema(description = "是否升序")
+        private Boolean asc;
+    }
+}

+ 50 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/PhysicalDataPageResponse.java

@@ -0,0 +1,50 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import java.util.List;
+
+@Schema(description = "体格数据分页响应")
+@Data
+public class PhysicalDataPageResponse {
+    @Schema(description = "数据列表")
+    private List<PhysicalDataResponse> records;
+
+    @Schema(description = "总数")
+    private long total;
+
+    @Schema(description = "每页大小")
+    private long size;
+
+    @Schema(description = "当前页码")
+    private long current;
+
+    @Schema(description = "排序字段")
+    private List<OrderItem> orders;
+
+    @Schema(description = "是否优化 count SQL")
+    private boolean optimizeCountSql;
+
+    @Schema(description = "是否搜索 count")
+    private boolean searchCount;
+
+    @Schema(description = "是否优化 join count SQL")
+    private boolean optimizeJoinOfCountSql;
+
+    @Schema(description = "最大限制")
+    private Long maxLimit;
+
+    @Schema(description = "countId")
+    private String countId;
+
+    @Schema(description = "总页数")
+    private long pages;
+
+    @Data
+    public static class OrderItem {
+        @Schema(description = "排序字段名")
+        private String column;
+        @Schema(description = "是否升序")
+        private Boolean asc;
+    }
+}

+ 39 - 0
src/main/java/work/baiyun/chronicdiseaseapp/model/vo/UserBindingPageResponse.java

@@ -0,0 +1,39 @@
+package work.baiyun.chronicdiseaseapp.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import java.util.List;
+
+@Schema(description = "用户绑定分页响应")
+@Data
+public class UserBindingPageResponse {
+    @Schema(description = "数据列表")
+    private List<UserBindingResponse> records;
+    @Schema(description = "总数")
+    private long total;
+    @Schema(description = "每页大小")
+    private long size;
+    @Schema(description = "当前页码")
+    private long current;
+    @Schema(description = "排序字段")
+    private List<OrderItem> orders;
+    @Schema(description = "是否优化 count SQL")
+    private boolean optimizeCountSql;
+    @Schema(description = "是否搜索 count")
+    private boolean searchCount;
+    @Schema(description = "是否优化 join count SQL")
+    private boolean optimizeJoinOfCountSql;
+    @Schema(description = "最大限制")
+    private Long maxLimit;
+    @Schema(description = "countId")
+    private String countId;
+    @Schema(description = "总页数")
+    private long pages;
+    @Data
+    public static class OrderItem {
+        @Schema(description = "排序字段名")
+        private String column;
+        @Schema(description = "是否升序")
+        private Boolean asc;
+    }
+}