|
|
#!/usr/bin/env python
|
|
|
# -*- encoding: utf-8 -*-
|
|
|
'''
|
|
|
@Date:2022/07/18 16:54:45
|
|
|
'''
|
|
|
import sys
|
|
|
import datetime
|
|
|
from dateutil.relativedelta import relativedelta
|
|
|
sys.path.append('.')
|
|
|
from sqlalchemy import distinct, or_, and_, desc, asc
|
|
|
from sqlalchemy.sql import func
|
|
|
from db_logic.db_base import Repository
|
|
|
from models.medicament_models import EntityMedicament, EntityMedicamentRecord, EntityMedicamentTemplate, EntityVariety, EntityMedicamentVariety
|
|
|
from models.client_models import EntityClient
|
|
|
from models.user_models import EntityUser
|
|
|
from db_logic.meidcament_variety import BllMedicamentVariety
|
|
|
from db_logic.variety import BllVariety
|
|
|
from Common.Utils import Utils, DrugStatus, DrugRecordType
|
|
|
|
|
|
client_list=['72e70542-b70d-11e8-aea5-448a5bc6c411','72e70542-b70d-11e8-aea5-448a5bc6c412','72e70542-b70d-11e8-aea5-448a5bc6c413','72e70542-b70d-11e8-aea5-448a5bc6c414','72e70542-b70d-11e8-aea5-448a5bc6c415','72e70542-b70d-11e8-aea5-448a5bc6c416','72e70542-b70d-11e8-aea5-448a5bc6c417']
|
|
|
|
|
|
#药剂流程业务逻辑类
|
|
|
class BllMedicament(Repository):
|
|
|
|
|
|
def __init__(self, entityType=EntityMedicament):
|
|
|
return super().__init__(entityType)
|
|
|
|
|
|
def update(self, entity):
|
|
|
entity.remark30 = '0'
|
|
|
return super().update(entity)
|
|
|
|
|
|
def get_register_list(self, user, page_param):
|
|
|
|
|
|
# sql_all = f"""
|
|
|
# select * from rms_user_apply
|
|
|
# where
|
|
|
# user_id='{user.user_id}' and
|
|
|
# is_solve=1 and
|
|
|
# solve_date > DATE_SUB('{Utils.get_str_datetime()}', INTERVAL 10 hour)
|
|
|
|
|
|
# """
|
|
|
# data = self.execute(sql_all).fetchall()
|
|
|
# data_list = []
|
|
|
# for i in data:
|
|
|
# use_content = json.loads(i.use_content)
|
|
|
# for j_index in range(len(use_content)):
|
|
|
# j = use_content[j_index]
|
|
|
# if not j.get("use_num"):
|
|
|
# # j["stay_use_num"] = j.get("use_num")
|
|
|
# drugobj =BllMedicament().findEntity(and_(EntityMedicament.status==4,EntityMedicament.medicament_id == j.get("medicament_id")))
|
|
|
# print(drugobj,'889898989898989')
|
|
|
# if drugobj:
|
|
|
# data_list.append(j)
|
|
|
# #所有试剂
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sql_all = f"""
|
|
|
select * from rms_medicament where status=4 and by_user_id='{user.user_id}'
|
|
|
"""
|
|
|
try:
|
|
|
total_count = self.execute(f"select count(*) num from rms_medicament where status=4 and by_user_id='{user.user_id}'").fetchone().num
|
|
|
except Exception:
|
|
|
total_count = 0
|
|
|
page_param.totalRecords = total_count
|
|
|
# 调用分页组装sql
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
# 获取可入库层数据
|
|
|
def get_drug_save_db_info(self, drug_name, func_type):
|
|
|
# sql_all = f"""
|
|
|
|
|
|
# select name, IFNULL(num,0) number, c.client_name, c.client_id, cell_code, cell_speci from (
|
|
|
# select cell_code, a.client_id, cell_speci, client_name from (
|
|
|
# select * from rms_client_cell
|
|
|
# ) a LEFT JOIN(
|
|
|
# select client_id, client_name from rms_client
|
|
|
# ) b on a.client_id = b.client_id
|
|
|
# ) c LEFT JOIN(
|
|
|
# select name, client_id, flow_position_code, count(*) num
|
|
|
# from rms_medicament where `name` like '%{drug_name}%' and status=1 and func_type={func_type}
|
|
|
# GROUP BY client_id, flow_position_code
|
|
|
# ) d on c.client_id=d.client_id and c.cell_code=d.flow_position_code
|
|
|
|
|
|
# HAVING number < 40
|
|
|
# """
|
|
|
sql_all = f"""
|
|
|
select c.*, d.client_name
|
|
|
from (
|
|
|
select a.cell_code,a.client_id, a.cell_speci, IFNULL(a.storage_quantity,0) storage_quantity, count(b.name) num, IFNULL(GROUP_CONCAT(b.name),'') name_json
|
|
|
from (select * from rms_client_cell) a
|
|
|
LEFT JOIN (select * from rms_medicament) b on a.client_id=b.client_id and a.cell_speci=b.place
|
|
|
GROUP BY a.id order by a.cell_speci asc
|
|
|
) c LEFT JOIN (select * from rms_client where func_type={func_type}) d on c.client_id=d.client_id
|
|
|
where d.client_name is not null order by d.client_name asc
|
|
|
|
|
|
"""
|
|
|
data = self.execute(sql_all).fetchall()
|
|
|
data_list = []
|
|
|
data_dict = {}
|
|
|
for i in data:
|
|
|
if int(i.num) >= int(i.storage_quantity):
|
|
|
continue
|
|
|
# 处理当前试剂是否与试剂柜内的试剂冲突,当前试剂名称,数据库内当前层的试剂列表
|
|
|
# if drug_name in i.name_json.split(","):
|
|
|
# pass
|
|
|
if i.client_id in data_dict.keys():
|
|
|
data_dict[i.client_id]["client_cell"].append(i.cell_speci)
|
|
|
else:
|
|
|
client_dict = {
|
|
|
"client_id": i.client_id,
|
|
|
"client_name": i.client_name,
|
|
|
"client_cell": [i.cell_speci]
|
|
|
}
|
|
|
data_dict[i.client_id] = client_dict
|
|
|
data_dict[i.client_id]["client_cell"].sort()
|
|
|
# data_dict = {}
|
|
|
# for i in data:
|
|
|
# if i.client_id in data_dict.keys():
|
|
|
# data_dict[i.client_id]["client_cell"].append(i.cell_speci)
|
|
|
# else:
|
|
|
# client_dict = {
|
|
|
# "client_id": i.client_id,
|
|
|
# "client_name": i.client_name,
|
|
|
# "client_cell": [i.cell_speci]
|
|
|
# }
|
|
|
# data_dict[i.client_id] = client_dict
|
|
|
data_list = []
|
|
|
for k,v in data_dict.items():
|
|
|
DrugSetPotionStorageIn = self.getDrugSetPotionStorageIn(drug_name, k)
|
|
|
if DrugSetPotionStorageIn[0]:
|
|
|
v["conflict"] = DrugSetPotionStorageIn[1]
|
|
|
data_list.append(v)
|
|
|
return data_list
|
|
|
|
|
|
# 获取离保质期最近的同类药剂
|
|
|
def getDrugNearExpired(self, varietyId, customerId):
|
|
|
drugList = self.findList(
|
|
|
and_(
|
|
|
EntityMedicament.status == DrugStatus.Normal,
|
|
|
EntityMedicament.variety_id == varietyId
|
|
|
)).order_by(EntityMedicament.expiration_date).limit(1)
|
|
|
return drugList.first()
|
|
|
|
|
|
# 根据条码获取试剂详细信息
|
|
|
def get_bar_code_drug_info(self, bar_code):
|
|
|
return self.execute(f"select * from rms_medicament where bar_code='{bar_code}'").fetchall()
|
|
|
|
|
|
# 获取库存余量
|
|
|
def get_drug_surplus(self, client_id, func_type, page_param):
|
|
|
# 动态添加查询条件
|
|
|
where_base = ""
|
|
|
if client_id:
|
|
|
where_base = f" client_id='{client_id}'"
|
|
|
if func_type:
|
|
|
if where_base:
|
|
|
where_base += " and "
|
|
|
where_base += f" func_type='{func_type}'"
|
|
|
if where_base:
|
|
|
where_base = f" where {where_base} "
|
|
|
sql_all = f"""
|
|
|
select
|
|
|
`name`, english_name, cas_number, speci, net_weight_unit, purity, manufacturer,
|
|
|
sum(CASE WHEN `status`=1 THEN 1 ELSE 0 END) surplus_number
|
|
|
from rms_medicament {where_base} GROUP BY `name`, speci, purity order by put_in_date desc
|
|
|
"""
|
|
|
# 查询页总数
|
|
|
try:
|
|
|
total_count = len(self.execute(sql_all).fetchall())
|
|
|
except Exception:
|
|
|
total_count = 0
|
|
|
# count_sql = f"SELECT count(*) FROM rms_medicament %s GROUP BY `name`, cas_number, purity" % where_base
|
|
|
page_param.totalRecords = total_count
|
|
|
# 调用分页组装sql
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
data_list = self.execute(sql_all).fetchall()
|
|
|
|
|
|
return data_list
|
|
|
|
|
|
# 获取试剂库存消耗
|
|
|
def get_drug_stock_use_classify(self, func_type):
|
|
|
sql_all = f"""
|
|
|
select count(medicament_id) count_number, `status` from rms_medicament where func_type='{func_type}' GROUP BY `status` order by put_in_date desc
|
|
|
"""
|
|
|
# 查看分组数据
|
|
|
data = self.execute(sql_all).fetchall()
|
|
|
# 计算总数
|
|
|
data_number = sum([i[0] for i in data])
|
|
|
data_li = Utils.msyql_table_model(data)
|
|
|
data_list = []
|
|
|
# 计算百分比,组装数据
|
|
|
type_num = []
|
|
|
for i in data_li:
|
|
|
new_dict = {
|
|
|
# "ratio": str(round(i["count_number"] / data_number,2) * 100) + "%"
|
|
|
"ratio": Utils.classify(i['count_number'], data_number)
|
|
|
}
|
|
|
new_dict.update(i)
|
|
|
type_num.append(str(i["status"]))
|
|
|
data_list.append(new_dict)
|
|
|
set_num_li = list(set(["1", "2", "3"]).difference(set(type_num)))
|
|
|
for i in set_num_li:
|
|
|
data_list.append(
|
|
|
{
|
|
|
"status": int(i),
|
|
|
"rotio": "0%",
|
|
|
"count_number": "0"
|
|
|
}
|
|
|
)
|
|
|
return data_list, data_number
|
|
|
|
|
|
|
|
|
|
|
|
#获取药剂列表
|
|
|
def getDrugList(self, customerId, keyWord, pageParam):
|
|
|
keyWord = '%' + keyWord + '%'
|
|
|
orm_query = self.findList().filter(
|
|
|
EntityMedicament.customer_id == customerId
|
|
|
).filter(
|
|
|
# or_(EntityMedicament.RFID.like(keyWord), EntityMedicament.name.like(keyWord))
|
|
|
or_(EntityMedicament.RFID.like(keyWord), EntityMedicament.name.like(keyWord))
|
|
|
).order_by(
|
|
|
# desc(EntityMedicament.PutInStorageDate)
|
|
|
desc(EntityMedicament.put_in_date)
|
|
|
)
|
|
|
return self.queryPage(orm_query, pageParam)
|
|
|
|
|
|
# 试剂管理
|
|
|
def get_drug_list(self, client_id, seach_word, b_code, func_type, page_param, search_status):
|
|
|
filter_base = ""
|
|
|
if client_id:
|
|
|
filter_base += f" client_id='{client_id}' "
|
|
|
if seach_word:
|
|
|
seach_word = f"%{seach_word}%"
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" (`name` like '{seach_word}' or english_name like '{seach_word}') "
|
|
|
if search_status and int(search_status):
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" status='{search_status}'"
|
|
|
# 搜索bar_code
|
|
|
if b_code:
|
|
|
if len(b_code) > 10 and str(func_type) == "1":
|
|
|
new_code = ''
|
|
|
for i in range(int(len(b_code) / 2)):
|
|
|
new_code = b_code[i*2:(i+1)*2] + new_code
|
|
|
else:
|
|
|
new_code = b_code
|
|
|
new_code = f"%{new_code}%"
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" bar_code like '{new_code}' or remark12 like '{new_code}' "
|
|
|
# if filter_base:
|
|
|
# if len(seach_word) > 10:
|
|
|
# new_code = ''
|
|
|
# for i in range(int(len(seach_word) / 2)):
|
|
|
# new_code = seach_word[i*2:(i+1)*2] + new_code
|
|
|
# else:
|
|
|
# new_code = seach_word
|
|
|
# TODO 确认下面这段和上面修改b_code代码作用
|
|
|
# new_code = f"%{new_code}%"
|
|
|
# if filter_base:
|
|
|
# filter_base += " or "
|
|
|
# filter_base += f" (bar_code like '{new_code}' or bar_code like '{seach_word}' )"
|
|
|
if func_type:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" func_type='{func_type}'"
|
|
|
|
|
|
if filter_base:
|
|
|
filter_base = f" where {filter_base}"
|
|
|
sql_all = f"""
|
|
|
select * from rms_medicament {filter_base} and status != 3 order by put_in_date desc
|
|
|
"""
|
|
|
try:
|
|
|
count_number = len(self.execute(sql_all).fetchall())
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
page_param.totalRecords=count_number
|
|
|
page_sql = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
return self.execute(page_sql).fetchall()
|
|
|
|
|
|
# 选择药剂入库--试剂详情
|
|
|
def get_drug_info_distinct_list(self, seach_word, func_type, page_param, client_id=None):
|
|
|
# 动态添加查询条件
|
|
|
filter_base = ""
|
|
|
if client_id:
|
|
|
filter_base += f"client_id='{client_id}'"
|
|
|
if seach_word:
|
|
|
seach_word = f"%{seach_word}%"
|
|
|
if filter_base:
|
|
|
filter_base += " and"
|
|
|
filter_base += f" (`name` like '{seach_word}' or english_name like '{seach_word}') "
|
|
|
if func_type:
|
|
|
if filter_base:
|
|
|
filter_base += " and"
|
|
|
filter_base += f" func_type='{func_type}' "
|
|
|
if filter_base:
|
|
|
filter_base = f" where {filter_base}"
|
|
|
|
|
|
sql_all = f"""
|
|
|
select * from rms_medicament {filter_base} group by `name`, purity, speci order by put_in_date desc
|
|
|
"""
|
|
|
try:
|
|
|
count_number = len(self.execute(sql_all).fetchall())
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
page_param.totalRecords = count_number
|
|
|
# 分页sql
|
|
|
page_sql = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
|
|
|
return self.execute(page_sql).fetchall()
|
|
|
|
|
|
# 药剂入库
|
|
|
def drugPutIn(self, entityDrug=EntityMedicament(), entityClient=EntityClient(), entityUser=EntityUser()):
|
|
|
if entityClient.client_id not in client_list:
|
|
|
entityDrugRecord = EntityMedicamentRecord(
|
|
|
customer_id=entityClient.customer_id,
|
|
|
client_id=entityClient.client_id,
|
|
|
client_code=entityClient.client_code,
|
|
|
variety_id=entityDrug.variety_id,
|
|
|
medicament_id=entityDrug.medicament_id,
|
|
|
price=entityDrug.price,
|
|
|
record_type=DrugRecordType.PutIn,
|
|
|
record_remain=float(entityDrug.remain) if entityDrug.remain else 0,
|
|
|
|
|
|
is_empty=0,
|
|
|
create_date=Utils.get_str_datetime(),
|
|
|
create_user_id=entityUser.user_id,
|
|
|
create_user_name=entityUser.real_name,
|
|
|
)
|
|
|
|
|
|
# 创建事务
|
|
|
self.beginTrans()
|
|
|
entityDrug.remark30 = '0'
|
|
|
entityDrug.client_code = entityClient.client_code
|
|
|
self.session.add(entityDrug)
|
|
|
if entityDrug.status == 1 and entityClient.client_id not in client_list:
|
|
|
self.session.add(entityDrugRecord)
|
|
|
boolean_ = self.commitTrans()
|
|
|
if boolean_ is None:
|
|
|
return True
|
|
|
return boolean_
|
|
|
# 药剂领用
|
|
|
def drugUse(self, entityDrug=EntityMedicament(), entityClient=EntityClient(), entityUser=EntityUser(),notes=''):
|
|
|
#创建事务
|
|
|
self.beginTrans()
|
|
|
entityDrug.remark30 = '0'
|
|
|
self.session.merge(entityDrug)
|
|
|
if entityClient.client_id not in client_list:
|
|
|
entityDrugRecord = EntityMedicamentRecord(
|
|
|
customer_id=entityClient.customer_id,
|
|
|
client_id=entityClient.client_id,
|
|
|
client_code=entityClient.client_code,
|
|
|
variety_id=entityDrug.variety_id,
|
|
|
medicament_id=entityDrug.medicament_id,
|
|
|
price=entityDrug.price,
|
|
|
record_type=DrugRecordType.Use,
|
|
|
is_empty=0,
|
|
|
record_remain=float(entityDrug.remain) if entityDrug.remain else 0,
|
|
|
create_date=Utils.get_str_datetime(),
|
|
|
create_user_id=entityUser.user_id,
|
|
|
create_user_name=entityUser.real_name,
|
|
|
notes = notes
|
|
|
)
|
|
|
|
|
|
self.session.add(entityDrugRecord)
|
|
|
entityVariety = BllMedicamentVariety().findEntity(entityDrug.variety_id)
|
|
|
entityVariety.normal_count -= 1
|
|
|
entityVariety.use_count += 1
|
|
|
self.session.merge(entityVariety)
|
|
|
self.commitTrans()
|
|
|
|
|
|
# 药剂归还
|
|
|
def drugReturn(self, entityDrug=EntityMedicament(), entityClient=EntityClient(), entityUser=EntityUser()):
|
|
|
#创建事务
|
|
|
self.beginTrans()
|
|
|
entityDrug.remark30 = '0'
|
|
|
self.session.merge(entityDrug)
|
|
|
|
|
|
drug = BllMedicament().findEntity(entityDrug.medicament_id)
|
|
|
lastRemain = float(drug.remain) if drug.remain else 0
|
|
|
|
|
|
if entityClient.client_id not in client_list:
|
|
|
entityDrugRecord = EntityMedicamentRecord(
|
|
|
customer_id=entityClient.customer_id,
|
|
|
client_id=entityClient.client_id,
|
|
|
client_code=entityClient.client_code,
|
|
|
variety_id=entityDrug.variety_id,
|
|
|
medicament_id=entityDrug.medicament_id,
|
|
|
price=float(entityDrug.price) if entityDrug.price else 0,
|
|
|
use_quantity=float(lastRemain) - float(entityDrug.remain if entityDrug.remain else 0),
|
|
|
record_type=DrugRecordType.Return,
|
|
|
record_remain=float(entityDrug.remain) if entityDrug.remain else 0,
|
|
|
is_empty=1 if(entityDrug.status == DrugStatus.Empty) else 0,
|
|
|
create_date=Utils.get_str_datetime(),
|
|
|
create_user_id=entityUser.user_id,
|
|
|
create_user_name=entityUser.real_name,
|
|
|
|
|
|
)
|
|
|
# 液体用量数据保存
|
|
|
medicament_variety_obj = BllMedicamentVariety().findEntity(
|
|
|
EntityMedicamentVariety.variety_id == entityDrug.variety_id)
|
|
|
if medicament_variety_obj.net_weight_unit == 'ml' and medicament_variety_obj.density:
|
|
|
use_volume = (float(lastRemain) - float(
|
|
|
entityDrug.remain if entityDrug.remain else 0)) / medicament_variety_obj.density
|
|
|
entityDrugRecord.use_volume = use_volume
|
|
|
self.session.add(entityDrugRecord)
|
|
|
entityVariety = BllMedicamentVariety().findEntity(entityDrug.variety_id)
|
|
|
if(entityDrug.remain != 0):
|
|
|
entityVariety.normal_count += 1
|
|
|
else:
|
|
|
entityVariety.empty_count += 1
|
|
|
entityVariety.use_count -= 1
|
|
|
self.session.merge(entityVariety)
|
|
|
|
|
|
self.commitTrans()
|
|
|
remain_result = self.calculate_use_drug(drug, weight_remain=float(entityDrug.remain if entityDrug.remain else 0))
|
|
|
return remain_result
|
|
|
|
|
|
# 药剂登记
|
|
|
def drugRegister(self, entityDrug, entityClient=EntityClient(), entityUser=EntityUser()):
|
|
|
#创建事务
|
|
|
self.beginTrans()
|
|
|
entityDrug.remark30 = '0'
|
|
|
self.session.merge(entityDrug)
|
|
|
|
|
|
drug = BllMedicament().findEntity(entityDrug.medicament_id)
|
|
|
lastRemain = float(drug.remain)
|
|
|
|
|
|
entityDrugRecord = EntityMedicamentRecord(
|
|
|
customer_id=entityClient.customer_id,
|
|
|
client_id=entityClient.client_id,
|
|
|
client_code=entityClient.client_code,
|
|
|
variety_id=entityDrug.variety_id,
|
|
|
medicament_id=entityDrug.medicament_id,
|
|
|
price=entityDrug.price,
|
|
|
use_quantity=float(lastRemain) - float(entityDrug.remain if entityDrug.remain else 0),
|
|
|
record_type=DrugRecordType.Register,
|
|
|
record_remain=float(entityDrug.remain),
|
|
|
is_empty=1 if(entityDrug.status == DrugStatus.Empty) else 0,
|
|
|
create_date=Utils.get_str_datetime(),
|
|
|
create_user_id=entityUser.user_id,
|
|
|
create_user_name=entityUser.real_name,
|
|
|
|
|
|
)
|
|
|
self.session.add(entityDrugRecord)
|
|
|
self.commitTrans()
|
|
|
|
|
|
# 获取领用和归还页面列表 管理员要能看到所有领用/归还列表数据
|
|
|
def drug_use_return(self, status, func_type, user, page_param, is_admin):
|
|
|
filter_base = f" status={status} and func_type='{func_type}' "
|
|
|
if not is_admin:
|
|
|
filter_base += f"and by_user_id='{user.user_id}' "
|
|
|
sql_all = f"""
|
|
|
select * from rms_medicament where status={status} and func_type='{func_type}' and by_user_id='{user.user_id}' order by by_user_date desc
|
|
|
"""
|
|
|
print(sql_all,'00909')
|
|
|
try:
|
|
|
count_number = len(self.execute(sql_all).fetchall())
|
|
|
except:
|
|
|
count_number = 0
|
|
|
page_param.totalRecords = count_number
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
data_list = self.execute(sql_all).fetchall()
|
|
|
return data_list
|
|
|
|
|
|
|
|
|
# 获取库存信息总览
|
|
|
def get_stock_all_info(self, page_param, func_type,client_id, name=None, client_place=None):
|
|
|
filter_base = ""
|
|
|
if name:
|
|
|
filter_base = f" `name` LIKE '%{name}%'"
|
|
|
if func_type:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" func_type='{func_type}' "
|
|
|
if client_id:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" client_id='{client_id}' "
|
|
|
if filter_base:
|
|
|
filter_base = f" where {filter_base}"
|
|
|
#TODO 添加房间筛选
|
|
|
filter_base1 = ""
|
|
|
if client_place:
|
|
|
filter_base1 += f"where place='{client_place}'"
|
|
|
|
|
|
# sql_all =f"""
|
|
|
# select DISTINCT
|
|
|
# `name`, speci, cas_number,net_weight_unit, purity,
|
|
|
# manufacturer, distributor, net_weight, net_weight_unit,
|
|
|
# client_id, put_in_user_name,category,expiration_date
|
|
|
|
|
|
# sum(CASE WHEN `status`=1 THEN 1 ELSE 0 END) count_number,
|
|
|
# sum(CASE WHEN `status`=1 THEN remain ELSE 0 END) sum_remain
|
|
|
# FROM rms_medicament {filter_base} GROUP BY `name`, speci, purity order by put_in_date desc
|
|
|
# """
|
|
|
sql_all = f"""
|
|
|
|
|
|
select a.*, b.client_name from (
|
|
|
select DISTINCT
|
|
|
`name`, speci, cas_number, purity,
|
|
|
manufacturer, distributor, net_weight, net_weight_unit,
|
|
|
client_id, put_in_user_name,category,expiration_date,put_in_date,
|
|
|
|
|
|
sum(CASE WHEN `status`=1 THEN 1 ELSE 0 END) count_number,
|
|
|
sum(CASE WHEN `status`=1 THEN remain ELSE 0 END) sum_remain
|
|
|
FROM rms_medicament {filter_base} GROUP BY `name`, speci, purity
|
|
|
)a LEFT JOIN (
|
|
|
select * from rms_client {filter_base1}
|
|
|
) b on a.client_id=b.client_id
|
|
|
where b.client_name is not null
|
|
|
order by a.put_in_date desc
|
|
|
"""
|
|
|
# 首次查询,判断长度,做分页使用
|
|
|
try:
|
|
|
count_number = len(self.execute(sql_all).fetchall())
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
# 组件分页参数,返回分页后数据
|
|
|
if page_param:
|
|
|
page_param.totalRecords = count_number
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
#获取所有药剂列表
|
|
|
def getAllDrugList(self, search_word, manufacturer, start_time, end_time, func_type, page_param, seach_user, customer_id=None, client_id=None, client_speci=None):
|
|
|
# (Name like :searchWord or BarCode like :searchWord or EnglishName like :searchWord)
|
|
|
filter_base = ""
|
|
|
if customer_id:
|
|
|
filter_base = f"customer_id='{customer_id}'"
|
|
|
if client_id:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f"client_id='{client_id}'"
|
|
|
# 名称搜索
|
|
|
if search_word:
|
|
|
seach_w = f"%{search_word}%"
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
bar_code, new_code = Utils.get_bar_code_reverse(search_word)
|
|
|
filter_base += f" `name` like '{seach_w}' or english_name like '{seach_w}' or manufacturer like '{seach_w}' "
|
|
|
filter_base += f" or bar_code='{bar_code}' or bar_code='{new_code}' "
|
|
|
# 厂商搜索
|
|
|
if manufacturer:
|
|
|
manufacturer = f"%{manufacturer}%"
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f"manufacturer like '{manufacturer}'"
|
|
|
# 时间范围搜索
|
|
|
if start_time and end_time:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f"put_in_date >= '{start_time}' and put_in_date<='{end_time}'"
|
|
|
# 管理模块区分
|
|
|
if func_type:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" func_type={func_type}"
|
|
|
if seach_user:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" put_in_user_name like '%{seach_user}%'"
|
|
|
if filter_base:
|
|
|
filter_base = "where " + filter_base
|
|
|
# select * from rms_medicament {filter_base}
|
|
|
#TODO 添加房间筛选
|
|
|
filter_base1 = ""
|
|
|
if client_speci:
|
|
|
filter_base1 += f"where place='{client_speci}'"
|
|
|
sql_all = f"""
|
|
|
select a.*,b.client_name from (
|
|
|
select
|
|
|
name, english_name,bar_code,manufacturer,speci,remain,purity,production_date,shelf_life,expiration_date,put_in_date,put_in_user_name,
|
|
|
status,by_user_name,client_id, is_packing, is_label, is_aspect
|
|
|
from rms_medicament {filter_base}
|
|
|
) a LEFT JOIN(
|
|
|
select client_id,client_name from rms_client {filter_base1}
|
|
|
) b on a.client_id=b.client_id
|
|
|
where client_name is not null
|
|
|
order by put_in_date desc
|
|
|
"""
|
|
|
# manufacturer = manufacturer,
|
|
|
# start_time = start_time,
|
|
|
# end_time = end_time,
|
|
|
# 动态添加查询条件
|
|
|
# 获取数量做分页
|
|
|
try:
|
|
|
count_number= len(self.execute(sql_all).fetchall())
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
|
|
|
# 进行分页sql拼接
|
|
|
if page_param:
|
|
|
page_param.totalRecords = count_number
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
# 入库、领用、归还记录
|
|
|
def drug_show_type_info(self, record_type, start_time, end_time, put_in_user_name, name, func_type, client_id, statue_type, page_param, client_place):
|
|
|
filter_base1 = ''
|
|
|
if record_type:
|
|
|
filter_base1 = f" WHERE record_type={record_type} "
|
|
|
if put_in_user_name:
|
|
|
filter_base1 += f" and create_user_name like '%{put_in_user_name}%'"
|
|
|
if start_time and end_time:
|
|
|
filter_base1 += f" and create_date >= '{start_time}' and create_date <= '{end_time}'"
|
|
|
if client_id:
|
|
|
filter_base1 += f" and client_id='{client_id}'"
|
|
|
filter_base2 = ''
|
|
|
if name:
|
|
|
name = f"%{name}%"
|
|
|
filter_base2 += f" (`name` like '{name}' or english_name like '{name}') "
|
|
|
|
|
|
if statue_type and statue_type != '100':
|
|
|
if filter_base2:
|
|
|
filter_base2 += " and "
|
|
|
filter_base2 = f" `status`={statue_type}"
|
|
|
|
|
|
if func_type:
|
|
|
if filter_base2:
|
|
|
filter_base2 += " and "
|
|
|
filter_base2 += f" func_type='{func_type}' "
|
|
|
if filter_base2:
|
|
|
filter_base2 = f" where {filter_base2}"
|
|
|
#TODO 添加房间筛选
|
|
|
filter_base = ""
|
|
|
if client_place:
|
|
|
filter_base += f"where place='{client_place}'"
|
|
|
sql_all = f"""
|
|
|
select
|
|
|
record_type, `name`, english_name, bar_code, purity,
|
|
|
cas_number, speci, use_quantity, use_volume, `status`,
|
|
|
create_date, create_user_name, a.client_id, client_code, client_name, unit_code
|
|
|
from (select * from rms_medicament_record {filter_base1}
|
|
|
) as a LEFT JOIN(
|
|
|
select
|
|
|
medicament_id, `name`, english_name,
|
|
|
bar_code, purity, speci, cas_number,
|
|
|
net_weight, remain, `status`,
|
|
|
by_user_date, by_user_name, unit_code
|
|
|
FROM rms_medicament {filter_base2}
|
|
|
) as b on a.medicament_id=b.medicament_id
|
|
|
LEFT JOIN(select client_id,client_name from rms_client {filter_base}) c on a.client_id=c.client_id
|
|
|
where name is not null and client_name is not null ORDER BY create_date desc
|
|
|
"""
|
|
|
try:
|
|
|
count_number = len(self.execute(sql_all).fetchall())
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
if page_param:
|
|
|
page_param.totalRecords = count_number
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
def drug_show_un_warehoused_type_info(self, **kwargs):
|
|
|
"""
|
|
|
未入库记录(未归还)
|
|
|
:param kwargs: record_type, start_time, end_time, put_in_user_name, name, func_type, client_id, statue_type,
|
|
|
page_param, client_place
|
|
|
:return:
|
|
|
"""
|
|
|
filter_base1 = " where record_type=2 "
|
|
|
if kwargs.get("put_in_user_name"):
|
|
|
filter_base1 += f" and create_user_name like '%{kwargs.get('put_in_user_name')}%'"
|
|
|
if kwargs.get("start_time") and kwargs.get("end_time"):
|
|
|
filter_base1 += f" and create_date >= '{kwargs.get('start_time')}' and create_date <= '{kwargs.get('end_time')}'"
|
|
|
if kwargs.get("client_id"):
|
|
|
filter_base1 += f" and client_id='{kwargs.get('client_id')}'"
|
|
|
filter_base2 = " `status` = 2 "
|
|
|
if kwargs.get("func_type"):
|
|
|
if filter_base2:
|
|
|
filter_base2 += " and "
|
|
|
filter_base2 += f" func_type='{kwargs.get('func_type')}' "
|
|
|
|
|
|
if filter_base2:
|
|
|
filter_base2 = f" where {filter_base2}"
|
|
|
|
|
|
filter_base = ""
|
|
|
if kwargs.get("client_place"):
|
|
|
filter_base += f"where place='{kwargs.get('client_place')}'"
|
|
|
sql_all = f"""
|
|
|
select
|
|
|
`name`, english_name, bar_code, purity,
|
|
|
cas_number, speci, use_quantity, use_volume, `status`,
|
|
|
create_date, create_user_name, a.client_id, client_code, client_name, unit_code
|
|
|
from (select * from rms_medicament_record {filter_base1}
|
|
|
) as a LEFT JOIN(
|
|
|
select
|
|
|
medicament_id, `name`, english_name,
|
|
|
bar_code, purity, speci, cas_number,
|
|
|
net_weight, remain, `status`,
|
|
|
by_user_date, by_user_name, unit_code
|
|
|
FROM rms_medicament {filter_base2}
|
|
|
) as b on a.medicament_id=b.medicament_id
|
|
|
LEFT JOIN(select client_id,client_name from rms_client {filter_base}) c on a.client_id=c.client_id
|
|
|
where name is not null and client_name is not null GROUP BY b.medicament_id ORDER BY create_date desc
|
|
|
"""
|
|
|
try:
|
|
|
count_number = len(self.execute(sql_all).fetchall())
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
if kwargs["page_param"]:
|
|
|
kwargs["page_param"].totalRecords = count_number
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, kwargs["page_param"])
|
|
|
return self.execute(sql_all).fetchall(), count_number
|
|
|
|
|
|
def client_room_number(self):
|
|
|
sql_all = """
|
|
|
select
|
|
|
sum(record_num) value, client_speci name
|
|
|
from (
|
|
|
select medicament_id, client_id from rms_medicament
|
|
|
) as a LEFT JOIN(
|
|
|
SELECT count(*) record_num, medicament_id FROM rms_medicament_record WHERE record_type=2 GROUP BY medicament_id
|
|
|
) as b on a.medicament_id=b.medicament_id LEFT JOIN
|
|
|
rms_client as c on a.client_id=c.client_id
|
|
|
GROUP BY client_speci
|
|
|
HAVING client_speci is not null
|
|
|
"""
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
# 手动输入入库模板时,获取分组后的试剂信息列表
|
|
|
def drug_group_info_list(self):
|
|
|
sql_all = f"""
|
|
|
select
|
|
|
medicament_id, name as value, english_name,
|
|
|
cas_number, purity, production_date,
|
|
|
expiration_date, manufacturer,distributor,speci,
|
|
|
net_weight_unit, total from rms_medicament
|
|
|
group by `name`, speci, purity
|
|
|
"""
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
# 库存盘点获取分组后的试剂信息数据
|
|
|
def get_drug_stock_info(self, client_id):
|
|
|
sql_all = f"""
|
|
|
select count(*) stock_num, `name`, speci, purity from rms_medicament where client_id= '{client_id}' group by `name`, speci, purity
|
|
|
"""
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
# 可领用试剂列表
|
|
|
def use_drug_info_list(self, client_id, seach_word, page_param):
|
|
|
filter_base = ""
|
|
|
if client_id:
|
|
|
filter_base += f"client_id='{client_id}'"
|
|
|
if seach_word:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
name = f"%{seach_word}%"
|
|
|
filter_base += f" (`name` like '{name}' or english_name like '{name}') "
|
|
|
if filter_base:
|
|
|
filter_base = f" and {filter_base}"
|
|
|
# sql_all = f"""
|
|
|
# select a.*,b.client_name from (
|
|
|
# select
|
|
|
# `name`, speci, purity, count(*) drug_num, manufacturer, distributor,client_id,medicament_id
|
|
|
# from
|
|
|
# rms_medicament WHERE `status`=1 {filter_base}
|
|
|
# GROUP BY
|
|
|
# `name`, speci, purity, client_id
|
|
|
# ) a LEFT JOIN (
|
|
|
# select * from rms_client
|
|
|
# ) b on a.client_id = b.client_id
|
|
|
# """
|
|
|
sql_all = f"""
|
|
|
select a.*,b.client_name from (
|
|
|
select * from rms_medicament WHERE rms_medicament.func_type=1 and `status`=1 {filter_base}
|
|
|
) a LEFT JOIN (
|
|
|
select * from rms_client WHERE rms_client.place =10
|
|
|
) b on a.client_id = b.client_id
|
|
|
"""
|
|
|
try:
|
|
|
count_number = self.execute(f"select count(*) num from ({sql_all}) a").fetchone().num
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
if page_param:
|
|
|
page_param.totalRecords = count_number
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
|
|
|
# 获取待入库and待归还试剂数据
|
|
|
def get_drug_type_list(self, status, client_id, page_param, user_id):
|
|
|
filter_base = ""
|
|
|
if status:
|
|
|
filter_base += f" status={status} "
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
if status == 5:
|
|
|
filter_base += f" put_in_user_id='{user_id}'"
|
|
|
else:
|
|
|
filter_base += f" by_user_id='{user_id}'"
|
|
|
if client_id =='72e70542-b70d-11e8-aea5-448a5bc6c411':
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" client_id in ('72e70542-b70d-11e8-aea5-448a5bc6c411','72e70542-b70d-11e8-aea5-448a5bc6c412','72e70542-b70d-11e8-aea5-448a5bc6c413','72e70542-b70d-11e8-aea5-448a5bc6c414') "
|
|
|
if client_id =='72e70542-b70d-11e8-aea5-448a5bc6c415':
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" client_id in ('72e70542-b70d-11e8-aea5-448a5bc6c415','72e70542-b70d-11e8-aea5-448a5bc6c416') "
|
|
|
if client_id =='72e70542-b70d-11e8-aea5-448a5bc6c417':
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f" client_id in ('72e70542-b70d-11e8-aea5-448a5bc6c417') "
|
|
|
if filter_base:
|
|
|
filter_base = f" where {filter_base}"
|
|
|
sql_all = f"""
|
|
|
select * from rms_medicament {filter_base}
|
|
|
"""
|
|
|
print(sql_all)
|
|
|
try:
|
|
|
count_number = self.execute(f"select count(*) num from rms_medicament {filter_base} ").fetchone().num
|
|
|
except Exception:
|
|
|
count_number = 0
|
|
|
if page_param:
|
|
|
page_param.totalRecords = count_number
|
|
|
sql_all = Utils.sql_paging_assemble(sql_all, page_param)
|
|
|
return self.execute(sql_all).fetchall()
|
|
|
|
|
|
# 获取待入库and待归还试剂数据
|
|
|
def get_drug_type_list2(self, user_id):
|
|
|
sql_all = f"""
|
|
|
select * from rms_medicament where client_id in ('72e70542-b70d-11e8-aea5-448a5bc6c411','72e70542-b70d-11e8-aea5-448a5bc6c412','72e70542-b70d-11e8-aea5-448a5bc6c413','72e70542-b70d-11e8-aea5-448a5bc6c414','72e70542-b70d-11e8-aea5-448a5bc6c415','72e70542-b70d-11e8-aea5-448a5bc6c416','72e70542-b70d-11e8-aea5-448a5bc6c417') and ((status=5 and put_in_user_id='{user_id}') or (status=2 and by_user_id='{user_id}'))
|
|
|
"""
|
|
|
data =self.execute(sql_all).fetchall()
|
|
|
if data:
|
|
|
return True
|
|
|
else:
|
|
|
return False
|
|
|
|
|
|
|
|
|
def getDrugSetPotionStorageIn(self,name,clientId=""):
|
|
|
#print('clientId',clientId)
|
|
|
allLabelSqlStr="SELECT group_concat(remark3) AS allLabels FROM( SELECT DISTINCT b.remark3 FROM rms_medicament as a LEFT JOIN rms_variety as b ON a.`name`=b.`name` WHERE b.purity='权限设置' and a.status=1 AND a.client_id='"+clientId+"')T"
|
|
|
allLabels= self.execute(allLabelSqlStr).fetchone()[0]
|
|
|
#print('allLabels:',allLabels)
|
|
|
if allLabels:
|
|
|
allLabelList=allLabels.split(',')
|
|
|
drugVarietyEntity= BllVariety().findEntity(and_(EntityVariety.name==name,EntityVariety.purity=='权限设置'))
|
|
|
#print('drugVarietyEntity.Remark3:',drugVarietyEntity.Remark3)
|
|
|
if drugVarietyEntity:
|
|
|
for sx in drugVarietyEntity.remark3.split(','):
|
|
|
#print('sx:',sx)
|
|
|
drugLabelsSqlstr="SELECT name2 AS reagent,relation FROM rms_medicament_relation a WHERE a.name1='"+sx+"' UNION SELECT name1 AS reagent,relation FROM rms_medicament_relation a WHERE a.name2='"+sx+"'"
|
|
|
drugLabelList=self.execute(drugLabelsSqlstr).fetchall()
|
|
|
#print('drugLabelList:',drugLabelList)
|
|
|
for item in drugLabelList:
|
|
|
if(item[0] in allLabelList):
|
|
|
return(False,item[1])
|
|
|
return(True,'')
|
|
|
else:
|
|
|
return(True,'')
|
|
|
else:
|
|
|
return(True,'')
|
|
|
|
|
|
def inster_log_shiji(self):
|
|
|
import random
|
|
|
name_list = ["砷", "硫酸", "氧化钠"]
|
|
|
obj_list = []
|
|
|
for i in range(100):
|
|
|
obj = EntityMedicament(
|
|
|
bar_code= 10000 + i,
|
|
|
client_id='1c39cb24-07f8-11ed-abd4-f47b094925e1',
|
|
|
client_code="12345",
|
|
|
name=random.choice(name_list),
|
|
|
production_date=Utils.get_str_datetime(),
|
|
|
shelf_life=10,
|
|
|
remain=100,
|
|
|
total=500,
|
|
|
net_weight_unit="g",
|
|
|
net_weight=100,
|
|
|
purity="国标",
|
|
|
put_in_date=Utils.get_str_datetime(),
|
|
|
put_in_user_id='4cea74ee-0d8b-11ed-943e-f47b094925e1',
|
|
|
put_in_user_name="admin",
|
|
|
status=random.randint(1,3)
|
|
|
)
|
|
|
obj_list.append(obj)
|
|
|
self.insert_many(obj_list)
|
|
|
|
|
|
def get_last_drug(self, client_id, drug_name, put_in_date, func_type):
|
|
|
"""
|
|
|
判断获取最早入库试剂信息
|
|
|
"""
|
|
|
filter_base = ""
|
|
|
if func_type:
|
|
|
filter_base += f"func_type='{func_type}'"
|
|
|
if client_id:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
filter_base += f"client_id='{client_id}'"
|
|
|
if drug_name:
|
|
|
if filter_base:
|
|
|
filter_base += " and "
|
|
|
|
|
|
filter_base += f" `name`='{drug_name}' "
|
|
|
if filter_base:
|
|
|
filter_base = f" and {filter_base}"
|
|
|
sql_all = f"""
|
|
|
select a.*,b.client_name from (
|
|
|
select * from rms_medicament WHERE `status`=1 {filter_base}
|
|
|
) a LEFT JOIN (
|
|
|
select * from rms_client
|
|
|
) b on a.client_id = b.client_id order by a.put_in_date asc
|
|
|
"""
|
|
|
medicament_obj = self.execute(sql_all).fetchone()
|
|
|
return medicament_obj
|
|
|
|
|
|
def get_drug_total_num(self, filter_base):
|
|
|
"""
|
|
|
获取药剂总数
|
|
|
:param filter_base:
|
|
|
:return:
|
|
|
"""
|
|
|
if filter_base:
|
|
|
filter_base = f" and {filter_base}"
|
|
|
sql_all = f"""
|
|
|
select count(medicament_id) count_number from rms_medicament where `status` != 3 {filter_base}
|
|
|
"""
|
|
|
# 查看分组数据
|
|
|
data = self.execute(sql_all).fetchone()
|
|
|
return data.count_number if data.count_number else 0
|
|
|
|
|
|
def get_chemicals_total_num(self):
|
|
|
"""
|
|
|
获取化学品总数量
|
|
|
:return:
|
|
|
"""
|
|
|
num = self.get_drug_total_num('')
|
|
|
return num
|
|
|
|
|
|
def get_chemicals_total_weight(self):
|
|
|
"""
|
|
|
获取化学品总重量
|
|
|
:return:
|
|
|
"""
|
|
|
sql_all = f"""
|
|
|
select sum(remain) total_weight from rms_medicament where `status` != 3
|
|
|
"""
|
|
|
# 查看分组数据
|
|
|
data = self.execute(sql_all).fetchone()
|
|
|
return data.total_weight if data.total_weight else 0
|
|
|
|
|
|
def get_chemicals_other_total_num(self):
|
|
|
"""
|
|
|
获取其他化学品总数量
|
|
|
:return: standard_num 普通危化总数 2
|
|
|
reagent_num 易制毒易制爆总数 1
|
|
|
consumables_num 对照品数量 3
|
|
|
"""
|
|
|
standard_num = self.get_drug_total_num("func_type=2")
|
|
|
reagent_num = self.get_drug_total_num("func_type=1")
|
|
|
consumables_num = self.get_drug_total_num("func_type=3")
|
|
|
return standard_num, reagent_num, consumables_num
|
|
|
|
|
|
def update_expiration_date(self, drug_entry):
|
|
|
"""
|
|
|
更改试剂有效期
|
|
|
液体1年 ,普通固体5年, 易潮解固体2年
|
|
|
:param drug_entry:
|
|
|
:return:
|
|
|
"""
|
|
|
# 从分类表中获取时间年份
|
|
|
medicament_variety_obj = BllMedicamentVariety().findEntity(
|
|
|
EntityMedicamentVariety.variety_id == drug_entry.variety_id)
|
|
|
if not medicament_variety_obj:
|
|
|
return
|
|
|
add_year = int(medicament_variety_obj.remark5) if medicament_variety_obj.remark5 else 1
|
|
|
date_now = datetime.datetime.now()
|
|
|
add_expiration_date = (date_now + relativedelta(years=add_year)).strftime("%Y-%m-%d %H:%M:%S")
|
|
|
if not drug_entry.expiration_date or add_expiration_date > str(drug_entry.expiration_date):
|
|
|
return
|
|
|
else:
|
|
|
drug_entry.expiration_date = add_expiration_date
|
|
|
self.beginTrans()
|
|
|
self.session.merge(drug_entry)
|
|
|
self.commitTrans()
|
|
|
|
|
|
@staticmethod
|
|
|
def calculate_use_drug(drug, weight_remain=0.0):
|
|
|
"""
|
|
|
计算用量
|
|
|
:return: {"is_liquid": 是否为液体, "use_volume": 液体用量, "use_quality": 固体用量, "net_weight_unit": 单位}
|
|
|
"""
|
|
|
if not drug.remain:
|
|
|
return
|
|
|
medicament_variety_obj = BllMedicamentVariety().findEntity(
|
|
|
EntityMedicamentVariety.variety_id == drug.variety_id)
|
|
|
remain_result = {
|
|
|
"is_liquid": False,
|
|
|
"use_volume": 0,
|
|
|
"use_quality": float(drug.remain) - float(weight_remain),
|
|
|
"net_weight_unit": medicament_variety_obj.net_weight_unit
|
|
|
}
|
|
|
# 液体
|
|
|
if medicament_variety_obj.net_weight_unit == 'ml' and medicament_variety_obj.density:
|
|
|
use_volume = remain_result["use_quality"] / medicament_variety_obj.density
|
|
|
remain_result["is_liquid"] = True
|
|
|
remain_result["use_volume"] = Utils.reserve_decimal(use_volume, 2)
|
|
|
return remain_result
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
data = BllMedicament().getDrugSetPotionStorageIn("2-氨基苯酚", '1c39cb24-07f8-11ed-abd4-f47b094925e1')
|
|
|
print(data)
|
|
|
# from db_logic.medicament import BllMedicament
|
|
|
# from Common.Utils import PageParam
|
|
|
# page_param = PageParam(1, 10)
|
|
|
# data = BllMedicament().inster_log_shiji()
|
|
|
# print(data)
|
|
|
# values= {}
|
|
|
# page = values.get("page", 1)
|
|
|
# page_size = values.get("page_size", 10)
|
|
|
# record_type = values.get("record_type", 1)
|
|
|
# put_in_user_name = values.get("put_in_user_name")
|
|
|
# name = values.get("name")
|
|
|
# start_time = values.get("start_time")
|
|
|
# end_time = values.get("end_time")
|
|
|
# page_param = PageParam(page, page_size)
|
|
|
# typ_dic = BllMedicament().drug_show_type_info(record_type=record_type, put_in_user_name=put_in_user_name,
|
|
|
# name=name, start_time=start_time, end_time=end_time, page_param=page_param
|
|
|
# )
|
|
|
# print(typ_dic)
|
|
|
|
|
|
|