Gogs 1 年之前
父节点
当前提交
1aa9659639
共有 100 个文件被更改,包括 1193 次插入44 次删除
  1. 3 0
      .gitignore
  2. 二进制
      src/account/__init__.pyc
  3. 二进制
      src/account/cauth.pyc
  4. 25 2
      src/account/control_user.py
  5. 二进制
      src/account/control_user.pyc
  6. 二进制
      src/account/models.pyc
  7. 二进制
      src/account/password_handle.pyc
  8. 2 0
      src/account/urls_backstage.py
  9. 二进制
      src/account/urls_backstage.pyc
  10. 35 1
      src/account/views.py
  11. 二进制
      src/account/views.pyc
  12. 二进制
      src/common/__init__.pyc
  13. 二进制
      src/common/captcha.pyc
  14. 二进制
      src/common/common_control.pyc
  15. 37 0
      src/common/common_functions.py
  16. 二进制
      src/common/common_functions.pyc
  17. 二进制
      src/common/common_notice.pyc
  18. 二进制
      src/common/constant.pyc
  19. 1 1
      src/common/core_views.py
  20. 二进制
      src/common/core_views.pyc
  21. 二进制
      src/common/error_info.pyc
  22. 二进制
      src/common/logger.pyc
  23. 二进制
      src/common/migrations/0001_initial.pyc
  24. 二进制
      src/common/migrations/0002_auto_20220620_2043.pyc
  25. 二进制
      src/common/migrations/0003_auto_20220620_2043.pyc
  26. 二进制
      src/common/migrations/0004_auto_20220620_2044.pyc
  27. 二进制
      src/common/migrations/0005_auto_20220620_2046.pyc
  28. 二进制
      src/common/migrations/0006_auto_20220620_2047.pyc
  29. 二进制
      src/common/migrations/0007_auto_20220620_2048.pyc
  30. 二进制
      src/common/migrations/0008_auto_20220620_2048.pyc
  31. 二进制
      src/common/migrations/0009_auto_20220620_2052.pyc
  32. 二进制
      src/common/migrations/0010_auto_20220620_2053.pyc
  33. 二进制
      src/common/migrations/0011_remove_matchgroup_charge.pyc
  34. 二进制
      src/common/migrations/0012_matchgroup_charge.pyc
  35. 二进制
      src/common/migrations/0013_match_match_status.pyc
  36. 二进制
      src/common/migrations/0014_player_player_type.pyc
  37. 二进制
      src/common/migrations/0015_auto_20220623_2255.pyc
  38. 二进制
      src/common/migrations/0016_userinfo_player_type.pyc
  39. 二进制
      src/common/migrations/0017_auto_20220624_1038.pyc
  40. 二进制
      src/common/migrations/0018_auto_20220624_1058.pyc
  41. 二进制
      src/common/migrations/0019_auto_20220705_1444.pyc
  42. 二进制
      src/common/migrations/0020_consult.pyc
  43. 二进制
      src/common/migrations/0021_auto_20220725_0942.pyc
  44. 二进制
      src/common/migrations/0022_usermatch_fund.pyc
  45. 二进制
      src/common/migrations/0023_delete_usermatch.pyc
  46. 二进制
      src/common/migrations/0024_usermatch.pyc
  47. 二进制
      src/common/migrations/0025_userstock_user_id.pyc
  48. 二进制
      src/common/migrations/0026_remove_signuporder_signup_name.pyc
  49. 二进制
      src/common/migrations/0027_signuporder_signup_name.pyc
  50. 二进制
      src/common/migrations/0028_auto_20230103_1724.pyc
  51. 二进制
      src/common/migrations/0029_wanzhuconsult_reply_user_id.pyc
  52. 二进制
      src/common/migrations/0030_auto_20230105_1513.pyc
  53. 二进制
      src/common/migrations/0031_auto_20230105_1514.pyc
  54. 二进制
      src/common/migrations/0032_auto_20230112_1100.pyc
  55. 二进制
      src/common/migrations/0033_article_isbanner.pyc
  56. 二进制
      src/common/migrations/0034_match_post_start_time.pyc
  57. 二进制
      src/common/migrations/0035_auto_20230523_0026.pyc
  58. 二进制
      src/common/migrations/0036_patients_doctor_id.pyc
  59. 二进制
      src/common/migrations/0037_auto_20230527_1610.pyc
  60. 二进制
      src/common/migrations/0038_auto_20230529_1645.pyc
  61. 二进制
      src/common/migrations/0039_patientcases_doctor_id.pyc
  62. 二进制
      src/common/migrations/0040_auto_20230531_0100.pyc
  63. 二进制
      src/common/migrations/0041_sysuserinfo.pyc
  64. 二进制
      src/common/migrations/0042_delete_userinfo.pyc
  65. 二进制
      src/common/migrations/0043_delete_sysuserinfo.pyc
  66. 二进制
      src/common/migrations/0044_sysuserinfo.pyc
  67. 二进制
      src/common/migrations/0045_patientcases_doctor_name.pyc
  68. 二进制
      src/common/migrations/0046_auto_20230602_2148.pyc
  69. 二进制
      src/common/migrations/0047_useragreement.pyc
  70. 二进制
      src/common/migrations/0048_auto_20230611_1501.pyc
  71. 二进制
      src/common/migrations/0049_patientrecords_zssjt0.pyc
  72. 20 0
      src/common/migrations/0050_patientcases_status.py
  73. 20 0
      src/common/migrations/0051_doctors_ename.py
  74. 28 0
      src/common/migrations/0052_phonecoderecord.py
  75. 20 0
      src/common/migrations/0053_phonecoderecord_result.py
  76. 20 0
      src/common/migrations/0054_patientcases_isdelete.py
  77. 25 0
      src/common/migrations/0055_auto_20230920_0024.py
  78. 20 0
      src/common/migrations/0056_patientrecords_patient_phone.py
  79. 35 0
      src/common/migrations/0057_bleedrecords.py
  80. 31 0
      src/common/migrations/0058_notices.py
  81. 20 0
      src/common/migrations/0059_patientrecords_isdelete.py
  82. 35 0
      src/common/migrations/0060_auto_20240526_1609.py
  83. 二进制
      src/common/migrations/__init__.pyc
  84. 71 0
      src/common/models.py
  85. 二进制
      src/common/models.pyc
  86. 二进制
      src/common/views.pyc
  87. 二进制
      src/demo.xls
  88. 二进制
      src/doctor/__init__.pyc
  89. 51 0
      src/doctor/calc.py
  90. 二进制
      src/doctor/calc.pyc
  91. 28 3
      src/doctor/constants.py
  92. 二进制
      src/doctor/constants.pyc
  93. 二进制
      src/doctor/control_auth.pyc
  94. 584 36
      src/doctor/controls.py
  95. 二进制
      src/doctor/controls.pyc
  96. 二进制
      src/doctor/models.pyc
  97. 60 1
      src/doctor/pkcalc.py
  98. 二进制
      src/doctor/pkcalc.pyc
  99. 22 0
      src/doctor/urls_backstage.py
  100. 0 0
      src/doctor/urls_backstage.pyc

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+templates/*
+*.txt
+*.pyc

二进制
src/account/__init__.pyc


二进制
src/account/cauth.pyc


+ 25 - 2
src/account/control_user.py

@@ -245,6 +245,8 @@ def login_user_by_token(request):
     phone = info.get('phone','')
     phcode = info.get('phcode')
     role = info.get('role')
+    openid = info.get("openid")
+    tag = info.get("tag")
 
     if not phone:
         raise ce.TipException(u"缺少手机号!")
@@ -252,17 +254,22 @@ def login_user_by_token(request):
         raise ce.TipException(u"缺少验证码!")
     org_phcode = ccc.cache.get(phone)
 
-    #if not org_phcode == phcode:
-    #    raise ce.TipException(u"验证码错误!")
+    if not org_phcode == phcode:
+        raise ce.TipException(u"验证码错误!")
 
     if str(role)=="1":
         user = cm.Doctors.objects.filter(phone=phone,name=name).first()
+        user.openid = openid
+        user.tag = tag
+        user.save()
     else:
         pinyin = ccf.get_name_pinyin(name)
         code = pinyin + ccf.get_now_str("%Y%m%d")
         user,flag = cm.Patients.objects.get_or_create(phone=phone,name=name)
         user.name = name
         user.code = code
+        user.openid = openid
+        user.tag = tag
         user.save()
 
     if not user:
@@ -287,3 +294,19 @@ def get_authinfo_by_token(request):
     user["role"] = role
 
     return user
+
+
+def get_userinfo_by_openid(request):
+    """
+    """
+    user = request.user
+    qdata = request.json
+    role = user.get("role")
+    openid = user.get("openid")
+    if str(role) == "1":
+        user = cm.Doctors.objects.filter(openid=openid).values().first()
+    else:
+        user = cm.Patients.objects.filter(openid=openid).values().first()
+    user["role"] = role
+
+    return user

二进制
src/account/control_user.pyc


二进制
src/account/models.pyc


二进制
src/account/password_handle.pyc


+ 2 - 0
src/account/urls_backstage.py

@@ -15,5 +15,7 @@ urlpatterns = [
 
     url(r'^doctor/login$', views.DoctorLoginView.as_view()),
     url(r'^doctor/authinfo$', views.DoctorAuthInfoView.as_view()),
+    url(r'^doctor/userinfo$', views.DoctorUserInfoView.as_view()),
+    url(r'^wxmp/openid$', views.WXMPOpenIdView.as_view()),
 ]
 

二进制
src/account/urls_backstage.pyc


+ 35 - 1
src/account/views.py

@@ -14,6 +14,8 @@ from utils.cloopen_sms import cloopensms
 #from utils.aliyun_sms import send_verify_code,send_signup_success
 import common.common_control as ccc
 from utils.submail import send_verify_code
+import common.models as cm
+import datetime
 
 class GetPhoneCodeView(cv.BaseView):
     def send_resetpwd_code_msg(self,phones,content):
@@ -30,8 +32,16 @@ class GetPhoneCodeView(cv.BaseView):
         qdata = request.json
         phone = qdata.get("phone")
         code = "%s%s%s%s" % (random.randint(0,9),random.randint(0,9),random.randint(0,9),random.randint(0,9))
-        send_verify_code(phone,code)
+        rst = send_verify_code(phone,code)
         ccc.cache.set(phone,code,120)
+        obj,flag = cm.PhoneCodeRecord.objects.get_or_create(
+            phone = phone, 
+        )
+        obj.code = code
+        obj.result = rst
+        obj.ctime = datetime.datetime.now()
+        obj.save()
+        return rst
 
     def post(self, request):
         """#获取短信验证码
@@ -154,3 +164,27 @@ class DoctorAuthInfoView(cv.AuthView):
         except Exception as e:
             cv.tracefail()
             return cv.to_fail(e)
+
+
+class DoctorUserInfoView(cv.BaseView):
+    def get(self,request):
+        """#获取用户信息(小程序)
+        """
+        try:
+            rst = cr.get_userinfo_by_openid(request)
+            return cv.to_suc(rst)
+        except Exception as e:
+            cv.tracefail()
+            return cv.to_fail(e)
+
+
+class WXMPOpenIdView(cv.BaseView):
+    def get(self,request):
+        """#获取用户信息(小程序)
+        """
+        try:
+            rst = cr.get_userinfo_by_openid(request)
+            return cv.to_suc(rst)
+        except Exception as e:
+            cv.tracefail()
+            return cv.to_fail(e)

二进制
src/account/views.pyc


二进制
src/common/__init__.pyc


二进制
src/common/captcha.pyc


二进制
src/common/common_control.pyc


+ 37 - 0
src/common/common_functions.py

@@ -7,6 +7,7 @@ import M2Crypto
 from PIL import Image,ImageDraw
 import requests
 from pypinyin import pinyin,lazy_pinyin
+import common.error_info as ce
 
 def get_month_dates(month="202008"):
     """
@@ -213,6 +214,42 @@ def calc_age(birthday):
     years = (now - birdate).days/365
     return years
 
+
+def check_sign(func):
+    apikey = "9edf5d26-6907-4534-8907-e4c3f8ed53c8"
+    def __wrapper(*args,**kwargs):
+        print(kwargs)
+        timestamp = kwargs.get("timestamp")
+        #apikey = kwargs.get("apikey")
+        sign = kwargs.get("sign")
+
+        doctor_id = kwargs.get("doctor_id")
+        hospital_id = kwargs.get("hospital_id")
+        patient_id = kwargs.get("patient_id")
+
+        if abs(time.time() - int(timestamp)) > 60*10:
+            raise ce.TipException(u"请求超时!")
+
+        sign_str = "apikey=%s;timestamp=%s" % (apikey,timestamp)
+        if doctor_id:
+            sign_str = "apikey=%s;doctor_id=%s;timestamp=%s" % (apikey,doctor_id,timestamp)
+        if doctor_id and hospital_id:
+            sign_str = "apikey=%s;doctor_id=%s;hospital_id=%s;timestamp=%s" % (apikey,doctor_id,hospital_id,timestamp)
+        if doctor_id and hospital_id and patient_id:
+            sign_str = "apikey=%s;doctor_id=%s;hospital_id=%s;patient_id=%s;timestamp=%s" % (apikey,doctor_id,hospital_id,patient_id,timestamp)
+
+
+        req_sign = make_password(sign_str)
+        print(sign_str)
+        print(req_sign)
+        if not (sign == req_sign):
+            raise ce.TipException(u"签名错误!")
+
+        res = func(*args,**kwargs)
+        return res
+    return __wrapper
+
+
 if __name__ == "__main__":
     pass
     print make_password("hnwz@2021")

二进制
src/common/common_functions.pyc


二进制
src/common/common_notice.pyc


二进制
src/common/constant.pyc


+ 1 - 1
src/common/core_views.py

@@ -196,7 +196,7 @@ def to_suc(data={},code=0):
     info = {}
     info["data"] = data
     info["code"] = code
-    info = eval(str(info).replace("None",'""'))
+    #info = eval(str(info).replace("None",'""'))
     return JsonResponse(info,encoder=CusDjangoJSONEncoder)
 
 def to_fail(e=None):

二进制
src/common/core_views.pyc


二进制
src/common/error_info.pyc


二进制
src/common/logger.pyc


二进制
src/common/migrations/0001_initial.pyc


二进制
src/common/migrations/0002_auto_20220620_2043.pyc


二进制
src/common/migrations/0003_auto_20220620_2043.pyc


二进制
src/common/migrations/0004_auto_20220620_2044.pyc


二进制
src/common/migrations/0005_auto_20220620_2046.pyc


二进制
src/common/migrations/0006_auto_20220620_2047.pyc


二进制
src/common/migrations/0007_auto_20220620_2048.pyc


二进制
src/common/migrations/0008_auto_20220620_2048.pyc


二进制
src/common/migrations/0009_auto_20220620_2052.pyc


二进制
src/common/migrations/0010_auto_20220620_2053.pyc


二进制
src/common/migrations/0011_remove_matchgroup_charge.pyc


二进制
src/common/migrations/0012_matchgroup_charge.pyc


二进制
src/common/migrations/0013_match_match_status.pyc


二进制
src/common/migrations/0014_player_player_type.pyc


二进制
src/common/migrations/0015_auto_20220623_2255.pyc


二进制
src/common/migrations/0016_userinfo_player_type.pyc


二进制
src/common/migrations/0017_auto_20220624_1038.pyc


二进制
src/common/migrations/0018_auto_20220624_1058.pyc


二进制
src/common/migrations/0019_auto_20220705_1444.pyc


二进制
src/common/migrations/0020_consult.pyc


二进制
src/common/migrations/0021_auto_20220725_0942.pyc


二进制
src/common/migrations/0022_usermatch_fund.pyc


二进制
src/common/migrations/0023_delete_usermatch.pyc


二进制
src/common/migrations/0024_usermatch.pyc


二进制
src/common/migrations/0025_userstock_user_id.pyc


二进制
src/common/migrations/0026_remove_signuporder_signup_name.pyc


二进制
src/common/migrations/0027_signuporder_signup_name.pyc


二进制
src/common/migrations/0028_auto_20230103_1724.pyc


二进制
src/common/migrations/0029_wanzhuconsult_reply_user_id.pyc


二进制
src/common/migrations/0030_auto_20230105_1513.pyc


二进制
src/common/migrations/0031_auto_20230105_1514.pyc


二进制
src/common/migrations/0032_auto_20230112_1100.pyc


二进制
src/common/migrations/0033_article_isbanner.pyc


二进制
src/common/migrations/0034_match_post_start_time.pyc


二进制
src/common/migrations/0035_auto_20230523_0026.pyc


二进制
src/common/migrations/0036_patients_doctor_id.pyc


二进制
src/common/migrations/0037_auto_20230527_1610.pyc


二进制
src/common/migrations/0038_auto_20230529_1645.pyc


二进制
src/common/migrations/0039_patientcases_doctor_id.pyc


二进制
src/common/migrations/0040_auto_20230531_0100.pyc


二进制
src/common/migrations/0041_sysuserinfo.pyc


二进制
src/common/migrations/0042_delete_userinfo.pyc


二进制
src/common/migrations/0043_delete_sysuserinfo.pyc


二进制
src/common/migrations/0044_sysuserinfo.pyc


二进制
src/common/migrations/0045_patientcases_doctor_name.pyc


二进制
src/common/migrations/0046_auto_20230602_2148.pyc


二进制
src/common/migrations/0047_useragreement.pyc


二进制
src/common/migrations/0048_auto_20230611_1501.pyc


二进制
src/common/migrations/0049_patientrecords_zssjt0.pyc


+ 20 - 0
src/common/migrations/0050_patientcases_status.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2023-07-29 22:50
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0049_patientrecords_zssjt0'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='patientcases',
+            name='status',
+            field=models.SmallIntegerField(default=0, verbose_name='0/\u7f16\u8f91\u4e2d,1/\u7f16\u8f91\u5b8c\u6210'),
+        ),
+    ]

+ 20 - 0
src/common/migrations/0051_doctors_ename.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2023-08-02 01:34
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0050_patientcases_status'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='doctors',
+            name='ename',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u7528\u6237\u540d'),
+        ),
+    ]

+ 28 - 0
src/common/migrations/0052_phonecoderecord.py

@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2023-08-28 22:57
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0051_doctors_ename'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='PhoneCodeRecord',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u624b\u673a\u53f7')),
+                ('code', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u9a8c\u8bc1\u7801')),
+                ('ctime', models.DateTimeField(auto_now_add=True, verbose_name='\u521b\u5efa\u65f6\u95f4')),
+            ],
+            options={
+                'db_table': 'xyb_phcode_record',
+                'verbose_name': '\u7528\u6237\u534f\u8bae',
+            },
+        ),
+    ]

+ 20 - 0
src/common/migrations/0053_phonecoderecord_result.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2023-08-28 23:17
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0052_phonecoderecord'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='phonecoderecord',
+            name='result',
+            field=models.TextField(blank=True, max_length=255, null=True, verbose_name='\u53d1\u9001\u7ed3\u6784'),
+        ),
+    ]

+ 20 - 0
src/common/migrations/0054_patientcases_isdelete.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2023-09-20 00:21
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0053_phonecoderecord_result'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='patientcases',
+            name='isdelete',
+            field=models.SmallIntegerField(default=0, verbose_name='0/\u5426,1/\u5220\u9664'),
+        ),
+    ]

+ 25 - 0
src/common/migrations/0055_auto_20230920_0024.py

@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2023-09-20 00:24
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0054_patientcases_isdelete'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='patientcases',
+            name='del_doctor_id',
+            field=models.IntegerField(blank=True, null=True, verbose_name='\u533b\u751fId'),
+        ),
+        migrations.AddField(
+            model_name='patientcases',
+            name='del_doctor_name',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u533b\u751f\u540d\u79f0'),
+        ),
+    ]

+ 20 - 0
src/common/migrations/0056_patientrecords_patient_phone.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2024-02-27 22:48
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0055_auto_20230920_0024'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='patientrecords',
+            name='patient_phone',
+            field=models.CharField(blank=True, max_length=64, null=True, verbose_name='\u75c5\u4eba\u624b\u673a\u53f7'),
+        ),
+    ]

+ 35 - 0
src/common/migrations/0057_bleedrecords.py

@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2024-03-09 08:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0056_patientrecords_patient_phone'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='BleedRecords',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('patient_id', models.IntegerField(default=0, verbose_name='\u60a3\u8005Id')),
+                ('name', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u7528\u6237\u540d')),
+                ('code', models.CharField(blank=True, max_length=255, null=True, verbose_name='\u7528\u6237\u7f16\u7801')),
+                ('bleed_time', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u51fa\u8840\u65f6\u95f4')),
+                ('bleed_part', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u51fa\u8840\u90e8\u4f4d')),
+                ('bleed_part_detail', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u51fa\u8840\u8be6\u7ec6\u90e8\u4f4d')),
+                ('bleed_part_desc', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u51fa\u8840\u8be6\u7ec6\u90e8\u4f4d\u63cf\u8ff0')),
+                ('bleed_reason', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u51fa\u8840\u539f\u56e0')),
+                ('bleed_level', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u51fa\u8840\u7a0b\u5ea6')),
+                ('ctime', models.DateTimeField(auto_now_add=True, verbose_name='\u521b\u5efa\u65f6\u95f4')),
+            ],
+            options={
+                'db_table': 'xyb_patient_bleed_records',
+                'verbose_name': '\u60a3\u8005\u51fa\u8840\u8bb0\u5f55',
+            },
+        ),
+    ]

+ 31 - 0
src/common/migrations/0058_notices.py

@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2024-03-10 09:59
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0057_bleedrecords'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Notices',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('send_user', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u6d88\u606f\u53d1\u9001\u8005')),
+                ('receive_user', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u6d88\u606f\u63a5\u6536\u8005')),
+                ('visit_user', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u6d88\u606f\u67e5\u770b\u8005')),
+                ('msg_title', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u6d88\u606f\u6807\u9898')),
+                ('msg_content', models.CharField(blank=True, max_length=64, null=True, verbose_name='\u6d88\u606f\u5185\u5bb9')),
+                ('ctime', models.DateTimeField(auto_now_add=True, verbose_name='\u521b\u5efa\u65f6\u95f4')),
+            ],
+            options={
+                'db_table': 'xyb_notices',
+                'verbose_name': '\u6d88\u606f\u901a\u77e5',
+            },
+        ),
+    ]

+ 20 - 0
src/common/migrations/0059_patientrecords_isdelete.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2024-04-07 19:43
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0058_notices'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='patientrecords',
+            name='isdelete',
+            field=models.SmallIntegerField(default=0, verbose_name='0/\u5426,1/\u5220\u9664'),
+        ),
+    ]

+ 35 - 0
src/common/migrations/0060_auto_20240526_1609.py

@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2024-05-26 16:09
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('common', '0059_patientrecords_isdelete'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='doctors',
+            name='openid',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u7528\u6237\u540d'),
+        ),
+        migrations.AddField(
+            model_name='doctors',
+            name='tag',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u6765\u6e90'),
+        ),
+        migrations.AddField(
+            model_name='patients',
+            name='openid',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='openid'),
+        ),
+        migrations.AddField(
+            model_name='patients',
+            name='tag',
+            field=models.CharField(blank=True, max_length=255, null=True, verbose_name='\u6765\u6e90'),
+        ),
+    ]

二进制
src/common/migrations/__init__.pyc


+ 71 - 0
src/common/models.py

@@ -7,6 +7,7 @@ class Doctors(models.Model):
     """医生表
     """
     name = models.CharField(u"用户名", max_length=255, blank=True,null=True)
+    ename = models.CharField(u"用户名", max_length=255, blank=True,null=True)
     phone = models.CharField(u"手机号", max_length=64, blank=True,null=True)
     avatar = models.TextField(u"头像", max_length=255, blank=True,null=True)
     role = models.SmallIntegerField(u"1/大医生,2/中医生,3/小医生",default=3)
@@ -15,6 +16,8 @@ class Doctors(models.Model):
     ctime = models.DateTimeField(u"创建时间", auto_now_add=True)
     parent_id = models.IntegerField(u"带教医生Id",default=0)
     parent_name = models.CharField(u"带教医生姓名", max_length=255, blank=True,null=True)
+    openid = models.CharField(u"用户名", max_length=255, blank=True,null=True)
+    tag = models.CharField(u"来源", max_length=255, blank=True,null=True)
 
     class Meta:
         db_table = "xyb_doctors"
@@ -37,6 +40,8 @@ class Patients(models.Model):
     phone = models.CharField(u"手机号", max_length=64, blank=True,null=True)
     avatar = models.TextField(u"头像", max_length=255, blank=True,null=True)
     ctime = models.DateTimeField(u"创建时间", auto_now_add=True)
+    openid = models.CharField(u"openid", max_length=255, blank=True,null=True)
+    tag = models.CharField(u"来源", max_length=255, blank=True,null=True)
 
     class Meta:
         db_table = "xyb_patients"
@@ -89,6 +94,10 @@ class PatientCases(models.Model):
     ckmpro = models.CharField(u"参考使用产品", max_length=64, blank=True,null=True)
     ckmfreq = models.CharField(u"参考使用频次", max_length=64, blank=True,null=True)
     ckzsjl = models.IntegerField(u"参考注射剂量", blank=True,null=True)
+    status = models.SmallIntegerField(u"0/编辑中,1/编辑完成",default=0)
+    isdelete = models.SmallIntegerField(u"0/否,1/删除",default=0)
+    del_doctor_id = models.IntegerField(u"医生Id",blank=True,null=True)
+    del_doctor_name = models.CharField(u"医生名称", max_length=255, blank=True,null=True)
 
     ctime = models.DateTimeField(u"创建时间", auto_now_add=True)
 
@@ -111,6 +120,8 @@ class PatientRecords(models.Model):
     mpro = models.CharField(u"使用产品", max_length=64, blank=True,null=True)
     mdose = models.IntegerField(u"使用剂量", blank=True,null=True)
     zssjt0 = models.CharField(u"注射时间t0", blank=True,null=True,max_length=20)
+    patient_phone = models.CharField(u"病人手机号", max_length=64, blank=True,null=True)
+    isdelete = models.SmallIntegerField(u"0/否,1/删除",default=0)
 
     ctime = models.DateTimeField(u"创建时间", auto_now_add=True)
 
@@ -162,3 +173,63 @@ class UserAgreement(models.Model):
         db_table = "user_agreenment"
         verbose_name = u"用户协议"
         app_label = "common"
+
+
+class PhoneCodeRecord(models.Model):
+    """短信发送记录
+    """
+    phone = models.CharField(u"手机号", max_length=255, blank=True,null=True)
+    code = models.CharField(u"验证码", max_length=255, blank=True,null=True)
+    result = models.TextField(u"发送结构", max_length=255, blank=True,null=True)
+
+    ctime = models.DateTimeField(u"创建时间", auto_now_add=True)
+
+    class Meta:
+        db_table = "xyb_phcode_record"
+        verbose_name = u"用户协议"
+        app_label = "common"
+
+
+class BleedRecords(models.Model):
+    """患者出血记录
+    """
+    patient_id = models.IntegerField(u"患者Id",default=0)
+    name = models.CharField(u"用户名", max_length=255, blank=True,null=True)
+    code = models.CharField(u"用户编码", max_length=255, blank=True,null=True)
+
+    bleed_time = models.CharField(u"出血时间", max_length=64, blank=True,null=True)
+    bleed_part = models.CharField(u"出血部位", max_length=64, blank=True,null=True)
+    bleed_part_detail = models.CharField(u"出血详细部位", max_length=64, blank=True,null=True)
+    bleed_part_desc = models.CharField(u"出血详细部位描述", max_length=64, blank=True,null=True)
+    bleed_reason = models.CharField(u"出血原因", max_length=64, blank=True,null=True)
+    bleed_level = models.CharField(u"出血程度", max_length=64, blank=True,null=True)
+
+    ctime = models.DateTimeField(u"创建时间", auto_now_add=True)
+
+    class Meta:
+        db_table = "xyb_patient_bleed_records"
+        verbose_name = u"患者出血记录"
+        app_label = "common"
+
+    def __str__(self):
+        return u"{}){}".format(self.id, self.name)
+
+
+class Notices(models.Model):
+    """消息通知
+    """
+    send_user = models.CharField(u"消息发送者", max_length=64, blank=True,null=True)
+    receive_user = models.CharField(u"消息接收者", max_length=64, blank=True,null=True)
+    visit_user = models.CharField(u"消息查看者", max_length=64, blank=True,null=True)
+    msg_title = models.CharField(u"消息标题", max_length=64, blank=True,null=True)
+    msg_content = models.CharField(u"消息内容", max_length=64, blank=True,null=True)
+
+    ctime = models.DateTimeField(u"创建时间", auto_now_add=True)
+
+    class Meta:
+        db_table = "xyb_notices"
+        verbose_name = u"消息通知"
+        app_label = "common"
+
+    def __str__(self):
+        return u"{}){}".format(self.id, self.name)

二进制
src/common/models.pyc


二进制
src/common/views.pyc


二进制
src/demo.xls


二进制
src/doctor/__init__.pyc


+ 51 - 0
src/doctor/calc.py

@@ -185,6 +185,7 @@ def calc_bsq(cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx):
     hf1 = calc_half_rate1(cxsjt1,cxsjt2,t1hx,t2hx,jchx)
     hf2 = calc_half_rate2(cxsjt1,cxsjt3,t1hx,t3hx,jchx)
     hf3 = calc_half_rate3(cxsjt2,cxsjt3,t2hx,t3hx,jchx)
+
     bsq = (hf1+hf2+hf3)/3
     return bsq
 
@@ -203,6 +204,32 @@ def calc_lyl(zssjt0,cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx,zsjl,bltz):
     lyl = (lyrate1+lyrate2+lyrate3)/3
     return lyl
 
+
+def calc_bsq2(cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx):
+    """半衰期
+    """
+    hf1 = calc_half_rate1(cxsjt1,cxsjt2,t1hx,t2hx,jchx)
+    return hf1
+
+    hf2 = calc_half_rate2(cxsjt1,cxsjt3,t1hx,t3hx,jchx)
+    hf3 = calc_half_rate3(cxsjt2,cxsjt3,t2hx,t3hx,jchx)
+    bsq = (hf1+hf2+hf3)/3
+    return bsq
+
+def calc_lyl2(zssjt0,cxsjt1,cxsjt2,cxsjt3,t1hx,t2hx,t3hx,jchx,zsjl,bltz):
+    """
+    """
+    hf1 = calc_half_rate1(cxsjt1,cxsjt2,t1hx,t2hx,jchx)
+    lyrate1 = calc_lyrate1(t1hx,jchx,cxsjt1,zssjt0,hf1,zsjl,bltz)
+    return lyrate1
+
+    hf2 = calc_half_rate2(cxsjt1,cxsjt3,t1hx,t3hx,jchx)
+    lyrate2 = calc_lyrate2(t1hx,jchx,cxsjt1,zssjt0,hf2,zsjl,bltz)
+    hf3 = calc_half_rate3(cxsjt2,cxsjt3,t2hx,t3hx,jchx)
+    lyrate3 = calc_lyrate3(t2hx,jchx,cxsjt2,zssjt0,hf3,zsjl,bltz)
+    lyl = (lyrate1+lyrate2+lyrate3)/3
+    return lyl
+
 def calc_yqfzhx(zsjl,bltz,jchx):
     """预期峰值活性计算
     """
@@ -257,6 +284,30 @@ def calc_FVIII(zsjl,lyrate,bltz,t1,t2,hf):
     print(rst)
     return rst
 
+def calc_patient_mbghx_remain_time(bsq,mbghx,yqfzhx,t1):
+    """
+    """
+    #bsq = decimal.Decimal(bsq)
+    t1 = str_to_datetime(t1)
+    t2 = datetime.datetime.now()
+    print(t1,999999999999)
+    t = t2-t1
+    #h = decimal.Decimal(t.total_seconds())/decimal.Decimal(3600)
+    h = t.total_seconds()/3600.00
+    #remain_time = (bsq * (decimal.Decimal(math.log(mbghx)) - decimal.Decimal(math.log(yqfzhx)))/math.log(decimal.Decimal(0.5))) - h*24
+
+    remain_time = (math.log(mbghx,10) - math.log(yqfzhx,10))*bsq / math.log(0.5,10) - h
+    remain_time = round(remain_time,2)
+    return remain_time
+
+
+def str_to_datetime(tm,format="%Y-%m-%d %H:%M"):
+    """
+    """
+    datetimestr = datetime.datetime.strptime(tm,format)
+    return datetimestr
+
+
 if __name__ == "__main__":
     print("半衰期")
     t1 = "2022-08-20 08:00"

二进制
src/doctor/calc.pyc


+ 28 - 3
src/doctor/constants.py

@@ -12,14 +12,39 @@ ZSJG_HOURS = {
     u"每周2次":84,
     u"每周3次":56,
     u"每天1次":24,
-    u"每2天1次":48
+    u"每2天1次":48,
+    u"每3天1次":72
 }
 
 #谷活性取值索引
 ZSJG_HOURS_GHX = {
     u"每天1次":5,
     u"每2天1次":10,
+    u"每3天1次":15,
     u"每周3次":35,
-    u"每周2次":34,
-    u"每周1次":34
+    u"每周2次":35,
+    u"每周1次":35
+}
+
+#出血配置
+BLEED_OPTIONS = {
+    u"chux_parts":[u"关节出血",u"其他部位"],
+    u"关节出血":[
+        u"膝关节(左)",
+        u"膝关节(右)",
+        u"肘关节(左)",
+        u"肘关节(右)",
+        u"踝关节(左)",
+        u"踝关节(右)",
+        u"肩关节(左)",
+        u"肩关节(右)",
+        u"腕关节(左)",
+        u"腕关节(右)",
+        u"髋关节(左)",
+        u"髋关节(右)",
+        u"其他关节"
+    ],
+    u"chux_reason":[u"外伤性出血",u"自发性出血"],
+    u"chux_level":[u"轻度",u"中度",u"重度"]
+    
 }

二进制
src/doctor/constants.pyc


二进制
src/doctor/control_auth.pyc


+ 584 - 36
src/doctor/controls.py

@@ -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

二进制
src/doctor/controls.pyc


二进制
src/doctor/models.pyc


+ 60 - 1
src/doctor/pkcalc.py

@@ -6,7 +6,7 @@ import numpy as np
 import decimal
 
 #注射频次
-ZSPC_LIST = [u"每天1次",u"每2天1次",u"每周3次",u"每周2次",u"每周1次"]
+ZSPC_LIST = [u"每天1次",u"每2天1次",u"每周3次",u"每周2次",u"每周1次","每3天1次"]
 
 PK_XDATA = [0,6,12,18,24,24.01,30,36,42,48,48.01,54,60,66,72,72.01,78,84,90,
     96,96.01,102,108,114,120,120.01,126,132,138,144,144.01,150,156,162,168,
@@ -81,6 +81,47 @@ def calc_pk_lines_data(zspc,zsjl,lyl,bltz,bsq):
 
             pk_ydata.append(data)
 
+    if zspc == u"每3天1次":
+        qxdata = baseData
+        curi = 0
+        data = 0
+        for i,t in enumerate(PK_XDATA):
+            if curi > 14:
+                curi=0
+            if curi==0:
+                data = qxdata
+            if curi==1:
+                data = qxdata*pow(xs05,decimal.Decimal(6)/bsq) 
+            if curi==2:
+                data = qxdata*pow(xs05,decimal.Decimal(12)/bsq) 
+            if curi==3:
+                data = qxdata*pow(xs05,decimal.Decimal(18)/bsq) 
+            if curi==4:
+                data = qxdata*pow(xs05,decimal.Decimal(24)/bsq) 
+            if curi==5:
+                data = qxdata*pow(xs05,decimal.Decimal(24.01)/bsq) 
+            if curi==6:
+                data = qxdata*pow(xs05,decimal.Decimal(30)/bsq) 
+            if curi==7:
+                data = qxdata*pow(xs05,decimal.Decimal(36)/bsq) 
+            if curi==8:
+                data = qxdata*pow(xs05,decimal.Decimal(42)/bsq) 
+            if curi==9:
+                data = qxdata*pow(xs05,decimal.Decimal(48)/bsq) 
+            if curi==10:
+                data = qxdata*pow(xs05,decimal.Decimal(48.01)/bsq) 
+            if curi==11:
+                data = qxdata*pow(xs05,decimal.Decimal(54)/bsq) 
+            if curi==12:
+                data = qxdata*pow(xs05,decimal.Decimal(60)/bsq) 
+            if curi==13:
+                data = qxdata*pow(xs05,decimal.Decimal(66)/bsq) 
+            if curi==14:
+                data = qxdata*pow(xs05,decimal.Decimal(72)/bsq) 
+            curi += 1
+
+            pk_ydata.append(data)
+
     if zspc == u"每周3次":
         qxdata = baseData
         curi = 0
@@ -273,6 +314,24 @@ def calc_gt1_time(bsq,zsjl,lyl,bltz):
     return rst
 
 
+def calc_gt15_time(bsq,zsjl,lyl,bltz):
+    """
+    """
+    bsq = decimal.Decimal(bsq)
+    zsjl = decimal.Decimal(zsjl)
+    lyl = decimal.Decimal(lyl)
+    bltz = decimal.Decimal(bltz)
+
+    bs05 = decimal.Decimal(math.log(decimal.Decimal(0.5)))
+    bs1 = decimal.Decimal(15)
+    zlb = bs1/(zsjl*lyl*2/bltz)
+
+    #rst = bsq*math.log(1/(zsjl*lyl*2/bltz))/math.log(0.5)
+    rst = bsq*decimal.Decimal(math.log(zlb))/bs05
+    rst = round(rst,2)
+    return rst
+
+
 def calc_actual_fhx(zsjl,lyl,bltz):
     """
     """

二进制
src/doctor/pkcalc.pyc


+ 22 - 0
src/doctor/urls_backstage.py

@@ -17,6 +17,28 @@ urlpatterns = [
     url(r'^patient/useragreement$', views.UserAgreementView.as_view()),
     url(r'^patient/case/edit$', views.PatientCaseEditView.as_view()),
     url(r'^patient/pro/list$', views.PatientProListView.as_view()),
+    url(r'^patient$', views.PatientsView.as_view()),
+    url(r'^patient/case/doing$', views.PatientCaseDoingView.as_view()),
+    url(r'^patient/case/calc/mczsjl$', views.PatientCaseCalcMCZSJL.as_view()),
+    url(r'^patient/doctor/list$', views.PatientDoctorList.as_view()),
+    url(r'^patient/list$', views.PatientList.as_view()),
+    url(r'^patient/record/latest$', views.PatientLatestRecordView.as_view()),
+    url(r'^patient/mbghx/timecalc$', views.PatientMBGHXCalcTimeView.as_view()),
+    url(r'^patient/bleed/options$', views.PatientBleedOptionsView.as_view()),
+    url(r'^patient/bleed/records$', views.PatientBleedRecordsView.as_view()),
+    url(r'^patient/bleed/records/list$', views.PatientBleedRecordsListView.as_view()),
+    url(r'^patient/bleed/records/statistic$', views.PatientBleedRecordsStatisticView.as_view()),
+    url(r'^patient/doctor/notice/list$', views.PatientDoctorNoticeList.as_view()),
+    url(r'^patient/doctor/notice/new$', views.PatientDoctorNoticeNewList.as_view()),
+    url(r'^patient/records/delete$', views.PatientRecordsDeleteView.as_view()),
+    url(r'^patient/info/update$', views.PatientInfoUpdateView.as_view()),
+    url(r'^patient/authinfo/search$', views.PatientAuthInfoSearchView.as_view()),
+    #外部接口
+    url(r'^external/patient/case/list$', views.ExternalPatientCasesListView.as_view()),
+    url(r'^external/patient/records/list$', views.ExternalPatientRecordsListView.as_view()),
+    url(r'^external/patient/case/pkline$', views.ExternalPatientCasePklineView.as_view()),
+    url(r'^external/patient/bleed/records/list$', views.ExternalPatientBleedRecordsListView.as_view()),
+    url(r'^external/patient/bleed/records/statistic$', views.ExternalPatientBleedRecordsStatisticView.as_view()),
 
 ]
 

+ 0 - 0
src/doctor/urls_backstage.pyc


部分文件因为文件数量过多而无法显示