feat: 自动提交 - 周一 2025/09/22 11:24:32.93

This commit is contained in:
赵杰 Jie Zhao (雄狮汽车科技)
2025-09-22 11:24:32 +01:00
parent 059eefd961
commit 16bb98131e
10 changed files with 2399 additions and 31 deletions

View File

@@ -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():
"""预览飞书数据"""