|
|
|
|
# -*- coding:utf-8 -*-
|
|
|
|
|
"""
|
|
|
|
|
@Created on : 2023/7/24 10:25
|
|
|
|
|
@Author: hxl
|
|
|
|
|
@Des:
|
|
|
|
|
"""
|
|
|
|
|
import hashlib
|
|
|
|
|
import os
|
|
|
|
|
import platform
|
|
|
|
|
from collections import namedtuple
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
import psutil
|
|
|
|
|
from pytz import timezone
|
|
|
|
|
|
|
|
|
|
from conf import setting
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ostruct(kv: dict):
|
|
|
|
|
return namedtuple('OpenStruct', ' '.join(kv.keys()))(**kv)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def isBlank(term):
|
|
|
|
|
return not (term and term.strip())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def timezone_now():
|
|
|
|
|
zone = timezone(setting.TIMEZONE)
|
|
|
|
|
return datetime.now(zone)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def rfid_reverse(rfid):
|
|
|
|
|
"""
|
|
|
|
|
读卡器反转
|
|
|
|
|
"""
|
|
|
|
|
if setting.RFID_REVERSE:
|
|
|
|
|
rfid = "".join(reversed([rfid[i:i + 2] for i in range(0, len(rfid), 2)]))
|
|
|
|
|
rfid = rfid.upper()
|
|
|
|
|
return rfid
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def encrypt_md5(text):
|
|
|
|
|
# 创建一个 MD5 对象
|
|
|
|
|
md5 = hashlib.md5()
|
|
|
|
|
|
|
|
|
|
# 更新哈希对象的输入值,需要将字符串编码为字节型再进行更新
|
|
|
|
|
md5.update(text.encode('utf-8'))
|
|
|
|
|
|
|
|
|
|
# 计算并返回哈希值的十六进制表示
|
|
|
|
|
return md5.hexdigest()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 判断当前系统是linux还是windows
|
|
|
|
|
system_name = platform.system()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 获取当前插入U盘路径
|
|
|
|
|
def get_UDisk_path():
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 获取配液按天自增编号
|
|
|
|
|
|
|
|
|
|
def get_seq_no(number):
|
|
|
|
|
"""
|
|
|
|
|
储备液编号 = 打印标签
|
|
|
|
|
格式如:CB230728001
|
|
|
|
|
"""
|
|
|
|
|
# zone = timezone(setting.TIMEZONE) # 时区
|
|
|
|
|
# today = datetime.now(zone).strftime('%y%m%d')
|
|
|
|
|
today = datetime.now().strftime('%y%m%d')
|
|
|
|
|
|
|
|
|
|
return "CB%s%03d" % (today, number)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 获取数字和单位
|
|
|
|
|
def number_and_unit(input_str):
|
|
|
|
|
"""
|
|
|
|
|
获取数量和单位
|
|
|
|
|
支持如下的常见格式:12.23g/ml,12g,12.3ml等
|
|
|
|
|
"""
|
|
|
|
|
pattern = r"(\d+\.?\d+)([a-zA-Z/]+)" # 匹配数字和单位的正则表达式
|
|
|
|
|
match = re.match(pattern, input_str)
|
|
|
|
|
if match:
|
|
|
|
|
weight = match.group(1) # 获取数字部分
|
|
|
|
|
unit = match.group(2) # 获取单位部分
|
|
|
|
|
return weight, unit
|
|
|
|
|
else:
|
|
|
|
|
return None, None
|