Files
jdy_fastapi/doc/系统说明书.md
T
panda 5cde7f852a 1.客户信息修改,将硬编码改为动态取值
2.新增项目批量停用、材料批量修改功能
2026-01-08 10:19:16 +08:00

18 KiB
Raw Blame History

简道云 FastAPI 服务系统说明书

1. 系统概述

1.1 系统简介

简道云 FastAPI 服务是一个基于 FastAPI 框架开发的后端服务系统,主要用于处理简道云插件发送的业务请求,与 F6 汽车维修管理系统进行数据交互,实现数据同步、批量处理、信息管理等核心功能。

1.2 系统定位

  • 服务对象: 简道云插件前端
  • 集成系统: F6 汽车维修管理系统、简道云平台
  • 主要功能: 数据同步、批量操作、信息管理、工作流自动化

1.3 系统特点

  • 高性能: 基于 FastAPI 异步框架,支持高并发请求
  • 模块化: 采用模块化设计,易于扩展和维护
  • 可靠性: 完善的异常处理和重试机制
  • 自动化: 支持后台任务自动执行和工作流自动提交
  • 可维护性: 清晰的代码结构和完善的日志记录

2. 系统功能

2.1 F6系统集成功能

2.1.1 登录认证

功能描述: 实现 F6 系统的登录认证,支持用户名密码登录和验证码识别。

主要流程:

  1. 接收用户名、密码、公司名称
  2. 对密码进行 MD5 加密
  3. 发送登录请求到 F6 系统
  4. 如果触发验证码,自动识别并重试
  5. 选择指定公司并完成登录
  6. 返回登录结果和 Cookie 信息

技术实现:

  • 使用 requests 库发送 HTTP 请求
  • 使用 pytesseract 进行验证码 OCR 识别
  • 使用 PIL 进行图像预处理(对比度、亮度调整)

2.1.2 公司信息获取

功能描述: 获取 F6 系统中用户可访问的公司列表,并保存到简道云表单。

主要流程:

  1. 使用用户名密码登录 F6 系统
  2. 获取公司列表(单店或多店)
  3. 将公司信息批量写入简道云表单
  4. 返回时间戳用于后续查询

输出格式:

  • 单店: 返回门店名称
  • 多店: 返回所有公司名称列表

2.1.3 门店信息获取

功能描述: 获取指定公司下的门店列表及统计数据。

主要流程:

  1. 登录 F6 系统并选择公司
  2. 获取门店列表
  3. 统计客户车辆数量和客户数量
  4. 将门店信息批量写入简道云表单
  5. 返回时间戳和统计数据

输出内容:

  • 门店名称列表
  • 客户车辆总数
  • 客户总数

2.1.4 保持连接

功能描述: 心跳检测功能,用于保持连接活跃。

实现: 直接返回接收到的数据,不做任何处理。

2.2 文件处理功能

2.2.1 文件上传和下载

功能描述: 处理简道云插件上传的文件,下载并保存到本地。

主要流程:

  1. 从简道云获取文件 URL
  2. 解析文件名和扩展名
  3. 根据时间戳生成唯一文件名
  4. 下载文件到 下载文件/ 目录
  5. 返回文件保存路径

文件命名规则: 原文件名_时间戳.扩展名

2.2.2 文件校验

功能描述: 校验上传的 Excel 文件格式是否符合要求。

支持的操作类型:

  • create_brand: 校验第一列是否为"品牌"
  • modify_customer_info: 校验第一列是否为"客户手机号"
  • delete_cars: 暂不校验

校验流程:

  1. 读取 Excel 文件第一列
  2. 检查表头是否符合要求
  3. 返回校验结果(成功/失败)

2.3 数据管理功能

2.3.1 品牌批量创建

功能描述: 从 Excel 文件读取品牌名称,批量创建到 F6 系统。

主要流程:

  1. 从简道云获取任务数据(账号、密码、公司名称、文件路径)
  2. 登录 F6 系统
  3. 读取 Excel 文件(第一列为品牌名称)
  4. 在后台线程中批量创建品牌
  5. 立即返回"正在执行"提示
  6. 后台任务完成后更新简道云表单并自动提交工作流

后台任务处理:

  • 遍历 Excel 文件中的每一行
  • 调用 F6 API 创建品牌
  • 记录成功和失败的结果
  • 执行完成后删除上传的文件
  • 更新简道云表单的执行明细
  • 自动提交工作流到下一步

2.3.2 客户信息修改

功能描述: 从 Excel 文件读取客户修改信息,批量修改 F6 系统中的客户信息。

