feat: 自动提交 - 周一 2025/09/22 11:24:32.93
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
处理飞书多维表格与工单系统的同步
|
||||
"""
|
||||
|
||||
from flask import Blueprint, request, jsonify
|
||||
from flask import Blueprint, request, jsonify, render_template
|
||||
from src.integrations.feishu_client import FeishuClient
|
||||
from src.integrations.workorder_sync import WorkOrderSyncService
|
||||
from src.integrations.config_manager import config_manager
|
||||
@@ -203,6 +203,130 @@ def create_workorder_from_feishu():
|
||||
logger.error(f"创建工单失败: {e}")
|
||||
return jsonify({"success": False, "message": str(e)}), 500
|
||||
|
||||
@feishu_sync_bp.route('/field-mapping/status')
|
||||
def get_field_mapping_status():
|
||||
"""获取字段映射状态"""
|
||||
try:
|
||||
sync_service = get_sync_service()
|
||||
status = sync_service.get_mapping_status()
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"status": status
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"获取字段映射状态失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@feishu_sync_bp.route('/field-mapping/discover', methods=['POST'])
|
||||
def discover_fields():
|
||||
"""发现字段并生成映射建议"""
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
limit = data.get('limit', 5) # 默认分析5条记录
|
||||
|
||||
sync_service = get_sync_service()
|
||||
|
||||
# 获取飞书记录进行分析
|
||||
feishu_client = sync_service.feishu_client
|
||||
records = feishu_client.get_table_records(sync_service.app_token, sync_service.table_id, page_size=limit)
|
||||
|
||||
if records.get("code") != 0:
|
||||
raise Exception(f"获取飞书记录失败: {records.get('msg', '未知错误')}")
|
||||
|
||||
items = records.get("data", {}).get("items", [])
|
||||
if not items:
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "没有找到飞书记录",
|
||||
"discovery_report": {}
|
||||
})
|
||||
|
||||
# 分析第一条记录的字段
|
||||
first_record = items[0]
|
||||
feishu_fields = feishu_client.parse_record_fields(first_record)
|
||||
|
||||
# 生成字段发现报告
|
||||
discovery_report = sync_service.get_field_discovery_report(feishu_fields)
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"discovery_report": discovery_report,
|
||||
"sample_record": feishu_fields
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"字段发现失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@feishu_sync_bp.route('/field-mapping/add', methods=['POST'])
|
||||
def add_field_mapping():
|
||||
"""添加字段映射"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
feishu_field = data.get('feishu_field')
|
||||
local_field = data.get('local_field')
|
||||
aliases = data.get('aliases', [])
|
||||
patterns = data.get('patterns', [])
|
||||
priority = data.get('priority', 3)
|
||||
|
||||
if not feishu_field or not local_field:
|
||||
return jsonify({"error": "缺少必要参数"}), 400
|
||||
|
||||
sync_service = get_sync_service()
|
||||
success = sync_service.add_field_mapping(
|
||||
feishu_field=feishu_field,
|
||||
local_field=local_field,
|
||||
aliases=aliases,
|
||||
patterns=patterns,
|
||||
priority=priority
|
||||
)
|
||||
|
||||
if success:
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": f"字段映射 '{feishu_field}' -> '{local_field}' 添加成功"
|
||||
})
|
||||
else:
|
||||
return jsonify({"error": "添加字段映射失败"}), 500
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"添加字段映射失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@feishu_sync_bp.route('/field-mapping/remove', methods=['POST'])
|
||||
def remove_field_mapping():
|
||||
"""移除字段映射"""
|
||||
try:
|
||||
data = request.get_json()
|
||||
feishu_field = data.get('feishu_field')
|
||||
|
||||
if not feishu_field:
|
||||
return jsonify({"error": "缺少字段名参数"}), 400
|
||||
|
||||
sync_service = get_sync_service()
|
||||
success = sync_service.remove_field_mapping(feishu_field)
|
||||
|
||||
if success:
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": f"字段映射 '{feishu_field}' 移除成功"
|
||||
})
|
||||
else:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"message": f"字段映射 '{feishu_field}' 不存在或移除失败"
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"移除字段映射失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@feishu_sync_bp.route('/field-mapping')
|
||||
def field_mapping_page():
|
||||
"""字段映射管理页面"""
|
||||
return render_template('field_mapping.html')
|
||||
|
||||
@feishu_sync_bp.route('/preview-feishu-data')
|
||||
def preview_feishu_data():
|
||||
"""预览飞书数据"""
|
||||
|
||||
Reference in New Issue
Block a user