吸收数字员工管理端记忆合并候选预览

This commit is contained in:
baiyanyun
2026-06-13 16:36:54 +08:00
parent 4fdc95da75
commit 797ffeee82
7 changed files with 72 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ import lombok.Builder;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data
@@ -100,6 +101,18 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
private String memoryId;
@JsonProperty("memory_key")
private String memoryKey;
@JsonProperty("governance_status")
private String governanceStatus;
@JsonProperty("merge_candidate_count")
private Long mergeCandidateCount;
@JsonProperty("duplicate_memory_ids")
private List<String> duplicateMemoryIds;
@JsonProperty("latest_memory_id")
private String latestMemoryId;
@JsonProperty("last_governance_action")
private String lastGovernanceAction;
@JsonProperty("last_reviewed_at")
private String lastReviewedAt;
@JsonProperty("skill_id")
private String skillId;
@JsonProperty("skill_version")

View File

@@ -46,6 +46,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.LinkedHashMap;
@@ -1092,6 +1093,12 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
.autoRecoveryStatus(firstString(businessView.get("auto_recovery_status"), businessView.get("autoRecoveryStatus"), payload.get("auto_recovery_status"), payload.get("autoRecoveryStatus")))
.memoryId(firstString(businessView.get("memory_id"), businessView.get("memoryId"), payload.get("memory_id"), payload.get("memoryId"), "memory".equals(record.getEntityType()) ? record.getEntityId() : null))
.memoryKey(firstString(businessView.get("memory_key"), businessView.get("memoryKey"), businessView.get("key"), payload.get("memory_key"), payload.get("memoryKey"), payload.get("key")))
.governanceStatus(firstString(businessView.get("governance_status"), businessView.get("governanceStatus"), payload.get("governance_status"), payload.get("governanceStatus")))
.mergeCandidateCount(numberValue(firstPresent(businessView.get("merge_candidate_count"), businessView.get("mergeCandidateCount"), payload.get("merge_candidate_count"), payload.get("mergeCandidateCount"))))
.duplicateMemoryIds(stringListValue(firstPresent(businessView.get("duplicate_memory_ids"), businessView.get("duplicateMemoryIds"), payload.get("duplicate_memory_ids"), payload.get("duplicateMemoryIds"))))
.latestMemoryId(firstString(businessView.get("latest_memory_id"), businessView.get("latestMemoryId"), payload.get("latest_memory_id"), payload.get("latestMemoryId")))
.lastGovernanceAction(firstString(businessView.get("last_governance_action"), businessView.get("lastGovernanceAction"), payload.get("last_governance_action"), payload.get("lastGovernanceAction")))
.lastReviewedAt(firstString(businessView.get("last_reviewed_at"), businessView.get("lastReviewedAt"), payload.get("last_reviewed_at"), payload.get("lastReviewedAt")))
.skillId(firstString(businessView.get("skill_id"), businessView.get("skillId"), payload.get("skill_id"), payload.get("skillId")))
.skillVersion(firstString(businessView.get("skill_version"), businessView.get("skillVersion"), businessView.get("version"), payload.get("skill_version"), payload.get("skillVersion"), payload.get("version")))
.installStatus(firstString(businessView.get("install_status"), businessView.get("installStatus"), payload.get("install_status"), payload.get("installStatus")))
@@ -1233,7 +1240,10 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|| StringUtils.equals(category, "memory_governance")
|| startsWithAny(kind, "memory_")
|| StringUtils.isNotBlank(row.getMemoryId())
|| StringUtils.isNotBlank(row.getMemoryKey());
|| StringUtils.isNotBlank(row.getMemoryKey())
|| StringUtils.isNotBlank(row.getLatestMemoryId())
|| StringUtils.isNotBlank(row.getGovernanceStatus())
|| row.getMergeCandidateCount() != null;
}
private boolean isSkillAuditRow(DigitalEmployeeAdminWorkbenchRowDto row) {
@@ -1607,6 +1617,21 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
return null;
}
private List<String> stringListValue(Object value) {
if (value instanceof List<?> list) {
return list.stream()
.map(item -> stringValue(item, null))
.filter(StringUtils::isNotBlank)
.toList();
}
String text = stringValue(value, null);
if (StringUtils.isBlank(text)) return List.of();
return Arrays.stream(text.split(","))
.map(String::trim)
.filter(StringUtils::isNotBlank)
.toList();
}
private String stringValue(Object value, String fallback) {
if (value == null) return fallback;
String text = Objects.toString(value, "").trim();

View File

@@ -395,8 +395,11 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
assertThat(result.getRecords().get(0).getView()).isEqualTo("memory_governance");
assertThat(result.getRecords().get(0).getMemoryId()).isEqualTo("memory-1");
assertThat(result.getRecords().get(0).getMemoryKey()).isEqualTo("customer.preference");
assertThat(result.getRecords().get(0).getBusinessView()).containsEntry("merge_candidate_count", 2);
assertThat(result.getRecords().get(0).getGovernanceStatus()).isEqualTo("active");
assertThat(result.getRecords().get(0).getMergeCandidateCount()).isEqualTo(2L);
assertThat(result.getRecords().get(0).getDuplicateMemoryIds()).containsExactly("memory-2");
assertThat(result.getRecords().get(1).getCategory()).isEqualTo("memory_governance");
assertThat(result.getRecords().get(1).getLastGovernanceAction()).isEqualTo("archive");
}
@Test