|
@@ -28,6 +28,7 @@ from django.db import connection
|
|
|
import calendar
|
|
|
from .calc import *
|
|
|
from .pkcalc import *
|
|
|
+from dateutil.relativedelta import relativedelta
|
|
|
|
|
|
import xlrd
|
|
|
import xlwt
|
|
@@ -867,9 +868,14 @@ def delete_model(cls,**kwargs):
|
|
|
model_name = re.search(r'.*\.(\w+)View',str(cls.__class__)).groups()[0]
|
|
|
model = getattr(cm,model_name)
|
|
|
ids = str(kwargs.get("id")).split(",")
|
|
|
- rst = model.objects.filter(id__in=ids).delete()
|
|
|
if model_name == "Comments":
|
|
|
cm.Comments.objects.filter(pid__in=ids).delete()
|
|
|
+ elif model_name == "PatientCases":
|
|
|
+ user_id = kwargs.get("user_id")
|
|
|
+ user_name = kwargs.get("user_name")
|
|
|
+ cm.PatientCases.objects.filter(id__in=ids).update(isdelete=1,del_doctor_id=user_id,del_doctor_name=user_name)
|
|
|
+ else:
|
|
|
+ rst = model.objects.filter(id__in=ids).delete()
|
|
|
return ids
|
|
|
|
|
|
|
|
@@ -945,9 +951,12 @@ def get_detail_info(cls,**kwargs):
|
|
|
rst["lyl"] = round(float(lyl),2)
|
|
|
|
|
|
|
|
|
- zsjg = ZSJG_HOURS[zspc]
|
|
|
- mczsjl = calc_mczsjl(zsjg,bsq,bltz,yfghx,lyl)
|
|
|
- rst["mczsjl"] = round(float(mczsjl),2)
|
|
|
+ try:
|
|
|
+ zsjg = ZSJG_HOURS[zspc]
|
|
|
+ mczsjl = calc_mczsjl(zsjg,bsq,bltz,yfghx,lyl)
|
|
|
+ rst["mczsjl"] = round(float(mczsjl),2)
|
|
|
+ except:
|
|
|
+ pass
|
|
|
|
|
|
return rst
|
|
|
|
|
@@ -986,17 +995,28 @@ def get_list_info(cls,**kwargs):
|
|
|
qset = qset.filter(name__icontains=kwargs.get("name"))
|
|
|
|
|
|
if model_name == "PatientCases":
|
|
|
+ #qset = qset.filter(status=1)
|
|
|
+ #qset = qset.filter(status=0)
|
|
|
+ qset = qset.filter(isdelete=0)
|
|
|
if kwargs.get("patient_id"):
|
|
|
- qset = qset.filter(patient_id=kwargs.get("patient_id"))
|
|
|
+ patient_id = kwargs.get("patient_id")
|
|
|
+ qset = qset.filter(patient_id=patient_id)
|
|
|
+ if kwargs.get("name"):
|
|
|
+ qset = qset.filter(name__icontains=kwargs.get("name"))
|
|
|
+
|
|
|
if kwargs.get("doctor_id"):
|
|
|
hospital_id = kwargs.get("hospital_id")
|
|
|
hospital_name = kwargs.get("hospital_name")
|
|
|
doctor_id = kwargs.get("doctor_id")
|
|
|
+
|
|
|
+ #小医生
|
|
|
if kwargs.get("doctor_role") == 3:
|
|
|
qset = qset.filter(doctor_id=doctor_id)
|
|
|
+ #中医生
|
|
|
if kwargs.get("doctor_role") == 2:
|
|
|
doctor_ids = list(cm.Doctors.objects.filter(hospital_name=hospital_name,role__in=[2,3]).values_list("id",flat=True))
|
|
|
qset = qset.filter(doctor_id__in=doctor_ids)
|
|
|
+ #大医生
|
|
|
if kwargs.get("doctor_role") == 1:
|
|
|
doctor_ids = list(cm.Doctors.objects.filter(hospital_name=hospital_name,role__in=[1,2,3]).values_list("id",flat=True))
|
|
|
qset = qset.filter(doctor_id__in=doctor_ids)
|
|
@@ -1006,6 +1026,21 @@ def get_list_info(cls,**kwargs):
|
|
|
qset = qset.filter(patient_id=kwargs.get("patient_id"))
|
|
|
|
|
|
data = list(qset.order_by("-id").values())
|
|
|
+ if model_name == "PatientCases":
|
|
|
+ data = list(qset.order_by("-id").values())
|
|
|
+ flag = 0
|
|
|
+ for item in data:
|
|
|
+ status = item["status"]
|
|
|
+ if status == 1 and flag == 0:
|
|
|
+ item["islast"] = 1
|
|
|
+ flag = 1
|
|
|
+ elif model_name == "PatientRecords":
|
|
|
+ for index,item in enumerate(data):
|
|
|
+ if index == 0 and item["isdelete"] == 0:
|
|
|
+ item["candel"] = 1
|
|
|
+ else:
|
|
|
+ item["candel"] = 0
|
|
|
+ data = filter(lambda x:x["isdelete"]==0,data)
|
|
|
else:
|
|
|
data = list(qset.order_by("-id").values())
|
|
|
|
|
@@ -3129,12 +3164,22 @@ def register_patient_case(**kwargs):
|
|
|
#基本信息
|
|
|
doctor_id = kwargs.get("doctor_id")
|
|
|
doctor_name = kwargs.get("doctor_name")
|
|
|
- name = kwargs.get("name")
|
|
|
- birthday = kwargs.get("birthday")
|
|
|
- sex = kwargs.get("sex")
|
|
|
- phone = kwargs.get("phone")
|
|
|
+ patient_id = kwargs.get("patient_id")
|
|
|
+
|
|
|
+ #name = kwargs.get("name")
|
|
|
+ #birthday = kwargs.get("birthday")
|
|
|
+ #sex = kwargs.get("sex")
|
|
|
+ #phone = kwargs.get("phone")
|
|
|
+ patient = cm.Patients.objects.filter(id=patient_id).first()
|
|
|
+ name = patient.name
|
|
|
+ sex = patient.sex
|
|
|
+ phone = patient.phone
|
|
|
+ birthday = patient.birthday
|
|
|
+ code = patient.code
|
|
|
age = ccf.calc_age(birthday)
|
|
|
+
|
|
|
#注射产品信息
|
|
|
+ case_id = kwargs.get("id")
|
|
|
mpro = kwargs.get("mpro")
|
|
|
mfreq = kwargs.get("mfreq")
|
|
|
bltz = kwargs.get("bltz")
|
|
@@ -3148,45 +3193,45 @@ def register_patient_case(**kwargs):
|
|
|
t2hx = kwargs.get("t2hx")
|
|
|
cxsjt3 = kwargs.get("cxsjt3")
|
|
|
t3hx = kwargs.get("t3hx")
|
|
|
- yfghx = kwargs.get("yfghx")
|
|
|
zspc = kwargs.get("zspc")
|
|
|
+ yfghx = kwargs.get("yfghx") #预防谷活性/目标谷活性
|
|
|
|
|
|
#计算值
|
|
|
#预期峰值活性
|
|
|
yqfzhx = calc_yqfzhx(zsjl,bltz,jchx)
|
|
|
+ #yqfzhx = round(yqfzhx,2)
|
|
|
|
|
|
- #半衰期
|
|
|
- bsq = calc_bsq(cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx)
|
|
|
-
|
|
|
- #利用率
|
|
|
- lyl = calc_lyl(zssjt0,cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx,zsjl,bltz)
|
|
|
+ if cxsjt3 and t3hx:
|
|
|
+ #半衰期
|
|
|
+ bsq = calc_bsq(cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx)
|
|
|
+ #bsq = round(bsq,2)
|
|
|
+ #利用率
|
|
|
+ lyl = calc_lyl(zssjt0,cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx,zsjl,bltz)
|
|
|
+ #lyl = round(lyl,2)
|
|
|
+ else:
|
|
|
+ #半衰期
|
|
|
+ bsq = calc_bsq2(cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx)
|
|
|
+ #bsq = round(bsq,2)
|
|
|
+ #利用率
|
|
|
+ lyl = calc_lyl2(zssjt0,cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx,zsjl,bltz)
|
|
|
+ #lyl = round(lyl,2)
|
|
|
|
|
|
- zsjg = ZSJG_HOURS[zspc]
|
|
|
- mczsjl = calc_mczsjl(zsjg,bsq,bltz,yfghx,lyl)
|
|
|
|
|
|
- pinyin = ccf.get_name_pinyin(name)
|
|
|
- code = pinyin + ccf.get_now_str("%Y%m%d")
|
|
|
+ #zsjg = ZSJG_HOURS[zspc]
|
|
|
+ #mczsjl = calc_mczsjl(zsjg,bsq,bltz,yfghx,lyl)
|
|
|
|
|
|
- pobj,flag = cm.Patients.objects.get_or_create(phone=phone,name=name)
|
|
|
- pobj.birthday = birthday
|
|
|
- pobj.sex = sex
|
|
|
- pobj.age = age
|
|
|
- pobj.code = code
|
|
|
- pobj.save()
|
|
|
-
|
|
|
- pcase = {
|
|
|
+ pcase_dct = {
|
|
|
"doctor_id":doctor_id,
|
|
|
"doctor_name":doctor_name,
|
|
|
- "patient_id":pobj.id,
|
|
|
+ "patient_id":patient_id,
|
|
|
"name":name,
|
|
|
"birthday":birthday,
|
|
|
"phone":phone,
|
|
|
"sex":sex,
|
|
|
"age":age,
|
|
|
"code":code,
|
|
|
- "mpro":mpro,
|
|
|
- "mfreq":mfreq,
|
|
|
"bltz":bltz,
|
|
|
+ "mpro":mpro,
|
|
|
"zsjl":zsjl,
|
|
|
"zssjt0":zssjt0,
|
|
|
"jchx":jchx,
|
|
@@ -3202,11 +3247,22 @@ def register_patient_case(**kwargs):
|
|
|
"yqfzhx":yqfzhx,
|
|
|
"bsq":bsq,
|
|
|
"lyl":lyl,
|
|
|
- "mczsjl":mczsjl
|
|
|
+ #"mczsjl":mczsjl,
|
|
|
+ #"mfreq":mfreq,
|
|
|
}
|
|
|
|
|
|
- pcase = cm.PatientCases.objects.create(**pcase)
|
|
|
- return pcase.id
|
|
|
+ if not case_id:
|
|
|
+ pcase = cm.PatientCases.objects.create(**pcase_dct)
|
|
|
+ pcase_dct["id"] = pcase.id
|
|
|
+ else:
|
|
|
+ if kwargs.get("action")=="finish":
|
|
|
+ pcase_dct["status"] = 1
|
|
|
+ pcase = cm.PatientCases.objects.filter(id=case_id).update(**pcase_dct)
|
|
|
+ pcase_dct["id"] = case_id
|
|
|
+ pcase_dct["yqfzhx"] = round(pcase_dct["yqfzhx"],2)
|
|
|
+ pcase_dct["lyl"] = round(pcase_dct["lyl"],2)
|
|
|
+ pcase_dct["bsq"] = round(pcase_dct["bsq"],2)
|
|
|
+ return pcase_dct
|
|
|
|
|
|
|
|
|
|
|
@@ -3217,14 +3273,21 @@ def register_patient(**kwargs):
|
|
|
name = kwargs.get("name")
|
|
|
phone = kwargs.get("phone")
|
|
|
phcode = kwargs.get("phcode")
|
|
|
+ sex = kwargs.get("sex")
|
|
|
+ birthday = kwargs.get("birthday")
|
|
|
doctor_id = kwargs.get("doctor_id")
|
|
|
pinyin = ccf.get_name_pinyin(name)
|
|
|
code = pinyin + ccf.get_now_str("%Y%m%d")
|
|
|
+ age = ccf.calc_age(birthday)
|
|
|
|
|
|
pobj,flag = cm.Patients.objects.get_or_create(phone=phone,name=name)
|
|
|
pobj.code = code
|
|
|
pobj.doctor_id = doctor_id
|
|
|
+ pobj.birthday = birthday
|
|
|
+ pobj.sex = sex
|
|
|
+ pobj.age = age
|
|
|
pobj.save()
|
|
|
+ return pobj.id
|
|
|
|
|
|
|
|
|
def get_patient_latest_case(**kwargs):
|
|
@@ -3248,6 +3311,7 @@ def get_patient_latest_case(**kwargs):
|
|
|
hf = case["bsq"]
|
|
|
FVIII = calc_FVIII(zsjl,lyl,bltz,t1,t2,hf)
|
|
|
case["FVIII"] = FVIII
|
|
|
+
|
|
|
if cm.PatientRecords.objects.filter(patient_id=patient_id).exists():
|
|
|
record = cm.PatientRecords.objects.filter(patient_id=patient_id).order_by("-id").values().first()
|
|
|
case["hasrecords"] = 1
|
|
@@ -3279,6 +3343,7 @@ def patient_clockin(request):
|
|
|
qdata["code"] = user.get("code")
|
|
|
qdata["mpro"] = qdata.get("mpro")
|
|
|
qdata["zssjt0"] = qdata.get("zssjt0")
|
|
|
+ qdata["patient_phone"] = user.get("phone")
|
|
|
|
|
|
cm.PatientRecords.objects.create(**qdata)
|
|
|
|
|
@@ -3311,6 +3376,8 @@ def get_patient_pkline(**kwargs):
|
|
|
gt5_time = calc_gt5_time(bsq,zsjl,lyl,bltz)
|
|
|
gt3_time = calc_gt3_time(bsq,zsjl,lyl,bltz)
|
|
|
gt1_time = calc_gt1_time(bsq,zsjl,lyl,bltz)
|
|
|
+ gt15_time = calc_gt15_time(bsq,zsjl,lyl,bltz)
|
|
|
+ gt15_time = gt15_time if gt15_time > 0 else 0
|
|
|
|
|
|
sjfhx = calc_actual_fhx(zsjl,lyl,bltz)
|
|
|
sjfhx = round(sjfhx*100,2)
|
|
@@ -3323,10 +3390,63 @@ def get_patient_pkline(**kwargs):
|
|
|
gt3_time = u"持续大于3%"
|
|
|
if sjghx > 1:
|
|
|
gt1_time = u"持续大于1%"
|
|
|
+ if sjghx > 15:
|
|
|
+ gt15_time = u"持续大于15%"
|
|
|
+
|
|
|
+ PK_XDATA_new = []
|
|
|
+ pk_ydata_new = []
|
|
|
+ #for i in range(0,len(PK_XDATA)):
|
|
|
+ for i,item in enumerate(PK_XDATA):
|
|
|
+ if zspc == u"每天1次":
|
|
|
+ if item > 168:
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+ PK_XDATA_new.append(PK_XDATA[i])
|
|
|
+ pk_ydata_new.append(pk_ydata[i])
|
|
|
+ elif zspc == u"每2天1次":
|
|
|
+ if item in [24.01,72.01,120.01]:
|
|
|
+ continue
|
|
|
+ elif item > 168:
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+ PK_XDATA_new.append(PK_XDATA[i])
|
|
|
+ pk_ydata_new.append(pk_ydata[i])
|
|
|
+ elif zspc == u"每3天1次":
|
|
|
+ if item in [24.01,48.01,96.01,120.01]:
|
|
|
+ continue
|
|
|
+ elif item > 168:
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+ PK_XDATA_new.append(PK_XDATA[i])
|
|
|
+ pk_ydata_new.append(pk_ydata[i])
|
|
|
+ elif zspc == u"每周3次":
|
|
|
+ if item in [24.01,72.01,120.01,144.01]:
|
|
|
+ continue
|
|
|
+ elif item > 168:
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+ PK_XDATA_new.append(PK_XDATA[i])
|
|
|
+ pk_ydata_new.append(pk_ydata[i])
|
|
|
+ elif zspc == u"每周2次":
|
|
|
+ if item in [24.01,48.01,96.01,120.01,144.01]:
|
|
|
+ continue
|
|
|
+ elif item > 168:
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+ PK_XDATA_new.append(PK_XDATA[i])
|
|
|
+ pk_ydata_new.append(pk_ydata[i])
|
|
|
+ else:
|
|
|
+ if item in [24.01,48.01,72.01,96.01,120.01,144.01]:
|
|
|
+ continue
|
|
|
+ elif item > 168:
|
|
|
+ continue
|
|
|
+ else:
|
|
|
+ PK_XDATA_new.append(PK_XDATA[i])
|
|
|
+ pk_ydata_new.append(pk_ydata[i])
|
|
|
|
|
|
- return {"pk_xdata":PK_XDATA,"pk_ydata":pk_ydata,
|
|
|
+ return {"pk_xdata":PK_XDATA_new,"pk_ydata":pk_ydata_new,
|
|
|
"gt5_time":gt5_time,"gt3_time":gt3_time,"gt1_time":gt1_time,
|
|
|
- "sjfhx":sjfhx,"sjghx":sjghx
|
|
|
+ "sjfhx":sjfhx,"sjghx":sjghx,"gt15_time":gt15_time
|
|
|
}
|
|
|
|
|
|
|
|
@@ -3370,16 +3490,444 @@ def get_patient_pro_list(request):
|
|
|
"""
|
|
|
"""
|
|
|
patient_id = request.user.get("id")
|
|
|
- qset = cm.PatientCases.objects.filter(patient_id=patient_id)
|
|
|
+ qset = cm.PatientCases.objects.filter(patient_id=patient_id,status=1)
|
|
|
pros = list(qset.values_list("ckmpro",flat=True))
|
|
|
pros = list(set(pros))
|
|
|
return pros
|
|
|
|
|
|
|
|
|
|
|
|
+def get_patient_doing_case(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ patid = kwargs.get("patid")
|
|
|
+ doctor_id = kwargs.get("doctor_id")
|
|
|
+ if patid:
|
|
|
+ ptcase_set = cm.PatientCases.objects.filter(patient_id=patid,status=0)
|
|
|
+ else:
|
|
|
+ ptcase_set = cm.PatientCases.objects.filter(doctor_id=doctor_id,status=0)
|
|
|
+
|
|
|
+ ptcase = ptcase_set.order_by("-id").values().first()
|
|
|
+ return ptcase if ptcase else {}
|
|
|
+
|
|
|
+
|
|
|
+def try_calc_mczsjl(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ zspc = kwargs.get("zspc")
|
|
|
+ bsq = kwargs.get("bsq")
|
|
|
+ bltz = kwargs.get("bltz")
|
|
|
+ yfghx = kwargs.get("yfghx")
|
|
|
+ lyl = kwargs.get("lyl")
|
|
|
+
|
|
|
+ zsjg = ZSJG_HOURS[zspc]
|
|
|
+ mczsjl = calc_mczsjl(zsjg,bsq,bltz,yfghx,lyl)
|
|
|
+ mczsjl = round(mczsjl,2)
|
|
|
+ print(mczsjl,22222222222)
|
|
|
+
|
|
|
+ return mczsjl
|
|
|
+
|
|
|
+
|
|
|
+def get_doctor_patient_cnt(doctor_id):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ #patient_cnt = cm.Patients.objects.filter(doctor_id=doctor_id).count()
|
|
|
+ patient_cnt = cm.PatientCases.objects.filter(doctor_id=doctor_id,isdelete=0)\
|
|
|
+ .values("patient_id").annotate(cnt=Count("patient_id",distinct=True)).count()
|
|
|
+ print(patient_cnt)
|
|
|
+ return patient_cnt
|
|
|
+
|
|
|
+
|
|
|
+def get_doctor_case_cnt(doctor_id):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ #case_cnt = cm.PatientCases.objects.filter(doctor_id=doctor_id,status=1).count()
|
|
|
+ case_cnt = cm.PatientCases.objects.filter(doctor_id=doctor_id,isdelete=0).count()
|
|
|
+ return case_cnt
|
|
|
+
|
|
|
+
|
|
|
+def get_doctor_list(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ doctor_id = kwargs.get("doctor_id")
|
|
|
+ hospital_name = kwargs.get("hospital_name")
|
|
|
+ qset = cm.Doctors.objects.filter(hospital_name=hospital_name)
|
|
|
+ #小医生
|
|
|
+ if kwargs.get("doctor_role") == 3:
|
|
|
+ qset = qset.filter(id=doctor_id)
|
|
|
+ #中医生
|
|
|
+ if kwargs.get("doctor_role") == 2:
|
|
|
+ qset = cm.Doctors.objects.filter(hospital_name=hospital_name,role__in=[2,3],parent_id=doctor_id)
|
|
|
+ #大医生
|
|
|
+ if kwargs.get("doctor_role") == 1:
|
|
|
+ qset = cm.Doctors.objects.filter(hospital_name=hospital_name,role__in=[1,2,3])
|
|
|
+
|
|
|
+ if kwargs.get("name"):
|
|
|
+ qset = qset.filter(name__icontains=kwargs.get("name"))
|
|
|
+
|
|
|
+ qset = qset.exclude(id=doctor_id).order_by("ename")
|
|
|
+
|
|
|
+ page = int(kwargs.get("page",0))
|
|
|
+ page_size = int(kwargs.get("page_size",100))
|
|
|
+
|
|
|
+ if page and page_size:
|
|
|
+ total,qset = ccc.get_page_qset(qset,page,page_size)
|
|
|
+ else:
|
|
|
+ total = qset.count()
|
|
|
+
|
|
|
+ data = list(qset.values())
|
|
|
+ for item in data:
|
|
|
+ doctorid = item["id"]
|
|
|
+ item["patient_cnt"] = get_doctor_patient_cnt(doctorid)
|
|
|
+ item["case_cnt"] = get_doctor_case_cnt(doctorid)
|
|
|
+ cur_doctor = cm.Doctors.objects.filter(id=doctor_id).values().first()
|
|
|
+ cur_doctor["patient_cnt"] = get_doctor_patient_cnt(doctor_id)
|
|
|
+ cur_doctor["case_cnt"] = get_doctor_case_cnt(doctor_id)
|
|
|
+ data.insert(0,cur_doctor)
|
|
|
+ return total,data
|
|
|
+
|
|
|
+def get_patient_case_cnt(patient_id):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ #case_cnt = cm.PatientCases.objects.filter(patient_id=patient_id,status=1).count()
|
|
|
+ case_cnt = cm.PatientCases.objects.filter(patient_id=patient_id,isdelete=0).count()
|
|
|
+ return case_cnt
|
|
|
+
|
|
|
+def get_patient_list(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ if kwargs.get("cur_doctor_id"):
|
|
|
+ doctor_id = kwargs.get("cur_doctor_id")
|
|
|
+ else:
|
|
|
+ doctor_id = kwargs.get("doctor_id")
|
|
|
+ qset = cm.Patients.objects.filter(doctor_id=doctor_id).order_by("code")
|
|
|
+ if kwargs.get("name"):
|
|
|
+ qset = qset.filter(name__icontains=kwargs.get("name"))
|
|
|
+
|
|
|
+ page = int(kwargs.get("page",0))
|
|
|
+ page_size = int(kwargs.get("page_size",20))
|
|
|
+
|
|
|
+ if page and page_size:
|
|
|
+ total,qset = ccc.get_page_qset(qset,page,page_size)
|
|
|
+ else:
|
|
|
+ total = qset.count()
|
|
|
+
|
|
|
+ data = list(qset.values())
|
|
|
+ newdata = []
|
|
|
+ for item in data:
|
|
|
+ doctor_id = item["id"]
|
|
|
+ item["case_cnt"] = get_patient_case_cnt(doctor_id)
|
|
|
+ if item["case_cnt"] > 0:
|
|
|
+ newdata.append(item)
|
|
|
+ #newdata.append(item)
|
|
|
+ newdata = sorted(newdata,key=lambda x:x["case_cnt"],reverse=True)
|
|
|
+ return total,newdata
|
|
|
+
|
|
|
+
|
|
|
+#@ccf.check_sign
|
|
|
+def get_external_patient_case_list(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ qset = cm.PatientCases.objects.all()
|
|
|
+ if kwargs.get("doctor_id"):
|
|
|
+ qset = qset.filter(doctor_id=kwargs.get("doctor_id"))
|
|
|
+ if kwargs.get("hospital_id"):
|
|
|
+ qset = qset.filter(hospital_id=kwargs.get("hospital_id"))
|
|
|
+ if kwargs.get("patient_id"):
|
|
|
+ qset = qset.filter(patient_id=kwargs.get("patient_id"))
|
|
|
+ if kwargs.get("ids"):
|
|
|
+ _ids = kwargs.get("ids").split(",")
|
|
|
+ qset = qset.filter(id__in=_ids)
|
|
|
+ if kwargs.get("phone"):
|
|
|
+ qset = qset.filter(phone=kwargs.get("phone"))
|
|
|
+
|
|
|
+ page = int(kwargs.get("page",0))
|
|
|
+ page_size = int(kwargs.get("page_size",20))
|
|
|
+
|
|
|
+ if page and page_size:
|
|
|
+ total,qset = ccc.get_page_qset(qset,page,page_size)
|
|
|
+ else:
|
|
|
+ total = qset.count()
|
|
|
+
|
|
|
+ data = list(qset.values())
|
|
|
+ return total,data
|
|
|
+
|
|
|
+
|
|
|
+#@ccf.check_sign
|
|
|
+def get_external_patient_records_list(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ qset = cm.PatientRecords.objects.all()
|
|
|
+ if kwargs.get("patient_id"):
|
|
|
+ qset = qset.filter(patient_id=kwargs.get("patient_id"))
|
|
|
+ if kwargs.get("phone"):
|
|
|
+ qset = qset.filter(phone=kwargs.get("phone"))
|
|
|
+
|
|
|
+ if kwargs.get("ids"):
|
|
|
+ _ids = kwargs.get("ids").split(",")
|
|
|
+ qset = qset.filter(id__in=_ids)
|
|
|
+
|
|
|
+ page = int(kwargs.get("page",0))
|
|
|
+ page_size = int(kwargs.get("page_size",20))
|
|
|
+
|
|
|
+ if page and page_size:
|
|
|
+ total,qset = ccc.get_page_qset(qset,page,page_size)
|
|
|
+ else:
|
|
|
+ total = qset.count()
|
|
|
+
|
|
|
+ data = list(qset.values())
|
|
|
+ return total,data
|
|
|
+
|
|
|
+
|
|
|
+def get_patient_latest_record(**kwargs):
|
|
|
+ """
|
|
|
+ 获取患者最新打卡记录
|
|
|
+ """
|
|
|
+ patient_id = kwargs.get("patient_id")
|
|
|
+ qset = cm.PatientRecords.objects.filter(patient_id=patient_id).order_by("-id")
|
|
|
+ qdata = qset.values().first()
|
|
|
+ rst = qdata if qdata else {}
|
|
|
+ return rst
|
|
|
+
|
|
|
+
|
|
|
+def calc_mbghx_remain_time(**kwargs):
|
|
|
+ """
|
|
|
+ 计算距离目标谷活性剩余时间
|
|
|
+ """
|
|
|
+ patient_id = kwargs.get("patient_id")
|
|
|
+
|
|
|
+ now = datetime.datetime.now()
|
|
|
+ t1 = None
|
|
|
+ mbghx = None
|
|
|
+ yqfzhx = None
|
|
|
+ bsq = None
|
|
|
+ remain_time = 0
|
|
|
+ zsjl = 0
|
|
|
+ next_time = now
|
|
|
+
|
|
|
+ qset = cm.PatientCases.objects.filter(patient_id=patient_id)
|
|
|
+ #最新注射打卡的产品
|
|
|
+ if cm.PatientRecords.objects.filter(patient_id=patient_id).exists():
|
|
|
+ recordSet = cm.PatientRecords.objects.filter(patient_id=patient_id).order_by("-id")
|
|
|
+ patient_pro = recordSet.first().mpro
|
|
|
+ t1 = recordSet.first().zssjt0
|
|
|
+ zsjl = recordSet.first().mdose
|
|
|
+
|
|
|
+ qset = qset.filter(ckmpro=patient_pro)
|
|
|
|
|
|
+ case = qset.order_by("-id").first()
|
|
|
+ if case:
|
|
|
+ mbghx = case.yfghx
|
|
|
+ #yqfzhx = case.yqfzhx
|
|
|
+ bsq = case.bsq
|
|
|
+ lyl = case.lyl
|
|
|
+ bltz = case.bltz
|
|
|
+ #zsjl = case.zsjl
|
|
|
+ yqfzhx = zsjl*2*lyl/bltz
|
|
|
+ print(zsjl,lyl,bltz)
|
|
|
+ print(yqfzhx,888888888888888888888)
|
|
|
|
|
|
+ if t1 and mbghx and yqfzhx and bsq:
|
|
|
+ remain_time = calc_patient_mbghx_remain_time(bsq,mbghx,yqfzhx,t1)
|
|
|
+ next_time = now + datetime.timedelta(seconds=remain_time*3600)
|
|
|
|
|
|
|
|
|
+ return {"remain_time":remain_time,"mbghx":mbghx,"next_time":next_time}
|
|
|
|
|
|
|
|
|
+def get_bleed_options(**kwargs):
|
|
|
+ """
|
|
|
+ 出血选项
|
|
|
+ """
|
|
|
+ options = BLEED_OPTIONS
|
|
|
+ return options
|
|
|
+
|
|
|
+
|
|
|
+def patient_bleed_clockin(request):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ user = request.user
|
|
|
+ qdata = request.json
|
|
|
+
|
|
|
+ pat_name = user.get("name")
|
|
|
+ bleed_part = qdata.get("bleed_part")
|
|
|
+ bleed_reason = qdata.get("bleed_reason")
|
|
|
+ bleed_level = qdata.get("bleed_level")
|
|
|
+ patient_id = user.get("id")
|
|
|
+
|
|
|
+ qdata["patient_id"] = user.get("id")
|
|
|
+ qdata["name"] = user.get("name")
|
|
|
+ qdata["code"] = user.get("code")
|
|
|
+ qdata["bleed_time"] = qdata.get("bleed_time")
|
|
|
+ qdata["bleed_part"] = qdata.get("bleed_part")
|
|
|
+ qdata["bleed_part_detail"] = qdata.get("bleed_part_detail")
|
|
|
+ qdata["bleed_part_desc"] = qdata.get("bleed_part_desc")
|
|
|
+ qdata["bleed_reason"] = qdata.get("bleed_reason")
|
|
|
+ qdata["bleed_level"] = qdata.get("bleed_level")
|
|
|
+
|
|
|
+ obj = cm.BleedRecords.objects.create(**qdata)
|
|
|
+ #发送通知
|
|
|
+ try:
|
|
|
+ doctor_id = cm.Patients.objects.filter(id=patient_id).first().doctor_id
|
|
|
+ except Exception as e:
|
|
|
+ print(e)
|
|
|
+ doctor_id = None
|
|
|
+ msg_content = u"{},出血部位:{},出血原因:{},出血程度:{}".format(pat_name,bleed_part,bleed_reason,bleed_level)
|
|
|
+ cm.Notices.objects.create(
|
|
|
+ send_user = patient_id,
|
|
|
+ receive_user = doctor_id,
|
|
|
+ msg_title = msg_content,
|
|
|
+ msg_content = msg_content
|
|
|
+ )
|
|
|
+ return obj.id
|
|
|
+
|
|
|
+
|
|
|
+def get_patient_bleed_records(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ patient_id = kwargs.get("patient_id")
|
|
|
+ qset = cm.BleedRecords.objects.filter(patient_id=patient_id).order_by("-id")
|
|
|
+ qdata = list(qset.values())
|
|
|
+ return qset.count(),qdata
|
|
|
+
|
|
|
+
|
|
|
+def get_patient_bleed_statistic(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ patient_id = kwargs.get("patient_id")
|
|
|
+ time_range = int(kwargs.get("time_range",1))
|
|
|
+ now = datetime.datetime.now()
|
|
|
+ gt_time = (now + relativedelta(months=-int(time_range)))
|
|
|
+
|
|
|
+ qset = cm.BleedRecords.objects.filter(patient_id=patient_id,bleed_time__gte=gt_time,bleed_time__lte=now)
|
|
|
+ #总自发性出血和外伤性出血
|
|
|
+ zfx_bleed_cnt = qset.filter(bleed_reason=u"自发性出血").count()
|
|
|
+ wsx_bleed_cnt = qset.filter(bleed_reason=u"外伤性出血").count()
|
|
|
+ #关节自发性出血和外伤性出血
|
|
|
+ gj_zfx_bleed_cnt = qset.filter(bleed_part=u"关节出血",bleed_reason=u"自发性出血").count()
|
|
|
+ gj_wsx_bleed_cnt = qset.filter(bleed_part=u"关节出血",bleed_reason=u"外伤性出血").count()
|
|
|
+ #其他部位自发性出血和外伤性出血
|
|
|
+ qt_zfx_bleed_cnt = qset.filter(bleed_reason=u"自发性出血").exclude(bleed_part=u"关节出血").count()
|
|
|
+ qt_wsx_bleed_cnt = qset.filter(bleed_reason=u"外伤性出血").exclude(bleed_part=u"关节出血").count()
|
|
|
+ #关节出血详细部位
|
|
|
+ gj_parts = BLEED_OPTIONS.get(u"关节出血")
|
|
|
+ gj_bleed_list = []
|
|
|
+ for gj in gj_parts:
|
|
|
+ gj_bleed_cnt_zfx = qset.filter(bleed_reason=u"自发性出血",bleed_part_detail__icontains=gj).count()
|
|
|
+ gj_bleed_cnt_wsx = qset.filter(bleed_reason=u"外伤性出血",bleed_part_detail__icontains=gj).count()
|
|
|
+ gj_bleed_list.append({
|
|
|
+ "gj_name":gj,
|
|
|
+ "gj_bleed_cnt_zfx":gj_bleed_cnt_zfx,
|
|
|
+ "gj_bleed_cnt_wsx":gj_bleed_cnt_wsx
|
|
|
+ })
|
|
|
+
|
|
|
+ #计算年华出血率和年化关节出血率
|
|
|
+ gt_time = "%s-01-01 00:00:00" % (now.year)
|
|
|
+ gt_time = ccf.str_to_datetime(gt_time)
|
|
|
+ #总出血次数
|
|
|
+ bleed_total = cm.BleedRecords.objects.filter(patient_id=patient_id,bleed_time__gte=gt_time,bleed_time__lte=now).count()
|
|
|
+ #关节出血次数
|
|
|
+ bleed_gj_total = cm.BleedRecords.objects.filter(bleed_part=u"关节出血",patient_id=patient_id,
|
|
|
+ bleed_time__gte=gt_time,bleed_time__lte=now).count()
|
|
|
+ #计算周期内总天数
|
|
|
+ t = now - gt_time
|
|
|
+ h = t.total_seconds()/3600/24
|
|
|
+ #年化出血率
|
|
|
+ time_range = str(time_range)
|
|
|
+ if time_range == "1":
|
|
|
+ year_bleed_rate = (bleed_total/(365.0/12.0))*365.25
|
|
|
+ year_gj_bleed_rate = (bleed_gj_total/(365.0/12))*365.25
|
|
|
+ elif time_range == "3":
|
|
|
+ year_bleed_rate = (bleed_total/(365.0/4))*365.25
|
|
|
+ year_gj_bleed_rate = (bleed_gj_total/(365.0/4))*365.25
|
|
|
+ elif time_range == "6":
|
|
|
+ year_bleed_rate = (bleed_total/(365.0/2))*365.25
|
|
|
+ year_gj_bleed_rate = (bleed_gj_total/(365.0/2))*365.25
|
|
|
+ else:
|
|
|
+ year_bleed_rate = (bleed_total/365.0)*365.25
|
|
|
+ year_gj_bleed_rate = (bleed_gj_total/365.0)*365.25
|
|
|
+ #计算第一次出血记录时间
|
|
|
+ bleedSet = cm.BleedRecords.objects.filter(patient_id=patient_id)
|
|
|
+ if bleedSet:
|
|
|
+ first_bleed_time = bleedSet.first().bleed_time
|
|
|
+ first_bleed_time_interval = (now - ccf.str_to_datetime(first_bleed_time,"%Y-%m-%d %H:%M")).days
|
|
|
+ else:
|
|
|
+ first_bleed_time = now
|
|
|
+ first_bleed_time_interval = 0
|
|
|
+
|
|
|
+
|
|
|
+ rst = {
|
|
|
+ "zfx_bleed_cnt":zfx_bleed_cnt,
|
|
|
+ "wsx_bleed_cnt":wsx_bleed_cnt,
|
|
|
+ "gj_zfx_bleed_cnt":gj_zfx_bleed_cnt,
|
|
|
+ "gj_wsx_bleed_cnt":gj_wsx_bleed_cnt,
|
|
|
+ "qt_zfx_bleed_cnt":qt_zfx_bleed_cnt,
|
|
|
+ "qt_wsx_bleed_cnt":qt_wsx_bleed_cnt,
|
|
|
+ "gj_bleed_list":gj_bleed_list,
|
|
|
+ "year_bleed_rate":round(float(year_bleed_rate),1),
|
|
|
+ "year_gj_bleed_rate":round(float(year_gj_bleed_rate),1),
|
|
|
+ "first_bleed_time":first_bleed_time,
|
|
|
+ "first_bleed_time_interval":first_bleed_time_interval
|
|
|
+ }
|
|
|
+ return rst
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def get_doctor_notice_list(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ doctor_id = kwargs.get("doctor_id")
|
|
|
+
|
|
|
+ qset = cm.Notices.objects.filter(receive_user=doctor_id).order_by("-id")
|
|
|
+ qdata = list(qset.values())
|
|
|
+ cm.Notices.objects.filter(receive_user=doctor_id).update(
|
|
|
+ visit_user = doctor_id
|
|
|
+ )
|
|
|
+
|
|
|
+ return qset.count(),qdata
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def get_doctor_new_notice_list(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ doctor_id = kwargs.get("doctor_id")
|
|
|
+
|
|
|
+ qset = cm.Notices.objects.filter(receive_user=doctor_id).exclude(visit_user=doctor_id)
|
|
|
+ qdata = list(qset.values())
|
|
|
+
|
|
|
+ return qset.count(),qdata
|
|
|
+
|
|
|
+
|
|
|
+def del_record(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ delid = kwargs.get("id")
|
|
|
+ cm.PatientRecords.objects.filter(id=delid).update(isdelete=1)
|
|
|
+
|
|
|
+
|
|
|
+def update_patient_info(request):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ user = request.user
|
|
|
+ qdata = request.json
|
|
|
+
|
|
|
+ uid = user.get("id")
|
|
|
+ role = user.get("role")
|
|
|
+ sex = qdata.get("sex")
|
|
|
+ birthday = qdata.get("birthday")
|
|
|
+
|
|
|
+ cm.Patients.objects.filter(id=uid).update(
|
|
|
+ sex = sex,
|
|
|
+ birthday = birthday
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def get_search_patient(**kwargs):
|
|
|
+ """
|
|
|
+ """
|
|
|
+ name = kwargs.get("name")
|
|
|
+ phone = kwargs.get("phone")
|
|
|
+ qset = cm.Patients.objects.filter(name=name,phone=phone)
|
|
|
+ qdata = list(qset.values())
|
|
|
+ return qdata
|