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 + "}";
|
}
|
}
|