#!/usr/bin/python # coding=utf-8 ### 已移至 M5A99FX 執行 ### from operator import * from ntuhgov.portal_spynner import * import collections import datetime import multiprocessing import os import time import sys reload(sys) sys.setdefaultencoding('utf8') def get_path(): import os,sys return os.path.realpath(os.path.dirname(sys.argv[0])) def jprint(a): import json print json.dumps(a, ensure_ascii = False, indent=4, sort_keys=True) import csv # def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs): # # csv.py doesn't do Unicode; encode temporarily as UTF-8: # csv_reader = csv.reader(utf_8_encoder(unicode_csv_data), # dialect=dialect, **kwargs) # for row in csv_reader: # # decode UTF-8 back to Unicode, cell by cell: # yield [unicode(cell, 'utf-8') for cell in row] # def utf_8_encoder(unicode_csv_data): # for line in unicode_csv_data: # yield line.encode('utf-8') def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs): csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs) for row in csv_reader: yield [unicode(cell, 'utf-8') for cell in row] # reader = csv.reader(open(get_path()+"/vs.csv", "rb")) reader = unicode_csv_reader(open(get_path()+"/vs.csv", "rb")) vs = {} for row in reader: # print row[1], row[0] vs[row[1]]=row[0] # exit() def find_dir(*paths): for path in paths: if os.path.isdir(path): return path return '' html_dir = find_dir( # '/Shared/public_html', '/home/xfr/workspace/media.ntuh.net/public_html', '/home/ntuh/domains/media.ntuh.net/public_html', '.') def DivCode(v): if v in vs: div = vs[v] else: div = 'Other' # print v, div return div def unf_start_end(a, b): StartDate = (datetime.date.today() + datetime.timedelta(days=a)).strftime('%Y/%m/%d') EndDate = (datetime.date.today() + datetime.timedelta(days=b)).strftime('%Y/%m/%d') print StartDate, EndDate list = WardQueryUncompletedChart(StartDate, EndDate) ''' { "主治": " ", "住院": " ", "姓名": "測試病人", "帳號": "", "床號": "YI2B2701", "序": "1", "病歷號": "Y800001", "科部": "SURG", "結束日": "2013/12/30", "註": " ", "逾期": "347", "開始/手術日": "2013/12/26", "類別": "" } ''' return list def unf(days=30, dest='unf.html'): list = unf_start_end(-365, 0) # list = unf_start_end(-180, 0) # list = unf_start_end(-90, 0) # list = unf_start_end(-60, 0) lt30 = [] ge30 = [] for r in list: if 'H' in r['病歷號']: continue if 'Y' in r['病歷號']: continue try: overdue = int(r['逾期']) except: continue if overdue < days: lt30.append(r) else: ge30.append(r) # # jprint(r) # print r['開始/手術日'], r['結束日'], r['主治'], r['住院'], r['逾期'] # # exit() vslt30 = collections.Counter([r['主治'] for r in lt30]) vsge30 = collections.Counter([r['主治'] for r in ge30]) dvlt30 = collections.Counter([DivCode(r['主治']) for r in lt30]) dvge30 = collections.Counter([DivCode(r['主治']) for r in ge30]) rlt30 = collections.Counter([r['住院'] for r in lt30]) rge30 = collections.Counter([r['住院'] for r in ge30]) print 'vslt30' for elem, cnt in vslt30.most_common(): print elem, cnt print 'vsge30' for elem, cnt in vsge30.most_common(): print elem, cnt dr1 = vslt30.most_common() resident1 = rlt30.most_common() division1 = dvlt30.most_common() dr2 = vsge30.most_common() resident2 = rge30.most_common() division2 = dvge30.most_common() print len(list), len(dr1), len(resident1) if len(dr1) < 2: return length = max( len(dr1), len(resident1), len(dr2), len(resident2)) print length result=[] result.append(['主治醫師','科別','份數','住院醫師','份數','主治醫師','科別','份數','住院醫師','份數']) d1 = 0 r1 = 0 d2 = 0 r2 = 0 for i in range(length): r = [] if i < len(dr1): r.append(dr1[i][0]) r.append(DivCode(dr1[i][0])) r.append(dr1[i][1]) d1 += dr1[i][1] else: r.append('') r.append('') r.append('') if i < len(resident1): r.append(resident1[i][0]) r.append(resident1[i][1]) r1 += resident1[i][1] else: r.append('') r.append('') if i < len(dr2): r.append(dr2[i][0]) r.append(DivCode(dr1[i][0])) r.append(dr2[i][1]) d2 += dr2[i][1] else: r.append('') r.append('') r.append('') if i < len(resident2): r.append(resident2[i][0]) r.append(resident2[i][1]) r2 += resident2[i][1] else: r.append('') r.append('') result.append(r) # output = open('/home/xfr/mysite/site_media/unf.html','w') print '%s/%s' % (html_dir,dest) output = open('%s/%s' % (html_dir,dest), 'w') print >> output, """ 外科部病歷未完成 """ print >> output, "" print >> output, "" % time.asctime() print >> output, "" for r in result: print >> output ,"" for c in r: print >> output, "" % c print >> output ,"" print >> output, "" print >> output, "" print >> output, "" % d1 print >> output, "" % r1 print >> output, "" % d2 print >> output, "" % r2 print >> output, "" print >> output, "
%s
逾期30日內30日以上
%s
---
總計%i總計%i總計%i總計%i
" print >> output, "
" print >> output, "" div1 = dict(division1) div2 = dict(division2) division3 = (dvlt30+dvge30).most_common() print >> output, "" for div, count in division3: print >> output, "" % div print >> output, "" print >> output, "" for div, count in division3: print >> output, "" % dvlt30[div] print >> output, "" print >> output, "" for div, count in division3: print >> output, "" % dvge30[div] print >> output, "" print >> output, "" for div, count in division3: print >> output, "" % count print >> output, "" print >> output, "
%s
逾期30日內%s
30日以上%s
合計%s
" print >> output, "" output.close() return result def unf_month(): day = datetime.date.today().day EndDate = datetime.date.today() + datetime.timedelta(days=-day) # unf1 = unf_sort(-365,-day) unf1 = unf_start_end(-365,-day) dr1 = unf1['dr'] resident1 = unf1['resident'] division1 = unf1['division'] length = max(len(dr1), len(resident1)) result=[] result.append(['主治醫師','科別','份數','住院醫師','份數']) d1 = 0 r1 = 0 for i in range(length): r = [] if i < len(dr1): r.append(dr1[i][0]) r.append(DivCode(dr1[i][0])) r.append(dr1[i][1]) d1 += dr1[i][1] else: r.append('') r.append('') r.append('') if i < len(resident1): r.append(resident1[i][0]) r.append(resident1[i][1]) r1 += resident1[i][1] else: r.append('') r.append('') result.append(r) # output = open('/home/xfr/mysite/site_media/unf.html','w') output = open('%s/unf_month.html' % html_dir, 'w') print >> output, """ 上月外科部病歷未完成 """ print >> output, "" print >> output, "" % time.asctime() print >> output, "" % EndDate for r in result: print >> output ,"" for c in r: print >> output, "" % c print >> output ,"" print >> output, "" print >> output, "" print >> output, "" % d1 print >> output, "" % r1 print >> output, "" print >> output, "
%s
%s前
%s
---
總計%i總計%i
" print >> output, "
" print >> output, "" div1 = dict(division1) # print div1 # print div2 # print div3 division_sort = sorted(list(div1), key=lambda x: -div1[x]) # print division_sort print >> output, "" for div in division_sort: print >> output, "" % div print >> output, "" print >> output, "" for div in division_sort: print >> output, "" % div1[div] print >> output, "" print >> output, "
%s
合計%s
" print >> output, "" output.close() return result # unf() if __name__ == '__main__': # Start foo as a process p = multiprocessing.Process(target=unf) p.start() # # Wait 10 seconds for foo # time.sleep(100) # Wait a maximum of 10 seconds for foo # Usage: join([timeout in seconds]) p.join(200) # If thread is active if p.is_alive(): print "foo is running... let's kill it..." # Terminate foo p.terminate() p.join()