添加--kangda添加功能接口

This commit is contained in:
haotian 2025-06-04 15:47:58 +08:00
parent eb49b185e4
commit 5947d7e45e
8 changed files with 303 additions and 11 deletions

View File

@ -182,6 +182,15 @@ async def handle_ocr_alert(
return BaseResponse(code=200, msg="success")
return BaseResponse(code=500, msg="fail to update data")
# 获取消息的统计数据
@router.get("/events/stMessages/{day}", )
async def get_messages_st(
day: int,
db: AsyncSession = Depends(get_db),
):
data = await event.get_messages_st(db, day)
return BaseResponse(code=200, msg="success", data=data)
# 查看告警详情
@router.get("/events/alert/{messageId}", response_model=BaseResponse[OcrAlertMessage])

View File

@ -7,6 +7,13 @@ kangda:
deviceId: pc
lang: zh_CN
kangda_front:
account: "rbsstaff1"
password: "123456"
userType: "2"
crc: "0f007401b091"
lang : "zh_CN"
ws:
url: rest.concoai.com/imserver/
account: rbsstaff1
@ -16,6 +23,13 @@ url_login : "http://erpapi.concoai.com/basis-api/user/login"
url_event_list : "http://erpapi.concoai.com/robot/event/page"
url_event_detail: "http://erpapi.concoai.com/robot/event/"
url_login_front : "https://rest.concoai.com/login"
url_groupy: "https://rest.concoai.com/robot/groupByDuty"
url_robot_video_list: "https://rest.concoai.com/robot/videoList"
url_robot_detail : "https://rest.concoai.com/robot/detail/"
url_robot_event_info : "https://rest.concoai.com/event/robotEventInfo"
url_robot_current_duty : "https://rest.concoai.com/robot/currentDuty/"
image_save_path: "imagesDownload"
image_save_path_ocr: "imagesOcr"

View File

@ -397,6 +397,23 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]):
except Exception as e:
print(f"{e}")
async def get_messages_st(
self,
db: AsyncSession,
day: int
):
try:
query_stmt = (
select(
# Message.eventType,
func.count(Message.messageId))
.group_by(Message.eventType)
)
result = await db.execute(query_stmt)
return result.scalars()
except Exception as e:
print(f"{e}")

View File

@ -153,7 +153,73 @@ class Robot(Base):
status = Column(String(5), comment='机器人状态')
createTime = Column(DateTime, default=datetime.now, nullable=False, comment='创建时间')
updateTime = Column(DateTime, default=datetime.now, nullable=False, comment='更新时间')
# class RobotInfo(Base):
# __tablename__ = "robot_info"
# robotInfoId = Column()
# hkStstusName = Column(String(20))
# code = Column(String(5))
# errorType = Column(String(5))
# remoteControl = Column(String(5))
# buttonStop = Column(String(5))
# vertical = Column(String(5))
# versionName = Column(String(50))
# theta = Column(String(20))
# speed = Column(String(5))
# routeName = Column(String(20))
# charingTaskStatus = Column(String(5))
# socketType = Column(String(5))
# horizontal = Column( String(5))
# ststusName = Column(String(20))
# enStstusName = Column(String(20))
# aistatus = Column(String(5))
# pm2_5 = Column(String(20))
# temperature = Column(String(20))
# humidity = Column(String(20))
# power = Column(String(5))
# floor = Column(String(5))
# map = Column(String(20))
# mileage = Column(String(5))
# area = Column(String(5))
# nextTaskTime = Column('nextTaskTime', String)
# address = Column('address', String)
# fromUserId = Column('fromUserId', String)
# ip = Column('ip', String)
# pm10 = Column('pm10', String)
# index = Column('index', String) # 使用引号避免关键字冲突
# message = Column('message', String)
# robotId = Column('robotId', String)
# versionCode = Column('versionCode', String)
# videoStatus = Column('videoStatus', String)
# voltage = Column('voltage', String)
# focal = Column('focal', String)
# ststus = Column('ststus', String)
# positon = Column('positon', String) # 注意原始JSON中的拼写
# robotType = Column('robotType', String)
# clearCharingTaskTime = Column('clearCharingTaskTime', String)
# cmd = Column('cmd', String)
# vehicleid = Column('vehicleid', String)
# device = Column('device', String)
# status = Column('status', String)
class Group(Base):
__tablename__ = "group"
groupingId = Column(String(100), primary_key=True, comment="分组id")
name = Column(String(20), comment="组名")
# 后续可能要单独拆分一张表
tenantInfoId = Column(String(100), comment="租户Id")
# 组和机器人对应表
class GroupRobot(Base):
__tablename__ = "group_robot"
id = Column(BigInteger, primary_key=True, autoincrement=True, comment="id主键")
groupingId = Column(String(100), ForeignKey('group.groupingId', ondelete="CASCADE"),comment='分组ID')
robotId = Column(String(100), ForeignKey("robot.robotId", ondelete="CASCADE"), comment='机器人ID')

