|
|
#!/usr/bin/env python
|
|
|
# -*- encoding: utf-8 -*-
|
|
|
'''
|
|
|
@Date:2022/07/18 15:59:52
|
|
|
'''
|
|
|
import json
|
|
|
import datetime
|
|
|
import random
|
|
|
import os
|
|
|
import platform
|
|
|
import hashlib
|
|
|
import uuid
|
|
|
import psutil
|
|
|
import math
|
|
|
from decimal import Decimal
|
|
|
from config.SystemConfig import SystemConfig
|
|
|
|
|
|
# 判断当前系统是linux还是windows
|
|
|
system_name = platform.system()
|
|
|
|
|
|
"""通用工具类"""
|
|
|
|
|
|
|
|
|
class Utils(object):
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
return super().__init__(*args, **kwargs)
|
|
|
|
|
|
# 反转bar_code
|
|
|
def get_bar_code_reverse(bar_code):
|
|
|
if len(bar_code) > 10:
|
|
|
new_code = ''
|
|
|
for i in range(int(len(bar_code) / 2)):
|
|
|
new_code = bar_code[i*2:(i+1)*2] + new_code
|
|
|
else:
|
|
|
new_code = bar_code
|
|
|
return bar_code, new_code
|
|
|
|
|
|
def getDrugUnitCode(num):
|
|
|
return f"{Utils.get_file_name_datetime()[:8]}{(3-len(str(num+1)))* '0' + str(num+1)}"
|
|
|
|
|
|
#MD5加密78
|
|
|
def MD5(str):
|
|
|
# 创建md5对象
|
|
|
hl = hashlib.md5()
|
|
|
hl.update(str.encode(encoding='utf-8'))
|
|
|
return hl.hexdigest()
|
|
|
|
|
|
def get_str_datetime():
|
|
|
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
|
|
def get_file_name_datetime():
|
|
|
return datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
|
|
|
|
|
def sql_paging_assemble(sql_all, page_param):
|
|
|
sql_all += ' limit ' + str((page_param.curPage - 1) * page_param.pageRows) + ',' + str(page_param.pageRows)
|
|
|
return sql_all
|
|
|
|
|
|
def classify(num, all_num, fl=2):
|
|
|
return str(round(float(round(float(num) / all_num, fl)) * 100)) + "%"
|
|
|
# return str(round(float(round(math.ceil(num) / all_num, fl)) * 100)) + "%"
|
|
|
|
|
|
def model_to_dict(cls):
|
|
|
return {c.name: getattr(cls, c.name, None) for c in cls.__table__.columns}
|
|
|
|
|
|
#获取唯一识别码
|
|
|
def UUID():
|
|
|
return str(uuid.uuid1())
|
|
|
|
|
|
#获取当前设置服务器IP地址
|
|
|
def get_server_ip_address():
|
|
|
ip = ''
|
|
|
try:
|
|
|
ip = SystemConfig.getConfig('serverip')
|
|
|
except:
|
|
|
ip = ''
|
|
|
return ip
|
|
|
|
|
|
#将sqlAlchemy Sql执行数据对象列表转换为实体列表
|
|
|
def mysqlTable2Model(dataList):
|
|
|
return [dict(zip(result.keys(), [(x if x is not None else '') for x in result.values()])) for result in dataList]
|
|
|
|
|
|
# 根据自定义字段及数据顺序进行返回
|
|
|
def mysqlfinds_list(data, finds):
|
|
|
return [dict(zip(finds, i)) for i in data]
|
|
|
|
|
|
# sqlalchemy 原生sql转换实体列表
|
|
|
def msyql_table_model(data_list):
|
|
|
return[dict(i._mapping) for i in data_list]
|
|
|
# try:
|
|
|
# return [dict(zip(result.keys(), [(x if x is not None else '') for x in result.values()])) for result in data_list]
|
|
|
# except:
|
|
|
# return [dict(zip(i.keys(), i)) for i in data_list]
|
|
|
|
|
|
# @classmethod
|
|
|
def to_dict(cls):
|
|
|
return {c.name: getattr(cls, c.name, None) for c in cls.__table__.columns}
|
|
|
# if not tp:
|
|
|
# return {c.name: getattr(cls, c.name, None) for c in cls.__table__.columns}
|
|
|
# else:
|
|
|
# # data_list = []
|
|
|
# # for i in cls:
|
|
|
# # data_list.append(
|
|
|
# # {c.name: getattr(i, c.name, None)
|
|
|
# # for c in i.__table__.columns}
|
|
|
# # )
|
|
|
# return [{c.name: getattr(i, c.name, None) for c in i.__table__.columns} for i in cls]
|
|
|
#生成统一格式接口数据
|
|
|
def resultData(status, message, data=""):
|
|
|
return json.dumps({"status": status, "message": message, "data": data}, ensure_ascii=False)
|
|
|
|
|
|
#按时间生成随机文件名
|
|
|
def getFileName():
|
|
|
nowTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S") # 生成当前的时间
|
|
|
randomNum = random.randint(0, 100) # 生成随机数n,其中0<=n<=100
|
|
|
if randomNum <= 10:
|
|
|
randomNum = str(0) + str(randomNum)
|
|
|
uniqueNum = str(nowTime) + str(randomNum)
|
|
|
return uniqueNum
|
|
|
|
|
|
#获取当前插入U盘路径
|
|
|
@staticmethod
|
|
|
def getUDiskPath():
|
|
|
if system_name == 'Windows':
|
|
|
disk_list = psutil.disk_partitions()
|
|
|
# 获取U盘路径
|
|
|
u_path = [
|
|
|
disk.device for disk in disk_list if disk.opts == 'rw,removable']
|
|
|
if u_path:
|
|
|
return u_path[0]
|
|
|
elif system_name == 'Linux':
|
|
|
r = os.popen('ls -a /media/yanyi')
|
|
|
text = r.read()
|
|
|
r.close()
|
|
|
udisklist = text.splitlines()
|
|
|
if(len(udisklist) >= 3):
|
|
|
return '/media/yanyi/' + udisklist[2]
|
|
|
return ""
|
|
|
|
|
|
#创建文件夹
|
|
|
def mkdir(path):
|
|
|
folder = os.path.exists(path)
|
|
|
if not folder:
|
|
|
os.makedirs(path)
|
|
|
|
|
|
# 生成统一格式接口数据
|
|
|
@staticmethod
|
|
|
def resultAlchemyData(data):
|
|
|
return json.dumps(data)
|
|
|
|
|
|
'''
|
|
|
@currentTem:当前温度值
|
|
|
@setTem:设定温度值
|
|
|
'''
|
|
|
def getStableTemValue(cuerrentTem, setTem):
|
|
|
# 差值
|
|
|
diffValue = 0
|
|
|
# 系数
|
|
|
coeValue = 1
|
|
|
diffValue = abs(cuerrentTem - setTem)
|
|
|
|
|
|
if(diffValue > 6):
|
|
|
coeValue = 1
|
|
|
else:
|
|
|
coeValue = 7 - diffValue
|
|
|
|
|
|
if(cuerrentTem > setTem):
|
|
|
return round(setTem + diffValue/coeValue, 1)
|
|
|
else:
|
|
|
return round(setTem - diffValue/coeValue, 1)
|
|
|
|
|
|
# # 获取最近24小时的值
|
|
|
# def get_24_hours(self):
|
|
|
# # 获取当前的小时值
|
|
|
# data_hour_list = []
|
|
|
# curtime_hour = datetime.datetime.now().strftime('%H')
|
|
|
# y = int(curtime_hour)
|
|
|
# for x in range(24):
|
|
|
# data_hour_list.append(str(y) + ':00')
|
|
|
# if y == 0:
|
|
|
# y = 23
|
|
|
# continue
|
|
|
# y -= 1
|
|
|
|
|
|
# return data_hour_list
|
|
|
|
|
|
# def get_all_client_data(self):
|
|
|
# client_obj_list = BllClient().get_all_client_list()
|
|
|
# client_dic_list = []
|
|
|
# for i in client_obj_list:
|
|
|
# client_dic_list.append(
|
|
|
# {
|
|
|
# "client_id": i.client_id,
|
|
|
# "client_name": i.client_name
|
|
|
# }
|
|
|
# )
|
|
|
# return client_dic_list
|
|
|
|
|
|
# # 获取温湿度数据
|
|
|
# def get_temperature_or_humidity(self, params=None):
|
|
|
# client_id = params.get('client_id')
|
|
|
# customer_id = params.get('customer_id')
|
|
|
# tp = params.get('tp')
|
|
|
# # 获取所有客户端名称及id
|
|
|
# client_all_list = self.get_all_client_data()
|
|
|
# # 根据条件获取该客户端的信息
|
|
|
# client_obj = BllClient().get_filter_client(client_id, customer_id)
|
|
|
# temperature_dict = {}
|
|
|
# temperature_count_dict = {}
|
|
|
|
|
|
# now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
|
|
# start_time = (
|
|
|
# parser.parser(datetime.datetime.now().strftime()) + relativedelta.relativedelta(hourse=-23)
|
|
|
# ).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
|
|
# # 获取温湿度的所有对象
|
|
|
# humiture_obj_list = BllHumitureRecord().findList(
|
|
|
# and_(
|
|
|
# EntityHumitureRecord.client_id == client_obj.client_Id,
|
|
|
# EntityHumitureRecord.record_date.between(start_time, now_time)
|
|
|
# )
|
|
|
# ).all()
|
|
|
# for hum_obj in humiture_obj_list:
|
|
|
# # 获取每个对象的record_date的时间值
|
|
|
# hum_hour = hum_obj.record_date.strftime("%H")
|
|
|
# # 判断不在字典中默认赋值为0
|
|
|
# if hum_hour not in temperature_dict:
|
|
|
# temperature_count_dict[hum_hour] = 0
|
|
|
# temperature_dict[hum_hour] = 0
|
|
|
# # 判断获取温度值,获取不到判定为湿度
|
|
|
# if tp:
|
|
|
# temperature_dict[hum_hour] += hum_obj.humidity
|
|
|
# else:
|
|
|
# temperature_dict[hum_hour] += hum_obj.temperature
|
|
|
# # 每次循环+1
|
|
|
# temperature_count_dict[hum_hour] += 1
|
|
|
# # 求平均值
|
|
|
# for ea in temperature_count_dict.keys():
|
|
|
# if ea in temperature_dict:
|
|
|
# temperature_dict[ea] = round(
|
|
|
# temperature_dict[ea] / temperature_count_dict[ea], 2
|
|
|
# )
|
|
|
# hour_list = self.get_24_hours()
|
|
|
# data_temp = []
|
|
|
# # 求当前时间进24小时的温度值和小时值
|
|
|
# for data_hour in hour_list:
|
|
|
# if len(data_hour) == 4:
|
|
|
# data_hour = '0' + data_hour
|
|
|
|
|
|
# if tp == 1:
|
|
|
# data_temp.append(random.randint(55, 68))
|
|
|
# elif tp ==2:
|
|
|
# data_temp.append(0)
|
|
|
# else:
|
|
|
# if str(data_hour[:-3]) in temperature_dict:
|
|
|
# data_temp.append(temperature_dict[data_hour[:-3]])
|
|
|
# else:
|
|
|
# data_temp.append('0.0')
|
|
|
# # 返回字段
|
|
|
# series_list = [{
|
|
|
# "name": client_obj.client_name,
|
|
|
# "type": "line",
|
|
|
# "data": data_temp,
|
|
|
# "markPoint":{
|
|
|
# "data": [
|
|
|
# {"type": "max", "name": "最大值"},
|
|
|
# {"type": "min", "name": "最小值"}
|
|
|
# ]
|
|
|
# },
|
|
|
# "markLine": {
|
|
|
# "data": [
|
|
|
# {"type": "average", "name": "平均值"}
|
|
|
# ]
|
|
|
# }
|
|
|
# }]
|
|
|
# flag_unit_dic = {
|
|
|
# "1": ["最近24小时湿度变化", "%RH"],
|
|
|
# "2": ["最近24小时VOC含量变化", "ppm"],
|
|
|
# }
|
|
|
# flag_unit_dic.get(str(tp), ["最近24小时温度变化", "°C"])
|
|
|
|
|
|
|
|
|
#接口数据返回
|
|
|
def true_return(status=0, msg='请求成功!', data=''):
|
|
|
data = {
|
|
|
"status": status,
|
|
|
"msg": msg,
|
|
|
"data": data
|
|
|
}
|
|
|
return data
|
|
|
|
|
|
def false_return(status=1, msg='请求失败!', data=''):
|
|
|
data = {
|
|
|
"status": status,
|
|
|
"msg": msg,
|
|
|
"data": data
|
|
|
}
|
|
|
return data
|
|
|
|
|
|
def except_return(status=2, msg='', data=''):
|
|
|
data = {
|
|
|
"status": status,
|
|
|
"msg": msg,
|
|
|
"data": data
|
|
|
}
|
|
|
return data
|
|
|
|
|
|
@staticmethod
|
|
|
def reserve_decimal(num, n=2):
|
|
|
"""
|
|
|
保留n位小数
|
|
|
:param num: 浮点数
|
|
|
:param n: 小数位数
|
|
|
:return:
|
|
|
"""
|
|
|
deci = "0." + "0" * n
|
|
|
return Decimal(num).quantize(Decimal(deci))
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
a = Utils.get_file_name_datetime()[:4]
|
|
|
print(a)
|
|
|
|
|
|
#分页参数模型
|
|
|
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
|
|
|
#获取总页数
|
|
|
#def getTotalPagesCount(self):
|
|
|
# if(self.totalRecords > 0):
|
|
|
# return self.totalRecords % self.pageRows if self.totalRecords % self.pageRows == 0 else self.totalRecords % self.pageRows + 1
|
|
|
# else:
|
|
|
# return 1
|
|
|
|
|
|
#药剂操作类型
|
|
|
|
|
|
|
|
|
class DrugRecordType(object):
|
|
|
#入库操作
|
|
|
PutIn = 1
|
|
|
|
|
|
#领用操作
|
|
|
Use = 2
|
|
|
|
|
|
#归还操作
|
|
|
Return = 3
|
|
|
|
|
|
# 登记操作
|
|
|
Register = 4
|
|
|
|
|
|
#药剂状态类型
|
|
|
|
|
|
|
|
|
class DrugStatus(object):
|
|
|
#在库
|
|
|
Normal = 1
|
|
|
|
|
|
#出库
|
|
|
Out = 2
|
|
|
|
|
|
#空瓶
|
|
|
Empty = 3
|
|
|
|
|
|
# 药剂柜状态类
|
|
|
|
|
|
|
|
|
class CabinetStatus(object):
|
|
|
Tem = None # 温度
|
|
|
Hum = None # 湿度
|
|
|
FanOn = None # 风机是否开启
|
|
|
LightOn = None # 照明是否亮
|
|
|
LockIsLock = None # 电锁是否上
|
|
|
DoorIsClose = None # 门是否关上
|
|
|
RunLigthStatus = None # 运行状态是否正常
|
|
|
SignalLightStatus = None # 通信状态是否正常
|
|
|
FilterLifeLightStatus = None # 滤芯寿命是否正常
|
|
|
AbnormalLightStatus = None # 异常灯是否亮
|
|
|
|
|
|
class DooropenUser():
|
|
|
user_id =''
|