package jnpf.base.model; /** * 表单数据删除的结果载体。 * *
AUDIT 补丁(2026-08-05,登记 tasks/jnpf-platform-patches.md #7)新增。 * *
为什么需要它:{@code FlowFormDataUtil.deleteTable} 原先返回 {@code boolean} * 且**无条件返回 true**——记录本来就不存在,与真的删掉了一条,调用方分不出来。 * 它内部其实已经算出了两个事实(被删记录的真实主键、实际影响行数),只是全丢掉了。 * *
为什么要真实主键:流程侧删除传进来的 id 可能是 {@code flowTaskId} 而不是业务主键 * ({@code deleteTable} 按「主键 = id OR flowTaskId = id」定位),而审计事件的 dataId * 必须是业务主键,否则查询侧对不上记录。 * *
为什么不含子表影响行数:三个消费方(成功/失败判定、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 + "}"; } }