fix(aihr): scope case records to tenant
This commit is contained in:
+18
-10
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.aihr.domain.AihrCaseDto.CurateRequest;
|
||||
import org.dromara.aihr.domain.AihrCaseDto.CurateResponse;
|
||||
import org.dromara.aihr.domain.AihrCaseDto.DetailResponse;
|
||||
@@ -118,11 +119,12 @@ public class AihrCaseService {
|
||||
String sql = """
|
||||
SELECT case_id, title, type, status, update_time, owner, summary
|
||||
FROM aihr_case_record
|
||||
WHERE tenant_id = '000000'
|
||||
WHERE tenant_id = ?
|
||||
""" + projectWhere + """
|
||||
ORDER BY update_time DESC, id DESC
|
||||
LIMIT ?
|
||||
""";
|
||||
args.add(0, tenantId());
|
||||
return jdbcTemplate.query(sql, (rs, rowNum) -> new RecordResponse(
|
||||
firstNonBlank(rs.getString("case_id"), ""),
|
||||
firstNonBlank(rs.getString("title"), "现场案例"),
|
||||
@@ -150,8 +152,9 @@ public class AihrCaseService {
|
||||
String sql = """
|
||||
SELECT case_id, file_name, title, type, status, update_time, owner, transcript, summary, media_url, media_oss_id
|
||||
FROM aihr_case_record
|
||||
WHERE tenant_id = '000000' AND case_id = ?
|
||||
WHERE tenant_id = ? AND case_id = ?
|
||||
""" + projectWhere + " LIMIT 1";
|
||||
args.add(0, tenantId());
|
||||
return jdbcTemplate.query(sql, (rs, rowNum) -> {
|
||||
Long mediaOssId = rs.getObject("media_oss_id", Long.class);
|
||||
return new DetailResponse(
|
||||
@@ -179,13 +182,13 @@ public class AihrCaseService {
|
||||
return jdbcTemplate.query("""
|
||||
SELECT DISTINCT project_ext_org_id
|
||||
FROM aihr_org_snapshot
|
||||
WHERE tenant_id = '000000'
|
||||
WHERE tenant_id = ?
|
||||
AND employment_status = 'active'
|
||||
AND project_ext_org_id IS NOT NULL
|
||||
AND project_ext_org_id <> ''
|
||||
AND (person_phone = ? OR ext_party_id = ?)
|
||||
ORDER BY project_ext_org_id
|
||||
""", (rs, rowNum) -> rs.getString("project_ext_org_id"), username, username);
|
||||
""", (rs, rowNum) -> rs.getString("project_ext_org_id"), tenantId(), username, username);
|
||||
} catch (DataAccessException e) {
|
||||
log.warn("resolve app user project scope failed: {}", e.getMessage());
|
||||
return List.of();
|
||||
@@ -201,7 +204,7 @@ public class AihrCaseService {
|
||||
Integer count = jdbcTemplate.queryForObject("""
|
||||
SELECT COUNT(*)
|
||||
FROM aihr_org_snapshot
|
||||
WHERE tenant_id = '000000'
|
||||
WHERE tenant_id = ?
|
||||
AND employment_status = 'active'
|
||||
AND (person_phone = ? OR ext_party_id = ?)
|
||||
AND (position_level IN ('主管', '项目经理')
|
||||
@@ -209,7 +212,7 @@ public class AihrCaseService {
|
||||
OR position_name LIKE '%经理%'
|
||||
OR position_name LIKE '%负责人%'
|
||||
OR position_name LIKE '%组长%')
|
||||
""", Integer.class, username, username);
|
||||
""", Integer.class, tenantId(), username, username);
|
||||
return count != null && count > 0;
|
||||
} catch (DataAccessException e) {
|
||||
log.warn("resolve case contributor failed: {}", e.getMessage());
|
||||
@@ -222,7 +225,7 @@ public class AihrCaseService {
|
||||
jdbcTemplate.update("""
|
||||
INSERT INTO aihr_case_record
|
||||
(tenant_id, case_id, file_name, project_ext_org_id, title, type, status, transcript, summary, media_oss_id, media_url, owner, create_time, update_time)
|
||||
VALUES ('000000', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, '培训组', now(), now())
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, '培训组', now(), now())
|
||||
ON DUPLICATE KEY UPDATE
|
||||
file_name = VALUES(file_name),
|
||||
project_ext_org_id = VALUES(project_ext_org_id),
|
||||
@@ -235,6 +238,7 @@ public class AihrCaseService {
|
||||
media_url = VALUES(media_url),
|
||||
update_time = now()
|
||||
""",
|
||||
tenantId(),
|
||||
state.id(),
|
||||
state.fileName(),
|
||||
firstNonBlank(state.projectExtOrgId(), ""),
|
||||
@@ -284,6 +288,10 @@ public class AihrCaseService {
|
||||
}
|
||||
}
|
||||
|
||||
private String tenantId() {
|
||||
return firstNonBlank(LoginHelper.getTenantId(), "000000");
|
||||
}
|
||||
|
||||
private Optional<CaseSummary> organizeWithModel(CaseState state) {
|
||||
String system = """
|
||||
你是物业培训案例编辑。请把转写内容整理成可复用案例。
|
||||
@@ -388,8 +396,8 @@ public class AihrCaseService {
|
||||
List<CaseState> persisted = jdbcTemplate.query("""
|
||||
SELECT case_id, file_name, project_ext_org_id, transcript, type
|
||||
, media_oss_id, media_url
|
||||
FROM aihr_case_record
|
||||
WHERE tenant_id = '000000' AND case_id = ?
|
||||
FROM aihr_case_record
|
||||
WHERE tenant_id = ? AND case_id = ?
|
||||
LIMIT 1
|
||||
""", (rs, rowNum) -> new CaseState(
|
||||
rs.getString("case_id"),
|
||||
@@ -400,7 +408,7 @@ public class AihrCaseService {
|
||||
null,
|
||||
rs.getObject("media_oss_id", Long.class),
|
||||
firstNonBlank(rs.getString("media_url"), "")
|
||||
), normalizedCaseId);
|
||||
), tenantId(), normalizedCaseId);
|
||||
state = persisted.stream().findFirst().orElse(null);
|
||||
if (state != null) {
|
||||
cases.put(normalizedCaseId, state);
|
||||
|
||||
+5
-5
@@ -39,8 +39,8 @@ class AihrCaseServiceTest {
|
||||
UploadResponse response = service.upload(new MockMultipartFile("file", "case.webm", "audio/webm", new byte[]{1}), "P1", null);
|
||||
|
||||
assertEquals("张*先生住在12栋****,手机号1390****1111,说2-****漏水", response.transcript());
|
||||
assertEquals(response.transcript(), jdbcTemplate.updateArgs[6]);
|
||||
assertEquals(response.transcript(), jdbcTemplate.updateArgs[7]);
|
||||
assertEquals(response.transcript(), jdbcTemplate.updateArgs[8]);
|
||||
assertFalse(response.transcript().contains("13900001111"));
|
||||
assertFalse(response.transcript().contains("1201"));
|
||||
assertFalse(response.transcript().contains("2-304"));
|
||||
@@ -67,8 +67,8 @@ class AihrCaseServiceTest {
|
||||
|
||||
assertEquals(123L, response.mediaOssId());
|
||||
assertEquals("https://oss.local/cases/case.webm", response.mediaUrl());
|
||||
assertEquals(123L, jdbcTemplate.updateArgs[8]);
|
||||
assertEquals("https://oss.local/cases/case.webm", jdbcTemplate.updateArgs[9]);
|
||||
assertEquals(123L, jdbcTemplate.updateArgs[9]);
|
||||
assertEquals("https://oss.local/cases/case.webm", jdbcTemplate.updateArgs[10]);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -105,7 +105,7 @@ class AihrCaseServiceTest {
|
||||
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[2]);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -158,7 +158,7 @@ class AihrCaseServiceTest {
|
||||
|
||||
@Override
|
||||
public <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) {
|
||||
this.lastCaseId = String.valueOf(args[0]);
|
||||
this.lastCaseId = String.valueOf(args[1]);
|
||||
this.lastArgs = args;
|
||||
try {
|
||||
ResultSet resultSet = mock(ResultSet.class);
|
||||
|
||||
Reference in New Issue
Block a user