刘光辉
15 小时以前 34981c30a78e8bbd7791131059a9210f9928b62c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package jnpf.bizcommon.audit.entity.model;
 
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jnpf.base.Pagination;
import lombok.Data;
import lombok.EqualsAndHashCode;
 
import java.util.Date;
 
/**
 * 审计事件分页查询入参(spec §7.1)。沿平台 Pagination 惯例继承分页基类
 * (currentPage/pageSize 取自 {@link Pagination},默认 currentPage=1、pageSize=20)。
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class AuditPageQuery extends Pagination {
 
    /**
     * 起止时间(Task D1 拍板,收 M2 遗留清单 §五-③)。
     *
     * <p>本类走 {@code @RequestBody} 由 Jackson 反序列化。**不加这个注解时,
     * 传空格分隔的 {@code "yyyy-MM-dd HH:mm:ss"} 会报 `System abnormality`**——Jackson 默认只认
     * ISO8601 与 epoch 数字,不认空格分隔(注意:平台的 `JsonUtil` 走 fastjson、认这个格式,
     * 但那是**消息通道**的反序列化器,与 Web 入参不是同一条路,早前的排查在这里绕过弯)。
     *
     * <p>选择「加注解」而不是「让前端对齐 epoch 毫秒」的理由:`yyyy-MM-dd HH:mm:ss` 是本平台
     * 前端日期控件的默认出参格式,`jnpf-flowable` / `jnpf-visualdata` 等模块的入参模型都是这么标的
     * (如 `FlowableInstanceModel`),跟着平台惯例走比让每个接入方记住一个例外便宜。
     *
     * <p>⚠️ **两种格式都要能收**:既有脚本(`tasks/audit-test.sh` 等)传的是 epoch 毫秒**数字**。
     * Jackson 的 `DateDeserializer` 对 `VALUE_NUMBER_INT` 先行短路、不过 pattern,故加 pattern
     * 不影响数字形态——这一点**已用探针实测**而非推断,见 `tasks/audit-query-datefmt-probe.sh`。
     * 但 epoch 毫秒若以**字符串**形态传(`"1785120484000"`)则会被 pattern 拒收,脚本勿改成那样。
     */
    @Schema(description = "起始时间(含)。接受 \"yyyy-MM-dd HH:mm:ss\" 或 epoch 毫秒数字")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
 
    @Schema(description = "结束时间(含)。接受 \"yyyy-MM-dd HH:mm:ss\" 或 epoch 毫秒数字")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
 
    @Schema(description = "操作人姓名,模糊匹配")
    private String operatorName;
 
    @Schema(description = "应用名,如 jnpf-lims")
    private String appName;
 
    /**
     * Codex 批次三a Important#1:spec §7.1 层 0 事件的 app_name 固定为 jnpf-visualdev(发起服务),
     * 用户视角"按业务应用筛选"应落在 biz_module(业务模块标识,如 lims/eln)。app_name 保留供技术侧筛选。
     */
    @Schema(description = "业务模块,如 lims/eln(用户视角应用筛选,区别于技术侧 app_name)")
    private String bizModule;
 
    @Schema(description = "事件类型:DATA_CHANGE / BIZ_ACTION / E_SIGNATURE")
    private String eventType;
 
    @Schema(description = "动作码:CREATE/UPDATE/DELETE/...")
    private String actionCode;
 
    @Schema(description = "目标表名")
    private String targetTable;
 
    @Schema(description = "业务单号")
    private String bizCode;
 
    @Schema(description = "业务对象类型")
    private String bizType;
 
    @Schema(description = "关键字,匹配 field_diffs 内容(pg_bigm 加速)")
    private String keyword;
}