You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
3.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from enum import IntEnum
from tortoise import fields, models
from helper.drug import milligram_to_gram, gram_to_milliliter
# from models.drug import Drug
class DrugUseStateEnum(IntEnum):
# 0 = 入库 1 = 归还, 2 = 领用, 3 = 空瓶, 4 = 报废
IN = 0
PUT = 1
TAKE = 2
EMPTY = 3
SCRAP = 4
class DrugUseLog(models.Model):
id = fields.UUIDField(pk=True)
drug = fields.ForeignKeyField('rms.Drug', to_field='id', description='药剂ID')
state = fields.IntEnumField(DrugUseStateEnum, description='0=入库, 1=归还,2=领用,3=空瓶,4=报废')
user_id = fields.UUIDField()
peer_ids = fields.CharField(null=True, max_length=255, description='陪同者IDs')
users = fields.CharField(null=True, max_length=255, description='用户信息描述')
terminal_id = fields.UUIDField(null=True, description='终端ID')
cabinet_id = fields.UUIDField(null=True, description='柜体ID')
drawer_id = fields.UUIDField(null=True, description='抽屉ID')
drawer_board_id = fields.UUIDField(null=True, description='抽屉定位板ID')
hole = fields.SmallIntField(null=True, description='芯片序号')
position = fields.CharField(null=True, max_length=255, description='位置描述')
weight = fields.IntField(null=True, description='重量(mg)')
use_weight = fields.IntField(null=True, description='用量(mg)')
alerted = fields.BooleanField(null=True, default=True, description='是否已报警')
alarm_state = fields.SmallIntField(null=True, default=0, description="异常状态码 0=正常1=称重异常2=超期归还")
alarm_desc = fields.CharField(null=True, max_length=255, description="异常描述信息")
return_log_id = fields.CharField(null=True, max_length=255, description="关联归还字段id")
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)
class Meta:
table = 'drug_use_logs'
table_description = '药剂流转日志表'
@classmethod
async def get_last_put_record(cls, drug_id):
latest_record = await cls.filter(drug_id=drug_id, state=DrugUseStateEnum.PUT).order_by(
"-created_at").first()
return latest_record
@classmethod
async def judge_receive_require_weigh(cls, drug_id, terminal_obj):
"""
判断领用是否需称重 上次归还需称重未称重则本次领用需称重
:return:
"""
return False
def parse_use_weight(self, weight):
"""
用量 > 1000 转换为g 保留一位小数
weight 单位mg根据净含量单位进行转化显示如果没有净含量> 1000 转换为g 保留一位小数否则返回mg
:param weight:
:return:
"""
if not weight:
return '-'
else:
weight = float(weight)
if weight >= 1000:
weight_str = f"{milligram_to_gram(weight)}g"
else:
weight_str = f"{weight}mg"
net_weight = self.drug.fill_json_content.get('net_weight') # 净含量
if net_weight:
# if net_weight.endswith('ml'):
# weight_str = f"{weight}ml"
density = self.drug.attribute("density") # 密度
if density and net_weight.endswith('ml'):
volume = gram_to_milliliter(milligram_to_gram(weight), density)
weight_str = f"{weight_str}({volume}ml)" if volume else f"{weight_str}"
return weight_str