fix(release): enforce AIHR tenant collation contract
This commit is contained in:
+4
-8
@@ -1138,7 +1138,7 @@ public class AihrSopSeedService {
|
||||
return Optional.ofNullable(jdbcTemplate.queryForObject("""
|
||||
select o.ext1, coalesce(k.name, '') as category
|
||||
from aihr_knowledge_attach a
|
||||
join sys_oss o on o.oss_id = a.oss_id and o.tenant_id = a.tenant_id
|
||||
join sys_oss o on o.oss_id = a.oss_id and binary o.tenant_id = binary a.tenant_id
|
||||
left join aihr_knowledge_info k on k.id = a.knowledge_id and k.tenant_id = a.tenant_id
|
||||
where a.tenant_id = ? and a.id = ?
|
||||
limit 1
|
||||
@@ -1169,7 +1169,7 @@ public class AihrSopSeedService {
|
||||
else 'name-size'
|
||||
end as match_type
|
||||
from aihr_knowledge_attach a
|
||||
join sys_oss o on o.oss_id = a.oss_id and o.tenant_id = a.tenant_id
|
||||
join sys_oss o on o.oss_id = a.oss_id and binary o.tenant_id = binary a.tenant_id
|
||||
where a.tenant_id = ?
|
||||
and (
|
||||
json_unquote(json_extract(o.ext1, '$.aihrFileSha256')) = ?
|
||||
@@ -1291,8 +1291,7 @@ public class AihrSopSeedService {
|
||||
}
|
||||
|
||||
private List<ProcessingTaskRow> processingRows() {
|
||||
try {
|
||||
return jdbcTemplate.query("""
|
||||
return jdbcTemplate.query("""
|
||||
select a.id,
|
||||
a.oss_id,
|
||||
i.name as category,
|
||||
@@ -1307,7 +1306,7 @@ public class AihrSopSeedService {
|
||||
from aihr_knowledge_attach a
|
||||
join aihr_knowledge_info i on i.id = a.knowledge_id and i.tenant_id = a.tenant_id
|
||||
left join aihr_knowledge_fragment f on f.tenant_id = a.tenant_id and f.knowledge_id = a.knowledge_id and f.doc_id = a.doc_id
|
||||
left join sys_oss o on o.oss_id = a.oss_id and o.tenant_id = a.tenant_id
|
||||
left join sys_oss o on o.oss_id = a.oss_id and binary o.tenant_id = binary a.tenant_id
|
||||
where a.tenant_id = ?
|
||||
group by a.id, a.oss_id, i.name, a.name, a.type, a.status, a.update_time, a.remark, o.ext1
|
||||
order by a.update_time desc, a.id desc
|
||||
@@ -1332,9 +1331,6 @@ public class AihrSopSeedService {
|
||||
insight.reason()
|
||||
);
|
||||
}, tenantId());
|
||||
} catch (DataAccessException e) {
|
||||
return List.of();
|
||||
}
|
||||
}
|
||||
|
||||
private ProcessingTaskResponse processingTask(ProcessingTaskRow row) {
|
||||
|
||||
+18
-2
@@ -5,6 +5,7 @@ import org.dromara.aihr.domain.AihrSopDto;
|
||||
import org.junit.jupiter.api.Tag;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.springframework.dao.DataAccessResourceFailureException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
@@ -18,6 +19,7 @@ import java.util.Set;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
@@ -349,13 +351,27 @@ public class AihrSopSeedServiceTest {
|
||||
}
|
||||
String code = Files.readString(source);
|
||||
|
||||
assertTrue(code.contains("join sys_oss o on o.oss_id = a.oss_id and o.tenant_id = a.tenant_id"));
|
||||
assertTrue(code.contains("left join sys_oss o on o.oss_id = a.oss_id and o.tenant_id = a.tenant_id"));
|
||||
assertTrue(code.contains("join sys_oss o on o.oss_id = a.oss_id and binary o.tenant_id = binary a.tenant_id"));
|
||||
assertTrue(code.contains("left join sys_oss o on o.oss_id = a.oss_id and binary o.tenant_id = binary a.tenant_id"));
|
||||
assertTrue(code.contains("left join aihr_knowledge_info k on k.id = a.knowledge_id and k.tenant_id = a.tenant_id"));
|
||||
assertTrue(code.contains("where tenant_id = ? and oss_id = ? limit 1"));
|
||||
assertTrue(code.contains("where tenant_id = ? and oss_id = ?\", objectMapper.writeValueAsString(node), tenantId(), ossId"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Tag("dev")
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
public void processingOverviewPropagatesDatabaseFailures() {
|
||||
JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
|
||||
when(jdbcTemplate.query(anyString(), any(RowMapper.class), any(Object[].class)))
|
||||
.thenThrow(new DataAccessResourceFailureException("collation mismatch"));
|
||||
AihrModelSeedService modelService = mock(AihrModelSeedService.class);
|
||||
when(modelService.visionAllowed()).thenReturn(false);
|
||||
AihrSopSeedService service = new AihrSopSeedService(new ObjectMapper(), jdbcTemplate, null, "", null, null, modelService);
|
||||
|
||||
assertThrows(DataAccessResourceFailureException.class, service::processingOverview);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Tag("dev")
|
||||
public void qdrantRebuildKeepsOtherTenantsVectors() throws Exception {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_candidate_material` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`candidate_id` varchar(80) NOT NULL COMMENT '候选人外部ID',
|
||||
`candidate_name` varchar(100) DEFAULT NULL COMMENT '候选人姓名',
|
||||
`material_type` varchar(50) DEFAULT NULL COMMENT '资料类型',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_interview_result` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '面试会话ID',
|
||||
`candidate_id` varchar(80) DEFAULT NULL COMMENT '候选人ID',
|
||||
`candidate_name` varchar(100) DEFAULT NULL COMMENT '候选人姓名',
|
||||
@@ -33,7 +33,7 @@ CREATE TABLE IF NOT EXISTS `aihr_interview_result` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_candidate_employee_link` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`candidate_id` varchar(80) NOT NULL COMMENT '本地候选人ID',
|
||||
`ext_party_id` varchar(100) NOT NULL COMMENT '外部员工主体ID',
|
||||
`status` varchar(20) DEFAULT '已关联' COMMENT '关联状态',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_info` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`name` varchar(100) NOT NULL COMMENT '知识库名称',
|
||||
`description` varchar(1000) DEFAULT NULL COMMENT '知识库描述',
|
||||
`separator` varchar(255) DEFAULT NULL COMMENT '知识分隔符',
|
||||
@@ -28,7 +28,7 @@ CREATE TABLE IF NOT EXISTS `aihr_knowledge_info` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_attach` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`knowledge_id` bigint NOT NULL COMMENT '知识库ID',
|
||||
`oss_id` bigint DEFAULT NULL COMMENT '对象存储ID',
|
||||
`doc_id` varchar(32) DEFAULT NULL COMMENT '文档ID',
|
||||
@@ -48,7 +48,7 @@ CREATE TABLE IF NOT EXISTS `aihr_knowledge_attach` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_fragment` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`knowledge_id` bigint NOT NULL COMMENT '知识库ID',
|
||||
`idx` int NOT NULL COMMENT '片段序号',
|
||||
`doc_id` varchar(32) DEFAULT NULL COMMENT '文档ID',
|
||||
@@ -70,7 +70,7 @@ CREATE TABLE IF NOT EXISTS `aihr_knowledge_fragment` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_import_task` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`directory` varchar(500) NOT NULL COMMENT '导入相对目录',
|
||||
`category` varchar(100) NOT NULL COMMENT '知识库分类',
|
||||
`status` tinyint DEFAULT 0 COMMENT '任务状态: 0等待, 1运行中, 2完成, 3失败, 4取消',
|
||||
@@ -138,7 +138,7 @@ ON DUPLICATE KEY UPDATE
|
||||
-- 知识库批量上传队列:上传秒回后由后台 worker 加工,支持单文件重试
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_upload_item` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`batch_id` varchar(64) NOT NULL COMMENT '上传批次',
|
||||
`file_name` varchar(255) NOT NULL COMMENT '文件名',
|
||||
`category` varchar(100) DEFAULT '' COMMENT '目标分类',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_model_provider` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`provider_name` varchar(100) NOT NULL COMMENT '供应商名称',
|
||||
`provider_code` varchar(50) NOT NULL COMMENT '供应商编码',
|
||||
`provider_desc` varchar(500) DEFAULT NULL COMMENT '供应商描述',
|
||||
@@ -24,7 +24,7 @@ CREATE TABLE IF NOT EXISTS `aihr_model_provider` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_model_config` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`category` varchar(30) NOT NULL COMMENT '模型类型: chat/vector/rerank',
|
||||
`model_name` varchar(100) NOT NULL COMMENT '模型名称',
|
||||
`provider_code` varchar(50) NOT NULL COMMENT '供应商编码',
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
DROP TABLE IF EXISTS `aihr_org_snapshot`;
|
||||
CREATE TABLE `aihr_org_snapshot` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`project_code` varchar(50) NOT NULL COMMENT '项目编码(数据权限范围主体,D1)',
|
||||
`project_name` varchar(100) NOT NULL COMMENT '项目名称',
|
||||
`dept_name` varchar(100) DEFAULT NULL COMMENT '部门/条线',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_case_record` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`case_id` varchar(80) NOT NULL COMMENT '案例ID',
|
||||
`file_name` varchar(255) DEFAULT NULL COMMENT '来源文件',
|
||||
`project_ext_org_id` varchar(100) DEFAULT NULL COMMENT '项目外部组织ID',
|
||||
@@ -26,7 +26,7 @@ CREATE TABLE IF NOT EXISTS `aihr_case_record` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_session` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '训练会话ID',
|
||||
`ext_party_id` varchar(100) DEFAULT NULL COMMENT '外部主体或手机号',
|
||||
`trainee_name` varchar(100) DEFAULT NULL COMMENT '学员名称',
|
||||
@@ -64,7 +64,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_session` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_annotation` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '训练会话ID',
|
||||
`turn_index` int NOT NULL COMMENT '话术序号',
|
||||
`source_text` varchar(1000) DEFAULT NULL COMMENT '原话',
|
||||
@@ -80,7 +80,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_annotation` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_audio` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '训练会话ID',
|
||||
`turn_index` int NOT NULL COMMENT '话术序号',
|
||||
`role` varchar(30) NOT NULL COMMENT '音频角色',
|
||||
@@ -95,7 +95,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_audio` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_audio_upload` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`oss_id` bigint NOT NULL COMMENT 'OSS文件ID',
|
||||
`owner_user_id` bigint NOT NULL COMMENT '上传用户ID',
|
||||
`owner_identity` varchar(100) NOT NULL COMMENT '上传主体',
|
||||
@@ -111,7 +111,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_audio_upload` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_assignment` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体或手机号',
|
||||
`trainee_name` varchar(100) DEFAULT NULL COMMENT '员工姓名',
|
||||
`scenario_id` varchar(80) NOT NULL COMMENT '场景ID',
|
||||
@@ -136,7 +136,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_assignment` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_calibration` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '训练会话ID',
|
||||
`reviewer` varchar(100) DEFAULT NULL COMMENT '校准人',
|
||||
`original_score` int DEFAULT NULL COMMENT 'AI原始总分',
|
||||
@@ -152,7 +152,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_calibration` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_scenario` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`scenario_code` varchar(80) NOT NULL COMMENT '场景编码',
|
||||
`scenario_name` varchar(100) NOT NULL COMMENT '场景名称',
|
||||
`position` varchar(80) NOT NULL COMMENT '岗位',
|
||||
@@ -184,7 +184,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_scenario` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_rubric` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码',
|
||||
`scenario_code` varchar(80) NOT NULL COMMENT '场景编码',
|
||||
`rubric_name` varchar(100) NOT NULL COMMENT 'Rubric名称',
|
||||
@@ -200,7 +200,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_rubric` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_rubric_dimension` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码',
|
||||
`dimension_code` varchar(50) NOT NULL COMMENT '维度编码',
|
||||
`dimension_name` varchar(50) NOT NULL COMMENT '维度名称',
|
||||
@@ -216,7 +216,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_rubric_dimension` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_prompt_template` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`code` varchar(80) NOT NULL COMMENT '模板编码',
|
||||
`name` varchar(100) NOT NULL COMMENT '模板名称',
|
||||
`category` varchar(50) NOT NULL COMMENT '业务分类',
|
||||
@@ -236,7 +236,7 @@ CREATE TABLE IF NOT EXISTS `aihr_prompt_template` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_gap` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`query_text` varchar(1000) NOT NULL COMMENT '未命中问题',
|
||||
`category` varchar(100) DEFAULT NULL COMMENT '知识分类',
|
||||
`position` varchar(80) DEFAULT NULL COMMENT '岗位',
|
||||
@@ -249,7 +249,7 @@ CREATE TABLE IF NOT EXISTS `aihr_knowledge_gap` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_sop_answer_review` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`query_text` varchar(1000) NOT NULL COMMENT '问题',
|
||||
`category` varchar(100) DEFAULT NULL COMMENT '知识分类',
|
||||
`answer_text` varchar(2000) DEFAULT NULL COMMENT '回答',
|
||||
@@ -271,7 +271,7 @@ CREATE TABLE IF NOT EXISTS `aihr_sop_answer_review` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_answer_feedback` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`query_text` varchar(1000) NOT NULL COMMENT '问题原文',
|
||||
`query_norm` varchar(500) NOT NULL COMMENT '规范化问题',
|
||||
`fragment_id` bigint NOT NULL COMMENT '知识片段ID',
|
||||
@@ -468,7 +468,7 @@ ON DUPLICATE KEY UPDATE
|
||||
-- 不写入业务数据;与 update/aihr_20260715_position_sop_qualification_mysql8.sql 保持一致。
|
||||
CREATE TABLE IF NOT EXISTS `aihr_position_responsibility` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`position_code` varchar(80) NOT NULL COMMENT '岗位编码',
|
||||
`responsibility_text` varchar(1000) NOT NULL COMMENT '岗位职责',
|
||||
`sop_id` bigint DEFAULT NULL COMMENT '关联SOP主键(跨模块引用)',
|
||||
@@ -485,7 +485,7 @@ CREATE TABLE IF NOT EXISTS `aihr_position_responsibility` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_sop_applicability` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`sop_id` bigint DEFAULT NULL COMMENT '关联SOP主键(跨模块引用)',
|
||||
`sop_code` varchar(100) DEFAULT NULL COMMENT '关联SOP编码',
|
||||
`project_type` varchar(80) DEFAULT NULL COMMENT '项目类型:住宅/公建/景区等',
|
||||
@@ -503,7 +503,7 @@ CREATE TABLE IF NOT EXISTS `aihr_sop_applicability` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_onboard_task` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体ID,不复制姓名',
|
||||
`project_code` varchar(100) DEFAULT NULL COMMENT '项目编码',
|
||||
`position_code` varchar(80) DEFAULT NULL COMMENT '岗位编码',
|
||||
@@ -525,7 +525,7 @@ CREATE TABLE IF NOT EXISTS `aihr_onboard_task` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_qualification_gate` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体ID,不复制姓名',
|
||||
`project_code` varchar(100) DEFAULT NULL COMMENT '项目编码',
|
||||
`position_code` varchar(80) NOT NULL COMMENT '岗位编码',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_scenario` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`scenario_code` varchar(80) NOT NULL COMMENT '场景编码',
|
||||
`scenario_name` varchar(100) NOT NULL COMMENT '场景名称',
|
||||
`position` varchar(80) NOT NULL COMMENT '岗位',
|
||||
@@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_scenario` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_rubric` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码',
|
||||
`scenario_code` varchar(80) NOT NULL COMMENT '场景编码',
|
||||
`rubric_name` varchar(100) NOT NULL COMMENT 'Rubric名称',
|
||||
@@ -51,7 +51,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_rubric` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_rubric_dimension` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`rubric_code` varchar(100) NOT NULL COMMENT 'Rubric编码',
|
||||
`dimension_code` varchar(50) NOT NULL COMMENT '维度编码',
|
||||
`dimension_name` varchar(50) NOT NULL COMMENT '维度名称',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_audio` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '训练会话ID',
|
||||
`turn_index` int NOT NULL COMMENT '话术序号',
|
||||
`role` varchar(30) NOT NULL COMMENT '音频角色',
|
||||
@@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_audio` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_audio_upload` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`oss_id` bigint NOT NULL COMMENT 'OSS文件ID',
|
||||
`owner_user_id` bigint NOT NULL COMMENT '上传用户ID',
|
||||
`owner_identity` varchar(100) NOT NULL COMMENT '上传主体',
|
||||
@@ -34,7 +34,7 @@ CREATE TABLE IF NOT EXISTS `aihr_practice_audio_upload` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_practice_calibration` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '训练会话ID',
|
||||
`reviewer` varchar(100) DEFAULT NULL COMMENT '校准人',
|
||||
`original_score` int DEFAULT NULL COMMENT 'AI原始总分',
|
||||
|
||||
@@ -57,7 +57,7 @@ EXECUTE aihr_response_latency_stmt;
|
||||
DEALLOCATE PREPARE aihr_response_latency_stmt;
|
||||
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS aihr_brd_rubric_codes (
|
||||
tenant_id varchar(20) NOT NULL,
|
||||
tenant_id varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||
rubric_code varchar(100) NOT NULL,
|
||||
PRIMARY KEY (tenant_id, rubric_code)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_candidate_material` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`candidate_id` varchar(80) NOT NULL COMMENT '候选人外部ID',
|
||||
`candidate_name` varchar(100) DEFAULT NULL COMMENT '候选人姓名',
|
||||
`material_type` varchar(50) DEFAULT NULL COMMENT '资料类型',
|
||||
@@ -56,7 +56,7 @@ DEALLOCATE PREPARE aihr_candidate_material_reviewed_time_stmt;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_interview_result` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`session_id` varchar(100) NOT NULL COMMENT '面试会话ID',
|
||||
`candidate_id` varchar(80) DEFAULT NULL COMMENT '候选人ID',
|
||||
`candidate_name` varchar(100) DEFAULT NULL COMMENT '候选人姓名',
|
||||
@@ -182,7 +182,7 @@ DEALLOCATE PREPARE aihr_interview_reviewed_time_stmt;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_candidate_employee_link` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`candidate_id` varchar(80) NOT NULL COMMENT '本地候选人ID',
|
||||
`ext_party_id` varchar(100) NOT NULL COMMENT '外部员工主体ID',
|
||||
`status` varchar(20) DEFAULT '已关联' COMMENT '关联状态',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_gap` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`query_text` varchar(1000) NOT NULL COMMENT '未命中问题',
|
||||
`category` varchar(100) DEFAULT NULL COMMENT '知识分类',
|
||||
`position` varchar(80) DEFAULT NULL COMMENT '岗位',
|
||||
@@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS `aihr_knowledge_gap` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_knowledge_answer_feedback` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号',
|
||||
`query_text` varchar(1000) NOT NULL COMMENT '问题原文',
|
||||
`query_norm` varchar(500) NOT NULL COMMENT '规范化问题',
|
||||
`fragment_id` bigint NOT NULL COMMENT '知识片段ID',
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_position_responsibility` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`position_code` varchar(80) NOT NULL COMMENT '岗位编码',
|
||||
`responsibility_text` varchar(1000) NOT NULL COMMENT '岗位职责',
|
||||
`sop_id` bigint DEFAULT NULL COMMENT '关联SOP主键(跨模块引用)',
|
||||
@@ -21,7 +21,7 @@ CREATE TABLE IF NOT EXISTS `aihr_position_responsibility` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_sop_applicability` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`sop_id` bigint DEFAULT NULL COMMENT '关联SOP主键(跨模块引用)',
|
||||
`sop_code` varchar(100) DEFAULT NULL COMMENT '关联SOP编码',
|
||||
`project_type` varchar(80) DEFAULT NULL COMMENT '项目类型:住宅/公建/景区等',
|
||||
@@ -39,7 +39,7 @@ CREATE TABLE IF NOT EXISTS `aihr_sop_applicability` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_onboard_task` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体ID,不复制姓名',
|
||||
`project_code` varchar(100) DEFAULT NULL COMMENT '项目编码',
|
||||
`position_code` varchar(80) DEFAULT NULL COMMENT '岗位编码',
|
||||
@@ -61,7 +61,7 @@ CREATE TABLE IF NOT EXISTS `aihr_onboard_task` (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `aihr_qualification_gate` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '000000' COMMENT '租户编号',
|
||||
`ext_party_id` varchar(100) NOT NULL COMMENT '员工外部主体ID,不复制姓名',
|
||||
`project_code` varchar(100) DEFAULT NULL COMMENT '项目编码',
|
||||
`position_code` varchar(80) NOT NULL COMMENT '岗位编码',
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
-- Keep AIHR tenant identifiers compatible with the framework tenant contract.
|
||||
-- This migration derives the target charset/collation from sys_oss.tenant_id,
|
||||
-- preserves each AIHR tenant_id column's nullability/default/comment, and is idempotent.
|
||||
|
||||
DROP PROCEDURE IF EXISTS aihr_align_tenant_collation;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE PROCEDURE aihr_align_tenant_collation()
|
||||
BEGIN
|
||||
DECLARE done int DEFAULT 0;
|
||||
DECLARE target_charset varchar(64);
|
||||
DECLARE target_collation varchar(64);
|
||||
DECLARE current_table varchar(64);
|
||||
DECLARE current_type text;
|
||||
DECLARE current_nullable varchar(3);
|
||||
DECLARE current_default text;
|
||||
DECLARE current_comment text;
|
||||
|
||||
DECLARE tenant_columns CURSOR FOR
|
||||
SELECT table_name, column_type, is_nullable, column_default, column_comment
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = DATABASE()
|
||||
AND LEFT(table_name, 5) = 'aihr_'
|
||||
AND column_name = 'tenant_id'
|
||||
AND collation_name <> target_collation
|
||||
ORDER BY table_name;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
|
||||
|
||||
SELECT character_set_name, collation_name
|
||||
INTO target_charset, target_collation
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'sys_oss'
|
||||
AND column_name = 'tenant_id'
|
||||
LIMIT 1;
|
||||
|
||||
IF target_charset IS NULL OR target_collation IS NULL THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = 'sys_oss.tenant_id charset/collation contract is missing';
|
||||
END IF;
|
||||
|
||||
OPEN tenant_columns;
|
||||
align_loop: LOOP
|
||||
FETCH tenant_columns
|
||||
INTO current_table, current_type, current_nullable, current_default, current_comment;
|
||||
IF done = 1 THEN
|
||||
LEAVE align_loop;
|
||||
END IF;
|
||||
|
||||
SET @aihr_tenant_ddl = CONCAT(
|
||||
'ALTER TABLE `', REPLACE(current_table, '`', '``'),
|
||||
'` MODIFY COLUMN `tenant_id` ', current_type,
|
||||
' CHARACTER SET `', REPLACE(target_charset, '`', '``'),
|
||||
'` COLLATE `', REPLACE(target_collation, '`', '``'), '`',
|
||||
IF(current_nullable = 'YES', ' NULL', ' NOT NULL'),
|
||||
IF(current_default IS NULL, '', CONCAT(' DEFAULT ', QUOTE(current_default))),
|
||||
' COMMENT ', QUOTE(COALESCE(current_comment, ''))
|
||||
);
|
||||
PREPARE aihr_tenant_statement FROM @aihr_tenant_ddl;
|
||||
EXECUTE aihr_tenant_statement;
|
||||
DEALLOCATE PREPARE aihr_tenant_statement;
|
||||
END LOOP;
|
||||
CLOSE tenant_columns;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
CALL aihr_align_tenant_collation();
|
||||
DROP PROCEDURE aihr_align_tenant_collation;
|
||||
Reference in New Issue
Block a user