release: prepare August 1 Android RC

This commit is contained in:
key
2026-07-29 00:35:15 +08:00
parent 9ae5f750c8
commit 9ea5d79a62
41 changed files with 2322 additions and 71 deletions
@@ -220,7 +220,7 @@ public class AihrModelSeedService {
false,
runtime.providerCode(),
modelName,
"模型运行参数未配置,当前返回内置默认兜底:先安抚业主情绪,确认房号、影响范围和现场照片,再创建工单并承诺首次反馈时间。",
"模型运行参数未配置,当前返回内置默认兜底:先安抚业主情绪,确认房号、影响范围和现场照片,再指导员工到既有工单系统登记并说明首次反馈时间;当前系统不会代为创建或派发工单。",
"seed-fallback",
null,
List.of(
@@ -239,7 +239,7 @@ public class AihrModelSeedService {
true,
runtime.providerCode(),
modelName,
"真实模型调用失败,已回退内置默认兜底:先确认事实、同步时限、再生成工单闭环。",
"真实模型调用失败,已回退内置默认兜底:先确认事实、同步时限,再指导员工到既有工单系统登记和跟进;当前系统不会代为生成或派发工单。",
"openai-compatible-failed",
"模型调用失败,已回退内置兜底;请检查模型供应商配置。",
List.of("检查 aihr_model_provider.api_host/api_key 和 aihr_model_config.model_name 是否与供应商一致。"),
@@ -4144,7 +4144,7 @@ public class AihrSopSeedService {
result.put("投诉处理 SOP", new SopSeed(
"投诉处理 SOP",
"业主投诉漏水,管家第一步怎么处理?",
"先安抚业主情绪并确认影响范围;同步记录房号、报修时间、现场照片;再创建工单并明确首次反馈时限。",
"先安抚业主情绪并确认影响范围;同步记录房号、报修时间、现场照片;再指导员工到既有工单系统登记,并明确首次反馈时限。",
"投诉处理 SOP v1.0 第 2、3、5 条",
List.of(
new DocResponse("投诉处理 SOP v1.0", "安抚、记录、派单、反馈时限", "引用 3 段", "pill-success"),
@@ -4154,7 +4154,7 @@ public class AihrSopSeedService {
List.of(
new SnippetResponse("第 2 条:先安抚", "接到投诉后先表达理解,避免争辩责任归属。"),
new SnippetResponse("第 3 条:确认事实", "记录房号、联系人、发生时间、现场照片和影响范围。"),
new SnippetResponse("第 5 条:明确反馈", "创建工单后告知首次反馈时限和责任人。")
new SnippetResponse("第 5 条:明确反馈", "在既有工单系统登记后,告知首次反馈时限和责任人。")
),
List.of("题 1:漏水投诉首响时限如何表述?", "题 2:哪些事实必须在工单中记录?")
));
@@ -98,7 +98,7 @@ class AihrKnowledgeSpaceAdminServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/knowledge/service/AihrKnowledgeSpaceAdminService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("aihr_knowledge_category"));
assertTrue(code.contains("where c.tenant_id = ? and c.knowledge_id = ?"));
assertTrue(code.contains("where c.tenant_id = ? and c.knowledge_id = ? and c.id = ?"));
@@ -76,7 +76,8 @@ class AihrFivePositionCatalogMigrationTest {
private static String migrationSql() throws Exception {
return Files.readString(repoRoot().resolve(
"backend/script/sql/update/aihr_20260717_practice_five_position_catalog_mysql8.sql"));
"backend/script/sql/update/aihr_20260717_practice_five_position_catalog_mysql8.sql"))
.replace("\r\n", "\n");
}
private static Path repoRoot() {
@@ -1219,7 +1219,8 @@ public class AihrPracticeSeedServiceTest {
session.sessionId(), 0, "与当前业主话术不一致", 9002L, "employee-a"
));
String serviceSource = Files.readString(Path.of("src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java"));
String serviceSource = Files.readString(Path.of("src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java"))
.replace("\r\n", "\n");
String speechController = Files.readString(Path.of("src/main/java/org/dromara/aihr/controller/AihrSpeechController.java"));
assertTrue(serviceSource.contains("customerAudioOssIds"));
assertTrue(serviceSource.contains("VALUES (?, ?, ?, 'customer', ?, '', ?, ?)"));
@@ -1564,7 +1565,7 @@ public class AihrPracticeSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java");
}
String controllerSource = Files.readString(source);
String controllerSource = Files.readString(source).replace("\r\n", "\n");
assertTrue(controllerSource.contains("mobileSeedService.practiceReviews(supervisorScopeExtPartyId(),"));
assertTrue(controllerSource.contains("@RequestParam(defaultValue = \"false\") boolean includeProfiles"));
@@ -1617,7 +1618,7 @@ public class AihrPracticeSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrMobileController.java");
}
String controllerSource = Files.readString(source);
String controllerSource = Files.readString(source).replace("\r\n", "\n");
assertTrue(controllerSource.contains("@SaCheckLogin\npublic class AihrMobileController"));
assertTrue(controllerSource.contains("@GetMapping(\"/onboard/tasks\")"));
@@ -1648,7 +1649,7 @@ public class AihrPracticeSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrPracticeController.java");
}
String controllerSource = Files.readString(source);
String controllerSource = Files.readString(source).replace("\r\n", "\n");
assertTrue(controllerSource.contains("import cn.dev33.satoken.annotation.SaCheckLogin;"));
assertTrue(controllerSource.contains("@SaCheckLogin\npublic class AihrPracticeController"));
@@ -85,7 +85,7 @@ public class AihrSopSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("LOWER(TRIM(COALESCE(r.category, ''))) = 'sop'"));
assertTrue(code.contains("r.category LIKE '%SOP%'"));
@@ -155,7 +155,7 @@ public class AihrSopSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("String tenantId = tenantId();"));
assertTrue(code.contains("TenantHelper.dynamic(tenantId"));
@@ -169,7 +169,7 @@ public class AihrSopSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("!modelService.visionAllowed()"));
}
@@ -181,7 +181,7 @@ public class AihrSopSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("deleteUploadedOssQuietly(uploadedOss)"));
assertTrue(code.contains("private void deleteUploadedOssQuietly(SysOssVo oss)"));
@@ -194,7 +194,7 @@ public class AihrSopSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
String method = code.substring(code.indexOf("public UnbindDocumentResponse unbindDocumentMembership"),
code.indexOf("public VectorizeResponse vectorizeMissing"));
@@ -284,7 +284,7 @@ public class AihrSopSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrSopController.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("@SaCheckLogin\n @GetMapping(\"/position-sop\")"));
assertFalse(code.contains("@SaIgnore\n @GetMapping(\"/position-sop\")"));
@@ -501,7 +501,7 @@ public class AihrSopSeedServiceTest {
.getAnnotation(org.springframework.transaction.annotation.Transactional.class) != null);
Path source = Path.of("src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("TransactionSynchronizationManager.registerSynchronization"));
assertTrue(code.contains("public void afterCommit()"));
assertTrue(code.contains("afterCommitOrNow(() -> deleteQdrantDocNow"));
@@ -515,7 +515,7 @@ public class AihrSopSeedServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrVideoService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
int probe = code.indexOf("private long probeDurationSeconds");
int run = code.indexOf("private int runFfmpeg", probe);
String probeMethod = code.substring(probe, run);
@@ -69,7 +69,7 @@ class AihrUploadQueueServiceTest {
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java");
}
String code = Files.readString(source);
String code = Files.readString(source).replace("\r\n", "\n");
assertTrue(code.contains("select i.tenant_id, i.id, i.file_name"));
assertTrue(code.contains("p.tenant_id = i.tenant_id"));