刘光辉
昨天 bb638871a7fb692d80f1b7a758f991dc0879002c
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
package jnpf.base.model;
 
/**
 * 表单数据删除的结果载体。
 *
 * <p>AUDIT 补丁(2026-08-05,登记 tasks/jnpf-platform-patches.md #7)新增。
 *
 * <p><b>为什么需要它</b>:{@code FlowFormDataUtil.deleteTable} 原先返回 {@code boolean}
 * 且**无条件返回 true**——记录本来就不存在,与真的删掉了一条,调用方分不出来。
 * 它内部其实已经算出了两个事实(被删记录的真实主键、实际影响行数),只是全丢掉了。
 *
 * <p><b>为什么要真实主键</b>:流程侧删除传进来的 id 可能是 {@code flowTaskId} 而不是业务主键
 * ({@code deleteTable} 按「主键 = id OR flowTaskId = id」定位),而审计事件的 dataId
 * 必须是业务主键,否则查询侧对不上记录。
 *
 * <p><b>为什么不含子表影响行数</b>:三个消费方(成功/失败判定、dataIdList 入列、审计 dataId)
 * 没有一个需要它。要用时再加,不预留。
 */
public class FormDeleteResult {
 
    /** 真实主键;{@code null} 表示记录不存在。 */
    private final Object mainId;
 
    /** 主表实际影响行数:逻辑删取 update 的返回值,物理删取 delete 的返回值。 */
    private final int affectedRows;
 
    private FormDeleteResult(Object mainId, int affectedRows) {
        this.mainId = mainId;
        this.affectedRows = affectedRows;
    }
 
    /** 记录不存在:没定位到主表行,什么都没删。 */
    public static FormDeleteResult notFound() {
        return new FormDeleteResult(null, 0);
    }
 
    public static FormDeleteResult of(Object mainId, int affectedRows) {
        return new FormDeleteResult(mainId, affectedRows);
    }
 
    public Object getMainId() {
        return mainId;
    }
 
    public int getAffectedRows() {
        return affectedRows;
    }
 
    /** 主表行是否存在(与"是否删成功"分开:定位到了但影响 0 行也算 found)。 */
    public boolean isFound() {
        return mainId != null;
    }
 
    /** 是否真的删掉了(逻辑删也算——它是一次 update)。 */
    public boolean isDeleted() {
        return affectedRows > 0;
    }
 
    @Override
    public String toString() {
        return "FormDeleteResult{mainId=" + mainId + ", affectedRows=" + affectedRows + "}";
    }
}