简道云V2.0
This commit is contained in:
+96
-1
@@ -1,3 +1,18 @@
|
||||
"""
|
||||
F6 系统模块
|
||||
|
||||
本模块提供 F6 系统相关的功能,包括:
|
||||
- 登录和认证
|
||||
- 验证码识别
|
||||
- 公司信息获取
|
||||
- 门店信息获取
|
||||
- 保持连接
|
||||
|
||||
依赖:
|
||||
- requests: HTTP 请求
|
||||
- PIL: 图像处理
|
||||
- pytesseract: OCR 识别
|
||||
"""
|
||||
import requests
|
||||
import hashlib
|
||||
from urllib.parse import quote
|
||||
@@ -7,15 +22,33 @@ from typing import Optional, Dict, AnyStr
|
||||
from PIL import Image, ImageEnhance
|
||||
import pytesseract
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
# 简道云 API 实例,用于调用简道云 API
|
||||
api_instance = API()
|
||||
|
||||
# 日志记录器
|
||||
logger = logging.getLogger('app')
|
||||
|
||||
|
||||
class F6Module:
|
||||
"""
|
||||
F6 系统模块类
|
||||
|
||||
提供 F6 系统相关的所有功能,包括登录、信息获取等。
|
||||
"""
|
||||
@staticmethod
|
||||
def get_captcha() -> AnyStr:
|
||||
"""
|
||||
获取并识别验证码
|
||||
|
||||
从 F6 系统获取验证码图片,使用 OCR 识别验证码文本。
|
||||
|
||||
Returns:
|
||||
AnyStr: 识别出的验证码文本
|
||||
|
||||
注意:
|
||||
需要系统安装 Tesseract OCR 才能正常工作
|
||||
"""
|
||||
captcha_url = 'https://yunxiu.f6car.cn/kzf6/login/captcha-image'
|
||||
response = requests.get(captcha_url)
|
||||
with open('captcha.png', 'wb') as f:
|
||||
@@ -37,6 +70,23 @@ class F6Module:
|
||||
|
||||
@staticmethod
|
||||
def login_in(username: str, password: str, company_name: str = '默认门店',) -> Optional[requests.Response]:
|
||||
"""
|
||||
F6 系统登录
|
||||
|
||||
使用用户名和密码登录 F6 系统,并选择指定的公司。
|
||||
如果触发验证码,会自动识别并重试登录。
|
||||
|
||||
Args:
|
||||
username: 用户名
|
||||
password: 密码(明文,方法内部会进行 MD5 加密)
|
||||
company_name: 公司名称,默认为'默认门店'
|
||||
|
||||
Returns:
|
||||
Optional[requests.Response]: 登录响应对象,登录失败返回 None
|
||||
|
||||
注意:
|
||||
密码会在方法内部进行 MD5 加密处理
|
||||
"""
|
||||
url = "https://yunxiu.f6car.com/kzf6/login/confirm"
|
||||
session = requests.Session()
|
||||
header = {
|
||||
@@ -82,6 +132,17 @@ class F6Module:
|
||||
return None
|
||||
|
||||
def accept_login_message(self, data: Dict[str, str]) -> Dict[str, str]:
|
||||
"""
|
||||
接受登录消息并处理
|
||||
|
||||
处理简道云插件发送的登录请求,执行登录并返回结果。
|
||||
|
||||
Args:
|
||||
data: 包含用户名、密码、公司名称的字典
|
||||
|
||||
Returns:
|
||||
Dict[str, str]: 登录结果,包含状态信息
|
||||
"""
|
||||
username = data['username']
|
||||
password = data['password']
|
||||
company_name = data['company_name']
|
||||
@@ -110,6 +171,17 @@ class F6Module:
|
||||
return {"status": "登录失败,请检查公司名称"}
|
||||
|
||||
def get_company_information(self, data: Dict[str, str]) -> Dict[str, str]:
|
||||
"""
|
||||
获取公司信息
|
||||
|
||||
根据用户名和密码获取 F6 系统中的公司信息,并将结果保存到简道云。
|
||||
|
||||
Args:
|
||||
data: 包含用户名、密码的字典
|
||||
|
||||
Returns:
|
||||
Dict[str, str]: 包含时间戳的消息,用于后续查询
|
||||
"""
|
||||
username = data['username']
|
||||
password = data['password']
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H-%M-%S")
|
||||
@@ -173,6 +245,18 @@ class F6Module:
|
||||
return res
|
||||
|
||||
def get_store_information(self, data: Dict[str, str]) -> Dict[str, dict[str, str]]:
|
||||
"""
|
||||
获取门店信息
|
||||
|
||||
根据用户名、密码和公司名称获取 F6 系统中的门店信息,
|
||||
包括门店列表、客户车辆数量、客户数量等。
|
||||
|
||||
Args:
|
||||
data: 包含用户名、密码、公司名称的字典
|
||||
|
||||
Returns:
|
||||
Dict[str, dict[str, str]]: 包含时间戳、门店信息、统计数据的结果
|
||||
"""
|
||||
username = data['username']
|
||||
password = data['password']
|
||||
company_name = data['company_name']
|
||||
@@ -221,6 +305,17 @@ class F6Module:
|
||||
|
||||
@staticmethod
|
||||
def get_keep_heart(data: Dict[str, str]) -> Dict[str, str]:
|
||||
"""
|
||||
保持连接
|
||||
|
||||
用于保持连接的心跳检测,直接返回接收到的数据。
|
||||
|
||||
Args:
|
||||
data: 接收到的数据字典
|
||||
|
||||
Returns:
|
||||
Dict[str, str]: 原样返回接收到的数据
|
||||
"""
|
||||
return data
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user