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
|
FROM aihr_case_record
|
||||||
WHERE tenant_id = '000000' AND case_id = ?
|
WHERE tenant_id = '000000' AND case_id = ?
|
||||||
""" + projectWhere + " LIMIT 1";
|
""" + 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("case_id"), normalizedCaseId),
|
||||||
firstNonBlank(rs.getString("file_name"), "case-audio"),
|
firstNonBlank(rs.getString("file_name"), "case-audio"),
|
||||||
firstNonBlank(rs.getString("title"), "现场案例"),
|
firstNonBlank(rs.getString("title"), "现场案例"),
|
||||||
@@ -162,9 +164,10 @@ public class AihrCaseService {
|
|||||||
firstNonBlank(rs.getString("owner"), "培训组"),
|
firstNonBlank(rs.getString("owner"), "培训组"),
|
||||||
firstNonBlank(rs.getString("transcript"), ""),
|
firstNonBlank(rs.getString("transcript"), ""),
|
||||||
firstNonBlank(rs.getString("summary"), ""),
|
firstNonBlank(rs.getString("summary"), ""),
|
||||||
firstNonBlank(rs.getString("media_url"), ""),
|
resolveMediaUrl(mediaOssId, rs.getString("media_url")),
|
||||||
rs.getObject("media_oss_id", Long.class)
|
mediaOssId
|
||||||
), args.toArray()).stream().findFirst().orElse(null);
|
);
|
||||||
|
}, args.toArray()).stream().findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> projectScopesForAppUser(String identity) {
|
public List<String> projectScopesForAppUser(String identity) {
|
||||||
@@ -425,6 +428,23 @@ public class AihrCaseService {
|
|||||||
return new MediaRef(oss.getOssId(), firstNonBlank(oss.getUrl(), ""));
|
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) {
|
private void addCaseColumn(String column, String sql) {
|
||||||
try {
|
try {
|
||||||
jdbcTemplate.execute(sql);
|
jdbcTemplate.execute(sql);
|
||||||
|
|||||||
+10
-1
@@ -92,12 +92,19 @@ class AihrCaseServiceTest {
|
|||||||
@Tag("dev")
|
@Tag("dev")
|
||||||
void detailReturnsPersistedCaseForAuthorizedProject() {
|
void detailReturnsPersistedCaseForAuthorizedProject() {
|
||||||
PersistentCaseJdbcTemplate jdbcTemplate = new PersistentCaseJdbcTemplate();
|
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"));
|
var detail = service.detail("persisted-case", List.of("P1"));
|
||||||
|
|
||||||
assertEquals("persisted-case", detail.caseId());
|
assertEquals("persisted-case", detail.caseId());
|
||||||
assertEquals("业主投诉后完成跟进", detail.transcript());
|
assertEquals("业主投诉后完成跟进", detail.transcript());
|
||||||
|
assertEquals("https://oss.local/cases/refreshed-case.webm", detail.mediaUrl());
|
||||||
|
assertEquals(456L, detail.mediaOssId());
|
||||||
assertEquals("P1", jdbcTemplate.lastArgs[1]);
|
assertEquals("P1", jdbcTemplate.lastArgs[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,6 +168,8 @@ class AihrCaseServiceTest {
|
|||||||
when(resultSet.getString("transcript")).thenReturn("业主投诉后完成跟进");
|
when(resultSet.getString("transcript")).thenReturn("业主投诉后完成跟进");
|
||||||
when(resultSet.getString("type")).thenReturn("投诉处理");
|
when(resultSet.getString("type")).thenReturn("投诉处理");
|
||||||
when(resultSet.getString("title")).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));
|
return List.of(rowMapper.mapRow(resultSet, 0));
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new AssertionError(e);
|
throw new AssertionError(e);
|
||||||
|
|||||||
Reference in New Issue
Block a user