主要流程:

  1. 从简道云获取任务数据
  2. 登录 F6 系统
  3. 读取 Excel 文件(包含客户手机号、修改字段等)
  4. 获取所有客户列表
  5. 获取员工列表(用于匹配专属运营顾问)
  6. 在后台线程中批量修改客户信息
  7. 立即返回"正在执行中"提示

Excel 文件格式:

  • 第一列: 客户手机号(必需,用于匹配)
  • 其他列: 需要修改的字段(客户姓名、客户类型、客户来源、单位名称、专属运营顾问、客户备注等)

匹配逻辑:

  • 根据客户手机号匹配 F6 系统中的客户
  • 获取客户原始信息
  • 合并 Excel 中的修改字段
  • 解析地址信息(省市区)
  • 匹配专属运营顾问的用户ID

2.3.3 客户信息删除

功能描述: 批量删除 F6 系统中的客户信息。

主要流程:

  1. 从简道云获取任务数据
  2. 登录 F6 系统
  3. 获取所有客户列表
  4. 获取会员卡列表(提取客户ID
  5. 在后台线程中批量删除客户
  6. 立即返回"正在执行中"提示

删除规则:

  • 跳过有最近消费时间的客户
  • 跳过有会员卡的客户
  • 8-20点之间每3.5秒删除一条,其余时间每1.5秒删除一条
  • 记录成功和失败次数

2.3.4 车辆信息删除

功能描述: 批量删除 F6 系统中的客户车辆信息。

主要流程:

  1. 从简道云获取任务数据
  2. 登录 F6 系统
  3. 分页获取所有车辆列表
  4. 获取会员卡列表(提取车辆ID
  5. 在后台线程中批量删除车辆
  6. 立即返回"正在执行中"提示

删除规则:

  • 跳过有最近消费时间的客户车辆
  • 跳过有会员卡的车辆
  • 8-20点之间每3秒删除一条,其余时间每1秒删除一条
  • 记录成功和失败次数

2.3.5 历史记录删除

功能描述: 删除指定门店的历史维修记录。

主要流程:

  1. 从简道云获取任务数据(账号、密码、公司名称、门店名称)
  2. 登录 F6 系统
  3. 获取门店列表并匹配门店ID
  4. 在后台线程中删除历史维修记录
  5. 立即返回"正在执行中"提示

删除方式: 调用 F6 系统的删除接口,删除整个门店的历史维修记录。

2.4 BI任务功能

功能描述: 执行 BI 相关的数据处理和报表生成任务。

当前状态: 框架已搭建,具体业务逻辑待实现。

预留接口:

  • 支持从 Excel 文件读取数据
  • 支持 F6 系统登录(如需要)
  • 支持后台线程执行
  • 支持结果回写到简道云

2.5 工作流自动化

功能描述: 自动获取简道云工作流的待处理任务并提交到下一步。

主要流程:

  1. 获取工作流实例信息
  2. 查找状态为待处理(status=0)的任务
  3. 提取任务信息(username、instance_id、task_id
  4. 调用审批接口自动提交
  5. 记录执行结果

应用场景: 后台任务执行完成后,自动将简道云表单提交到工作流下一步,无需人工干预。

3. 技术架构

3.1 系统架构

┌─────────────────┐
│  简道云插件前端  │
└────────┬────────┘
         │ HTTP/JSON
         ▼
┌─────────────────┐
│  FastAPI 服务   │
│  ┌───────────┐  │
│  │  路由层   │  │
│  └─────┬─────┘  │
│        │        │
│  ┌─────▼─────┐  │
│  │  业务模块  │  │
│  │  - F6Module│  │
│  │  - Plugin  │  │
│  └─────┬─────┘  │
│        │        │
│  ┌─────▼─────┐  │
│  │  任务队列  │  │
│  └─────┬─────┘  │
│        │        │
│  ┌─────▼─────┐  │
│  │ 后台任务   │  │
│  └───────────┘  │
└────────┬────────┘
         │
    ┌────┴────┐
    ▼         ▼
┌────────┐ ┌────────┐
│ F6系统  │ │ 简道云 │
└────────┘ └────────┘

3.2 核心组件

3.2.1 应用入口 (main.py)

职责:

  • 应用初始化和生命周期管理
  • 模块注册和路由配置
  • 异常处理器配置
  • 中间件配置(CORS

关键功能:

  • lifespan: 管理应用启动和关闭
  • 全局异常处理
  • 模块实例化并注册到注册表

3.2.2 路由层 (app/api/routes.py)

职责:

  • 定义 API 端点
  • 请求验证和参数解析
  • 调用业务模块处理请求
  • 返回响应

主要端点:

  • GET /health: 健康检查
  • POST /webhook: 业务请求处理

3.2.3 业务模块层

F6Module (app/module/module.py):

  • F6 系统登录和认证
  • 公司信息获取
  • 门店信息获取
  • 保持连接

F6PluginModule (app/module/f6_plugin_module.py):

  • 文件上传和校验
  • 品牌批量创建
  • 客户信息管理(修改、删除)
  • 车辆信息删除
  • 历史记录删除
  • BI任务

OtherPluginModule (app/module/other_module.py):

  • 其他插件功能(如短信签名状态)

3.2.4 任务处理层

任务队列 (app/utils/app_tools.py):

  • 使用 Queue 实现任务队列
  • 后台线程处理任务
  • 支持同步等待结果

后台任务 (app/tasks/):

  • common.py: 通用任务函数(更新简道云、工作流审批等)
  • brand_tasks.py: 品牌相关任务
  • customer_tasks.py: 客户相关任务
  • delete_tasks.py: 删除相关任务
  • bi_tasks.py: BI相关任务

3.2.5 核心工具层

模块注册表 (app/core/module_registry.py):

  • 统一管理所有业务操作
  • 支持操作查询和路由
  • 存储操作元数据(描述、模块名等)

应用工具 (app/utils/app_tools.py):

  • 日志记录器配置(支持轮转)
  • 任务队列管理
  • 请求头解码工具
  • 后台调度器

简道云API封装 (app/api/__init__.py):

  • 封装简道云所有API接口
  • 支持失败重试机制
  • 字段ID到标签名的替换
  • 批量操作支持

3.3 数据流

3.3.1 同步任务流程

简道云插件 → FastAPI路由 → 业务模块 → 任务队列 → 处理线程 → 返回结果 → 简道云插件

3.3.2 后台任务流程

简道云插件 → FastAPI路由 → 业务模块 → 启动后台线程 → 立即返回
                                              ↓
                                        后台任务执行
                                              ↓
                                        更新简道云表单
                                              ↓
                                        自动提交工作流

3.4 技术选型

技术 版本 用途
FastAPI 0.121.0 Web框架
Uvicorn 0.38.0 ASGI服务器
Pydantic - 数据验证
Requests 2.32.5 HTTP请求
Pandas 2.3.3 Excel处理
APScheduler 3.11.1 任务调度
Pillow 12.0.0 图像处理
Pytesseract 0.3.13 OCR识别

4. 部署运维

4.1 环境要求

  • 操作系统: Windows/Linux/macOS
  • Python版本: 3.8+
  • 内存: 建议 2GB+
  • 磁盘: 根据文件存储需求,建议 10GB+

4.2 安装步骤

  1. 克隆代码:

    git clone <repository_url>
    cd fastapi_app
    
  2. 安装依赖:

    pip install -r requirements.txt
    
  3. 配置环境:

    • 编辑 app/config.py,配置 API Token
    • 确保目录权限正确(logs、下载文件、模板文件)
  4. 启动服务:

    python main.py
    # 或
    uvicorn main:app --host 0.0.0.0 --port 5003
    

4.3 生产环境部署

4.3.1 使用 Gunicorn + Uvicorn Workers

pip install gunicorn
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:5003

4.3.2 使用 systemd 管理服务(Linux

创建服务文件 /etc/systemd/system/fastapi-app.service:

[Unit]
Description=简道云 FastAPI 服务
After=network.target

[Service]
Type=simple
User=your_user
WorkingDirectory=/path/to/fastapi_app
Environment="PATH=/path/to/venv/bin"
ExecStart=/path/to/venv/bin/uvicorn main:app --host 0.0.0.0 --port 5003
Restart=always

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl enable fastapi-app
sudo systemctl start fastapi-app

4.3.3 使用 Nginx 反向代理

Nginx 配置示例:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://127.0.0.1:5003;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4.4 监控和日志

4.4.1 日志管理

  • 日志位置: logs/简道云.log
  • 日志轮转: 单文件最大 5MB,保留 5 个备份
  • 日志级别: INFO
  • 日志格式: 时间戳 级别:模块名:消息

4.4.2 健康检查

定期访问 /health 端点检查服务状态:

curl http://localhost:5003/health

4.4.3 性能监控

建议使用以下工具监控服务性能:

  • APM工具: New Relic、Datadog 等
  • 日志分析: ELK Stack、Loki 等
  • 指标监控: Prometheus + Grafana

4.5 备份和恢复

4.5.1 数据备份

需要备份的内容:

  • 配置文件 (app/config.py)
  • 日志文件 (logs/)
  • 下载的文件 (下载文件/)
  • 模板文件 (模板文件/)

4.5.2 恢复步骤

  1. 恢复代码和配置文件
  2. 恢复数据文件
  3. 重新安装依赖
  4. 重启服务

5. 安全说明

5.1 认证和授权

  • API Token: 使用简道云 API Token 进行认证
  • F6系统: 使用用户名密码登录,密码进行 MD5 加密

5.2 数据安全

  • 敏感信息: API Token 建议使用环境变量管理
  • 密码处理: 密码在传输前进行 MD5 加密
  • 文件存储: 上传的文件在处理完成后自动删除

5.3 网络安全

  • CORS配置: 生产环境建议限制允许的来源
  • HTTPS: 建议使用 HTTPS 加密传输
  • 防火墙: 限制服务端口访问

5.4 安全建议

  1. 定期更新依赖包,修复安全漏洞
  2. 使用强密码策略
  3. 定期审查日志,发现异常访问
  4. 限制文件上传大小和类型
  5. 实施请求频率限制

6. 故障排查

6.1 常见问题

问题1: 服务启动失败

可能原因:

  • 端口被占用
  • 依赖包未安装
  • 配置文件错误

解决方法:

  • 检查端口占用: netstat -ano | findstr 5003
  • 重新安装依赖: pip install -r requirements.txt
  • 检查配置文件格式

问题2: 登录失败

可能原因:

  • 用户名密码错误
  • 公司名称不正确
  • 验证码识别失败
  • F6系统服务异常

解决方法:

  • 验证用户名密码和公司名称
  • 检查 Tesseract OCR 是否正确安装
  • 查看日志获取详细错误信息

问题3: 文件上传失败

可能原因:

  • 文件格式不正确
  • 文件路径不存在
  • 磁盘空间不足
  • 网络连接问题

解决方法:

  • 检查文件格式是否符合要求
  • 确保目录存在且有写权限
  • 检查磁盘空间
  • 查看网络连接状态

问题4: 后台任务未执行

可能原因:

  • 线程启动失败
  • 任务执行异常
  • 简道云API调用失败

解决方法:

  • 查看日志中的错误信息
  • 检查简道云API Token是否有效
  • 验证任务数据格式是否正确

6.2 日志分析

查看日志文件:

tail -f logs/简道云.log

搜索错误:

grep -i error logs/简道云.log

6.3 性能优化

  1. 并发处理: 调整 Uvicorn workers 数量
  2. 数据库连接池: 如使用数据库,配置连接池
  3. 缓存: 对频繁访问的数据使用缓存
  4. 异步处理: 更多使用异步函数提高性能

7. 扩展开发

7.1 添加新功能模块

  1. app/module/ 下创建新模块文件
  2. 实现业务逻辑方法
  3. main.py 中注册模块和操作
  4. app/schemas.py 中添加数据模型(如需要)

7.2 添加新的API端点

  1. app/api/routes.py 中添加路由
  2. 使用依赖注入获取所需服务
  3. 实现业务逻辑
  4. 返回响应

7.3 添加新的后台任务

  1. app/tasks/ 下创建任务文件
  2. 实现后台任务函数
  3. 在业务模块中调用,启动线程
  4. 使用 update_jiandaoyun 更新结果
  5. 使用 approve_workflow 自动提交工作流

8. 附录

8.1 API接口清单

端点 方法 描述
/health GET 健康检查
/webhook POST 业务请求处理

8.2 操作类型清单

操作名 模块 类型
login_in F6Module 同步
get_company_information F6Module 同步
get_store_information F6Module 同步
keep_alive F6Module 同步
check_file F6PluginModule 同步
create_brand F6PluginModule 后台
delete_history F6PluginModule 后台
delete_customer F6PluginModule 后台
delete_cars F6PluginModule 后台
modify_customer_info F6PluginModule 后台
bi_task F6PluginModule 后台
sms_signature_status OtherPluginModule 同步

8.3 配置文件说明

app/config.py:

  • BASE_DIR: 项目根目录
  • SAVE_DIRECTORY: 下载文件目录
  • MODE_DIRECTORY: 模板文件目录
  • LOGS_DIRECTORY: 日志目录
  • LOG_FILE: 日志文件路径
  • JIANDAOYUN_API_TOKEN: 简道云API Token

8.4 目录结构说明

  • logs/: 日志文件存储
  • 下载文件/: 从简道云下载的文件临时存储
  • 模板文件/: 模板文件存储
  • app/: 应用代码目录
  • app/api/: API相关代码
  • app/core/: 核心功能代码
  • app/module/: 业务模块代码
  • app/tasks/: 后台任务代码
  • app/utils/: 工具类代码

文档版本: 2.0.0
最后更新: 2025年
维护团队: 数据组