ソースを参照

修改了解析任务的task_source字段类型,从string改为json。
同步调整相关代码。

maxiaolong 16 時間 前
コミット
4234ddf7dc

+ 57 - 0
alter_parse_task_repository_task_source.sql

@@ -0,0 +1,57 @@
+-- 修改解析任务存储库表的task_source字段类型
+-- 将task_source字段从VARCHAR(300)修改为JSONB类型
+
+-- 开始事务
+BEGIN;
+
+-- 步骤1: 添加一个临时的JSONB字段
+ALTER TABLE public.parse_task_repository 
+ADD COLUMN task_source_new JSONB;
+
+-- 步骤2: 将现有的VARCHAR数据转换并复制到新字段
+-- 对于已经是JSON格式的字符串,直接转换
+-- 对于普通字符串,包装成JSON对象
+UPDATE public.parse_task_repository 
+SET task_source_new = CASE 
+    -- 尝试解析为JSON,如果成功则使用解析结果
+    WHEN task_source::text ~ '^[\[\{].*[\]\}]$' THEN task_source::jsonb
+    -- 如果不是JSON格式,包装成简单的JSON对象
+    ELSE json_build_object('source', task_source, 'migrated', true)::jsonb
+END;
+
+-- 步骤3: 删除原有字段
+ALTER TABLE public.parse_task_repository 
+DROP COLUMN task_source;
+
+-- 步骤4: 重命名新字段
+ALTER TABLE public.parse_task_repository 
+RENAME COLUMN task_source_new TO task_source;
+
+-- 步骤5: 设置字段为NOT NULL (如果需要)
+ALTER TABLE public.parse_task_repository 
+ALTER COLUMN task_source SET NOT NULL;
+
+-- 步骤6: 更新字段注释
+COMMENT ON COLUMN public.parse_task_repository.task_source IS '任务来源,JSONB格式,包含详细的来源信息';
+
+-- 提交事务
+COMMIT;
+
+-- 验证修改结果
+SELECT 
+    column_name, 
+    data_type, 
+    is_nullable,
+    column_default
+FROM information_schema.columns 
+WHERE table_name = 'parse_task_repository' 
+  AND column_name = 'task_source';
+
+-- 显示一些示例数据以验证转换
+SELECT 
+    id,
+    task_name,
+    task_source,
+    pg_typeof(task_source) as data_type
+FROM public.parse_task_repository 
+LIMIT 5; 

+ 1 - 1
app/core/data_parse/parse_system.py

@@ -127,7 +127,7 @@ class ParseTaskRepository(db.Model):
     task_name = db.Column(db.String(100), nullable=False)
     task_status = db.Column(db.String(10), nullable=False)
     task_type = db.Column(db.String(50), nullable=False)
-    task_source = db.Column(db.String(300), nullable=False)
+    task_source = db.Column(db.JSON, nullable=False)
     collection_count = db.Column(db.Integer, nullable=False, default=0)
     parse_count = db.Column(db.Integer, nullable=False, default=0)
     parse_result = db.Column(db.JSON)

+ 2 - 2
app/core/data_parse/parse_task.py

@@ -241,7 +241,7 @@ def _handle_recruitment_task(created_by):
             task_name=task_name,
             task_status='待解析',
             task_type='招聘',
-            task_source=json.dumps(task_source, ensure_ascii=False),
+            task_source=task_source,
             collection_count=0,  # 招聘任务不涉及文件收集
             parse_count=0,
             parse_result=None,
@@ -513,7 +513,7 @@ def add_parse_task(files, task_type, created_by='system'):
                 task_name=task_name,
                 task_status='待解析',
                 task_type=task_type,
-                task_source=json.dumps(task_source, ensure_ascii=False),  # 转换为JSON字符串存储
+                task_source=task_source,
                 collection_count=len(uploaded_files),
                 parse_count=0,  # 解析数量初始为0
                 parse_result=None,  # 解析结果初始为空