73 lines
2.2 KiB
Python
Executable file
73 lines
2.2 KiB
Python
Executable file
#!/usr/bin/xvfb-run python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import six
|
|
|
|
if six.PY2:
|
|
import sys
|
|
reload(sys) # Reload does the trick!
|
|
sys.setdefaultencoding('utf8')
|
|
|
|
import os
|
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'ntuh.settings'
|
|
|
|
import django
|
|
django.setup()
|
|
|
|
|
|
from datetime import *
|
|
from dateutil.relativedelta import *
|
|
|
|
from django.db.models import *
|
|
|
|
# from ntuhgov import xportal
|
|
from ntuhgov.portal_selenium import Login, ReportPathology
|
|
from registry.models import *
|
|
|
|
import json
|
|
|
|
import logging
|
|
FORMAT = '%(asctime)s %(levelname)s %(message)s'
|
|
logging.basicConfig(format=FORMAT, level=logging.INFO)
|
|
|
|
def SavePathology(ChartNo, SESSION = None):
|
|
# print(ChartNo, SESSION)
|
|
reports = ReportPathology(ChartNo, SESSION)
|
|
# print json.dumps(reports, ensure_ascii=False, indent=4, )
|
|
for r in reports:
|
|
p, created = PathologyReport.objects.get_or_create(PathCode = r['PathCode'])
|
|
p.ChartNo = r['ChartNo']
|
|
p.ReportKey = r['ReportKey']
|
|
p.ReportCode = r['ReportCode']
|
|
p.PersonID = r['PersonID']
|
|
# p.PathCode = r['PathCode']
|
|
p.SpecimenGetDate = r['SpecimenGetDate'].replace('/', '-').split(' ')[0]
|
|
p.ReportDate = r['ReportDate'].replace('/', '-').split(' ')[0]
|
|
p.url = r['url']
|
|
p.html = r['html']
|
|
p.save()
|
|
|
|
def ScanPathology(days = False):
|
|
SESSION=Login()
|
|
if days:
|
|
start = date.today() + relativedelta( days = -days )
|
|
ops = OPSchedule.objects.filter(OPDate__gt = start).order_by('OPDate')
|
|
LIMIT = 999999999
|
|
else:
|
|
ops = OPSchedule.objects.all().order_by('-OPDate')
|
|
LIMIT = 100
|
|
|
|
count = 0
|
|
for op in ops:
|
|
SpecimenGetDate = PathologyReport.objects.filter(ChartNo=op.PatChartNo).aggregate(Max('SpecimenGetDate'))
|
|
logging.info((op.OPDate, op.PatChartNo, SpecimenGetDate ))
|
|
if not SpecimenGetDate['SpecimenGetDate__max'] or SpecimenGetDate['SpecimenGetDate__max'] < op.OPDate:
|
|
logging.info( ' try to fetch it: %d' % count )
|
|
SavePathology(op.PatChartNo, SESSION)
|
|
count += 1
|
|
if count > LIMIT:
|
|
break
|
|
|
|
# SavePathology('2231486')
|
|
# ScanPathology()
|
|
ScanPathology(14)
|