adm-ntuh-net/ntuh/getop18.py
2024-12-12 10:19:16 +08:00

191 lines
4.6 KiB
Python
Executable file

#!/usr/bin/python
# -*- coding: utf-8 -*-
### 虞希禹要的 --- 全外科 --- 目前沒在用
# from django.core.management import setup_environ
# import settings
# setup_environ(settings)
#from django.conf import settings
CSV_FILE = "/shares/Public/2018/172_16_3_33_389.csv"
OUT_DIR = "/shares/Public/0/OP/"
import sys
reload(sys) # Reload does the trick!
sys.setdefaultencoding('utf8')
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'ntuh.settings'
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ntuh.settings")
#import django
#django.setup()
# from django.db.models.loading import get_models
# loaded_models = get_models()
from pprint import pprint
from datetime import date, datetime, timedelta
from dateutil.relativedelta import *
#from django.utils.html import strip_tags
#from django.core.exceptions import ObjectDoesNotExist
#from django.template.defaultfilters import removetags
#from registry.models import *
#from registry.utils import SaveOP
# from ntuhgov.portal_spynner import Login, SimpleQueryOpSchedule
from ntuhgov.portal import operationnotelist, ShowOperationNote
from ntuhgov.portal_selenium import Login, SimpleQueryOpSchedule
from BeautifulSoup import BeautifulSoup
import csv
import calendar
import re
#def strip_tags(page):
# return ' '.join(BeautifulSoup(page).findAll(text=True))
def strip_tags(source): #strip the <script> tag
soup = BeautifulSoup(source)
to_extract = soup.findAll('script')
for item in to_extract:
item.extract()
# print soup
# exit()
return ' '.join(soup.findAll(text=True))
def prev_bounds(when=None):
if not when: when = datetime.datetime.today()
this_first = date(when.year, when.month, 1)
prev_end = this_first - timedelta(days=1)
prev_first = date(prev_end.year, prev_end.month, 1)
return prev_first.strftime("%Y/%m/%d"), prev_end.strftime("%Y/%m/%d")
def ScanOperationNote(Chart, SESSION=None, Forced = False):
if SESSION is None:
SESSION=Login()
ChartStr = str(Chart)
while len(ChartStr) < 7:
ChartStr='0'+ChartStr
# print Chart, ChartStr
KeyCode, KeyName = operationnotelist(ChartStr, SESSION)
# try:
## KeyCodeList, KeyNameList = operationnotelist(ChartStr, SESSION)
# KeyCode, KeyName = operationnotelist(ChartStr, SESSION)
# except:
# return
# KeyCode = KeyCodeList.split('|')
# KeyName = KeyNameList.split('|')
for i in range(len(KeyCode)):
department, date = KeyName[i].split('_')
workfile = '%s/%s.%s.%s.html' % (OUT_DIR, KeyCode[i], KeyName[i].replace('/','-'), Chart)
if os.path.isfile(workfile):
print('%s..........skipped' % workfile)
continue
content = ShowOperationNote(KeyCode[i], KeyName[i], SESSION)
if 'Assistants' not in content:
print('%s..........skipped' % workfile)
continue
print(workfile)
f = open(workfile, 'w')
f.write(content)
f.close()
# exit()
def DumpOPNote(PatSet):
for p in sorted(PatSet):
ScanOperationNote(p)
# exit()
def GetOP(DrCode):
PatSet = set()
# print('Getting ', DrCode)
today = datetime.today()
year = today.year
month = today.month
start = '%d/%d/1' % (year, month)
end = '%d/%d/%d'% (year, month, calendar.monthrange(year, month)[1])
results = SimpleQueryOpSchedule(DrCode, start, end)
for r in results:
PatSet.add(r['PatChartNo'])
# print (results)
# print(len(results), len(PatSet))
# if results:
# pprint(results[0])
# exit()
return PatSet
# http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/OPManagement/OPNoteInsertUpdate_V2.aspx?SESSION=47F69BA83CE5ED472AA203B9CE3CFC8B91&OperationIDSE=2017-T0-114640
VS_LIST = []
def ReadCN():
pattern = 'CN=(\d+),'
with open(CSV_FILE) as csvfile:
# spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
spamreader = csv.reader((line.replace('\0','') for line in csvfile), delimiter=',', quotechar='"')
for row in spamreader:
join_row = ', '.join(row)
if '主治醫師' in join_row:
m = re.search(pattern, join_row)
CN = m.group(1)
VS_LIST.append(CN)
# print(join_row)
# print(CN)
# exit()
# print(', '.join(row))
print(sorted(VS_LIST))
# print (len(VS))
for vs in sorted(VS_LIST):
PatSet = GetOP(vs)
print(vs, sorted(PatSet))
if PatSet:
DumpOPNote(PatSet)
# exit()
ReadCN()
exit()
ScanOPSchedule()
#DumpOPNote()