commit
177288317c
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,26 @@
|
|||||||
|
from fastapi import FastAPI
|
||||||
|
from app.api import Server, ShortCircuit
|
||||||
|
from app.api.ShortCircuit import app_start
|
||||||
|
|
||||||
|
|
||||||
|
def register_blueprints(app):
|
||||||
|
'''
|
||||||
|
registration route (module)
|
||||||
|
'''
|
||||||
|
# app.include_router(Server.router, tags=["API接口"])
|
||||||
|
app.include_router(ShortCircuit.router, tags=["电池短路API接口"])
|
||||||
|
|
||||||
|
async def lifespan(app):
|
||||||
|
# 应用启动时执行
|
||||||
|
await app_start()
|
||||||
|
|
||||||
|
# 在应用关闭时执行的代码
|
||||||
|
yield # 等待应用关闭
|
||||||
|
|
||||||
|
def create_app():
|
||||||
|
app = FastAPI(lifespan=lifespan)
|
||||||
|
|
||||||
|
#注册路由
|
||||||
|
register_blueprints(app)
|
||||||
|
|
||||||
|
return app
|
@ -0,0 +1,82 @@
|
|||||||
|
import os
|
||||||
|
import cv2
|
||||||
|
import threading
|
||||||
|
|
||||||
|
outputFrame = None
|
||||||
|
lock = threading.Lock()
|
||||||
|
|
||||||
|
class CvCamera():
|
||||||
|
def __init__(self):
|
||||||
|
# 获取当前相机
|
||||||
|
self.cap = None
|
||||||
|
self.workFlag =False
|
||||||
|
self.record_id =None
|
||||||
|
self.video_path = 'D:/Project/UI/videoFold'
|
||||||
|
self.fourcc = cv2.VideoWriter_fourcc(*'XVID')
|
||||||
|
if not os.path.exists(self.video_path) or not os.path.isdir(self.video_path):
|
||||||
|
os.makedirs(self.video_path)
|
||||||
|
|
||||||
|
|
||||||
|
#打开相机
|
||||||
|
def start(self,record_id=None):
|
||||||
|
try:
|
||||||
|
if self.workFlag == False:
|
||||||
|
self.record_id =record_id
|
||||||
|
self.cap = cv2.VideoCapture(0)
|
||||||
|
self.workFlag = True
|
||||||
|
# 单独线程供相机使用
|
||||||
|
t = threading.Thread(target=self.videoWork)
|
||||||
|
t.start()
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
|
# 释放资源
|
||||||
|
def release(self):
|
||||||
|
global outputFrame
|
||||||
|
try:
|
||||||
|
self.workFlag = False
|
||||||
|
self.record_id = None
|
||||||
|
if (self.cap):
|
||||||
|
outputFrame=None
|
||||||
|
self.cap.release()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# 相机图像分析
|
||||||
|
def videoWork(self):
|
||||||
|
global outputFrame, lock
|
||||||
|
self.cap.set(cv2.CAP_PROP_FPS, 30)
|
||||||
|
out = cv2.VideoWriter(self.video_path + '/' + self.record_id + '.mp4', self.fourcc, 20.0, (640, 480))
|
||||||
|
while (self.workFlag):
|
||||||
|
try:
|
||||||
|
ret, frame = self.cap.read()
|
||||||
|
# cv2.imshow('image',frame)
|
||||||
|
# cv2.waitKey(0)
|
||||||
|
with lock:
|
||||||
|
outputFrame = frame.copy()
|
||||||
|
out.write(frame)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
|
# 输出图像
|
||||||
|
def generate(self):
|
||||||
|
# 抓取对输出帧和锁定变量的全局引用
|
||||||
|
global outputFrame, lock
|
||||||
|
# 循环访问输出流中的帧
|
||||||
|
while True:
|
||||||
|
# 等到锁被获取
|
||||||
|
with lock:
|
||||||
|
# 检查输出帧是否可用,否则跳过
|
||||||
|
# 循环的迭代
|
||||||
|
if outputFrame is None:
|
||||||
|
continue
|
||||||
|
# 以 JPEG 格式对帧进行编码
|
||||||
|
(flag, encodedImage) = cv2.imencode(".jpg", outputFrame)
|
||||||
|
# 确保帧已成功编码
|
||||||
|
if not flag:
|
||||||
|
continue
|
||||||
|
# 以字节格式生成输出帧
|
||||||
|
yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + bytearray(encodedImage) + b'\r\n')
|
@ -0,0 +1,113 @@
|
|||||||
|
import csv
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import pathlib
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from app.conf.Setting import settings
|
||||||
|
# from app.lib.StaticData import ServerStatus
|
||||||
|
|
||||||
|
|
||||||
|
class RecordStatus:
|
||||||
|
"""记录当然实验工作状态"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.file = pathlib.Path(settings.BASE_PATH, settings.TEMP_PATH, "last_experiment.json")
|
||||||
|
|
||||||
|
def load(self):
|
||||||
|
if not self.file.exists():
|
||||||
|
return {}
|
||||||
|
return json.loads(self.file.read_text())
|
||||||
|
|
||||||
|
def update(self, work_time, status):
|
||||||
|
data = {
|
||||||
|
"work_time": work_time,
|
||||||
|
"status": status
|
||||||
|
}
|
||||||
|
self.file.write_text(json.dumps(data))
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
if self.file.exists():
|
||||||
|
self.file.unlink()
|
||||||
|
|
||||||
|
|
||||||
|
class ExperimentData:
|
||||||
|
"""实验数据"""
|
||||||
|
|
||||||
|
current_obj = None
|
||||||
|
id = None
|
||||||
|
|
||||||
|
def __init__(self, _id):
|
||||||
|
self._id = _id
|
||||||
|
self.dir_path = pathlib.Path(os.path.join(settings.BASE_PATH, settings.TEMP_PATH, self._id))
|
||||||
|
self.file_path = self.dir_path.joinpath("experiment_data.csv")
|
||||||
|
self.status_file = self.dir_path.joinpath("last_status.json")
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
if not self.dir_path.exists():
|
||||||
|
print(f"create dir {self.dir_path}")
|
||||||
|
self.dir_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
self.file_path.touch(exist_ok=True)
|
||||||
|
self.status_file.touch(exist_ok=True)
|
||||||
|
ExperimentData.current_obj = self
|
||||||
|
ExperimentData.id = self._id
|
||||||
|
|
||||||
|
def update_status(self, status_data):
|
||||||
|
|
||||||
|
format_value = (f'{status_data["status"]},{status_data["status_text"]},'
|
||||||
|
f'{status_data["s_pressure"]},{status_data["temperature"]},'
|
||||||
|
f'{status_data["test_time"]}\n')
|
||||||
|
|
||||||
|
with open(self.file_path, "a+") as f:
|
||||||
|
f.write(format_value)
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"status": status_data["status"],
|
||||||
|
"status_text": status_data["status_text"],
|
||||||
|
"s_pressure": status_data["s_pressure"],
|
||||||
|
"temperature": status_data["temperature"],
|
||||||
|
"test_time": status_data["test_time"]
|
||||||
|
}
|
||||||
|
|
||||||
|
self.status_file.write_text(json.dumps(data))
|
||||||
|
|
||||||
|
def get_last_status(self):
|
||||||
|
if not self.status_file.exists():
|
||||||
|
return {'status': 0} # 设置的初始值
|
||||||
|
|
||||||
|
raw = self.status_file.read_text()
|
||||||
|
if not raw:
|
||||||
|
return {'status': 0} # 设置的初始值
|
||||||
|
return json.loads(self.status_file.read_text())
|
||||||
|
|
||||||
|
def finish(self):
|
||||||
|
ExperimentData.current_obj = None
|
||||||
|
|
||||||
|
def remove(self):
|
||||||
|
if self.dir_path.exists():
|
||||||
|
print(f"remove dir {self.dir_path}")
|
||||||
|
shutil.rmtree(self.dir_path)
|
||||||
|
|
||||||
|
def judging_status(self, status_obj, work_time):
|
||||||
|
"""根据时间判断状态"""
|
||||||
|
cur_status = status_obj[0][0]
|
||||||
|
for status, time in status_obj:
|
||||||
|
if int(work_time) <= int(time):
|
||||||
|
return cur_status
|
||||||
|
else:
|
||||||
|
cur_status = status
|
||||||
|
|
||||||
|
return cur_status
|
||||||
|
|
||||||
|
def get_raw_data(self):
|
||||||
|
result = []
|
||||||
|
|
||||||
|
if not self.file_path.exists():
|
||||||
|
return result
|
||||||
|
|
||||||
|
with open(self.file_path, "r") as f:
|
||||||
|
reader = csv.reader(f)
|
||||||
|
for row in reader:
|
||||||
|
result.append(row)
|
||||||
|
return result
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,46 @@
|
|||||||
|
import getpass
|
||||||
|
import glob
|
||||||
|
import platform
|
||||||
|
from io import BytesIO
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
import psutil
|
||||||
|
|
||||||
|
system_name = platform.system()
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceNotFound(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def fetch():
|
||||||
|
"""获取U盘中的Excel文件"""
|
||||||
|
if system_name == 'Windows':
|
||||||
|
usbs = [disk.device for disk in psutil.disk_partitions() if disk.opts == 'rw,removable']
|
||||||
|
if not usbs:
|
||||||
|
raise DeviceNotFound()
|
||||||
|
usb = usbs[0]
|
||||||
|
files = glob.glob(f'{usb}/*.xlsx') + glob.glob(f'{usb}/*.xls')
|
||||||
|
return [{"name": path.basename(f), "file": f} for f in files]
|
||||||
|
|
||||||
|
usbs = [item for item in psutil.disk_partitions() if item.mountpoint.startswith(f'/media/{getpass.getuser()}')]
|
||||||
|
if not usbs:
|
||||||
|
raise DeviceNotFound()
|
||||||
|
usb = usbs[0]
|
||||||
|
files = glob.glob(f'{usb.mountpoint}/*.xlsx') + glob.glob(f'{usb.mountpoint}/*.xls')
|
||||||
|
return [{"name": path.basename(f), "file": f} for f in files]
|
||||||
|
|
||||||
|
|
||||||
|
def put_in(filename: str, bin: BytesIO):
|
||||||
|
if system_name == 'Windows':
|
||||||
|
usbs = [disk.device for disk in psutil.disk_partitions() if disk.opts == 'rw,removable']
|
||||||
|
if not usbs:
|
||||||
|
raise DeviceNotFound()
|
||||||
|
path_file = path.join(usbs[0], filename)
|
||||||
|
else:
|
||||||
|
usbs = [item for item in psutil.disk_partitions() if item.mountpoint.startswith(f'/media/{getpass.getuser()}')]
|
||||||
|
if not usbs:
|
||||||
|
raise DeviceNotFound()
|
||||||
|
path_file = path.join(usbs[0].mountpoint, filename)
|
||||||
|
with open(path_file, 'wb') as f:
|
||||||
|
f.write(bin.getbuffer())
|
@ -0,0 +1,20 @@
|
|||||||
|
from fastapi import WebSocket
|
||||||
|
|
||||||
|
|
||||||
|
class ConnectionManager:
|
||||||
|
def __init__(self):
|
||||||
|
self.active_connections: list[WebSocket] = []
|
||||||
|
|
||||||
|
async def connect(self, websocket: WebSocket):
|
||||||
|
await websocket.accept()
|
||||||
|
self.active_connections.append(websocket)
|
||||||
|
|
||||||
|
def disconnect(self, websocket: WebSocket):
|
||||||
|
self.active_connections.remove(websocket)
|
||||||
|
|
||||||
|
async def send_data(self, message: dict, websocket: WebSocket):
|
||||||
|
await websocket.send_json(message)
|
||||||
|
|
||||||
|
async def broadcast(self, message: str):
|
||||||
|
for connection in self.active_connections:
|
||||||
|
await connection.send_text(message)
|
@ -0,0 +1,5 @@
|
|||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
__all__ = ["Base"]
|
@ -0,0 +1,382 @@
|
|||||||
|
from app.models.Repository import OrmBase
|
||||||
|
from app.models.DateEntity import EntityUser, EntityRole, DeviceConfig, ExperimentSpecimen, ExperimentInfo, \
|
||||||
|
ExperimentReport, Channel
|
||||||
|
from app.lib.Utils import *
|
||||||
|
from sqlalchemy import and_, or_, desc, text
|
||||||
|
|
||||||
|
|
||||||
|
# 分页参数模型
|
||||||
|
class PageParam(object):
|
||||||
|
def __init__(self, curPage, pageRows, totalRecords=None, orderType=None, orderField=None):
|
||||||
|
self.orderType = orderType # 排序类型 asc=正序 desc=倒序
|
||||||
|
self.orderField = orderField # 排序字段
|
||||||
|
self.pageRows = pageRows # 单页行数
|
||||||
|
self.curPage = curPage # 当前页码
|
||||||
|
self.totalRecords = totalRecords # 总页数
|
||||||
|
|
||||||
|
|
||||||
|
# 用户逻辑类
|
||||||
|
class BllUser(OrmBase):
|
||||||
|
|
||||||
|
def __init__(self, entityType=EntityUser):
|
||||||
|
super().__init__(entityType)
|
||||||
|
|
||||||
|
# 用户登录
|
||||||
|
def login(self, username, password):
|
||||||
|
return self.findEntity(and_(EntityUser.user_name == username, EntityUser.user_pwd == Utils.MD5(password), EntityUser.is_enabled == 0))
|
||||||
|
|
||||||
|
def facelogin(self, id):
|
||||||
|
return self.findEntity(EntityUser.user_id == id)
|
||||||
|
|
||||||
|
# 获取用户列表
|
||||||
|
def getUserList(self):
|
||||||
|
return self.findList(EntityUser.is_enabled == 0)
|
||||||
|
|
||||||
|
# 获取用户详情信息
|
||||||
|
def getUserInfo(self, userId):
|
||||||
|
return self.findEntity(userId)
|
||||||
|
|
||||||
|
# 设备配置类
|
||||||
|
class BllDeviceConfig(OrmBase):
|
||||||
|
|
||||||
|
def __init__(self, entityType=DeviceConfig):
|
||||||
|
super().__init__(entityType)
|
||||||
|
|
||||||
|
# 获取设置详情信息
|
||||||
|
def getInfo(self):
|
||||||
|
return self.findEntity()
|
||||||
|
|
||||||
|
|
||||||
|
# 实验信息类
|
||||||
|
class BllExperimentInfo(OrmBase):
|
||||||
|
|
||||||
|
def __init__(self, entityType=ExperimentInfo):
|
||||||
|
super().__init__(entityType)
|
||||||
|
|
||||||
|
# 获取试验列表
|
||||||
|
def getExperimentList(self, search_word):
|
||||||
|
orm_query = self.findList(ExperimentInfo.is_enabled == 0)
|
||||||
|
if search_word.name:
|
||||||
|
orm_query = orm_query.filter(ExperimentInfo.specimen_name.like(f"%{search_word.name}%"))
|
||||||
|
if search_word.date:
|
||||||
|
orm_query = orm_query.filter(ExperimentInfo.created_time.contains(search_word.date))
|
||||||
|
if search_word.experiment_id:
|
||||||
|
orm_query = orm_query.filter(ExperimentInfo.id == search_word.experiment_id)
|
||||||
|
# if search_word.state:
|
||||||
|
# orm_query = orm_query.filter(ExperimentInfo.state == search_word.state)
|
||||||
|
return orm_query.order_by(desc(ExperimentInfo.created_time))
|
||||||
|
|
||||||
|
# 实验报表类
|
||||||
|
class BllExperimentReport(OrmBase):
|
||||||
|
|
||||||
|
def __init__(self, entityType=ExperimentReport):
|
||||||
|
super().__init__(entityType)
|
||||||
|
|
||||||
|
|
||||||
|
# 通道类
|
||||||
|
class BllChannel(OrmBase):
|
||||||
|
|
||||||
|
def __init__(self, entityType=Channel):
|
||||||
|
super().__init__(entityType)
|
||||||
|
|
||||||
|
|
||||||
|
# 材料类
|
||||||
|
class BllExperimentSpecimen(OrmBase):
|
||||||
|
|
||||||
|
def __init__(self, entityType=ExperimentSpecimen):
|
||||||
|
super().__init__(entityType)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 角色逻辑类
|
||||||
|
class BllRole(OrmBase):
|
||||||
|
|
||||||
|
def __init__(self, entityType=EntityRole):
|
||||||
|
super().__init__(entityType)
|
||||||
|
|
||||||
|
# 获取角色列表
|
||||||
|
|
||||||
|
def getRoleList(self):
|
||||||
|
return self.findList(EntityRole.is_enabled == 0).all()
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class BllSpecimen(OrmBase):
|
||||||
|
# def __init__(self, entityType=EntitySpecimen):
|
||||||
|
# super().__init__(entityType)
|
||||||
|
#
|
||||||
|
# def insertSpecimen(self, **kwargs):
|
||||||
|
# entity = EntitySpecimen()
|
||||||
|
# entity.specimen_id = kwargs["specimen_id"]
|
||||||
|
# entity.user_id = kwargs["user_id"]
|
||||||
|
# entity.user_name = kwargs["user_name"]
|
||||||
|
#
|
||||||
|
# entity.specimen_name = kwargs["specimen_name"]
|
||||||
|
# entity.specimen_code = kwargs["specimen_code"]
|
||||||
|
# entity.specimen_type = kwargs["specimen_type"]
|
||||||
|
# entity.specimen_origin = kwargs["specimen_origin"]
|
||||||
|
# entity.specimen_desc = kwargs["specimen_desc"]
|
||||||
|
# entity.storage_location = kwargs["storage_location"]
|
||||||
|
#
|
||||||
|
# entity.remark = kwargs["remark"]
|
||||||
|
# entity.rfid = kwargs["rfid"]
|
||||||
|
# entity.created_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
#
|
||||||
|
# entity.is_enabled = 0
|
||||||
|
# self.insert(entity)
|
||||||
|
#
|
||||||
|
# def updateSpecimen(self, **kwargs):
|
||||||
|
# entity = self.findEntity(EntitySpecimen.specimen_id == kwargs["specimen_id"])
|
||||||
|
# if "rfid" in kwargs:
|
||||||
|
# entity.rfid = kwargs.get("rfid")
|
||||||
|
# entity.rfid_state = 1 if kwargs.get("rfid") else 2
|
||||||
|
# if "inventory_status" in kwargs:
|
||||||
|
# entity.inventory_status = kwargs.get("inventory_status")
|
||||||
|
# if "disinfection_state" in kwargs:
|
||||||
|
# entity.disinfection_state = kwargs.get("disinfection_state")
|
||||||
|
#
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# self.update(entity)
|
||||||
|
# return entity
|
||||||
|
#
|
||||||
|
# def get_specimen_list(self, search_word):
|
||||||
|
# orm_query = self.findList(EntitySpecimen.is_enabled == 0)
|
||||||
|
# if search_word.specimen_name:
|
||||||
|
# orm_query = orm_query.filter(EntitySpecimen.specimen_name.like(f"%{search_word.specimen_name}%"))
|
||||||
|
# if hasattr(search_word, 'specimen_id') and search_word.specimen_id:
|
||||||
|
# orm_query = orm_query.filter(EntitySpecimen.specimen_id == search_word.specimen_id)
|
||||||
|
# if hasattr(search_word, 'record_id') and search_word.record_id:
|
||||||
|
# orm_query = orm_query.filter(EntitySpecimen.specimen_id == search_word.record_id)
|
||||||
|
# if hasattr(search_word, 'date') and search_word.date:
|
||||||
|
# orm_query = orm_query.filter(EntitySpecimen.created_time.contains(search_word.date))
|
||||||
|
# return orm_query.order_by(desc(EntitySpecimen.update_time))
|
||||||
|
#
|
||||||
|
# def delSpecimen(self, specimen_id):
|
||||||
|
# entity = self.findEntity(EntitySpecimen.specimen_id == specimen_id)
|
||||||
|
# entity.is_enabled = 1
|
||||||
|
# self.update(entity)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class BllWaitDisinfSpecimen(OrmBase):
|
||||||
|
# def __init__(self, entityType=EntityWaitDisinfSpecimen):
|
||||||
|
# super().__init__(entityType)
|
||||||
|
#
|
||||||
|
# def insert_wait_disinf_specimen(self, **kwargs):
|
||||||
|
# entity = EntityWaitDisinfSpecimen()
|
||||||
|
# entity.user_id = kwargs["user_id"]
|
||||||
|
# entity.user_name = kwargs["user_name"]
|
||||||
|
# entity.record_id = kwargs["record_id"]
|
||||||
|
# entity.specimen_id = kwargs["specimen_id"]
|
||||||
|
# entity.specimen_name = kwargs["specimen_name"]
|
||||||
|
# entity.specimen_code = kwargs["specimen_code"]
|
||||||
|
# entity.specimen_desc = kwargs["specimen_desc"]
|
||||||
|
# entity.specimen_origin = kwargs["specimen_origin"]
|
||||||
|
# entity.specimen_type = kwargs["specimen_type"]
|
||||||
|
# entity.storage_location = kwargs["storage_location"]
|
||||||
|
# entity.remark = kwargs["remark"]
|
||||||
|
# entity.rfid = kwargs["rfid"]
|
||||||
|
# entity.disinf_type = kwargs["disinf_type"]
|
||||||
|
# entity.created_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# entity.is_enabled = 0
|
||||||
|
# self.insert(entity)
|
||||||
|
#
|
||||||
|
# def get_wait_disinf_specimen_list(self, search_word):
|
||||||
|
# orm_query = self.findList(and_(EntityWaitDisinfSpecimen.is_enabled == 0,
|
||||||
|
# EntityWaitDisinfSpecimen.done == 0))
|
||||||
|
# if hasattr(search_word, 'user_id') and search_word.user_id:
|
||||||
|
# orm_query = orm_query.filter(EntityWaitDisinfSpecimen.user_id == search_word.user_id)
|
||||||
|
# return orm_query.order_by(desc(EntityWaitDisinfSpecimen.update_time))
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class BllExperimentConfig(OrmBase):
|
||||||
|
#
|
||||||
|
# def __init__(self, entityType=EntityExperimentConfig):
|
||||||
|
# super().__init__(entityType)
|
||||||
|
#
|
||||||
|
# def insertConfig(self, **kwargs):
|
||||||
|
# entity = EntityExperimentConfig()
|
||||||
|
# entity.config_id = kwargs["config_id"]
|
||||||
|
# entity.user_id = kwargs["user_id"]
|
||||||
|
# entity.user_name = kwargs["user_name"]
|
||||||
|
#
|
||||||
|
# entity.ozone_disinf = kwargs["ozone_disinf"]
|
||||||
|
# entity.uv_disinf = kwargs["uv_disinf"]
|
||||||
|
# entity.ozone_conc = kwargs["ozone_conc"]
|
||||||
|
# entity.disinf_time = kwargs["disinf_time"]
|
||||||
|
# entity.temperature = kwargs["temperature"]
|
||||||
|
# entity.humidity = kwargs["humidity"]
|
||||||
|
#
|
||||||
|
# entity.config_name = kwargs["config_name"]
|
||||||
|
# entity.config_desc = kwargs["config_desc"]
|
||||||
|
#
|
||||||
|
# entity.created_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# self.insert(entity)
|
||||||
|
#
|
||||||
|
# def get_config_list(self, search_word):
|
||||||
|
# orm_query = self.findList(EntityExperimentConfig.is_enabled == 0)
|
||||||
|
# if hasattr(search_word, 'user_id') and search_word.user_id:
|
||||||
|
# orm_query = orm_query.filter(EntityExperimentConfig.user_id == search_word.user_id)
|
||||||
|
# return orm_query.order_by(desc(EntityExperimentConfig.update_time))
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class BllExperiment(OrmBase):
|
||||||
|
# def __init__(self, entityType=EntityExperiment):
|
||||||
|
# super().__init__(entityType)
|
||||||
|
#
|
||||||
|
# def insertExperiment(self, **kwargs):
|
||||||
|
# specimen_ids = kwargs["specimens"]
|
||||||
|
# specimens = BllSpecimen().findList(and_(EntitySpecimen.specimen_id.in_(specimen_ids), EntitySpecimen.is_enabled == 0)).all()
|
||||||
|
#
|
||||||
|
# entity = EntityExperiment()
|
||||||
|
# entity.experiment_id = kwargs["experiment_id"]
|
||||||
|
# entity.name = kwargs["name"]
|
||||||
|
# entity.user_id = kwargs["user_id"]
|
||||||
|
# entity.user_name = kwargs["user_name"]
|
||||||
|
#
|
||||||
|
# entity.ozone_disinf = kwargs["ozone_disinf"]
|
||||||
|
# entity.uv_disinf = kwargs["uv_disinf"]
|
||||||
|
# entity.ozone_conc = kwargs["ozone_conc"]
|
||||||
|
# entity.disinf_time = kwargs["disinf_time"]
|
||||||
|
# entity.temperature = kwargs["temperature"]
|
||||||
|
# entity.humidity = kwargs["humidity"]
|
||||||
|
#
|
||||||
|
# entity.created_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# entity.is_enabled = 0
|
||||||
|
#
|
||||||
|
# for specimen in specimens:
|
||||||
|
# from sqlalchemy.orm import object_session
|
||||||
|
# current_session = object_session(specimen)
|
||||||
|
# if current_session is not None:
|
||||||
|
# current_session.expunge(specimen)
|
||||||
|
# entity.specimens.append(specimen)
|
||||||
|
#
|
||||||
|
# self.insert(entity)
|
||||||
|
#
|
||||||
|
# def updateExperiment(self, **kwargs):
|
||||||
|
# entity = self.findEntity(kwargs["experiment_id"])
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
#
|
||||||
|
# self.update(entity)
|
||||||
|
# return entity
|
||||||
|
#
|
||||||
|
# # 获取试验列表
|
||||||
|
# def getExperimentList(self, search_word):
|
||||||
|
# orm_query = self.findList(EntityExperiment.is_enabled == 0)
|
||||||
|
# if search_word.name:
|
||||||
|
# orm_query = orm_query.filter(EntityExperiment.name.like(f"%{search_word.name}%"))
|
||||||
|
# if search_word.date:
|
||||||
|
# orm_query = orm_query.filter(EntityExperiment.created_time.contains(search_word.date))
|
||||||
|
# if search_word.experiment_id:
|
||||||
|
# orm_query = orm_query.filter(EntityExperiment.experiment_id == search_word.experiment_id)
|
||||||
|
# return orm_query.order_by(desc(EntityExperiment.update_time))
|
||||||
|
#
|
||||||
|
# # 删除单次试验
|
||||||
|
# def delExperiment(self, experiment_id):
|
||||||
|
# entity = self.findEntity(EntityExperiment.experiment_id == experiment_id)
|
||||||
|
# entity.is_enabled = 1
|
||||||
|
# self.update(entity)
|
||||||
|
#
|
||||||
|
# # 查询最后一次试验
|
||||||
|
# def getLastExperiment(self):
|
||||||
|
# orm_query = self.findList(EntityExperiment.is_enabled == 0)
|
||||||
|
# return orm_query.order_by(desc(EntityExperiment.created_time)).first()
|
||||||
|
#
|
||||||
|
# # 试验记录逻辑类
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class BllExperimentRecord(OrmBase):
|
||||||
|
#
|
||||||
|
# def __init__(self, entityType=EntityExperimentRecord):
|
||||||
|
# super().__init__(entityType)
|
||||||
|
#
|
||||||
|
# # 新增试验记录信息
|
||||||
|
#
|
||||||
|
# def insertExperimentRecord(self, **kwargs):
|
||||||
|
# entity = EntityExperimentRecord()
|
||||||
|
# entity.record_id = kwargs["record_id"]
|
||||||
|
# entity.experiment_id = kwargs["experiment_id"]
|
||||||
|
# entity.user_id = kwargs["user_id"]
|
||||||
|
# entity.user_name = kwargs["user_name"]
|
||||||
|
#
|
||||||
|
# entity.initial_press = kwargs["initial_press"]
|
||||||
|
# entity.final_press = kwargs["final_press"]
|
||||||
|
# entity.leakage_rate = kwargs["leakage_rate"]
|
||||||
|
# entity.dijici = kwargs["dijici"]
|
||||||
|
#
|
||||||
|
# entity.is_enabled = 0
|
||||||
|
# entity.created_time = kwargs['created_time'] if "created_time" in kwargs else datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# self.insert(entity)
|
||||||
|
#
|
||||||
|
# # 更新试验记录信息
|
||||||
|
# def updateExperimentRecord(self, **kwargs):
|
||||||
|
# entity = self.findEntity(EntityExperimentRecord.record_id == kwargs["record_id"])
|
||||||
|
# if entity:
|
||||||
|
# entity.update_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
# self.update(entity)
|
||||||
|
#
|
||||||
|
# # 获取单条试验记录信息
|
||||||
|
# def getExperimentRecord_by_record_id(self, record_id):
|
||||||
|
# data = self.findEntity(EntityExperimentRecord.record_id == record_id)
|
||||||
|
# return data
|
||||||
|
#
|
||||||
|
# # 获取单条试验记录信息
|
||||||
|
# def getExperimentRecord_by_experiment_id(self, experiment_id):
|
||||||
|
# data = self.findEntity(EntityExperimentRecord.experiment_id == experiment_id)
|
||||||
|
# return data
|
||||||
|
#
|
||||||
|
# # 删除单条记录
|
||||||
|
# def delExperimentRecord(self, record_id):
|
||||||
|
# entity = self.findEntity(EntityExperimentRecord.record_id == record_id)
|
||||||
|
# entity.is_enabled = 1
|
||||||
|
# self.update(entity)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class BllUselog(OrmBase):
|
||||||
|
# def __init__(self, entityType=EntityUseLog):
|
||||||
|
# super().__init__(entityType)
|
||||||
|
#
|
||||||
|
# def insert_log(self, **kwargs):
|
||||||
|
# entity = EntityUseLog()
|
||||||
|
# entity.user_id = kwargs["user_id"]
|
||||||
|
# entity.user_name = kwargs["user_name"]
|
||||||
|
# entity.specimen_id = kwargs["specimen_id"]
|
||||||
|
# entity.specimen_code = kwargs["specimen_code"]
|
||||||
|
# entity.specimen_name = kwargs["specimen_name"]
|
||||||
|
# entity.operation_type = kwargs["operation_type"]
|
||||||
|
# entity.record_id = Utils.get_uuid()
|
||||||
|
# entity.created_time = Utils.get_time()
|
||||||
|
# entity.update_time = Utils.get_time()
|
||||||
|
# self.insert(entity)
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# class BllTerminal(OrmBase):
|
||||||
|
# def __init__(self, entityType=EntityTerminal):
|
||||||
|
# super().__init__(entityType)
|
||||||
|
#
|
||||||
|
# def insert_terminal(self, **kwargs):
|
||||||
|
# entity = EntityTerminal()
|
||||||
|
# entity.name = kwargs["name"]
|
||||||
|
# entity.title = kwargs["title"]
|
||||||
|
# entity.login_count = kwargs["login_count"]
|
||||||
|
# entity.index_of_user = kwargs["index_of_user"]
|
||||||
|
# entity.id = Utils.get_uuid()
|
||||||
|
# entity.created_time = Utils.get_time()
|
||||||
|
# entity.update_time = Utils.get_time()
|
||||||
|
# self.insert(entity)
|
||||||
|
#
|
||||||
|
# def update_terminal(self, **kwargs):
|
||||||
|
# entity = self.findEntity(EntityTerminal.id == kwargs["id"])
|
||||||
|
# entity.name = kwargs["name"]
|
||||||
|
# entity.title = kwargs["title"]
|
||||||
|
# entity.login_count = kwargs["login_count"]
|
||||||
|
# entity.index_of_user = kwargs["index_of_user"]
|
||||||
|
# entity.update_time = Utils.get_time()
|
||||||
|
# self.update(entity)
|
||||||
|
#
|
@ -0,0 +1,216 @@
|
|||||||
|
import traceback
|
||||||
|
import paginate_sqlalchemy
|
||||||
|
from sqlalchemy import create_engine, desc
|
||||||
|
from app.conf.Setting import settings
|
||||||
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
from sqlalchemy.sql import func
|
||||||
|
from sqlalchemy.sql.elements import BinaryExpression, BooleanClauseList
|
||||||
|
from app.lib.Log import logger
|
||||||
|
|
||||||
|
class OrmBase(object):
|
||||||
|
# 初始化数据库连接
|
||||||
|
engine = create_engine(settings.SQLALCHEMY_DATABASE_URI,connect_args={'check_same_thread': False}, pool_size=100)
|
||||||
|
# 创建session工厂
|
||||||
|
DBSession = sessionmaker(bind=engine, autoflush=False, autocommit=False, expire_on_commit=True)
|
||||||
|
# 创建session对象
|
||||||
|
session = DBSession()
|
||||||
|
# 事务标识
|
||||||
|
transFlag = False
|
||||||
|
|
||||||
|
def __init__(self, entityType):
|
||||||
|
super().__init__()
|
||||||
|
# 对象类型
|
||||||
|
self.entityType = entityType
|
||||||
|
|
||||||
|
# 开始事务
|
||||||
|
def beginTrans(self):
|
||||||
|
self.session = self.DBSession()
|
||||||
|
self.transFlag = True
|
||||||
|
|
||||||
|
# 提交事务
|
||||||
|
def commitTrans(self):
|
||||||
|
try:
|
||||||
|
self.transFlag = False
|
||||||
|
self.session.commit()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 新增数据
|
||||||
|
def insert(self, entity):
|
||||||
|
try:
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session = self.DBSession()
|
||||||
|
self.session.add(entity)
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session.commit()
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 新增多行数据
|
||||||
|
def insert_many(self, entity_list):
|
||||||
|
try:
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session = self.DBSession()
|
||||||
|
self.session.bulk_save_objects(entity_list)
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session.commit()
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 更新数据
|
||||||
|
def update(self, entity):
|
||||||
|
try:
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session = self.DBSession()
|
||||||
|
self.session.merge(entity)
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session.commit()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 删除操作
|
||||||
|
def delete(self, where):
|
||||||
|
try:
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session = self.DBSession()
|
||||||
|
self.session.query(self.entityType).filter(where).delete()
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session.commit()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 查询单个实体
|
||||||
|
def findEntity(self, *where):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
if (type(*where) is BinaryExpression or type(*where) is BooleanClauseList):
|
||||||
|
return self.session.query(self.entityType).filter(*where).first()
|
||||||
|
else:
|
||||||
|
return self.session.query(self.entityType).get(where)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
def findLastEntity(self, order_by_field, *where):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
if (type(*where) is BinaryExpression or type(*where) is BooleanClauseList):
|
||||||
|
return self.session.query(self.entityType).filter(*where).order_by(desc(order_by_field)).first()
|
||||||
|
else:
|
||||||
|
return self.session.query(self.entityType).order_by(desc(order_by_field)).get(where)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 查询实体列表
|
||||||
|
def findList(self, *where):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
return self.session.query(self.entityType).filter(*where)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 查询所有实体列表
|
||||||
|
def findAllList(self):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
return self.session.query(self.entityType).all()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 查询分页
|
||||||
|
def queryPage(self, orm_query, pageParam):
|
||||||
|
try:
|
||||||
|
page = paginate_sqlalchemy.SqlalchemyOrmPage(
|
||||||
|
orm_query, page=pageParam.curPage, items_per_page=pageParam.pageRows, db_session=self.DBSession)
|
||||||
|
pageParam.totalRecords = page.item_count
|
||||||
|
return page.items
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
raise e
|
||||||
|
|
||||||
|
# 查询数量
|
||||||
|
def findCount(self, *where):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
return self.session.query(func.count('*')).select_from(self.entityType).filter(*where).scalar()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 查询最大数
|
||||||
|
def findMax(self, prop, *where):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
return self.session.query(func.max(prop)).select_from(self.entityType).filter(*where).scalar()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 执行Sql语句
|
||||||
|
def execute(self, sql, *agrs):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
return self.session.execute(sql, *agrs)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
||||||
|
|
||||||
|
# 执行Sql语句
|
||||||
|
def executeNoParam(self, sql):
|
||||||
|
try:
|
||||||
|
self.session = self.DBSession()
|
||||||
|
self.session.execute(sql)
|
||||||
|
if (not self.transFlag):
|
||||||
|
self.session.commit()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
self.session.rollback()
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
self.session.close()
|
@ -0,0 +1 @@
|
|||||||
|
from .DateEntity import EntityUser,EntityRole
|
@ -0,0 +1,123 @@
|
|||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
#用户注册,编辑
|
||||||
|
class SignUpdateModel(BaseModel):
|
||||||
|
username: str
|
||||||
|
name: str
|
||||||
|
role_id: str
|
||||||
|
password: str
|
||||||
|
sex: int
|
||||||
|
|
||||||
|
#用户登录
|
||||||
|
class SignInModel(BaseModel):
|
||||||
|
username: str
|
||||||
|
password: str
|
||||||
|
|
||||||
|
#用户分页列表
|
||||||
|
class UserModel(BaseModel):
|
||||||
|
page_no: int = 1
|
||||||
|
page_size: int = 5
|
||||||
|
|
||||||
|
#下位机发送指令
|
||||||
|
class SendMesModel(BaseModel):
|
||||||
|
name: str
|
||||||
|
status:int = 0
|
||||||
|
|
||||||
|
#新增试验
|
||||||
|
class InsertModel(BaseModel):
|
||||||
|
items: dict
|
||||||
|
|
||||||
|
|
||||||
|
class ContinueModel(BaseModel):
|
||||||
|
id: str
|
||||||
|
step: str
|
||||||
|
|
||||||
|
class UpdateModel(BaseModel):
|
||||||
|
id: str
|
||||||
|
items: dict
|
||||||
|
|
||||||
|
#停止试验
|
||||||
|
class StopModel(BaseModel):
|
||||||
|
id: str
|
||||||
|
test_result: int = 0
|
||||||
|
|
||||||
|
|
||||||
|
class SpecimenSearchModel(BaseModel):
|
||||||
|
page_no: int = 1
|
||||||
|
page_size: int = 5
|
||||||
|
specimen_name: str = None
|
||||||
|
specimen_code: str = None
|
||||||
|
specimen_id: str = None
|
||||||
|
rfid: str = None
|
||||||
|
|
||||||
|
|
||||||
|
class WaitSpecimenSearchModel(BaseModel):
|
||||||
|
page_no: int = 1
|
||||||
|
page_size: int = 5
|
||||||
|
record_id: str = None
|
||||||
|
specimen_name: str = None
|
||||||
|
specimen_code: str = None
|
||||||
|
specimen_id: str = None
|
||||||
|
rfid: str = None
|
||||||
|
|
||||||
|
|
||||||
|
#报表查询
|
||||||
|
class SearchWordModel(BaseModel):
|
||||||
|
page_no: int = 1
|
||||||
|
page_size: int = 5
|
||||||
|
name: str = None
|
||||||
|
experiment_id: str = None
|
||||||
|
record_id: str = None
|
||||||
|
date: str = None
|
||||||
|
|
||||||
|
class CombustionLimitModel(BaseModel):
|
||||||
|
specimen_id: str
|
||||||
|
ct_value: str
|
||||||
|
combustion_type: str
|
||||||
|
|
||||||
|
|
||||||
|
#报表导出
|
||||||
|
class ExportTableModel(BaseModel):
|
||||||
|
specimen_id: str
|
||||||
|
download_type: str
|
||||||
|
|
||||||
|
|
||||||
|
# 获取实验数据
|
||||||
|
class DataModel(BaseModel):
|
||||||
|
id: str
|
||||||
|
|
||||||
|
|
||||||
|
class SpecimenModel(BaseModel):
|
||||||
|
items: dict
|
||||||
|
|
||||||
|
|
||||||
|
class SpecimenConfigModel(BaseModel):
|
||||||
|
items: dict
|
||||||
|
|
||||||
|
|
||||||
|
class InStorageModel(BaseModel):
|
||||||
|
specimen_ids: list
|
||||||
|
storage_type: int
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceConfigModel(BaseModel):
|
||||||
|
light_status: int # 0-关闭 1-开启
|
||||||
|
fan_status: int # 0-关闭 1-开启
|
||||||
|
warning_light_status: int = 0# 0-关闭 1-开启
|
||||||
|
lock_status: int # 0-关闭 1-开启
|
||||||
|
|
||||||
|
|
||||||
|
class ExperimentParamModel(BaseModel):
|
||||||
|
temperature: float # 设置温度
|
||||||
|
expose_time: float # 暴露时间
|
||||||
|
put_time: float # 放置时间
|
||||||
|
short_circuit_param: float = 0.0 # 短路参数
|
||||||
|
specimen_name: str # 样品名称
|
||||||
|
battery_type: str # 电池型号
|
||||||
|
specimen_num: str # 样品编号
|
||||||
|
battery_specification: str # 电池规格
|
||||||
|
battery_manufacturers: str # 电池厂家
|
||||||
|
channel_ids: str # 通道ids 逗号分隔
|
||||||
|
experiment_specimen_id: str = '' # 材料id
|
||||||
|
channel_experiment_dict : dict = {} # 通道实验参数
|
@ -0,0 +1,50 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from app.api.ShortCircuit import app_start
|
||||||
|
from app.conf.Setting import settings
|
||||||
|
import uvicorn
|
||||||
|
from fastapi import Request
|
||||||
|
from app.api import create_app
|
||||||
|
from app.lib.Utils import Utils
|
||||||
|
from fastapi.encoders import jsonable_encoder
|
||||||
|
from fastapi.exceptions import RequestValidationError
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
from app.models import DateEntity
|
||||||
|
from app.models.Repository import OrmBase
|
||||||
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
|
app = create_app()
|
||||||
|
DateEntity.Base.metadata.create_all(bind=OrmBase.engine)#创建表结构
|
||||||
|
|
||||||
|
app.add_middleware(
|
||||||
|
CORSMiddleware,
|
||||||
|
# allow_origins=["*"], # 允许所有源,也可以指定具体源
|
||||||
|
allow_origins=["http://127.0.0.1:8000"], # 前端的源地址
|
||||||
|
allow_credentials=True,
|
||||||
|
allow_methods=["*"], # 允许所有方法
|
||||||
|
allow_headers=["*"], # 允许所有头
|
||||||
|
)
|
||||||
|
|
||||||
|
@app.exception_handler(RequestValidationError)
|
||||||
|
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=200,
|
||||||
|
content=jsonable_encoder(Utils.false_return(desc='参数错误')),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.middleware("http")
|
||||||
|
async def before_request(request, call_next):
|
||||||
|
response = await call_next(request)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
# @app.on_event("startup")
|
||||||
|
# async def startup():
|
||||||
|
# # pass
|
||||||
|
# await app_start()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
uvicorn.run(app="main:app",host=settings.SERVER_HOST,port=settings.SERVER_POST,reload=settings.RELOAD)
|
@ -0,0 +1,32 @@
|
|||||||
|
aiomysql==0.2.0
|
||||||
|
annotated-types==0.6.0
|
||||||
|
anyio==4.3.0
|
||||||
|
click==8.1.7
|
||||||
|
colorama==0.4.6
|
||||||
|
exceptiongroup==1.2.0
|
||||||
|
fastapi==0.110.1
|
||||||
|
greenlet==3.0.3
|
||||||
|
h11==0.14.0
|
||||||
|
idna==3.6
|
||||||
|
logzero==1.7.0
|
||||||
|
modbus-tk==1.1.3
|
||||||
|
paginate==0.5.6
|
||||||
|
paginate-sqlalchemy==0.3.1
|
||||||
|
psutil==5.9.8
|
||||||
|
pydantic==1.9.1
|
||||||
|
pydantic_core==2.16.3
|
||||||
|
PyMySQL==1.1.0
|
||||||
|
pyserial==3.5
|
||||||
|
sniffio==1.3.1
|
||||||
|
SQLAlchemy==2.0.29
|
||||||
|
starlette==0.37.2
|
||||||
|
typing_extensions==4.11.0
|
||||||
|
uvicorn==0.29.0
|
||||||
|
websockets==12.0
|
||||||
|
openpyxl==3.1.2
|
||||||
|
matplotlib==3.7.5
|
||||||
|
scipy==1.10.1
|
||||||
|
opencv-python~=4.10.0.84
|
||||||
|
numpy~=1.24.4
|
||||||
|
pillow~=10.4.0
|
||||||
|
APScheduler~=3.10.4
|
@ -0,0 +1,7 @@
|
|||||||
|
@echo off
|
||||||
|
start /min cmd /k "conda activate py10 && D:&&cd DG16-D\&& python main.py"
|
||||||
|
start "" "C:\Program Files\Google\Chrome\Application\chrome" --start-fullscreen http://127.0.0.1:8088"
|
||||||
|
D:&&cd dist\ && python -m http.server 8088"
|
||||||
|
|
||||||
|
|
||||||
|
exit
|
@ -0,0 +1,4 @@
|
|||||||
|
@echo off
|
||||||
|
::start python D:\DG21-E\main.py
|
||||||
|
start C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome --start-fullscreen http://127.0.0.1
|
||||||
|
exit
|
Binary file not shown.
Loading…
Reference in new issue