View File

@ -3,7 +3,7 @@ from datetime import datetime
from telnetlib import AYT
from tkinter import W
from typing import List, Dict, Any
from sqlalchemy import select
from sqlalchemy import select, update
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import async_session
from app.models.models import Event, Image, Temperature, Message, Robot
@ -88,12 +88,12 @@ class EventSyncService:
"""更新机器人在线状态"""
try:
async with async_session() as session:
update = (
update_stmt = (
update(Robot).where(Robot.robotId == robot.robotId).values(
onlineStatus = robot.onlineStatus
)
)
await session.execute(update)
await session.execute(update_stmt)
await session.commit()
except Exception as e:
print(f"更新机器人在线状态失败: {e}")

View File

@ -126,7 +126,7 @@ class WebSocketClient:
try:
# 接收消息
message = await websocket.recv()
print(f"{datetime.now()}收到消息: {message[:100]}...") # 只打印前100个字符
print(f"{datetime.now()}收到消息: {message}...") # 只打印前100个字符
# 处理消息
await self.process_message(message)

View File

@ -1,5 +1,6 @@
import re
import os
from urllib import response
import yaml
import requests
from app.util.status import TemperatureStatus
@ -149,6 +150,176 @@ class Kangda:
except ValueError as e:
print("解析JSON失败:", e)
def _login_front(self):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
"accept-language": "zh-CN,zh;q=0.9",
"connections": "keep-alive",
"Host": "erpapi.concoai.com",
"accept-encoding": "gzip, deflate",
"upgrade-insecure-requests": "1",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
}
try:
response = requests.post(
url=self.config["url_login_front"],
json=self.config["kangda_front"],
headers=headers
)
# 检查请求是否成功
response.raise_for_status()
result = response.json()
return {
"tenantInfoId": result.get("data").get("tenantInfoId"),
"token": result.get("data").get("token")
}
except requests.exceptions.RequestException as e:
print("前端登录请求出错:", e)
except ValueError as e:
print("前端解析JSON失败:", e)
# 获取机器人班组信息
def _get_robot_current_duty(self, token, robotId):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
"accept-language": "zh-CN,zh;q=0.9",
"connections": "keep-alive",
"Host": "erpapi.concoai.com",
"accept-encoding": "gzip, deflate",
"upgrade-insecure-requests": "1",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Authorization": "Bearer "+token,
}
try:
response = requests.get(
url=self.config["url_robot_current_duty"] + robotId,
headers=headers
)
response.raise_for_status()
response = response.json()
return response.get("data")
except requests.exceptions.RequestException as e:
print("获取机器人班组信息出错:", e)
except ValueError as e:
print("获取机器人班组信息解析JSON失败:", e)
# 获取机器人详情
def _get_robot_detail(self, token, robotId):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
"accept-language": "zh-CN,zh;q=0.9",
"connections": "keep-alive",
"Host": "erpapi.concoai.com",
"accept-encoding": "gzip, deflate",
"upgrade-insecure-requests": "1",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Authorization": "Bearer "+token,
}
try:
response = requests.get(
url=self.config["url_robot_detail"] + robotId,
headers=headers
)
response.raise_for_status()
response = response.json()
return response.get("data")
except requests.exceptions.RequestException as e:
print("获取机器人详情出错:", e)
except ValueError as e:
print("获取机器人详情解析JSON失败:", e)
# 根据groupingId 查看组内机器人videoList
def _get_robot_video_list(self, token, groupingIds):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
"accept-language": "zh-CN,zh;q=0.9",
"connections": "keep-alive",
"Host": "erpapi.concoai.com",
"accept-encoding": "gzip, deflate",
"upgrade-insecure-requests": "1",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Authorization": "Bearer "+token,
}
try:
response = requests.post(
url=self.config["url_robot_video_list"],
json = {
"groupingIds":groupingIds
},
headers=headers
)
response.raise_for_status()
response = response.json()
# 返回video_list
return response.get("data")
except requests.exceptions.RequestException as e:
print("获取video_list出错:", e)
except ValueError as e:
print("获取video_listJSON失败:", e)
# 查看租户名下所有分组
def _get_robot_group(self, tenantInfoId, token):
# 请求头
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
"accept-language": "zh-CN,zh;q=0.9",
"connections": "keep-alive",
"Host": "erpapi.concoai.com",
"accept-encoding": "gzip, deflate",
"upgrade-insecure-requests": "1",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Authorization": "Bearer "+token,
}
try:
response = requests.post(
url=self.config["url_groupy"],
json={
"tenantInfoId": tenantInfoId
},
headers=headers
)
response.raise_for_status()
response = response.json()
# 返回租户名下的任务列表
return response.get("data").get("dutyList")
# print(response)
except requests.exceptions.RequestException as e:
print("查询分组出错:", e)
except ValueError as e:
print("查询分组解析JSON失败:", e)
def _download_image(self, url, save_image=True):
'''
@ -225,6 +396,7 @@ class Kangda:
return TemperatureStatus.NORMAL

View File

@ -6,16 +6,30 @@ from app.util.baiduOcr import BadiduOcr
# #-----------------------测试获取kangda接口事件列表--------------------------------
# kangda = Kangda()
kangda = Kangda()
# print(kangda.get_event_list())
# #-----------------------测试获取kangda接口事件列表end---------------------------
#-------------------------测试百度ocr---------------------------------------------
ocr = BadiduOcr()
result = ocr.image_inference("/home/admin-root/haotian/康达瑞贝斯/imagesKangda/0a7f94b11153fc79ef2dd8b18f9eb8ec.jpeg"
, True, True)
# #-------------------------测试百度ocr---------------------------------------------
# ocr = BadiduOcr()
# result = ocr.image_inference("/home/admin-root/haotian/康达瑞贝斯/imagesKangda/0a7f94b11153fc79ef2dd8b18f9eb8ec.jpeg"
# , True, True)
#-------------------------测试百度ocrend-----------------------------------------
# #-------------------------测试百度ocrend-----------------------------------------
#---------------------------测试康达前端登录-----------------------------------------
d = kangda._login_front()
# duty_list = kangda._get_robot_group(d["tenantInfoId"], d["token"])
# for duty in duty_list:
# video_list = kangda._get_robot_video_list(d["token"], duty["groupingId"])
# print(duty_list)
# robot_detail = kangda._get_robot_detail(d["token"], "6865c4ce61ee45a69e79f62eee55b83c")
current_duty = kangda._get_robot_current_duty(d["token"], "6865c4ce61ee45a69e79f62eee55b83c")
print(current_duty)
#---------------------------测试康达前端登录end--------------------------------------