fix(case): refresh oss media urls on detail
This commit is contained in:
+24
-4
@@ -152,7 +152,9 @@ public class AihrCaseService {
|
||||
FROM aihr_case_record
|
||||
WHERE tenant_id = '000000' AND case_id = ?
|
||||
""" + projectWhere + " LIMIT 1";
|
||||
return jdbcTemplate.query(sql, (rs, rowNum) -> new DetailResponse(
|
||||
return jdbcTemplate.query(sql, (rs, rowNum) -> {
|
||||
Long mediaOssId = rs.getObject("media_oss_id", Long.class);
|
||||
return new DetailResponse(
|
||||
firstNonBlank(rs.getString("case_id"), normalizedCaseId),
|
||||
firstNonBlank(rs.getString("file_name"), "case-audio"),
|
||||
firstNonBlank(rs.getString("title"), "现场案例"),
|
||||
@@ -162,9 +164,10 @@ public class AihrCaseService {
|
||||
firstNonBlank(rs.getString("owner"), "培训组"),
|
||||
firstNonBlank(rs.getString("transcript"), ""),
|
||||
firstNonBlank(rs.getString("summary"), ""),
|
||||
firstNonBlank(rs.getString("media_url"), ""),
|
||||
rs.getObject("media_oss_id", Long.class)
|
||||
), args.toArray()).stream().findFirst().orElse(null);
|
||||
resolveMediaUrl(mediaOssId, rs.getString("media_url")),
|
||||
mediaOssId
|
||||
);
|
||||
}, args.toArray()).stream().findFirst().orElse(null);
|
||||
}
|
||||
|
||||
public List<String> projectScopesForAppUser(String identity) {
|
||||
@@ -425,6 +428,23 @@ public class AihrCaseService {
|
||||
return new MediaRef(oss.getOssId(), firstNonBlank(oss.getUrl(), ""));
|
||||
}
|
||||
|
||||
private String resolveMediaUrl(Long mediaOssId, String persistedUrl) {
|
||||
String fallback = firstNonBlank(persistedUrl, "");
|
||||
if (mediaOssId == null || ossService == null) {
|
||||
return fallback;
|
||||
}
|
||||
try {
|
||||
return ossService.listByIds(List.of(mediaOssId)).stream()
|
||||
.findFirst()
|
||||
.map(SysOssVo::getUrl)
|
||||
.map(url -> firstNonBlank(url, fallback))
|
||||
.orElse(fallback);
|
||||
} catch (Exception e) {
|
||||
log.debug("refresh case media url failed for ossId={}", mediaOssId);
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
||||
private void addCaseColumn(String column, String sql) {
|
||||
try {
|
||||
jdbcTemplate.execute(sql);
|
||||
|
||||
+10
-1
@@ -92,12 +92,19 @@ class AihrCaseServiceTest {
|
||||
@Tag("dev")
|
||||
void detailReturnsPersistedCaseForAuthorizedProject() {
|
||||
PersistentCaseJdbcTemplate jdbcTemplate = new PersistentCaseJdbcTemplate();
|
||||
AihrCaseService service = new AihrCaseService(null, null, new ObjectMapper(), jdbcTemplate, null);
|
||||
SysOssVo oss = new SysOssVo();
|
||||
oss.setOssId(456L);
|
||||
oss.setUrl("https://oss.local/cases/refreshed-case.webm");
|
||||
ISysOssService ossService = mock(ISysOssService.class);
|
||||
when(ossService.listByIds(List.of(456L))).thenReturn(List.of(oss));
|
||||
AihrCaseService service = new AihrCaseService(null, null, new ObjectMapper(), jdbcTemplate, ossService);
|
||||
|
||||
var detail = service.detail("persisted-case", List.of("P1"));
|
||||
|
||||
assertEquals("persisted-case", detail.caseId());
|
||||
assertEquals("业主投诉后完成跟进", detail.transcript());
|
||||
assertEquals("https://oss.local/cases/refreshed-case.webm", detail.mediaUrl());
|
||||
assertEquals(456L, detail.mediaOssId());
|
||||
assertEquals("P1", jdbcTemplate.lastArgs[1]);
|
||||
}
|
||||
|
||||
@@ -161,6 +168,8 @@ class AihrCaseServiceTest {
|
||||
when(resultSet.getString("transcript")).thenReturn("业主投诉后完成跟进");
|
||||
when(resultSet.getString("type")).thenReturn("投诉处理");
|
||||
when(resultSet.getString("title")).thenReturn("业主投诉案例");
|
||||
when(resultSet.getString("media_url")).thenReturn("https://oss.local/cases/expired-case.webm");
|
||||
when(resultSet.getObject("media_oss_id", Long.class)).thenReturn(456L);
|
||||
return List.of(rowMapper.mapRow(resultSet, 0));
|
||||
} catch (SQLException e) {
|
||||
throw new AssertionError(e);
|
||||
|
||||
Reference in New Issue
Block a user