build / build-push (push) Successful in 47s
- NOTIFY:TYPE_NOTIFY 瞬时抄送(flw_cc 逐人留痕 + CC_SENT 事件 + 站内通知不加待办角标)、/api/flow/cc/my、轨迹 kind=CC 与 oapi progress 抄送步、示意图青框卡片
- CONDITION:flw_router 判断服务注册 + flw_route_log 决策留痕(REQUIRES_NEW,reroute 回滚不丢失败行)+ 同步判断调用(服务目录寻址 + 平台签名,3s×3 退避重试)+ 失败挂起/管理端重跑(不配默认出口)+ 可选事件 flow.route.decided
- JOIN scope:branch_key 路径前缀编码 + scope 级到齐放行 + DefValidator SPLIT/JOIN 配对与键长守卫(存量无点号键零迁移,历史直连图回退实例级口径)
- 管理端:/api/flow/admin/router/* CRUD + POST /api/flow/admin/instance/{id}/reroute
- 生产 SQL:sql/20260923_create_flw_cc.sql(含 flw_task 时间列升 DATETIME(3))、20260924_create_flw_router_and_route_log.sql
- 测试:全量 125 绿(FlowEngineIT 24,含条件/嵌套并行/退回重走用例)
31 lines
1.2 KiB
Java
31 lines
1.2 KiB
Java
package com.yunhai.flowcenter.engine;
|
|
|
|
import com.yunhai.flowcenter.entity.FlwRouteLog;
|
|
import com.yunhai.flowcenter.repository.FlwRouteLogRepository;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Propagation;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
/**
|
|
* 路由留痕落库(REQUIRES_NEW,与回调 CallbackLogStore 同纪律):判断调用是真实外部副作用,
|
|
* 留痕不随外层事务回滚消失——挂起重跑失败(reroute 抛业务错回滚办件推进)时失败行仍保留;
|
|
* attempt 在同一新事务里"查最大+1"再落行,避免并发双判撞号。
|
|
*/
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
public class RouteLogStore {
|
|
|
|
private final FlwRouteLogRepository routeLogRepository;
|
|
|
|
/** 落一行留痕并提交(独立事务),返回带 attempt 的落库行 */
|
|
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
|
public FlwRouteLog append(FlwRouteLog row) {
|
|
row.setAttempt(routeLogRepository.maxAttempt(row.getInstanceId(), row.getNodeId()) + 1);
|
|
row.setDecideTime(LocalDateTime.now());
|
|
return routeLogRepository.save(row);
|
|
}
|
|
}
|