#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@Date : 2022 / 07 / 25 09 : 32 : 18
'''
import sys
sys . path . append ( " . " )
import re
import os
import datetime
import json
from flask import jsonify , request , g
from flask import Blueprint
from Common . read_excel import ReadExcel
from Common . Utils import Utils , PageParam
from db_logic . client import BllClient
from db_logic . medicament import BllMedicament
from db_logic . user import BllUser
from db_logic . medicament_template import BllMedicamentTemplate
from db_logic . meidcament_variety import BllMedicamentVariety
from models . client_models import EntityClient
from models . medicament_models import EntityMedicament , EntityMedicamentTemplate
from Common . auth import token_auth
from Common . create_barcode import CreateBarcode
from db_logic . user_temporary_auth import BllUserTemporaryAuth
tmp_router = Blueprint ( " drug_tmplate " , __name__ )
# 试剂入库-模板展示
@tmp_router . route ( " /show_tmp " , methods = [ " GET " , " POST " ] )
@token_auth . login_required
def show_template ( ) :
client_id = request . values . get ( " client_id " )
func_type = request . values . get ( " func_type " )
is_add = request . values . get ( " is_add " )
page = int ( request . values . get ( " page " , 1 ) )
page_size = int ( request . values . get ( " page_size " , 10 ) )
page_param = PageParam ( page , page_size )
data = BllMedicamentTemplate ( ) . getAllTemplateList (
client_id = client_id ,
func_type = func_type ,
page_param = page_param ,
is_add = int ( is_add )
)
data = Utils . msyql_table_model ( data )
new_data_list = [ ]
for i in data :
all_export_cout = 0
# 添加容错,模板内容为空直接跳过
if i [ " template_content " ] == ' null ' or not i [ " template_content " ] :
continue
for a in json . loads ( i [ " template_content " ] ) :
all_export_cout + = int ( a . get ( " export_count " , 0 ) )
# 模板里面的批号列表
standard_code_list = [ item . get ( " standard_code " ) for item in json . loads ( i [ " template_content " ] ) if item . get ( " standard_code " ) ]
new_dic = {
" all_export_count " : all_export_cout ,
" standard_codes " : " , " . join ( list ( set ( standard_code_list ) ) ) ,
* * i
}
new_data_list . append ( new_dic )
return jsonify ( Utils . true_return ( data = { " total_count " : page_param . totalRecords , " data_list " : new_data_list } ) )
# 选择药剂入库
@tmp_router . route ( " /select_drug " , methods = [ " POST " ] )
@token_auth . login_required
def select_drug_info ( ) :
seach_word = request . values . get ( " seach_word " )
func_type = request . values . get ( " func_type " )
page = int ( request . values . get ( " page " , 1 ) )
page_size = int ( request . values . get ( " page_size " , 10 ) )
page_param = PageParam ( page , page_size )
data_list = BllMedicament ( ) . get_drug_info_distinct_list (
seach_word = seach_word ,
func_type = func_type ,
page_param = page_param )
data_list = Utils . msyql_table_model ( data_list )
return jsonify ( Utils . true_return ( data = { " total_count " : page_param . totalRecords , " data_list " : data_list } ) )
# 绑定入库
@tmp_router . route ( " /bind_tmp_enter_warehouse " , methods = [ " GET " , " POST " ] )
@token_auth . login_required
def bind_tmp_input_db ( ) :
tmp_content = request . values . get ( " tmplate_content " )
customer_id = request . values . get ( " customer_id " )
if not customer_id :
customer_id = ' 1002437b-debf-46d6-b186-3e16bcf0cc0f '
func_type = request . values . get ( " func_type " )
# client_id = request.values.get("client_id")
# client_id = '1c39cb24-07f8-11ed-abd4-f47b094925e1'
bar_code = request . values . get ( " bar_code " )
# user_id = request.values.get("user_id")
bar_code , new_code = Utils . get_bar_code_reverse ( bar_code = bar_code )
if func_type == 1 or func_type == ' 1 ' :
bar_code = new_code
if not bar_code :
return jsonify ( Utils . false_return ( msg = " 条码不能为空 " ) )
drug_obj = BllMedicament ( ) . findEntity ( EntityMedicament . bar_code == bar_code )
if drug_obj :
return jsonify ( Utils . false_return ( msg = " 该药剂已被锁定 " ) )
else :
content_tmp = json . loads ( tmp_content )
drug_info = { }
for k , v in content_tmp . items ( ) :
if v is None or v == " " or v == " null " :
continue
else :
drug_info [ k ] = v
user_info = g . current_user
drug_variety = BllMedicamentVariety ( ) . createDrugVariety (
customer_id = customer_id ,
drug_info = drug_info , user_info = user_info
)
num = BllMedicament ( ) . execute ( f " select count(*) num from rms_medicament where name like ' % { drug_info . get ( ' name ' ) } % ' and remark12 like ' % { Utils . get_file_name_datetime ( ) [ : 4 ] } % ' " ) . fetchone ( ) . num
remain_num = drug_info . get ( " remain " , 0 )
if not remain_num :
remain_num = drug_info . get ( " total " )
new_dict = {
" medicament_id " : Utils . UUID ( ) ,
" variety_id " : drug_variety . variety_id ,
" bar_code " : bar_code ,
" customer_id " : customer_id ,
# "client_id": client_id,
" inventory_warning_value " : 10 ,
" shelf_life_warning_value " : 10 ,
" use_days_warning_value " : 10 ,
# "is_supervise":0,
" put_in_date " : Utils . get_str_datetime ( ) ,
" put_in_user_id " : user_info . user_id ,
" put_in_user_name " : user_info . real_name ,
# "status":1,
" remain " : remain_num ,
" func_type " : func_type ,
" remark12 " : Utils . getDrugUnitCode ( num )
}
if func_type == 1 or func_type == ' 1 ' :
new_dict [ " status " ] = 5
else :
new_dict [ " status " ] = 1
finds_list = dir ( EntityMedicament ( ) )
for i in finds_list :
if i in new_dict . keys ( ) :
continue
value = drug_info . get ( i )
if value != None :
new_dict [ i ] = value
drug_entity = EntityMedicament ( * * new_dict )
try :
# if func_type in [1,2]:
# # 打印标签
# obj = CreateBarcode()
# obj.create_drug_lobel_code(**new_dict)
# user_id = user_info.user_id
# user_id_pt = request.values.get("user_id_pt", '34306da6-0f11-11ed-ba01-009027e3906b')
# BllUserTemporaryAuth().create_temporary_auth(user_ids=[user_id, user_id_pt], auth_type=1)
# 柜体
client_obj = BllClient ( ) . findEntity ( EntityClient . client_id == drug_entity . client_id )
new_dict . update ( {
" client_name " : client_obj . client_name
} )
# 打印标签
obj = CreateBarcode ( )
obj . create_drug_lobel_code ( * * new_dict )
BllMedicament ( ) . drugPutIn (
drug_entity ,
BllClient ( ) . findEntity ( EntityClient . client_id == drug_entity . client_id ) ,
user_info
)
return jsonify ( Utils . true_return ( msg = " 药剂入库成功 " , data = Utils . to_dict ( drug_entity ) ) )
except Exception as error :
return jsonify ( Utils . false_return ( msg = " 数据异常,入库失败: %s " % error ) )
# 新增试剂模板
@tmp_router . route ( " /add_tmp " , methods = [ " GET " , " POST " ] )
@token_auth . login_required
def add_tmp_info ( ) :
tmp_name = request . values . get ( " template_name " )
client_id = request . values . get ( " client_id " )
func_type = request . values . get ( " func_type " )
# client_id = '1c39cb24-07f8-11ed-abd4-f47b094925e1'
tmp_content = request . values . get ( " template_content " )
# user_id = '4cea74ee-0d8b-11ed-943e-f47b094925e1'
# user = BllUser().findEntity(user_id)
user = g . current_user
client = BllClient ( ) . findEntity ( client_id )
sql_all = """
select bar_code_count , start_bar_code from rms_medicament_template where start_bar_code = ( select max ( start_bar_code ) max_start from rms_medicament_template )
"""
# 获取最大的条形码和条形码数量
tmp_obj = BllMedicamentTemplate ( ) . execute ( sql_all ) . fetchone ( )
if tmp_obj :
max_barcode = int ( tmp_obj . start_bar_code ) + int ( tmp_obj . bar_code_count )
else :
max_barcode = 100001
start_bar_code = max_barcode
try :
if not tmp_content or tmp_content == ' null ' :
return jsonify ( Utils . false_return ( msg = " 模板内容有误 " ) )
if not tmp_name :
tmp_name = f ' 入库模板_ { Utils . getFileName ( ) } '
if isinstance ( tmp_content , str ) :
# tmp_content = eval(tmp_content)
tmp_content = json . loads ( tmp_content )
bar_code_count = 0
for i in tmp_content :
bar_code_count + = int ( i [ ' export_count ' ] )
# 同模板名称进行覆盖
temp = BllMedicamentTemplate ( ) . findEntity ( EntityMedicamentTemplate . template_name == tmp_name )
params = {
" customer_id " : client . customer_id ,
" client_id " : client . client_id ,
" client_name " : client . client_name ,
" template_name " : tmp_name ,
" func_type " : func_type ,
" template_content " : json . dumps ( tmp_content ) ,
" is_wait_export " : 1 ,
" start_bar_code " : start_bar_code ,
" bar_code_count " : bar_code_count ,
" create_date " : Utils . get_str_datetime ( ) ,
" create_user_id " : user . user_id ,
" create_user_name " : user . real_name ,
}
if temp :
for k , v in params . items ( ) :
setattr ( temp , k , v )
BllMedicamentTemplate ( ) . update ( temp )
else :
obj = EntityMedicamentTemplate ( * * params )
BllMedicamentTemplate ( ) . insert ( obj )
return jsonify ( Utils . true_return ( msg = " 添加模板成功 " ) )
except Exception as error :
return jsonify ( Utils . false_return ( msg = f " 请求有误: { error } " ) )
# # 编辑试剂模板
# @tmp_router.route("/update_tmp", methods=["GET", "POST"])
# def modify_tmp():
# tmp_id = request.values.get("template_id")
# 导入入库模板
@tmp_router . route ( " /put_in_tmp " , methods = [ " GET " , " POST " ] )
@token_auth . login_required
def import_tmplate ( ) :
try :
file_path = Utils . getUDiskPath ( )
# file_path = request.values.get("file_path")
if not file_path :
return jsonify ( msg = " 请插入U盘 " )
else :
client_id = request . values . get ( " client_id " , ' ' )
template_name = request . values . get ( " template_name " , ' ' )
func_type = request . values . get ( " func_type " )
read_excel = ReadExcel ( file_path + " / " + template_name )
sql_all = """
select bar_code_count , start_bar_code from rms_medicament_template where start_bar_code = ( select max ( start_bar_code ) max_start from rms_medicament_template )
"""
tmp_obj = BllMedicamentTemplate ( ) . execute ( sql_all ) . fetchone ( )
if tmp_obj :
max_barcode = tmp_obj . start_bar_code
bar_code_count = tmp_obj . bar_code_count
max_barcode = int ( max_barcode ) + int ( bar_code_count )
else :
max_barcode = 100001
start_bar_code = max_barcode
result_list = read_excel . read ( func_type = str ( func_type ) )
client_obj = BllClient ( ) . findEntity (
EntityClient . client_id == client_id )
user_obj = g . current_user
if result_list :
inster_obj_list = [ ]
for value in result_list :
total_count = 0
template_content_list = eval ( value )
for template_content in template_content_list :
total_count + = int ( template_content [ ' export_count ' ] )
obj = EntityMedicamentTemplate (
customer_id = client_obj . customer_id ,
client_id = client_obj . client_id ,
client_name = client_obj . client_name ,
template_name = f ' 入库模板_ { Utils . getFileName ( ) } ' ,
template_content = value ,
is_wait_export = 1 ,
start_bar_code = str ( start_bar_code ) ,
bar_code_count = total_count ,
create_date = Utils . get_str_datetime ( ) ,
create_user_id = user_obj . user_id ,
create_user_name = user_obj . real_name ,
func_type = func_type
)
inster_obj_list . append ( obj )
status = BllMedicamentTemplate ( ) . insert_many ( inster_obj_list )
if status :
return jsonify ( Utils . true_return ( msg = ' 导入成功 ' ) )
else :
return jsonify ( Utils . false_return ( msg = " 入库单异常,导入失败 " ) )
else :
return jsonify ( Utils . false_return ( msg = " 入库单格式不正确,请检查之后重新导入 " ) )
except FileNotFoundError as e :
return jsonify ( Utils . false_return ( msg = ' 当前U盘下暂无reagentTemplate.xlsx文件 ' ) )
except Exception as error :
return jsonify ( Utils . false_return ( msg = f " 模板错误: { error } " ) )
# 删除模板
@tmp_router . route ( " /del_tmp " , methods = [ " GET " , " POST " ] )
@token_auth . login_required
def remove_tmp ( ) :
tmp_id_list = request . values . get ( " template_id_list " )
if tmp_id_list :
BllMedicamentTemplate ( ) . del_template_obj ( eval ( tmp_id_list ) )
return Utils . true_return ( msg = ' 删除药剂模板成功 ' )
return Utils . false_return ( msg = ' 删除药剂模板失败 ' )
# 读取优盘下的文件列表
@tmp_router . route ( " /u_file_list " , methods = [ " POST " ] )
# @token_auth.login_required
def get_file_list ( ) :
# file_path = request.values.get("file_path")
file_path = Utils . getUDiskPath ( )
if not file_path :
return jsonify ( Utils . false_return ( msg = " 请插入U盘 " ) )
data_file_list = list ( filter ( lambda x : re . match (
' tem.*?.xlsx ' , x ) , os . listdir ( file_path ) ) )
return jsonify ( Utils . true_return ( data = data_file_list ) )
# return jsonify(Utils.true_return(data=os.listdir(file_path)))
# 根据模板id打印标签
@tmp_router . route ( " /pring_bar_code " , methods = [ " POST " ] )
@token_auth . login_required
def print_code_data ( ) :
template_id = request . values . get ( " template_id " )
# start = request.values.get("start_code")
# end = request.values.get("end_code")
# temp_obj_list = BllMedicamentTemplate().findList(EntityMedicamentTemplate.template_id._in(template_id_list)).all()
obj = CreateBarcode ( )
temp = BllMedicamentTemplate ( ) . findEntity ( EntityMedicamentTemplate . template_id == template_id )
for i in range ( int ( temp . start_bar_code ) , int ( temp . start_bar_code ) + int ( temp . bar_code_count ) ) :
obj . create_Code128_img ( str ( i ) )
return jsonify ( Utils . true_return ( msg = " 成功 " ) )
# # 获取所有导入模板信息
# @tmp_router.route("/all_tmp", methods=["GET"])
# # @token_auth.login_required
# def get_tmp_all_list():
# data_list = BllMedicamentTemplate().execute(
# "select * from rms_medicament_template"
# )
# return jsonify(Utils.true_return(data=Utils.msyql_table_model(data_list)))
# @tmp_router.route("/getManufacturerList", methods=["POST"])
# def get_ManufacturerList():
# data = BllMedicament().execute(
# "select DISTINCT manufacturer as `value` from rms_medicament where manufacturer is not null and manufacturer != ''"
# ).fetchall()
# return jsonify(Utils.true_return(data=Utils.msyql_table_model(data)))
# 获取分组后的试剂列表
@tmp_router . route ( " /get_drug_group_list " , methods = [ " POST " ] )
@token_auth . login_required
def drug_group_list ( ) :
data = BllMedicament ( ) . drug_group_info_list ( )
data_list = Utils . msyql_table_model ( data )
return jsonify ( Utils . true_return ( data = data_list ) )
# 获取试剂可入库的柜子和层
@tmp_router . route ( " /enter_db_client_list " , methods = [ " POST " ] )
def drug_enter_db_client_list ( ) :
func_type = request . values . get ( " func_type " )
drug_name = request . values . get ( " drug_name " )
if not drug_name :
drug_name = ' '
data = BllMedicament ( ) . get_drug_save_db_info ( drug_name = drug_name , func_type = func_type )
return jsonify ( Utils . true_return ( data = data ) )