package com.water.common.controller; import com.water.common.entity.R; import com.water.common.entity.query.PageQuery; import com.water.common.entity.query.PageResult; import com.water.common.entity.query.QueryCondition; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 分页查询控制器 */ @RestController @RequestMapping("/api/page") @RequiredArgsConstructor @Tag(name = "分页查询", description = "通用分页查询接口") public class PageController { @PostMapping("/query") @Operation(summary = "通用分页查询", description = "支持过滤、排序、分页的通用查询接口") public R>> query( @Parameter(description = "查询条件") @RequestBody QueryCondition queryCondition) { try { // 这里应该根据查询条件查询数据库,简化示例中返回模拟数据 PageQuery page = queryCondition.getPage(); List> records = new ArrayList<>(); // 生成模拟数据 for (int i = 0; i < page.getSize(); i++) { Map record = new HashMap<>(); record.put("id", (page.getCurrent() - 1) * page.getSize() + i + 1); record.put("name", "测试数据 " + ((page.getCurrent() - 1) * page.getSize() + i + 1)); record.put("createTime", "2026-06-15"); records.add(record); } // 创建分页结果 PageResult> result = new PageResult<>(); result.setCurrent(page.getCurrent()); result.setSize(page.getSize()); result.setTotal(100L); // 模拟总记录数 result.setRecords(records); result.calculatePages(); return R.success("查询成功", result); } catch (Exception e) { return R.error("查询失败: " + e.getMessage()); } } @GetMapping("/list") @Operation(summary = "简单分页查询", description = "简单的分页查询接口") public R>> list( @Parameter(description = "当前页码") @RequestParam(defaultValue = "1") Integer current, @Parameter(description = "每页数量") @RequestParam(defaultValue = "10") Integer size, @Parameter(description = "查询关键词") @RequestParam(required = false) String keyword) { try { // 创建分页查询条件 PageQuery pageQuery = new PageQuery(); pageQuery.setCurrent(current); pageQuery.setSize(size); // 查询条件 QueryCondition queryCondition = new QueryCondition(); queryCondition.setPage(pageQuery); // 如果有关键词,添加过滤条件 if (keyword != null && !keyword.trim().isEmpty()) { List filters = new ArrayList<>(); QueryCondition.Filter nameFilter = new QueryCondition.Filter(); nameFilter.setField("name"); nameFilter.setOperator("like"); nameFilter.setValue("%" + keyword + "%"); filters.add(nameFilter); queryCondition.setFilters(filters); } // 调用通用查询方法 return query(queryCondition); } catch (Exception e) { return R.error("查询失败: " + e.getMessage()); } } @GetMapping("/export") @Operation(summary = "导出查询结果", description = "导出查询结果到Excel") public R export( @Parameter(description = "当前页码") @RequestParam(defaultValue = "1") Integer current, @Parameter(description = "每页数量") @RequestParam(defaultValue = "10000") Integer size, @Parameter(description = "查询关键词") @RequestParam(required = false) String keyword) { try { // 这里应该根据条件查询数据并导出到Excel return R.success("导出成功", "data_export_" + System.currentTimeMillis() + ".xlsx"); } catch (Exception e) { return R.error("导出失败: " + e.getMessage()); } } }