标注结果和标注结果归档优化
This commit is contained in:
@@ -39,7 +39,8 @@ labelsys:
|
||||
ttl: PT2H
|
||||
store-type: redis
|
||||
annotation:
|
||||
auto-archive-timeout: PT2H
|
||||
auto-archive-fixed-delay: 300000 # 定时任务执行间隔(毫秒),默认5分钟
|
||||
auto-archive-timeout: PT2H # 自动归档超时时间,默认2小时
|
||||
object-storage:
|
||||
endpoint: ${OBJECT_STORAGE_ENDPOINT:http://39.107.112.174:9000}
|
||||
region: ${OBJECT_STORAGE_REGION:cn-east-1}
|
||||
|
||||
@@ -57,12 +57,12 @@ ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO source_resource (
|
||||
id, company_id, creator_id, creator_role, resource_name, resource_type,
|
||||
bucket_name, file_path, file_size, source_status, storage_provider, remark
|
||||
bucket_name, file_path, file_size, source_status, storage_provider, has_bbox, remark
|
||||
) VALUES
|
||||
(601, 2, 3, 'EMPLOYEE', '设备巡检规范.txt', 'TEXT',
|
||||
'source-data', 'text/202604/601.txt', 20480, 'READY', 'rustfs', '文本资源示例'),
|
||||
'source-data', 'text/202604/601.txt', 20480, 'READY', 'rustfs', NULL, '文本资源示例'),
|
||||
(602, 2, 3, 'EMPLOYEE', '控制柜照片.jpg', 'IMAGE',
|
||||
'source-data', 'image/202604/602.jpg', 532480, 'READY', 'rustfs', '图片资源示例')
|
||||
'source-data', 'image/202604/602.jpg', 532480, 'READY', 'rustfs', TRUE, '图片资源示例')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO annotation_task (
|
||||
@@ -85,29 +85,25 @@ ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO annotation_result (
|
||||
id, company_id, creator_id, creator_role, task_id, resource_id,
|
||||
qa_content_json, qa_content_storage_mode, qa_content_file_path, diff_summary,
|
||||
qa_content_file_path, diff_summary_file_path,
|
||||
requires_manual_review, is_deleted, reviewer_id, review_comment, reviewed_at
|
||||
) VALUES
|
||||
(801, 2, 3, 'EMPLOYEE', 701, 601,
|
||||
'{"question":"巡检开始前需要做什么?","answer":"详见外置结果文件,包含完整步骤与注意事项。"}',
|
||||
'EXTERNAL', 'annotation-results/202604/801-qa.json',
|
||||
'{"extract_question":"巡检开始前需要做什么?","extract_answer":"开始前检查设备状态和作业环境。","verify_answer":"开始前应确认设备状态、防护用品和现场环境安全。","mismatch_fields":["answer"],"reason":"抽取答案遗漏了安全检查要点。"}',
|
||||
'annotation-results/2/qa/801.json',
|
||||
'annotation-results/2/diff/801.json',
|
||||
TRUE, FALSE, NULL, NULL, NULL),
|
||||
(802, 2, 3, 'EMPLOYEE', 702, 602,
|
||||
'{"question":"图片中的控制柜当前状态如何?","answer":"控制柜处于运行状态,绿色指示灯亮起。"}',
|
||||
'INLINE', NULL,
|
||||
'{"extract_question":"图片中的控制柜当前状态如何?","extract_answer":"控制柜处于运行状态,绿色指示灯亮起。","verify_answer":"控制柜正在运行,指示灯显示正常。","mismatch_fields":[],"reason":"校验结果与抽取结果基本一致。"}',
|
||||
'annotation-results/2/qa/802.json',
|
||||
NULL,
|
||||
FALSE, FALSE, 5, '结果可通过。', CURRENT_TIMESTAMP)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO annotation_result_history (
|
||||
id, company_id, creator_id, creator_role, source_result_id, task_id, resource_id,
|
||||
qa_content_json, qa_content_storage_mode, qa_content_file_path, archive_reason, archived_by, archived_at
|
||||
qa_content_file_path, archive_reason, archived_by, archived_at
|
||||
) VALUES
|
||||
(901, 2, 3, 'EMPLOYEE', 802, 702, 602,
|
||||
'{"question":"图片中的控制柜当前状态如何?","answer":"控制柜处于运行状态,绿色指示灯亮起。"}',
|
||||
'INLINE',
|
||||
NULL,
|
||||
'annotation-results/2/qa/802.json',
|
||||
'审核通过后归档', 5, CURRENT_TIMESTAMP)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
|
||||
@@ -135,6 +135,7 @@ CREATE TABLE IF NOT EXISTS source_resource
|
||||
file_size BIGINT NOT NULL DEFAULT 0,
|
||||
source_status VARCHAR(32) NOT NULL DEFAULT 'UPLOADED',
|
||||
storage_provider VARCHAR(64) NOT NULL DEFAULT 'rustfs',
|
||||
has_bbox BOOLEAN,
|
||||
remark VARCHAR(255),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
@@ -154,6 +155,7 @@ COMMENT ON COLUMN source_resource.file_path IS '文件存储路径,表示对
|
||||
COMMENT ON COLUMN source_resource.file_size IS '文件大小,单位字节,默认 0。';
|
||||
COMMENT ON COLUMN source_resource.source_status IS '资源状态,默认 UPLOADED,可选 PROCESSING、READY、ARCHIVED。';
|
||||
COMMENT ON COLUMN source_resource.storage_provider IS '存储提供方,默认 rustfs。';
|
||||
COMMENT ON COLUMN source_resource.has_bbox IS '是否有BBOX标注。NULL表示非图片资源或未标注;TRUE表示已标注BBOX;FALSE表示已删除BBOX标注。';
|
||||
COMMENT ON COLUMN source_resource.remark IS '备注说明。';
|
||||
COMMENT ON COLUMN source_resource.created_at IS '创建时间。';
|
||||
COMMENT ON COLUMN source_resource.updated_at IS '更新时间。';
|
||||
@@ -242,25 +244,24 @@ COMMENT ON COLUMN annotation_task_resource.task_id IS '任务ID。';
|
||||
COMMENT ON COLUMN annotation_task_resource.resource_id IS '资源ID。';
|
||||
COMMENT ON COLUMN annotation_task_resource.created_at IS '创建时间。';
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS annotation_result
|
||||
(
|
||||
id BIGINT PRIMARY KEY,
|
||||
company_id BIGINT NOT NULL,
|
||||
creator_id BIGINT NOT NULL,
|
||||
creator_role VARCHAR(32) NOT NULL DEFAULT 'EMPLOYEE',
|
||||
task_id BIGINT NOT NULL,
|
||||
resource_id BIGINT NOT NULL,
|
||||
qa_content_json TEXT NOT NULL DEFAULT '{}',
|
||||
qa_content_storage_mode VARCHAR(32) NOT NULL DEFAULT 'INLINE',
|
||||
qa_content_file_path VARCHAR(512),
|
||||
diff_summary TEXT NOT NULL DEFAULT '{}',
|
||||
requires_manual_review BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
reviewer_id BIGINT,
|
||||
review_comment TEXT,
|
||||
reviewed_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
id BIGINT PRIMARY KEY,
|
||||
company_id BIGINT NOT NULL,
|
||||
creator_id BIGINT NOT NULL,
|
||||
creator_role VARCHAR(32) NOT NULL DEFAULT 'EMPLOYEE',
|
||||
task_id BIGINT NOT NULL,
|
||||
resource_id BIGINT NOT NULL,
|
||||
qa_content_file_path VARCHAR(512) NOT NULL,
|
||||
diff_summary_file_path VARCHAR(512),
|
||||
requires_manual_review BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
reviewer_id BIGINT,
|
||||
review_comment TEXT,
|
||||
reviewed_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_annotation_result_company FOREIGN KEY (company_id) REFERENCES sys_company (id),
|
||||
CONSTRAINT fk_annotation_result_creator FOREIGN KEY (creator_id) REFERENCES sys_user (id),
|
||||
CONSTRAINT fk_annotation_result_task FOREIGN KEY (task_id) REFERENCES annotation_task (id),
|
||||
@@ -268,18 +269,16 @@ CREATE TABLE IF NOT EXISTS annotation_result
|
||||
CONSTRAINT fk_annotation_result_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user (id)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE annotation_result IS '当前标注结果表。';
|
||||
COMMENT ON TABLE annotation_result IS '当前标注结果表。问答内容和差异摘要统一存储在对象存储中。';
|
||||
COMMENT ON COLUMN annotation_result.id IS '标注结果主键ID。';
|
||||
COMMENT ON COLUMN annotation_result.company_id IS '所属公司ID。';
|
||||
COMMENT ON COLUMN annotation_result.creator_id IS '结果创建人用户ID。';
|
||||
COMMENT ON COLUMN annotation_result.creator_role IS '结果创建人数据权限角色,默认 EMPLOYEE。';
|
||||
COMMENT ON COLUMN annotation_result.task_id IS '关联任务ID。';
|
||||
COMMENT ON COLUMN annotation_result.resource_id IS '关联资源ID。';
|
||||
COMMENT ON COLUMN annotation_result.qa_content_json IS '问答内容 JSON 字符串。字段类型为 TEXT,建议结构为 {\"question\":\"...\",\"answer\":\"...\"}。中小体积内容默认直接入库。';
|
||||
COMMENT ON COLUMN annotation_result.qa_content_storage_mode IS '问答内容存储模式,默认 INLINE,可选 INLINE、EXTERNAL。当完整问答内容较大时,可设为 EXTERNAL,仅在表内保留摘要或索引信息。';
|
||||
COMMENT ON COLUMN annotation_result.qa_content_file_path IS '当 qa_content_storage_mode = EXTERNAL 时,记录外置问答内容文件路径。';
|
||||
COMMENT ON COLUMN annotation_result.diff_summary IS '差异摘要 JSON 字符串。字段类型为 TEXT,建议结构为 {\"extract_question\":\"...\",\"extract_answer\":\"...\",\"verify_answer\":\"...\",\"mismatch_fields\":[\"question\",\"answer\"],\"reason\":\"...\"}。';
|
||||
COMMENT ON COLUMN annotation_result.requires_manual_review IS '是否需要人工审核,默认 FALSE。';
|
||||
COMMENT ON COLUMN annotation_result.qa_content_file_path IS '问答内容文件路径,存储在对象存储中。文件格式包含taskId、resourceId、records数组(id、question、answer、requiresReview)。';
|
||||
COMMENT ON COLUMN annotation_result.diff_summary_file_path IS '差异摘要文件路径,存储在对象存储中。当存在差异时生成,包含taskId、resourceId、records数组(qaId、question、extractAnswer、verifyAnswer、diffReason、mergedAnswer)。';
|
||||
COMMENT ON COLUMN annotation_result.requires_manual_review IS '是否需要人工审核,默认 FALSE。当diff_summary_file_path不为空时为TRUE。';
|
||||
COMMENT ON COLUMN annotation_result.is_deleted IS '软删除标记,默认 FALSE。';
|
||||
COMMENT ON COLUMN annotation_result.reviewer_id IS '审核人用户ID。';
|
||||
COMMENT ON COLUMN annotation_result.review_comment IS '审核意见。';
|
||||
@@ -287,22 +286,21 @@ COMMENT ON COLUMN annotation_result.reviewed_at IS '审核时间。';
|
||||
COMMENT ON COLUMN annotation_result.created_at IS '创建时间。';
|
||||
COMMENT ON COLUMN annotation_result.updated_at IS '更新时间。';
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS annotation_result_history
|
||||
(
|
||||
id BIGINT PRIMARY KEY,
|
||||
company_id BIGINT NOT NULL,
|
||||
creator_id BIGINT NOT NULL,
|
||||
creator_role VARCHAR(32) NOT NULL DEFAULT 'EMPLOYEE',
|
||||
source_result_id BIGINT,
|
||||
task_id BIGINT NOT NULL,
|
||||
resource_id BIGINT NOT NULL,
|
||||
qa_content_json TEXT NOT NULL DEFAULT '{}',
|
||||
qa_content_storage_mode VARCHAR(32) NOT NULL DEFAULT 'INLINE',
|
||||
qa_content_file_path VARCHAR(512),
|
||||
archive_reason VARCHAR(255),
|
||||
archived_by BIGINT,
|
||||
archived_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
id BIGINT PRIMARY KEY,
|
||||
company_id BIGINT NOT NULL,
|
||||
creator_id BIGINT NOT NULL,
|
||||
creator_role VARCHAR(32) NOT NULL DEFAULT 'EMPLOYEE',
|
||||
source_result_id BIGINT,
|
||||
task_id BIGINT NOT NULL,
|
||||
resource_id BIGINT NOT NULL,
|
||||
qa_content_file_path VARCHAR(512) NOT NULL,
|
||||
archive_reason VARCHAR(256),
|
||||
archived_by BIGINT,
|
||||
archived_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_annotation_result_history_company FOREIGN KEY (company_id) REFERENCES sys_company (id),
|
||||
CONSTRAINT fk_annotation_result_history_creator FOREIGN KEY (creator_id) REFERENCES sys_user (id),
|
||||
CONSTRAINT fk_annotation_result_history_result FOREIGN KEY (source_result_id) REFERENCES annotation_result (id),
|
||||
@@ -311,7 +309,7 @@ CREATE TABLE IF NOT EXISTS annotation_result_history
|
||||
CONSTRAINT fk_annotation_result_history_archived_by FOREIGN KEY (archived_by) REFERENCES sys_user (id)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE annotation_result_history IS '历史归档结果表。';
|
||||
COMMENT ON TABLE annotation_result_history IS '历史归档结果表。问答内容存储在对象存储中。';
|
||||
COMMENT ON COLUMN annotation_result_history.id IS '历史结果主键ID。';
|
||||
COMMENT ON COLUMN annotation_result_history.company_id IS '所属公司ID。';
|
||||
COMMENT ON COLUMN annotation_result_history.creator_id IS '历史记录创建人用户ID。';
|
||||
@@ -319,9 +317,7 @@ COMMENT ON COLUMN annotation_result_history.creator_role IS '历史记录创建
|
||||
COMMENT ON COLUMN annotation_result_history.source_result_id IS '来源运行态结果ID。';
|
||||
COMMENT ON COLUMN annotation_result_history.task_id IS '关联任务ID。';
|
||||
COMMENT ON COLUMN annotation_result_history.resource_id IS '关联资源ID。';
|
||||
COMMENT ON COLUMN annotation_result_history.qa_content_json IS '归档后的问答内容 JSON 字符串。字段类型为 TEXT,建议结构为 {"question":"...","answer":"..."}。';
|
||||
COMMENT ON COLUMN annotation_result_history.qa_content_storage_mode IS '归档后的问答内容存储模式,默认 INLINE,可选 INLINE、EXTERNAL。';
|
||||
COMMENT ON COLUMN annotation_result_history.qa_content_file_path IS '当 qa_content_storage_mode = EXTERNAL 时,记录归档后的外置问答内容文件路径。';
|
||||
COMMENT ON COLUMN annotation_result_history.qa_content_file_path IS '归档后的问答内容文件路径,存储在对象存储中。';
|
||||
COMMENT ON COLUMN annotation_result_history.archive_reason IS '归档原因说明。';
|
||||
COMMENT ON COLUMN annotation_result_history.archived_by IS '归档操作人用户ID。';
|
||||
COMMENT ON COLUMN annotation_result_history.archived_at IS '归档时间。';
|
||||
@@ -411,6 +407,8 @@ CREATE INDEX IF NOT EXISTS idx_sys_config_company_type ON sys_config (company_id
|
||||
CREATE INDEX IF NOT EXISTS idx_source_resource_company_type ON source_resource (company_id, resource_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_source_resource_company_status ON source_resource (company_id, source_status);
|
||||
CREATE INDEX IF NOT EXISTS idx_source_resource_creator ON source_resource (company_id, creator_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_source_resource_has_bbox ON source_resource (company_id, has_bbox);
|
||||
CREATE INDEX IF NOT EXISTS idx_source_resource_has_bbox ON source_resource (company_id, has_bbox);
|
||||
CREATE INDEX IF NOT EXISTS idx_annotation_task_company_status ON annotation_task (company_id, task_status);
|
||||
CREATE INDEX IF NOT EXISTS idx_annotation_task_company_deleted ON annotation_task (company_id, is_deleted);
|
||||
CREATE INDEX IF NOT EXISTS idx_annotation_task_creator ON annotation_task (company_id, creator_id);
|
||||
|
||||
Reference in New Issue
Block a user