吸收数字员工管理端远程策略编辑安全壳预览

This commit is contained in:
baiyanyun
2026-06-15 10:24:41 +08:00
parent 642521035b
commit e57971488c
7 changed files with 80 additions and 5 deletions

View File

@@ -202,6 +202,16 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
private String policyKind;
@JsonProperty("policy_key")
private String policyKey;
@JsonProperty("policy_edit_request_id")
private String policyEditRequestId;
@JsonProperty("policy_edit_status")
private String policyEditStatus;
@JsonProperty("policy_edit_reason")
private String policyEditReason;
@JsonProperty("remote_policy_edit_disabled")
private Boolean remotePolicyEditDisabled;
@JsonProperty("auto_merge_disabled")
private Boolean autoMergeDisabled;
@JsonProperty("schedule_id")
private String scheduleId;
@JsonProperty("job_id")

View File

@@ -1170,6 +1170,11 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
.recommendedAction(firstString(businessView.get("recommended_action"), businessView.get("recommendedAction"), payload.get("recommended_action"), payload.get("recommendedAction")))
.policyKind(firstString(businessView.get("policy_kind"), businessView.get("policyKind"), payload.get("policy_kind"), payload.get("policyKind")))
.policyKey(firstString(businessView.get("policy_key"), businessView.get("policyKey"), payload.get("policy_key"), payload.get("policyKey")))
.policyEditRequestId(firstString(businessView.get("policy_edit_request_id"), businessView.get("policyEditRequestId"), payload.get("policy_edit_request_id"), payload.get("policyEditRequestId")))
.policyEditStatus(firstString(businessView.get("policy_edit_status"), businessView.get("policyEditStatus"), payload.get("policy_edit_status"), payload.get("policyEditStatus")))
.policyEditReason(firstString(businessView.get("policy_edit_reason"), businessView.get("policyEditReason"), payload.get("policy_edit_reason"), payload.get("policyEditReason")))
.remotePolicyEditDisabled(nullableBooleanValue(firstPresent(businessView.get("remote_policy_edit_disabled"), businessView.get("remotePolicyEditDisabled"), payload.get("remote_policy_edit_disabled"), payload.get("remotePolicyEditDisabled"))))
.autoMergeDisabled(nullableBooleanValue(firstPresent(businessView.get("auto_merge_disabled"), businessView.get("autoMergeDisabled"), payload.get("auto_merge_disabled"), payload.get("autoMergeDisabled"))))
.scheduleId(firstString(businessView.get("schedule_id"), businessView.get("scheduleId"), payload.get("schedule_id"), payload.get("scheduleId")))
.jobId(firstString(businessView.get("job_id"), businessView.get("jobId"), payload.get("job_id"), payload.get("jobId")))
.revisionId(firstString(businessView.get("revision_id"), businessView.get("revisionId"), payload.get("revision_id"), payload.get("revisionId")))
@@ -1386,7 +1391,10 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|| StringUtils.equals(category, "policy_center")
|| startsWithAny(kind, "policy_", "skill_policy_", "risk_approval_policy", "route_decision_policy", "plan_step_dispatch_policy")
|| StringUtils.isNotBlank(row.getPolicyKind())
|| StringUtils.isNotBlank(row.getPolicyKey());
|| StringUtils.isNotBlank(row.getPolicyKey())
|| StringUtils.isNotBlank(row.getPolicyEditRequestId())
|| row.getRemotePolicyEditDisabled() != null
|| row.getAutoMergeDisabled() != null;
}
private boolean isSchedulerOperationsRow(DigitalEmployeeAdminWorkbenchRowDto row) {

View File

@@ -660,6 +660,22 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
"max_per_sweep", 3
),
Map.of("id", "event-policy-2", "kind", "plan_step_dispatch_policy_pulled")),
record("outbox-policy-edit", "event", "event-policy-edit-1", 101L, new Date(11_500),
Map.ofEntries(
Map.entry("entity_type", "event"),
Map.entry("category", "policy_center"),
Map.entry("kind", "remote_policy_edit_requested"),
Map.entry("status", "blocked"),
Map.entry("title", "远程策略编辑请求"),
Map.entry("policy_kind", "route_decision"),
Map.entry("policy_key", "route_decision"),
Map.entry("policy_edit_request_id", "policy-edit-1"),
Map.entry("policy_edit_status", "rejected"),
Map.entry("policy_edit_reason", "manual_review_required"),
Map.entry("remote_policy_edit_disabled", true),
Map.entry("auto_merge_disabled", true)
),
Map.of("id", "event-policy-edit-1", "kind", "remote_policy_edit_requested")),
record("outbox-scheduler", "event", "event-scheduler-1", 101L, new Date(12_000),
Map.of("entity_type", "event", "category", "scheduler", "title", "调度", "status", "ready", "job_id", "job-1"),
Map.of("id", "event-scheduler-1", "status", "ready")),
@@ -672,14 +688,19 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
"policy_center", null, null, null, null, null, null, null, null, null, null, null, 1L, 20L
);
assertThat(result.getTotal()).isEqualTo(2);
assertThat(result.getTotal()).isEqualTo(3);
assertThat(result.getRecords()).extracting(DigitalEmployeeAdminWorkbenchRowDto::getEntityId)
.containsExactly("event-policy-1", "event-policy-2");
.containsExactly("event-policy-1", "event-policy-2", "event-policy-edit-1");
assertThat(result.getRecords().get(0).getView()).isEqualTo("policy_center");
assertThat(result.getRecords().get(0).getPolicyKind()).isEqualTo("route_decision");
assertThat(result.getRecords().get(0).getPolicyKey()).isEqualTo("route_decision");
assertThat(result.getRecords().get(0).getBusinessView()).containsEntry("auto_create_governance_commands", false);
assertThat(result.getRecords().get(1).getPolicyKind()).isEqualTo("dispatch");
assertThat(result.getRecords().get(2).getPolicyEditRequestId()).isEqualTo("policy-edit-1");
assertThat(result.getRecords().get(2).getPolicyEditStatus()).isEqualTo("rejected");
assertThat(result.getRecords().get(2).getPolicyEditReason()).isEqualTo("manual_review_required");
assertThat(result.getRecords().get(2).getRemotePolicyEditDisabled()).isTrue();
assertThat(result.getRecords().get(2).getAutoMergeDisabled()).isTrue();
}
@Test