吸收数字员工管理端日报审批裁决回写预览

This commit is contained in:
baiyanyun
2026-06-15 09:54:56 +08:00
parent b64f8e35c3
commit 642521035b
7 changed files with 75 additions and 11 deletions

View File

@@ -109,6 +109,16 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
private String sendRecordId;
@JsonProperty("approval_decision_status")
private String approvalDecisionStatus;
@JsonProperty("daily_report_approval_id")
private String dailyReportApprovalId;
@JsonProperty("daily_report_approval_action")
private String dailyReportApprovalAction;
@JsonProperty("daily_report_approval_actor")
private String dailyReportApprovalActor;
@JsonProperty("daily_report_approval_reason")
private String dailyReportApprovalReason;
@JsonProperty("daily_report_approval_recorded_at")
private String dailyReportApprovalRecordedAt;
@JsonProperty("route_decision_id")
private String routeDecisionId;
@JsonProperty("service_id")

View File

@@ -71,7 +71,7 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
"notification:mark_read", "notification:dismiss",
"notification_policy:pull_policy", "notification_policy:mark_reviewed", "notification_policy:dismiss",
"artifact:mark_keep", "artifact:mark_expire", "artifact:mark_reviewed", "artifact:record_cleanup_request",
"daily_report:mark_delivered", "daily_report:mark_confirmed", "daily_report:request_approval",
"daily_report:mark_delivered", "daily_report:mark_confirmed", "daily_report:request_approval", "daily_report:record_approval_decision",
"memory:archive_memory", "memory:restore_memory", "memory:mark_reviewed",
"skill:mark_reviewed", "skill:dismiss",
"policy_snapshot:pull_policy", "policy_snapshot:mark_reviewed", "policy_snapshot:dismiss",
@@ -1123,6 +1123,11 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
.dailyReportFactId(firstString(businessView.get("daily_report_fact_id"), businessView.get("dailyReportFactId"), payload.get("daily_report_fact_id"), payload.get("dailyReportFactId")))
.sendRecordId(firstString(businessView.get("send_record_id"), businessView.get("sendRecordId"), payload.get("send_record_id"), payload.get("sendRecordId")))
.approvalDecisionStatus(firstString(businessView.get("approval_decision_status"), businessView.get("approvalDecisionStatus"), payload.get("approval_decision_status"), payload.get("approvalDecisionStatus")))
.dailyReportApprovalId(firstString(businessView.get("daily_report_approval_id"), businessView.get("dailyReportApprovalId"), payload.get("daily_report_approval_id"), payload.get("dailyReportApprovalId")))
.dailyReportApprovalAction(firstString(businessView.get("daily_report_approval_action"), businessView.get("dailyReportApprovalAction"), payload.get("daily_report_approval_action"), payload.get("dailyReportApprovalAction")))
.dailyReportApprovalActor(firstString(businessView.get("daily_report_approval_actor"), businessView.get("dailyReportApprovalActor"), payload.get("daily_report_approval_actor"), payload.get("dailyReportApprovalActor")))
.dailyReportApprovalReason(firstString(businessView.get("daily_report_approval_reason"), businessView.get("dailyReportApprovalReason"), payload.get("daily_report_approval_reason"), payload.get("dailyReportApprovalReason")))
.dailyReportApprovalRecordedAt(firstString(businessView.get("daily_report_approval_recorded_at"), businessView.get("dailyReportApprovalRecordedAt"), payload.get("daily_report_approval_recorded_at"), payload.get("dailyReportApprovalRecordedAt")))
.routeDecisionId(firstString(businessView.get("route_decision_id"), payload.get("route_decision_id")))
.serviceId(firstString(businessView.get("service_id"), businessView.get("serviceId"), payload.get("service_id"), payload.get("serviceId")))
.serviceLeaseId(firstString(businessView.get("service_lease_id"), businessView.get("serviceLeaseId"), payload.get("service_lease_id"), payload.get("serviceLeaseId")))
@@ -1321,7 +1326,9 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
private boolean isDailyReportRow(DigitalEmployeeAdminWorkbenchRowDto row) {
return StringUtils.equals(row.getCategory(), "daily_report")
|| startsWithAny(row.getKind(), "daily_report")
|| StringUtils.isNotBlank(row.getReportId());
|| StringUtils.isNotBlank(row.getReportId())
|| StringUtils.isNotBlank(row.getDailyReportApprovalId())
|| StringUtils.isNotBlank(row.getDailyReportApprovalAction());
}
private boolean isGovernanceCommandRow(DigitalEmployeeAdminWorkbenchRowDto row) {

View File

@@ -1719,16 +1719,32 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
"confirmed_at", "2026-06-13T10:00:00+08:00"
),
Map.of("id", "event-daily-report-2", "kind", "daily_report_confirmed")),
record("outbox-task", "task", "task-1", 101L, new Date(13_000),
record("outbox-daily-report-approval", "event", "event-daily-report-3", 101L, new Date(13_000),
Map.ofEntries(
Map.entry("entity_type", "event"),
Map.entry("category", "daily_report"),
Map.entry("kind", "daily_report_approval_decision_recorded"),
Map.entry("status", "approved"),
Map.entry("title", "日报审批裁决已记录"),
Map.entry("report_id", "report-4"),
Map.entry("daily_report_approval_id", "daily-report-approval-1"),
Map.entry("daily_report_approval_action", "approved"),
Map.entry("daily_report_approval_actor", "operator-1"),
Map.entry("daily_report_approval_reason", "content_reviewed"),
Map.entry("daily_report_approval_recorded_at", "2026-06-13T10:30:00+08:00"),
Map.entry("approval_decision_status", "approved")
),
Map.of("id", "event-daily-report-3", "kind", "daily_report_approval_decision_recorded")),
record("outbox-task", "task", "task-1", 101L, new Date(14_000),
Map.of("entity_type", "task", "title", "普通任务", "status", "running"),
Map.of("id", "task-1", "status", "running")),
record("outbox-approval", "approval", "approval-1", 101L, new Date(14_000),
record("outbox-approval", "approval", "approval-1", 101L, new Date(15_000),
Map.of("entity_type", "approval", "title", "普通审批", "status", "pending"),
Map.of("id", "approval-1", "status", "pending")),
record("outbox-notification", "notification", "notification-1", 101L, new Date(15_000),
record("outbox-notification", "notification", "notification-1", 101L, new Date(16_000),
Map.of("entity_type", "notification", "title", "普通通知", "status", "unread"),
Map.of("id", "notification-1", "status", "unread")),
record("outbox-audit", "event", "event-audit-1", 101L, new Date(16_000),
record("outbox-audit", "event", "event-audit-1", 101L, new Date(17_000),
Map.of("entity_type", "event", "category", "tool_call_audit", "title", "审计", "status", "warn"),
Map.of("id", "event-audit-1", "status", "warn"))
)));
@@ -1737,9 +1753,9 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
"daily_reports", null, null, null, null, null, null, null, null, null, null, null, 1L, 20L
);
assertThat(result.getTotal()).isEqualTo(3);
assertThat(result.getTotal()).isEqualTo(4);
assertThat(result.getRecords()).extracting(DigitalEmployeeAdminWorkbenchRowDto::getEntityId)
.containsExactly("report-1", "event-daily-report-1", "event-daily-report-2");
.containsExactly("report-1", "event-daily-report-1", "event-daily-report-2", "event-daily-report-3");
assertThat(result.getRecords().get(0).getView()).isEqualTo("daily_reports");
assertThat(result.getRecords().get(0).getReportId()).isEqualTo("report-1");
assertThat(result.getRecords().get(0).getCategory()).isEqualTo("daily_report");
@@ -1751,6 +1767,11 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
assertThat(result.getRecords().get(1).getReportId()).isEqualTo("report-2");
assertThat(result.getRecords().get(1).getBusinessView()).containsEntry("delivery_status", "delivered");
assertThat(result.getRecords().get(2).getBusinessView()).containsEntry("confirmed_at", "2026-06-13T10:00:00+08:00");
assertThat(result.getRecords().get(3).getDailyReportApprovalId()).isEqualTo("daily-report-approval-1");
assertThat(result.getRecords().get(3).getDailyReportApprovalAction()).isEqualTo("approved");
assertThat(result.getRecords().get(3).getDailyReportApprovalActor()).isEqualTo("operator-1");
assertThat(result.getRecords().get(3).getDailyReportApprovalReason()).isEqualTo("content_reviewed");
assertThat(result.getRecords().get(3).getDailyReportApprovalRecordedAt()).isEqualTo("2026-06-13T10:30:00+08:00");
}
@Test