skills/xu-cell/ai-engineering-init/leniu-java-report-query-param

leniu-java-report-query-param

SKILL.md

leniu-tengyun-core 报表查询入参规范

项目特征

特征 说明
包名前缀 net.xnzn.core.*
JDK 版本 21
请求封装 LeRequest<T>
分页参数 PageDTO
基类 ReportBaseParam
校验框架 Jakarta Validation

核心结构

1. Controller层接收入参

import com.pig4cloud.pigx.common.core.util.LeRequest;

@PostMapping("/page")
public ReportBaseTotalVO<XxxVO> pageXxxSummary(@RequestBody LeRequest<XxxParam> request) {
    XxxParam param = request.getContent();
    return xxxService.pageSummary(param);
}

2. Param类基类继承

报表查询Param类必须继承 ReportBaseParam

import lombok.Data;
import lombok.EqualsAndHashCode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import net.xnzn.core.common.page.PageDTO;
import net.xnzn.core.common.param.ReportBaseParam;

import java.time.LocalDate;
import java.util.List;

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "XXX查询入参")
public class XxxParam extends ReportBaseParam {

    @ApiModelProperty("关键字")
    private String keyword;

    @ApiModelProperty("状态")
    private Integer status;
}

3. ReportBaseParam 提供的通用字段

字段名 类型 说明
page PageDTO 分页参数
startDate LocalDate 开始时间
endDate LocalDate 结束时间
exportCols List<String> 需要导出的列
sumType Integer 汇总类型
sumDimension Integer 统计维度

常用查询字段模式

时间范围查询

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("订单报表查询参数")
public class OrderReportParam extends ReportBaseParam {

    // 基类已有 startDate, endDate

    @ApiModelProperty("开始时间(精确到秒)")
    private LocalDateTime startTime;

    @ApiModelProperty("结束时间(精确到秒)")
    private LocalDateTime endTime;
}

组织筛选

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("组织报表查询参数")
public class OrgReportParam extends ReportBaseParam {

    @ApiModelProperty("组织ID")
    private Long orgId;

    @ApiModelProperty("组织ID列表")
    private List<Long> orgIds;

    @ApiModelProperty("食堂ID")
    private Long canteenId;

    @ApiModelProperty("食堂ID列表")
    private List<Long> canteenIds;
}

餐次筛选

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("餐次报表查询参数")
public class MealtimeReportParam extends ReportBaseParam {

    @ApiModelProperty("餐次类型列表")
    private List<Integer> mealtimeTypes;

    @ApiModelProperty("是否只查正餐")
    private Boolean onlyMainMeal;
}

金额范围

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("金额报表查询参数")
public class AmountReportParam extends ReportBaseParam {

    @ApiModelProperty("最小金额(分)")
    private Long minAmount;

    @ApiModelProperty("最大金额(分)")
    private Long maxAmount;
}

PageDTO 结构

@Data
@ApiModel("分页参数")
public class PageDTO {

    @ApiModelProperty("当前页码")
    private Integer current = 1;

    @ApiModelProperty("每页条数")
    private Integer size = 10;

    @ApiModelProperty("是否查询总数")
    private Boolean ifCount = true;

    @ApiModelProperty("页数为0时的处理")
    private Boolean ifPageSizeZero = false;
}

完整示例

@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("销售报表查询参数")
public class SalesReportParam extends ReportBaseParam {

    @ApiModelProperty(value = "关键字")
    private String keyword;

    @ApiModelProperty(value = "组织ID列表")
    private List<Long> orgIds;

    @ApiModelProperty(value = "食堂ID列表")
    private List<Long> canteenIds;

    @ApiModelProperty(value = "餐次类型列表")
    private List<Integer> mealtimeTypes;

    @ApiModelProperty(value = "支付方式列表")
    private List<Integer> payTypes;

    @ApiModelProperty(value = "最小金额(分)")
    private Long minAmount;

    @ApiModelProperty(value = "最大金额(分)")
    private Long maxAmount;

    @ApiModelProperty(value = "是否查询合计行")
    private Boolean ifQueryTotal = true;
}

两层继承结构(实际生产代码模式)

报表 Param 存在两层继承结构,以订单分析报表为例:

ReportAnalysisParam(大类基类:订单分析类报表通用字段)
    └── ReportAnalysisTurnoverParam(具体报表 Param,加业务字段)

ReportAnalysisParam(中间基类)

import lombok.Data;
import net.xnzn.core.common.page.PageDTO;

import java.time.LocalDate;
import java.util.List;

@Data
public class ReportAnalysisParam {

    /** 分页参数 */
    private PageDTO page;

    /** 开始日期 */
    private LocalDate startDate;

    /** 结束日期 */
    private LocalDate endDate;

    /** 日期维度:1=按月 2=按日 */
    private Integer dateType;

    /** 食堂摊位ID列表(多选) */
    private List<Long> canteenStallIds;
}

ReportAnalysisTurnoverParam(具体 Param,继承中间基类)

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;

@Data
@EqualsAndHashCode(callSuper = true)
public class ReportAnalysisTurnoverParam extends ReportAnalysisParam {

    /** 餐次类型(单选) */
    private Integer mealtimeType;

    /** 餐次类型列表(多选) */
    private List<Integer> mealtimeTypeList;

    /** 排序类型:1=按金额降序(默认) */
    private Integer sortType = 1;

    /** 食堂ID(单选) */
    private Long canteenId;

    /** 摊位ID(单选) */
    private Long stallId;
}

选择继承层级的判断依据

  • 若报表是"订单分析"大类报表 → 继承 ReportAnalysisParam(含 dateType
  • 若是通用报表 → 直接继承 ReportBaseParam(含 page/startDate/endDate/exportCols

注意事项

  • 报表Param类必须继承 ReportBaseParam 或其子类(如 ReportAnalysisParam
  • 时间字段使用 LocalDateLocalDateTime
  • dateType 字段含义:1=按月汇总,2=按日汇总
  • 金额查询参数类型与业务域保持一致:钱包/账户用 Long(分),订单用 BigDecimal(分);见 leniu-java-amount-handling
  • 导出时通过 exportCols 控制导出列
Weekly Installs
3
GitHub Stars
8
First Seen
6 days ago
Installed on
gemini-cli3
github-copilot3
codex3
kimi-cli3
cursor3
amp3