大屏代码

duizhaopin
tangxuan 2 years ago
parent 28abb76c24
commit 4e7092f6ed

@ -0,0 +1,188 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@author: tx
@file: screen.py
@time: 2023/3/21 15:09
@desc: 大屏数据接口
"""
import datetime
from collections import defaultdict
from db_logic.medicament import BllMedicament
from db_logic.client import BllClient
from Common.Utils import PageParam, Utils
def get_chemicals_total_num_weight():
"""
获取化学品总数总重量
:return: 化学品总数化学品总重量
"""
total_num = BllMedicament().get_chemicals_total_num()
total_weight = BllMedicament().get_chemicals_total_weight()
return total_num, total_weight
def get_other_drug_total_num():
standard_num, reagent_num, consumables_num = BllMedicament().get_chemicals_other_total_num()
return standard_num, reagent_num, consumables_num
def count_by(lst, fn):
"""
列表分组求和
:param lst: list
:param fn: func
:return: defaultdict(<class 'int'>, {'氯化钠': 2, '盐酸': 1, '氨水': 3})
"""
d = defaultdict(int)
for el in lst:
d[fn(el)] += 1
return d
def get_storage_summary():
"""
获取今日出入库信息
:return: chemicals: 物品名
day_out_num 今日出库数
day_in_num: 今日入库数
opt_count: 操作次数
"""
start_time = datetime.datetime.now().strftime("%Y-%m-%d 00:00:00")
end_time = datetime.datetime.now().strftime("%Y-%m-%d 23:59:59")
kwargs = {
"put_in_user_name": "",
"func_type": '',
"statue_type": '',
"name": '',
"start_time": start_time,
"end_time": end_time,
"page_param": {},
"client_place": '',
"client_id": ''
}
def _get_in_out_storage_dict(record_type):
kwargs.update({"record_type": record_type})
data_list = BllMedicament().drug_show_type_info(**kwargs)
in_list = Utils.msyql_table_model(data_list)
_count_dict = count_by(in_list, lambda x: x["name"])
return _count_dict
# 入库计数
in_dict = _get_in_out_storage_dict(1)
# 领用计数
out_dict = _get_in_out_storage_dict(2)
chemical_names = set(in_dict.keys()) | set(out_dict.keys())
result = [{
"chemicals": item,
"day_out_num": out_dict[item],
"day_in_num": in_dict[item],
"opt_count": sum([out_dict[item], in_dict[item]])
} for item in chemical_names]
return result
def get_drug_operate():
"""
获取药剂操作情况列表
:return:
"""
page_param = PageParam(1, 20)
kwargs = {
"record_type": "",
"put_in_user_name": "",
"func_type": '',
"statue_type": '',
"name": '',
"start_time": "",
"end_time": "",
"page_param": page_param,
"client_place": '',
"client_id": ''
}
data_list = BllMedicament().drug_show_type_info(**kwargs)
record_list = Utils.msyql_table_model(data_list)
return record_list
def get_all_inventory():
"""
获取库存总览
:return:
"""
# 易燃易爆品
page_param = PageParam(1, 1000)
def _get_stock_all_info(functype):
data_list = BllMedicament().get_stock_all_info(
name="",
func_type=functype,
page_param=page_param,
client_place="",
client_id=""
)
data_list = Utils.msyql_table_model(data_list)
return data_list
data_list_1 = _get_stock_all_info(1)
data_list_2 = _get_stock_all_info(2)
data_list_3 = _get_stock_all_info(3)
all_list = data_list_1 + data_list_2 + data_list_3
result = defaultdict()
for item in all_list:
name = item["name"]
if name not in result:
result[name] = {"total_num": item["count_number"] if item["count_number"] else 0,
"total_weight": item["sum_remain"] if item["sum_remain"] else 0}
else:
result[name]["total_num"] += item["count_number"]
result[name]["total_weight"] += item["sum_remain"]
parse_result = [{
"name": k,
"total_num": v["total_num"],
"total_weight": v["total_weight"],
} for k, v in dict(result).items()]
return parse_result
def get_all_client_cell_ratio(func_type_dict):
"""
获取货位占比情况 每个分类func_type 所有药剂数量 / 所有位置占比
:return:
"""
def get_drug_list_total_count(func_type):
# 获取药剂总数量
page_param = PageParam(1, 10)
data_list = BllMedicament().get_drug_list(
seach_word="",
b_code="",
client_id="", func_type=func_type, page_param=page_param
)
return page_param.totalRecords
def _get_client_list_item(func_type):
# 货位总数
sql_all = f"""
select b.total_quantity as total_quantity, a.client_id, a.func_type
from (select * from rms_client where func_type = {func_type}) as a
left join
(select sum(storage_quantity) as total_quantity, client_id from rms_client_cell group by client_Id ) as b
on a.client_id = b.client_id
"""
total_quantity_list = BllClient().execute(sql_all).fetchall()
return sum([i.total_quantity for i in total_quantity_list if i.total_quantity])
func_type_list = func_type_dict.keys()
resp = dict()
for i in func_type_list:
total_records = get_drug_list_total_count(i)
total_quantity = _get_client_list_item(i)
ratio = total_records / total_quantity * 100 if total_quantity else 0
resp.update({i: f"{Utils.reserve_decimal(ratio, 2)}%"})
return resp
Loading…
Cancel
Save