Class TransferOperation

java.lang.Object
cloud.opencode.base.flow.operation.TransferOperation

public final class TransferOperation extends Object
Transfer action — changes the assignee of a PENDING task (v4 §8.7). 转办操作 —— 修改 PENDING 任务的 assigneeId。
Since:
JDK 25, opencode-base-flow V1.0.5
Author:
Leon Soo
  • Field Details

    • MAX_TRANSFER_DEPTH

      public static final int MAX_TRANSFER_DEPTH
      Max length of a single transfer chain on one task. Without a cap, two colluding users could chain transfers forever to obscure the responsible approver. AddSign already enforces a chain-depth CAS — transfer needs its own ceiling. 单任务最大转交链长;不设上限时两人合谋可反复转交以混淆审计。
      See Also:
  • Constructor Details

    • TransferOperation

      public TransferOperation(FlowRepository repo, HistoryWriter history, AssigneeResolver assigneeResolver)
      Construct a transfer operation. 构造转办操作。
      Parameters:
      repo - persistence facade — 持久化门面
      history - history writer — 历史追加器
      assigneeResolver - assignee resolver SPI — 参与者解析 SPI
      Since:
      JDK 25, opencode-base-flow V1.0.5
  • Method Details

    • execute

      public void execute(Task task, String fromUserId, String toUserId, String reason)
      Execute the transfer action. 执行转办操作。

      Post-R2 CR-1: the assignee mutation + history append run inside FlowRepository.runInTransaction(Runnable) so a partial failure rolls back atomically on JDBC backends, matching Approve / Reject / Vote / Withdraw / AddSign.

      Post-R2 CR-1:assignee 改写 + history 追加置于 FlowRepository.runInTransaction(Runnable),JDBC 后端可原子回滚, 与其它 5 个动作(Approve/Reject/Vote/Withdraw/AddSign)保持一致。

      Parameters:
      task - already-validated owned PENDING task — 已校验任务
      fromUserId - caller user id (= task.assigneeId) — 调用者
      toUserId - target user id — 目标 userId
      reason - sanitised reason (nullable) — 已清洗理由
      Since:
      JDK 25, opencode-base-flow V1.0.5