吸收数字员工管理端审批裁决策略预览

This commit is contained in:
baiyanyun
2026-06-14 18:49:08 +08:00
parent 8b651e4ae1
commit 89eec8afc1
7 changed files with 68 additions and 12 deletions

View File

@@ -52,6 +52,18 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
private String triggerSource;
@JsonProperty("approval_id")
private String approvalId;
@JsonProperty("approval_policy_id")
private String approvalPolicyId;
@JsonProperty("conflict_policy_id")
private String conflictPolicyId;
@JsonProperty("decision_guard_status")
private String decisionGuardStatus;
@JsonProperty("batch_accept_remote_disabled")
private Boolean batchAcceptRemoteDisabled;
@JsonProperty("auto_decision_disabled")
private Boolean autoDecisionDisabled;
@JsonProperty("policy_reason")
private String policyReason;
@JsonProperty("artifact_id")
private String artifactId;
@JsonProperty("artifact_group_id")

View File

@@ -1068,6 +1068,12 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
.orchestrationId(firstString(businessView.get("orchestration_id"), businessView.get("orchestrationId"), payload.get("orchestration_id"), payload.get("orchestrationId")))
.triggerSource(firstString(businessView.get("trigger_source"), businessView.get("triggerSource"), payload.get("trigger_source"), payload.get("triggerSource")))
.approvalId(firstString(businessView.get("approval_id"), payload.get("approval_id"), "approval".equals(record.getEntityType()) ? record.getEntityId() : null))
.approvalPolicyId(firstString(businessView.get("approval_policy_id"), businessView.get("approvalPolicyId"), payload.get("approval_policy_id"), payload.get("approvalPolicyId")))
.conflictPolicyId(firstString(businessView.get("conflict_policy_id"), businessView.get("conflictPolicyId"), payload.get("conflict_policy_id"), payload.get("conflictPolicyId")))
.decisionGuardStatus(firstString(businessView.get("decision_guard_status"), businessView.get("decisionGuardStatus"), payload.get("decision_guard_status"), payload.get("decisionGuardStatus")))
.batchAcceptRemoteDisabled(nullableBooleanValue(firstPresent(businessView.get("batch_accept_remote_disabled"), businessView.get("batchAcceptRemoteDisabled"), payload.get("batch_accept_remote_disabled"), payload.get("batchAcceptRemoteDisabled"))))
.autoDecisionDisabled(nullableBooleanValue(firstPresent(businessView.get("auto_decision_disabled"), businessView.get("autoDecisionDisabled"), payload.get("auto_decision_disabled"), payload.get("autoDecisionDisabled"))))
.policyReason(firstString(businessView.get("policy_reason"), businessView.get("policyReason"), payload.get("policy_reason"), payload.get("policyReason")))
.artifactId(firstString(businessView.get("artifact_id"), payload.get("artifact_id"), "artifact".equals(record.getEntityType()) ? record.getEntityId() : null))
.artifactGroupId(firstString(businessView.get("artifact_group_id"), businessView.get("artifactGroupId"), payload.get("artifact_group_id"), payload.get("artifactGroupId")))
.artifactCount(numberValue(firstPresent(businessView.get("artifact_count"), businessView.get("artifactCount"), payload.get("artifact_count"), payload.get("artifactCount"))))

View File

@@ -283,16 +283,22 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
when(repository.queryBusinessRecords(eq(101L), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(1L), eq(20L)))
.thenReturn(page(List.of(
record("outbox-approval-conflict", "approval", "approval-1", 101L, new Date(10_000),
Map.of(
"entity_type", "approval",
"title", "远端审批冲突",
"status", "pending",
"approval_conflict_active", true,
"approval_conflict_reason", "terminal_status_mismatch",
"approval_id", "approval-1",
"plan_id", "plan-1",
"task_id", "task-1",
"priority", "high"
Map.ofEntries(
Map.entry("entity_type", "approval"),
Map.entry("title", "远端审批冲突"),
Map.entry("status", "pending"),
Map.entry("approval_conflict_active", true),
Map.entry("approval_conflict_reason", "terminal_status_mismatch"),
Map.entry("approval_id", "approval-1"),
Map.entry("plan_id", "plan-1"),
Map.entry("task_id", "task-1"),
Map.entry("priority", "high"),
Map.entry("approval_policy_id", "approval-policy-1"),
Map.entry("conflict_policy_id", "conflict-policy-1"),
Map.entry("decision_guard_status", "protected"),
Map.entry("batch_accept_remote_disabled", true),
Map.entry("auto_decision_disabled", true),
Map.entry("policy_reason", "manual_review_required")
),
Map.of("id", "approval-1", "status", "pending")),
record("outbox-risk-approval", "event", "event-risk-1", 101L, new Date(11_000),
@@ -344,6 +350,12 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
assertThat(result.getRecords().get(0).getView()).isEqualTo("approval_governance");
assertThat(result.getRecords().get(0).getApprovalId()).isEqualTo("approval-1");
assertThat(result.getRecords().get(0).getCategory()).isEqualTo("approval_conflict");
assertThat(result.getRecords().get(0).getApprovalPolicyId()).isEqualTo("approval-policy-1");
assertThat(result.getRecords().get(0).getConflictPolicyId()).isEqualTo("conflict-policy-1");
assertThat(result.getRecords().get(0).getDecisionGuardStatus()).isEqualTo("protected");
assertThat(result.getRecords().get(0).getBatchAcceptRemoteDisabled()).isTrue();
assertThat(result.getRecords().get(0).getAutoDecisionDisabled()).isTrue();
assertThat(result.getRecords().get(0).getPolicyReason()).isEqualTo("manual_review_required");
assertThat(result.getRecords().get(1).getCategory()).isEqualTo("risk_approval");
assertThat(result.getRecords().get(2).getRouteDecisionId()).isEqualTo("route-1");
assertThat(result.getRecords().get(3).getApprovalId()).isEqualTo("approval-1");