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.

157 lines
5.6 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.

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@Date:2022/07/26 11:19:30
'''
import datetime
from flask import jsonify, request
from flask import Blueprint
from db_logic.client import BllClient
from db_logic.medicament import BllMedicament
from models.medicament_models import EntityMedicament
from db_logic.user import BllUser
from models.user_models import EntityUser
from models.client_models import EntityClient
from Common.Utils import DrugStatus, PageParam, Utils
drug_router = Blueprint("drug", __name__)
# 试剂扫码领用
@drug_router.route("/use", methods=["GET", "POST"])
def drug_collect():
# 获取参数
bar_code = request.values.get("bar_code")
# user_id=request.values.get("user_id")
# 默认用户id后续从token 中获取
user_id = '4cea74ee-0d8b-11ed-943e-f47b094925e1'
# 强制使用默认0不强制1强制
force_use = request.values.get("force_use")
force_use = force_use if force_use != '' else '0'
# 获取条码试剂
drug_entity = BllMedicament().findEntity(EntityMedicament.bar_code==bar_code)
# 条码实际逻辑判段
if not drug_entity:
data = Utils.false_return(msg="药剂条码无效")
elif drug_entity.status not in [DrugStatus.Normal, DrugStatus.Empty]:
print(drug_entity.status)
data = Utils.false_return(msg="药剂未在库")
elif drug_entity.status == DrugStatus.Empty:
data = Utils.false_return(msg="药剂已为空瓶")
else:
customer_id = drug_entity.customer_id
client_id = drug_entity.client_id
# 获取临期的试剂
drug_obj = BllMedicament().getDrugNearExpired(drug_entity.variety_id, customer_id)
# date_str = lambda x: datetime.datetime.strptime('', "%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d")
# drug_obj_date_str = date_str(drug_obj.expiration_date)
drug_obj_date_str = datetime.datetime.strptime(drug_obj.expiration_date, "%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d")
# drug_entity_date_str = date_str(drug_entity.expiration_date)
drug_entity_date_str = datetime.datetime.strptime(drug_entity.expiration_date, "%Y-%m-%d %H:%M:%S").strftime("%Y-%m-%d")
if drug_obj.medicament_id != drug_entity.medicament_id and force_use == "False" and drug_obj_date_str != drug_entity_date_str:
data = Utils.false_return(status=2, msg=f'"{drug_entity.name}({drug_entity.bar_code})"此类药有更接近保质期的实例"{drug_obj.bar_code}", 存在于"{drug_obj.client_code}"号终端')
else:
# 领取试剂
user_info = BllUser().findEntity(EntityUser.user_id==user_id)
drug_entity.by_user_date = Utils.get_str_datetime()
drug_entity.by_user_id=user_info.user_id
drug_entity.by_user_name=user_info.real_name
drug_entity.status=DrugStatus.Out
# print(Utils.to_dict(drug_entity))
# for k,v in drug_entity:
# print(k,v)
# 试剂领用--事务逻辑处理
BllMedicament().drugUse(
drug_entity,
BllClient().findEntity(EntityClient.client_id==client_id),
user_info
)
data = Utils.true_return(msg='领用成功', data=Utils.to_dict(drug_entity))
return jsonify(data)
# 试剂归还
@drug_router.route("/drug_return", methods=["GET", "POST"])
def drug_return():
# 获取参数
bar_code = request.values.get("bar_code")
place = request.values.get("place")
# user_id = request.values.get("user_id")
# 默认用户id后续从token 中获取
user_id = '4cea74ee-0d8b-11ed-943e-f47b094925e1'
# 根据条码查询试剂信息
drug_info = BllMedicament().findEntity(EntityMedicament.bar_code==bar_code)
if not drug_info:
data = Utils.false_return(msg="药剂条码无效")
elif drug_info.status != DrugStatus.Out:
data = Utils.false_return(msg="此药剂未被领用")
else:
# 药剂归还,进入归还事务处理
drug_info.status = DrugStatus.Normal
if place:
drug_info.place = place
user_info = BllUser().findEntity(EntityUser.user_id == user_id)
BllMedicament().drugReturn(drug_info, BllClient().findEntity(drug_info.client_id), user_info)
data = Utils.true_return(msg="药剂归还成功", data=Utils.to_dict(drug_info))
return jsonify(data)
# 试剂领用/归还,列表展示
@drug_router.route("/use_or_return_list", methods=["GET", "POST"])
def drug_use_retur_list():
status = request.values.get("status")
page = request.values.get("page", 1)
page_size = request.values.get("page_size", 10)
page_param = PageParam(page, page_size)
data = BllMedicament().drug_use_return(status=status, page_param=page_param)
return jsonify(Utils.true_return(data={"total_count": page_param.totalRecords, "data": Utils.msyql_table_model(data)}))
# 试剂称重展示试剂详细信息
@drug_router.route("/get_drug_info", methods=["GET", "POST"])
def get_drug_info():
bar_code = request.values.get("bar_code")
data_list = BllMedicament().get_bar_code_drug_info(bar_code=bar_code)
return jsonify(Utils.true_return(data=Utils.msyql_table_model(data_list)[0]))
# 试剂管理
@drug_router.route("/drug_manage", methods=["GET", "POST"])
def get_drug_manage():
seach_word = request.values.get("seach_word")
client_id = request.values.get("client_id")
data_list = BllMedicament().get_drug_info_distinct_list(seach_word=seach_word, client_id=client_id)
return jsonify(Utils.true_return(data=Utils.msyql_table_model(data_list)))