|
@@ -75,9 +75,24 @@ PROFESSIONAL_FIELD_MAP = {
|
|
|
"其他": "QT"
|
|
"其他": "QT"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-# 专业领域反向映射 (数据库存储 -> 前端显示)
|
|
|
|
|
|
|
+# 四级分类反向映射 (数据库存储 -> 前端显示)
|
|
|
PROFESSIONAL_FIELD_REVERSE_MAP = {v: k for k, v in PROFESSIONAL_FIELD_MAP.items()}
|
|
PROFESSIONAL_FIELD_REVERSE_MAP = {v: k for k, v in PROFESSIONAL_FIELD_MAP.items()}
|
|
|
|
|
|
|
|
|
|
+# 时效性映射 (前端显示 -> 数据库存储)
|
|
|
|
|
+VALIDITY_MAP = {
|
|
|
|
|
+ "现行": "XH",
|
|
|
|
|
+ "废止": "FZ",
|
|
|
|
|
+ "试行": "SX"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# 时效性反向映射 (数据库存储 -> 前端显示)
|
|
|
|
|
+VALIDITY_REVERSE_MAP = {v: k for k, v in VALIDITY_MAP.items()}
|
|
|
|
|
+VALIDITY_REVERSE_MAP.update({
|
|
|
|
|
+ "现行": "现行",
|
|
|
|
|
+ "已废止": "废止",
|
|
|
|
|
+ "被替代": "废止"
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
# 方案类别映射 (前端显示 -> 数据库存储)
|
|
# 方案类别映射 (前端显示 -> 数据库存储)
|
|
|
PLAN_CATEGORY_MAP = {
|
|
PLAN_CATEGORY_MAP = {
|
|
|
"超危大方案": "CH",
|
|
"超危大方案": "CH",
|
|
@@ -219,6 +234,11 @@ class SampleService:
|
|
|
if prof_field_code in PROFESSIONAL_FIELD_REVERSE_MAP:
|
|
if prof_field_code in PROFESSIONAL_FIELD_REVERSE_MAP:
|
|
|
item['professional_field'] = PROFESSIONAL_FIELD_REVERSE_MAP[prof_field_code]
|
|
item['professional_field'] = PROFESSIONAL_FIELD_REVERSE_MAP[prof_field_code]
|
|
|
|
|
|
|
|
|
|
+ # 处理时效性显示 (简写 -> 中文)
|
|
|
|
|
+ validity_code = item.get('validity')
|
|
|
|
|
+ if validity_code in VALIDITY_REVERSE_MAP:
|
|
|
|
|
+ item['validity'] = VALIDITY_REVERSE_MAP[validity_code]
|
|
|
|
|
+
|
|
|
# 处理一级分类显示 (简写 -> 中文)
|
|
# 处理一级分类显示 (简写 -> 中文)
|
|
|
level_1_code = item.get('level_1_classification')
|
|
level_1_code = item.get('level_1_classification')
|
|
|
if level_1_code in FIRST_LEVEL_REVERSE_MAP:
|
|
if level_1_code in FIRST_LEVEL_REVERSE_MAP:
|
|
@@ -438,6 +458,11 @@ class SampleService:
|
|
|
prof_field = business_metadata['professional_field']
|
|
prof_field = business_metadata['professional_field']
|
|
|
business_metadata['professional_field'] = PROFESSIONAL_FIELD_MAP.get(prof_field, prof_field)
|
|
business_metadata['professional_field'] = PROFESSIONAL_FIELD_MAP.get(prof_field, prof_field)
|
|
|
|
|
|
|
|
|
|
+ # 强制转换 validity 为简写
|
|
|
|
|
+ if 'validity' in business_metadata and business_metadata['validity']:
|
|
|
|
|
+ validity = business_metadata['validity']
|
|
|
|
|
+ business_metadata['validity'] = VALIDITY_MAP.get(validity, validity)
|
|
|
|
|
+
|
|
|
# 强制转换 plan_category 为简写
|
|
# 强制转换 plan_category 为简写
|
|
|
if 'plan_category' in business_metadata and business_metadata['plan_category']:
|
|
if 'plan_category' in business_metadata and business_metadata['plan_category']:
|
|
|
plan_cat = business_metadata['plan_category']
|
|
plan_cat = business_metadata['plan_category']
|
|
@@ -486,13 +511,7 @@ class SampleService:
|
|
|
}
|
|
}
|
|
|
await self.milvus_service.insert_knowledge(md_content, doc_info)
|
|
await self.milvus_service.insert_knowledge(md_content, doc_info)
|
|
|
|
|
|
|
|
- # F. 添加到任务管理中心 (类型为 data)
|
|
|
|
|
- try:
|
|
|
|
|
- await task_service.add_task(doc_id, 'data')
|
|
|
|
|
- except Exception as task_err:
|
|
|
|
|
- logger.error(f"添加文档 {title} 到任务中心失败: {task_err}")
|
|
|
|
|
-
|
|
|
|
|
- # G. 更新数据库状态
|
|
|
|
|
|
|
+ # F. 更新数据库状态
|
|
|
update_sql = "UPDATE t_samp_document_main SET whether_to_enter = 1, kb_id = %s, kb_method = %s, updated_by = %s, updated_time = NOW() WHERE id = %s"
|
|
update_sql = "UPDATE t_samp_document_main SET whether_to_enter = 1, kb_id = %s, kb_method = %s, updated_by = %s, updated_time = NOW() WHERE id = %s"
|
|
|
cursor.execute(update_sql, (current_kb_id, current_kb_method, username, doc_id))
|
|
cursor.execute(update_sql, (current_kb_id, current_kb_method, username, doc_id))
|
|
|
success_count += 1
|
|
success_count += 1
|
|
@@ -570,60 +589,89 @@ class SampleService:
|
|
|
add_placeholders = ', '.join(['%s'] * len(ids_to_add))
|
|
add_placeholders = ', '.join(['%s'] * len(ids_to_add))
|
|
|
sql = f"UPDATE t_samp_document_main SET whether_to_task = 1, updated_by = %s, updated_time = NOW() WHERE id IN ({add_placeholders})"
|
|
sql = f"UPDATE t_samp_document_main SET whether_to_task = 1, updated_by = %s, updated_time = NOW() WHERE id IN ({add_placeholders})"
|
|
|
cursor.execute(sql, (username, *ids_to_add))
|
|
cursor.execute(sql, (username, *ids_to_add))
|
|
|
-
|
|
|
|
|
- # 3. 写入任务管理表 (单表逻辑)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ # 2.5 清理选定文档之前的空任务记录(处理存量僵尸数据)
|
|
|
|
|
+ cursor.execute(f"DELETE FROM t_task_management WHERE business_id IN ({add_placeholders}) AND project_id IS NULL", ids_to_add)
|
|
|
|
|
+
|
|
|
|
|
+ # 3. 批量获取元数据并写入任务管理表
|
|
|
|
|
+ EXCLUDE_FIELDS = {
|
|
|
|
|
+ 'id', 'created_time', 'updated_time', 'created_by', 'updated_by',
|
|
|
|
|
+ 'conversion_status', 'whether_to_enter', 'whether_to_task',
|
|
|
|
|
+ 'kb_method', 'whether_to_delete'
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ # 3.1 批量查询主表信息
|
|
|
|
|
+ cursor.execute(f"SELECT * FROM t_samp_document_main WHERE id IN ({add_placeholders})", ids_to_add)
|
|
|
|
|
+ all_doc_main = cursor.fetchall()
|
|
|
|
|
+ doc_main_map = {doc['id']: doc for doc in all_doc_main}
|
|
|
|
|
+
|
|
|
|
|
+ # 3.2 按来源类型分组查询子表信息
|
|
|
|
|
+ source_type_groups = {}
|
|
|
|
|
+ for doc in all_doc_main:
|
|
|
|
|
+ st = doc.get('source_type')
|
|
|
|
|
+ if st:
|
|
|
|
|
+ if st not in source_type_groups: source_type_groups[st] = []
|
|
|
|
|
+ source_type_groups[st].append(doc['id'])
|
|
|
|
|
+
|
|
|
|
|
+ all_sub_data_map = {}
|
|
|
|
|
+ for st, ids in source_type_groups.items():
|
|
|
|
|
+ table_name = TABLE_MAP.get(st)
|
|
|
|
|
+ if table_name:
|
|
|
|
|
+ placeholders_sub = ', '.join(['%s'] * len(ids))
|
|
|
|
|
+ cursor.execute(f"SELECT * FROM {table_name} WHERE id IN ({placeholders_sub})", ids)
|
|
|
|
|
+ sub_rows = cursor.fetchall()
|
|
|
|
|
+ for row in sub_rows:
|
|
|
|
|
+ all_sub_data_map[row['id']] = row
|
|
|
|
|
+
|
|
|
|
|
+ # 3.3 批量准备数据
|
|
|
|
|
+ task_records = []
|
|
|
for doc_id in ids_to_add:
|
|
for doc_id in ids_to_add:
|
|
|
- try:
|
|
|
|
|
- # 获取业务元数据
|
|
|
|
|
- metadata_dict = {}
|
|
|
|
|
- try:
|
|
|
|
|
- # 定义需要过滤掉的非业务/内部状态字段
|
|
|
|
|
- EXCLUDE_FIELDS = {
|
|
|
|
|
- 'id', 'created_time', 'updated_time', 'created_by', 'updated_by',
|
|
|
|
|
- 'conversion_status', 'whether_to_enter', 'whether_to_task',
|
|
|
|
|
- 'kb_method', 'whether_to_delete'
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- # 查询主表和子表信息
|
|
|
|
|
- cursor.execute("SELECT * FROM t_samp_document_main WHERE id = %s", (doc_id,))
|
|
|
|
|
- doc_main = cursor.fetchone()
|
|
|
|
|
- if doc_main:
|
|
|
|
|
- # 基础元数据 (仅保留标题和来源类型等核心信息)
|
|
|
|
|
- for k, v in doc_main.items():
|
|
|
|
|
- if v is not None and v != '' and k not in EXCLUDE_FIELDS:
|
|
|
|
|
- metadata_dict[k] = v
|
|
|
|
|
-
|
|
|
|
|
- # 子表元数据
|
|
|
|
|
- source_type = doc_main.get('source_type')
|
|
|
|
|
- table_name = TABLE_MAP.get(source_type)
|
|
|
|
|
- if table_name:
|
|
|
|
|
- cursor.execute(f"SELECT * FROM {table_name} WHERE id = %s", (doc_id,))
|
|
|
|
|
- sub_data = cursor.fetchone()
|
|
|
|
|
- if sub_data:
|
|
|
|
|
- for k, v in sub_data.items():
|
|
|
|
|
- if v is not None and v != '' and k not in EXCLUDE_FIELDS:
|
|
|
|
|
- metadata_dict[k] = v
|
|
|
|
|
-
|
|
|
|
|
- # 递归格式化时间
|
|
|
|
|
- metadata_dict = task_service._serialize_datetime(metadata_dict)
|
|
|
|
|
- except Exception as meta_err:
|
|
|
|
|
- logger.warning(f"获取文档 {doc_id} 元数据失败: {meta_err}")
|
|
|
|
|
|
|
+ metadata_dict = {}
|
|
|
|
|
+ doc_main = doc_main_map.get(doc_id)
|
|
|
|
|
+ if doc_main:
|
|
|
|
|
+ for k, v in doc_main.items():
|
|
|
|
|
+ if v is not None and v != '' and k not in EXCLUDE_FIELDS:
|
|
|
|
|
+ metadata_dict[k] = v
|
|
|
|
|
|
|
|
- await task_service.add_task(
|
|
|
|
|
- business_id=doc_id,
|
|
|
|
|
- task_type='data',
|
|
|
|
|
- project_id=project_id,
|
|
|
|
|
- project_name=project_name,
|
|
|
|
|
- tag=tag_str,
|
|
|
|
|
- metadata=json.dumps(metadata_dict, ensure_ascii=False) if metadata_dict else None
|
|
|
|
|
- )
|
|
|
|
|
- except Exception as e:
|
|
|
|
|
- logger.exception(f"添加文档 {doc_id} 到任务中心失败: {e}")
|
|
|
|
|
|
|
+ sub_data = all_sub_data_map.get(doc_id)
|
|
|
|
|
+ if sub_data:
|
|
|
|
|
+ for k, v in sub_data.items():
|
|
|
|
|
+ if v is not None and v != '' and k not in EXCLUDE_FIELDS:
|
|
|
|
|
+ metadata_dict[k] = v
|
|
|
|
|
+
|
|
|
|
|
+ metadata_dict = task_service._serialize_datetime(metadata_dict)
|
|
|
|
|
+ task_records.append((
|
|
|
|
|
+ doc_id, None, project_id, project_name, 'data', 'pending',
|
|
|
|
|
+ tag_str, json.dumps(metadata_dict, ensure_ascii=False) if metadata_dict else None
|
|
|
|
|
+ ))
|
|
|
|
|
+
|
|
|
|
|
+ # 3.4 批量写入任务管理表
|
|
|
|
|
+ if task_records:
|
|
|
|
|
+ logger.info(f"正在批量写入 {len(task_records)} 条任务记录到数据库...")
|
|
|
|
|
+ sql_insert = """
|
|
|
|
|
+ INSERT INTO t_task_management (business_id, task_id, project_id, project_name, type, annotation_status, tag, metadata)
|
|
|
|
|
+ VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
|
|
|
|
|
+ ON DUPLICATE KEY UPDATE
|
|
|
|
|
+ task_id = IFNULL(VALUES(task_id), task_id),
|
|
|
|
|
+ project_id = IFNULL(VALUES(project_id), project_id),
|
|
|
|
|
+ project_name = IFNULL(VALUES(project_name), project_name),
|
|
|
|
|
+ annotation_status = IFNULL(VALUES(annotation_status), annotation_status),
|
|
|
|
|
+ tag = IFNULL(VALUES(tag), tag),
|
|
|
|
|
+ metadata = IFNULL(VALUES(metadata), metadata)
|
|
|
|
|
+ """
|
|
|
|
|
+ cursor.executemany(sql_insert, task_records)
|
|
|
|
|
|
|
|
conn.commit()
|
|
conn.commit()
|
|
|
|
|
+ logger.info(f"数据库写入完成,已提交。正在释放连接...")
|
|
|
|
|
+ cursor.close()
|
|
|
|
|
+ conn.close()
|
|
|
|
|
+ conn = None # 防止 finally 中重复关闭
|
|
|
|
|
+ cursor = None
|
|
|
|
|
|
|
|
- # 4. 自动推送至外部标注平台
|
|
|
|
|
|
|
+ # 4. 自动推送至外部标注平台 (在连接关闭后执行,防止死锁 and 长事务)
|
|
|
|
|
+ logger.info(f"开始推送项目 {project_name} (ID: {project_id}) 至外部平台...")
|
|
|
push_success, push_msg = await task_service.send_to_external_platform(project_id)
|
|
push_success, push_msg = await task_service.send_to_external_platform(project_id)
|
|
|
|
|
+ logger.info(f"外部平台推送结果: success={push_success}, msg={push_msg}")
|
|
|
|
|
|
|
|
msg = f"成功将 {len(ids_to_add)} 份文档加入项目: {project_name}"
|
|
msg = f"成功将 {len(ids_to_add)} 份文档加入项目: {project_name}"
|
|
|
if push_success:
|
|
if push_success:
|
|
@@ -1017,6 +1065,10 @@ class SampleService:
|
|
|
prof_field_cn = doc_data.get('professional_field')
|
|
prof_field_cn = doc_data.get('professional_field')
|
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
|
|
|
|
|
|
|
|
+ # 处理时效性 (中文 -> 简写)
|
|
|
|
|
+ validity_cn = doc_data.get('validity')
|
|
|
|
|
+ validity_code = VALIDITY_MAP.get(validity_cn, validity_cn)
|
|
|
|
|
+
|
|
|
# 处理方案类别 (中文 -> 简写)
|
|
# 处理方案类别 (中文 -> 简写)
|
|
|
plan_category_cn = doc_data.get('plan_category')
|
|
plan_category_cn = doc_data.get('plan_category')
|
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
@@ -1078,7 +1130,7 @@ class SampleService:
|
|
|
doc_data.get('issuing_authority'), release_date, self._to_date(doc_data.get('implementation_date')),
|
|
doc_data.get('issuing_authority'), release_date, self._to_date(doc_data.get('implementation_date')),
|
|
|
doc_data.get('drafting_unit'), doc_data.get('approving_department'), doc_data.get('participating_units'),
|
|
doc_data.get('drafting_unit'), doc_data.get('approving_department'), doc_data.get('participating_units'),
|
|
|
doc_type_code, prof_field_code, doc_data.get('engineering_phase'),
|
|
doc_type_code, prof_field_code, doc_data.get('engineering_phase'),
|
|
|
- doc_data.get('validity', '现行'), doc_data.get('reference_basis'), doc_data.get('source_url'), doc_data.get('note'),
|
|
|
|
|
|
|
+ validity_code, doc_data.get('reference_basis'), doc_data.get('source_url'), doc_data.get('note'),
|
|
|
user_id, user_id
|
|
user_id, user_id
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
@@ -1116,12 +1168,6 @@ class SampleService:
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- # 3. 添加到任务管理中心 (类型为 data)
|
|
|
|
|
- try:
|
|
|
|
|
- await task_service.add_task(doc_id, 'data')
|
|
|
|
|
- except Exception as task_err:
|
|
|
|
|
- logger.error(f"添加文档 {doc_data.get('title')} 到任务中心失败: {task_err}")
|
|
|
|
|
-
|
|
|
|
|
conn.commit()
|
|
conn.commit()
|
|
|
return True, "文档添加成功", doc_id
|
|
return True, "文档添加成功", doc_id
|
|
|
except Exception as e:
|
|
except Exception as e:
|
|
@@ -1159,6 +1205,10 @@ class SampleService:
|
|
|
prof_field_cn = doc_data.get('professional_field')
|
|
prof_field_cn = doc_data.get('professional_field')
|
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
|
|
|
|
|
|
|
|
+ # 处理时效性 (中文 -> 简写)
|
|
|
|
|
+ validity_cn = doc_data.get('validity')
|
|
|
|
|
+ validity_code = VALIDITY_MAP.get(validity_cn, validity_cn)
|
|
|
|
|
+
|
|
|
# 处理方案类别 (中文 -> 简写)
|
|
# 处理方案类别 (中文 -> 简写)
|
|
|
plan_category_cn = doc_data.get('plan_category')
|
|
plan_category_cn = doc_data.get('plan_category')
|
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
@@ -1209,7 +1259,7 @@ class SampleService:
|
|
|
doc_data.get('title'), doc_data.get('english_name'), doc_data.get('standard_no'), doc_data.get('issuing_authority'),
|
|
doc_data.get('title'), doc_data.get('english_name'), doc_data.get('standard_no'), doc_data.get('issuing_authority'),
|
|
|
release_date, self._to_date(doc_data.get('implementation_date')), doc_data.get('drafting_unit'), doc_data.get('approving_department'),
|
|
release_date, self._to_date(doc_data.get('implementation_date')), doc_data.get('drafting_unit'), doc_data.get('approving_department'),
|
|
|
doc_data.get('participating_units'), doc_type_code, prof_field_code, doc_data.get('engineering_phase'),
|
|
doc_data.get('participating_units'), doc_type_code, prof_field_code, doc_data.get('engineering_phase'),
|
|
|
- doc_data.get('validity'), doc_data.get('reference_basis'), doc_data.get('source_url'), doc_data.get('note'),
|
|
|
|
|
|
|
+ validity_code, doc_data.get('reference_basis'), doc_data.get('source_url'), doc_data.get('note'),
|
|
|
updater_id, doc_id
|
|
updater_id, doc_id
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
@@ -1414,6 +1464,10 @@ class SampleService:
|
|
|
if filter_key == 'level_4_classification':
|
|
if filter_key == 'level_4_classification':
|
|
|
filter_value = FOURTH_LEVEL_MAP.get(filter_value, filter_value)
|
|
filter_value = FOURTH_LEVEL_MAP.get(filter_value, filter_value)
|
|
|
|
|
|
|
|
|
|
+ # 处理时效性查询 (前端传中文 -> 数据库查简写)
|
|
|
|
|
+ if filter_key == 'validity':
|
|
|
|
|
+ filter_value = VALIDITY_MAP.get(filter_value, filter_value)
|
|
|
|
|
+
|
|
|
# 如果是 title, standard_no, issuing_authority,支持模糊查询
|
|
# 如果是 title, standard_no, issuing_authority,支持模糊查询
|
|
|
if filter_key in ['title', 'standard_no', 'issuing_authority']:
|
|
if filter_key in ['title', 'standard_no', 'issuing_authority']:
|
|
|
where_clauses.append(f"{db_field} LIKE %s")
|
|
where_clauses.append(f"{db_field} LIKE %s")
|
|
@@ -1479,6 +1533,11 @@ class SampleService:
|
|
|
if level_4_code in FOURTH_LEVEL_REVERSE_MAP:
|
|
if level_4_code in FOURTH_LEVEL_REVERSE_MAP:
|
|
|
item['level_4_classification'] = FOURTH_LEVEL_REVERSE_MAP[level_4_code]
|
|
item['level_4_classification'] = FOURTH_LEVEL_REVERSE_MAP[level_4_code]
|
|
|
|
|
|
|
|
|
|
+ # 处理时效性显示 (简写 -> 中文)
|
|
|
|
|
+ validity_code = item.get('validity')
|
|
|
|
|
+ if validity_code in VALIDITY_REVERSE_MAP:
|
|
|
|
|
+ item['validity'] = VALIDITY_REVERSE_MAP[validity_code]
|
|
|
|
|
+
|
|
|
for key in ['file_url', 'md_url', 'json_url']:
|
|
for key in ['file_url', 'md_url', 'json_url']:
|
|
|
if item.get(key):
|
|
if item.get(key):
|
|
|
item[key] = self.minio_manager.get_full_url(item[key])
|
|
item[key] = self.minio_manager.get_full_url(item[key])
|
|
@@ -1613,6 +1672,10 @@ class SampleService:
|
|
|
prof_field_cn = data.get('professional_field')
|
|
prof_field_cn = data.get('professional_field')
|
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
|
|
|
|
|
|
|
|
+ # 处理时效性 (中文 -> 简写)
|
|
|
|
|
+ validity_cn = data.get('validity')
|
|
|
|
|
+ validity_code = VALIDITY_MAP.get(validity_cn, validity_cn)
|
|
|
|
|
+
|
|
|
# 处理方案类别 (中文 -> 简写)
|
|
# 处理方案类别 (中文 -> 简写)
|
|
|
plan_category_cn = data.get('plan_category')
|
|
plan_category_cn = data.get('plan_category')
|
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
@@ -1633,10 +1696,6 @@ class SampleService:
|
|
|
level_4_cn = data.get('level_4_classification')
|
|
level_4_cn = data.get('level_4_classification')
|
|
|
level_4_code = FOURTH_LEVEL_MAP.get(level_4_cn, level_4_cn)
|
|
level_4_code = FOURTH_LEVEL_MAP.get(level_4_cn, level_4_cn)
|
|
|
|
|
|
|
|
- # 处理四级分类 (中文 -> 简写)
|
|
|
|
|
- level_4_cn = data.get('level_4_classification')
|
|
|
|
|
- level_4_code = FOURTH_LEVEL_MAP.get(level_4_cn, level_4_cn)
|
|
|
|
|
-
|
|
|
|
|
# 1. 插入主表 (解耦触发器,手动同步)
|
|
# 1. 插入主表 (解耦触发器,手动同步)
|
|
|
cursor.execute(
|
|
cursor.execute(
|
|
|
"""
|
|
"""
|
|
@@ -1670,7 +1729,7 @@ class SampleService:
|
|
|
data.get('drafting_unit'), data.get('approving_department'),
|
|
data.get('drafting_unit'), data.get('approving_department'),
|
|
|
data.get('participating_units'),
|
|
data.get('participating_units'),
|
|
|
doc_type_code, prof_field_code, data.get('engineering_phase'),
|
|
doc_type_code, prof_field_code, data.get('engineering_phase'),
|
|
|
- data.get('validity', '现行'), data.get('reference_basis'), data.get('source_url'), data.get('note'),
|
|
|
|
|
|
|
+ validity_code or 'XH', data.get('reference_basis'), data.get('source_url'), data.get('note'),
|
|
|
user_id, user_id
|
|
user_id, user_id
|
|
|
)
|
|
)
|
|
|
elif type == 'construction_plan':
|
|
elif type == 'construction_plan':
|
|
@@ -1707,25 +1766,6 @@ class SampleService:
|
|
|
|
|
|
|
|
cursor.execute(sql, params)
|
|
cursor.execute(sql, params)
|
|
|
|
|
|
|
|
- # 3. 添加到任务管理中心 (类型为 data)
|
|
|
|
|
- try:
|
|
|
|
|
- # 尝试调用异步方法,如果报错则记录日志
|
|
|
|
|
- import asyncio
|
|
|
|
|
- try:
|
|
|
|
|
- # 检查是否有正在运行的事件循环
|
|
|
|
|
- loop = asyncio.get_event_loop()
|
|
|
|
|
- if loop.is_running():
|
|
|
|
|
- # 在运行的循环中创建任务
|
|
|
|
|
- loop.create_task(task_service.add_task(doc_id, 'data'))
|
|
|
|
|
- else:
|
|
|
|
|
- # 否则使用 run 运行(不推荐在 web 环境下这样做,但这里是兜底)
|
|
|
|
|
- loop.run_until_complete(task_service.add_task(doc_id, 'data'))
|
|
|
|
|
- except RuntimeError:
|
|
|
|
|
- # 没有事件循环时
|
|
|
|
|
- asyncio.run(task_service.add_task(doc_id, 'data'))
|
|
|
|
|
- except Exception as task_err:
|
|
|
|
|
- logger.error(f"添加基本信息 {data.get('title')} 到任务中心失败: {task_err}")
|
|
|
|
|
-
|
|
|
|
|
conn.commit()
|
|
conn.commit()
|
|
|
return True, "新增成功", doc_id
|
|
return True, "新增成功", doc_id
|
|
|
except Exception as e:
|
|
except Exception as e:
|
|
@@ -1761,6 +1801,10 @@ class SampleService:
|
|
|
prof_field_cn = data.get('professional_field')
|
|
prof_field_cn = data.get('professional_field')
|
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
prof_field_code = PROFESSIONAL_FIELD_MAP.get(prof_field_cn, prof_field_cn)
|
|
|
|
|
|
|
|
|
|
+ # 处理时效性 (中文 -> 简写)
|
|
|
|
|
+ validity_cn = data.get('validity')
|
|
|
|
|
+ validity_code = VALIDITY_MAP.get(validity_cn, validity_cn)
|
|
|
|
|
+
|
|
|
# 处理方案类别 (中文 -> 简写)
|
|
# 处理方案类别 (中文 -> 简写)
|
|
|
plan_category_cn = data.get('plan_category')
|
|
plan_category_cn = data.get('plan_category')
|
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
plan_category_code = PLAN_CATEGORY_MAP.get(plan_category_cn, plan_category_cn)
|
|
@@ -1807,7 +1851,7 @@ class SampleService:
|
|
|
"""
|
|
"""
|
|
|
params = (
|
|
params = (
|
|
|
data.get('title'), data.get('standard_no'), data.get('issuing_authority'), self._to_date(data.get('release_date')),
|
|
data.get('title'), data.get('standard_no'), data.get('issuing_authority'), self._to_date(data.get('release_date')),
|
|
|
- doc_type_code, prof_field_code, data.get('validity'),
|
|
|
|
|
|
|
+ doc_type_code, prof_field_code, validity_code,
|
|
|
data.get('english_name'), self._to_date(data.get('implementation_date')), data.get('drafting_unit'),
|
|
data.get('english_name'), self._to_date(data.get('implementation_date')), data.get('drafting_unit'),
|
|
|
data.get('approving_department'), data.get('engineering_phase'),
|
|
data.get('approving_department'), data.get('engineering_phase'),
|
|
|
data.get('participating_units'),
|
|
data.get('participating_units'),
|