From a8073abf2860fcd51ef1f7801cfd214b1f0c378d Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Wed, 10 Feb 2021 15:52:05 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E5=86=99+=E6=B5=8B=E4=BA=86=E7=9B=AE?= =?UTF-8?q?=E5=89=8D=E5=8F=AF=E4=BB=A5=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _class.py | 81 +- database/SELECT_EXAMPLE.py | 7 - database/database.py | 41 - database_export/csv/class_vol.csv | 1 - database_export/csv/stu_vol.csv | 16 - database_export/csv/student.csv | 2161 --------------------------- database_export/csv/user.csv | 71 - database_export/csv/volunteer.csv | 4 - database_export/zvms-no-data.sql | 64 - database_export/zvms.sql | 2320 ----------------------------- test/deco.py => deco.py | 31 +- main.py | 6 +- new_concept_backend/_class.py | 54 - new_concept_backend/callbacker.py | 54 - new_concept_backend/database.py | 36 - new_concept_backend/inquirior.py | 52 - new_concept_backend/main.py | 23 - new_concept_backend/oppressor.py | 109 -- new_concept_backend/user.py | 19 - new_concept_backend/volunteer.py | 77 - new_concept_backend/zvms.db | 0 oppressor.py | 75 +- student.py | 29 +- test/_class.py | 78 - test/database.py | 41 - test/main.py | 34 - test/oppressor.py | 158 -- test/student.py | 22 - test/tokenlib.py | 31 - test/user.py | 44 - test/volunteer.py | 142 -- tmp/converter.py | 71 - tmp/database.py | 41 - tmp/init.py | 78 - user.py | 69 +- volunteer.py | 173 ++- 36 files changed, 237 insertions(+), 6076 deletions(-) delete mode 100644 database/SELECT_EXAMPLE.py delete mode 100644 database/database.py delete mode 100644 database_export/csv/class_vol.csv delete mode 100644 database_export/csv/stu_vol.csv delete mode 100644 database_export/csv/student.csv delete mode 100644 database_export/csv/user.csv delete mode 100644 database_export/csv/volunteer.csv delete mode 100644 database_export/zvms-no-data.sql delete mode 100644 database_export/zvms.sql rename test/deco.py => deco.py (59%) delete mode 100644 new_concept_backend/_class.py delete mode 100644 new_concept_backend/callbacker.py delete mode 100644 new_concept_backend/database.py delete mode 100644 new_concept_backend/inquirior.py delete mode 100644 new_concept_backend/main.py delete mode 100644 new_concept_backend/oppressor.py delete mode 100644 new_concept_backend/user.py delete mode 100644 new_concept_backend/volunteer.py delete mode 100644 new_concept_backend/zvms.db delete mode 100644 test/_class.py delete mode 100644 test/database.py delete mode 100644 test/main.py delete mode 100644 test/oppressor.py delete mode 100644 test/student.py delete mode 100644 test/tokenlib.py delete mode 100644 test/user.py delete mode 100644 test/volunteer.py delete mode 100644 tmp/converter.py delete mode 100644 tmp/database.py delete mode 100644 tmp/init.py diff --git a/_class.py b/_class.py index 71b6912..8001958 100644 --- a/_class.py +++ b/_class.py @@ -2,59 +2,35 @@ from flask import Blueprint, request import tokenlib as tk import json import oppressor as OP +from deco import Deco Class = Blueprint('class', __name__) @Class.route('/class/list', methods = ['POST']) -def getClassList(): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - try: - #print("Before") - #tkst, tkdata = tk.readToken(json.loads(request.get_data().decode('utf-8')).get('token')) - #print("After") - #if tkdata['permission'] >= 1 and tkst == tk.SUCCESS: - st, val = OP.classList() - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "获取成功" - respdata['class'] = [] # 列表初始化 - for i in val: - respdata['class'].append( - {'id': i, 'name': OP.classIdToString(i)}) - else: - respdata.update(val) - #elif tkst == tk.EXPIRED or tkst == tk.BAD or tkst == tk.ERROR: - # respdata['message'] = "Token错误" - #else: - # respdata['message'] = "权限错误!" - except: - respdata['message'] = "接口错误" - return json.dumps(respdata) # 传回json数据 +@Deco +def getClassList(): # 好了 + fl,r=OP.select("class","user","true",(),["id"],only=False) + print(fl,r) + if not fl: return r + for i in r: i.update({"name":OP.classIdToString(i["id"])}) + return { + "type": "SUCCESS", + "message": "获取成功", + "class": r + } @Class.route("/class/stulist/", methods = ['POST']) -def getStudentList(classId): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - try: - #tkst, tkdata = tk.readToken(json.loads(request.get_data().decode('utf-8')).get('token')) - #if (tkdata["permission"] > 1 or classId == tkdata["class"]) and tkst == tk.SUCCESS: - st, val = OP.studentList(classId) - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "获取成功" - respdata['student'] = [] - for i in val: - respdata['student'].append( - {'id': i[0], 'name': i[1], 'inside': i[2], 'outside': i[3], 'large': i[4]}) - else: - respdata.update(val) - #elif tkst == tk.EXPIRED or tkst == tk.BAD or tkst == tk.ERROR: - # respdata['message'] = "Token错误" - #else: - # respdata['message'] = "权限错误!" - except: - respdata['message'] = "接口错误" - - return json.dumps(respdata) # 传回json数据 +@Deco +def getStudentList(classId): # 好了 + fl,r=OP.select("stuId,stuName,volTimeInside,volTimeOutside,volTimeLarge","student", + "stuId > %s and stuId < %s",(str(classId*100),str(classId*100+100)), + ["id","name","inside","outside","large"],only=False) + if not fl: return r + return { + "type": "SUCCESS", + "message": "获取成功", + "student": r + } @Class.route("/class/volunteer/", methods = ['POST']) def getClassVolunteer(classId): @@ -62,22 +38,17 @@ def getClassVolunteer(classId): st, val = OP.getClassVolunteerList(classId) if st: respdata['volunteer'] = [] - flg = True - err = {} for i in r: st1, val1 = OP.getVolunteerInfo(i) if st1: respdata['volunteer'].append( - OP.listToDict_volunteer_faultless(val1)) + OP.listToDict_volunteer(val1)) else: - flg = False - err = val1 + respdata.update(val1) break - if flg: + else: respdata['type'] = 'SUCCESS' respdata['message'] = '获取成功' - else: - respdata.update(err) else: respdata.update(val) return json.dumps(respdata) diff --git a/database/SELECT_EXAMPLE.py b/database/SELECT_EXAMPLE.py deleted file mode 100644 index 4c49787..0000000 --- a/database/SELECT_EXAMPLE.py +++ /dev/null @@ -1,7 +0,0 @@ -import database as DB - -sql = "SELECT * FROM user WHERE username=%s AND password=%s" -name = '2001' -passwd = 'e10adc3949ba59abbe56e057f20f883e' -DB.execute(sql, (name, passwd)) -print(DB.fetchall()) \ No newline at end of file diff --git a/database/database.py b/database/database.py deleted file mode 100644 index bfa84c0..0000000 --- a/database/database.py +++ /dev/null @@ -1,41 +0,0 @@ -from pymysql import connect, cursors -import traceback # 更好的错误输出 - -conn = connect( - host = "127.0.0.1", - user = "zvms", - password = "123456", - db = "zvms" -) -cur = conn.cursor() - -def close(): - global conn,cur - try: - cur.close() - conn.close() - except: - traceback.print_exc() - -def execute(sql, param = None): - global cur, conn - try: - cur.execute(sql, param) - except: - traceback.print_exc() - conn.rollback() - -def commit(): - global conn - try: - conn.commit() - except: - traceback.print_exc() - conn.rollback() - -def fetchall(): - global cur - try: - return cur.fetchall() - except: - traceback.print_exc() diff --git a/database_export/csv/class_vol.csv b/database_export/csv/class_vol.csv deleted file mode 100644 index 1f687e9..0000000 --- a/database_export/csv/class_vol.csv +++ /dev/null @@ -1 +0,0 @@ -volId,class,stuMax diff --git a/database_export/csv/stu_vol.csv b/database_export/csv/stu_vol.csv deleted file mode 100644 index b573467..0000000 --- a/database_export/csv/stu_vol.csv +++ /dev/null @@ -1,16 +0,0 @@ -volId,stuId,status,volTimeInside,volTimeOutside,volTimeLarge,thought -1,20200101,0,4,0,0,啊吧啊吧 -1,20200102,0,4,0,0,歪比歪比 -1,20200103,0,4,0,0,歪比巴卜 -1,20200104,0,4,0,0,淦淦淦 -1,20200105,0,4,0,0,啊实打实大声道 -2,20200106,1,4,2,0,啊吧啊吧 -2,20200107,1,4,2,0,歪比歪比 -2,20200108,1,4,2,0,歪比巴卜 -2,20200109,1,4,2,0,淦淦淦 -2,20200110,1,4,2,0,啊实打实大声道 -3,20200111,1,4,0,0,啊吧啊吧 -3,20200112,1,4,0,0,歪比歪比 -3,20200113,1,4,0,0,歪比巴卜 -3,20200114,2,4,0,0,淦淦淦 -3,20200115,1,4,0,0,啊实打实大声道 diff --git a/database_export/csv/student.csv b/database_export/csv/student.csv deleted file mode 100644 index 1f3bd04..0000000 --- a/database_export/csv/student.csv +++ /dev/null @@ -1,2161 +0,0 @@ -stuId,stuName,volTimeInside,volTimeOutside,volTimeLarge -20200101,高一一01,1,17,13 -20200102,高一一02,13,6,14 -20200103,高一一03,4,10,10 -20200104,高一一04,7,10,4 -20200105,高一一05,3,9,13 -20200106,高一一06,18,9,7 -20200107,高一一07,19,19,13 -20200108,高一一08,15,17,6 -20200109,高一一09,19,9,11 -20200110,高一一10,0,3,15 -20200111,高一一11,24,16,2 -20200112,高一一12,18,5,2 -20200113,高一一13,5,14,13 -20200114,高一一14,18,2,8 -20200115,高一一15,22,17,12 -20200116,高一一16,12,18,10 -20200117,高一一17,5,3,5 -20200118,高一一18,21,0,8 -20200119,高一一19,18,3,8 -20200120,高一一20,1,7,11 -20200121,高一一21,20,15,8 -20200122,高一一22,16,8,15 -20200123,高一一23,17,15,1 -20200124,高一一24,12,19,14 -20200125,高一一25,2,10,12 -20200126,高一一26,5,5,7 -20200127,高一一27,9,1,13 -20200128,高一一28,16,6,12 -20200129,高一一29,22,7,5 -20200130,高一一30,16,11,15 -20200131,高一一31,9,17,16 -20200132,高一一32,4,15,0 -20200133,高一一33,21,0,15 -20200134,高一一34,19,9,5 -20200135,高一一35,15,0,16 -20200136,高一一36,16,12,16 -20200137,高一一37,17,0,13 -20200138,高一一38,22,3,1 -20200139,高一一39,18,17,4 -20200140,高一一40,10,20,8 -20200141,高一一41,16,1,0 -20200142,高一一42,21,12,16 -20200143,高一一43,12,12,16 -20200144,高一一44,15,18,15 -20200145,高一一45,9,17,3 -20200201,高一二01,19,0,7 -20200202,高一二02,20,1,7 -20200203,高一二03,12,18,0 -20200204,高一二04,12,8,1 -20200205,高一二05,8,19,11 -20200206,高一二06,0,1,8 -20200207,高一二07,14,20,16 -20200208,高一二08,21,17,4 -20200209,高一二09,18,5,1 -20200210,高一二10,16,10,7 -20200211,高一二11,4,11,1 -20200212,高一二12,22,7,6 -20200213,高一二13,14,12,9 -20200214,高一二14,6,5,16 -20200215,高一二15,18,15,7 -20200216,高一二16,19,12,16 -20200217,高一二17,13,18,16 -20200218,高一二18,10,16,7 -20200219,高一二19,18,8,8 -20200220,高一二20,0,6,9 -20200221,高一二21,12,2,0 -20200222,高一二22,15,12,8 -20200223,高一二23,20,17,7 -20200224,高一二24,13,5,2 -20200225,高一二25,15,20,3 -20200226,高一二26,2,14,13 -20200227,高一二27,0,5,4 -20200228,高一二28,16,2,9 -20200229,高一二29,21,14,16 -20200230,高一二30,13,4,15 -20200231,高一二31,24,5,3 -20200232,高一二32,20,19,3 -20200233,高一二33,24,19,1 -20200234,高一二34,0,5,11 -20200235,高一二35,23,8,5 -20200236,高一二36,12,19,2 -20200237,高一二37,4,13,10 -20200238,高一二38,20,7,10 -20200239,高一二39,2,2,7 -20200240,高一二40,9,10,16 -20200241,高一二41,24,2,13 -20200242,高一二42,13,15,4 -20200243,高一二43,23,17,16 -20200244,高一二44,8,18,9 -20200245,高一二45,0,9,11 -20200301,高一三01,14,10,11 -20200302,高一三02,18,2,1 -20200303,高一三03,14,11,1 -20200304,高一三04,23,15,13 -20200305,高一三05,13,0,0 -20200306,高一三06,13,10,0 -20200307,高一三07,7,15,6 -20200308,高一三08,15,0,10 -20200309,高一三09,9,19,7 -20200310,高一三10,4,17,0 -20200311,高一三11,10,5,3 -20200312,高一三12,17,10,15 -20200313,高一三13,10,11,6 -20200314,高一三14,17,7,4 -20200315,高一三15,23,19,13 -20200316,高一三16,0,14,16 -20200317,高一三17,21,9,2 -20200318,高一三18,18,11,13 -20200319,高一三19,1,5,12 -20200320,高一三20,22,9,1 -20200321,高一三21,10,16,5 -20200322,高一三22,14,1,1 -20200323,高一三23,21,13,14 -20200324,高一三24,15,2,14 -20200325,高一三25,17,5,13 -20200326,高一三26,2,12,11 -20200327,高一三27,1,7,7 -20200328,高一三28,15,18,9 -20200329,高一三29,24,1,13 -20200330,高一三30,17,7,16 -20200331,高一三31,4,5,12 -20200332,高一三32,2,12,7 -20200333,高一三33,5,9,8 -20200334,高一三34,1,0,14 -20200335,高一三35,2,7,15 -20200336,高一三36,16,6,3 -20200337,高一三37,7,19,5 -20200338,高一三38,7,19,2 -20200339,高一三39,3,16,10 -20200340,高一三40,10,5,7 -20200341,高一三41,1,18,2 -20200342,高一三42,1,3,3 -20200343,高一三43,20,14,15 -20200344,高一三44,5,0,1 -20200345,高一三45,23,18,4 -20200401,高一四01,0,13,7 -20200402,高一四02,19,20,2 -20200403,高一四03,17,10,14 -20200404,高一四04,2,0,5 -20200405,高一四05,12,10,13 -20200406,高一四06,12,16,15 -20200407,高一四07,23,18,5 -20200408,高一四08,13,14,5 -20200409,高一四09,1,2,5 -20200410,高一四10,14,12,7 -20200411,高一四11,15,9,3 -20200412,高一四12,15,15,1 -20200413,高一四13,10,1,12 -20200414,高一四14,17,0,11 -20200415,高一四15,22,13,10 -20200416,高一四16,23,5,11 -20200417,高一四17,21,5,3 -20200418,高一四18,23,12,12 -20200419,高一四19,24,7,12 -20200420,高一四20,17,19,8 -20200421,高一四21,7,18,4 -20200422,高一四22,20,16,4 -20200423,高一四23,10,12,10 -20200424,高一四24,13,4,1 -20200425,高一四25,4,11,7 -20200426,高一四26,14,20,12 -20200427,高一四27,14,14,7 -20200428,高一四28,21,19,15 -20200429,高一四29,16,16,12 -20200430,高一四30,7,8,14 -20200431,高一四31,21,17,9 -20200432,高一四32,14,3,15 -20200433,高一四33,5,17,2 -20200434,高一四34,7,3,5 -20200435,高一四35,23,20,12 -20200436,高一四36,17,20,6 -20200437,高一四37,20,14,14 -20200438,高一四38,24,13,11 -20200439,高一四39,0,8,12 -20200440,高一四40,17,0,10 -20200441,高一四41,19,7,3 -20200442,高一四42,11,4,12 -20200443,高一四43,12,4,10 -20200444,高一四44,5,18,6 -20200445,高一四45,12,12,9 -20200501,高一五01,2,18,4 -20200502,高一五02,8,15,14 -20200503,高一五03,14,12,24 -20200504,高一五04,20,9,34 -20200505,高一五05,26,6,44 -20200506,高一五06,32,3,54 -20200507,高一五07,38,0,64 -20200508,高一五08,44,-3,74 -20200509,高一五09,50,-6,84 -20200510,高一五10,56,-9,94 -20200511,高一五11,62,-12,104 -20200512,高一五12,68,-15,114 -20200513,高一五13,74,-18,124 -20200514,高一五14,80,-21,134 -20200515,高一五15,86,-24,144 -20200516,高一五16,92,-27,154 -20200517,高一五17,98,-30,164 -20200518,高一五18,104,-33,174 -20200519,高一五19,110,-36,184 -20200520,高一五20,116,-39,194 -20200521,高一五21,122,-42,204 -20200522,高一五22,128,-45,214 -20200523,高一五23,134,-48,224 -20200524,高一五24,140,-51,234 -20200525,高一五25,146,-54,244 -20200526,高一五26,152,-57,254 -20200527,高一五27,158,-60,264 -20200528,高一五28,164,-63,274 -20200529,高一五29,170,-66,284 -20200530,高一五30,176,-69,294 -20200531,高一五31,182,-72,304 -20200532,高一五32,188,-75,314 -20200533,高一五33,194,-78,324 -20200534,高一五34,200,-81,334 -20200535,高一五35,206,-84,344 -20200536,高一五36,212,-87,354 -20200537,高一五37,218,-90,364 -20200538,高一五38,224,-93,374 -20200539,高一五39,230,-96,384 -20200540,高一五40,236,-99,394 -20200541,高一五41,242,-102,404 -20200542,高一五42,248,-105,414 -20200543,高一五43,254,-108,424 -20200544,高一五44,260,-111,434 -20200545,高一五45,266,-114,444 -20200601,高一六01,2,18,4 -20200602,高一六02,3,19,5 -20200603,高一六03,4,20,6 -20200604,高一六04,5,21,7 -20200605,高一六05,6,22,8 -20200606,高一六06,7,23,9 -20200607,高一六07,8,24,10 -20200608,高一六08,9,25,11 -20200609,高一六09,10,26,12 -20200610,高一六10,11,27,13 -20200611,高一六11,12,28,14 -20200612,高一六12,13,29,15 -20200613,高一六13,14,30,16 -20200614,高一六14,15,31,17 -20200615,高一六15,16,32,18 -20200616,高一六16,17,33,19 -20200617,高一六17,18,34,20 -20200618,高一六18,19,35,21 -20200619,高一六19,20,36,22 -20200620,高一六20,21,37,23 -20200621,高一六21,22,38,24 -20200622,高一六22,23,39,25 -20200623,高一六23,24,40,26 -20200624,高一六24,25,41,27 -20200625,高一六25,26,42,28 -20200626,高一六26,27,43,29 -20200627,高一六27,28,44,30 -20200628,高一六28,29,45,31 -20200629,高一六29,30,46,32 -20200630,高一六30,31,47,33 -20200631,高一六31,32,48,34 -20200632,高一六32,33,49,35 -20200633,高一六33,34,50,36 -20200634,高一六34,35,51,37 -20200635,高一六35,36,52,38 -20200636,高一六36,37,53,39 -20200637,高一六37,38,54,40 -20200638,高一六38,39,55,41 -20200639,高一六39,40,56,42 -20200640,高一六40,41,57,43 -20200641,高一六41,42,58,44 -20200642,高一六42,43,59,45 -20200643,高一六43,44,60,46 -20200644,高一六44,45,61,47 -20200645,高一六45,46,62,48 -20200701,高一七01,2,18,4 -20200702,高一七02,3,19,5 -20200703,高一七03,4,20,6 -20200704,高一七04,5,21,7 -20200705,高一七05,6,22,8 -20200706,高一七06,7,23,9 -20200707,高一七07,8,24,10 -20200708,高一七08,9,25,11 -20200709,高一七09,10,26,12 -20200710,高一七10,11,27,13 -20200711,高一七11,12,28,14 -20200712,高一七12,13,29,15 -20200713,高一七13,14,30,16 -20200714,高一七14,15,31,17 -20200715,高一七15,16,32,18 -20200716,高一七16,17,33,19 -20200717,高一七17,18,34,20 -20200718,高一七18,19,35,21 -20200719,高一七19,20,36,22 -20200720,高一七20,21,37,23 -20200721,高一七21,22,38,24 -20200722,高一七22,23,39,25 -20200723,高一七23,24,40,26 -20200724,高一七24,25,41,27 -20200725,高一七25,26,42,28 -20200726,高一七26,27,43,29 -20200727,高一七27,28,44,30 -20200728,高一七28,29,45,31 -20200729,高一七29,30,46,32 -20200730,高一七30,31,47,33 -20200731,高一七31,32,48,34 -20200732,高一七32,33,49,35 -20200733,高一七33,34,50,36 -20200734,高一七34,35,51,37 -20200735,高一七35,36,52,38 -20200736,高一七36,37,53,39 -20200737,高一七37,38,54,40 -20200738,高一七38,39,55,41 -20200739,高一七39,40,56,42 -20200740,高一七40,41,57,43 -20200741,高一七41,42,58,44 -20200742,高一七42,43,59,45 -20200743,高一七43,44,60,46 -20200744,高一七44,45,61,47 -20200745,高一七45,46,62,48 -20200801,高一八01,2,18,4 -20200802,高一八02,3,19,5 -20200803,高一八03,4,20,6 -20200804,高一八04,5,21,7 -20200805,高一八05,6,22,8 -20200806,高一八06,7,23,9 -20200807,高一八07,8,24,10 -20200808,高一八08,9,25,11 -20200809,高一八09,10,26,12 -20200810,高一八10,11,27,13 -20200811,高一八11,12,28,14 -20200812,高一八12,13,29,15 -20200813,高一八13,14,30,16 -20200814,高一八14,15,31,17 -20200815,高一八15,16,32,18 -20200816,高一八16,17,33,19 -20200817,高一八17,18,34,20 -20200818,高一八18,19,35,21 -20200819,高一八19,20,36,22 -20200820,高一八20,21,37,23 -20200821,高一八21,22,38,24 -20200822,高一八22,23,39,25 -20200823,高一八23,24,40,26 -20200824,高一八24,25,41,27 -20200825,高一八25,26,42,28 -20200826,高一八26,27,43,29 -20200827,高一八27,28,44,30 -20200828,高一八28,29,45,31 -20200829,高一八29,30,46,32 -20200830,高一八30,31,47,33 -20200831,高一八31,32,48,34 -20200832,高一八32,33,49,35 -20200833,高一八33,34,50,36 -20200834,高一八34,35,51,37 -20200835,高一八35,36,52,38 -20200836,高一八36,37,53,39 -20200837,高一八37,38,54,40 -20200838,高一八38,39,55,41 -20200839,高一八39,40,56,42 -20200840,高一八40,41,57,43 -20200841,高一八41,42,58,44 -20200842,高一八42,43,59,45 -20200843,高一八43,44,60,46 -20200844,高一八44,45,61,47 -20200845,高一八45,46,62,48 -20200901,高一九01,2,18,4 -20200902,高一九02,3,19,5 -20200903,高一九03,4,20,6 -20200904,高一九04,5,21,7 -20200905,高一九05,6,22,8 -20200906,高一九06,7,23,9 -20200907,高一九07,8,24,10 -20200908,高一九08,9,25,11 -20200909,高一九09,10,26,12 -20200910,高一九10,11,27,13 -20200911,高一九11,12,28,14 -20200912,高一九12,13,29,15 -20200913,高一九13,14,30,16 -20200914,高一九14,15,31,17 -20200915,高一九15,16,32,18 -20200916,高一九16,17,33,19 -20200917,高一九17,18,34,20 -20200918,高一九18,19,35,21 -20200919,高一九19,20,36,22 -20200920,高一九20,21,37,23 -20200921,高一九21,22,38,24 -20200922,高一九22,23,39,25 -20200923,高一九23,24,40,26 -20200924,高一九24,25,41,27 -20200925,高一九25,26,42,28 -20200926,高一九26,27,43,29 -20200927,高一九27,28,44,30 -20200928,高一九28,29,45,31 -20200929,高一九29,30,46,32 -20200930,高一九30,31,47,33 -20200931,高一九31,32,48,34 -20200932,高一九32,33,49,35 -20200933,高一九33,34,50,36 -20200934,高一九34,35,51,37 -20200935,高一九35,36,52,38 -20200936,高一九36,37,53,39 -20200937,高一九37,38,54,40 -20200938,高一九38,39,55,41 -20200939,高一九39,40,56,42 -20200940,高一九40,41,57,43 -20200941,高一九41,42,58,44 -20200942,高一九42,43,59,45 -20200943,高一九43,44,60,46 -20200944,高一九44,45,61,47 -20200945,高一九45,46,62,48 -20201001,高一十01,2,18,4 -20201002,高一十02,3,19,5 -20201003,高一十03,4,20,6 -20201004,高一十04,5,21,7 -20201005,高一十05,6,22,8 -20201006,高一十06,7,23,9 -20201007,高一十07,8,24,10 -20201008,高一十08,9,25,11 -20201009,高一十09,10,26,12 -20201010,高一十10,11,27,13 -20201011,高一十11,12,28,14 -20201012,高一十12,13,29,15 -20201013,高一十13,14,30,16 -20201014,高一十14,15,31,17 -20201015,高一十15,16,32,18 -20201016,高一十16,17,33,19 -20201017,高一十17,18,34,20 -20201018,高一十18,19,35,21 -20201019,高一十19,20,36,22 -20201020,高一十20,21,37,23 -20201021,高一十21,22,38,24 -20201022,高一十22,23,39,25 -20201023,高一十23,24,40,26 -20201024,高一十24,25,41,27 -20201025,高一十25,26,42,28 -20201026,高一十26,27,43,29 -20201027,高一十27,28,44,30 -20201028,高一十28,29,45,31 -20201029,高一十29,30,46,32 -20201030,高一十30,31,47,33 -20201031,高一十31,32,48,34 -20201032,高一十32,33,49,35 -20201033,高一十33,34,50,36 -20201034,高一十34,35,51,37 -20201035,高一十35,36,52,38 -20201036,高一十36,37,53,39 -20201037,高一十37,38,54,40 -20201038,高一十38,39,55,41 -20201039,高一十39,40,56,42 -20201040,高一十40,41,57,43 -20201041,高一十41,42,58,44 -20201042,高一十42,43,59,45 -20201043,高一十43,44,60,46 -20201044,高一十44,45,61,47 -20201045,高一十45,46,62,48 -20201201,蛟一二01,13,17,11 -20201202,蛟一二02,1,11,13 -20201203,蛟一二03,3,7,11 -20201204,蛟一二04,10,17,2 -20201205,蛟一二05,7,4,2 -20201206,蛟一二06,19,14,4 -20201207,蛟一二07,6,6,16 -20201208,蛟一二08,17,19,3 -20201209,蛟一二09,7,6,10 -20201210,蛟一二10,19,15,15 -20201211,蛟一二11,4,18,12 -20201212,蛟一二12,5,15,1 -20201213,蛟一二13,18,20,6 -20201214,蛟一二14,23,8,13 -20201215,蛟一二15,19,15,3 -20201216,蛟一二16,17,10,13 -20201217,蛟一二17,24,1,9 -20201218,蛟一二18,23,9,5 -20201219,蛟一二19,14,15,15 -20201220,蛟一二20,10,18,7 -20201221,蛟一二21,5,18,13 -20201222,蛟一二22,8,10,5 -20201223,蛟一二23,16,8,11 -20201224,蛟一二24,19,12,7 -20201225,蛟一二25,17,10,1 -20201226,蛟一二26,14,8,10 -20201227,蛟一二27,21,10,2 -20201228,蛟一二28,20,9,9 -20201229,蛟一二29,9,11,13 -20201230,蛟一二30,20,9,16 -20201231,蛟一二31,6,16,11 -20201232,蛟一二32,19,8,16 -20201233,蛟一二33,1,9,12 -20201234,蛟一二34,17,16,5 -20201235,蛟一二35,6,11,4 -20201236,蛟一二36,15,14,9 -20201237,蛟一二37,12,4,4 -20201238,蛟一二38,9,4,4 -20201239,蛟一二39,1,10,10 -20201240,蛟一二40,6,5,1 -20201241,蛟一二41,6,12,13 -20201242,蛟一二42,16,9,8 -20201243,蛟一二43,10,6,6 -20201244,蛟一二44,14,19,5 -20201245,蛟一二45,23,10,12 -20201301,蛟一三01,23,13,1 -20201302,蛟一三02,24,11,5 -20201303,蛟一三03,10,11,6 -20201304,蛟一三04,8,18,13 -20201305,蛟一三05,18,8,8 -20201306,蛟一三06,5,7,4 -20201307,蛟一三07,4,11,11 -20201308,蛟一三08,14,12,15 -20201309,蛟一三09,22,8,11 -20201310,蛟一三10,16,10,4 -20201311,蛟一三11,23,20,3 -20201312,蛟一三12,23,10,12 -20201313,蛟一三13,19,14,7 -20201314,蛟一三14,8,7,2 -20201315,蛟一三15,2,3,7 -20201316,蛟一三16,8,10,7 -20201317,蛟一三17,8,3,6 -20201318,蛟一三18,9,17,8 -20201319,蛟一三19,19,4,1 -20201320,蛟一三20,3,14,2 -20201321,蛟一三21,13,13,14 -20201322,蛟一三22,18,18,4 -20201323,蛟一三23,15,12,11 -20201324,蛟一三24,20,15,8 -20201325,蛟一三25,8,4,10 -20201326,蛟一三26,15,19,6 -20201327,蛟一三27,17,19,3 -20201328,蛟一三28,5,5,15 -20201329,蛟一三29,6,12,6 -20201330,蛟一三30,2,6,16 -20201331,蛟一三31,8,18,1 -20201332,蛟一三32,10,14,6 -20201333,蛟一三33,9,13,13 -20201334,蛟一三34,4,7,5 -20201335,蛟一三35,15,3,15 -20201336,蛟一三36,8,3,15 -20201337,蛟一三37,21,18,2 -20201338,蛟一三38,8,13,15 -20201339,蛟一三39,9,11,16 -20201340,蛟一三40,11,2,1 -20201341,蛟一三41,16,20,14 -20201342,蛟一三42,12,2,9 -20201343,蛟一三43,16,10,4 -20201344,蛟一三44,4,13,15 -20201345,蛟一三45,7,17,13 -20201401,蛟一四01,14,4,14 -20201402,蛟一四02,10,2,4 -20201403,蛟一四03,19,1,14 -20201404,蛟一四04,23,16,3 -20201405,蛟一四05,11,7,10 -20201406,蛟一四06,15,2,14 -20201407,蛟一四07,4,6,16 -20201408,蛟一四08,12,10,14 -20201409,蛟一四09,3,15,9 -20201410,蛟一四10,4,16,15 -20201411,蛟一四11,9,16,12 -20201412,蛟一四12,1,17,4 -20201413,蛟一四13,7,11,4 -20201414,蛟一四14,8,11,5 -20201415,蛟一四15,15,12,15 -20201416,蛟一四16,7,20,15 -20201417,蛟一四17,6,10,1 -20201418,蛟一四18,6,7,3 -20201419,蛟一四19,4,11,5 -20201420,蛟一四20,17,12,15 -20201421,蛟一四21,11,16,9 -20201422,蛟一四22,13,11,1 -20201423,蛟一四23,2,12,11 -20201424,蛟一四24,11,1,12 -20201425,蛟一四25,7,7,13 -20201426,蛟一四26,8,17,12 -20201427,蛟一四27,18,15,15 -20201428,蛟一四28,18,3,14 -20201429,蛟一四29,24,6,3 -20201430,蛟一四30,17,14,13 -20201431,蛟一四31,21,2,7 -20201432,蛟一四32,18,11,8 -20201433,蛟一四33,8,11,12 -20201434,蛟一四34,22,15,13 -20201435,蛟一四35,8,2,6 -20201436,蛟一四36,13,17,14 -20201437,蛟一四37,10,8,10 -20201438,蛟一四38,7,2,10 -20201439,蛟一四39,12,18,8 -20201440,蛟一四40,19,19,12 -20201441,蛟一四41,24,2,5 -20201442,蛟一四42,9,16,12 -20201443,蛟一四43,13,6,15 -20201444,蛟一四44,4,6,6 -20201445,蛟一四45,14,3,16 -20201501,蛟一五01,4,2,1 -20201502,蛟一五02,2,17,9 -20201503,蛟一五03,16,11,13 -20201504,蛟一五04,17,13,14 -20201505,蛟一五05,2,12,9 -20201506,蛟一五06,13,1,8 -20201507,蛟一五07,2,17,1 -20201508,蛟一五08,9,7,7 -20201509,蛟一五09,24,18,8 -20201510,蛟一五10,13,13,15 -20201511,蛟一五11,20,13,16 -20201512,蛟一五12,4,17,3 -20201513,蛟一五13,8,20,8 -20201514,蛟一五14,18,9,12 -20201515,蛟一五15,17,8,4 -20201516,蛟一五16,21,15,13 -20201517,蛟一五17,15,17,8 -20201518,蛟一五18,11,15,14 -20201519,蛟一五19,14,20,11 -20201520,蛟一五20,3,8,16 -20201521,蛟一五21,7,14,11 -20201522,蛟一五22,10,5,11 -20201523,蛟一五23,9,1,16 -20201524,蛟一五24,23,10,8 -20201525,蛟一五25,19,11,5 -20201526,蛟一五26,22,4,11 -20201527,蛟一五27,6,13,8 -20201528,蛟一五28,13,12,2 -20201529,蛟一五29,18,15,8 -20201530,蛟一五30,14,5,10 -20201531,蛟一五31,12,8,16 -20201532,蛟一五32,10,15,11 -20201533,蛟一五33,1,12,15 -20201534,蛟一五34,11,1,6 -20201535,蛟一五35,3,12,9 -20201536,蛟一五36,6,6,11 -20201537,蛟一五37,5,10,5 -20201538,蛟一五38,7,10,9 -20201539,蛟一五39,21,6,1 -20201540,蛟一五40,20,14,8 -20201541,蛟一五41,18,4,12 -20201542,蛟一五42,10,3,6 -20201543,蛟一五43,23,16,8 -20201544,蛟一五44,15,4,7 -20201545,蛟一五45,15,15,3 -20201601,蛟一六01,21,17,8 -20201602,蛟一六02,21,15,9 -20201603,蛟一六03,6,15,3 -20201604,蛟一六04,22,11,2 -20201605,蛟一六05,17,1,6 -20201606,蛟一六06,12,20,2 -20201607,蛟一六07,10,7,12 -20201608,蛟一六08,2,13,14 -20201609,蛟一六09,6,14,4 -20201610,蛟一六10,18,9,2 -20201611,蛟一六11,23,5,2 -20201612,蛟一六12,2,17,14 -20201613,蛟一六13,6,8,11 -20201614,蛟一六14,16,20,1 -20201615,蛟一六15,9,19,12 -20201616,蛟一六16,4,17,5 -20201617,蛟一六17,15,2,5 -20201618,蛟一六18,8,11,14 -20201619,蛟一六19,7,2,15 -20201620,蛟一六20,10,12,15 -20201621,蛟一六21,15,20,5 -20201622,蛟一六22,19,8,10 -20201623,蛟一六23,9,3,2 -20201624,蛟一六24,10,20,6 -20201625,蛟一六25,18,20,12 -20201626,蛟一六26,17,12,11 -20201627,蛟一六27,13,12,9 -20201628,蛟一六28,11,6,7 -20201629,蛟一六29,23,19,7 -20201630,蛟一六30,12,18,2 -20201631,蛟一六31,6,1,7 -20201632,蛟一六32,7,16,3 -20201633,蛟一六33,4,1,8 -20201634,蛟一六34,18,16,2 -20201635,蛟一六35,12,4,2 -20201636,蛟一六36,8,7,2 -20201637,蛟一六37,12,13,6 -20201638,蛟一六38,8,5,7 -20201639,蛟一六39,24,8,14 -20201640,蛟一六40,13,13,16 -20201641,蛟一六41,6,15,6 -20201642,蛟一六42,20,3,15 -20201643,蛟一六43,3,14,5 -20201644,蛟一六44,11,15,15 -20201645,蛟一六45,14,18,3 -20201701,蛟一七01,13,13,6 -20201702,蛟一七02,7,19,3 -20201703,蛟一七03,4,20,9 -20201704,蛟一七04,2,13,14 -20201705,蛟一七05,1,9,5 -20201706,蛟一七06,10,2,14 -20201707,蛟一七07,4,8,16 -20201708,蛟一七08,8,1,15 -20201709,蛟一七09,6,4,8 -20201710,蛟一七10,18,3,10 -20201711,蛟一七11,10,18,12 -20201712,蛟一七12,11,8,4 -20201713,蛟一七13,8,19,7 -20201714,蛟一七14,4,10,13 -20201715,蛟一七15,21,11,15 -20201716,蛟一七16,11,14,5 -20201717,蛟一七17,8,3,6 -20201718,蛟一七18,1,5,12 -20201719,蛟一七19,9,2,10 -20201720,蛟一七20,11,19,9 -20201721,蛟一七21,7,7,14 -20201722,蛟一七22,18,14,15 -20201723,蛟一七23,14,10,8 -20201724,蛟一七24,21,15,11 -20201725,蛟一七25,11,14,15 -20201726,蛟一七26,23,15,14 -20201727,蛟一七27,10,11,15 -20201728,蛟一七28,10,12,1 -20201729,蛟一七29,11,10,8 -20201730,蛟一七30,13,20,8 -20201731,蛟一七31,7,15,3 -20201732,蛟一七32,4,13,4 -20201733,蛟一七33,18,6,13 -20201734,蛟一七34,5,8,2 -20201735,蛟一七35,7,12,5 -20201736,蛟一七36,2,12,9 -20201737,蛟一七37,7,10,16 -20201738,蛟一七38,21,15,5 -20201739,蛟一七39,4,20,6 -20201740,蛟一七40,1,17,13 -20201741,蛟一七41,1,3,6 -20201742,蛟一七42,9,4,2 -20201743,蛟一七43,12,1,6 -20201744,蛟一七44,8,2,13 -20201745,蛟一七45,23,10,11 -20190101,高二一01,1,17,13 -20190102,高二一02,13,6,14 -20190103,高二一03,4,10,10 -20190104,高二一04,7,10,4 -20190105,高二一05,3,9,13 -20190106,高二一06,18,9,7 -20190107,高二一07,19,19,13 -20190108,高二一08,15,17,6 -20190109,高二一09,19,9,11 -20190110,高二一10,0,3,15 -20190111,高二一11,24,16,2 -20190112,高二一12,18,5,2 -20190113,高二一13,5,14,13 -20190114,高二一14,18,2,8 -20190115,高二一15,22,17,12 -20190116,高二一16,12,18,10 -20190117,高二一17,5,3,5 -20190118,高二一18,21,0,8 -20190119,高二一19,18,3,8 -20190120,高二一20,1,7,11 -20190121,高二一21,20,15,8 -20190122,高二一22,16,8,15 -20190123,高二一23,17,15,1 -20190124,高二一24,12,19,14 -20190125,高二一25,2,10,12 -20190126,高二一26,5,5,7 -20190127,高二一27,9,1,13 -20190128,高二一28,16,6,12 -20190129,高二一29,22,7,5 -20190130,高二一30,16,11,15 -20190131,高二一31,9,17,16 -20190132,高二一32,4,15,0 -20190133,高二一33,21,0,15 -20190134,高二一34,19,9,5 -20190135,高二一35,15,0,16 -20190136,高二一36,16,12,16 -20190137,高二一37,17,0,13 -20190138,高二一38,22,3,1 -20190139,高二一39,18,17,4 -20190140,高二一40,10,20,8 -20190141,高二一41,16,1,0 -20190142,高二一42,21,12,16 -20190143,高二一43,12,12,16 -20190144,高二一44,15,18,15 -20190145,高二一45,9,17,3 -20190201,高二二01,19,0,7 -20190202,高二二02,20,1,7 -20190203,高二二03,12,18,0 -20190204,高二二04,12,8,1 -20190205,高二二05,8,19,11 -20190206,高二二06,0,1,8 -20190207,高二二07,14,20,16 -20190208,高二二08,21,17,4 -20190209,高二二09,18,5,1 -20190210,高二二10,16,10,7 -20190211,高二二11,4,11,1 -20190212,高二二12,22,7,6 -20190213,高二二13,14,12,9 -20190214,高二二14,6,5,16 -20190215,高二二15,18,15,7 -20190216,高二二16,19,12,16 -20190217,高二二17,13,18,16 -20190218,高二二18,10,16,7 -20190219,高二二19,18,8,8 -20190220,高二二20,0,6,9 -20190221,高二二21,12,2,0 -20190222,高二二22,15,12,8 -20190223,高二二23,20,17,7 -20190224,高二二24,13,5,2 -20190225,高二二25,15,20,3 -20190226,高二二26,2,14,13 -20190227,高二二27,0,5,4 -20190228,高二二28,16,2,9 -20190229,高二二29,21,14,16 -20190230,高二二30,13,4,15 -20190231,高二二31,24,5,3 -20190232,高二二32,20,19,3 -20190233,高二二33,24,19,1 -20190234,高二二34,0,5,11 -20190235,高二二35,23,8,5 -20190236,高二二36,12,19,2 -20190237,高二二37,4,13,10 -20190238,高二二38,20,7,10 -20190239,高二二39,2,2,7 -20190240,高二二40,9,10,16 -20190241,高二二41,24,2,13 -20190242,高二二42,13,15,4 -20190243,高二二43,23,17,16 -20190244,高二二44,8,18,9 -20190245,高二二45,0,9,11 -20190301,高二三01,14,10,11 -20190302,高二三02,18,2,1 -20190303,高二三03,14,11,1 -20190304,高二三04,23,15,13 -20190305,高二三05,13,0,0 -20190306,高二三06,13,10,0 -20190307,高二三07,7,15,6 -20190308,高二三08,15,0,10 -20190309,高二三09,9,19,7 -20190310,高二三10,4,17,0 -20190311,高二三11,10,5,3 -20190312,高二三12,17,10,15 -20190313,高二三13,10,11,6 -20190314,高二三14,17,7,4 -20190315,高二三15,23,19,13 -20190316,高二三16,0,14,16 -20190317,高二三17,21,9,2 -20190318,高二三18,18,11,13 -20190319,高二三19,1,5,12 -20190320,高二三20,22,9,1 -20190321,高二三21,10,16,5 -20190322,高二三22,14,1,1 -20190323,高二三23,21,13,14 -20190324,高二三24,15,2,14 -20190325,高二三25,17,5,13 -20190326,高二三26,2,12,11 -20190327,高二三27,1,7,7 -20190328,高二三28,15,18,9 -20190329,高二三29,24,1,13 -20190330,高二三30,17,7,16 -20190331,高二三31,4,5,12 -20190332,高二三32,2,12,7 -20190333,高二三33,5,9,8 -20190334,高二三34,1,0,14 -20190335,高二三35,2,7,15 -20190336,高二三36,16,6,3 -20190337,高二三37,7,19,5 -20190338,高二三38,7,19,2 -20190339,高二三39,3,16,10 -20190340,高二三40,10,5,7 -20190341,高二三41,1,18,2 -20190342,高二三42,1,3,3 -20190343,高二三43,20,14,15 -20190344,高二三44,5,0,1 -20190345,高二三45,23,18,4 -20190401,高二四01,0,13,7 -20190402,高二四02,19,20,2 -20190403,高二四03,17,10,14 -20190404,高二四04,2,0,5 -20190405,高二四05,12,10,13 -20190406,高二四06,12,16,15 -20190407,高二四07,23,18,5 -20190408,高二四08,13,14,5 -20190409,高二四09,1,2,5 -20190410,高二四10,14,12,7 -20190411,高二四11,15,9,3 -20190412,高二四12,15,15,1 -20190413,高二四13,10,1,12 -20190414,高二四14,17,0,11 -20190415,高二四15,22,13,10 -20190416,高二四16,23,5,11 -20190417,高二四17,21,5,3 -20190418,高二四18,23,12,12 -20190419,高二四19,24,7,12 -20190420,高二四20,17,19,8 -20190421,高二四21,7,18,4 -20190422,高二四22,20,16,4 -20190423,高二四23,10,12,10 -20190424,高二四24,13,4,1 -20190425,高二四25,4,11,7 -20190426,高二四26,14,20,12 -20190427,高二四27,14,14,7 -20190428,高二四28,21,19,15 -20190429,高二四29,16,16,12 -20190430,高二四30,7,8,14 -20190431,高二四31,21,17,9 -20190432,高二四32,14,3,15 -20190433,高二四33,5,17,2 -20190434,高二四34,7,3,5 -20190435,高二四35,23,20,12 -20190436,高二四36,17,20,6 -20190437,高二四37,20,14,14 -20190438,高二四38,24,13,11 -20190439,高二四39,0,8,12 -20190440,高二四40,17,0,10 -20190441,高二四41,19,7,3 -20190442,高二四42,11,4,12 -20190443,高二四43,12,4,10 -20190444,高二四44,5,18,6 -20190445,高二四45,12,12,9 -20190501,高二五01,2,18,4 -20190502,高二五02,8,15,14 -20190503,高二五03,14,12,24 -20190504,高二五04,20,9,34 -20190505,高二五05,26,6,44 -20190506,高二五06,32,3,54 -20190507,高二五07,38,0,64 -20190508,高二五08,44,-3,74 -20190509,高二五09,50,-6,84 -20190510,高二五10,56,-9,94 -20190511,高二五11,62,-12,104 -20190512,高二五12,68,-15,114 -20190513,高二五13,74,-18,124 -20190514,高二五14,80,-21,134 -20190515,高二五15,86,-24,144 -20190516,高二五16,92,-27,154 -20190517,高二五17,98,-30,164 -20190518,高二五18,104,-33,174 -20190519,高二五19,110,-36,184 -20190520,高二五20,116,-39,194 -20190521,高二五21,122,-42,204 -20190522,高二五22,128,-45,214 -20190523,高二五23,134,-48,224 -20190524,高二五24,140,-51,234 -20190525,高二五25,146,-54,244 -20190526,高二五26,152,-57,254 -20190527,高二五27,158,-60,264 -20190528,高二五28,164,-63,274 -20190529,高二五29,170,-66,284 -20190530,高二五30,176,-69,294 -20190531,高二五31,182,-72,304 -20190532,高二五32,188,-75,314 -20190533,高二五33,194,-78,324 -20190534,高二五34,200,-81,334 -20190535,高二五35,206,-84,344 -20190536,高二五36,212,-87,354 -20190537,高二五37,218,-90,364 -20190538,高二五38,224,-93,374 -20190539,高二五39,230,-96,384 -20190540,高二五40,236,-99,394 -20190541,高二五41,242,-102,404 -20190542,高二五42,248,-105,414 -20190543,高二五43,254,-108,424 -20190544,高二五44,260,-111,434 -20190545,高二五45,266,-114,444 -20190601,高二六01,2,18,4 -20190602,高二六02,3,19,5 -20190603,高二六03,4,20,6 -20190604,高二六04,5,21,7 -20190605,高二六05,6,22,8 -20190606,高二六06,7,23,9 -20190607,高二六07,8,24,10 -20190608,高二六08,9,25,11 -20190609,高二六09,10,26,12 -20190610,高二六10,11,27,13 -20190611,高二六11,12,28,14 -20190612,高二六12,13,29,15 -20190613,高二六13,14,30,16 -20190614,高二六14,15,31,17 -20190615,高二六15,16,32,18 -20190616,高二六16,17,33,19 -20190617,高二六17,18,34,20 -20190618,高二六18,19,35,21 -20190619,高二六19,20,36,22 -20190620,高二六20,21,37,23 -20190621,高二六21,22,38,24 -20190622,高二六22,23,39,25 -20190623,高二六23,24,40,26 -20190624,高二六24,25,41,27 -20190625,高二六25,26,42,28 -20190626,高二六26,27,43,29 -20190627,高二六27,28,44,30 -20190628,高二六28,29,45,31 -20190629,高二六29,30,46,32 -20190630,高二六30,31,47,33 -20190631,高二六31,32,48,34 -20190632,高二六32,33,49,35 -20190633,高二六33,34,50,36 -20190634,高二六34,35,51,37 -20190635,高二六35,36,52,38 -20190636,高二六36,37,53,39 -20190637,高二六37,38,54,40 -20190638,高二六38,39,55,41 -20190639,高二六39,40,56,42 -20190640,高二六40,41,57,43 -20190641,高二六41,42,58,44 -20190642,高二六42,43,59,45 -20190643,高二六43,44,60,46 -20190644,高二六44,45,61,47 -20190645,高二六45,46,62,48 -20190701,高二七01,2,18,4 -20190702,高二七02,3,19,5 -20190703,高二七03,4,20,6 -20190704,高二七04,5,21,7 -20190705,高二七05,6,22,8 -20190706,高二七06,7,23,9 -20190707,高二七07,8,24,10 -20190708,高二七08,9,25,11 -20190709,高二七09,10,26,12 -20190710,高二七10,11,27,13 -20190711,高二七11,12,28,14 -20190712,高二七12,13,29,15 -20190713,高二七13,14,30,16 -20190714,高二七14,15,31,17 -20190715,高二七15,16,32,18 -20190716,高二七16,17,33,19 -20190717,高二七17,18,34,20 -20190718,高二七18,19,35,21 -20190719,高二七19,20,36,22 -20190720,高二七20,21,37,23 -20190721,高二七21,22,38,24 -20190722,高二七22,23,39,25 -20190723,高二七23,24,40,26 -20190724,高二七24,25,41,27 -20190725,高二七25,26,42,28 -20190726,高二七26,27,43,29 -20190727,高二七27,28,44,30 -20190728,高二七28,29,45,31 -20190729,高二七29,30,46,32 -20190730,高二七30,31,47,33 -20190731,高二七31,32,48,34 -20190732,高二七32,33,49,35 -20190733,高二七33,34,50,36 -20190734,高二七34,35,51,37 -20190735,高二七35,36,52,38 -20190736,高二七36,37,53,39 -20190737,高二七37,38,54,40 -20190738,高二七38,39,55,41 -20190739,高二七39,40,56,42 -20190740,高二七40,41,57,43 -20190741,高二七41,42,58,44 -20190742,高二七42,43,59,45 -20190743,高二七43,44,60,46 -20190744,高二七44,45,61,47 -20190745,高二七45,46,62,48 -20190801,高二八01,2,18,4 -20190802,高二八02,3,19,5 -20190803,高二八03,4,20,6 -20190804,高二八04,5,21,7 -20190805,高二八05,6,22,8 -20190806,高二八06,7,23,9 -20190807,高二八07,8,24,10 -20190808,高二八08,9,25,11 -20190809,高二八09,10,26,12 -20190810,高二八10,11,27,13 -20190811,高二八11,12,28,14 -20190812,高二八12,13,29,15 -20190813,高二八13,14,30,16 -20190814,高二八14,15,31,17 -20190815,高二八15,16,32,18 -20190816,高二八16,17,33,19 -20190817,高二八17,18,34,20 -20190818,高二八18,19,35,21 -20190819,高二八19,20,36,22 -20190820,高二八20,21,37,23 -20190821,高二八21,22,38,24 -20190822,高二八22,23,39,25 -20190823,高二八23,24,40,26 -20190824,高二八24,25,41,27 -20190825,高二八25,26,42,28 -20190826,高二八26,27,43,29 -20190827,高二八27,28,44,30 -20190828,高二八28,29,45,31 -20190829,高二八29,30,46,32 -20190830,高二八30,31,47,33 -20190831,高二八31,32,48,34 -20190832,高二八32,33,49,35 -20190833,高二八33,34,50,36 -20190834,高二八34,35,51,37 -20190835,高二八35,36,52,38 -20190836,高二八36,37,53,39 -20190837,高二八37,38,54,40 -20190838,高二八38,39,55,41 -20190839,高二八39,40,56,42 -20190840,高二八40,41,57,43 -20190841,高二八41,42,58,44 -20190842,高二八42,43,59,45 -20190843,高二八43,44,60,46 -20190844,高二八44,45,61,47 -20190845,高二八45,46,62,48 -20190901,高二九01,2,18,4 -20190902,高二九02,3,19,5 -20190903,高二九03,4,20,6 -20190904,高二九04,5,21,7 -20190905,高二九05,6,22,8 -20190906,高二九06,7,23,9 -20190907,高二九07,8,24,10 -20190908,高二九08,9,25,11 -20190909,高二九09,10,26,12 -20190910,高二九10,11,27,13 -20190911,高二九11,12,28,14 -20190912,高二九12,13,29,15 -20190913,高二九13,14,30,16 -20190914,高二九14,15,31,17 -20190915,高二九15,16,32,18 -20190916,高二九16,17,33,19 -20190917,高二九17,18,34,20 -20190918,高二九18,19,35,21 -20190919,高二九19,20,36,22 -20190920,高二九20,21,37,23 -20190921,高二九21,22,38,24 -20190922,高二九22,23,39,25 -20190923,高二九23,24,40,26 -20190924,高二九24,25,41,27 -20190925,高二九25,26,42,28 -20190926,高二九26,27,43,29 -20190927,高二九27,28,44,30 -20190928,高二九28,29,45,31 -20190929,高二九29,30,46,32 -20190930,高二九30,31,47,33 -20190931,高二九31,32,48,34 -20190932,高二九32,33,49,35 -20190933,高二九33,34,50,36 -20190934,高二九34,35,51,37 -20190935,高二九35,36,52,38 -20190936,高二九36,37,53,39 -20190937,高二九37,38,54,40 -20190938,高二九38,39,55,41 -20190939,高二九39,40,56,42 -20190940,高二九40,41,57,43 -20190941,高二九41,42,58,44 -20190942,高二九42,43,59,45 -20190943,高二九43,44,60,46 -20190944,高二九44,45,61,47 -20190945,高二九45,46,62,48 -20191001,高二十01,2,18,4 -20191002,高二十02,3,19,5 -20191003,高二十03,4,20,6 -20191004,高二十04,5,21,7 -20191005,高二十05,6,22,8 -20191006,高二十06,7,23,9 -20191007,高二十07,8,24,10 -20191008,高二十08,9,25,11 -20191009,高二十09,10,26,12 -20191010,高二十10,11,27,13 -20191011,高二十11,12,28,14 -20191012,高二十12,13,29,15 -20191013,高二十13,14,30,16 -20191014,高二十14,15,31,17 -20191015,高二十15,16,32,18 -20191016,高二十16,17,33,19 -20191017,高二十17,18,34,20 -20191018,高二十18,19,35,21 -20191019,高二十19,20,36,22 -20191020,高二十20,21,37,23 -20191021,高二十21,22,38,24 -20191022,高二十22,23,39,25 -20191023,高二十23,24,40,26 -20191024,高二十24,25,41,27 -20191025,高二十25,26,42,28 -20191026,高二十26,27,43,29 -20191027,高二十27,28,44,30 -20191028,高二十28,29,45,31 -20191029,高二十29,30,46,32 -20191030,高二十30,31,47,33 -20191031,高二十31,32,48,34 -20191032,高二十32,33,49,35 -20191033,高二十33,34,50,36 -20191034,高二十34,35,51,37 -20191035,高二十35,36,52,38 -20191036,高二十36,37,53,39 -20191037,高二十37,38,54,40 -20191038,高二十38,39,55,41 -20191039,高二十39,40,56,42 -20191040,高二十40,41,57,43 -20191041,高二十41,42,58,44 -20191042,高二十42,43,59,45 -20191043,高二十43,44,60,46 -20191044,高二十44,45,61,47 -20191045,高二十45,46,62,48 -20191201,蛟二二01,13,17,11 -20191202,蛟二二02,1,11,13 -20191203,蛟二二03,3,7,11 -20191204,蛟二二04,10,17,2 -20191205,蛟二二05,7,4,2 -20191206,蛟二二06,19,14,4 -20191207,蛟二二07,6,6,16 -20191208,蛟二二08,17,19,3 -20191209,蛟二二09,7,6,10 -20191210,蛟二二10,19,15,15 -20191211,蛟二二11,4,18,12 -20191212,蛟二二12,5,15,1 -20191213,蛟二二13,18,20,6 -20191214,蛟二二14,23,8,13 -20191215,蛟二二15,19,15,3 -20191216,蛟二二16,17,10,13 -20191217,蛟二二17,24,1,9 -20191218,蛟二二18,23,9,5 -20191219,蛟二二19,14,15,15 -20191220,蛟二二20,10,18,7 -20191221,蛟二二21,5,18,13 -20191222,蛟二二22,8,10,5 -20191223,蛟二二23,16,8,11 -20191224,蛟二二24,19,12,7 -20191225,蛟二二25,17,10,1 -20191226,蛟二二26,14,8,10 -20191227,蛟二二27,21,10,2 -20191228,蛟二二28,20,9,9 -20191229,蛟二二29,9,11,13 -20191230,蛟二二30,20,9,16 -20191231,蛟二二31,6,16,11 -20191232,蛟二二32,19,8,16 -20191233,蛟二二33,1,9,12 -20191234,蛟二二34,17,16,5 -20191235,蛟二二35,6,11,4 -20191236,蛟二二36,15,14,9 -20191237,蛟二二37,12,4,4 -20191238,蛟二二38,9,4,4 -20191239,蛟二二39,1,10,10 -20191240,蛟二二40,6,5,1 -20191241,蛟二二41,6,12,13 -20191242,蛟二二42,16,9,8 -20191243,蛟二二43,10,6,6 -20191244,蛟二二44,14,19,5 -20191245,蛟二二45,23,10,12 -20191301,蛟二三01,23,13,1 -20191302,蛟二三02,24,11,5 -20191303,蛟二三03,10,11,6 -20191304,蛟二三04,8,18,13 -20191305,蛟二三05,18,8,8 -20191306,蛟二三06,5,7,4 -20191307,蛟二三07,4,11,11 -20191308,蛟二三08,14,12,15 -20191309,蛟二三09,22,8,11 -20191310,蛟二三10,16,10,4 -20191311,蛟二三11,23,20,3 -20191312,蛟二三12,23,10,12 -20191313,蛟二三13,19,14,7 -20191314,蛟二三14,8,7,2 -20191315,蛟二三15,2,3,7 -20191316,蛟二三16,8,10,7 -20191317,蛟二三17,8,3,6 -20191318,蛟二三18,9,17,8 -20191319,蛟二三19,19,4,1 -20191320,蛟二三20,3,14,2 -20191321,蛟二三21,13,13,14 -20191322,蛟二三22,18,18,4 -20191323,蛟二三23,15,12,11 -20191324,蛟二三24,20,15,8 -20191325,蛟二三25,8,4,10 -20191326,蛟二三26,15,19,6 -20191327,蛟二三27,17,19,3 -20191328,蛟二三28,5,5,15 -20191329,蛟二三29,6,12,6 -20191330,蛟二三30,2,6,16 -20191331,蛟二三31,8,18,1 -20191332,蛟二三32,10,14,6 -20191333,蛟二三33,9,13,13 -20191334,蛟二三34,4,7,5 -20191335,蛟二三35,15,3,15 -20191336,蛟二三36,8,3,15 -20191337,蛟二三37,21,18,2 -20191338,蛟二三38,8,13,15 -20191339,蛟二三39,9,11,16 -20191340,蛟二三40,11,2,1 -20191341,蛟二三41,16,20,14 -20191342,蛟二三42,12,2,9 -20191343,蛟二三43,16,10,4 -20191344,蛟二三44,4,13,15 -20191345,蛟二三45,7,17,13 -20191401,蛟二四01,14,4,14 -20191402,蛟二四02,10,2,4 -20191403,蛟二四03,19,1,14 -20191404,蛟二四04,23,16,3 -20191405,蛟二四05,11,7,10 -20191406,蛟二四06,15,2,14 -20191407,蛟二四07,4,6,16 -20191408,蛟二四08,12,10,14 -20191409,蛟二四09,3,15,9 -20191410,蛟二四10,4,16,15 -20191411,蛟二四11,9,16,12 -20191412,蛟二四12,1,17,4 -20191413,蛟二四13,7,11,4 -20191414,蛟二四14,8,11,5 -20191415,蛟二四15,15,12,15 -20191416,蛟二四16,7,20,15 -20191417,蛟二四17,6,10,1 -20191418,蛟二四18,6,7,3 -20191419,蛟二四19,4,11,5 -20191420,蛟二四20,17,12,15 -20191421,蛟二四21,11,16,9 -20191422,蛟二四22,13,11,1 -20191423,蛟二四23,2,12,11 -20191424,蛟二四24,11,1,12 -20191425,蛟二四25,7,7,13 -20191426,蛟二四26,8,17,12 -20191427,蛟二四27,18,15,15 -20191428,蛟二四28,18,3,14 -20191429,蛟二四29,24,6,3 -20191430,蛟二四30,17,14,13 -20191431,蛟二四31,21,2,7 -20191432,蛟二四32,18,11,8 -20191433,蛟二四33,8,11,12 -20191434,蛟二四34,22,15,13 -20191435,蛟二四35,8,2,6 -20191436,蛟二四36,13,17,14 -20191437,蛟二四37,10,8,10 -20191438,蛟二四38,7,2,10 -20191439,蛟二四39,12,18,8 -20191440,蛟二四40,19,19,12 -20191441,蛟二四41,24,2,5 -20191442,蛟二四42,9,16,12 -20191443,蛟二四43,13,6,15 -20191444,蛟二四44,4,6,6 -20191445,蛟二四45,14,3,16 -20191501,蛟二五01,4,2,1 -20191502,蛟二五02,2,17,9 -20191503,蛟二五03,16,11,13 -20191504,蛟二五04,17,13,14 -20191505,蛟二五05,2,12,9 -20191506,蛟二五06,13,1,8 -20191507,蛟二五07,2,17,1 -20191508,蛟二五08,9,7,7 -20191509,蛟二五09,24,18,8 -20191510,蛟二五10,13,13,15 -20191511,蛟二五11,20,13,16 -20191512,蛟二五12,4,17,3 -20191513,蛟二五13,8,20,8 -20191514,蛟二五14,18,9,12 -20191515,蛟二五15,17,8,4 -20191516,蛟二五16,21,15,13 -20191517,蛟二五17,15,17,8 -20191518,蛟二五18,11,15,14 -20191519,蛟二五19,14,20,11 -20191520,蛟二五20,3,8,16 -20191521,蛟二五21,7,14,11 -20191522,蛟二五22,10,5,11 -20191523,蛟二五23,9,1,16 -20191524,蛟二五24,23,10,8 -20191525,蛟二五25,19,11,5 -20191526,蛟二五26,22,4,11 -20191527,蛟二五27,6,13,8 -20191528,蛟二五28,13,12,2 -20191529,蛟二五29,18,15,8 -20191530,蛟二五30,14,5,10 -20191531,蛟二五31,12,8,16 -20191532,蛟二五32,10,15,11 -20191533,蛟二五33,1,12,15 -20191534,蛟二五34,11,1,6 -20191535,蛟二五35,3,12,9 -20191536,蛟二五36,6,6,11 -20191537,蛟二五37,5,10,5 -20191538,蛟二五38,7,10,9 -20191539,蛟二五39,21,6,1 -20191540,蛟二五40,20,14,8 -20191541,蛟二五41,18,4,12 -20191542,蛟二五42,10,3,6 -20191543,蛟二五43,23,16,8 -20191544,蛟二五44,15,4,7 -20191545,蛟二五45,15,15,3 -20191601,蛟二六01,21,17,8 -20191602,蛟二六02,21,15,9 -20191603,蛟二六03,6,15,3 -20191604,蛟二六04,22,11,2 -20191605,蛟二六05,17,1,6 -20191606,蛟二六06,12,20,2 -20191607,蛟二六07,10,7,12 -20191608,蛟二六08,2,13,14 -20191609,蛟二六09,6,14,4 -20191610,蛟二六10,18,9,2 -20191611,蛟二六11,23,5,2 -20191612,蛟二六12,2,17,14 -20191613,蛟二六13,6,8,11 -20191614,蛟二六14,16,20,1 -20191615,蛟二六15,9,19,12 -20191616,蛟二六16,4,17,5 -20191617,蛟二六17,15,2,5 -20191618,蛟二六18,8,11,14 -20191619,蛟二六19,7,2,15 -20191620,蛟二六20,10,12,15 -20191621,蛟二六21,15,20,5 -20191622,蛟二六22,19,8,10 -20191623,蛟二六23,9,3,2 -20191624,蛟二六24,10,20,6 -20191625,蛟二六25,18,20,12 -20191626,蛟二六26,17,12,11 -20191627,蛟二六27,13,12,9 -20191628,蛟二六28,11,6,7 -20191629,蛟二六29,23,19,7 -20191630,蛟二六30,12,18,2 -20191631,蛟二六31,6,1,7 -20191632,蛟二六32,7,16,3 -20191633,蛟二六33,4,1,8 -20191634,蛟二六34,18,16,2 -20191635,蛟二六35,12,4,2 -20191636,蛟二六36,8,7,2 -20191637,蛟二六37,12,13,6 -20191638,蛟二六38,8,5,7 -20191639,蛟二六39,24,8,14 -20191640,蛟二六40,13,13,16 -20191641,蛟二六41,6,15,6 -20191642,蛟二六42,20,3,15 -20191643,蛟二六43,3,14,5 -20191644,蛟二六44,11,15,15 -20191645,蛟二六45,14,18,3 -20191701,蛟二七01,13,13,6 -20191702,蛟二七02,7,19,3 -20191703,蛟二七03,4,20,9 -20191704,蛟二七04,2,13,14 -20191705,蛟二七05,1,9,5 -20191706,蛟二七06,10,2,14 -20191707,蛟二七07,4,8,16 -20191708,蛟二七08,8,1,15 -20191709,蛟二七09,6,4,8 -20191710,蛟二七10,18,3,10 -20191711,蛟二七11,10,18,12 -20191712,蛟二七12,11,8,4 -20191713,蛟二七13,8,19,7 -20191714,蛟二七14,4,10,13 -20191715,蛟二七15,21,11,15 -20191716,蛟二七16,11,14,5 -20191717,蛟二七17,8,3,6 -20191718,蛟二七18,1,5,12 -20191719,蛟二七19,9,2,10 -20191720,蛟二七20,11,19,9 -20191721,蛟二七21,7,7,14 -20191722,蛟二七22,18,14,15 -20191723,蛟二七23,14,10,8 -20191724,蛟二七24,21,15,11 -20191725,蛟二七25,11,14,15 -20191726,蛟二七26,23,15,14 -20191727,蛟二七27,10,11,15 -20191728,蛟二七28,10,12,1 -20191729,蛟二七29,11,10,8 -20191730,蛟二七30,13,20,8 -20191731,蛟二七31,7,15,3 -20191732,蛟二七32,4,13,4 -20191733,蛟二七33,18,6,13 -20191734,蛟二七34,5,8,2 -20191735,蛟二七35,7,12,5 -20191736,蛟二七36,2,12,9 -20191737,蛟二七37,7,10,16 -20191738,蛟二七38,21,15,5 -20191739,蛟二七39,4,20,6 -20191740,蛟二七40,1,17,13 -20191741,蛟二七41,1,3,6 -20191742,蛟二七42,9,4,2 -20191743,蛟二七43,12,1,6 -20191744,蛟二七44,8,2,13 -20191745,蛟二七45,23,10,11 -20180101,高三一01,1,17,13 -20180102,高三一02,13,6,14 -20180103,高三一03,4,10,10 -20180104,高三一04,7,10,4 -20180105,高三一05,3,9,13 -20180106,高三一06,18,9,7 -20180107,高三一07,19,19,13 -20180108,高三一08,15,17,6 -20180109,高三一09,19,9,11 -20180110,高三一10,0,3,15 -20180111,高三一11,24,16,2 -20180112,高三一12,18,5,2 -20180113,高三一13,5,14,13 -20180114,高三一14,18,2,8 -20180115,高三一15,22,17,12 -20180116,高三一16,12,18,10 -20180117,高三一17,5,3,5 -20180118,高三一18,21,0,8 -20180119,高三一19,18,3,8 -20180120,高三一20,1,7,11 -20180121,高三一21,20,15,8 -20180122,高三一22,16,8,15 -20180123,高三一23,17,15,1 -20180124,高三一24,12,19,14 -20180125,高三一25,2,10,12 -20180126,高三一26,5,5,7 -20180127,高三一27,9,1,13 -20180128,高三一28,16,6,12 -20180129,高三一29,22,7,5 -20180130,高三一30,16,11,15 -20180131,高三一31,9,17,16 -20180132,高三一32,4,15,0 -20180133,高三一33,21,0,15 -20180134,高三一34,19,9,5 -20180135,高三一35,15,0,16 -20180136,高三一36,16,12,16 -20180137,高三一37,17,0,13 -20180138,高三一38,22,3,1 -20180139,高三一39,18,17,4 -20180140,高三一40,10,20,8 -20180141,高三一41,16,1,0 -20180142,高三一42,21,12,16 -20180143,高三一43,12,12,16 -20180144,高三一44,15,18,15 -20180145,高三一45,9,17,3 -20180201,高三二01,19,0,7 -20180202,高三二02,20,1,7 -20180203,高三二03,12,18,0 -20180204,高三二04,12,8,1 -20180205,高三二05,8,19,11 -20180206,高三二06,0,1,8 -20180207,高三二07,14,20,16 -20180208,高三二08,21,17,4 -20180209,高三二09,18,5,1 -20180210,高三二10,16,10,7 -20180211,高三二11,4,11,1 -20180212,高三二12,22,7,6 -20180213,高三二13,14,12,9 -20180214,高三二14,6,5,16 -20180215,高三二15,18,15,7 -20180216,高三二16,19,12,16 -20180217,高三二17,13,18,16 -20180218,高三二18,10,16,7 -20180219,高三二19,18,8,8 -20180220,高三二20,0,6,9 -20180221,高三二21,12,2,0 -20180222,高三二22,15,12,8 -20180223,高三二23,20,17,7 -20180224,高三二24,13,5,2 -20180225,高三二25,15,20,3 -20180226,高三二26,2,14,13 -20180227,高三二27,0,5,4 -20180228,高三二28,16,2,9 -20180229,高三二29,21,14,16 -20180230,高三二30,13,4,15 -20180231,高三二31,24,5,3 -20180232,高三二32,20,19,3 -20180233,高三二33,24,19,1 -20180234,高三二34,0,5,11 -20180235,高三二35,23,8,5 -20180236,高三二36,12,19,2 -20180237,高三二37,4,13,10 -20180238,高三二38,20,7,10 -20180239,高三二39,2,2,7 -20180240,高三二40,9,10,16 -20180241,高三二41,24,2,13 -20180242,高三二42,13,15,4 -20180243,高三二43,23,17,16 -20180244,高三二44,8,18,9 -20180245,高三二45,0,9,11 -20180301,高三三01,14,10,11 -20180302,高三三02,18,2,1 -20180303,高三三03,14,11,1 -20180304,高三三04,23,15,13 -20180305,高三三05,13,0,0 -20180306,高三三06,13,10,0 -20180307,高三三07,7,15,6 -20180308,高三三08,15,0,10 -20180309,高三三09,9,19,7 -20180310,高三三10,4,17,0 -20180311,高三三11,10,5,3 -20180312,高三三12,17,10,15 -20180313,高三三13,10,11,6 -20180314,高三三14,17,7,4 -20180315,高三三15,23,19,13 -20180316,高三三16,0,14,16 -20180317,高三三17,21,9,2 -20180318,高三三18,18,11,13 -20180319,高三三19,1,5,12 -20180320,高三三20,22,9,1 -20180321,高三三21,10,16,5 -20180322,高三三22,14,1,1 -20180323,高三三23,21,13,14 -20180324,高三三24,15,2,14 -20180325,高三三25,17,5,13 -20180326,高三三26,2,12,11 -20180327,高三三27,1,7,7 -20180328,高三三28,15,18,9 -20180329,高三三29,24,1,13 -20180330,高三三30,17,7,16 -20180331,高三三31,4,5,12 -20180332,高三三32,2,12,7 -20180333,高三三33,5,9,8 -20180334,高三三34,1,0,14 -20180335,高三三35,2,7,15 -20180336,高三三36,16,6,3 -20180337,高三三37,7,19,5 -20180338,高三三38,7,19,2 -20180339,高三三39,3,16,10 -20180340,高三三40,10,5,7 -20180341,高三三41,1,18,2 -20180342,高三三42,1,3,3 -20180343,高三三43,20,14,15 -20180344,高三三44,5,0,1 -20180345,高三三45,23,18,4 -20180401,高三四01,0,13,7 -20180402,高三四02,19,20,2 -20180403,高三四03,17,10,14 -20180404,高三四04,2,0,5 -20180405,高三四05,12,10,13 -20180406,高三四06,12,16,15 -20180407,高三四07,23,18,5 -20180408,高三四08,13,14,5 -20180409,高三四09,1,2,5 -20180410,高三四10,14,12,7 -20180411,高三四11,15,9,3 -20180412,高三四12,15,15,1 -20180413,高三四13,10,1,12 -20180414,高三四14,17,0,11 -20180415,高三四15,22,13,10 -20180416,高三四16,23,5,11 -20180417,高三四17,21,5,3 -20180418,高三四18,23,12,12 -20180419,高三四19,24,7,12 -20180420,高三四20,17,19,8 -20180421,高三四21,7,18,4 -20180422,高三四22,20,16,4 -20180423,高三四23,10,12,10 -20180424,高三四24,13,4,1 -20180425,高三四25,4,11,7 -20180426,高三四26,14,20,12 -20180427,高三四27,14,14,7 -20180428,高三四28,21,19,15 -20180429,高三四29,16,16,12 -20180430,高三四30,7,8,14 -20180431,高三四31,21,17,9 -20180432,高三四32,14,3,15 -20180433,高三四33,5,17,2 -20180434,高三四34,7,3,5 -20180435,高三四35,23,20,12 -20180436,高三四36,17,20,6 -20180437,高三四37,20,14,14 -20180438,高三四38,24,13,11 -20180439,高三四39,0,8,12 -20180440,高三四40,17,0,10 -20180441,高三四41,19,7,3 -20180442,高三四42,11,4,12 -20180443,高三四43,12,4,10 -20180444,高三四44,5,18,6 -20180445,高三四45,12,12,9 -20180501,高三五01,2,18,4 -20180502,高三五02,8,15,14 -20180503,高三五03,14,12,24 -20180504,高三五04,20,9,34 -20180505,高三五05,26,6,44 -20180506,高三五06,32,3,54 -20180507,高三五07,38,0,64 -20180508,高三五08,44,-3,74 -20180509,高三五09,50,-6,84 -20180510,高三五10,56,-9,94 -20180511,高三五11,62,-12,104 -20180512,高三五12,68,-15,114 -20180513,高三五13,74,-18,124 -20180514,高三五14,80,-21,134 -20180515,高三五15,86,-24,144 -20180516,高三五16,92,-27,154 -20180517,高三五17,98,-30,164 -20180518,高三五18,104,-33,174 -20180519,高三五19,110,-36,184 -20180520,高三五20,116,-39,194 -20180521,高三五21,122,-42,204 -20180522,高三五22,128,-45,214 -20180523,高三五23,134,-48,224 -20180524,高三五24,140,-51,234 -20180525,高三五25,146,-54,244 -20180526,高三五26,152,-57,254 -20180527,高三五27,158,-60,264 -20180528,高三五28,164,-63,274 -20180529,高三五29,170,-66,284 -20180530,高三五30,176,-69,294 -20180531,高三五31,182,-72,304 -20180532,高三五32,188,-75,314 -20180533,高三五33,194,-78,324 -20180534,高三五34,200,-81,334 -20180535,高三五35,206,-84,344 -20180536,高三五36,212,-87,354 -20180537,高三五37,218,-90,364 -20180538,高三五38,224,-93,374 -20180539,高三五39,230,-96,384 -20180540,高三五40,236,-99,394 -20180541,高三五41,242,-102,404 -20180542,高三五42,248,-105,414 -20180543,高三五43,254,-108,424 -20180544,高三五44,260,-111,434 -20180545,高三五45,266,-114,444 -20180601,高三六01,2,18,4 -20180602,高三六02,3,19,5 -20180603,高三六03,4,20,6 -20180604,高三六04,5,21,7 -20180605,高三六05,6,22,8 -20180606,高三六06,7,23,9 -20180607,高三六07,8,24,10 -20180608,高三六08,9,25,11 -20180609,高三六09,10,26,12 -20180610,高三六10,11,27,13 -20180611,高三六11,12,28,14 -20180612,高三六12,13,29,15 -20180613,高三六13,14,30,16 -20180614,高三六14,15,31,17 -20180615,高三六15,16,32,18 -20180616,高三六16,17,33,19 -20180617,高三六17,18,34,20 -20180618,高三六18,19,35,21 -20180619,高三六19,20,36,22 -20180620,高三六20,21,37,23 -20180621,高三六21,22,38,24 -20180622,高三六22,23,39,25 -20180623,高三六23,24,40,26 -20180624,高三六24,25,41,27 -20180625,高三六25,26,42,28 -20180626,高三六26,27,43,29 -20180627,高三六27,28,44,30 -20180628,高三六28,29,45,31 -20180629,高三六29,30,46,32 -20180630,高三六30,31,47,33 -20180631,高三六31,32,48,34 -20180632,高三六32,33,49,35 -20180633,高三六33,34,50,36 -20180634,高三六34,35,51,37 -20180635,高三六35,36,52,38 -20180636,高三六36,37,53,39 -20180637,高三六37,38,54,40 -20180638,高三六38,39,55,41 -20180639,高三六39,40,56,42 -20180640,高三六40,41,57,43 -20180641,高三六41,42,58,44 -20180642,高三六42,43,59,45 -20180643,高三六43,44,60,46 -20180644,高三六44,45,61,47 -20180645,高三六45,46,62,48 -20180701,高三七01,2,18,4 -20180702,高三七02,3,19,5 -20180703,高三七03,4,20,6 -20180704,高三七04,5,21,7 -20180705,高三七05,6,22,8 -20180706,高三七06,7,23,9 -20180707,高三七07,8,24,10 -20180708,高三七08,9,25,11 -20180709,高三七09,10,26,12 -20180710,高三七10,11,27,13 -20180711,高三七11,12,28,14 -20180712,高三七12,13,29,15 -20180713,高三七13,14,30,16 -20180714,高三七14,15,31,17 -20180715,高三七15,16,32,18 -20180716,高三七16,17,33,19 -20180717,高三七17,18,34,20 -20180718,高三七18,19,35,21 -20180719,高三七19,20,36,22 -20180720,高三七20,21,37,23 -20180721,高三七21,22,38,24 -20180722,高三七22,23,39,25 -20180723,高三七23,24,40,26 -20180724,高三七24,25,41,27 -20180725,高三七25,26,42,28 -20180726,高三七26,27,43,29 -20180727,高三七27,28,44,30 -20180728,高三七28,29,45,31 -20180729,高三七29,30,46,32 -20180730,高三七30,31,47,33 -20180731,高三七31,32,48,34 -20180732,高三七32,33,49,35 -20180733,高三七33,34,50,36 -20180734,高三七34,35,51,37 -20180735,高三七35,36,52,38 -20180736,高三七36,37,53,39 -20180737,高三七37,38,54,40 -20180738,高三七38,39,55,41 -20180739,高三七39,40,56,42 -20180740,高三七40,41,57,43 -20180741,高三七41,42,58,44 -20180742,高三七42,43,59,45 -20180743,高三七43,44,60,46 -20180744,高三七44,45,61,47 -20180745,高三七45,46,62,48 -20180801,高三八01,2,18,4 -20180802,高三八02,3,19,5 -20180803,高三八03,4,20,6 -20180804,高三八04,5,21,7 -20180805,高三八05,6,22,8 -20180806,高三八06,7,23,9 -20180807,高三八07,8,24,10 -20180808,高三八08,9,25,11 -20180809,高三八09,10,26,12 -20180810,高三八10,11,27,13 -20180811,高三八11,12,28,14 -20180812,高三八12,13,29,15 -20180813,高三八13,14,30,16 -20180814,高三八14,15,31,17 -20180815,高三八15,16,32,18 -20180816,高三八16,17,33,19 -20180817,高三八17,18,34,20 -20180818,高三八18,19,35,21 -20180819,高三八19,20,36,22 -20180820,高三八20,21,37,23 -20180821,高三八21,22,38,24 -20180822,高三八22,23,39,25 -20180823,高三八23,24,40,26 -20180824,高三八24,25,41,27 -20180825,高三八25,26,42,28 -20180826,高三八26,27,43,29 -20180827,高三八27,28,44,30 -20180828,高三八28,29,45,31 -20180829,高三八29,30,46,32 -20180830,高三八30,31,47,33 -20180831,高三八31,32,48,34 -20180832,高三八32,33,49,35 -20180833,高三八33,34,50,36 -20180834,高三八34,35,51,37 -20180835,高三八35,36,52,38 -20180836,高三八36,37,53,39 -20180837,高三八37,38,54,40 -20180838,高三八38,39,55,41 -20180839,高三八39,40,56,42 -20180840,高三八40,41,57,43 -20180841,高三八41,42,58,44 -20180842,高三八42,43,59,45 -20180843,高三八43,44,60,46 -20180844,高三八44,45,61,47 -20180845,高三八45,46,62,48 -20180901,高三九01,2,18,4 -20180902,高三九02,3,19,5 -20180903,高三九03,4,20,6 -20180904,高三九04,5,21,7 -20180905,高三九05,6,22,8 -20180906,高三九06,7,23,9 -20180907,高三九07,8,24,10 -20180908,高三九08,9,25,11 -20180909,高三九09,10,26,12 -20180910,高三九10,11,27,13 -20180911,高三九11,12,28,14 -20180912,高三九12,13,29,15 -20180913,高三九13,14,30,16 -20180914,高三九14,15,31,17 -20180915,高三九15,16,32,18 -20180916,高三九16,17,33,19 -20180917,高三九17,18,34,20 -20180918,高三九18,19,35,21 -20180919,高三九19,20,36,22 -20180920,高三九20,21,37,23 -20180921,高三九21,22,38,24 -20180922,高三九22,23,39,25 -20180923,高三九23,24,40,26 -20180924,高三九24,25,41,27 -20180925,高三九25,26,42,28 -20180926,高三九26,27,43,29 -20180927,高三九27,28,44,30 -20180928,高三九28,29,45,31 -20180929,高三九29,30,46,32 -20180930,高三九30,31,47,33 -20180931,高三九31,32,48,34 -20180932,高三九32,33,49,35 -20180933,高三九33,34,50,36 -20180934,高三九34,35,51,37 -20180935,高三九35,36,52,38 -20180936,高三九36,37,53,39 -20180937,高三九37,38,54,40 -20180938,高三九38,39,55,41 -20180939,高三九39,40,56,42 -20180940,高三九40,41,57,43 -20180941,高三九41,42,58,44 -20180942,高三九42,43,59,45 -20180943,高三九43,44,60,46 -20180944,高三九44,45,61,47 -20180945,高三九45,46,62,48 -20181001,高三十01,2,18,4 -20181002,高三十02,3,19,5 -20181003,高三十03,4,20,6 -20181004,高三十04,5,21,7 -20181005,高三十05,6,22,8 -20181006,高三十06,7,23,9 -20181007,高三十07,8,24,10 -20181008,高三十08,9,25,11 -20181009,高三十09,10,26,12 -20181010,高三十10,11,27,13 -20181011,高三十11,12,28,14 -20181012,高三十12,13,29,15 -20181013,高三十13,14,30,16 -20181014,高三十14,15,31,17 -20181015,高三十15,16,32,18 -20181016,高三十16,17,33,19 -20181017,高三十17,18,34,20 -20181018,高三十18,19,35,21 -20181019,高三十19,20,36,22 -20181020,高三十20,21,37,23 -20181021,高三十21,22,38,24 -20181022,高三十22,23,39,25 -20181023,高三十23,24,40,26 -20181024,高三十24,25,41,27 -20181025,高三十25,26,42,28 -20181026,高三十26,27,43,29 -20181027,高三十27,28,44,30 -20181028,高三十28,29,45,31 -20181029,高三十29,30,46,32 -20181030,高三十30,31,47,33 -20181031,高三十31,32,48,34 -20181032,高三十32,33,49,35 -20181033,高三十33,34,50,36 -20181034,高三十34,35,51,37 -20181035,高三十35,36,52,38 -20181036,高三十36,37,53,39 -20181037,高三十37,38,54,40 -20181038,高三十38,39,55,41 -20181039,高三十39,40,56,42 -20181040,高三十40,41,57,43 -20181041,高三十41,42,58,44 -20181042,高三十42,43,59,45 -20181043,高三十43,44,60,46 -20181044,高三十44,45,61,47 -20181045,高三十45,46,62,48 -20181201,蛟三二01,13,17,11 -20181202,蛟三二02,1,11,13 -20181203,蛟三二03,3,7,11 -20181204,蛟三二04,10,17,2 -20181205,蛟三二05,7,4,2 -20181206,蛟三二06,19,14,4 -20181207,蛟三二07,6,6,16 -20181208,蛟三二08,17,19,3 -20181209,蛟三二09,7,6,10 -20181210,蛟三二10,19,15,15 -20181211,蛟三二11,4,18,12 -20181212,蛟三二12,5,15,1 -20181213,蛟三二13,18,20,6 -20181214,蛟三二14,23,8,13 -20181215,蛟三二15,19,15,3 -20181216,蛟三二16,17,10,13 -20181217,蛟三二17,24,1,9 -20181218,蛟三二18,23,9,5 -20181219,蛟三二19,14,15,15 -20181220,蛟三二20,10,18,7 -20181221,蛟三二21,5,18,13 -20181222,蛟三二22,8,10,5 -20181223,蛟三二23,16,8,11 -20181224,蛟三二24,19,12,7 -20181225,蛟三二25,17,10,1 -20181226,蛟三二26,14,8,10 -20181227,蛟三二27,21,10,2 -20181228,蛟三二28,20,9,9 -20181229,蛟三二29,9,11,13 -20181230,蛟三二30,20,9,16 -20181231,蛟三二31,6,16,11 -20181232,蛟三二32,19,8,16 -20181233,蛟三二33,1,9,12 -20181234,蛟三二34,17,16,5 -20181235,蛟三二35,6,11,4 -20181236,蛟三二36,15,14,9 -20181237,蛟三二37,12,4,4 -20181238,蛟三二38,9,4,4 -20181239,蛟三二39,1,10,10 -20181240,蛟三二40,6,5,1 -20181241,蛟三二41,6,12,13 -20181242,蛟三二42,16,9,8 -20181243,蛟三二43,10,6,6 -20181244,蛟三二44,14,19,5 -20181245,蛟三二45,23,10,12 -20181301,蛟三三01,23,13,1 -20181302,蛟三三02,24,11,5 -20181303,蛟三三03,10,11,6 -20181304,蛟三三04,8,18,13 -20181305,蛟三三05,18,8,8 -20181306,蛟三三06,5,7,4 -20181307,蛟三三07,4,11,11 -20181308,蛟三三08,14,12,15 -20181309,蛟三三09,22,8,11 -20181310,蛟三三10,16,10,4 -20181311,蛟三三11,23,20,3 -20181312,蛟三三12,23,10,12 -20181313,蛟三三13,19,14,7 -20181314,蛟三三14,8,7,2 -20181315,蛟三三15,2,3,7 -20181316,蛟三三16,8,10,7 -20181317,蛟三三17,8,3,6 -20181318,蛟三三18,9,17,8 -20181319,蛟三三19,19,4,1 -20181320,蛟三三20,3,14,2 -20181321,蛟三三21,13,13,14 -20181322,蛟三三22,18,18,4 -20181323,蛟三三23,15,12,11 -20181324,蛟三三24,20,15,8 -20181325,蛟三三25,8,4,10 -20181326,蛟三三26,15,19,6 -20181327,蛟三三27,17,19,3 -20181328,蛟三三28,5,5,15 -20181329,蛟三三29,6,12,6 -20181330,蛟三三30,2,6,16 -20181331,蛟三三31,8,18,1 -20181332,蛟三三32,10,14,6 -20181333,蛟三三33,9,13,13 -20181334,蛟三三34,4,7,5 -20181335,蛟三三35,15,3,15 -20181336,蛟三三36,8,3,15 -20181337,蛟三三37,21,18,2 -20181338,蛟三三38,8,13,15 -20181339,蛟三三39,9,11,16 -20181340,蛟三三40,11,2,1 -20181341,蛟三三41,16,20,14 -20181342,蛟三三42,12,2,9 -20181343,蛟三三43,16,10,4 -20181344,蛟三三44,4,13,15 -20181345,蛟三三45,7,17,13 -20181401,蛟三四01,14,4,14 -20181402,蛟三四02,10,2,4 -20181403,蛟三四03,19,1,14 -20181404,蛟三四04,23,16,3 -20181405,蛟三四05,11,7,10 -20181406,蛟三四06,15,2,14 -20181407,蛟三四07,4,6,16 -20181408,蛟三四08,12,10,14 -20181409,蛟三四09,3,15,9 -20181410,蛟三四10,4,16,15 -20181411,蛟三四11,9,16,12 -20181412,蛟三四12,1,17,4 -20181413,蛟三四13,7,11,4 -20181414,蛟三四14,8,11,5 -20181415,蛟三四15,15,12,15 -20181416,蛟三四16,7,20,15 -20181417,蛟三四17,6,10,1 -20181418,蛟三四18,6,7,3 -20181419,蛟三四19,4,11,5 -20181420,蛟三四20,17,12,15 -20181421,蛟三四21,11,16,9 -20181422,蛟三四22,13,11,1 -20181423,蛟三四23,2,12,11 -20181424,蛟三四24,11,1,12 -20181425,蛟三四25,7,7,13 -20181426,蛟三四26,8,17,12 -20181427,蛟三四27,18,15,15 -20181428,蛟三四28,18,3,14 -20181429,蛟三四29,24,6,3 -20181430,蛟三四30,17,14,13 -20181431,蛟三四31,21,2,7 -20181432,蛟三四32,18,11,8 -20181433,蛟三四33,8,11,12 -20181434,蛟三四34,22,15,13 -20181435,蛟三四35,8,2,6 -20181436,蛟三四36,13,17,14 -20181437,蛟三四37,10,8,10 -20181438,蛟三四38,7,2,10 -20181439,蛟三四39,12,18,8 -20181440,蛟三四40,19,19,12 -20181441,蛟三四41,24,2,5 -20181442,蛟三四42,9,16,12 -20181443,蛟三四43,13,6,15 -20181444,蛟三四44,4,6,6 -20181445,蛟三四45,14,3,16 -20181501,蛟三五01,4,2,1 -20181502,蛟三五02,2,17,9 -20181503,蛟三五03,16,11,13 -20181504,蛟三五04,17,13,14 -20181505,蛟三五05,2,12,9 -20181506,蛟三五06,13,1,8 -20181507,蛟三五07,2,17,1 -20181508,蛟三五08,9,7,7 -20181509,蛟三五09,24,18,8 -20181510,蛟三五10,13,13,15 -20181511,蛟三五11,20,13,16 -20181512,蛟三五12,4,17,3 -20181513,蛟三五13,8,20,8 -20181514,蛟三五14,18,9,12 -20181515,蛟三五15,17,8,4 -20181516,蛟三五16,21,15,13 -20181517,蛟三五17,15,17,8 -20181518,蛟三五18,11,15,14 -20181519,蛟三五19,14,20,11 -20181520,蛟三五20,3,8,16 -20181521,蛟三五21,7,14,11 -20181522,蛟三五22,10,5,11 -20181523,蛟三五23,9,1,16 -20181524,蛟三五24,23,10,8 -20181525,蛟三五25,19,11,5 -20181526,蛟三五26,22,4,11 -20181527,蛟三五27,6,13,8 -20181528,蛟三五28,13,12,2 -20181529,蛟三五29,18,15,8 -20181530,蛟三五30,14,5,10 -20181531,蛟三五31,12,8,16 -20181532,蛟三五32,10,15,11 -20181533,蛟三五33,1,12,15 -20181534,蛟三五34,11,1,6 -20181535,蛟三五35,3,12,9 -20181536,蛟三五36,6,6,11 -20181537,蛟三五37,5,10,5 -20181538,蛟三五38,7,10,9 -20181539,蛟三五39,21,6,1 -20181540,蛟三五40,20,14,8 -20181541,蛟三五41,18,4,12 -20181542,蛟三五42,10,3,6 -20181543,蛟三五43,23,16,8 -20181544,蛟三五44,15,4,7 -20181545,蛟三五45,15,15,3 -20181601,蛟三六01,21,17,8 -20181602,蛟三六02,21,15,9 -20181603,蛟三六03,6,15,3 -20181604,蛟三六04,22,11,2 -20181605,蛟三六05,17,1,6 -20181606,蛟三六06,12,20,2 -20181607,蛟三六07,10,7,12 -20181608,蛟三六08,2,13,14 -20181609,蛟三六09,6,14,4 -20181610,蛟三六10,18,9,2 -20181611,蛟三六11,23,5,2 -20181612,蛟三六12,2,17,14 -20181613,蛟三六13,6,8,11 -20181614,蛟三六14,16,20,1 -20181615,蛟三六15,9,19,12 -20181616,蛟三六16,4,17,5 -20181617,蛟三六17,15,2,5 -20181618,蛟三六18,8,11,14 -20181619,蛟三六19,7,2,15 -20181620,蛟三六20,10,12,15 -20181621,蛟三六21,15,20,5 -20181622,蛟三六22,19,8,10 -20181623,蛟三六23,9,3,2 -20181624,蛟三六24,10,20,6 -20181625,蛟三六25,18,20,12 -20181626,蛟三六26,17,12,11 -20181627,蛟三六27,13,12,9 -20181628,蛟三六28,11,6,7 -20181629,蛟三六29,23,19,7 -20181630,蛟三六30,12,18,2 -20181631,蛟三六31,6,1,7 -20181632,蛟三六32,7,16,3 -20181633,蛟三六33,4,1,8 -20181634,蛟三六34,18,16,2 -20181635,蛟三六35,12,4,2 -20181636,蛟三六36,8,7,2 -20181637,蛟三六37,12,13,6 -20181638,蛟三六38,8,5,7 -20181639,蛟三六39,24,8,14 -20181640,蛟三六40,13,13,16 -20181641,蛟三六41,6,15,6 -20181642,蛟三六42,20,3,15 -20181643,蛟三六43,3,14,5 -20181644,蛟三六44,11,15,15 -20181645,蛟三六45,14,18,3 -20181701,蛟三七01,13,13,6 -20181702,蛟三七02,7,19,3 -20181703,蛟三七03,4,20,9 -20181704,蛟三七04,2,13,14 -20181705,蛟三七05,1,9,5 -20181706,蛟三七06,10,2,14 -20181707,蛟三七07,4,8,16 -20181708,蛟三七08,8,1,15 -20181709,蛟三七09,6,4,8 -20181710,蛟三七10,18,3,10 -20181711,蛟三七11,10,18,12 -20181712,蛟三七12,11,8,4 -20181713,蛟三七13,8,19,7 -20181714,蛟三七14,4,10,13 -20181715,蛟三七15,21,11,15 -20181716,蛟三七16,11,14,5 -20181717,蛟三七17,8,3,6 -20181718,蛟三七18,1,5,12 -20181719,蛟三七19,9,2,10 -20181720,蛟三七20,11,19,9 -20181721,蛟三七21,7,7,14 -20181722,蛟三七22,18,14,15 -20181723,蛟三七23,14,10,8 -20181724,蛟三七24,21,15,11 -20181725,蛟三七25,11,14,15 -20181726,蛟三七26,23,15,14 -20181727,蛟三七27,10,11,15 -20181728,蛟三七28,10,12,1 -20181729,蛟三七29,11,10,8 -20181730,蛟三七30,13,20,8 -20181731,蛟三七31,7,15,3 -20181732,蛟三七32,4,13,4 -20181733,蛟三七33,18,6,13 -20181734,蛟三七34,5,8,2 -20181735,蛟三七35,7,12,5 -20181736,蛟三七36,2,12,9 -20181737,蛟三七37,7,10,16 -20181738,蛟三七38,21,15,5 -20181739,蛟三七39,4,20,6 -20181740,蛟三七40,1,17,13 -20181741,蛟三七41,1,3,6 -20181742,蛟三七42,9,4,2 -20181743,蛟三七43,12,1,6 -20181744,蛟三七44,8,2,13 -20181745,蛟三七45,23,10,11 diff --git a/database_export/csv/user.csv b/database_export/csv/user.csv deleted file mode 100644 index 5fcb12b..0000000 --- a/database_export/csv/user.csv +++ /dev/null @@ -1,71 +0,0 @@ -userId,userName,class,permission,password -202001,高一1班团支书,202001,1,e10adc3949ba59abbe56e057f20f883e -202002,高一2班团支书,202002,1,e10adc3949ba59abbe56e057f20f883e -202003,高一3班团支书,202003,1,e10adc3949ba59abbe56e057f20f883e -202004,高一4班团支书,202004,1,e10adc3949ba59abbe56e057f20f883e -202005,高一5班团支书,202005,1,e10adc3949ba59abbe56e057f20f883e -202006,高一6班团支书,202006,1,e10adc3949ba59abbe56e057f20f883e -202007,高一7班团支书,202007,1,e10adc3949ba59abbe56e057f20f883e -202008,高一8班团支书,202008,1,e10adc3949ba59abbe56e057f20f883e -202009,高一9班团支书,202009,1,e10adc3949ba59abbe56e057f20f883e -202010,高一10班团支书,202010,1,e10adc3949ba59abbe56e057f20f883e -202012,蛟一2班团支书,202012,1,e10adc3949ba59abbe56e057f20f883e -202013,蛟一3班团支书,202013,1,e10adc3949ba59abbe56e057f20f883e -202014,蛟一4班团支书,202014,1,e10adc3949ba59abbe56e057f20f883e -202015,蛟一5班团支书,202015,1,e10adc3949ba59abbe56e057f20f883e -202016,蛟一6班团支书,202016,1,e10adc3949ba59abbe56e057f20f883e -202017,蛟一7班团支书,202017,1,e10adc3949ba59abbe56e057f20f883e -201901,高二1班团支书,201901,1,e10adc3949ba59abbe56e057f20f883e -201902,高二2班团支书,201902,1,e10adc3949ba59abbe56e057f20f883e -201903,高二3班团支书,201903,1,e10adc3949ba59abbe56e057f20f883e -201904,高二4班团支书,201904,1,e10adc3949ba59abbe56e057f20f883e -201905,高二5班团支书,201905,1,e10adc3949ba59abbe56e057f20f883e -201906,高二6班团支书,201906,1,e10adc3949ba59abbe56e057f20f883e -201907,高二7班团支书,201907,1,e10adc3949ba59abbe56e057f20f883e -201908,高二8班团支书,201908,1,e10adc3949ba59abbe56e057f20f883e -201909,高二9班团支书,201909,1,e10adc3949ba59abbe56e057f20f883e -201910,高二10班团支书,201910,1,e10adc3949ba59abbe56e057f20f883e -201912,蛟二2班团支书,201912,1,e10adc3949ba59abbe56e057f20f883e -201913,蛟二3班团支书,201913,1,e10adc3949ba59abbe56e057f20f883e -201914,蛟二4班团支书,201914,1,e10adc3949ba59abbe56e057f20f883e -201915,蛟二5班团支书,201915,1,e10adc3949ba59abbe56e057f20f883e -201916,蛟二6班团支书,201916,1,e10adc3949ba59abbe56e057f20f883e -201917,蛟二7班团支书,201917,1,e10adc3949ba59abbe56e057f20f883e -201801,高三1班团支书,201801,1,e10adc3949ba59abbe56e057f20f883e -201802,高三2班团支书,201802,1,e10adc3949ba59abbe56e057f20f883e -201803,高三3班团支书,201803,1,e10adc3949ba59abbe56e057f20f883e -201804,高三4班团支书,201804,1,e10adc3949ba59abbe56e057f20f883e -201805,高三5班团支书,201805,1,e10adc3949ba59abbe56e057f20f883e -201806,高三6班团支书,201806,1,e10adc3949ba59abbe56e057f20f883e -201807,高三7班团支书,201807,1,e10adc3949ba59abbe56e057f20f883e -201808,高三8班团支书,201808,1,e10adc3949ba59abbe56e057f20f883e -201809,高三9班团支书,201809,1,e10adc3949ba59abbe56e057f20f883e -201810,高三10班团支书,201810,1,e10adc3949ba59abbe56e057f20f883e -201812,蛟三2班团支书,201812,1,e10adc3949ba59abbe56e057f20f883e -201813,蛟三3班团支书,201813,1,e10adc3949ba59abbe56e057f20f883e -201814,蛟三4班团支书,201814,1,e10adc3949ba59abbe56e057f20f883e -201815,蛟三5班团支书,201815,1,e10adc3949ba59abbe56e057f20f883e -201816,蛟三6班团支书,201816,1,e10adc3949ba59abbe56e057f20f883e -201817,蛟三7班团支书,201817,1,e10adc3949ba59abbe56e057f20f883e -100001,教师1,100000,2,e10adc3949ba59abbe56e057f20f883e -100002,教师2,100000,2,e10adc3949ba59abbe56e057f20f883e -100003,教师3,100000,2,e10adc3949ba59abbe56e057f20f883e -100004,教师4,100000,2,e10adc3949ba59abbe56e057f20f883e -100005,教师5,100000,2,e10adc3949ba59abbe56e057f20f883e -100006,教师6,100000,2,e10adc3949ba59abbe56e057f20f883e -100007,教师7,100000,2,e10adc3949ba59abbe56e057f20f883e -100008,教师8,100000,2,e10adc3949ba59abbe56e057f20f883e -100009,教师9,100000,2,e10adc3949ba59abbe56e057f20f883e -100010,教师10,100000,2,e10adc3949ba59abbe56e057f20f883e -110001,管理员1,110000,3,e10adc3949ba59abbe56e057f20f883e -110002,管理员2,110000,3,e10adc3949ba59abbe56e057f20f883e -110003,管理员3,110000,3,e10adc3949ba59abbe56e057f20f883e -110004,管理员4,110000,3,e10adc3949ba59abbe56e057f20f883e -110005,管理员5,110000,3,e10adc3949ba59abbe56e057f20f883e -110006,管理员6,110000,3,e10adc3949ba59abbe56e057f20f883e -110007,管理员7,110000,3,e10adc3949ba59abbe56e057f20f883e -110008,管理员8,110000,3,e10adc3949ba59abbe56e057f20f883e -110009,管理员9,110000,3,e10adc3949ba59abbe56e057f20f883e -110010,管理员10,110000,3,e10adc3949ba59abbe56e057f20f883e -120001,系统1,120000,4,e10adc3949ba59abbe56e057f20f883e -120002,系统2,120000,4,e10adc3949ba59abbe56e057f20f883e diff --git a/database_export/csv/volunteer.csv b/database_export/csv/volunteer.csv deleted file mode 100644 index 3830d9f..0000000 --- a/database_export/csv/volunteer.csv +++ /dev/null @@ -1,4 +0,0 @@ -volId,volName,volDate,volTime,stuMax,nowStuCount,description,status,volTimeInside,volTimeOutside,volTimeLarge,holderId -1,义工活动1,2020-01-01,16:00:00,5,5,第1次义工活动,2,4,0,0,100001 -2,义工活动2,2020-01-02,17:00:00,5,5,第2次义工活动,2,4,2,0,100001 -3,义工活动3,2020-01-03,18:00:00,5,5,第3次义工活动,2,4,0,0,100001 diff --git a/database_export/zvms-no-data.sql b/database_export/zvms-no-data.sql deleted file mode 100644 index 25a42c2..0000000 --- a/database_export/zvms-no-data.sql +++ /dev/null @@ -1,64 +0,0 @@ --- Adminer 4.7.6 MySQL dump - -SET NAMES utf8; -SET foreign_key_checks = 0; -SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; - -DROP TABLE IF EXISTS `class_vol`; -CREATE TABLE `class_vol` ( - `volId` int(11) DEFAULT NULL, - `class` int(11) DEFAULT NULL, - `stuMax` int(11) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - -DROP TABLE IF EXISTS `student`; -CREATE TABLE `student` ( - `stuId` int(11) NOT NULL, - `stuName` char(64) DEFAULT NULL, - `volTimeInside` int(11) DEFAULT NULL, - `volTimeOutside` int(11) DEFAULT NULL, - `volTimeLarge` int(11) DEFAULT NULL, - PRIMARY KEY (`stuId`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - -DROP TABLE IF EXISTS `stu_vol`; -CREATE TABLE `stu_vol` ( - `volId` int(11) DEFAULT NULL, - `stuId` int(11) DEFAULT NULL, - `status` smallint(6) DEFAULT NULL, - `volTimeInside` int(11) DEFAULT NULL, - `volTimeOutside` int(11) DEFAULT NULL, - `volTimeLarge` int(11) DEFAULT NULL, - `thought` TEXT DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - -DROP TABLE IF EXISTS `user`; -CREATE TABLE `user` ( - `userId` int(11) NOT NULL, - `userName` char(255) DEFAULT NULL, - `class` int(11) DEFAULT NULL, - `permission` smallint(6) DEFAULT NULL, - `password` char(255) DEFAULT NULL, - PRIMARY KEY (`userId`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - -DROP TABLE IF EXISTS `volunteer`; -CREATE TABLE `volunteer` ( - `volId` int(11) NOT NULL, - `volName` char(255) DEFAULT NULL, - `volDate` date DEFAULT NULL, - `volTime` time DEFAULT NULL, - `stuMax` int(11) DEFAULT NULL, - `nowStuCount` int(11) DEFAULT NULL, - `description` text, - `status` smallint(6) DEFAULT NULL, - `volTimeInside` int(11) DEFAULT NULL, - `volTimeOutside` int(11) DEFAULT NULL, - `volTimeLarge` int(11) DEFAULT NULL, - `holderId` int(11) DEFAULT NULL, - PRIMARY KEY (`volId`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/database_export/zvms.sql b/database_export/zvms.sql deleted file mode 100644 index d560a1b..0000000 --- a/database_export/zvms.sql +++ /dev/null @@ -1,2320 +0,0 @@ --- Adminer 4.7.6 MySQL dump - -SET NAMES utf8; -SET time_zone = '+00:00'; -SET foreign_key_checks = 0; -SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; - -DROP TABLE IF EXISTS `class_vol`; -CREATE TABLE `class_vol` ( - `volId` int(11) DEFAULT NULL, - `class` int(11) DEFAULT NULL, - `stuMax` int(11) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - -DROP TABLE IF EXISTS `student`; -CREATE TABLE `student` ( - `stuId` int(11) NOT NULL, - `stuName` char(64) DEFAULT NULL, - `volTimeInside` int(11) DEFAULT NULL, - `volTimeOutside` int(11) DEFAULT NULL, - `volTimeLarge` int(11) DEFAULT NULL, - PRIMARY KEY (`stuId`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -INSERT INTO `student` (`stuId`, `stuName`, `volTimeInside`, `volTimeOutside`, `volTimeLarge`) VALUES -(20200101, '高一一01', 1, 17, 13), -(20200102, '高一一02', 13, 6, 14), -(20200103, '高一一03', 4, 10, 10), -(20200104, '高一一04', 7, 10, 4), -(20200105, '高一一05', 3, 9, 13), -(20200106, '高一一06', 18, 9, 7), -(20200107, '高一一07', 19, 19, 13), -(20200108, '高一一08', 15, 17, 6), -(20200109, '高一一09', 19, 9, 11), -(20200110, '高一一10', 0, 3, 15), -(20200111, '高一一11', 24, 16, 2), -(20200112, '高一一12', 18, 5, 2), -(20200113, '高一一13', 5, 14, 13), -(20200114, '高一一14', 18, 2, 8), -(20200115, '高一一15', 22, 17, 12), -(20200116, '高一一16', 12, 18, 10), -(20200117, '高一一17', 5, 3, 5), -(20200118, '高一一18', 21, 0, 8), -(20200119, '高一一19', 18, 3, 8), -(20200120, '高一一20', 1, 7, 11), -(20200121, '高一一21', 20, 15, 8), -(20200122, '高一一22', 16, 8, 15), -(20200123, '高一一23', 17, 15, 1), -(20200124, '高一一24', 12, 19, 14), -(20200125, '高一一25', 2, 10, 12), -(20200126, '高一一26', 5, 5, 7), -(20200127, '高一一27', 9, 1, 13), -(20200128, '高一一28', 16, 6, 12), -(20200129, '高一一29', 22, 7, 5), -(20200130, '高一一30', 16, 11, 15), -(20200131, '高一一31', 9, 17, 16), -(20200132, '高一一32', 4, 15, 0), -(20200133, '高一一33', 21, 0, 15), -(20200134, '高一一34', 19, 9, 5), -(20200135, '高一一35', 15, 0, 16), -(20200136, '高一一36', 16, 12, 16), -(20200137, '高一一37', 17, 0, 13), -(20200138, '高一一38', 22, 3, 1), -(20200139, '高一一39', 18, 17, 4), -(20200140, '高一一40', 10, 20, 8), -(20200141, '高一一41', 16, 1, 0), -(20200142, '高一一42', 21, 12, 16), -(20200143, '高一一43', 12, 12, 16), -(20200144, '高一一44', 15, 18, 15), -(20200145, '高一一45', 9, 17, 3), -(20200201, '高一二01', 19, 0, 7), -(20200202, '高一二02', 20, 1, 7), -(20200203, '高一二03', 12, 18, 0), -(20200204, '高一二04', 12, 8, 1), -(20200205, '高一二05', 8, 19, 11), -(20200206, '高一二06', 0, 1, 8), -(20200207, '高一二07', 14, 20, 16), -(20200208, '高一二08', 21, 17, 4), -(20200209, '高一二09', 18, 5, 1), -(20200210, '高一二10', 16, 10, 7), -(20200211, '高一二11', 4, 11, 1), -(20200212, '高一二12', 22, 7, 6), -(20200213, '高一二13', 14, 12, 9), -(20200214, '高一二14', 6, 5, 16), -(20200215, '高一二15', 18, 15, 7), -(20200216, '高一二16', 19, 12, 16), -(20200217, '高一二17', 13, 18, 16), -(20200218, '高一二18', 10, 16, 7), -(20200219, '高一二19', 18, 8, 8), -(20200220, '高一二20', 0, 6, 9), -(20200221, '高一二21', 12, 2, 0), -(20200222, '高一二22', 15, 12, 8), -(20200223, '高一二23', 20, 17, 7), -(20200224, '高一二24', 13, 5, 2), -(20200225, '高一二25', 15, 20, 3), -(20200226, '高一二26', 2, 14, 13), -(20200227, '高一二27', 0, 5, 4), -(20200228, '高一二28', 16, 2, 9), -(20200229, '高一二29', 21, 14, 16), -(20200230, '高一二30', 13, 4, 15), -(20200231, '高一二31', 24, 5, 3), -(20200232, '高一二32', 20, 19, 3), -(20200233, '高一二33', 24, 19, 1), -(20200234, '高一二34', 0, 5, 11), -(20200235, '高一二35', 23, 8, 5), -(20200236, '高一二36', 12, 19, 2), -(20200237, '高一二37', 4, 13, 10), -(20200238, '高一二38', 20, 7, 10), -(20200239, '高一二39', 2, 2, 7), -(20200240, '高一二40', 9, 10, 16), -(20200241, '高一二41', 24, 2, 13), -(20200242, '高一二42', 13, 15, 4), -(20200243, '高一二43', 23, 17, 16), -(20200244, '高一二44', 8, 18, 9), -(20200245, '高一二45', 0, 9, 11), -(20200301, '高一三01', 14, 10, 11), -(20200302, '高一三02', 18, 2, 1), -(20200303, '高一三03', 14, 11, 1), -(20200304, '高一三04', 23, 15, 13), -(20200305, '高一三05', 13, 0, 0), -(20200306, '高一三06', 13, 10, 0), -(20200307, '高一三07', 7, 15, 6), -(20200308, '高一三08', 15, 0, 10), -(20200309, '高一三09', 9, 19, 7), -(20200310, '高一三10', 4, 17, 0), -(20200311, '高一三11', 10, 5, 3), -(20200312, '高一三12', 17, 10, 15), -(20200313, '高一三13', 10, 11, 6), -(20200314, '高一三14', 17, 7, 4), -(20200315, '高一三15', 23, 19, 13), -(20200316, '高一三16', 0, 14, 16), -(20200317, '高一三17', 21, 9, 2), -(20200318, '高一三18', 18, 11, 13), -(20200319, '高一三19', 1, 5, 12), -(20200320, '高一三20', 22, 9, 1), -(20200321, '高一三21', 10, 16, 5), -(20200322, '高一三22', 14, 1, 1), -(20200323, '高一三23', 21, 13, 14), -(20200324, '高一三24', 15, 2, 14), -(20200325, '高一三25', 17, 5, 13), -(20200326, '高一三26', 2, 12, 11), -(20200327, '高一三27', 1, 7, 7), -(20200328, '高一三28', 15, 18, 9), -(20200329, '高一三29', 24, 1, 13), -(20200330, '高一三30', 17, 7, 16), -(20200331, '高一三31', 4, 5, 12), -(20200332, '高一三32', 2, 12, 7), -(20200333, '高一三33', 5, 9, 8), -(20200334, '高一三34', 1, 0, 14), -(20200335, '高一三35', 2, 7, 15), -(20200336, '高一三36', 16, 6, 3), -(20200337, '高一三37', 7, 19, 5), -(20200338, '高一三38', 7, 19, 2), -(20200339, '高一三39', 3, 16, 10), -(20200340, '高一三40', 10, 5, 7), -(20200341, '高一三41', 1, 18, 2), -(20200342, '高一三42', 1, 3, 3), -(20200343, '高一三43', 20, 14, 15), -(20200344, '高一三44', 5, 0, 1), -(20200345, '高一三45', 23, 18, 4), -(20200401, '高一四01', 0, 13, 7), -(20200402, '高一四02', 19, 20, 2), -(20200403, '高一四03', 17, 10, 14), -(20200404, '高一四04', 2, 0, 5), -(20200405, '高一四05', 12, 10, 13), -(20200406, '高一四06', 12, 16, 15), -(20200407, '高一四07', 23, 18, 5), -(20200408, '高一四08', 13, 14, 5), -(20200409, '高一四09', 1, 2, 5), -(20200410, '高一四10', 14, 12, 7), -(20200411, '高一四11', 15, 9, 3), -(20200412, '高一四12', 15, 15, 1), -(20200413, '高一四13', 10, 1, 12), -(20200414, '高一四14', 17, 0, 11), -(20200415, '高一四15', 22, 13, 10), -(20200416, '高一四16', 23, 5, 11), -(20200417, '高一四17', 21, 5, 3), -(20200418, '高一四18', 23, 12, 12), -(20200419, '高一四19', 24, 7, 12), -(20200420, '高一四20', 17, 19, 8), -(20200421, '高一四21', 7, 18, 4), -(20200422, '高一四22', 20, 16, 4), -(20200423, '高一四23', 10, 12, 10), -(20200424, '高一四24', 13, 4, 1), -(20200425, '高一四25', 4, 11, 7), -(20200426, '高一四26', 14, 20, 12), -(20200427, '高一四27', 14, 14, 7), -(20200428, '高一四28', 21, 19, 15), -(20200429, '高一四29', 16, 16, 12), -(20200430, '高一四30', 7, 8, 14), -(20200431, '高一四31', 21, 17, 9), -(20200432, '高一四32', 14, 3, 15), -(20200433, '高一四33', 5, 17, 2), -(20200434, '高一四34', 7, 3, 5), -(20200435, '高一四35', 23, 20, 12), -(20200436, '高一四36', 17, 20, 6), -(20200437, '高一四37', 20, 14, 14), -(20200438, '高一四38', 24, 13, 11), -(20200439, '高一四39', 0, 8, 12), -(20200440, '高一四40', 17, 0, 10), -(20200441, '高一四41', 19, 7, 3), -(20200442, '高一四42', 11, 4, 12), -(20200443, '高一四43', 12, 4, 10), -(20200444, '高一四44', 5, 18, 6), -(20200445, '高一四45', 12, 12, 9), -(20200501, '高一五01', 2, 18, 4), -(20200502, '高一五02', 8, 15, 14), -(20200503, '高一五03', 14, 12, 24), -(20200504, '高一五04', 20, 9, 34), -(20200505, '高一五05', 26, 6, 44), -(20200506, '高一五06', 32, 3, 54), -(20200507, '高一五07', 38, 0, 64), -(20200508, '高一五08', 44, -3, 74), -(20200509, '高一五09', 50, -6, 84), -(20200510, '高一五10', 56, -9, 94), -(20200511, '高一五11', 62, -12, 104), -(20200512, '高一五12', 68, -15, 114), -(20200513, '高一五13', 74, -18, 124), -(20200514, '高一五14', 80, -21, 134), -(20200515, '高一五15', 86, -24, 144), -(20200516, '高一五16', 92, -27, 154), -(20200517, '高一五17', 98, -30, 164), -(20200518, '高一五18', 104, -33, 174), -(20200519, '高一五19', 110, -36, 184), -(20200520, '高一五20', 116, -39, 194), -(20200521, '高一五21', 122, -42, 204), -(20200522, '高一五22', 128, -45, 214), -(20200523, '高一五23', 134, -48, 224), -(20200524, '高一五24', 140, -51, 234), -(20200525, '高一五25', 146, -54, 244), -(20200526, '高一五26', 152, -57, 254), -(20200527, '高一五27', 158, -60, 264), -(20200528, '高一五28', 164, -63, 274), -(20200529, '高一五29', 170, -66, 284), -(20200530, '高一五30', 176, -69, 294), -(20200531, '高一五31', 182, -72, 304), -(20200532, '高一五32', 188, -75, 314), -(20200533, '高一五33', 194, -78, 324), -(20200534, '高一五34', 200, -81, 334), -(20200535, '高一五35', 206, -84, 344), -(20200536, '高一五36', 212, -87, 354), -(20200537, '高一五37', 218, -90, 364), -(20200538, '高一五38', 224, -93, 374), -(20200539, '高一五39', 230, -96, 384), -(20200540, '高一五40', 236, -99, 394), -(20200541, '高一五41', 242, -102, 404), -(20200542, '高一五42', 248, -105, 414), -(20200543, '高一五43', 254, -108, 424), -(20200544, '高一五44', 260, -111, 434), -(20200545, '高一五45', 266, -114, 444), -(20200601, '高一六01', 2, 18, 4), -(20200602, '高一六02', 3, 19, 5), -(20200603, '高一六03', 4, 20, 6), -(20200604, '高一六04', 5, 21, 7), -(20200605, '高一六05', 6, 22, 8), -(20200606, '高一六06', 7, 23, 9), -(20200607, '高一六07', 8, 24, 10), -(20200608, '高一六08', 9, 25, 11), -(20200609, '高一六09', 10, 26, 12), -(20200610, '高一六10', 11, 27, 13), -(20200611, '高一六11', 12, 28, 14), -(20200612, '高一六12', 13, 29, 15), -(20200613, '高一六13', 14, 30, 16), -(20200614, '高一六14', 15, 31, 17), -(20200615, '高一六15', 16, 32, 18), -(20200616, '高一六16', 17, 33, 19), -(20200617, '高一六17', 18, 34, 20), -(20200618, '高一六18', 19, 35, 21), -(20200619, '高一六19', 20, 36, 22), -(20200620, '高一六20', 21, 37, 23), -(20200621, '高一六21', 22, 38, 24), -(20200622, '高一六22', 23, 39, 25), -(20200623, '高一六23', 24, 40, 26), -(20200624, '高一六24', 25, 41, 27), -(20200625, '高一六25', 26, 42, 28), -(20200626, '高一六26', 27, 43, 29), -(20200627, '高一六27', 28, 44, 30), -(20200628, '高一六28', 29, 45, 31), -(20200629, '高一六29', 30, 46, 32), -(20200630, '高一六30', 31, 47, 33), -(20200631, '高一六31', 32, 48, 34), -(20200632, '高一六32', 33, 49, 35), -(20200633, '高一六33', 34, 50, 36), -(20200634, '高一六34', 35, 51, 37), -(20200635, '高一六35', 36, 52, 38), -(20200636, '高一六36', 37, 53, 39), -(20200637, '高一六37', 38, 54, 40), -(20200638, '高一六38', 39, 55, 41), -(20200639, '高一六39', 40, 56, 42), -(20200640, '高一六40', 41, 57, 43), -(20200641, '高一六41', 42, 58, 44), -(20200642, '高一六42', 43, 59, 45), -(20200643, '高一六43', 44, 60, 46), -(20200644, '高一六44', 45, 61, 47), -(20200645, '高一六45', 46, 62, 48), -(20200701, '高一七01', 2, 18, 4), -(20200702, '高一七02', 3, 19, 5), -(20200703, '高一七03', 4, 20, 6), -(20200704, '高一七04', 5, 21, 7), -(20200705, '高一七05', 6, 22, 8), -(20200706, '高一七06', 7, 23, 9), -(20200707, '高一七07', 8, 24, 10), -(20200708, '高一七08', 9, 25, 11), -(20200709, '高一七09', 10, 26, 12), -(20200710, '高一七10', 11, 27, 13), -(20200711, '高一七11', 12, 28, 14), -(20200712, '高一七12', 13, 29, 15), -(20200713, '高一七13', 14, 30, 16), -(20200714, '高一七14', 15, 31, 17), -(20200715, '高一七15', 16, 32, 18), -(20200716, '高一七16', 17, 33, 19), -(20200717, '高一七17', 18, 34, 20), -(20200718, '高一七18', 19, 35, 21), -(20200719, '高一七19', 20, 36, 22), -(20200720, '高一七20', 21, 37, 23), -(20200721, '高一七21', 22, 38, 24), -(20200722, '高一七22', 23, 39, 25), -(20200723, '高一七23', 24, 40, 26), -(20200724, '高一七24', 25, 41, 27), -(20200725, '高一七25', 26, 42, 28), -(20200726, '高一七26', 27, 43, 29), -(20200727, '高一七27', 28, 44, 30), -(20200728, '高一七28', 29, 45, 31), -(20200729, '高一七29', 30, 46, 32), -(20200730, '高一七30', 31, 47, 33), -(20200731, '高一七31', 32, 48, 34), -(20200732, '高一七32', 33, 49, 35), -(20200733, '高一七33', 34, 50, 36), -(20200734, '高一七34', 35, 51, 37), -(20200735, '高一七35', 36, 52, 38), -(20200736, '高一七36', 37, 53, 39), -(20200737, '高一七37', 38, 54, 40), -(20200738, '高一七38', 39, 55, 41), -(20200739, '高一七39', 40, 56, 42), -(20200740, '高一七40', 41, 57, 43), -(20200741, '高一七41', 42, 58, 44), -(20200742, '高一七42', 43, 59, 45), -(20200743, '高一七43', 44, 60, 46), -(20200744, '高一七44', 45, 61, 47), -(20200745, '高一七45', 46, 62, 48), -(20200801, '高一八01', 2, 18, 4), -(20200802, '高一八02', 3, 19, 5), -(20200803, '高一八03', 4, 20, 6), -(20200804, '高一八04', 5, 21, 7), -(20200805, '高一八05', 6, 22, 8), -(20200806, '高一八06', 7, 23, 9), -(20200807, '高一八07', 8, 24, 10), -(20200808, '高一八08', 9, 25, 11), -(20200809, '高一八09', 10, 26, 12), -(20200810, '高一八10', 11, 27, 13), -(20200811, '高一八11', 12, 28, 14), -(20200812, '高一八12', 13, 29, 15), -(20200813, '高一八13', 14, 30, 16), -(20200814, '高一八14', 15, 31, 17), -(20200815, '高一八15', 16, 32, 18), -(20200816, '高一八16', 17, 33, 19), -(20200817, '高一八17', 18, 34, 20), -(20200818, '高一八18', 19, 35, 21), -(20200819, '高一八19', 20, 36, 22), -(20200820, '高一八20', 21, 37, 23), -(20200821, '高一八21', 22, 38, 24), -(20200822, '高一八22', 23, 39, 25), -(20200823, '高一八23', 24, 40, 26), -(20200824, '高一八24', 25, 41, 27), -(20200825, '高一八25', 26, 42, 28), -(20200826, '高一八26', 27, 43, 29), -(20200827, '高一八27', 28, 44, 30), -(20200828, '高一八28', 29, 45, 31), -(20200829, '高一八29', 30, 46, 32), -(20200830, '高一八30', 31, 47, 33), -(20200831, '高一八31', 32, 48, 34), -(20200832, '高一八32', 33, 49, 35), -(20200833, '高一八33', 34, 50, 36), -(20200834, '高一八34', 35, 51, 37), -(20200835, '高一八35', 36, 52, 38), -(20200836, '高一八36', 37, 53, 39), -(20200837, '高一八37', 38, 54, 40), -(20200838, '高一八38', 39, 55, 41), -(20200839, '高一八39', 40, 56, 42), -(20200840, '高一八40', 41, 57, 43), -(20200841, '高一八41', 42, 58, 44), -(20200842, '高一八42', 43, 59, 45), -(20200843, '高一八43', 44, 60, 46), -(20200844, '高一八44', 45, 61, 47), -(20200845, '高一八45', 46, 62, 48), -(20200901, '高一九01', 2, 18, 4), -(20200902, '高一九02', 3, 19, 5), -(20200903, '高一九03', 4, 20, 6), -(20200904, '高一九04', 5, 21, 7), -(20200905, '高一九05', 6, 22, 8), -(20200906, '高一九06', 7, 23, 9), -(20200907, '高一九07', 8, 24, 10), -(20200908, '高一九08', 9, 25, 11), -(20200909, '高一九09', 10, 26, 12), -(20200910, '高一九10', 11, 27, 13), -(20200911, '高一九11', 12, 28, 14), -(20200912, '高一九12', 13, 29, 15), -(20200913, '高一九13', 14, 30, 16), -(20200914, '高一九14', 15, 31, 17), -(20200915, '高一九15', 16, 32, 18), -(20200916, '高一九16', 17, 33, 19), -(20200917, '高一九17', 18, 34, 20), -(20200918, '高一九18', 19, 35, 21), -(20200919, '高一九19', 20, 36, 22), -(20200920, '高一九20', 21, 37, 23), -(20200921, '高一九21', 22, 38, 24), -(20200922, '高一九22', 23, 39, 25), -(20200923, '高一九23', 24, 40, 26), -(20200924, '高一九24', 25, 41, 27), -(20200925, '高一九25', 26, 42, 28), -(20200926, '高一九26', 27, 43, 29), -(20200927, '高一九27', 28, 44, 30), -(20200928, '高一九28', 29, 45, 31), -(20200929, '高一九29', 30, 46, 32), -(20200930, '高一九30', 31, 47, 33), -(20200931, '高一九31', 32, 48, 34), -(20200932, '高一九32', 33, 49, 35), -(20200933, '高一九33', 34, 50, 36), -(20200934, '高一九34', 35, 51, 37), -(20200935, '高一九35', 36, 52, 38), -(20200936, '高一九36', 37, 53, 39), -(20200937, '高一九37', 38, 54, 40), -(20200938, '高一九38', 39, 55, 41), -(20200939, '高一九39', 40, 56, 42), -(20200940, '高一九40', 41, 57, 43), -(20200941, '高一九41', 42, 58, 44), -(20200942, '高一九42', 43, 59, 45), -(20200943, '高一九43', 44, 60, 46), -(20200944, '高一九44', 45, 61, 47), -(20200945, '高一九45', 46, 62, 48), -(20201001, '高一十01', 2, 18, 4), -(20201002, '高一十02', 3, 19, 5), -(20201003, '高一十03', 4, 20, 6), -(20201004, '高一十04', 5, 21, 7), -(20201005, '高一十05', 6, 22, 8), -(20201006, '高一十06', 7, 23, 9), -(20201007, '高一十07', 8, 24, 10), -(20201008, '高一十08', 9, 25, 11), -(20201009, '高一十09', 10, 26, 12), -(20201010, '高一十10', 11, 27, 13), -(20201011, '高一十11', 12, 28, 14), -(20201012, '高一十12', 13, 29, 15), -(20201013, '高一十13', 14, 30, 16), -(20201014, '高一十14', 15, 31, 17), -(20201015, '高一十15', 16, 32, 18), -(20201016, '高一十16', 17, 33, 19), -(20201017, '高一十17', 18, 34, 20), -(20201018, '高一十18', 19, 35, 21), -(20201019, '高一十19', 20, 36, 22), -(20201020, '高一十20', 21, 37, 23), -(20201021, '高一十21', 22, 38, 24), -(20201022, '高一十22', 23, 39, 25), -(20201023, '高一十23', 24, 40, 26), -(20201024, '高一十24', 25, 41, 27), -(20201025, '高一十25', 26, 42, 28), -(20201026, '高一十26', 27, 43, 29), -(20201027, '高一十27', 28, 44, 30), -(20201028, '高一十28', 29, 45, 31), -(20201029, '高一十29', 30, 46, 32), -(20201030, '高一十30', 31, 47, 33), -(20201031, '高一十31', 32, 48, 34), -(20201032, '高一十32', 33, 49, 35), -(20201033, '高一十33', 34, 50, 36), -(20201034, '高一十34', 35, 51, 37), -(20201035, '高一十35', 36, 52, 38), -(20201036, '高一十36', 37, 53, 39), -(20201037, '高一十37', 38, 54, 40), -(20201038, '高一十38', 39, 55, 41), -(20201039, '高一十39', 40, 56, 42), -(20201040, '高一十40', 41, 57, 43), -(20201041, '高一十41', 42, 58, 44), -(20201042, '高一十42', 43, 59, 45), -(20201043, '高一十43', 44, 60, 46), -(20201044, '高一十44', 45, 61, 47), -(20201045, '高一十45', 46, 62, 48), -(20201201, '蛟一二01', 13, 17, 11), -(20201202, '蛟一二02', 1, 11, 13), -(20201203, '蛟一二03', 3, 7, 11), -(20201204, '蛟一二04', 10, 17, 2), -(20201205, '蛟一二05', 7, 4, 2), -(20201206, '蛟一二06', 19, 14, 4), -(20201207, '蛟一二07', 6, 6, 16), -(20201208, '蛟一二08', 17, 19, 3), -(20201209, '蛟一二09', 7, 6, 10), -(20201210, '蛟一二10', 19, 15, 15), -(20201211, '蛟一二11', 4, 18, 12), -(20201212, '蛟一二12', 5, 15, 1), -(20201213, '蛟一二13', 18, 20, 6), -(20201214, '蛟一二14', 23, 8, 13), -(20201215, '蛟一二15', 19, 15, 3), -(20201216, '蛟一二16', 17, 10, 13), -(20201217, '蛟一二17', 24, 1, 9), -(20201218, '蛟一二18', 23, 9, 5), -(20201219, '蛟一二19', 14, 15, 15), -(20201220, '蛟一二20', 10, 18, 7), -(20201221, '蛟一二21', 5, 18, 13), -(20201222, '蛟一二22', 8, 10, 5), -(20201223, '蛟一二23', 16, 8, 11), -(20201224, '蛟一二24', 19, 12, 7), -(20201225, '蛟一二25', 17, 10, 1), -(20201226, '蛟一二26', 14, 8, 10), -(20201227, '蛟一二27', 21, 10, 2), -(20201228, '蛟一二28', 20, 9, 9), -(20201229, '蛟一二29', 9, 11, 13), -(20201230, '蛟一二30', 20, 9, 16), -(20201231, '蛟一二31', 6, 16, 11), -(20201232, '蛟一二32', 19, 8, 16), -(20201233, '蛟一二33', 1, 9, 12), -(20201234, '蛟一二34', 17, 16, 5), -(20201235, '蛟一二35', 6, 11, 4), -(20201236, '蛟一二36', 15, 14, 9), -(20201237, '蛟一二37', 12, 4, 4), -(20201238, '蛟一二38', 9, 4, 4), -(20201239, '蛟一二39', 1, 10, 10), -(20201240, '蛟一二40', 6, 5, 1), -(20201241, '蛟一二41', 6, 12, 13), -(20201242, '蛟一二42', 16, 9, 8), -(20201243, '蛟一二43', 10, 6, 6), -(20201244, '蛟一二44', 14, 19, 5), -(20201245, '蛟一二45', 23, 10, 12), -(20201301, '蛟一三01', 23, 13, 1), -(20201302, '蛟一三02', 24, 11, 5), -(20201303, '蛟一三03', 10, 11, 6), -(20201304, '蛟一三04', 8, 18, 13), -(20201305, '蛟一三05', 18, 8, 8), -(20201306, '蛟一三06', 5, 7, 4), -(20201307, '蛟一三07', 4, 11, 11), -(20201308, '蛟一三08', 14, 12, 15), -(20201309, '蛟一三09', 22, 8, 11), -(20201310, '蛟一三10', 16, 10, 4), -(20201311, '蛟一三11', 23, 20, 3), -(20201312, '蛟一三12', 23, 10, 12), -(20201313, '蛟一三13', 19, 14, 7), -(20201314, '蛟一三14', 8, 7, 2), -(20201315, '蛟一三15', 2, 3, 7), -(20201316, '蛟一三16', 8, 10, 7), -(20201317, '蛟一三17', 8, 3, 6), -(20201318, '蛟一三18', 9, 17, 8), -(20201319, '蛟一三19', 19, 4, 1), -(20201320, '蛟一三20', 3, 14, 2), -(20201321, '蛟一三21', 13, 13, 14), -(20201322, '蛟一三22', 18, 18, 4), -(20201323, '蛟一三23', 15, 12, 11), -(20201324, '蛟一三24', 20, 15, 8), -(20201325, '蛟一三25', 8, 4, 10), -(20201326, '蛟一三26', 15, 19, 6), -(20201327, '蛟一三27', 17, 19, 3), -(20201328, '蛟一三28', 5, 5, 15), -(20201329, '蛟一三29', 6, 12, 6), -(20201330, '蛟一三30', 2, 6, 16), -(20201331, '蛟一三31', 8, 18, 1), -(20201332, '蛟一三32', 10, 14, 6), -(20201333, '蛟一三33', 9, 13, 13), -(20201334, '蛟一三34', 4, 7, 5), -(20201335, '蛟一三35', 15, 3, 15), -(20201336, '蛟一三36', 8, 3, 15), -(20201337, '蛟一三37', 21, 18, 2), -(20201338, '蛟一三38', 8, 13, 15), -(20201339, '蛟一三39', 9, 11, 16), -(20201340, '蛟一三40', 11, 2, 1), -(20201341, '蛟一三41', 16, 20, 14), -(20201342, '蛟一三42', 12, 2, 9), -(20201343, '蛟一三43', 16, 10, 4), -(20201344, '蛟一三44', 4, 13, 15), -(20201345, '蛟一三45', 7, 17, 13), -(20201401, '蛟一四01', 14, 4, 14), -(20201402, '蛟一四02', 10, 2, 4), -(20201403, '蛟一四03', 19, 1, 14), -(20201404, '蛟一四04', 23, 16, 3), -(20201405, '蛟一四05', 11, 7, 10), -(20201406, '蛟一四06', 15, 2, 14), -(20201407, '蛟一四07', 4, 6, 16), -(20201408, '蛟一四08', 12, 10, 14), -(20201409, '蛟一四09', 3, 15, 9), -(20201410, '蛟一四10', 4, 16, 15), -(20201411, '蛟一四11', 9, 16, 12), -(20201412, '蛟一四12', 1, 17, 4), -(20201413, '蛟一四13', 7, 11, 4), -(20201414, '蛟一四14', 8, 11, 5), -(20201415, '蛟一四15', 15, 12, 15), -(20201416, '蛟一四16', 7, 20, 15), -(20201417, '蛟一四17', 6, 10, 1), -(20201418, '蛟一四18', 6, 7, 3), -(20201419, '蛟一四19', 4, 11, 5), -(20201420, '蛟一四20', 17, 12, 15), -(20201421, '蛟一四21', 11, 16, 9), -(20201422, '蛟一四22', 13, 11, 1), -(20201423, '蛟一四23', 2, 12, 11), -(20201424, '蛟一四24', 11, 1, 12), -(20201425, '蛟一四25', 7, 7, 13), -(20201426, '蛟一四26', 8, 17, 12), -(20201427, '蛟一四27', 18, 15, 15), -(20201428, '蛟一四28', 18, 3, 14), -(20201429, '蛟一四29', 24, 6, 3), -(20201430, '蛟一四30', 17, 14, 13), -(20201431, '蛟一四31', 21, 2, 7), -(20201432, '蛟一四32', 18, 11, 8), -(20201433, '蛟一四33', 8, 11, 12), -(20201434, '蛟一四34', 22, 15, 13), -(20201435, '蛟一四35', 8, 2, 6), -(20201436, '蛟一四36', 13, 17, 14), -(20201437, '蛟一四37', 10, 8, 10), -(20201438, '蛟一四38', 7, 2, 10), -(20201439, '蛟一四39', 12, 18, 8), -(20201440, '蛟一四40', 19, 19, 12), -(20201441, '蛟一四41', 24, 2, 5), -(20201442, '蛟一四42', 9, 16, 12), -(20201443, '蛟一四43', 13, 6, 15), -(20201444, '蛟一四44', 4, 6, 6), -(20201445, '蛟一四45', 14, 3, 16), -(20201501, '蛟一五01', 4, 2, 1), -(20201502, '蛟一五02', 2, 17, 9), -(20201503, '蛟一五03', 16, 11, 13), -(20201504, '蛟一五04', 17, 13, 14), -(20201505, '蛟一五05', 2, 12, 9), -(20201506, '蛟一五06', 13, 1, 8), -(20201507, '蛟一五07', 2, 17, 1), -(20201508, '蛟一五08', 9, 7, 7), -(20201509, '蛟一五09', 24, 18, 8), -(20201510, '蛟一五10', 13, 13, 15), -(20201511, '蛟一五11', 20, 13, 16), -(20201512, '蛟一五12', 4, 17, 3), -(20201513, '蛟一五13', 8, 20, 8), -(20201514, '蛟一五14', 18, 9, 12), -(20201515, '蛟一五15', 17, 8, 4), -(20201516, '蛟一五16', 21, 15, 13), -(20201517, '蛟一五17', 15, 17, 8), -(20201518, '蛟一五18', 11, 15, 14), -(20201519, '蛟一五19', 14, 20, 11), -(20201520, '蛟一五20', 3, 8, 16), -(20201521, '蛟一五21', 7, 14, 11), -(20201522, '蛟一五22', 10, 5, 11), -(20201523, '蛟一五23', 9, 1, 16), -(20201524, '蛟一五24', 23, 10, 8), -(20201525, '蛟一五25', 19, 11, 5), -(20201526, '蛟一五26', 22, 4, 11), -(20201527, '蛟一五27', 6, 13, 8), -(20201528, '蛟一五28', 13, 12, 2), -(20201529, '蛟一五29', 18, 15, 8), -(20201530, '蛟一五30', 14, 5, 10), -(20201531, '蛟一五31', 12, 8, 16), -(20201532, '蛟一五32', 10, 15, 11), -(20201533, '蛟一五33', 1, 12, 15), -(20201534, '蛟一五34', 11, 1, 6), -(20201535, '蛟一五35', 3, 12, 9), -(20201536, '蛟一五36', 6, 6, 11), -(20201537, '蛟一五37', 5, 10, 5), -(20201538, '蛟一五38', 7, 10, 9), -(20201539, '蛟一五39', 21, 6, 1), -(20201540, '蛟一五40', 20, 14, 8), -(20201541, '蛟一五41', 18, 4, 12), -(20201542, '蛟一五42', 10, 3, 6), -(20201543, '蛟一五43', 23, 16, 8), -(20201544, '蛟一五44', 15, 4, 7), -(20201545, '蛟一五45', 15, 15, 3), -(20201601, '蛟一六01', 21, 17, 8), -(20201602, '蛟一六02', 21, 15, 9), -(20201603, '蛟一六03', 6, 15, 3), -(20201604, '蛟一六04', 22, 11, 2), -(20201605, '蛟一六05', 17, 1, 6), -(20201606, '蛟一六06', 12, 20, 2), -(20201607, '蛟一六07', 10, 7, 12), -(20201608, '蛟一六08', 2, 13, 14), -(20201609, '蛟一六09', 6, 14, 4), -(20201610, '蛟一六10', 18, 9, 2), -(20201611, '蛟一六11', 23, 5, 2), -(20201612, '蛟一六12', 2, 17, 14), -(20201613, '蛟一六13', 6, 8, 11), -(20201614, '蛟一六14', 16, 20, 1), -(20201615, '蛟一六15', 9, 19, 12), -(20201616, '蛟一六16', 4, 17, 5), -(20201617, '蛟一六17', 15, 2, 5), -(20201618, '蛟一六18', 8, 11, 14), -(20201619, '蛟一六19', 7, 2, 15), -(20201620, '蛟一六20', 10, 12, 15), -(20201621, '蛟一六21', 15, 20, 5), -(20201622, '蛟一六22', 19, 8, 10), -(20201623, '蛟一六23', 9, 3, 2), -(20201624, '蛟一六24', 10, 20, 6), -(20201625, '蛟一六25', 18, 20, 12), -(20201626, '蛟一六26', 17, 12, 11), -(20201627, '蛟一六27', 13, 12, 9), -(20201628, '蛟一六28', 11, 6, 7), -(20201629, '蛟一六29', 23, 19, 7), -(20201630, '蛟一六30', 12, 18, 2), -(20201631, '蛟一六31', 6, 1, 7), -(20201632, '蛟一六32', 7, 16, 3), -(20201633, '蛟一六33', 4, 1, 8), -(20201634, '蛟一六34', 18, 16, 2), -(20201635, '蛟一六35', 12, 4, 2), -(20201636, '蛟一六36', 8, 7, 2), -(20201637, '蛟一六37', 12, 13, 6), -(20201638, '蛟一六38', 8, 5, 7), -(20201639, '蛟一六39', 24, 8, 14), -(20201640, '蛟一六40', 13, 13, 16), -(20201641, '蛟一六41', 6, 15, 6), -(20201642, '蛟一六42', 20, 3, 15), -(20201643, '蛟一六43', 3, 14, 5), -(20201644, '蛟一六44', 11, 15, 15), -(20201645, '蛟一六45', 14, 18, 3), -(20201701, '蛟一七01', 13, 13, 6), -(20201702, '蛟一七02', 7, 19, 3), -(20201703, '蛟一七03', 4, 20, 9), -(20201704, '蛟一七04', 2, 13, 14), -(20201705, '蛟一七05', 1, 9, 5), -(20201706, '蛟一七06', 10, 2, 14), -(20201707, '蛟一七07', 4, 8, 16), -(20201708, '蛟一七08', 8, 1, 15), -(20201709, '蛟一七09', 6, 4, 8), -(20201710, '蛟一七10', 18, 3, 10), -(20201711, '蛟一七11', 10, 18, 12), -(20201712, '蛟一七12', 11, 8, 4), -(20201713, '蛟一七13', 8, 19, 7), -(20201714, '蛟一七14', 4, 10, 13), -(20201715, '蛟一七15', 21, 11, 15), -(20201716, '蛟一七16', 11, 14, 5), -(20201717, '蛟一七17', 8, 3, 6), -(20201718, '蛟一七18', 1, 5, 12), -(20201719, '蛟一七19', 9, 2, 10), -(20201720, '蛟一七20', 11, 19, 9), -(20201721, '蛟一七21', 7, 7, 14), -(20201722, '蛟一七22', 18, 14, 15), -(20201723, '蛟一七23', 14, 10, 8), -(20201724, '蛟一七24', 21, 15, 11), -(20201725, '蛟一七25', 11, 14, 15), -(20201726, '蛟一七26', 23, 15, 14), -(20201727, '蛟一七27', 10, 11, 15), -(20201728, '蛟一七28', 10, 12, 1), -(20201729, '蛟一七29', 11, 10, 8), -(20201730, '蛟一七30', 13, 20, 8), -(20201731, '蛟一七31', 7, 15, 3), -(20201732, '蛟一七32', 4, 13, 4), -(20201733, '蛟一七33', 18, 6, 13), -(20201734, '蛟一七34', 5, 8, 2), -(20201735, '蛟一七35', 7, 12, 5), -(20201736, '蛟一七36', 2, 12, 9), -(20201737, '蛟一七37', 7, 10, 16), -(20201738, '蛟一七38', 21, 15, 5), -(20201739, '蛟一七39', 4, 20, 6), -(20201740, '蛟一七40', 1, 17, 13), -(20201741, '蛟一七41', 1, 3, 6), -(20201742, '蛟一七42', 9, 4, 2), -(20201743, '蛟一七43', 12, 1, 6), -(20201744, '蛟一七44', 8, 2, 13), -(20201745, '蛟一七45', 23, 10, 11), -(20190101, '高二一01', 1, 17, 13), -(20190102, '高二一02', 13, 6, 14), -(20190103, '高二一03', 4, 10, 10), -(20190104, '高二一04', 7, 10, 4), -(20190105, '高二一05', 3, 9, 13), -(20190106, '高二一06', 18, 9, 7), -(20190107, '高二一07', 19, 19, 13), -(20190108, '高二一08', 15, 17, 6), -(20190109, '高二一09', 19, 9, 11), -(20190110, '高二一10', 0, 3, 15), -(20190111, '高二一11', 24, 16, 2), -(20190112, '高二一12', 18, 5, 2), -(20190113, '高二一13', 5, 14, 13), -(20190114, '高二一14', 18, 2, 8), -(20190115, '高二一15', 22, 17, 12), -(20190116, '高二一16', 12, 18, 10), -(20190117, '高二一17', 5, 3, 5), -(20190118, '高二一18', 21, 0, 8), -(20190119, '高二一19', 18, 3, 8), -(20190120, '高二一20', 1, 7, 11), -(20190121, '高二一21', 20, 15, 8), -(20190122, '高二一22', 16, 8, 15), -(20190123, '高二一23', 17, 15, 1), -(20190124, '高二一24', 12, 19, 14), -(20190125, '高二一25', 2, 10, 12), -(20190126, '高二一26', 5, 5, 7), -(20190127, '高二一27', 9, 1, 13), -(20190128, '高二一28', 16, 6, 12), -(20190129, '高二一29', 22, 7, 5), -(20190130, '高二一30', 16, 11, 15), -(20190131, '高二一31', 9, 17, 16), -(20190132, '高二一32', 4, 15, 0), -(20190133, '高二一33', 21, 0, 15), -(20190134, '高二一34', 19, 9, 5), -(20190135, '高二一35', 15, 0, 16), -(20190136, '高二一36', 16, 12, 16), -(20190137, '高二一37', 17, 0, 13), -(20190138, '高二一38', 22, 3, 1), -(20190139, '高二一39', 18, 17, 4), -(20190140, '高二一40', 10, 20, 8), -(20190141, '高二一41', 16, 1, 0), -(20190142, '高二一42', 21, 12, 16), -(20190143, '高二一43', 12, 12, 16), -(20190144, '高二一44', 15, 18, 15), -(20190145, '高二一45', 9, 17, 3), -(20190201, '高二二01', 19, 0, 7), -(20190202, '高二二02', 20, 1, 7), -(20190203, '高二二03', 12, 18, 0), -(20190204, '高二二04', 12, 8, 1), -(20190205, '高二二05', 8, 19, 11), -(20190206, '高二二06', 0, 1, 8), -(20190207, '高二二07', 14, 20, 16), -(20190208, '高二二08', 21, 17, 4), -(20190209, '高二二09', 18, 5, 1), -(20190210, '高二二10', 16, 10, 7), -(20190211, '高二二11', 4, 11, 1), -(20190212, '高二二12', 22, 7, 6), -(20190213, '高二二13', 14, 12, 9), -(20190214, '高二二14', 6, 5, 16), -(20190215, '高二二15', 18, 15, 7), -(20190216, '高二二16', 19, 12, 16), -(20190217, '高二二17', 13, 18, 16), -(20190218, '高二二18', 10, 16, 7), -(20190219, '高二二19', 18, 8, 8), -(20190220, '高二二20', 0, 6, 9), -(20190221, '高二二21', 12, 2, 0), -(20190222, '高二二22', 15, 12, 8), -(20190223, '高二二23', 20, 17, 7), -(20190224, '高二二24', 13, 5, 2), -(20190225, '高二二25', 15, 20, 3), -(20190226, '高二二26', 2, 14, 13), -(20190227, '高二二27', 0, 5, 4), -(20190228, '高二二28', 16, 2, 9), -(20190229, '高二二29', 21, 14, 16), -(20190230, '高二二30', 13, 4, 15), -(20190231, '高二二31', 24, 5, 3), -(20190232, '高二二32', 20, 19, 3), -(20190233, '高二二33', 24, 19, 1), -(20190234, '高二二34', 0, 5, 11), -(20190235, '高二二35', 23, 8, 5), -(20190236, '高二二36', 12, 19, 2), -(20190237, '高二二37', 4, 13, 10), -(20190238, '高二二38', 20, 7, 10), -(20190239, '高二二39', 2, 2, 7), -(20190240, '高二二40', 9, 10, 16), -(20190241, '高二二41', 24, 2, 13), -(20190242, '高二二42', 13, 15, 4), -(20190243, '高二二43', 23, 17, 16), -(20190244, '高二二44', 8, 18, 9), -(20190245, '高二二45', 0, 9, 11), -(20190301, '高二三01', 14, 10, 11), -(20190302, '高二三02', 18, 2, 1), -(20190303, '高二三03', 14, 11, 1), -(20190304, '高二三04', 23, 15, 13), -(20190305, '高二三05', 13, 0, 0), -(20190306, '高二三06', 13, 10, 0), -(20190307, '高二三07', 7, 15, 6), -(20190308, '高二三08', 15, 0, 10), -(20190309, '高二三09', 9, 19, 7), -(20190310, '高二三10', 4, 17, 0), -(20190311, '高二三11', 10, 5, 3), -(20190312, '高二三12', 17, 10, 15), -(20190313, '高二三13', 10, 11, 6), -(20190314, '高二三14', 17, 7, 4), -(20190315, '高二三15', 23, 19, 13), -(20190316, '高二三16', 0, 14, 16), -(20190317, '高二三17', 21, 9, 2), -(20190318, '高二三18', 18, 11, 13), -(20190319, '高二三19', 1, 5, 12), -(20190320, '高二三20', 22, 9, 1), -(20190321, '高二三21', 10, 16, 5), -(20190322, '高二三22', 14, 1, 1), -(20190323, '高二三23', 21, 13, 14), -(20190324, '高二三24', 15, 2, 14), -(20190325, '高二三25', 17, 5, 13), -(20190326, '高二三26', 2, 12, 11), -(20190327, '高二三27', 1, 7, 7), -(20190328, '高二三28', 15, 18, 9), -(20190329, '高二三29', 24, 1, 13), -(20190330, '高二三30', 17, 7, 16), -(20190331, '高二三31', 4, 5, 12), -(20190332, '高二三32', 2, 12, 7), -(20190333, '高二三33', 5, 9, 8), -(20190334, '高二三34', 1, 0, 14), -(20190335, '高二三35', 2, 7, 15), -(20190336, '高二三36', 16, 6, 3), -(20190337, '高二三37', 7, 19, 5), -(20190338, '高二三38', 7, 19, 2), -(20190339, '高二三39', 3, 16, 10), -(20190340, '高二三40', 10, 5, 7), -(20190341, '高二三41', 1, 18, 2), -(20190342, '高二三42', 1, 3, 3), -(20190343, '高二三43', 20, 14, 15), -(20190344, '高二三44', 5, 0, 1), -(20190345, '高二三45', 23, 18, 4), -(20190401, '高二四01', 0, 13, 7), -(20190402, '高二四02', 19, 20, 2), -(20190403, '高二四03', 17, 10, 14), -(20190404, '高二四04', 2, 0, 5), -(20190405, '高二四05', 12, 10, 13), -(20190406, '高二四06', 12, 16, 15), -(20190407, '高二四07', 23, 18, 5), -(20190408, '高二四08', 13, 14, 5), -(20190409, '高二四09', 1, 2, 5), -(20190410, '高二四10', 14, 12, 7), -(20190411, '高二四11', 15, 9, 3), -(20190412, '高二四12', 15, 15, 1), -(20190413, '高二四13', 10, 1, 12), -(20190414, '高二四14', 17, 0, 11), -(20190415, '高二四15', 22, 13, 10), -(20190416, '高二四16', 23, 5, 11), -(20190417, '高二四17', 21, 5, 3), -(20190418, '高二四18', 23, 12, 12), -(20190419, '高二四19', 24, 7, 12), -(20190420, '高二四20', 17, 19, 8), -(20190421, '高二四21', 7, 18, 4), -(20190422, '高二四22', 20, 16, 4), -(20190423, '高二四23', 10, 12, 10), -(20190424, '高二四24', 13, 4, 1), -(20190425, '高二四25', 4, 11, 7), -(20190426, '高二四26', 14, 20, 12), -(20190427, '高二四27', 14, 14, 7), -(20190428, '高二四28', 21, 19, 15), -(20190429, '高二四29', 16, 16, 12), -(20190430, '高二四30', 7, 8, 14), -(20190431, '高二四31', 21, 17, 9), -(20190432, '高二四32', 14, 3, 15), -(20190433, '高二四33', 5, 17, 2), -(20190434, '高二四34', 7, 3, 5), -(20190435, '高二四35', 23, 20, 12), -(20190436, '高二四36', 17, 20, 6), -(20190437, '高二四37', 20, 14, 14), -(20190438, '高二四38', 24, 13, 11), -(20190439, '高二四39', 0, 8, 12), -(20190440, '高二四40', 17, 0, 10), -(20190441, '高二四41', 19, 7, 3), -(20190442, '高二四42', 11, 4, 12), -(20190443, '高二四43', 12, 4, 10), -(20190444, '高二四44', 5, 18, 6), -(20190445, '高二四45', 12, 12, 9), -(20190501, '高二五01', 2, 18, 4), -(20190502, '高二五02', 8, 15, 14), -(20190503, '高二五03', 14, 12, 24), -(20190504, '高二五04', 20, 9, 34), -(20190505, '高二五05', 26, 6, 44), -(20190506, '高二五06', 32, 3, 54), -(20190507, '高二五07', 38, 0, 64), -(20190508, '高二五08', 44, -3, 74), -(20190509, '高二五09', 50, -6, 84), -(20190510, '高二五10', 56, -9, 94), -(20190511, '高二五11', 62, -12, 104), -(20190512, '高二五12', 68, -15, 114), -(20190513, '高二五13', 74, -18, 124), -(20190514, '高二五14', 80, -21, 134), -(20190515, '高二五15', 86, -24, 144), -(20190516, '高二五16', 92, -27, 154), -(20190517, '高二五17', 98, -30, 164), -(20190518, '高二五18', 104, -33, 174), -(20190519, '高二五19', 110, -36, 184), -(20190520, '高二五20', 116, -39, 194), -(20190521, '高二五21', 122, -42, 204), -(20190522, '高二五22', 128, -45, 214), -(20190523, '高二五23', 134, -48, 224), -(20190524, '高二五24', 140, -51, 234), -(20190525, '高二五25', 146, -54, 244), -(20190526, '高二五26', 152, -57, 254), -(20190527, '高二五27', 158, -60, 264), -(20190528, '高二五28', 164, -63, 274), -(20190529, '高二五29', 170, -66, 284), -(20190530, '高二五30', 176, -69, 294), -(20190531, '高二五31', 182, -72, 304), -(20190532, '高二五32', 188, -75, 314), -(20190533, '高二五33', 194, -78, 324), -(20190534, '高二五34', 200, -81, 334), -(20190535, '高二五35', 206, -84, 344), -(20190536, '高二五36', 212, -87, 354), -(20190537, '高二五37', 218, -90, 364), -(20190538, '高二五38', 224, -93, 374), -(20190539, '高二五39', 230, -96, 384), -(20190540, '高二五40', 236, -99, 394), -(20190541, '高二五41', 242, -102, 404), -(20190542, '高二五42', 248, -105, 414), -(20190543, '高二五43', 254, -108, 424), -(20190544, '高二五44', 260, -111, 434), -(20190545, '高二五45', 266, -114, 444), -(20190601, '高二六01', 2, 18, 4), -(20190602, '高二六02', 3, 19, 5), -(20190603, '高二六03', 4, 20, 6), -(20190604, '高二六04', 5, 21, 7), -(20190605, '高二六05', 6, 22, 8), -(20190606, '高二六06', 7, 23, 9), -(20190607, '高二六07', 8, 24, 10), -(20190608, '高二六08', 9, 25, 11), -(20190609, '高二六09', 10, 26, 12), -(20190610, '高二六10', 11, 27, 13), -(20190611, '高二六11', 12, 28, 14), -(20190612, '高二六12', 13, 29, 15), -(20190613, '高二六13', 14, 30, 16), -(20190614, '高二六14', 15, 31, 17), -(20190615, '高二六15', 16, 32, 18), -(20190616, '高二六16', 17, 33, 19), -(20190617, '高二六17', 18, 34, 20), -(20190618, '高二六18', 19, 35, 21), -(20190619, '高二六19', 20, 36, 22), -(20190620, '高二六20', 21, 37, 23), -(20190621, '高二六21', 22, 38, 24), -(20190622, '高二六22', 23, 39, 25), -(20190623, '高二六23', 24, 40, 26), -(20190624, '高二六24', 25, 41, 27), -(20190625, '高二六25', 26, 42, 28), -(20190626, '高二六26', 27, 43, 29), -(20190627, '高二六27', 28, 44, 30), -(20190628, '高二六28', 29, 45, 31), -(20190629, '高二六29', 30, 46, 32), -(20190630, '高二六30', 31, 47, 33), -(20190631, '高二六31', 32, 48, 34), -(20190632, '高二六32', 33, 49, 35), -(20190633, '高二六33', 34, 50, 36), -(20190634, '高二六34', 35, 51, 37), -(20190635, '高二六35', 36, 52, 38), -(20190636, '高二六36', 37, 53, 39), -(20190637, '高二六37', 38, 54, 40), -(20190638, '高二六38', 39, 55, 41), -(20190639, '高二六39', 40, 56, 42), -(20190640, '高二六40', 41, 57, 43), -(20190641, '高二六41', 42, 58, 44), -(20190642, '高二六42', 43, 59, 45), -(20190643, '高二六43', 44, 60, 46), -(20190644, '高二六44', 45, 61, 47), -(20190645, '高二六45', 46, 62, 48), -(20190701, '高二七01', 2, 18, 4), -(20190702, '高二七02', 3, 19, 5), -(20190703, '高二七03', 4, 20, 6), -(20190704, '高二七04', 5, 21, 7), -(20190705, '高二七05', 6, 22, 8), -(20190706, '高二七06', 7, 23, 9), -(20190707, '高二七07', 8, 24, 10), -(20190708, '高二七08', 9, 25, 11), -(20190709, '高二七09', 10, 26, 12), -(20190710, '高二七10', 11, 27, 13), -(20190711, '高二七11', 12, 28, 14), -(20190712, '高二七12', 13, 29, 15), -(20190713, '高二七13', 14, 30, 16), -(20190714, '高二七14', 15, 31, 17), -(20190715, '高二七15', 16, 32, 18), -(20190716, '高二七16', 17, 33, 19), -(20190717, '高二七17', 18, 34, 20), -(20190718, '高二七18', 19, 35, 21), -(20190719, '高二七19', 20, 36, 22), -(20190720, '高二七20', 21, 37, 23), -(20190721, '高二七21', 22, 38, 24), -(20190722, '高二七22', 23, 39, 25), -(20190723, '高二七23', 24, 40, 26), -(20190724, '高二七24', 25, 41, 27), -(20190725, '高二七25', 26, 42, 28), -(20190726, '高二七26', 27, 43, 29), -(20190727, '高二七27', 28, 44, 30), -(20190728, '高二七28', 29, 45, 31), -(20190729, '高二七29', 30, 46, 32), -(20190730, '高二七30', 31, 47, 33), -(20190731, '高二七31', 32, 48, 34), -(20190732, '高二七32', 33, 49, 35), -(20190733, '高二七33', 34, 50, 36), -(20190734, '高二七34', 35, 51, 37), -(20190735, '高二七35', 36, 52, 38), -(20190736, '高二七36', 37, 53, 39), -(20190737, '高二七37', 38, 54, 40), -(20190738, '高二七38', 39, 55, 41), -(20190739, '高二七39', 40, 56, 42), -(20190740, '高二七40', 41, 57, 43), -(20190741, '高二七41', 42, 58, 44), -(20190742, '高二七42', 43, 59, 45), -(20190743, '高二七43', 44, 60, 46), -(20190744, '高二七44', 45, 61, 47), -(20190745, '高二七45', 46, 62, 48), -(20190801, '高二八01', 2, 18, 4), -(20190802, '高二八02', 3, 19, 5), -(20190803, '高二八03', 4, 20, 6), -(20190804, '高二八04', 5, 21, 7), -(20190805, '高二八05', 6, 22, 8), -(20190806, '高二八06', 7, 23, 9), -(20190807, '高二八07', 8, 24, 10), -(20190808, '高二八08', 9, 25, 11), -(20190809, '高二八09', 10, 26, 12), -(20190810, '高二八10', 11, 27, 13), -(20190811, '高二八11', 12, 28, 14), -(20190812, '高二八12', 13, 29, 15), -(20190813, '高二八13', 14, 30, 16), -(20190814, '高二八14', 15, 31, 17), -(20190815, '高二八15', 16, 32, 18), -(20190816, '高二八16', 17, 33, 19), -(20190817, '高二八17', 18, 34, 20), -(20190818, '高二八18', 19, 35, 21), -(20190819, '高二八19', 20, 36, 22), -(20190820, '高二八20', 21, 37, 23), -(20190821, '高二八21', 22, 38, 24), -(20190822, '高二八22', 23, 39, 25), -(20190823, '高二八23', 24, 40, 26), -(20190824, '高二八24', 25, 41, 27), -(20190825, '高二八25', 26, 42, 28), -(20190826, '高二八26', 27, 43, 29), -(20190827, '高二八27', 28, 44, 30), -(20190828, '高二八28', 29, 45, 31), -(20190829, '高二八29', 30, 46, 32), -(20190830, '高二八30', 31, 47, 33), -(20190831, '高二八31', 32, 48, 34), -(20190832, '高二八32', 33, 49, 35), -(20190833, '高二八33', 34, 50, 36), -(20190834, '高二八34', 35, 51, 37), -(20190835, '高二八35', 36, 52, 38), -(20190836, '高二八36', 37, 53, 39), -(20190837, '高二八37', 38, 54, 40), -(20190838, '高二八38', 39, 55, 41), -(20190839, '高二八39', 40, 56, 42), -(20190840, '高二八40', 41, 57, 43), -(20190841, '高二八41', 42, 58, 44), -(20190842, '高二八42', 43, 59, 45), -(20190843, '高二八43', 44, 60, 46), -(20190844, '高二八44', 45, 61, 47), -(20190845, '高二八45', 46, 62, 48), -(20190901, '高二九01', 2, 18, 4), -(20190902, '高二九02', 3, 19, 5), -(20190903, '高二九03', 4, 20, 6), -(20190904, '高二九04', 5, 21, 7), -(20190905, '高二九05', 6, 22, 8), -(20190906, '高二九06', 7, 23, 9), -(20190907, '高二九07', 8, 24, 10), -(20190908, '高二九08', 9, 25, 11), -(20190909, '高二九09', 10, 26, 12), -(20190910, '高二九10', 11, 27, 13), -(20190911, '高二九11', 12, 28, 14), -(20190912, '高二九12', 13, 29, 15), -(20190913, '高二九13', 14, 30, 16), -(20190914, '高二九14', 15, 31, 17), -(20190915, '高二九15', 16, 32, 18), -(20190916, '高二九16', 17, 33, 19), -(20190917, '高二九17', 18, 34, 20), -(20190918, '高二九18', 19, 35, 21), -(20190919, '高二九19', 20, 36, 22), -(20190920, '高二九20', 21, 37, 23), -(20190921, '高二九21', 22, 38, 24), -(20190922, '高二九22', 23, 39, 25), -(20190923, '高二九23', 24, 40, 26), -(20190924, '高二九24', 25, 41, 27), -(20190925, '高二九25', 26, 42, 28), -(20190926, '高二九26', 27, 43, 29), -(20190927, '高二九27', 28, 44, 30), -(20190928, '高二九28', 29, 45, 31), -(20190929, '高二九29', 30, 46, 32), -(20190930, '高二九30', 31, 47, 33), -(20190931, '高二九31', 32, 48, 34), -(20190932, '高二九32', 33, 49, 35), -(20190933, '高二九33', 34, 50, 36), -(20190934, '高二九34', 35, 51, 37), -(20190935, '高二九35', 36, 52, 38), -(20190936, '高二九36', 37, 53, 39), -(20190937, '高二九37', 38, 54, 40), -(20190938, '高二九38', 39, 55, 41), -(20190939, '高二九39', 40, 56, 42), -(20190940, '高二九40', 41, 57, 43), -(20190941, '高二九41', 42, 58, 44), -(20190942, '高二九42', 43, 59, 45), -(20190943, '高二九43', 44, 60, 46), -(20190944, '高二九44', 45, 61, 47), -(20190945, '高二九45', 46, 62, 48), -(20191001, '高二十01', 2, 18, 4), -(20191002, '高二十02', 3, 19, 5), -(20191003, '高二十03', 4, 20, 6), -(20191004, '高二十04', 5, 21, 7), -(20191005, '高二十05', 6, 22, 8), -(20191006, '高二十06', 7, 23, 9), -(20191007, '高二十07', 8, 24, 10), -(20191008, '高二十08', 9, 25, 11), -(20191009, '高二十09', 10, 26, 12), -(20191010, '高二十10', 11, 27, 13), -(20191011, '高二十11', 12, 28, 14), -(20191012, '高二十12', 13, 29, 15), -(20191013, '高二十13', 14, 30, 16), -(20191014, '高二十14', 15, 31, 17), -(20191015, '高二十15', 16, 32, 18), -(20191016, '高二十16', 17, 33, 19), -(20191017, '高二十17', 18, 34, 20), -(20191018, '高二十18', 19, 35, 21), -(20191019, '高二十19', 20, 36, 22), -(20191020, '高二十20', 21, 37, 23), -(20191021, '高二十21', 22, 38, 24), -(20191022, '高二十22', 23, 39, 25), -(20191023, '高二十23', 24, 40, 26), -(20191024, '高二十24', 25, 41, 27), -(20191025, '高二十25', 26, 42, 28), -(20191026, '高二十26', 27, 43, 29), -(20191027, '高二十27', 28, 44, 30), -(20191028, '高二十28', 29, 45, 31), -(20191029, '高二十29', 30, 46, 32), -(20191030, '高二十30', 31, 47, 33), -(20191031, '高二十31', 32, 48, 34), -(20191032, '高二十32', 33, 49, 35), -(20191033, '高二十33', 34, 50, 36), -(20191034, '高二十34', 35, 51, 37), -(20191035, '高二十35', 36, 52, 38), -(20191036, '高二十36', 37, 53, 39), -(20191037, '高二十37', 38, 54, 40), -(20191038, '高二十38', 39, 55, 41), -(20191039, '高二十39', 40, 56, 42), -(20191040, '高二十40', 41, 57, 43), -(20191041, '高二十41', 42, 58, 44), -(20191042, '高二十42', 43, 59, 45), -(20191043, '高二十43', 44, 60, 46), -(20191044, '高二十44', 45, 61, 47), -(20191045, '高二十45', 46, 62, 48), -(20191201, '蛟二二01', 13, 17, 11), -(20191202, '蛟二二02', 1, 11, 13), -(20191203, '蛟二二03', 3, 7, 11), -(20191204, '蛟二二04', 10, 17, 2), -(20191205, '蛟二二05', 7, 4, 2), -(20191206, '蛟二二06', 19, 14, 4), -(20191207, '蛟二二07', 6, 6, 16), -(20191208, '蛟二二08', 17, 19, 3), -(20191209, '蛟二二09', 7, 6, 10), -(20191210, '蛟二二10', 19, 15, 15), -(20191211, '蛟二二11', 4, 18, 12), -(20191212, '蛟二二12', 5, 15, 1), -(20191213, '蛟二二13', 18, 20, 6), -(20191214, '蛟二二14', 23, 8, 13), -(20191215, '蛟二二15', 19, 15, 3), -(20191216, '蛟二二16', 17, 10, 13), -(20191217, '蛟二二17', 24, 1, 9), -(20191218, '蛟二二18', 23, 9, 5), -(20191219, '蛟二二19', 14, 15, 15), -(20191220, '蛟二二20', 10, 18, 7), -(20191221, '蛟二二21', 5, 18, 13), -(20191222, '蛟二二22', 8, 10, 5), -(20191223, '蛟二二23', 16, 8, 11), -(20191224, '蛟二二24', 19, 12, 7), -(20191225, '蛟二二25', 17, 10, 1), -(20191226, '蛟二二26', 14, 8, 10), -(20191227, '蛟二二27', 21, 10, 2), -(20191228, '蛟二二28', 20, 9, 9), -(20191229, '蛟二二29', 9, 11, 13), -(20191230, '蛟二二30', 20, 9, 16), -(20191231, '蛟二二31', 6, 16, 11), -(20191232, '蛟二二32', 19, 8, 16), -(20191233, '蛟二二33', 1, 9, 12), -(20191234, '蛟二二34', 17, 16, 5), -(20191235, '蛟二二35', 6, 11, 4), -(20191236, '蛟二二36', 15, 14, 9), -(20191237, '蛟二二37', 12, 4, 4), -(20191238, '蛟二二38', 9, 4, 4), -(20191239, '蛟二二39', 1, 10, 10), -(20191240, '蛟二二40', 6, 5, 1), -(20191241, '蛟二二41', 6, 12, 13), -(20191242, '蛟二二42', 16, 9, 8), -(20191243, '蛟二二43', 10, 6, 6), -(20191244, '蛟二二44', 14, 19, 5), -(20191245, '蛟二二45', 23, 10, 12), -(20191301, '蛟二三01', 23, 13, 1), -(20191302, '蛟二三02', 24, 11, 5), -(20191303, '蛟二三03', 10, 11, 6), -(20191304, '蛟二三04', 8, 18, 13), -(20191305, '蛟二三05', 18, 8, 8), -(20191306, '蛟二三06', 5, 7, 4), -(20191307, '蛟二三07', 4, 11, 11), -(20191308, '蛟二三08', 14, 12, 15), -(20191309, '蛟二三09', 22, 8, 11), -(20191310, '蛟二三10', 16, 10, 4), -(20191311, '蛟二三11', 23, 20, 3), -(20191312, '蛟二三12', 23, 10, 12), -(20191313, '蛟二三13', 19, 14, 7), -(20191314, '蛟二三14', 8, 7, 2), -(20191315, '蛟二三15', 2, 3, 7), -(20191316, '蛟二三16', 8, 10, 7), -(20191317, '蛟二三17', 8, 3, 6), -(20191318, '蛟二三18', 9, 17, 8), -(20191319, '蛟二三19', 19, 4, 1), -(20191320, '蛟二三20', 3, 14, 2), -(20191321, '蛟二三21', 13, 13, 14), -(20191322, '蛟二三22', 18, 18, 4), -(20191323, '蛟二三23', 15, 12, 11), -(20191324, '蛟二三24', 20, 15, 8), -(20191325, '蛟二三25', 8, 4, 10), -(20191326, '蛟二三26', 15, 19, 6), -(20191327, '蛟二三27', 17, 19, 3), -(20191328, '蛟二三28', 5, 5, 15), -(20191329, '蛟二三29', 6, 12, 6), -(20191330, '蛟二三30', 2, 6, 16), -(20191331, '蛟二三31', 8, 18, 1), -(20191332, '蛟二三32', 10, 14, 6), -(20191333, '蛟二三33', 9, 13, 13), -(20191334, '蛟二三34', 4, 7, 5), -(20191335, '蛟二三35', 15, 3, 15), -(20191336, '蛟二三36', 8, 3, 15), -(20191337, '蛟二三37', 21, 18, 2), -(20191338, '蛟二三38', 8, 13, 15), -(20191339, '蛟二三39', 9, 11, 16), -(20191340, '蛟二三40', 11, 2, 1), -(20191341, '蛟二三41', 16, 20, 14), -(20191342, '蛟二三42', 12, 2, 9), -(20191343, '蛟二三43', 16, 10, 4), -(20191344, '蛟二三44', 4, 13, 15), -(20191345, '蛟二三45', 7, 17, 13), -(20191401, '蛟二四01', 14, 4, 14), -(20191402, '蛟二四02', 10, 2, 4), -(20191403, '蛟二四03', 19, 1, 14), -(20191404, '蛟二四04', 23, 16, 3), -(20191405, '蛟二四05', 11, 7, 10), -(20191406, '蛟二四06', 15, 2, 14), -(20191407, '蛟二四07', 4, 6, 16), -(20191408, '蛟二四08', 12, 10, 14), -(20191409, '蛟二四09', 3, 15, 9), -(20191410, '蛟二四10', 4, 16, 15), -(20191411, '蛟二四11', 9, 16, 12), -(20191412, '蛟二四12', 1, 17, 4), -(20191413, '蛟二四13', 7, 11, 4), -(20191414, '蛟二四14', 8, 11, 5), -(20191415, '蛟二四15', 15, 12, 15), -(20191416, '蛟二四16', 7, 20, 15), -(20191417, '蛟二四17', 6, 10, 1), -(20191418, '蛟二四18', 6, 7, 3), -(20191419, '蛟二四19', 4, 11, 5), -(20191420, '蛟二四20', 17, 12, 15), -(20191421, '蛟二四21', 11, 16, 9), -(20191422, '蛟二四22', 13, 11, 1), -(20191423, '蛟二四23', 2, 12, 11), -(20191424, '蛟二四24', 11, 1, 12), -(20191425, '蛟二四25', 7, 7, 13), -(20191426, '蛟二四26', 8, 17, 12), -(20191427, '蛟二四27', 18, 15, 15), -(20191428, '蛟二四28', 18, 3, 14), -(20191429, '蛟二四29', 24, 6, 3), -(20191430, '蛟二四30', 17, 14, 13), -(20191431, '蛟二四31', 21, 2, 7), -(20191432, '蛟二四32', 18, 11, 8), -(20191433, '蛟二四33', 8, 11, 12), -(20191434, '蛟二四34', 22, 15, 13), -(20191435, '蛟二四35', 8, 2, 6), -(20191436, '蛟二四36', 13, 17, 14), -(20191437, '蛟二四37', 10, 8, 10), -(20191438, '蛟二四38', 7, 2, 10), -(20191439, '蛟二四39', 12, 18, 8), -(20191440, '蛟二四40', 19, 19, 12), -(20191441, '蛟二四41', 24, 2, 5), -(20191442, '蛟二四42', 9, 16, 12), -(20191443, '蛟二四43', 13, 6, 15), -(20191444, '蛟二四44', 4, 6, 6), -(20191445, '蛟二四45', 14, 3, 16), -(20191501, '蛟二五01', 4, 2, 1), -(20191502, '蛟二五02', 2, 17, 9), -(20191503, '蛟二五03', 16, 11, 13), -(20191504, '蛟二五04', 17, 13, 14), -(20191505, '蛟二五05', 2, 12, 9), -(20191506, '蛟二五06', 13, 1, 8), -(20191507, '蛟二五07', 2, 17, 1), -(20191508, '蛟二五08', 9, 7, 7), -(20191509, '蛟二五09', 24, 18, 8), -(20191510, '蛟二五10', 13, 13, 15), -(20191511, '蛟二五11', 20, 13, 16), -(20191512, '蛟二五12', 4, 17, 3), -(20191513, '蛟二五13', 8, 20, 8), -(20191514, '蛟二五14', 18, 9, 12), -(20191515, '蛟二五15', 17, 8, 4), -(20191516, '蛟二五16', 21, 15, 13), -(20191517, '蛟二五17', 15, 17, 8), -(20191518, '蛟二五18', 11, 15, 14), -(20191519, '蛟二五19', 14, 20, 11), -(20191520, '蛟二五20', 3, 8, 16), -(20191521, '蛟二五21', 7, 14, 11), -(20191522, '蛟二五22', 10, 5, 11), -(20191523, '蛟二五23', 9, 1, 16), -(20191524, '蛟二五24', 23, 10, 8), -(20191525, '蛟二五25', 19, 11, 5), -(20191526, '蛟二五26', 22, 4, 11), -(20191527, '蛟二五27', 6, 13, 8), -(20191528, '蛟二五28', 13, 12, 2), -(20191529, '蛟二五29', 18, 15, 8), -(20191530, '蛟二五30', 14, 5, 10), -(20191531, '蛟二五31', 12, 8, 16), -(20191532, '蛟二五32', 10, 15, 11), -(20191533, '蛟二五33', 1, 12, 15), -(20191534, '蛟二五34', 11, 1, 6), -(20191535, '蛟二五35', 3, 12, 9), -(20191536, '蛟二五36', 6, 6, 11), -(20191537, '蛟二五37', 5, 10, 5), -(20191538, '蛟二五38', 7, 10, 9), -(20191539, '蛟二五39', 21, 6, 1), -(20191540, '蛟二五40', 20, 14, 8), -(20191541, '蛟二五41', 18, 4, 12), -(20191542, '蛟二五42', 10, 3, 6), -(20191543, '蛟二五43', 23, 16, 8), -(20191544, '蛟二五44', 15, 4, 7), -(20191545, '蛟二五45', 15, 15, 3), -(20191601, '蛟二六01', 21, 17, 8), -(20191602, '蛟二六02', 21, 15, 9), -(20191603, '蛟二六03', 6, 15, 3), -(20191604, '蛟二六04', 22, 11, 2), -(20191605, '蛟二六05', 17, 1, 6), -(20191606, '蛟二六06', 12, 20, 2), -(20191607, '蛟二六07', 10, 7, 12), -(20191608, '蛟二六08', 2, 13, 14), -(20191609, '蛟二六09', 6, 14, 4), -(20191610, '蛟二六10', 18, 9, 2), -(20191611, '蛟二六11', 23, 5, 2), -(20191612, '蛟二六12', 2, 17, 14), -(20191613, '蛟二六13', 6, 8, 11), -(20191614, '蛟二六14', 16, 20, 1), -(20191615, '蛟二六15', 9, 19, 12), -(20191616, '蛟二六16', 4, 17, 5), -(20191617, '蛟二六17', 15, 2, 5), -(20191618, '蛟二六18', 8, 11, 14), -(20191619, '蛟二六19', 7, 2, 15), -(20191620, '蛟二六20', 10, 12, 15), -(20191621, '蛟二六21', 15, 20, 5), -(20191622, '蛟二六22', 19, 8, 10), -(20191623, '蛟二六23', 9, 3, 2), -(20191624, '蛟二六24', 10, 20, 6), -(20191625, '蛟二六25', 18, 20, 12), -(20191626, '蛟二六26', 17, 12, 11), -(20191627, '蛟二六27', 13, 12, 9), -(20191628, '蛟二六28', 11, 6, 7), -(20191629, '蛟二六29', 23, 19, 7), -(20191630, '蛟二六30', 12, 18, 2), -(20191631, '蛟二六31', 6, 1, 7), -(20191632, '蛟二六32', 7, 16, 3), -(20191633, '蛟二六33', 4, 1, 8), -(20191634, '蛟二六34', 18, 16, 2), -(20191635, '蛟二六35', 12, 4, 2), -(20191636, '蛟二六36', 8, 7, 2), -(20191637, '蛟二六37', 12, 13, 6), -(20191638, '蛟二六38', 8, 5, 7), -(20191639, '蛟二六39', 24, 8, 14), -(20191640, '蛟二六40', 13, 13, 16), -(20191641, '蛟二六41', 6, 15, 6), -(20191642, '蛟二六42', 20, 3, 15), -(20191643, '蛟二六43', 3, 14, 5), -(20191644, '蛟二六44', 11, 15, 15), -(20191645, '蛟二六45', 14, 18, 3), -(20191701, '蛟二七01', 13, 13, 6), -(20191702, '蛟二七02', 7, 19, 3), -(20191703, '蛟二七03', 4, 20, 9), -(20191704, '蛟二七04', 2, 13, 14), -(20191705, '蛟二七05', 1, 9, 5), -(20191706, '蛟二七06', 10, 2, 14), -(20191707, '蛟二七07', 4, 8, 16), -(20191708, '蛟二七08', 8, 1, 15), -(20191709, '蛟二七09', 6, 4, 8), -(20191710, '蛟二七10', 18, 3, 10), -(20191711, '蛟二七11', 10, 18, 12), -(20191712, '蛟二七12', 11, 8, 4), -(20191713, '蛟二七13', 8, 19, 7), -(20191714, '蛟二七14', 4, 10, 13), -(20191715, '蛟二七15', 21, 11, 15), -(20191716, '蛟二七16', 11, 14, 5), -(20191717, '蛟二七17', 8, 3, 6), -(20191718, '蛟二七18', 1, 5, 12), -(20191719, '蛟二七19', 9, 2, 10), -(20191720, '蛟二七20', 11, 19, 9), -(20191721, '蛟二七21', 7, 7, 14), -(20191722, '蛟二七22', 18, 14, 15), -(20191723, '蛟二七23', 14, 10, 8), -(20191724, '蛟二七24', 21, 15, 11), -(20191725, '蛟二七25', 11, 14, 15), -(20191726, '蛟二七26', 23, 15, 14), -(20191727, '蛟二七27', 10, 11, 15), -(20191728, '蛟二七28', 10, 12, 1), -(20191729, '蛟二七29', 11, 10, 8), -(20191730, '蛟二七30', 13, 20, 8), -(20191731, '蛟二七31', 7, 15, 3), -(20191732, '蛟二七32', 4, 13, 4), -(20191733, '蛟二七33', 18, 6, 13), -(20191734, '蛟二七34', 5, 8, 2), -(20191735, '蛟二七35', 7, 12, 5), -(20191736, '蛟二七36', 2, 12, 9), -(20191737, '蛟二七37', 7, 10, 16), -(20191738, '蛟二七38', 21, 15, 5), -(20191739, '蛟二七39', 4, 20, 6), -(20191740, '蛟二七40', 1, 17, 13), -(20191741, '蛟二七41', 1, 3, 6), -(20191742, '蛟二七42', 9, 4, 2), -(20191743, '蛟二七43', 12, 1, 6), -(20191744, '蛟二七44', 8, 2, 13), -(20191745, '蛟二七45', 23, 10, 11), -(20180101, '高三一01', 1, 17, 13), -(20180102, '高三一02', 13, 6, 14), -(20180103, '高三一03', 4, 10, 10), -(20180104, '高三一04', 7, 10, 4), -(20180105, '高三一05', 3, 9, 13), -(20180106, '高三一06', 18, 9, 7), -(20180107, '高三一07', 19, 19, 13), -(20180108, '高三一08', 15, 17, 6), -(20180109, '高三一09', 19, 9, 11), -(20180110, '高三一10', 0, 3, 15), -(20180111, '高三一11', 24, 16, 2), -(20180112, '高三一12', 18, 5, 2), -(20180113, '高三一13', 5, 14, 13), -(20180114, '高三一14', 18, 2, 8), -(20180115, '高三一15', 22, 17, 12), -(20180116, '高三一16', 12, 18, 10), -(20180117, '高三一17', 5, 3, 5), -(20180118, '高三一18', 21, 0, 8), -(20180119, '高三一19', 18, 3, 8), -(20180120, '高三一20', 1, 7, 11), -(20180121, '高三一21', 20, 15, 8), -(20180122, '高三一22', 16, 8, 15), -(20180123, '高三一23', 17, 15, 1), -(20180124, '高三一24', 12, 19, 14), -(20180125, '高三一25', 2, 10, 12), -(20180126, '高三一26', 5, 5, 7), -(20180127, '高三一27', 9, 1, 13), -(20180128, '高三一28', 16, 6, 12), -(20180129, '高三一29', 22, 7, 5), -(20180130, '高三一30', 16, 11, 15), -(20180131, '高三一31', 9, 17, 16), -(20180132, '高三一32', 4, 15, 0), -(20180133, '高三一33', 21, 0, 15), -(20180134, '高三一34', 19, 9, 5), -(20180135, '高三一35', 15, 0, 16), -(20180136, '高三一36', 16, 12, 16), -(20180137, '高三一37', 17, 0, 13), -(20180138, '高三一38', 22, 3, 1), -(20180139, '高三一39', 18, 17, 4), -(20180140, '高三一40', 10, 20, 8), -(20180141, '高三一41', 16, 1, 0), -(20180142, '高三一42', 21, 12, 16), -(20180143, '高三一43', 12, 12, 16), -(20180144, '高三一44', 15, 18, 15), -(20180145, '高三一45', 9, 17, 3), -(20180201, '高三二01', 19, 0, 7), -(20180202, '高三二02', 20, 1, 7), -(20180203, '高三二03', 12, 18, 0), -(20180204, '高三二04', 12, 8, 1), -(20180205, '高三二05', 8, 19, 11), -(20180206, '高三二06', 0, 1, 8), -(20180207, '高三二07', 14, 20, 16), -(20180208, '高三二08', 21, 17, 4), -(20180209, '高三二09', 18, 5, 1), -(20180210, '高三二10', 16, 10, 7), -(20180211, '高三二11', 4, 11, 1), -(20180212, '高三二12', 22, 7, 6), -(20180213, '高三二13', 14, 12, 9), -(20180214, '高三二14', 6, 5, 16), -(20180215, '高三二15', 18, 15, 7), -(20180216, '高三二16', 19, 12, 16), -(20180217, '高三二17', 13, 18, 16), -(20180218, '高三二18', 10, 16, 7), -(20180219, '高三二19', 18, 8, 8), -(20180220, '高三二20', 0, 6, 9), -(20180221, '高三二21', 12, 2, 0), -(20180222, '高三二22', 15, 12, 8), -(20180223, '高三二23', 20, 17, 7), -(20180224, '高三二24', 13, 5, 2), -(20180225, '高三二25', 15, 20, 3), -(20180226, '高三二26', 2, 14, 13), -(20180227, '高三二27', 0, 5, 4), -(20180228, '高三二28', 16, 2, 9), -(20180229, '高三二29', 21, 14, 16), -(20180230, '高三二30', 13, 4, 15), -(20180231, '高三二31', 24, 5, 3), -(20180232, '高三二32', 20, 19, 3), -(20180233, '高三二33', 24, 19, 1), -(20180234, '高三二34', 0, 5, 11), -(20180235, '高三二35', 23, 8, 5), -(20180236, '高三二36', 12, 19, 2), -(20180237, '高三二37', 4, 13, 10), -(20180238, '高三二38', 20, 7, 10), -(20180239, '高三二39', 2, 2, 7), -(20180240, '高三二40', 9, 10, 16), -(20180241, '高三二41', 24, 2, 13), -(20180242, '高三二42', 13, 15, 4), -(20180243, '高三二43', 23, 17, 16), -(20180244, '高三二44', 8, 18, 9), -(20180245, '高三二45', 0, 9, 11), -(20180301, '高三三01', 14, 10, 11), -(20180302, '高三三02', 18, 2, 1), -(20180303, '高三三03', 14, 11, 1), -(20180304, '高三三04', 23, 15, 13), -(20180305, '高三三05', 13, 0, 0), -(20180306, '高三三06', 13, 10, 0), -(20180307, '高三三07', 7, 15, 6), -(20180308, '高三三08', 15, 0, 10), -(20180309, '高三三09', 9, 19, 7), -(20180310, '高三三10', 4, 17, 0), -(20180311, '高三三11', 10, 5, 3), -(20180312, '高三三12', 17, 10, 15), -(20180313, '高三三13', 10, 11, 6), -(20180314, '高三三14', 17, 7, 4), -(20180315, '高三三15', 23, 19, 13), -(20180316, '高三三16', 0, 14, 16), -(20180317, '高三三17', 21, 9, 2), -(20180318, '高三三18', 18, 11, 13), -(20180319, '高三三19', 1, 5, 12), -(20180320, '高三三20', 22, 9, 1), -(20180321, '高三三21', 10, 16, 5), -(20180322, '高三三22', 14, 1, 1), -(20180323, '高三三23', 21, 13, 14), -(20180324, '高三三24', 15, 2, 14), -(20180325, '高三三25', 17, 5, 13), -(20180326, '高三三26', 2, 12, 11), -(20180327, '高三三27', 1, 7, 7), -(20180328, '高三三28', 15, 18, 9), -(20180329, '高三三29', 24, 1, 13), -(20180330, '高三三30', 17, 7, 16), -(20180331, '高三三31', 4, 5, 12), -(20180332, '高三三32', 2, 12, 7), -(20180333, '高三三33', 5, 9, 8), -(20180334, '高三三34', 1, 0, 14), -(20180335, '高三三35', 2, 7, 15), -(20180336, '高三三36', 16, 6, 3), -(20180337, '高三三37', 7, 19, 5), -(20180338, '高三三38', 7, 19, 2), -(20180339, '高三三39', 3, 16, 10), -(20180340, '高三三40', 10, 5, 7), -(20180341, '高三三41', 1, 18, 2), -(20180342, '高三三42', 1, 3, 3), -(20180343, '高三三43', 20, 14, 15), -(20180344, '高三三44', 5, 0, 1), -(20180345, '高三三45', 23, 18, 4), -(20180401, '高三四01', 0, 13, 7), -(20180402, '高三四02', 19, 20, 2), -(20180403, '高三四03', 17, 10, 14), -(20180404, '高三四04', 2, 0, 5), -(20180405, '高三四05', 12, 10, 13), -(20180406, '高三四06', 12, 16, 15), -(20180407, '高三四07', 23, 18, 5), -(20180408, '高三四08', 13, 14, 5), -(20180409, '高三四09', 1, 2, 5), -(20180410, '高三四10', 14, 12, 7), -(20180411, '高三四11', 15, 9, 3), -(20180412, '高三四12', 15, 15, 1), -(20180413, '高三四13', 10, 1, 12), -(20180414, '高三四14', 17, 0, 11), -(20180415, '高三四15', 22, 13, 10), -(20180416, '高三四16', 23, 5, 11), -(20180417, '高三四17', 21, 5, 3), -(20180418, '高三四18', 23, 12, 12), -(20180419, '高三四19', 24, 7, 12), -(20180420, '高三四20', 17, 19, 8), -(20180421, '高三四21', 7, 18, 4), -(20180422, '高三四22', 20, 16, 4), -(20180423, '高三四23', 10, 12, 10), -(20180424, '高三四24', 13, 4, 1), -(20180425, '高三四25', 4, 11, 7), -(20180426, '高三四26', 14, 20, 12), -(20180427, '高三四27', 14, 14, 7), -(20180428, '高三四28', 21, 19, 15), -(20180429, '高三四29', 16, 16, 12), -(20180430, '高三四30', 7, 8, 14), -(20180431, '高三四31', 21, 17, 9), -(20180432, '高三四32', 14, 3, 15), -(20180433, '高三四33', 5, 17, 2), -(20180434, '高三四34', 7, 3, 5), -(20180435, '高三四35', 23, 20, 12), -(20180436, '高三四36', 17, 20, 6), -(20180437, '高三四37', 20, 14, 14), -(20180438, '高三四38', 24, 13, 11), -(20180439, '高三四39', 0, 8, 12), -(20180440, '高三四40', 17, 0, 10), -(20180441, '高三四41', 19, 7, 3), -(20180442, '高三四42', 11, 4, 12), -(20180443, '高三四43', 12, 4, 10), -(20180444, '高三四44', 5, 18, 6), -(20180445, '高三四45', 12, 12, 9), -(20180501, '高三五01', 2, 18, 4), -(20180502, '高三五02', 8, 15, 14), -(20180503, '高三五03', 14, 12, 24), -(20180504, '高三五04', 20, 9, 34), -(20180505, '高三五05', 26, 6, 44), -(20180506, '高三五06', 32, 3, 54), -(20180507, '高三五07', 38, 0, 64), -(20180508, '高三五08', 44, -3, 74), -(20180509, '高三五09', 50, -6, 84), -(20180510, '高三五10', 56, -9, 94), -(20180511, '高三五11', 62, -12, 104), -(20180512, '高三五12', 68, -15, 114), -(20180513, '高三五13', 74, -18, 124), -(20180514, '高三五14', 80, -21, 134), -(20180515, '高三五15', 86, -24, 144), -(20180516, '高三五16', 92, -27, 154), -(20180517, '高三五17', 98, -30, 164), -(20180518, '高三五18', 104, -33, 174), -(20180519, '高三五19', 110, -36, 184), -(20180520, '高三五20', 116, -39, 194), -(20180521, '高三五21', 122, -42, 204), -(20180522, '高三五22', 128, -45, 214), -(20180523, '高三五23', 134, -48, 224), -(20180524, '高三五24', 140, -51, 234), -(20180525, '高三五25', 146, -54, 244), -(20180526, '高三五26', 152, -57, 254), -(20180527, '高三五27', 158, -60, 264), -(20180528, '高三五28', 164, -63, 274), -(20180529, '高三五29', 170, -66, 284), -(20180530, '高三五30', 176, -69, 294), -(20180531, '高三五31', 182, -72, 304), -(20180532, '高三五32', 188, -75, 314), -(20180533, '高三五33', 194, -78, 324), -(20180534, '高三五34', 200, -81, 334), -(20180535, '高三五35', 206, -84, 344), -(20180536, '高三五36', 212, -87, 354), -(20180537, '高三五37', 218, -90, 364), -(20180538, '高三五38', 224, -93, 374), -(20180539, '高三五39', 230, -96, 384), -(20180540, '高三五40', 236, -99, 394), -(20180541, '高三五41', 242, -102, 404), -(20180542, '高三五42', 248, -105, 414), -(20180543, '高三五43', 254, -108, 424), -(20180544, '高三五44', 260, -111, 434), -(20180545, '高三五45', 266, -114, 444), -(20180601, '高三六01', 2, 18, 4), -(20180602, '高三六02', 3, 19, 5), -(20180603, '高三六03', 4, 20, 6), -(20180604, '高三六04', 5, 21, 7), -(20180605, '高三六05', 6, 22, 8), -(20180606, '高三六06', 7, 23, 9), -(20180607, '高三六07', 8, 24, 10), -(20180608, '高三六08', 9, 25, 11), -(20180609, '高三六09', 10, 26, 12), -(20180610, '高三六10', 11, 27, 13), -(20180611, '高三六11', 12, 28, 14), -(20180612, '高三六12', 13, 29, 15), -(20180613, '高三六13', 14, 30, 16), -(20180614, '高三六14', 15, 31, 17), -(20180615, '高三六15', 16, 32, 18), -(20180616, '高三六16', 17, 33, 19), -(20180617, '高三六17', 18, 34, 20), -(20180618, '高三六18', 19, 35, 21), -(20180619, '高三六19', 20, 36, 22), -(20180620, '高三六20', 21, 37, 23), -(20180621, '高三六21', 22, 38, 24), -(20180622, '高三六22', 23, 39, 25), -(20180623, '高三六23', 24, 40, 26), -(20180624, '高三六24', 25, 41, 27), -(20180625, '高三六25', 26, 42, 28), -(20180626, '高三六26', 27, 43, 29), -(20180627, '高三六27', 28, 44, 30), -(20180628, '高三六28', 29, 45, 31), -(20180629, '高三六29', 30, 46, 32), -(20180630, '高三六30', 31, 47, 33), -(20180631, '高三六31', 32, 48, 34), -(20180632, '高三六32', 33, 49, 35), -(20180633, '高三六33', 34, 50, 36), -(20180634, '高三六34', 35, 51, 37), -(20180635, '高三六35', 36, 52, 38), -(20180636, '高三六36', 37, 53, 39), -(20180637, '高三六37', 38, 54, 40), -(20180638, '高三六38', 39, 55, 41), -(20180639, '高三六39', 40, 56, 42), -(20180640, '高三六40', 41, 57, 43), -(20180641, '高三六41', 42, 58, 44), -(20180642, '高三六42', 43, 59, 45), -(20180643, '高三六43', 44, 60, 46), -(20180644, '高三六44', 45, 61, 47), -(20180645, '高三六45', 46, 62, 48), -(20180701, '高三七01', 2, 18, 4), -(20180702, '高三七02', 3, 19, 5), -(20180703, '高三七03', 4, 20, 6), -(20180704, '高三七04', 5, 21, 7), -(20180705, '高三七05', 6, 22, 8), -(20180706, '高三七06', 7, 23, 9), -(20180707, '高三七07', 8, 24, 10), -(20180708, '高三七08', 9, 25, 11), -(20180709, '高三七09', 10, 26, 12), -(20180710, '高三七10', 11, 27, 13), -(20180711, '高三七11', 12, 28, 14), -(20180712, '高三七12', 13, 29, 15), -(20180713, '高三七13', 14, 30, 16), -(20180714, '高三七14', 15, 31, 17), -(20180715, '高三七15', 16, 32, 18), -(20180716, '高三七16', 17, 33, 19), -(20180717, '高三七17', 18, 34, 20), -(20180718, '高三七18', 19, 35, 21), -(20180719, '高三七19', 20, 36, 22), -(20180720, '高三七20', 21, 37, 23), -(20180721, '高三七21', 22, 38, 24), -(20180722, '高三七22', 23, 39, 25), -(20180723, '高三七23', 24, 40, 26), -(20180724, '高三七24', 25, 41, 27), -(20180725, '高三七25', 26, 42, 28), -(20180726, '高三七26', 27, 43, 29), -(20180727, '高三七27', 28, 44, 30), -(20180728, '高三七28', 29, 45, 31), -(20180729, '高三七29', 30, 46, 32), -(20180730, '高三七30', 31, 47, 33), -(20180731, '高三七31', 32, 48, 34), -(20180732, '高三七32', 33, 49, 35), -(20180733, '高三七33', 34, 50, 36), -(20180734, '高三七34', 35, 51, 37), -(20180735, '高三七35', 36, 52, 38), -(20180736, '高三七36', 37, 53, 39), -(20180737, '高三七37', 38, 54, 40), -(20180738, '高三七38', 39, 55, 41), -(20180739, '高三七39', 40, 56, 42), -(20180740, '高三七40', 41, 57, 43), -(20180741, '高三七41', 42, 58, 44), -(20180742, '高三七42', 43, 59, 45), -(20180743, '高三七43', 44, 60, 46), -(20180744, '高三七44', 45, 61, 47), -(20180745, '高三七45', 46, 62, 48), -(20180801, '高三八01', 2, 18, 4), -(20180802, '高三八02', 3, 19, 5), -(20180803, '高三八03', 4, 20, 6), -(20180804, '高三八04', 5, 21, 7), -(20180805, '高三八05', 6, 22, 8), -(20180806, '高三八06', 7, 23, 9), -(20180807, '高三八07', 8, 24, 10), -(20180808, '高三八08', 9, 25, 11), -(20180809, '高三八09', 10, 26, 12), -(20180810, '高三八10', 11, 27, 13), -(20180811, '高三八11', 12, 28, 14), -(20180812, '高三八12', 13, 29, 15), -(20180813, '高三八13', 14, 30, 16), -(20180814, '高三八14', 15, 31, 17), -(20180815, '高三八15', 16, 32, 18), -(20180816, '高三八16', 17, 33, 19), -(20180817, '高三八17', 18, 34, 20), -(20180818, '高三八18', 19, 35, 21), -(20180819, '高三八19', 20, 36, 22), -(20180820, '高三八20', 21, 37, 23), -(20180821, '高三八21', 22, 38, 24), -(20180822, '高三八22', 23, 39, 25), -(20180823, '高三八23', 24, 40, 26), -(20180824, '高三八24', 25, 41, 27), -(20180825, '高三八25', 26, 42, 28), -(20180826, '高三八26', 27, 43, 29), -(20180827, '高三八27', 28, 44, 30), -(20180828, '高三八28', 29, 45, 31), -(20180829, '高三八29', 30, 46, 32), -(20180830, '高三八30', 31, 47, 33), -(20180831, '高三八31', 32, 48, 34), -(20180832, '高三八32', 33, 49, 35), -(20180833, '高三八33', 34, 50, 36), -(20180834, '高三八34', 35, 51, 37), -(20180835, '高三八35', 36, 52, 38), -(20180836, '高三八36', 37, 53, 39), -(20180837, '高三八37', 38, 54, 40), -(20180838, '高三八38', 39, 55, 41), -(20180839, '高三八39', 40, 56, 42), -(20180840, '高三八40', 41, 57, 43), -(20180841, '高三八41', 42, 58, 44), -(20180842, '高三八42', 43, 59, 45), -(20180843, '高三八43', 44, 60, 46), -(20180844, '高三八44', 45, 61, 47), -(20180845, '高三八45', 46, 62, 48), -(20180901, '高三九01', 2, 18, 4), -(20180902, '高三九02', 3, 19, 5), -(20180903, '高三九03', 4, 20, 6), -(20180904, '高三九04', 5, 21, 7), -(20180905, '高三九05', 6, 22, 8), -(20180906, '高三九06', 7, 23, 9), -(20180907, '高三九07', 8, 24, 10), -(20180908, '高三九08', 9, 25, 11), -(20180909, '高三九09', 10, 26, 12), -(20180910, '高三九10', 11, 27, 13), -(20180911, '高三九11', 12, 28, 14), -(20180912, '高三九12', 13, 29, 15), -(20180913, '高三九13', 14, 30, 16), -(20180914, '高三九14', 15, 31, 17), -(20180915, '高三九15', 16, 32, 18), -(20180916, '高三九16', 17, 33, 19), -(20180917, '高三九17', 18, 34, 20), -(20180918, '高三九18', 19, 35, 21), -(20180919, '高三九19', 20, 36, 22), -(20180920, '高三九20', 21, 37, 23), -(20180921, '高三九21', 22, 38, 24), -(20180922, '高三九22', 23, 39, 25), -(20180923, '高三九23', 24, 40, 26), -(20180924, '高三九24', 25, 41, 27), -(20180925, '高三九25', 26, 42, 28), -(20180926, '高三九26', 27, 43, 29), -(20180927, '高三九27', 28, 44, 30), -(20180928, '高三九28', 29, 45, 31), -(20180929, '高三九29', 30, 46, 32), -(20180930, '高三九30', 31, 47, 33), -(20180931, '高三九31', 32, 48, 34), -(20180932, '高三九32', 33, 49, 35), -(20180933, '高三九33', 34, 50, 36), -(20180934, '高三九34', 35, 51, 37), -(20180935, '高三九35', 36, 52, 38), -(20180936, '高三九36', 37, 53, 39), -(20180937, '高三九37', 38, 54, 40), -(20180938, '高三九38', 39, 55, 41), -(20180939, '高三九39', 40, 56, 42), -(20180940, '高三九40', 41, 57, 43), -(20180941, '高三九41', 42, 58, 44), -(20180942, '高三九42', 43, 59, 45), -(20180943, '高三九43', 44, 60, 46), -(20180944, '高三九44', 45, 61, 47), -(20180945, '高三九45', 46, 62, 48), -(20181001, '高三十01', 2, 18, 4), -(20181002, '高三十02', 3, 19, 5), -(20181003, '高三十03', 4, 20, 6), -(20181004, '高三十04', 5, 21, 7), -(20181005, '高三十05', 6, 22, 8), -(20181006, '高三十06', 7, 23, 9), -(20181007, '高三十07', 8, 24, 10), -(20181008, '高三十08', 9, 25, 11), -(20181009, '高三十09', 10, 26, 12), -(20181010, '高三十10', 11, 27, 13), -(20181011, '高三十11', 12, 28, 14), -(20181012, '高三十12', 13, 29, 15), -(20181013, '高三十13', 14, 30, 16), -(20181014, '高三十14', 15, 31, 17), -(20181015, '高三十15', 16, 32, 18), -(20181016, '高三十16', 17, 33, 19), -(20181017, '高三十17', 18, 34, 20), -(20181018, '高三十18', 19, 35, 21), -(20181019, '高三十19', 20, 36, 22), -(20181020, '高三十20', 21, 37, 23), -(20181021, '高三十21', 22, 38, 24), -(20181022, '高三十22', 23, 39, 25), -(20181023, '高三十23', 24, 40, 26), -(20181024, '高三十24', 25, 41, 27), -(20181025, '高三十25', 26, 42, 28), -(20181026, '高三十26', 27, 43, 29), -(20181027, '高三十27', 28, 44, 30), -(20181028, '高三十28', 29, 45, 31), -(20181029, '高三十29', 30, 46, 32), -(20181030, '高三十30', 31, 47, 33), -(20181031, '高三十31', 32, 48, 34), -(20181032, '高三十32', 33, 49, 35), -(20181033, '高三十33', 34, 50, 36), -(20181034, '高三十34', 35, 51, 37), -(20181035, '高三十35', 36, 52, 38), -(20181036, '高三十36', 37, 53, 39), -(20181037, '高三十37', 38, 54, 40), -(20181038, '高三十38', 39, 55, 41), -(20181039, '高三十39', 40, 56, 42), -(20181040, '高三十40', 41, 57, 43), -(20181041, '高三十41', 42, 58, 44), -(20181042, '高三十42', 43, 59, 45), -(20181043, '高三十43', 44, 60, 46), -(20181044, '高三十44', 45, 61, 47), -(20181045, '高三十45', 46, 62, 48), -(20181201, '蛟三二01', 13, 17, 11), -(20181202, '蛟三二02', 1, 11, 13), -(20181203, '蛟三二03', 3, 7, 11), -(20181204, '蛟三二04', 10, 17, 2), -(20181205, '蛟三二05', 7, 4, 2), -(20181206, '蛟三二06', 19, 14, 4), -(20181207, '蛟三二07', 6, 6, 16), -(20181208, '蛟三二08', 17, 19, 3), -(20181209, '蛟三二09', 7, 6, 10), -(20181210, '蛟三二10', 19, 15, 15), -(20181211, '蛟三二11', 4, 18, 12), -(20181212, '蛟三二12', 5, 15, 1), -(20181213, '蛟三二13', 18, 20, 6), -(20181214, '蛟三二14', 23, 8, 13), -(20181215, '蛟三二15', 19, 15, 3), -(20181216, '蛟三二16', 17, 10, 13), -(20181217, '蛟三二17', 24, 1, 9), -(20181218, '蛟三二18', 23, 9, 5), -(20181219, '蛟三二19', 14, 15, 15), -(20181220, '蛟三二20', 10, 18, 7), -(20181221, '蛟三二21', 5, 18, 13), -(20181222, '蛟三二22', 8, 10, 5), -(20181223, '蛟三二23', 16, 8, 11), -(20181224, '蛟三二24', 19, 12, 7), -(20181225, '蛟三二25', 17, 10, 1), -(20181226, '蛟三二26', 14, 8, 10), -(20181227, '蛟三二27', 21, 10, 2), -(20181228, '蛟三二28', 20, 9, 9), -(20181229, '蛟三二29', 9, 11, 13), -(20181230, '蛟三二30', 20, 9, 16), -(20181231, '蛟三二31', 6, 16, 11), -(20181232, '蛟三二32', 19, 8, 16), -(20181233, '蛟三二33', 1, 9, 12), -(20181234, '蛟三二34', 17, 16, 5), -(20181235, '蛟三二35', 6, 11, 4), -(20181236, '蛟三二36', 15, 14, 9), -(20181237, '蛟三二37', 12, 4, 4), -(20181238, '蛟三二38', 9, 4, 4), -(20181239, '蛟三二39', 1, 10, 10), -(20181240, '蛟三二40', 6, 5, 1), -(20181241, '蛟三二41', 6, 12, 13), -(20181242, '蛟三二42', 16, 9, 8), -(20181243, '蛟三二43', 10, 6, 6), -(20181244, '蛟三二44', 14, 19, 5), -(20181245, '蛟三二45', 23, 10, 12), -(20181301, '蛟三三01', 23, 13, 1), -(20181302, '蛟三三02', 24, 11, 5), -(20181303, '蛟三三03', 10, 11, 6), -(20181304, '蛟三三04', 8, 18, 13), -(20181305, '蛟三三05', 18, 8, 8), -(20181306, '蛟三三06', 5, 7, 4), -(20181307, '蛟三三07', 4, 11, 11), -(20181308, '蛟三三08', 14, 12, 15), -(20181309, '蛟三三09', 22, 8, 11), -(20181310, '蛟三三10', 16, 10, 4), -(20181311, '蛟三三11', 23, 20, 3), -(20181312, '蛟三三12', 23, 10, 12), -(20181313, '蛟三三13', 19, 14, 7), -(20181314, '蛟三三14', 8, 7, 2), -(20181315, '蛟三三15', 2, 3, 7), -(20181316, '蛟三三16', 8, 10, 7), -(20181317, '蛟三三17', 8, 3, 6), -(20181318, '蛟三三18', 9, 17, 8), -(20181319, '蛟三三19', 19, 4, 1), -(20181320, '蛟三三20', 3, 14, 2), -(20181321, '蛟三三21', 13, 13, 14), -(20181322, '蛟三三22', 18, 18, 4), -(20181323, '蛟三三23', 15, 12, 11), -(20181324, '蛟三三24', 20, 15, 8), -(20181325, '蛟三三25', 8, 4, 10), -(20181326, '蛟三三26', 15, 19, 6), -(20181327, '蛟三三27', 17, 19, 3), -(20181328, '蛟三三28', 5, 5, 15), -(20181329, '蛟三三29', 6, 12, 6), -(20181330, '蛟三三30', 2, 6, 16), -(20181331, '蛟三三31', 8, 18, 1), -(20181332, '蛟三三32', 10, 14, 6), -(20181333, '蛟三三33', 9, 13, 13), -(20181334, '蛟三三34', 4, 7, 5), -(20181335, '蛟三三35', 15, 3, 15), -(20181336, '蛟三三36', 8, 3, 15), -(20181337, '蛟三三37', 21, 18, 2), -(20181338, '蛟三三38', 8, 13, 15), -(20181339, '蛟三三39', 9, 11, 16), -(20181340, '蛟三三40', 11, 2, 1), -(20181341, '蛟三三41', 16, 20, 14), -(20181342, '蛟三三42', 12, 2, 9), -(20181343, '蛟三三43', 16, 10, 4), -(20181344, '蛟三三44', 4, 13, 15), -(20181345, '蛟三三45', 7, 17, 13), -(20181401, '蛟三四01', 14, 4, 14), -(20181402, '蛟三四02', 10, 2, 4), -(20181403, '蛟三四03', 19, 1, 14), -(20181404, '蛟三四04', 23, 16, 3), -(20181405, '蛟三四05', 11, 7, 10), -(20181406, '蛟三四06', 15, 2, 14), -(20181407, '蛟三四07', 4, 6, 16), -(20181408, '蛟三四08', 12, 10, 14), -(20181409, '蛟三四09', 3, 15, 9), -(20181410, '蛟三四10', 4, 16, 15), -(20181411, '蛟三四11', 9, 16, 12), -(20181412, '蛟三四12', 1, 17, 4), -(20181413, '蛟三四13', 7, 11, 4), -(20181414, '蛟三四14', 8, 11, 5), -(20181415, '蛟三四15', 15, 12, 15), -(20181416, '蛟三四16', 7, 20, 15), -(20181417, '蛟三四17', 6, 10, 1), -(20181418, '蛟三四18', 6, 7, 3), -(20181419, '蛟三四19', 4, 11, 5), -(20181420, '蛟三四20', 17, 12, 15), -(20181421, '蛟三四21', 11, 16, 9), -(20181422, '蛟三四22', 13, 11, 1), -(20181423, '蛟三四23', 2, 12, 11), -(20181424, '蛟三四24', 11, 1, 12), -(20181425, '蛟三四25', 7, 7, 13), -(20181426, '蛟三四26', 8, 17, 12), -(20181427, '蛟三四27', 18, 15, 15), -(20181428, '蛟三四28', 18, 3, 14), -(20181429, '蛟三四29', 24, 6, 3), -(20181430, '蛟三四30', 17, 14, 13), -(20181431, '蛟三四31', 21, 2, 7), -(20181432, '蛟三四32', 18, 11, 8), -(20181433, '蛟三四33', 8, 11, 12), -(20181434, '蛟三四34', 22, 15, 13), -(20181435, '蛟三四35', 8, 2, 6), -(20181436, '蛟三四36', 13, 17, 14), -(20181437, '蛟三四37', 10, 8, 10), -(20181438, '蛟三四38', 7, 2, 10), -(20181439, '蛟三四39', 12, 18, 8), -(20181440, '蛟三四40', 19, 19, 12), -(20181441, '蛟三四41', 24, 2, 5), -(20181442, '蛟三四42', 9, 16, 12), -(20181443, '蛟三四43', 13, 6, 15), -(20181444, '蛟三四44', 4, 6, 6), -(20181445, '蛟三四45', 14, 3, 16), -(20181501, '蛟三五01', 4, 2, 1), -(20181502, '蛟三五02', 2, 17, 9), -(20181503, '蛟三五03', 16, 11, 13), -(20181504, '蛟三五04', 17, 13, 14), -(20181505, '蛟三五05', 2, 12, 9), -(20181506, '蛟三五06', 13, 1, 8), -(20181507, '蛟三五07', 2, 17, 1), -(20181508, '蛟三五08', 9, 7, 7), -(20181509, '蛟三五09', 24, 18, 8), -(20181510, '蛟三五10', 13, 13, 15), -(20181511, '蛟三五11', 20, 13, 16), -(20181512, '蛟三五12', 4, 17, 3), -(20181513, '蛟三五13', 8, 20, 8), -(20181514, '蛟三五14', 18, 9, 12), -(20181515, '蛟三五15', 17, 8, 4), -(20181516, '蛟三五16', 21, 15, 13), -(20181517, '蛟三五17', 15, 17, 8), -(20181518, '蛟三五18', 11, 15, 14), -(20181519, '蛟三五19', 14, 20, 11), -(20181520, '蛟三五20', 3, 8, 16), -(20181521, '蛟三五21', 7, 14, 11), -(20181522, '蛟三五22', 10, 5, 11), -(20181523, '蛟三五23', 9, 1, 16), -(20181524, '蛟三五24', 23, 10, 8), -(20181525, '蛟三五25', 19, 11, 5), -(20181526, '蛟三五26', 22, 4, 11), -(20181527, '蛟三五27', 6, 13, 8), -(20181528, '蛟三五28', 13, 12, 2), -(20181529, '蛟三五29', 18, 15, 8), -(20181530, '蛟三五30', 14, 5, 10), -(20181531, '蛟三五31', 12, 8, 16), -(20181532, '蛟三五32', 10, 15, 11), -(20181533, '蛟三五33', 1, 12, 15), -(20181534, '蛟三五34', 11, 1, 6), -(20181535, '蛟三五35', 3, 12, 9), -(20181536, '蛟三五36', 6, 6, 11), -(20181537, '蛟三五37', 5, 10, 5), -(20181538, '蛟三五38', 7, 10, 9), -(20181539, '蛟三五39', 21, 6, 1), -(20181540, '蛟三五40', 20, 14, 8), -(20181541, '蛟三五41', 18, 4, 12), -(20181542, '蛟三五42', 10, 3, 6), -(20181543, '蛟三五43', 23, 16, 8), -(20181544, '蛟三五44', 15, 4, 7), -(20181545, '蛟三五45', 15, 15, 3), -(20181601, '蛟三六01', 21, 17, 8), -(20181602, '蛟三六02', 21, 15, 9), -(20181603, '蛟三六03', 6, 15, 3), -(20181604, '蛟三六04', 22, 11, 2), -(20181605, '蛟三六05', 17, 1, 6), -(20181606, '蛟三六06', 12, 20, 2), -(20181607, '蛟三六07', 10, 7, 12), -(20181608, '蛟三六08', 2, 13, 14), -(20181609, '蛟三六09', 6, 14, 4), -(20181610, '蛟三六10', 18, 9, 2), -(20181611, '蛟三六11', 23, 5, 2), -(20181612, '蛟三六12', 2, 17, 14), -(20181613, '蛟三六13', 6, 8, 11), -(20181614, '蛟三六14', 16, 20, 1), -(20181615, '蛟三六15', 9, 19, 12), -(20181616, '蛟三六16', 4, 17, 5), -(20181617, '蛟三六17', 15, 2, 5), -(20181618, '蛟三六18', 8, 11, 14), -(20181619, '蛟三六19', 7, 2, 15), -(20181620, '蛟三六20', 10, 12, 15), -(20181621, '蛟三六21', 15, 20, 5), -(20181622, '蛟三六22', 19, 8, 10), -(20181623, '蛟三六23', 9, 3, 2), -(20181624, '蛟三六24', 10, 20, 6), -(20181625, '蛟三六25', 18, 20, 12), -(20181626, '蛟三六26', 17, 12, 11), -(20181627, '蛟三六27', 13, 12, 9), -(20181628, '蛟三六28', 11, 6, 7), -(20181629, '蛟三六29', 23, 19, 7), -(20181630, '蛟三六30', 12, 18, 2), -(20181631, '蛟三六31', 6, 1, 7), -(20181632, '蛟三六32', 7, 16, 3), -(20181633, '蛟三六33', 4, 1, 8), -(20181634, '蛟三六34', 18, 16, 2), -(20181635, '蛟三六35', 12, 4, 2), -(20181636, '蛟三六36', 8, 7, 2), -(20181637, '蛟三六37', 12, 13, 6), -(20181638, '蛟三六38', 8, 5, 7), -(20181639, '蛟三六39', 24, 8, 14), -(20181640, '蛟三六40', 13, 13, 16), -(20181641, '蛟三六41', 6, 15, 6), -(20181642, '蛟三六42', 20, 3, 15), -(20181643, '蛟三六43', 3, 14, 5), -(20181644, '蛟三六44', 11, 15, 15), -(20181645, '蛟三六45', 14, 18, 3), -(20181701, '蛟三七01', 13, 13, 6), -(20181702, '蛟三七02', 7, 19, 3), -(20181703, '蛟三七03', 4, 20, 9), -(20181704, '蛟三七04', 2, 13, 14), -(20181705, '蛟三七05', 1, 9, 5), -(20181706, '蛟三七06', 10, 2, 14), -(20181707, '蛟三七07', 4, 8, 16), -(20181708, '蛟三七08', 8, 1, 15), -(20181709, '蛟三七09', 6, 4, 8), -(20181710, '蛟三七10', 18, 3, 10), -(20181711, '蛟三七11', 10, 18, 12), -(20181712, '蛟三七12', 11, 8, 4), -(20181713, '蛟三七13', 8, 19, 7), -(20181714, '蛟三七14', 4, 10, 13), -(20181715, '蛟三七15', 21, 11, 15), -(20181716, '蛟三七16', 11, 14, 5), -(20181717, '蛟三七17', 8, 3, 6), -(20181718, '蛟三七18', 1, 5, 12), -(20181719, '蛟三七19', 9, 2, 10), -(20181720, '蛟三七20', 11, 19, 9), -(20181721, '蛟三七21', 7, 7, 14), -(20181722, '蛟三七22', 18, 14, 15), -(20181723, '蛟三七23', 14, 10, 8), -(20181724, '蛟三七24', 21, 15, 11), -(20181725, '蛟三七25', 11, 14, 15), -(20181726, '蛟三七26', 23, 15, 14), -(20181727, '蛟三七27', 10, 11, 15), -(20181728, '蛟三七28', 10, 12, 1), -(20181729, '蛟三七29', 11, 10, 8), -(20181730, '蛟三七30', 13, 20, 8), -(20181731, '蛟三七31', 7, 15, 3), -(20181732, '蛟三七32', 4, 13, 4), -(20181733, '蛟三七33', 18, 6, 13), -(20181734, '蛟三七34', 5, 8, 2), -(20181735, '蛟三七35', 7, 12, 5), -(20181736, '蛟三七36', 2, 12, 9), -(20181737, '蛟三七37', 7, 10, 16), -(20181738, '蛟三七38', 21, 15, 5), -(20181739, '蛟三七39', 4, 20, 6), -(20181740, '蛟三七40', 1, 17, 13), -(20181741, '蛟三七41', 1, 3, 6), -(20181742, '蛟三七42', 9, 4, 2), -(20181743, '蛟三七43', 12, 1, 6), -(20181744, '蛟三七44', 8, 2, 13), -(20181745, '蛟三七45', 23, 10, 11); - -DROP TABLE IF EXISTS `stu_vol`; -CREATE TABLE `stu_vol` ( - `volId` int(11) DEFAULT NULL, - `stuId` int(11) DEFAULT NULL, - `status` smallint(6) DEFAULT NULL, - `volTimeInside` int(11) DEFAULT NULL, - `volTimeOutside` int(11) DEFAULT NULL, - `volTimeLarge` int(11) DEFAULT NULL, - `thought` text -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -INSERT INTO `stu_vol` (`volId`, `stuId`, `status`, `volTimeInside`, `volTimeOutside`, `volTimeLarge`, `thought`) VALUES -(1, 20200101, 0, 4, 0, 0, '啊吧啊吧'), -(1, 20200102, 0, 4, 0, 0, '歪比歪比'), -(1, 20200103, 0, 4, 0, 0, '歪比巴卜'), -(1, 20200104, 0, 4, 0, 0, '淦淦淦'), -(1, 20200105, 0, 4, 0, 0, '啊实打实大声道'), -(2, 20200106, 1, 4, 2, 0, '啊吧啊吧'), -(2, 20200107, 1, 4, 2, 0, '歪比歪比'), -(2, 20200108, 1, 4, 2, 0, '歪比巴卜'), -(2, 20200109, 1, 4, 2, 0, '淦淦淦'), -(2, 20200110, 1, 4, 2, 0, '啊实打实大声道'), -(3, 20200111, 1, 4, 0, 0, '啊吧啊吧'), -(3, 20200112, 1, 4, 0, 0, '歪比歪比'), -(3, 20200113, 1, 4, 0, 0, '歪比巴卜'), -(3, 20200114, 2, 4, 0, 0, '淦淦淦'), -(3, 20200115, 1, 4, 0, 0, '啊实打实大声道'); - -DROP TABLE IF EXISTS `user`; -CREATE TABLE `user` ( - `userId` int(11) NOT NULL, - `userName` char(255) DEFAULT NULL, - `class` int(11) DEFAULT NULL, - `permission` smallint(6) DEFAULT NULL, - `password` char(255) DEFAULT NULL, - PRIMARY KEY (`userId`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -INSERT INTO `user` (`userId`, `userName`, `class`, `permission`, `password`) VALUES -(202001, '高一1班团支书', 202001, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202002, '高一2班团支书', 202002, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202003, '高一3班团支书', 202003, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202004, '高一4班团支书', 202004, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202005, '高一5班团支书', 202005, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202006, '高一6班团支书', 202006, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202007, '高一7班团支书', 202007, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202008, '高一8班团支书', 202008, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202009, '高一9班团支书', 202009, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202010, '高一10班团支书', 202010, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202012, '蛟一2班团支书', 202012, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202013, '蛟一3班团支书', 202013, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202014, '蛟一4班团支书', 202014, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202015, '蛟一5班团支书', 202015, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202016, '蛟一6班团支书', 202016, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(202017, '蛟一7班团支书', 202017, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201901, '高二1班团支书', 201901, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201902, '高二2班团支书', 201902, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201903, '高二3班团支书', 201903, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201904, '高二4班团支书', 201904, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201905, '高二5班团支书', 201905, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201906, '高二6班团支书', 201906, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201907, '高二7班团支书', 201907, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201908, '高二8班团支书', 201908, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201909, '高二9班团支书', 201909, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201910, '高二10班团支书', 201910, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201912, '蛟二2班团支书', 201912, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201913, '蛟二3班团支书', 201913, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201914, '蛟二4班团支书', 201914, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201915, '蛟二5班团支书', 201915, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201916, '蛟二6班团支书', 201916, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201917, '蛟二7班团支书', 201917, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201801, '高三1班团支书', 201801, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201802, '高三2班团支书', 201802, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201803, '高三3班团支书', 201803, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201804, '高三4班团支书', 201804, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201805, '高三5班团支书', 201805, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201806, '高三6班团支书', 201806, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201807, '高三7班团支书', 201807, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201808, '高三8班团支书', 201808, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201809, '高三9班团支书', 201809, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201810, '高三10班团支书', 201810, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201812, '蛟三2班团支书', 201812, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201813, '蛟三3班团支书', 201813, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201814, '蛟三4班团支书', 201814, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201815, '蛟三5班团支书', 201815, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201816, '蛟三6班团支书', 201816, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(201817, '蛟三7班团支书', 201817, 1, 'e10adc3949ba59abbe56e057f20f883e'), -(100001, '教师1', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100002, '教师2', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100003, '教师3', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100004, '教师4', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100005, '教师5', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100006, '教师6', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100007, '教师7', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100008, '教师8', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100009, '教师9', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(100010, '教师10', 100000, 2, 'e10adc3949ba59abbe56e057f20f883e'), -(110001, '管理员1', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110002, '管理员2', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110003, '管理员3', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110004, '管理员4', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110005, '管理员5', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110006, '管理员6', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110007, '管理员7', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110008, '管理员8', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110009, '管理员9', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(110010, '管理员10', 110000, 3, 'e10adc3949ba59abbe56e057f20f883e'), -(120001, '系统1', 120000, 4, 'e10adc3949ba59abbe56e057f20f883e'), -(120002, '系统2', 120000, 4, 'e10adc3949ba59abbe56e057f20f883e'); - -DROP TABLE IF EXISTS `volunteer`; -CREATE TABLE `volunteer` ( - `volId` int(11) NOT NULL, - `volName` char(255) DEFAULT NULL, - `volDate` date DEFAULT NULL, - `volTime` time DEFAULT NULL, - `stuMax` int(11) DEFAULT NULL, - `nowStuCount` int(11) DEFAULT NULL, - `description` text, - `status` smallint(6) DEFAULT NULL, - `volTimeInside` int(11) DEFAULT NULL, - `volTimeOutside` int(11) DEFAULT NULL, - `volTimeLarge` int(11) DEFAULT NULL, - `holderId` int(11) DEFAULT NULL, - PRIMARY KEY (`volId`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - -INSERT INTO `volunteer` (`volId`, `volName`, `volDate`, `volTime`, `stuMax`, `nowStuCount`, `description`, `status`, `volTimeInside`, `volTimeOutside`, `volTimeLarge`, `holderId`) VALUES -(1, '义工活动1', '2020-01-01', '16:00:00', 5, 5, '第1次义工活动', 2, 4, 0, 0, 100001), -(2, '义工活动2', '2020-01-02', '17:00:00', 5, 5, '第2次义工活动', 2, 4, 2, 0, 100001), -(3, '义工活动3', '2020-01-03', '18:00:00', 5, 5, '第3次义工活动', 2, 4, 0, 0, 100001); - --- 2020-11-09 07:17:56 diff --git a/test/deco.py b/deco.py similarity index 59% rename from test/deco.py rename to deco.py index 66a6736..63756f4 100644 --- a/test/deco.py +++ b/deco.py @@ -30,25 +30,26 @@ def Deco(func): except: postdata="" print("No Postdata loaded.") - - if not "NoToken" in func.__name__: + # Token还是不行。。前端到底是用什么实现的? + # if not "NoToken" in func.__name__: # 为了判断是否需要Token验证 # 我知道这很不好,但是带参数的修饰器和Flask冲突了(估计是) # 所以请在不用Token的函数名后面加上"_NoToken" - try: # 获取Token - tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 - print("Loading Token:",tkst, tkdata) - if tkst==TK.EXPIRED: - return json.dumps({'type':'ERROR', 'message':"token过期"}) - elif tkst==TK.BAD: - return json.dumps({'type':'ERROR', 'message':"token失效"}) - except: - tksk=TK.ERROR - tkdata={} - return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) - + # try: # 获取Token + # tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 + # print("Loading Token:",tkst, tkdata) + # if tkst==TK.EXPIRED: + # return json.dumps({'type':'ERROR', 'message':"token过期"}) + # elif tkst==TK.BAD: + # return json.dumps({'type':'ERROR', 'message':"token失效"}) + # except: + # tksk=TK.ERROR + # tkdata={} + # return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) try: - return json.dumps(func(*args,**kwargs)) + r=func(*args,**kwargs) + print("result->",r) + return json.dumps(r) except: return json.dumps({'type':'ERROR','message':'未知错误'}) return wrapper \ No newline at end of file diff --git a/main.py b/main.py index 2f8a2ff..9082bc0 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ import database from user import User from _class import Class from student import Student +from volunteer import Volunteer # Flask init app = Flask(__name__) @@ -12,19 +13,20 @@ app.config["SECRET_KEY"] = "PaSsw0rD@1234!@#$" CORS(app, supports_credentials=True) @app.after_request def af_req(resp): - resp = make_response(resp) + resp = make_response(resp, 200) resp.headers['Access-Control-Allow-Origin'] = 'http://localhost:8080' resp.headers['Access-Control-Allow-Methods'] = 'PUT,POST,GET,DELETE,OPTIONS' resp.headers['Access-Control-Allow-Headers'] = 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , authorize' resp.headers['Access-Control-Allow-Credentials'] = 'true' - resp.headers['X-Powered-By'] = '3.2.1' + resp.headers['X-Powered-By'] = 'ZVMS-beta' resp.headers['Content-Type'] = 'application/json;charset=utf-8' return resp app.register_blueprint(User) app.register_blueprint(Class) app.register_blueprint(Student) +app.register_blueprint(Volunteer) @app.route('/',methods=['POST']) def main(): diff --git a/new_concept_backend/_class.py b/new_concept_backend/_class.py deleted file mode 100644 index 4a7d960..0000000 --- a/new_concept_backend/_class.py +++ /dev/null @@ -1,54 +0,0 @@ -import oppressor as OP - -def getClassList(ext): - respdata = {'type': 'ERROR', 'message': '未知错误!'} - if ext[Auth] >= 1: - st, val = OP.classList() - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "获取成功" - respdata['class'] = [] # 列表初始化 - for i in val: - respdata['class'].append( - {'id': i, 'name': OP.classIdToString(i)}) - else: - respdata.update(val) - else: - respdata['message'] = "权限错误!" - return respdata - -def getStudentList(classId, ext): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - if ext["Auth"] > 1 or classId == ext["Class"]: - st, val = OP.studentList(classId) - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "获取成功" - respdata['student'] = [] - for i in val: - respdata['student'].append( - {'id': i[0], 'name': i[1], 'inside': i[2], 'outside': i[3], 'large': i[4]}) - else: - respdata.update(val) - else: - respdata['message'] = "权限错误!" - return respdata - -def getClassVolunteer(classId): - respdata = {'type': 'ERROR', 'message': '未知错误!'} - st, val = OP.getClassVolunteerList(classId) - if st: - respdata['volunteer'] = [] - for i in r: - st1, val1 = OP.getVolunteerInfo(i) - if st1: - respdata['volunteer'].append(OP.listToDict_volunteer_faultless(val1)) - else: - respdata.update(val1) - break - else: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - else: - respdata.update(val) - return respdata \ No newline at end of file diff --git a/new_concept_backend/callbacker.py b/new_concept_backend/callbacker.py deleted file mode 100644 index 1172962..0000000 --- a/new_concept_backend/callbacker.py +++ /dev/null @@ -1,54 +0,0 @@ -import socket - -def analyze(msg): - #在字符串传入的时候莫名其妙会被转义,要不要之前先encode一下? - print(msg) - pos1 = msg.find("\\r\\n") - pos2 = msg.find("\\r\\n\\r\\n") - print(pos1,pos2) - firstLine = msg[:pos1] - print('firstline-->',firstLine) - header = msg[(pos1 + 4):pos2] - content = msg[(pos2 + 8):] - method, url, protocol = firstLine.split(" ") - info = header.split("\\r\\n") - method=method[2:] - print('header-->',header) - print('content->',content) - print('method-->',method) - print('url----->',url) - print('protocol>',protocol) - # save informations - resp = {} - resp["method"] = method - resp["url"] = url - resp["protocol"] = protocol - resp["header"] = [] - print("info:-->") - for i in info: - print(i) - field, value = i.split(": ") - resp["header"].append({"field": field, "value": value}) - resp["content"] = content - - # 这里要把数据给后端让后端返回数据 - - ret = "HTTP/1.1 200 OK\r\nServer: ZVMS\r\n\r\n"+"Hello,world!" - #+ 后端.返回的东西() - ## 这里要去弄tokenid之类的东西 - return ret - -def run(): - s = socket.socket() - s.bind((socket.gethostname(), 5000)) - print(socket.gethostname()) #hostname:5000 - s.listen(5) - while True: - c, addr = s.accept() - print("Yes") - msg = c.recv(1024) - c.send(bytes(analyze(str(msg)).encode('UTF-8','strict'))) - c.close() - -if __name__ == "__main__": - run() \ No newline at end of file diff --git a/new_concept_backend/database.py b/new_concept_backend/database.py deleted file mode 100644 index 1f8515f..0000000 --- a/new_concept_backend/database.py +++ /dev/null @@ -1,36 +0,0 @@ -from sqlite3 import connect -import traceback # 更好的错误输出 - -conn = connect("zvms.db") -cur = conn.cursor() - -def close(): - global conn,cur - try: - cur.close() - conn.close() - except: - traceback.print_exc() - -def execute(sql, param = None): - global cur, conn - try: - cur.execute(sql, param) - except: - traceback.print_exc() - conn.rollback() - -def commit(): - global conn - try: - conn.commit() - except: - traceback.print_exc() - conn.rollback() - -def fetchall(): - global cur - try: - return cur.fetchall() - except: - traceback.print_exc() diff --git a/new_concept_backend/inquirior.py b/new_concept_backend/inquirior.py deleted file mode 100644 index e91d7e1..0000000 --- a/new_concept_backend/inquirior.py +++ /dev/null @@ -1,52 +0,0 @@ -# 负责对数据库的直接数据查询,不报错 -import database as DB - -# TABLE user -def user_getAll(): - DB.execute("SELECT * FROM user") - return DB.fetchall() - -def user_getById(uid): - DB.execute("SELECT * FROM user where userId = %s;", (uid)) - return DB.fetchone() - -def user_modifyById(uid, userName, _class, permission, password): - DB.execute("UPDATE user SET userName = %s, class = %s, permission = %s, password = %s wHERE userId = %s;", (userName, _class, permission, password, uid)) - -def user_insert(uid, userName, _class, permission, password): - DB.execute("INSERT INTO user (userId, userName, class, permission, password) VALUES (%s, %s, %s, %s, %s);", (uid, userName, _class, permission, password)) - -# TABLE student -def student_getAll(): - DB.execute("SELECT * FROM student;") - return DB.fetchall() - -def student_getById(sid): - DB.execute("SELECT * FROM student WHERE stuid = %s;", (sid)) - return DB.fetchone() - -def student_modifyById(sid, stuName, volIn, volOut, VolLarge): - DB.execute("UPDATE student SET stuName = %s, volTimeInside = %s, volTimeOutside = %s, volTimeLarge = %s WHERE stuId = %s;", (stuName, volIn, volOut, VolLarge, sid)) - -def student_insert(sid, stuName, volIn, volOut, VolLarge): - DB.execute("INSERT INTO student (stuId, stuName, volTimeInside, volTimeOutside, volTimeLarge) VALUES (%s, %s, %s, %s, %s)", (sid, stuName, volIn, volOut, VolLarge)) - -# TABLE volunteer -def volunteer_getAll() - DB.execute("SELECT * FROM volunteer;") - return DB.fetchall() - -def volunteer_getById(vid): - DB.execute("SELECT * FROM volunteer WHERE volId = %s;", (vid)) - return DB.fetchone() - -def volunteer_modifyById(volId, volName, volDate, volTime, stuMax, nowStuCount, description, status, volIn, volOut, volLarge, holderId): - DB.execute("UPDATE volunteer SET volName = %s, volDate = %s, volTime = %s, stuMax = %s, nowStuCount = %s, description = %s, status = %s, volTimeInside = %s, volTimeOutside = %s, volTimeLarge = %s, holderId = %s WHERE volId = %s;", (volName, volDate, volTime, stuMax, nowStuCount, description, status, volIn, volOut, volLarge, holderId, volId)) - -def volunteer_insert(volId, volName, volDate, volTime, stuMax, nowStuCount, description, status, volIn, volOut, volLarge, holderId): - DB.execute("INSERT INTO student (volName, volDate, volTime, stuMax, nowStuCount, description, status, volTimeInside, volTimeOutside, volTimeLarge, holderId) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (volId, volName, volDate, volTime, stuMax, nowStuCount, description, status, volIn, volOut, volLarge, holderId)) - -# TABLE stu_vol -def stu_vol_getAll(): - DB.execute("SELECT * FROM stu_vol;") - return DB.fetchall() diff --git a/new_concept_backend/main.py b/new_concept_backend/main.py deleted file mode 100644 index 92d7ff6..0000000 --- a/new_concept_backend/main.py +++ /dev/null @@ -1,23 +0,0 @@ -import user -import _class -import volunteer - -# 传入传出的都是字典,而非 json - -def exec(url, param, ext): # ext[Auth] 是权限 ext[Class] 是班级 - # ext 从 session 里面读 - if "user/login" in url: - return user.login(param) - if "user/logout" in url: - return user.logout() - if "class/list" in url: - return _class.getClassList(ext) - if "class/stulist/" in url: - return _class.getStudentList(int(url[url.find("class/stulist/")+len("class/stulist/"):]), ext) - # 如果int强制转换出错了要判断 - if "class/volunteer/" in url: - return _class.getClassVolunteer(int(url[url.find("class/volunteer/")+len("class/volunteer/"):])) - if "volunteer/list/" in url: - return volunteer.getVolunteerList() - if "volunteer/fetch/" in url: - return volunteer.getVolunteer(int(url[url.find("volunteer/fetch/")+len("volunteer/fetch/"):])) diff --git a/new_concept_backend/oppressor.py b/new_concept_backend/oppressor.py deleted file mode 100644 index c8c7530..0000000 --- a/new_concept_backend/oppressor.py +++ /dev/null @@ -1,109 +0,0 @@ -# 这个文件封装了一些针对数据库的操作 -import database as DB - -thisYear = 2020 # 以后要改成自动获取 - -def classIdToString(a): - global thisYear - id = int(a) - _year = id // 100 - _class = id % 100 - ret = "" - # 特殊身份的判断 - # 教师 100001 100002 - # 管理员 110001 110002 - # 系统 120003 120004 - if _year//100 == 10: - ret = "教师" - return ret - elif _year//100 == 11: - ret = "管理员" - return ret - elif _year//100 == 12: - ret = "系统" - return ret - - if _class <= 10: - ret = ret + "高" - elif _class <= 17: - ret = ret + "蛟" - if _year == thisYear: - ret = ret + "一" - elif _year == thisYear - 1: - ret = ret + "二" - elif _year == thisYear - 2: - ret = ret + "三" - ret = ret + (["NULL","1","2","3","4","5","6","7","8","9","10","NULL","2","3","4","5","6","7"])[_class] #如果我没记错的话校徽是这样的 - ret = ret + "班" - - return ret - -def userLogin(userId, password): - if isinstance(userId, str) and isinstance(password, str): - DB.execute("SELECT * FROM user WHERE userId = %s AND password = %s;", (userId, password)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "用户ID或密码错误"} - elif len(r) > 1: - return False, {"message": "数据库信息错误"} - else: - return True, r[0] - else: - return False, {"message": "请求接口错误"} - -def classList(): - DB.execute("SELECT class FROM user WHERE userId > %s;", (thisYear * 100 - 200)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - lst = [] - for i in r: - lst.append(i[0]) - return True, lst - -def studentList(classId): - if isinstance(classId, int): - DB.execute( - "SELECT * FROM student WHERE stuId < %d AND stuId > %d;"% # 这里是不是要 %s ? - (classId * 100 + 100, classId * 100)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - return True, r - else: - return False, {"message": "请求接口错误"} - -def getClassVolunteerList(classId): - if isinstance(classId, int): - DB.execute("SELECT volId FROM class_vol WHERE class = %d", (classId)) - r = DB.fetchall() # len(r) == 0 是否判定为数据库信息错误? - lst = [] - for i in r: - lst.append(i[0]) - return True, lst - else: - return False, {"message": "请求接口错误"} - -def volunteerList(): # 总列表 - DB.execute("SELECT * FROM volunteer") - r = DB.fetchall() - return True, r - -def getVolunteerInfo(volId): - if isinstance(volId, int): - DB.execute("SELECT * FROM volunteer WHERE volId = %d", (volId)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - return True, r[0] - else: - return False, {"message": "请求接口错误"} - -def listToDict_volunteer(a): - # if isinstance(a, list) and len(a) == 12 and isinstance(a[0], int) and isinstance(a[1], str) and isinstance(a[2], str): # Date形式存储的mysql内容读取出来后怎么判断 - return True, {"volId": a[0], "volName": a[1], "volDate": a[2], "volTime": a[3], "stuMax": a[4], "nowStuCount": a[5], "description": a[6], "status": a[7], "volTimeInside": a[8], "volTimeOutside": a[9], "volTimeLarge": a[10], "holderId": a[11]} - # else: - # return False, {"message": "调用接口错误"} \ No newline at end of file diff --git a/new_concept_backend/user.py b/new_concept_backend/user.py deleted file mode 100644 index a685ab0..0000000 --- a/new_concept_backend/user.py +++ /dev/null @@ -1,19 +0,0 @@ -import oppressor as OP - -def login(data): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - # 读取参数 - userid = data["userid"] - password = data["password"] - st, val = OP.userLogin(userid, password) - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "登陆成功" - respdata.update({"username": val[1], "class": val[2], "permission": val[3], "className": OP.classIdToString(val[2])}) - else: - respdata.update(val) - return json.dumps(respdata) # 传回json数据 - -def logout(): - respdata = {'type': 'SUCCESS', 'message': '登出成功!'} - return respdata diff --git a/new_concept_backend/volunteer.py b/new_concept_backend/volunteer.py deleted file mode 100644 index ec9802e..0000000 --- a/new_concept_backend/volunteer.py +++ /dev/null @@ -1,77 +0,0 @@ -import json -import oppressor as OP - -# @Volunteer.route('volunteer/randomThought', methods=['POST','GET']) -def randThought(): - respdata = {'type':'SUCCESS', 'stuName':'用户名', 'stuId': 20200101, 'content':'这是感想内容'} - return json.dumps(respdata) - # TODO 。。。 - -def getVolunteerList(): - respdata = {'type': 'ERROR', 'message': '未知错误'} - st, val = OP.volunteerList() - if st: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - respdata['volunteer'] = [] - for i in val: - respdata['volunteer'].append( - {'id': i[0], 'name': i[1], 'description': i[2], 'time': i[3], 'status': i[4], 'stuMax': i[5]}) - return json.dumps(respdata) - -def getVolunteer(volId): - respdata = {'type': 'ERROR', 'message': '未知错误'} - st, val = OP.getVolunteerInfo(volId) - if st: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - respdata.update(OP.listToDict_volunteer(val)) - else: - respdata.update(val) - return json.dumps(respdata) - -# @Volunteer.route('/volunteer/signup/', methods = ['POST']) -# def signupVolunteer(volId): -# respdata = {'type': 'ERROR', 'message': '未知错误'} -# json_data = json.loads(request.get_data().decode("utf-8")) -# user_class = session["class"] -# tag = True -# for i in json_data['stulst']: -# if i < user_class * 100 or i >= user_class * 100 + 100: -# Tag = False -# break -# if not Tag: -# respdata['message'] = "学生列表错误" -# else: -# DB.execute( -# "SELECT stuMax, nowStuCount FROM volunteer WHERE volId = %d"% (volId)) -# r = DB.fetchall() -# if len(r) != 1: -# respdata['message'] = "数据库信息错误" -# else: -# if len(json_data['stulst']) > r[0][0] - r[0][1]: -# respdata['message'] = "人数超限" -# else: -# DB.execute( -# "SELECT stuMax FROM class_vol WHERE volId = %d AND classId = %d"% (volId, user_class)) -# # 这里不对,应该在class_vol表里存这个班已经报名了多少人,不然多次报名可以突破班级人数限制 -# r = DB.fetchall() -# if len(r) != 1: -# respdata['message'] = "数据库信息错误" -# else: -# if len(json_data['stulst']) > r[0][0]: -# respdata['message'] = "人数超限" -# else: -# for i in json_data['stulst']: -# # 代码来不及写了,写一下思路 -# # class_vol表里修改一下这个班的报名人数 -# # stu_vol表里加一条未审核的记录 -# # volunteer表里修改nowStuCount -# respdata['type'] = "SUCCESS" -# respdata['message'] = "添加成功" -# -#@Volunteer.route('volunteer/create', methods = ['POST']) -#def createVolunteer(): -# respdata = {'type': 'error', 'message': '未知错误'} -# json_data = json.loads(request.get_data().decode("utf-8")) -# if session["permisson"] > 1 \ No newline at end of file diff --git a/new_concept_backend/zvms.db b/new_concept_backend/zvms.db deleted file mode 100644 index e69de29..0000000 diff --git a/oppressor.py b/oppressor.py index 1a0d12a..867ab07 100644 --- a/oppressor.py +++ b/oppressor.py @@ -38,6 +38,57 @@ def classIdToString(a): ret = ret + "班" return ret + +def select(col,src,exp,val,ret,only=True): # 估计能用了 + # col:选择的列,字符串 src:从哪张表,字符串 exp:条件,字符串 + # val:传入的数据,元组 ret:返回的格式,列表,内容为字符串,为[]则为col + # only:是否只取一个 + # 返回值:一个布尔值、一个字典,格式由ret决定(若only=False则为一个数组) + s="SELECT %s FROM %s WHERE %s;"%(col,src,exp) + print("Selecting:",s,val) + DB.execute(s,val) + r=DB.fetchall() + print(r) + if ret==[]: + ret=list(split(col,",")) + for i in len(ret): ret[i]=ret[i].strip() + if len(r)==0: return False, {"type":"ERROR","message": "数据库信息错误:未查询到相关信息"} + if len(r)==1: + result={} + for j in range(0,len(ret)): + result.update({ret[j]: r[0][j]}) + if only: return True, result + else: return True, [result] + else: + if only: return False, {"type":"ERROR","message": "数据库信息错误:要求一个但查询到多个"} + result=[] + for i in range(0,len(r)): + result.append({}) + for j in range(0,len(ret)): + result[i].update({ret[j]: r[i][j]}) + return True, result + +def update(col,src,exp,val): + s="UPDATE %s SET %s WHERE %s;"%(src,col,exp) + DB.execute(s,val) + r=DB.fetchall() + # 这个东西封装起来似乎没什么用。。以后可以考虑加上错误处理? + +def insert(col,src,val): + tmp="" + for i in val: + if isinstance(i,int): tmp+="%d," + if isinstance(i,str): tmp+="%s," + # 暂且如此 + tmp=tmp[0:-1] + s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) + DB.execute(s,val) + r=DB.fetchall() + +def user2dict(v): + return { "username":v[1], "class":v[2], + "permission":v[3], "classname":classIdToString(v[2]) + } def userLogin(userId, password): if isinstance(userId, str) and isinstance(password, str): # 其实传入的都是str类型 @@ -52,30 +103,6 @@ def userLogin(userId, password): else: return False, {"message": "请求接口错误"} -def classList(): - DB.execute("SELECT class FROM user WHERE userId > %s;", (thisYear * 100 - 200)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - lst = [] - for i in r: - lst.append(i[0]) - return True, lst - -def studentList(classId): - if isinstance(classId, int): - DB.execute( - "SELECT * FROM student WHERE stuId < %d AND stuId > %d;"% # 这里是不是要 %s ? - (classId * 100 + 100, classId * 100)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - return True, r - else: - return False, {"message": "请求接口错误"} - def getClassVolunteerList(classId): if isinstance(classId, int): DB.execute("SELECT volId FROM class_vol WHERE class = %d", (classId)) diff --git a/student.py b/student.py index f68a8b2..7cd7398 100644 --- a/student.py +++ b/student.py @@ -1,22 +1,21 @@ from flask import Blueprint import database as DB +import oppressor as OP +from deco import * +import tokenlib as TK import json Student = Blueprint("student", __name__) + @Student.route('/student/volbook/', methods=['POST']) -def getVolbook(stuId): - respdata = {'type': 'ERROR', 'message': '未知错误!'} - DB.execute( - "SELECT volId FROM stu_vol WHERE stuId = %d"% (stuId)) - r = DB.fetchall() - respdata['type'] = "SUCCESS" - respdata['message'] = "获取成功" - respdata['rec'] = [] +@Deco +def getVolbook(stuId): # 可以了 + fl,r=OP.select("volId","stu_vol","stuId=%s",(stuId),["volId"],only=False) + if not fl: return r + ret={"type": "SUCCESS","message": "获取成功","rec":[]} for i in r: - DB.execute( - "SELECT volName, volTimeInside, volTimeOutside, volTimeLarge, status FROM stu_vol WHERE vid = %d"%d (i[0])) - res = DB.fetchall() - respdata['rec'].append( - {"volId": i[0], "name": res[0], "inside": res[1], "outside": res[2], "large": res[3], "status": res[4]} - ) - return json.dumps(respdata) + ff,rr=OP.select("volId,volName,volTimeInside,volTimeOutside,volTimeLarge,status","volunteer", + "volId=%s",(i["volId"]),["volId","name","inside","outside","large","status"]) + if not ff: return rr + ret["rec"].append(rr) + return ret \ No newline at end of file diff --git a/test/_class.py b/test/_class.py deleted file mode 100644 index 7d0215f..0000000 --- a/test/_class.py +++ /dev/null @@ -1,78 +0,0 @@ -from flask import Blueprint, request -import tokenlib as tk -import json -import oppressor as OP - -Class = Blueprint('class', __name__) - -@Class.route('/class/list', methods = ['POST']) -def getClassList(): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - try: - #print("Before") - #tkst, tkdata = tk.readToken(json.loads(request.get_data().decode('utf-8')).get('token')) - #print("After") - #if tkdata['permission'] >= 1 and tkst == tk.SUCCESS: - st, val = OP.classList() - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "获取成功" - respdata['class'] = [] # 列表初始化 - for i in val: - respdata['class'].append( - {'id': i, 'name': OP.classIdToString(i)}) - else: - respdata.update(val) - #elif tkst == tk.EXPIRED or tkst == tk.BAD or tkst == tk.ERROR: - # respdata['message'] = "Token错误" - #else: - # respdata['message'] = "权限错误!" - except: - respdata['message'] = "接口错误" - return json.dumps(respdata) # 传回json数据 - -@Class.route("/class/stulist/", methods = ['POST']) -def getStudentList(classId): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - try: - #tkst, tkdata = tk.readToken(json.loads(request.get_data().decode('utf-8')).get('token')) - #if (tkdata["permission"] > 1 or classId == tkdata["class"]) and tkst == tk.SUCCESS: - st, val = OP.studentList(classId) - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "获取成功" - respdata['student'] = [] - for i in val: - respdata['student'].append( - {'id': i[0], 'name': i[1], 'inside': i[2], 'outside': i[3], 'large': i[4]}) - else: - respdata.update(val) - #elif tkst == tk.EXPIRED or tkst == tk.BAD or tkst == tk.ERROR: - # respdata['message'] = "Token错误" - #else: - # respdata['message'] = "权限错误!" - except: - respdata['message'] = "接口错误" - - return json.dumps(respdata) # 传回json数据 - -@Class.route("/class/volunteer/", methods = ['POST']) -def getClassVolunteer(classId): - respdata = {'type': 'ERROR', 'message': '未知错误!'} - st, val = OP.getClassVolunteerList(classId) - if st: - respdata['volunteer'] = [] - for i in r: - st1, val1 = OP.getVolunteerInfo(i) - if st1: - respdata['volunteer'].append( - OP.listToDict_volunteer(val1)) - else: - respdata.update(val1) - break - else: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - else: - respdata.update(val) - return json.dumps(respdata) diff --git a/test/database.py b/test/database.py deleted file mode 100644 index bfa84c0..0000000 --- a/test/database.py +++ /dev/null @@ -1,41 +0,0 @@ -from pymysql import connect, cursors -import traceback # 更好的错误输出 - -conn = connect( - host = "127.0.0.1", - user = "zvms", - password = "123456", - db = "zvms" -) -cur = conn.cursor() - -def close(): - global conn,cur - try: - cur.close() - conn.close() - except: - traceback.print_exc() - -def execute(sql, param = None): - global cur, conn - try: - cur.execute(sql, param) - except: - traceback.print_exc() - conn.rollback() - -def commit(): - global conn - try: - conn.commit() - except: - traceback.print_exc() - conn.rollback() - -def fetchall(): - global cur - try: - return cur.fetchall() - except: - traceback.print_exc() diff --git a/test/main.py b/test/main.py deleted file mode 100644 index c0107a3..0000000 --- a/test/main.py +++ /dev/null @@ -1,34 +0,0 @@ -from flask import Flask,make_response -from flask_cors import CORS -import database -from user import User -from _class import Class -from student import Student - -# Flask init -app = Flask(__name__) -app.debug = True # 仅在测试环境打开! -app.config["SECRET_KEY"] = "PaSsw0rD@1234!@#$" -CORS(app, supports_credentials=True) -@app.after_request -def af_req(resp): - resp = make_response(resp, 200) - resp.headers['Access-Control-Allow-Origin'] = 'http://localhost:8080' - resp.headers['Access-Control-Allow-Methods'] = 'PUT,POST,GET,DELETE,OPTIONS' - resp.headers['Access-Control-Allow-Headers'] = 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , authorize' - resp.headers['Access-Control-Allow-Credentials'] = 'true' - - resp.headers['X-Powered-By'] = 'ZVMS-beta' - resp.headers['Content-Type'] = 'application/json;charset=utf-8' - return resp - -app.register_blueprint(User) -app.register_blueprint(Class) -app.register_blueprint(Student) - -@app.route('/',methods=['POST']) -def main(): - return "" - -if __name__ == '__main__': - app.run() diff --git a/test/oppressor.py b/test/oppressor.py deleted file mode 100644 index 43cfd02..0000000 --- a/test/oppressor.py +++ /dev/null @@ -1,158 +0,0 @@ -# 随手打的一个词竟然还真的有,那就用这个名吧 -# 这个文件封装了一些针对数据库的操作 -import database as DB - -thisYear = 2020 # 以后要改成自动获取 - -def classIdToString(a): - global thisYear - id = int(a) - _year = id // 100 - _class = id % 100 - ret = "" - # 特殊身份的判断 - # 教师 100001 100002 - # 管理员 110001 110002 - # 系统 120003 120004 - if _year//100 == 10: - ret = "教师" - return ret - elif _year//100 == 11: - ret = "管理员" - return ret - elif _year//100 == 12: - ret = "系统" - return ret - - if _class <= 10: - ret = ret + "高" - elif _class <= 17: - ret = ret + "蛟" - if _year == thisYear: - ret = ret + "一" - elif _year == thisYear - 1: - ret = ret + "二" - elif _year == thisYear - 2: - ret = ret + "三" - ret = ret + (["NULL","1","2","3","4","5","6","7","8","9","10","NULL","2","3","4","5","6","7"])[_class] #如果我没记错的话校徽是这样的 - ret = ret + "班" - - return ret - -def select(col,src,exp,val,ret,only=True): - # col:选择的列,字符串 src:从哪张表,字符串 exp:条件,字符串 - # val:传入的数据,元组 ret:返回的格式,列表,内容为字符串,为[]则为col - # only:是否只取一个 - # 返回值:一个布尔值、一个字典,格式由ret决定(若only=False则为一个数组) - s="SELECT %s FROM %s WHERE %s;"%(col,src,exp) - DB.execute(s,val) - r=DB.fetchall() - if ret==[]: - ret=list(split(col,",")) - for i in len(ret): ret[i]=ret[i].strip() - if len(r)==0: return False, {"message": "数据库信息错误:未查询到相关信息"} - if len(r)==1: - ret={} - for j in range(0,len(val)): - ret.update({val[j]: r[0][j]}) - if only: return True, ret - else: return True, [ret] - else: - if only: return False, {"message": "数据库信息错误:要求一个但查询到多个"} - ret=[] - for i in range(0,len(r)): - for j in range(0,len(val)): - ret[i].update({val[j]: r[i][j]}) - return True, ret - -def update(col,src,exp,val): - s="UPDATE %s SET %s WHERE %s;"%(src,col,exp) - DB.execute(s,val) - r=DB.fetchall() - # 这个东西封装起来似乎没什么用。。以后可以考虑加上错误处理? - -def insert(col,src,val): - tmp="" - for i in val: - if isinstance(i,int): tmp+="%d," - if isinstance(i,str): tmp+="%s," - # 暂且如此 - tmp=tmp[0:-1] - s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) - DB.execute(s,val) - r=DB.fetchall() - -def user2dict(v): - return { "username":v[1], "class":v[2], - "permission":v[3], "classname":classIdToString(v[2]) - } - -def userLogin(userId, password): - if isinstance(userId, str) and isinstance(password, str): # 其实传入的都是str类型 - DB.execute("SELECT * FROM user WHERE userId = %s AND password = %s;", (userId, password)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "用户ID或密码错误"} - elif len(r) > 1: - return False, {"message": "数据库信息错误"} - else: - return True, r[0] - else: - return False, {"message": "请求接口错误"} - -def classList(): - DB.execute("SELECT class FROM user WHERE userId > %s;", (thisYear * 100 - 200)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - lst = [] - for i in r: - lst.append(i[0]) - return True, lst - -def studentList(classId): - if isinstance(classId, int): - DB.execute( - "SELECT * FROM student WHERE stuId < %d AND stuId > %d;", # 这里是不是要 %s ? - (classId * 100 + 100, classId * 100)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - return True, r - else: - return False, {"message": "请求接口错误"} - -def getClassVolunteerList(classId): - if isinstance(classId, int): - DB.execute("SELECT volId FROM class_vol WHERE class = %d", (classId)) - r = DB.fetchall() # len(r) == 0 是否判定为数据库信息错误? - lst = [] - for i in r: - lst.append(i[0]) - return True, lst - else: - return False, {"message": "请求接口错误"} - -def volunteerList(): # 总列表 - DB.execute("SELECT * FROM volunteer") - r = DB.fetchall() - return True, r - -def getVolunteerInfo(volId): - if isinstance(volId, int): - DB.execute("SELECT * FROM volunteer WHERE volId = %d", (volId)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - return True, r[0] - else: - return False, {"message": "请求接口错误"} - -def listToDict_volunteer(a): - if isinstance(a, list) and len(a) == 12 and isinstance(a[0], int) and isinstance(a[1], str) and isinstance(a[2], str): # Date形式存储的mysql内容读取出来后怎么判断 - return True, {"volId": a[0], "volName": a[1], "volDate": a[2], "volTime": a[3], "stuMax": a[4], "nowStuCount": a[5], "description": a[6], "status": a[7], "volTimeInside": a[8], "volTimeOutside": a[9], "volTimeLarge": a[10], "holderId": a[11]} - else: - return False, {"message": "调用接口错误"} \ No newline at end of file diff --git a/test/student.py b/test/student.py deleted file mode 100644 index b42a7fc..0000000 --- a/test/student.py +++ /dev/null @@ -1,22 +0,0 @@ -from flask import Blueprint -import database as DB -from deco import * -import tokenlib as TK -import json - -Student = Blueprint("student", __name__) -@Student.route('/student/volbook/', methods=['POST']) -@Deco -def getVolbook(stuId): - if tkData().get("permission")==1 and tkData().get("class")!=stuId//100: - return {'type':'ERROR', 'message':"权限不足"} - DB.execute("SELECT volId FROM stu_vol WHERE stuId = %s", (stuId)) - r = DB.fetchall() - ret={'type':'SUCCESS', 'message':"获取成功", "rec":[]} - for i in r: - DB.execute( - "SELECT volTimeInside, volTimeOutside, volTimeLarge, status FROM stu_vol WHERE volId = %s", - (i[0])) - res=DB.fetchall()[0] - ret['rec']+=[{"volId": i[0], "inside": res[0], "outside": res[1], "large": res[2], "status": res[3]}] - return ret \ No newline at end of file diff --git a/test/tokenlib.py b/test/tokenlib.py deleted file mode 100644 index c2b930c..0000000 --- a/test/tokenlib.py +++ /dev/null @@ -1,31 +0,0 @@ -import json -from itsdangerous import TimedJSONWebSignatureSerializer, SignatureExpired, BadSignature - -ERROR = 0 -SUCCESS = 1 -EXPIRED = 2 -BAD = 3 - -SECRET_KEY = "譋窹乆乣詈" -SALT = "詈乆窹乣譋 " -EXPIRES_IN = 3600 - -def generateToken(data): - global SECRET_KEY, SALT, EXPIRES_IN - s = TimedJSONWebSignatureSerializer(secret_key=SECRET_KEY, expires_in=EXPIRES_IN, salt=SALT) - return s.dumps(data).decode('ascii') - -def readToken(token): - global SECRET_KEY, SALT, EXPIRES_IN - global ERROR, SUCCESS, EXPIRED, BAD - s = TimedJSONWebSignatureSerializer(secret_key=SECRET_KEY, salt=SALT) - st = ERROR - data = {} - try: - data = s.loads(token) - st = SUCCESS - except SignatureExpired: - st = EXPIRED - except BadSignature: - st = BAD - return st, data \ No newline at end of file diff --git a/test/user.py b/test/user.py deleted file mode 100644 index b0c273e..0000000 --- a/test/user.py +++ /dev/null @@ -1,44 +0,0 @@ -from flask import Blueprint, request -from deco import * -import tokenlib as TK -import json -import traceback -import oppressor as OP - -User = Blueprint('user', __name__) - -@User.route('/user/login', methods=['POST']) -@Deco -def login_NoToken(): - userid = json_data().get("userid") - password = json_data().get("password") - st, val = OP.userLogin(userid, password) - ret={} - if st: - ret.update({"type":"SUCCESS", "message":"登入成功!"}) - ret.update(OP.user2dict(val)) - ret.update({"token":TK.generateToken({ - "username": ret['username'], - "class": ret['class'], - "permission": ret['permission'] - })}) - else: - traceback.print_exc() - ret.update(val) - return ret - -@User.route('/user/logout', methods=['POST']) -@Deco -def logout_NoToken(): - return {'type': 'SUCCESS', 'message': '登出成功!'} - #最好在这里做点什么吧,比如删除cookie什么的 - -@User.route('/user/info', methods=['POST','GET']) -@Deco -def info(): - return {'type':'SUCCESS', 'message':"获取成功", 'info':tkData()} - -@User.route('/user/getInfo/', methods=['POST']) -@Deco -def getInfo(userId): - pass diff --git a/test/volunteer.py b/test/volunteer.py deleted file mode 100644 index 01c21bf..0000000 --- a/test/volunteer.py +++ /dev/null @@ -1,142 +0,0 @@ -from flask import Blueprint, request -import json -from deco import * -import oppressor as OP - -Volunteer = Blueprint('volunteer', __name__) - -@Volunteer.route('/volunteer/list', methods = ['POST']) -@Deco -def getVolunteerList(): - respdata = {'type': 'ERROR', 'message': '未知错误'} - st, val = OP.volunteerList() - if st: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - respdata['volunteer'] = [] - for i in val: - respdata['volunteer'].append( - {'id': i[0], 'name': i[1], 'description': i[2], 'time': i[3], 'status': i[4], 'stuMax': i[5]}) - return respdata - -@Volunteer.route('/volunteer/fetch/', methods = ['POST']) -@Deco -def getVolunteer(volId): - respdata = {'type': 'ERROR', 'message': '未知错误'} - st, val = OP.getVolunteerInfo(volId) - if st: - # version 1 - st1, val1 = OP.listToDict_volunteer(val) - if st1: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - respdata.update(val1) - # version 2 - # respdata['type'] = 'SUCCESS' - # respdata['message'] = '获取成功' - # respdata.update(OP.listToDict_volunteer_faultless(val)) - else: - respdata.update(val) - return respdata - -@Volunteer.route('/volunteer/signup/', methods = ['POST']) -@Deco -def signupVolunteer(volId): - user_class = tkData.get("class") - # 判断是否都是本班的人 - for i in json_data['stulst']: - if i < user_class * 100 or i >= user_class * 100 + 100: - return {"type": "ERROR", "message": "学生列表错误"} - # 判断人数是否超过这个义工的人数上限 - st, r = OP.select("stuMax, nowStuCount","volunteer","volId=%d",volId,["stuMax","nowStuCount"],only=True) - if not st: return r - if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: - return {"type":"ERROR", "message":"人数超限"} - # 判断人数是否超过班级人数上限 - st, r = OP.select("stuMax, nowStuCount","class_vol","volId=%d AND classId=%d",(volId,classId),["stuMax"],only=True) - if not st: return r - if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: - return {"type":"ERROR", "message":"人数超限"} - # 修改数据库 - OP.update("nowStuCount=nowStuCount+%d","class_vol","volId=%d AND classId=%d", - (len(json_data['stulst']),volId,classId)) - OP.update("nowStuCount=nowStuCount+%d","volunteer","volId=%d", - (len(json_data['stulst']),volId)) - for i in json_data['stulst']: - # 遍历每一个学生,加入一条未审核的记录 - OP.insert("volId,stuId,status,volTimeInside,volTimeOutside,volTimeLarge,thought", - "stu_vol",(volId,i,0,0,0,"")) - # 审核过了以后再发义工时间 - return {"type":"SUCCESS","message":"添加成功"} - -@Volunteer.route('volunteer/create', methods = ['POST']) -@Deco -def createVolunteer(): - if not tkData.get("permission") in [2,4]: # 这权限是不是有点奇怪? - return {'type':'ERROR', 'message':"权限不足"} - - OP.insert("volId,volName,volDate,volTime", - "volunteer", - ()) - # 这里出了一些问题 - # TIME和DATE类型的insert还没写 - # 还有这两个类型可以直接用%吗? - return {"type":"SUCCESS", "message":"创建成功"} -''' - { - "name": "义工活动1", - "date": "2020.10.1", - "time": "13:00", - "stuMax": 20, - "description": "新华书店打扫", - "inside": 0, - "outside": 3, - "large": 0, - "class": [ - {"id": 202001, "stuMax": 10}, - {"id": 202002, "stuMax": 5}, - {"id": 202003, "stuMax": 10} - ] - // hid 是自动从session获取的 - } -''' - -@Volunteer.route('volunteer/signerList/', methods = ['POST']) -def getSignerList(volId): - if not tkData.get("permission")<3: - return {'type':'ERROR', 'message':"权限不足"} - ret={"type":"SUCCESS", "message":"获取成功","result":[]} - fl,r=OP.select("stuId","stu_vol","volId=%d",(volId),["stuId"],only=False) - if not fl: return r - for i in r: # 为什么要返回学生姓名啊 - fl,rr=OP.select("stuId,stuName","student","stuId=%d",(i.get("stuId"),["stuId","stuName"]) - if not fl: return rr - ret["result"]+=rr - return ret - -@Volunteer.route('volunteer/choose/', methods = ['POST']) -def chooseVolunteer(volId): - pass - -@Volunteer.route('volunteer/joinerList/', methods = ['POST']) -def getJoinerList(volId): - # 所以这个的意思是返回所有审核过了的报名的人吗? - if not tkData.get("permission")<3: - return {'type':'ERROR', 'message':"权限不足"} - ret={"type":"SUCCESS", "message":"获取成功","result":[]} - fl,r=OP.select("stuId","stu_vol","volId=%d and status=1",(volId),["stuId"],only=False) - if not fl: return r - for i in r: # 为什么要返回学生姓名啊 - fl,rr=OP.select("stuId,stuName","student","stuId=%d",(i.get("stuId"),["stuId","stuName"]) - if not fl: return rr - ret["result"]+=rr - return ret - -@Volunteer.route('volunteer/thought/', methods = ['POST']) -def submitThought(volId): - pass - -@Volunteer.route('volunteer/randomThought', methods=['POST','GET']) -def randthought(): - respdata = {'type':'SUCCESS', 'stuName':'用户名', 'stuId': 20200101, 'content':'这是感想内容'} - return json.dumps(respdata) diff --git a/tmp/converter.py b/tmp/converter.py deleted file mode 100644 index 91b2f57..0000000 --- a/tmp/converter.py +++ /dev/null @@ -1,71 +0,0 @@ -import re -def encrypt(a): - # 似乎只有在登录时的用户名的地方要用这个东西 - a = re.sub('_' , '__', a) - a = re.sub('!' , '_1', a) - a = re.sub('@' , '_2', a) - a = re.sub('#' , '_3', a) - a = re.sub('$' , '_4', a) - a = re.sub('%' , '_5', a) - a = re.sub('^' , '_6', a) - a = re.sub('&' , '_7', a) - a = re.sub('*' , '_8', a) - a = re.sub('(' , '_9', a) - a = re.sub(')' , '_0', a) - a = re.sub('[' , '_i', a) - a = re.sub(']' , '_o', a) - a = re.sub('\\', '_p', a) - a = re.sub(';' , '_k', a) - a = re.sub('\'', '_l', a) - a = re.sub(',' , '_b', a) - a = re.sub('.' , '_n', a) - a = re.sub('/' , '_m', a) - a = re.sub('{' , '_I', a) - a = re.sub('}' , '_O', a) - a = re.sub('|' , '_P', a) - a = re.sub(':' , '_K', a) - a = re.sub('"' , '_L', a) - a = re.sub('<' , '_B', a) - a = re.sub('>' , '_N', a) - a = re.sub('?' , '_M', a) - a = re.sub('`' , '_q', a) - a = re.sub('~' , '_Q', a) - a = re.sub('-' , '_w', a) - a = re.sub('=' , '_e', a) - a = re.sub('+' , '_E', a) - return a - -def decrypt(a): - a = re.sub('__', '_' , a) - a = re.sub('_E', '+' , a) - a = re.sub('_e', '=' , a) - a = re.sub('_w', '-' , a) - a = re.sub('_Q', '~' , a) - a = re.sub('_q', '`' , a) - a = re.sub('_M', '?' , a) - a = re.sub('_N', '>' , a) - a = re.sub('_B', '<' , a) - a = re.sub('_L', '"' , a) - a = re.sub('_K', ':' , a) - a = re.sub('_P', '|' , a) - a = re.sub('_O', '}' , a) - a = re.sub('_I', '{' , a) - a = re.sub('_m', '/' , a) - a = re.sub('_n', '.' , a) - a = re.sub('_b', ',' , a) - a = re.sub('_l', '\'', a) - a = re.sub('_k', ';' , a) - a = re.sub('_p', '\\', a) - a = re.sub('_o', ']' , a) - a = re.sub('_i', '[' , a) - a = re.sub('_0', ')' , a) - a = re.sub('_9', '(' , a) - a = re.sub('_8', '*' , a) - a = re.sub('_7', '&' , a) - a = re.sub('_6', '^' , a) - a = re.sub('_5', '%' , a) - a = re.sub('_4', '$' , a) - a = re.sub('_3', '#' , a) - a = re.sub('_2', '@' , a) - a = re.sub('_1', '!' , a) - return a diff --git a/tmp/database.py b/tmp/database.py deleted file mode 100644 index bfa84c0..0000000 --- a/tmp/database.py +++ /dev/null @@ -1,41 +0,0 @@ -from pymysql import connect, cursors -import traceback # 更好的错误输出 - -conn = connect( - host = "127.0.0.1", - user = "zvms", - password = "123456", - db = "zvms" -) -cur = conn.cursor() - -def close(): - global conn,cur - try: - cur.close() - conn.close() - except: - traceback.print_exc() - -def execute(sql, param = None): - global cur, conn - try: - cur.execute(sql, param) - except: - traceback.print_exc() - conn.rollback() - -def commit(): - global conn - try: - conn.commit() - except: - traceback.print_exc() - conn.rollback() - -def fetchall(): - global cur - try: - return cur.fetchall() - except: - traceback.print_exc() diff --git a/tmp/init.py b/tmp/init.py deleted file mode 100644 index b337ad2..0000000 --- a/tmp/init.py +++ /dev/null @@ -1,78 +0,0 @@ -# 初始化数据库并插入一条测试数据 - -import database as DB - -DB.execute("DROP TABLE IF EXISTS user;") -DB.execute('''CREATE TABLE user( - userId INTEGER PRIMARY KEY, - userName CHAR(255), - class INTEGER, - permission SMALLINT, - password CHAR(255) - );''') - -DB.execute("DROP TABLE IF EXISTS student;") -DB.execute('''CREATE TABLE student( - stuId INTEGER PRIMARY KEY, - stuName CHAR(64), - volTimeInside INTEGER, - volTimeOutside INTEGER, - volTimeLarge INTEGER - );''') - -DB.execute("DROP TABLE IF EXISTS volunteer;") -DB.execute('''CREATE TABLE volunteer( - volId INTEGER PRIMARY KEY, - volName CHAR(255), - volDate DATE, - volTime TIME, - stuMax INTEGER, - nowStuCount INTEGER, - description TEXT, - status SMALLINT, - volTimeInside INTEGER, - volTimeOutside INTEGER, - volTimeLarge INTEGER, - holderId INTEGER - );''') - -DB.execute("DROP TABLE IF EXISTS stu_vol;") -DB.execute('''CREATE TABLE stu_vol( - volId INTEGER, - stuId INTEGER, - status SMALLINT, - volTimeInside INTEGER, - volTimeOutside INTEGER, - volTimeLarge INTEGER - );''') - -DB.execute("DROP TABLE IF EXISTS class_vol;") -DB.execute('''CREATE TABLE class_vol( - volId INTEGER, - class INTEGER, - stuMax INTEGER - );''') - - - -# DB.execute('''INSERT INTO user(userId, userName, class, permission, password) -# VALUES(%d, %s, %d, %d, %s);''', -# (20200101, "admin", 202001, 2, "e10adc3949ba59abbe56e057f20f883e")) - -# DB.execute('''INSERT INTO student(stuId, stuName, volTimeInside, volTimeOutside, volTimeLarge) -# VALUES(%d, %s, %d, %d, %d);''', -# (20200101, "王彳亍", 0, 0, 0)) - -# DB.execute('''INSERT INTO volunteer(volId, volName, volDate, volTime, stuMax, nowStuCount, description, status, volTimeInside, volTimeOutside, volTimeLarge, holderId) -# VALUES(%d, %s, %s, %s, %d, %d, %s, %d, %d, %d, %d);''', -# (1, "喂孔子+拜锦鲤", "2020.9.24", "13:00", 10, 0, "blablablabla", 0, 1, 0, 202001)) - -# DB.execute('''INSERT INTO stu_vol(volId, stuId, status, volTimeInside, volTimeOutside, volTimeLarge) -# VALUES(%d, %d, %d, %d, %d, %d);''', -# (1, 20200101, 0, 0, 0, 0)) - -# DB.execute('''INSERT INTO class_vol(volId, class, stuMax) -# VALUES(%d, %d, %d);''', -# (1, 202001, 10)) - -DB.commit() \ No newline at end of file diff --git a/user.py b/user.py index 4002b09..b0c273e 100644 --- a/user.py +++ b/user.py @@ -1,5 +1,6 @@ from flask import Blueprint, request -import tokenlib as tk +from deco import * +import tokenlib as TK import json import traceback import oppressor as OP @@ -7,53 +8,37 @@ import oppressor as OP User = Blueprint('user', __name__) @User.route('/user/login', methods=['POST']) -def login(): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - try: - json_data = json.loads(request.get_data().decode("utf-8")) # 读取POST传入的JSON数据 - # 读取参数 - userid = json_data.get("userid") - password = json_data.get("password") - st, val = OP.userLogin(userid, password) - if st: - respdata['type'] = "SUCCESS" - respdata['message'] = "登录成功" - respdata.update({"username": val[1], "class": val[2], "permission": val[3], "classname": OP.classIdToString(val[2])}) - respdata.update({"token":tk.generateToken({ - "username": respdata['username'], - "class": respdata['class'], - "permission": respdata['permission'] - })}) - else: - traceback.print_exc() - respdata.update(val) - except: - respdata['message'] = "接口错误" - return json.dumps(respdata) # 传回json数据 +@Deco +def login_NoToken(): + userid = json_data().get("userid") + password = json_data().get("password") + st, val = OP.userLogin(userid, password) + ret={} + if st: + ret.update({"type":"SUCCESS", "message":"登入成功!"}) + ret.update(OP.user2dict(val)) + ret.update({"token":TK.generateToken({ + "username": ret['username'], + "class": ret['class'], + "permission": ret['permission'] + })}) + else: + traceback.print_exc() + ret.update(val) + return ret @User.route('/user/logout', methods=['POST']) -def logout(): - respdata = {'type': 'SUCCESS', 'message': '登出成功!'} +@Deco +def logout_NoToken(): + return {'type': 'SUCCESS', 'message': '登出成功!'} #最好在这里做点什么吧,比如删除cookie什么的 - return json.dumps(respdata) @User.route('/user/info', methods=['POST','GET']) +@Deco def info(): - respdata = {'type': 'ERROR', 'message': '未知错误!'} # 定义默认返回值 - try: - tkst, tkdata = tk.readToken(json.loads(request.get_data().decode('utf-8')).get('token')) - if tkst == tk.SUCCESS: - respdata['type']="SUCCESS" - respdata['message']="获取成功" - respdata['info']=tkdata - elif tkst == tk.EXPIRED: - respdata['message']="token过期" - elif tkst == tk.BAD: - respdata['message']="token出错" - except: - respdata['message']="接口错误" - return json.dumps(respdata) + return {'type':'SUCCESS', 'message':"获取成功", 'info':tkData()} @User.route('/user/getInfo/', methods=['POST']) -def getInfo(): +@Deco +def getInfo(userId): pass diff --git a/volunteer.py b/volunteer.py index b6fb330..c7746c8 100644 --- a/volunteer.py +++ b/volunteer.py @@ -1,104 +1,129 @@ from flask import Blueprint, request import json +from deco import * import oppressor as OP Volunteer = Blueprint('volunteer', __name__) @Volunteer.route('/volunteer/list', methods = ['POST']) -def getVolunteerList(): - respdata = {'type': 'ERROR', 'message': '未知错误'} - st, val = OP.volunteerList() - if st: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - respdata['volunteer'] = [] - for i in val: - respdata['volunteer'].append( - {'id': i[0], 'name': i[1], 'description': i[2], 'time': i[3], 'status': i[4], 'stuMax': i[5]}) - return json.dumps(respdata) +@Deco +def getVolunteerList(): # 可以了 + fl,r=OP.select("volId,volName,description,volDate,volTime,status,stuMax","volunteer","true",(), + ["id","name","description","date","time","status","stuMax"],only=False) + if not fl: return r + return { + "type": "SUCCESS", + "message": "获取成功", + "volunteer": r + } @Volunteer.route('/volunteer/fetch/', methods = ['POST']) -def getVolunteer(volId): - respdata = {'type': 'ERROR', 'message': '未知错误'} - st, val = OP.getVolunteerInfo(volId) - if st: - # version 1 - st1, val1 = OP.listToDict_volunteer(val) - if st1: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - respdata.update(val1) - # version 2 - # respdata['type'] = 'SUCCESS' - # respdata['message'] = '获取成功' - # respdata.update(OP.listToDict_volunteer_faultless(val)) - else: - respdata.update(val) - return json.dumps(respdata) +@Deco +def getVolunteer(volId): # 可以了 + fl,r=OP.select("volName,volDate,volTime,stuMax,nowStuCount,description,status,volTimeInside,volTimeOutside,volTimeLarge", + "volunteer","volId=%s",(volId),["name","date","time","stuMax","stuNow","description","status","inside","outside","large"]) + if not fl: return r + r.update({"type":"SUCCESS","message":"获取成功"}) + return r @Volunteer.route('/volunteer/signup/', methods = ['POST']) +@Deco def signupVolunteer(volId): - respdata = {'type': 'ERROR', 'message': '未知错误'} - json_data = json.loads(request.get_data().decode("utf-8")) - user_class = session["class"] - tag = True + user_class = tkData.get("class") + # 判断是否都是本班的人 for i in json_data['stulst']: if i < user_class * 100 or i >= user_class * 100 + 100: - Tag = False - break - if not Tag: - respdata['message'] = "学生列表错误" - else: - DB.execute( - "SELECT stuMax, nowStuCount FROM volunteer WHERE volId = %d"% (volId)) - r = DB.fetchall() - if len(r) != 1: - respdata['message'] = "数据库信息错误" - else: - if len(json_data['stulst']) > r[0][0] - r[0][1]: - respdata['message'] = "人数超限" - else: - DB.execute( - "SELECT stuMax FROM class_vol WHERE volId = %d AND classId = %d"% (volId, user_class)) - # 这里不对,应该在class_vol表里存这个班已经报名了多少人,不然多次报名可以突破班级人数限制 - r = DB.fetchall() - if len(r) != 1: - respdata['message'] = "数据库信息错误" - else: - if len(json_data['stulst']) > r[0][0]: - respdata['message'] = "人数超限" - else: - for i in json_data['stulst']: - # 代码来不及写了,写一下思路 - # class_vol表里修改一下这个班的报名人数 - # stu_vol表里加一条未审核的记录 - # volunteer表里修改nowStuCount - respdata['type'] = "SUCCESS" - respdata['message'] = "添加成功" + return {"type": "ERROR", "message": "学生列表错误"} + # 判断人数是否超过这个义工的人数上限 + st, r = OP.select("stuMax, nowStuCount","volunteer","volId=%d",volId,["stuMax","nowStuCount"]) + if not st: return r + if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: + return {"type":"ERROR", "message":"人数超限"} + # 判断人数是否超过班级人数上限 + st, r = OP.select("stuMax, nowStuCount","class_vol","volId=%d AND classId=%d",(volId,classId),["stuMax"]) + if not st: return r + if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: + return {"type":"ERROR", "message":"人数超限"} + # 修改数据库 + OP.update("nowStuCount=nowStuCount+%d","class_vol","volId=%d AND classId=%d", + (len(json_data['stulst']),volId,classId)) + OP.update("nowStuCount=nowStuCount+%d","volunteer","volId=%d", + (len(json_data['stulst']),volId)) + for i in json_data['stulst']: + # 遍历每一个学生,加入一条未审核的记录 + OP.insert("volId,stuId,status,volTimeInside,volTimeOutside,volTimeLarge,thought", + "stu_vol",(volId,i,0,0,0,"")) + # 审核过了以后再发义工时间 + return {"type":"SUCCESS","message":"添加成功"} -@Volunteer.route('volunteer/create', methods = ['POST']) +@Volunteer.route('/volunteer/create', methods = ['POST']) +@Deco def createVolunteer(): - respdata = {'type': 'error', 'message': '未知错误'} - json_data = json.loads(request.get_data().decode("utf-8")) - if session["permisson"]>1 + if not tkData.get("permission") in [2,4]: # 这权限是不是有点奇怪? + return {'type':'ERROR', 'message':"权限不足"} + + OP.insert("volId,volName,volDate,volTime", + "volunteer", + ()) + # 这里出了一些问题 + # TIME和DATE类型的insert还没写 + # 还有这两个类型可以直接用%吗? + return {"type":"SUCCESS", "message":"创建成功"} +''' + { + "name": "义工活动1", + "date": "2020.10.1", + "time": "13:00", + "stuMax": 20, + "description": "新华书店打扫", + "inside": 0, + "outside": 3, + "large": 0, + "class": [ + {"id": 202001, "stuMax": 10}, + {"id": 202002, "stuMax": 5}, + {"id": 202003, "stuMax": 10} + ] + // hid 是自动从session获取的 + } +''' -@Volunteer.route('volunteer/signerList/', methods = ['POST']) +@Volunteer.route('/volunteer/signerList/', methods = ['POST']) def getSignerList(volId): - pass + if not tkData.get("permission")<3: + return {'type':'ERROR', 'message':"权限不足"} + ret={"type":"SUCCESS", "message":"获取成功","result":[]} + fl,r=OP.select("stuId","stu_vol","volId=%d",(volId),["stuId"],only=False) + if not fl: return r + for i in r: # 为什么要返回学生姓名啊 + ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) + if not ff: return rr + ret["result"].append(rr) + return ret -@Volunteer.route('volunteer/choose/', methods = ['POST']) +@Volunteer.route('/volunteer/choose/', methods = ['POST']) def chooseVolunteer(volId): pass -@Volunteer.route('volunteer/joinerList/', methods = ['POST']) +@Volunteer.route('/volunteer/joinerList/', methods = ['POST']) def getJoinerList(volId): - pass + # 所以这个的意思是返回所有审核过了的报名的人吗? + if not tkData.get("permission")<3: + return {'type':'ERROR', 'message':"权限不足"} + ret={"type":"SUCCESS", "message":"获取成功","result":[]} + fl,r=OP.select("stuId","stu_vol","volId=%d and status=1",(volId),["stuId"],only=False) + if not fl: return r + for i in r: # 为什么要返回学生姓名啊 + ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) + if not ff: return rr + ret["result"].append(rr) + return ret -@Volunteer.route('volunteer/thought/', methods = ['POST']) +@Volunteer.route('/volunteer/thought/', methods = ['POST']) def submitThought(volId): pass -@Volunteer.route('volunteer/randomThought', methods=['POST','GET']) +@Volunteer.route('/volunteer/randomThought', methods=['POST','GET']) def randthought(): respdata = {'type':'SUCCESS', 'stuName':'用户名', 'stuId': 20200101, 'content':'这是感想内容'} return json.dumps(respdata) -- Gitee From ddcf862b7a6e16b384dbc5aa4a58df52d4e71cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E7=A8=8B=E7=82=80?= Date: Thu, 11 Feb 2021 17:28:57 +0800 Subject: [PATCH 02/18] reply --- oppressor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/oppressor.py b/oppressor.py index 867ab07..505b649 100644 --- a/oppressor.py +++ b/oppressor.py @@ -73,6 +73,7 @@ def update(col,src,exp,val): DB.execute(s,val) r=DB.fetchall() # 这个东西封装起来似乎没什么用。。以后可以考虑加上错误处理? + # 可以 def insert(col,src,val): tmp="" @@ -97,7 +98,7 @@ def userLogin(userId, password): if len(r) == 0: return False, {"message": "用户ID或密码错误"} elif len(r) > 1: - return False, {"message": "数据库信息错误"} + return False, {"message": "数据库信息错误:要求一个但查询到多个"} else: return True, r[0] else: -- Gitee From cd0ca3f4e38803fd23dc38cdd54309411f7d6e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E7=A8=8B=E7=82=80?= Date: Fri, 12 Feb 2021 12:45:05 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oppressor.py | 3 ++- volunteer.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/oppressor.py b/oppressor.py index 505b649..430f504 100644 --- a/oppressor.py +++ b/oppressor.py @@ -133,6 +133,7 @@ def getVolunteerInfo(volId): def listToDict_volunteer(a): if isinstance(a, list) and len(a) == 12 and isinstance(a[0], int) and isinstance(a[1], str) and isinstance(a[2], str): # Date形式存储的mysql内容读取出来后怎么判断 + # 这里还是要全部判断,不然一旦出错服务器直接宕机就不太好了 return True, {"volId": a[0], "volName": a[1], "volDate": a[2], "volTime": a[3], "stuMax": a[4], "nowStuCount": a[5], "description": a[6], "status": a[7], "volTimeInside": a[8], "volTimeOutside": a[9], "volTimeLarge": a[10], "holderId": a[11]} else: - return False, {"message": "调用接口错误"} \ No newline at end of file + return False, {"message": "请求接口错误"} \ No newline at end of file diff --git a/volunteer.py b/volunteer.py index c7746c8..5e3e78d 100644 --- a/volunteer.py +++ b/volunteer.py @@ -59,7 +59,7 @@ def signupVolunteer(volId): @Volunteer.route('/volunteer/create', methods = ['POST']) @Deco def createVolunteer(): - if not tkData.get("permission") in [2,4]: # 这权限是不是有点奇怪? + if not tkData.get("permission") in [2,4]: # 这权限是不是有点奇怪? # 我觉得义管会应该可以创建义工活动吧,难不成每次都要进入系统权限? return {'type':'ERROR', 'message':"权限不足"} OP.insert("volId,volName,volDate,volTime", @@ -67,7 +67,7 @@ def createVolunteer(): ()) # 这里出了一些问题 # TIME和DATE类型的insert还没写 - # 还有这两个类型可以直接用%吗? + # 还有这两个类型可以直接用%吗? # 现在数据库改完之后就可以写了哦 return {"type":"SUCCESS", "message":"创建成功"} ''' { -- Gitee From 92beaa448fd8413dd81f06c6d406e2c78f5e2931 Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Fri, 12 Feb 2021 15:49:38 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E8=B0=83=E5=AE=8C=E4=BA=86=E4=B8=89?= =?UTF-8?q?=E4=B8=AAMySQL=E7=9A=84=E5=87=BD=E6=95=B0=EF=BC=8C=E8=A1=A5?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=B8=8B=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + database.py | 8 +- deco.py | 3 + oppressor.py | 225 +++++++++++++++++++++++---------------------------- 4 files changed, 111 insertions(+), 126 deletions(-) diff --git a/.gitignore b/.gitignore index d75edea..b782def 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ venv +test __pycache__ \ No newline at end of file diff --git a/database.py b/database.py index bfa84c0..f236b29 100644 --- a/database.py +++ b/database.py @@ -1,6 +1,10 @@ +# 在Oppressor完成以后请不要直接使用这里面的函数 +# 详细请看oppressor.py中的select/insert/update + from pymysql import connect, cursors import traceback # 更好的错误输出 +# (临时的)设置 conn = connect( host = "127.0.0.1", user = "zvms", @@ -9,7 +13,7 @@ conn = connect( ) cur = conn.cursor() -def close(): +def close(): # 这玩意有被用到吗? global conn,cur try: cur.close() @@ -25,7 +29,7 @@ def execute(sql, param = None): traceback.print_exc() conn.rollback() -def commit(): +def commit(): # 这玩意有被用到吗? global conn try: conn.commit() diff --git a/deco.py b/deco.py index 63756f4..73b775c 100644 --- a/deco.py +++ b/deco.py @@ -49,7 +49,10 @@ def Deco(func): try: r=func(*args,**kwargs) print("result->",r) + # 如果想做错误输出的话加在这里 return json.dumps(r) except: + # 理论上不应该有这个 + # 出现这种情况说明代码锅了或者前端接口错了 return json.dumps({'type':'ERROR','message':'未知错误'}) return wrapper \ No newline at end of file diff --git a/oppressor.py b/oppressor.py index 430f504..13cdd62 100644 --- a/oppressor.py +++ b/oppressor.py @@ -3,137 +3,114 @@ import database as DB thisYear = 2020 # 以后要改成自动获取 +# 并且这个应该是指学年而不是当前年份 def classIdToString(a): - global thisYear - id = int(a) - _year = id // 100 - _class = id % 100 - ret = "" - # 特殊身份的判断 - # 教师 100001 100002 - # 管理员 110001 110002 - # 系统 120003 120004 - if _year//100 == 10: - ret = "教师" - return ret - elif _year//100 == 11: - ret = "管理员" - return ret - elif _year//100 == 12: - ret = "系统" - return ret - - if _class <= 10: - ret = ret + "高" - elif _class <= 17: - ret = ret + "蛟" - if _year == thisYear: - ret = ret + "一" - elif _year == thisYear - 1: - ret = ret + "二" - elif _year == thisYear - 2: - ret = ret + "三" - ret = ret + (["NULL","1","2","3","4","5","6","7","8","9","10","NULL","2","3","4","5","6","7"])[_class] #如果我没记错的话校徽是这样的 - ret = ret + "班" + global thisYear + id = int(a) + _year = id // 100 + _class = id % 100 + ret = "" + # 特殊身份的判断 + # 教师 100001 100002 + # 管理员 110001 110002 + # 系统 120003 120004 + if _year//100 == 10: + ret = "教师" + return ret + elif _year//100 == 11: + ret = "管理员" + return ret + elif _year//100 == 12: + ret = "系统" + return ret + + if _class <= 10: + ret = ret + "高" + elif _class <= 17: + ret = ret + "蛟" + if _year == thisYear: + ret = ret + "一" + elif _year == thisYear - 1: + ret = ret + "二" + elif _year == thisYear - 2: + ret = ret + "三" + ret = ret + (["NULL","1","2","3","4","5","6","7","8","9","10","NULL","2","3","4","5","6","7"])[_class] #如果我没记错的话校徽是这样的 + ret = ret + "班" - return ret - -def select(col,src,exp,val,ret,only=True): # 估计能用了 - # col:选择的列,字符串 src:从哪张表,字符串 exp:条件,字符串 - # val:传入的数据,元组 ret:返回的格式,列表,内容为字符串,为[]则为col - # only:是否只取一个 - # 返回值:一个布尔值、一个字典,格式由ret决定(若only=False则为一个数组) - s="SELECT %s FROM %s WHERE %s;"%(col,src,exp) - print("Selecting:",s,val) - DB.execute(s,val) - r=DB.fetchall() - print(r) - if ret==[]: - ret=list(split(col,",")) - for i in len(ret): ret[i]=ret[i].strip() - if len(r)==0: return False, {"type":"ERROR","message": "数据库信息错误:未查询到相关信息"} - if len(r)==1: - result={} - for j in range(0,len(ret)): - result.update({ret[j]: r[0][j]}) - if only: return True, result - else: return True, [result] - else: - if only: return False, {"type":"ERROR","message": "数据库信息错误:要求一个但查询到多个"} - result=[] - for i in range(0,len(r)): - result.append({}) - for j in range(0,len(ret)): - result[i].update({ret[j]: r[i][j]}) - return True, result + return ret -def update(col,src,exp,val): - s="UPDATE %s SET %s WHERE %s;"%(src,col,exp) - DB.execute(s,val) - r=DB.fetchall() - # 这个东西封装起来似乎没什么用。。以后可以考虑加上错误处理? - # 可以 +# 下面三个是对MySQL操作的封装 +# 对SQL的操作尽量使用这三个而不是直接DB.execute() +# 标出来的是调试输出 +def select(col,src,exp,val,ret,only=True): # 估计能用了 + # col:选择的列,字符串 src:从哪张表,字符串 exp:条件,字符串 + # val:传入的数据,元组 ret:返回的格式,列表,内容为字符串,为[]则为col + # only:是否只取一个 + # 返回值:一个布尔值、一个字典,格式由ret决定(若only=False则为一个数组) + s="SELECT %s FROM %s WHERE %s;"%(col,src,exp) + print("Selecting:",s,val) # 生成的SQL语句和参数 # + DB.execute(s,val) + r=DB.fetchall() + print("Select Result:",r) # SQL返回值 # + if ret==[]: # 这个尽量避免使用吧,可能会有奇奇怪怪的锅(本来还想偷点懒的) + ret=list(split(col,",")) + for i in len(ret): ret[i]=ret[i].strip() + if len(r)==0: + return False, {"type":"ERROR","message": "数据库信息错误:未查询到相关信息"} + if len(r)==1: + result={} # 格式化返回值 + for j in range(0,len(ret)): + result.update({ret[j]: r[0][j]}) + if only: return True, result + else: return True, [result] # 就算只有一个,没有Only还是要返回数组 + else: + if only: # 理论上不应该有这种情况,真出现了估计是Insert的锅 + return False, {"type":"ERROR","message": "数据库信息错误:要求一个但查询到多个"} + result=[] + for i in range(0,len(r)): + result.append({}) # 格式化返回值 + for j in range(0,len(ret)): + result[i].update({ret[j]: r[i][j]}) + return True, result -def insert(col,src,val): - tmp="" - for i in val: - if isinstance(i,int): tmp+="%d," - if isinstance(i,str): tmp+="%s," - # 暂且如此 - tmp=tmp[0:-1] - s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) - DB.execute(s,val) - r=DB.fetchall() +def update(col,src,exp,val): # 估计能用了 + # 参数同上 + s="UPDATE %s SET %s WHERE %s;"%(src,col,exp) + print("Updating:",s,val) # 生成的SQL语句和参数 # + DB.execute(s,val) + r=DB.fetchall() +def insert(col,src,val): # 估计能用了 + # 参数同上 + tmp="" + for i in val: tmp+="%s," + # 谁能告诉我为什么?虽然这样写是对的。。难不成是隐式类型转换的锅? + tmp=tmp[0:-1] + s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) + print("Inserting:",s,val) # 生成的SQL语句和参数 # + DB.execute(s,val) + r=DB.fetchall() + +# 下面两个函数本来是想改掉的,但是他们(到目前为止)没有任何锅, +# 并且和别的函数也没有关系,暂时先放一下。 +# 被使用到的地方:user.py def user2dict(v): - return { "username":v[1], "class":v[2], - "permission":v[3], "classname":classIdToString(v[2]) - } + return { "username":v[1], "class":v[2], + "permission":v[3], "classname":classIdToString(v[2]) + } def userLogin(userId, password): - if isinstance(userId, str) and isinstance(password, str): # 其实传入的都是str类型 - DB.execute("SELECT * FROM user WHERE userId = %s AND password = %s;", (userId, password)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "用户ID或密码错误"} - elif len(r) > 1: - return False, {"message": "数据库信息错误:要求一个但查询到多个"} - else: - return True, r[0] - else: - return False, {"message": "请求接口错误"} - -def getClassVolunteerList(classId): - if isinstance(classId, int): - DB.execute("SELECT volId FROM class_vol WHERE class = %d", (classId)) - r = DB.fetchall() # len(r) == 0 是否判定为数据库信息错误? - lst = [] - for i in r: - lst.append(i[0]) - return True, lst - else: - return False, {"message": "请求接口错误"} - -def volunteerList(): # 总列表 - DB.execute("SELECT * FROM volunteer") - r = DB.fetchall() - return True, r - -def getVolunteerInfo(volId): - if isinstance(volId, int): - DB.execute("SELECT * FROM volunteer WHERE volId = %d", (volId)) - r = DB.fetchall() - if len(r) == 0: - return False, {"message": "数据库信息错误"} - else: - return True, r[0] - else: - return False, {"message": "请求接口错误"} + if isinstance(userId, str) and isinstance(password, str): # 其实传入的都是str类型 + DB.execute("SELECT * FROM user WHERE userId = %s AND password = %s;", (userId, password)) + r = DB.fetchall() + if len(r) == 0: + return False, {"message": "用户ID或密码错误"} + elif len(r) > 1: + return False, {"message": "数据库信息错误:要求一个但查询到多个"} + else: + return True, r[0] + else: + return False, {"message": "请求接口错误"} -def listToDict_volunteer(a): - if isinstance(a, list) and len(a) == 12 and isinstance(a[0], int) and isinstance(a[1], str) and isinstance(a[2], str): # Date形式存储的mysql内容读取出来后怎么判断 - # 这里还是要全部判断,不然一旦出错服务器直接宕机就不太好了 - return True, {"volId": a[0], "volName": a[1], "volDate": a[2], "volTime": a[3], "stuMax": a[4], "nowStuCount": a[5], "description": a[6], "status": a[7], "volTimeInside": a[8], "volTimeOutside": a[9], "volTimeLarge": a[10], "holderId": a[11]} - else: - return False, {"message": "请求接口错误"} \ No newline at end of file +# 其他一些就都暂时没用了,在这个分支上先删了 \ No newline at end of file -- Gitee From 7579cd952bb1e42a216932e98c389d1b6f88f0ba Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Fri, 12 Feb 2021 18:12:20 +0800 Subject: [PATCH 05/18] =?UTF-8?q?=E8=B7=A8=E5=9F=9F=E4=BF=AE=E5=A5=BD?= =?UTF-8?q?=E4=BA=86=E3=80=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/main.py b/main.py index 9082bc0..902d89b 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,4 @@ -from flask import Flask,make_response +from flask import Flask,make_response,request from flask_cors import CORS import database from user import User @@ -10,18 +10,8 @@ from volunteer import Volunteer app = Flask(__name__) app.debug = True # 仅在测试环境打开! app.config["SECRET_KEY"] = "PaSsw0rD@1234!@#$" -CORS(app, supports_credentials=True) -@app.after_request -def af_req(resp): - resp = make_response(resp, 200) - resp.headers['Access-Control-Allow-Origin'] = 'http://localhost:8080' - resp.headers['Access-Control-Allow-Methods'] = 'PUT,POST,GET,DELETE,OPTIONS' - resp.headers['Access-Control-Allow-Headers'] = 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , authorize' - resp.headers['Access-Control-Allow-Credentials'] = 'true' - resp.headers['X-Powered-By'] = 'ZVMS-beta' - resp.headers['Content-Type'] = 'application/json;charset=utf-8' - return resp +CORS(app, supports_credentials=True) # 允许跨域 app.register_blueprint(User) app.register_blueprint(Class) -- Gitee From 0149a1ede43183215cac64a0d98548c91864bb8e Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Sun, 14 Feb 2021 21:42:37 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E8=B0=83=E8=AF=95=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=88=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- deco.py | 4 ++++ volunteer.py | 5 +---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index b782def..976dfeb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ venv test -__pycache__ \ No newline at end of file +__pycache__ +logs \ No newline at end of file diff --git a/deco.py b/deco.py index 73b775c..7e3be56 100644 --- a/deco.py +++ b/deco.py @@ -2,6 +2,7 @@ from flask import request from functools import wraps import tokenlib as TK import json +import sys # 我不知道还有没有更好的方法,如果有的话麻烦把下面这几行改掉 postdata={} @@ -22,6 +23,7 @@ def tkData(): def Deco(func): @wraps(func) def wrapper(*args,**kwargs): + tmp,sys.stdout=sys.stdout,open("logs/debug.log","w+") print("Entering Function->%s:"%func.__name__) global postdata, tkst, tkdata # 重要!! try: # 为了防止空POST出锅 @@ -50,9 +52,11 @@ def Deco(func): r=func(*args,**kwargs) print("result->",r) # 如果想做错误输出的话加在这里 + sys.stdout=tmp return json.dumps(r) except: # 理论上不应该有这个 # 出现这种情况说明代码锅了或者前端接口错了 + sys.stdout=tmp return json.dumps({'type':'ERROR','message':'未知错误'}) return wrapper \ No newline at end of file diff --git a/volunteer.py b/volunteer.py index 5e3e78d..6f2a39f 100644 --- a/volunteer.py +++ b/volunteer.py @@ -62,12 +62,9 @@ def createVolunteer(): if not tkData.get("permission") in [2,4]: # 这权限是不是有点奇怪? # 我觉得义管会应该可以创建义工活动吧,难不成每次都要进入系统权限? return {'type':'ERROR', 'message':"权限不足"} - OP.insert("volId,volName,volDate,volTime", + OP.insert("volId,volName,volDate,volTime,stuMax,nowStuCount,description,status,", "volunteer", ()) - # 这里出了一些问题 - # TIME和DATE类型的insert还没写 - # 还有这两个类型可以直接用%吗? # 现在数据库改完之后就可以写了哦 return {"type":"SUCCESS", "message":"创建成功"} ''' { -- Gitee From d991083d67d36ca8cf3b1dceae7dfcedb326e8c4 Mon Sep 17 00:00:00 2001 From: zhuchengyang0207 Date: Sun, 14 Feb 2021 21:54:06 +0800 Subject: [PATCH 07/18] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/database.py b/database.py index f236b29..df332ea 100644 --- a/database.py +++ b/database.py @@ -28,14 +28,6 @@ def execute(sql, param = None): except: traceback.print_exc() conn.rollback() - -def commit(): # 这玩意有被用到吗? - global conn - try: - conn.commit() - except: - traceback.print_exc() - conn.rollback() def fetchall(): global cur -- Gitee From 5bc2b3644d3f737d251810cd0c07207f3024d195 Mon Sep 17 00:00:00 2001 From: NekoMoYi Date: Mon, 15 Feb 2021 19:46:54 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=85=AC=E7=BD=91?= =?UTF-8?q?=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 902d89b..eb7b211 100644 --- a/main.py +++ b/main.py @@ -23,4 +23,4 @@ def main(): return "" if __name__ == '__main__': - app.run() + app.run(host='0.0.0.0', port=5000) -- Gitee From f7ebbd65f11d8a400e51098e7c6e40dcb9a79cd9 Mon Sep 17 00:00:00 2001 From: NekoMoYi Date: Mon, 15 Feb 2021 20:50:37 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E5=B0=86=E4=B8=8D=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E4=BC=A0=E5=85=A5=E6=95=B0=E6=8D=AE=E7=9A=84=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E6=94=B9=E4=B8=BAGET?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _class.py | 6 +++--- student.py | 2 +- user.py | 2 +- volunteer.py | 15 +++++++++------ 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/_class.py b/_class.py index 8001958..63696e3 100644 --- a/_class.py +++ b/_class.py @@ -6,7 +6,7 @@ from deco import Deco Class = Blueprint('class', __name__) -@Class.route('/class/list', methods = ['POST']) +@Class.route('/class/list', methods = ['GET']) @Deco def getClassList(): # 好了 fl,r=OP.select("class","user","true",(),["id"],only=False) @@ -19,7 +19,7 @@ def getClassList(): # 好了 "class": r } -@Class.route("/class/stulist/", methods = ['POST']) +@Class.route("/class/stulist/", methods = ['GET']) @Deco def getStudentList(classId): # 好了 fl,r=OP.select("stuId,stuName,volTimeInside,volTimeOutside,volTimeLarge","student", @@ -32,7 +32,7 @@ def getStudentList(classId): # 好了 "student": r } -@Class.route("/class/volunteer/", methods = ['POST']) +@Class.route("/class/volunteer/", methods = ['GET']) def getClassVolunteer(classId): respdata = {'type': 'ERROR', 'message': '未知错误!'} st, val = OP.getClassVolunteerList(classId) diff --git a/student.py b/student.py index 7cd7398..179e6d8 100644 --- a/student.py +++ b/student.py @@ -7,7 +7,7 @@ import json Student = Blueprint("student", __name__) -@Student.route('/student/volbook/', methods=['POST']) +@Student.route('/student/volbook/', methods=['GET']) @Deco def getVolbook(stuId): # 可以了 fl,r=OP.select("volId","stu_vol","stuId=%s",(stuId),["volId"],only=False) diff --git a/user.py b/user.py index b0c273e..928aa83 100644 --- a/user.py +++ b/user.py @@ -33,7 +33,7 @@ def logout_NoToken(): return {'type': 'SUCCESS', 'message': '登出成功!'} #最好在这里做点什么吧,比如删除cookie什么的 -@User.route('/user/info', methods=['POST','GET']) +@User.route('/user/info', methods=['GET']) @Deco def info(): return {'type':'SUCCESS', 'message':"获取成功", 'info':tkData()} diff --git a/volunteer.py b/volunteer.py index 6f2a39f..5af0d58 100644 --- a/volunteer.py +++ b/volunteer.py @@ -5,7 +5,7 @@ import oppressor as OP Volunteer = Blueprint('volunteer', __name__) -@Volunteer.route('/volunteer/list', methods = ['POST']) +@Volunteer.route('/volunteer/list', methods = ['GET']) # 这里不需要参数传入,使用GET方式。下同 @Deco def getVolunteerList(): # 可以了 fl,r=OP.select("volId,volName,description,volDate,volTime,status,stuMax","volunteer","true",(), @@ -17,7 +17,7 @@ def getVolunteerList(): # 可以了 "volunteer": r } -@Volunteer.route('/volunteer/fetch/', methods = ['POST']) +@Volunteer.route('/volunteer/fetch/', methods = ['GET']) @Deco def getVolunteer(volId): # 可以了 fl,r=OP.select("volName,volDate,volTime,stuMax,nowStuCount,description,status,volTimeInside,volTimeOutside,volTimeLarge", @@ -59,7 +59,10 @@ def signupVolunteer(volId): @Volunteer.route('/volunteer/create', methods = ['POST']) @Deco def createVolunteer(): - if not tkData.get("permission") in [2,4]: # 这权限是不是有点奇怪? # 我觉得义管会应该可以创建义工活动吧,难不成每次都要进入系统权限? + if not tkData.get("permission") in [2,4]: + # 这权限是不是有点奇怪? + # 我觉得义管会应该可以创建义工活动吧,难不成每次都要进入系统权限? + # 不能。只有教师和实践部、系统可以。 return {'type':'ERROR', 'message':"权限不足"} OP.insert("volId,volName,volDate,volTime,stuMax,nowStuCount,description,status,", @@ -85,7 +88,7 @@ def createVolunteer(): } ''' -@Volunteer.route('/volunteer/signerList/', methods = ['POST']) +@Volunteer.route('/volunteer/signerList/', methods = ['GET']) def getSignerList(volId): if not tkData.get("permission")<3: return {'type':'ERROR', 'message':"权限不足"} @@ -102,7 +105,7 @@ def getSignerList(volId): def chooseVolunteer(volId): pass -@Volunteer.route('/volunteer/joinerList/', methods = ['POST']) +@Volunteer.route('/volunteer/joinerList/', methods = ['GET']) def getJoinerList(volId): # 所以这个的意思是返回所有审核过了的报名的人吗? if not tkData.get("permission")<3: @@ -120,7 +123,7 @@ def getJoinerList(volId): def submitThought(volId): pass -@Volunteer.route('/volunteer/randomThought', methods=['POST','GET']) +@Volunteer.route('/volunteer/randomThought', methods=['GET']) def randthought(): respdata = {'type':'SUCCESS', 'stuName':'用户名', 'stuId': 20200101, 'content':'这是感想内容'} return json.dumps(respdata) -- Gitee From 3099494333fefb0b301cfa0bb849b2d14356dec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E7=A8=8B=E7=82=80?= Date: Mon, 15 Feb 2021 21:15:31 +0800 Subject: [PATCH 10/18] =?UTF-8?q?post=E6=94=B9GET?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user.py b/user.py index 928aa83..b045851 100644 --- a/user.py +++ b/user.py @@ -27,7 +27,7 @@ def login_NoToken(): ret.update(val) return ret -@User.route('/user/logout', methods=['POST']) +@User.route('/user/logout', methods=['GET']) @Deco def logout_NoToken(): return {'type': 'SUCCESS', 'message': '登出成功!'} -- Gitee From 168ce67c1d8c853c998b80244786bc94991b8fcd Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Thu, 4 Mar 2021 10:08:42 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E5=86=99=E4=BA=86class/volunteer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _class.py | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/_class.py b/_class.py index 63696e3..3d6d838 100644 --- a/_class.py +++ b/_class.py @@ -33,22 +33,14 @@ def getStudentList(classId): # 好了 } @Class.route("/class/volunteer/", methods = ['GET']) -def getClassVolunteer(classId): - respdata = {'type': 'ERROR', 'message': '未知错误!'} - st, val = OP.getClassVolunteerList(classId) - if st: - respdata['volunteer'] = [] - for i in r: - st1, val1 = OP.getVolunteerInfo(i) - if st1: - respdata['volunteer'].append( - OP.listToDict_volunteer(val1)) - else: - respdata.update(val1) - break - else: - respdata['type'] = 'SUCCESS' - respdata['message'] = '获取成功' - else: - respdata.update(val) - return json.dumps(respdata) +@Deco +def getClassVolunteer(classId): # 还没调 + fl,r=OP.select("volId","class_vol","class=%s",(classId),["id"],only=False) + if not fl: return r + ret={"type":"SUCCESS","message":"获取成功","volunteer":[]} + for i in r: + ff,rr=OP.select("volId,volName,volDate,volTime,description,status,stuMax", + "volunteer","volId=%s",(i),["id","name","date","time","description","status","stuMax"]) + if not ff: return rr + ret["volunteer"].append(rr) + return ret -- Gitee From 2d48b2b731d88beba6ad7785a1e92208ebcab8b8 Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Mon, 26 Apr 2021 20:10:35 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E5=86=99=E4=BA=86=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=B3=A8=E9=87=8A=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deco.py | 22 ++++++++-------- oppressor.py | 11 ++++++++ user.py | 1 + volunteer.py | 71 ++++++++++++++++++++++++---------------------------- 4 files changed, 56 insertions(+), 49 deletions(-) diff --git a/deco.py b/deco.py index 7e3be56..f6e38dc 100644 --- a/deco.py +++ b/deco.py @@ -37,17 +37,17 @@ def Deco(func): # 为了判断是否需要Token验证 # 我知道这很不好,但是带参数的修饰器和Flask冲突了(估计是) # 所以请在不用Token的函数名后面加上"_NoToken" - # try: # 获取Token - # tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 - # print("Loading Token:",tkst, tkdata) - # if tkst==TK.EXPIRED: - # return json.dumps({'type':'ERROR', 'message':"token过期"}) - # elif tkst==TK.BAD: - # return json.dumps({'type':'ERROR', 'message':"token失效"}) - # except: - # tksk=TK.ERROR - # tkdata={} - # return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) + try: # 获取Token + tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 + print("Loading Token:",tkst, tkdata) + if tkst==TK.EXPIRED: + return json.dumps({'type':'ERROR', 'message':"token过期"}) + elif tkst==TK.BAD: + return json.dumps({'type':'ERROR', 'message':"token失效"}) + except: + tksk=TK.ERROR + tkdata={} + return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) try: r=func(*args,**kwargs) print("result->",r) diff --git a/oppressor.py b/oppressor.py index 13cdd62..4c1dd12 100644 --- a/oppressor.py +++ b/oppressor.py @@ -91,6 +91,17 @@ def insert(col,src,val): # 估计能用了 print("Inserting:",s,val) # 生成的SQL语句和参数 # DB.execute(s,val) r=DB.fetchall() + +# 获取一个表中有多少行记录 +# (到目前)只被用于获取volId +# 是不是可以用来随机获取一条数据? +def getLength(src): # 还未调试! + s="SELECT MAX(ROWNUM) FROM %s"%src + print("Get Length:",s,src) # 生成的SQL语句和参数 # + DB.execute(s) + r=DB.fetchall() + print("Length:",r) # SQL返回值 # + return r[0] # 下面两个函数本来是想改掉的,但是他们(到目前为止)没有任何锅, # 并且和别的函数也没有关系,暂时先放一下。 diff --git a/user.py b/user.py index b045851..2d98166 100644 --- a/user.py +++ b/user.py @@ -18,6 +18,7 @@ def login_NoToken(): ret.update({"type":"SUCCESS", "message":"登入成功!"}) ret.update(OP.user2dict(val)) ret.update({"token":TK.generateToken({ + "userid": userid, "username": ret['username'], "class": ret['class'], "permission": ret['permission'] diff --git a/volunteer.py b/volunteer.py index 5af0d58..132baf1 100644 --- a/volunteer.py +++ b/volunteer.py @@ -20,8 +20,10 @@ def getVolunteerList(): # 可以了 @Volunteer.route('/volunteer/fetch/', methods = ['GET']) @Deco def getVolunteer(volId): # 可以了 - fl,r=OP.select("volName,volDate,volTime,stuMax,nowStuCount,description,status,volTimeInside,volTimeOutside,volTimeLarge", - "volunteer","volId=%s",(volId),["name","date","time","stuMax","stuNow","description","status","inside","outside","large"]) + fl,r=OP.select("volName,volDate,volTime,stuMax,nowStuCount,description,status,"+ + "volTimeInside,volTimeOutside,volTimeLarge", + "volunteer","volId=%s",(volId), + ["name","date","time","stuMax","stuNow","description","status","inside","outside","large"]) if not fl: return r r.update({"type":"SUCCESS","message":"获取成功"}) return r @@ -34,21 +36,24 @@ def signupVolunteer(volId): for i in json_data['stulst']: if i < user_class * 100 or i >= user_class * 100 + 100: return {"type": "ERROR", "message": "学生列表错误"} + # 判断人数是否超过这个义工的人数上限 st, r = OP.select("stuMax, nowStuCount","volunteer","volId=%d",volId,["stuMax","nowStuCount"]) - if not st: return r + if not st: return r # 数据库错误 if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: return {"type":"ERROR", "message":"人数超限"} + # 判断人数是否超过班级人数上限 st, r = OP.select("stuMax, nowStuCount","class_vol","volId=%d AND classId=%d",(volId,classId),["stuMax"]) - if not st: return r + if not st: return r # 数据库错误 if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: return {"type":"ERROR", "message":"人数超限"} + # 修改数据库 OP.update("nowStuCount=nowStuCount+%d","class_vol","volId=%d AND classId=%d", - (len(json_data['stulst']),volId,classId)) + (len(json_data['stulst']),volId,classId)) # 修改每个班的记录 OP.update("nowStuCount=nowStuCount+%d","volunteer","volId=%d", - (len(json_data['stulst']),volId)) + (len(json_data['stulst']),volId)) # 修改总的记录 for i in json_data['stulst']: # 遍历每一个学生,加入一条未审核的记录 OP.insert("volId,stuId,status,volTimeInside,volTimeOutside,volTimeLarge,thought", @@ -59,45 +64,34 @@ def signupVolunteer(volId): @Volunteer.route('/volunteer/create', methods = ['POST']) @Deco def createVolunteer(): - if not tkData.get("permission") in [2,4]: - # 这权限是不是有点奇怪? - # 我觉得义管会应该可以创建义工活动吧,难不成每次都要进入系统权限? - # 不能。只有教师和实践部、系统可以。 + # 判断权限 + if not tkData.get("permission") in [2,4]: return {'type':'ERROR', 'message':"权限不足"} - - OP.insert("volId,volName,volDate,volTime,stuMax,nowStuCount,description,status,", + # 创建一条总的记录 + volId=OP.getLength("volunteer") + OP.insert("volId,volName,volDate,volTime,stuMax,nowStuCount,description,status," + +"volTimeInside,volTimeOutside,volTimeLarge,holderId", "volunteer", - ()) + (volId,json_data["name"],json_data["date"],json_data["time"],json_data["stuMax"],0 + json_data["description"],0,json_data["inside"],json_data["outside"],json_data["large"],tkData["userid"])) + # 这里的status默认是0,如果规范修改了记得改一下 + # 在每个班的表里添加一条记录 + for i in json_data["class"]: + OP.insert("volId,class,stuMax,nowStuCount","class_vol",volId,i["id"],i["stuMax"],0) return {"type":"SUCCESS", "message":"创建成功"} -''' - { - "name": "义工活动1", - "date": "2020.10.1", - "time": "13:00", - "stuMax": 20, - "description": "新华书店打扫", - "inside": 0, - "outside": 3, - "large": 0, - "class": [ - {"id": 202001, "stuMax": 10}, - {"id": 202002, "stuMax": 5}, - {"id": 202003, "stuMax": 10} - ] - // hid 是自动从session获取的 - } -''' @Volunteer.route('/volunteer/signerList/', methods = ['GET']) +@Deco def getSignerList(volId): + # 判断权限 if not tkData.get("permission")<3: return {'type':'ERROR', 'message':"权限不足"} ret={"type":"SUCCESS", "message":"获取成功","result":[]} fl,r=OP.select("stuId","stu_vol","volId=%d",(volId),["stuId"],only=False) - if not fl: return r - for i in r: # 为什么要返回学生姓名啊 + if not fl: return r # 数据库错误:没有这个义工 + for i in r: # 返回学生姓名 ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) - if not ff: return rr + if not ff: return rr # 数据库错误:没有这个人 ret["result"].append(rr) return ret @@ -106,16 +100,17 @@ def chooseVolunteer(volId): pass @Volunteer.route('/volunteer/joinerList/', methods = ['GET']) +@Deco def getJoinerList(volId): # 所以这个的意思是返回所有审核过了的报名的人吗? if not tkData.get("permission")<3: return {'type':'ERROR', 'message':"权限不足"} ret={"type":"SUCCESS", "message":"获取成功","result":[]} fl,r=OP.select("stuId","stu_vol","volId=%d and status=1",(volId),["stuId"],only=False) - if not fl: return r - for i in r: # 为什么要返回学生姓名啊 + if not fl: return r # 数据库错误:没有这个义工 + for i in r: # 返回学生姓名 ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) - if not ff: return rr + if not ff: return rr # 数据库错误:没有这个人 ret["result"].append(rr) return ret @@ -124,6 +119,6 @@ def submitThought(volId): pass @Volunteer.route('/volunteer/randomThought', methods=['GET']) -def randthought(): +def randthought(): # 随机【钦定】一条感想(话说SQL怎么随机取一条数据啊) respdata = {'type':'SUCCESS', 'stuName':'用户名', 'stuId': 20200101, 'content':'这是感想内容'} return json.dumps(respdata) -- Gitee From 1b1d655effe3ac72d8e8e9d450fe8a7d946fb277 Mon Sep 17 00:00:00 2001 From: Zecyel Date: Sat, 1 May 2021 21:12:42 +0800 Subject: [PATCH 13/18] upd --- database.py | 2 +- deco.py | 38 +++++------ oppressor.py | 19 ++++-- user.py | 1 + volunteer.py | 180 +++++++++++++++++++++++++-------------------------- 5 files changed, 124 insertions(+), 116 deletions(-) diff --git a/database.py b/database.py index df332ea..269da3f 100644 --- a/database.py +++ b/database.py @@ -4,7 +4,7 @@ from pymysql import connect, cursors import traceback # 更好的错误输出 -# (临时的)设置 +# (临时的)设置,记得改密码! conn = connect( host = "127.0.0.1", user = "zvms", diff --git a/deco.py b/deco.py index 7e3be56..2d566e6 100644 --- a/deco.py +++ b/deco.py @@ -5,6 +5,7 @@ import json import sys # 我不知道还有没有更好的方法,如果有的话麻烦把下面这几行改掉 +# 不要吐槽这堆奇奇怪怪的变量名了。。全部改掉太麻烦了 postdata={} def json_data(): return postdata @@ -23,40 +24,41 @@ def tkData(): def Deco(func): @wraps(func) def wrapper(*args,**kwargs): - tmp,sys.stdout=sys.stdout,open("logs/debug.log","w+") + tmp,sys.stdout=sys.stdout,open("logs/debug.log","w+") # 重定向到文件输出 # print("Entering Function->%s:"%func.__name__) global postdata, tkst, tkdata # 重要!! try: # 为了防止空POST出锅 postdata=json.loads(request.get_data().decode("utf-8")) - print("Postdata:",postdata) + print("Postdata:",postdata) # 加载到的POST数据 except: postdata="" print("No Postdata loaded.") - # Token还是不行。。前端到底是用什么实现的? - # if not "NoToken" in func.__name__: + # Token还是不行。。前端到底是用什么实现的? # 现在估计是能用了 + if not "NoToken" in func.__name__: # 为了判断是否需要Token验证 # 我知道这很不好,但是带参数的修饰器和Flask冲突了(估计是) # 所以请在不用Token的函数名后面加上"_NoToken" - # try: # 获取Token - # tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 - # print("Loading Token:",tkst, tkdata) - # if tkst==TK.EXPIRED: - # return json.dumps({'type':'ERROR', 'message':"token过期"}) - # elif tkst==TK.BAD: - # return json.dumps({'type':'ERROR', 'message':"token失效"}) - # except: - # tksk=TK.ERROR - # tkdata={} - # return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) + try: # 获取Token + tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 + print("Loading Token:",tkst, tkdata) + if tkst==TK.EXPIRED: + return json.dumps({'type':'ERROR', 'message':"token过期"}) + elif tkst==TK.BAD: + return json.dumps({'type':'ERROR', 'message':"token失效"}) + except: + tksk=TK.ERROR + tkdata={} + return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) + try: r=func(*args,**kwargs) - print("result->",r) + print("result->",r) # 函数返回的JSON # 如果想做错误输出的话加在这里 - sys.stdout=tmp + sys.stdout=tmp # 重新回到控制台输出 # return json.dumps(r) except: # 理论上不应该有这个 # 出现这种情况说明代码锅了或者前端接口错了 - sys.stdout=tmp + sys.stdout=tmp # 重新回到控制台输出 # return json.dumps({'type':'ERROR','message':'未知错误'}) return wrapper \ No newline at end of file diff --git a/oppressor.py b/oppressor.py index 13cdd62..31a97cd 100644 --- a/oppressor.py +++ b/oppressor.py @@ -57,7 +57,7 @@ def select(col,src,exp,val,ret,only=True): # 估计能用了 ret=list(split(col,",")) for i in len(ret): ret[i]=ret[i].strip() if len(r)==0: - return False, {"type":"ERROR","message": "数据库信息错误:未查询到相关信息"} + return False, {"type":"ERROR","message":"数据库信息错误:未查询到相关信息"} if len(r)==1: result={} # 格式化返回值 for j in range(0,len(ret)): @@ -66,7 +66,7 @@ def select(col,src,exp,val,ret,only=True): # 估计能用了 else: return True, [result] # 就算只有一个,没有Only还是要返回数组 else: if only: # 理论上不应该有这种情况,真出现了估计是Insert的锅 - return False, {"type":"ERROR","message": "数据库信息错误:要求一个但查询到多个"} + return False, {"type":"ERROR","message":"数据库信息错误:要求一个但查询到多个"} result=[] for i in range(0,len(r)): result.append({}) # 格式化返回值 @@ -91,6 +91,17 @@ def insert(col,src,val): # 估计能用了 print("Inserting:",s,val) # 生成的SQL语句和参数 # DB.execute(s,val) r=DB.fetchall() + +# 获取一个表中有多少行记录 +# (到目前)只被用于获取volId +# 是不是可以用来随机获取一条数据? +def getLength(src): # 还未调试! + s="SELECT MAX(ROWNUM) FROM %s"%src + print("Get Length:",s,src) # 生成的SQL语句和参数 # + DB.execute(s) + r=DB.fetchall() + print("Length:",r) # SQL返回值 # + return r[0] # 下面两个函数本来是想改掉的,但是他们(到目前为止)没有任何锅, # 并且和别的函数也没有关系,暂时先放一下。 @@ -105,9 +116,9 @@ def userLogin(userId, password): DB.execute("SELECT * FROM user WHERE userId = %s AND password = %s;", (userId, password)) r = DB.fetchall() if len(r) == 0: - return False, {"message": "用户ID或密码错误"} + return False, {"message":"用户ID或密码错误"} elif len(r) > 1: - return False, {"message": "数据库信息错误:要求一个但查询到多个"} + return False, {"message":"数据库信息错误:要求一个但查询到多个"} else: return True, r[0] else: diff --git a/user.py b/user.py index b045851..2d98166 100644 --- a/user.py +++ b/user.py @@ -18,6 +18,7 @@ def login_NoToken(): ret.update({"type":"SUCCESS", "message":"登入成功!"}) ret.update(OP.user2dict(val)) ret.update({"token":TK.generateToken({ + "userid": userid, "username": ret['username'], "class": ret['class'], "permission": ret['permission'] diff --git a/volunteer.py b/volunteer.py index 5af0d58..fa1cc5c 100644 --- a/volunteer.py +++ b/volunteer.py @@ -8,122 +8,116 @@ Volunteer = Blueprint('volunteer', __name__) @Volunteer.route('/volunteer/list', methods = ['GET']) # 这里不需要参数传入,使用GET方式。下同 @Deco def getVolunteerList(): # 可以了 - fl,r=OP.select("volId,volName,description,volDate,volTime,status,stuMax","volunteer","true",(), - ["id","name","description","date","time","status","stuMax"],only=False) - if not fl: return r - return { - "type": "SUCCESS", - "message": "获取成功", - "volunteer": r - } + fl,r=OP.select("volId,volName,description,volDate,volTime,status,stuMax","volunteer","true",(), + ["id", "name", "description","date","time","status","stuMax"],only=False) + if not fl: return r # 数据库错误 + return { + "type": "SUCCESS", + "message": "获取成功", + "volunteer": r + } @Volunteer.route('/volunteer/fetch/', methods = ['GET']) @Deco def getVolunteer(volId): # 可以了 - fl,r=OP.select("volName,volDate,volTime,stuMax,nowStuCount,description,status,volTimeInside,volTimeOutside,volTimeLarge", - "volunteer","volId=%s",(volId),["name","date","time","stuMax","stuNow","description","status","inside","outside","large"]) - if not fl: return r - r.update({"type":"SUCCESS","message":"获取成功"}) - return r + fl,r=OP.select("volName,volDate,volTime,stuMax,nowStuCount,description,status,volTimeInside,volTimeOutside,volTimeLarge", + "volunteer","volId=%s",(volId), + ["name", "date", "time", "stuMax","stuNow","description","status","inside", "outside", "large"]) + if not fl: return r # 数据库错误 + r.update({"type":"SUCCESS","message":"获取成功"}) + return r @Volunteer.route('/volunteer/signup/', methods = ['POST']) @Deco def signupVolunteer(volId): - user_class = tkData.get("class") - # 判断是否都是本班的人 - for i in json_data['stulst']: - if i < user_class * 100 or i >= user_class * 100 + 100: - return {"type": "ERROR", "message": "学生列表错误"} - # 判断人数是否超过这个义工的人数上限 - st, r = OP.select("stuMax, nowStuCount","volunteer","volId=%d",volId,["stuMax","nowStuCount"]) - if not st: return r - if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: - return {"type":"ERROR", "message":"人数超限"} - # 判断人数是否超过班级人数上限 - st, r = OP.select("stuMax, nowStuCount","class_vol","volId=%d AND classId=%d",(volId,classId),["stuMax"]) - if not st: return r - if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: - return {"type":"ERROR", "message":"人数超限"} - # 修改数据库 - OP.update("nowStuCount=nowStuCount+%d","class_vol","volId=%d AND classId=%d", - (len(json_data['stulst']),volId,classId)) - OP.update("nowStuCount=nowStuCount+%d","volunteer","volId=%d", - (len(json_data['stulst']),volId)) - for i in json_data['stulst']: - # 遍历每一个学生,加入一条未审核的记录 - OP.insert("volId,stuId,status,volTimeInside,volTimeOutside,volTimeLarge,thought", - "stu_vol",(volId,i,0,0,0,"")) - # 审核过了以后再发义工时间 - return {"type":"SUCCESS","message":"添加成功"} + user_class = tkData.get("class") + # 判断是否都是本班的人 + for i in json_data['stulst']: + if i < user_class * 100 or i >= user_class * 100 + 100: + return {"type": "ERROR", "message": "学生列表错误"} + + # 判断人数是否超过这个义工的人数上限 + st, r = OP.select("stuMax, nowStuCount","volunteer","volId=%d",volId,["stuMax","nowStuCount"]) + if not st: return r # 数据库错误 + if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: + return {"type":"ERROR", "message":"人数超限"} + + # 判断人数是否超过班级人数上限 + st, r = OP.select("stuMax, nowStuCount","class_vol","volId=%d AND classId=%d",(volId,classId),["stuMax"]) + if not st: return r # 数据库错误 + if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: + return {"type":"ERROR", "message":"人数超限"} + + # 修改数据库 + OP.update("nowStuCount=nowStuCount+%d","class_vol","volId=%d AND classId=%d", + (len(json_data['stulst']),volId,classId)) # 修改每个班的记录 + OP.update("nowStuCount=nowStuCount+%d","volunteer","volId=%d", + (len(json_data['stulst']),volId)) # 修改总的记录 + for i in json_data['stulst']: + # 遍历每一个学生,加入一条未审核的记录 + OP.insert("volId,stuId,status,volTimeInside,volTimeOutside,volTimeLarge,thought", + "stu_vol",(volId,i,0,0,0,"")) + # 审核过了以后再发义工时间 + return {"type":"SUCCESS","message":"添加成功"} @Volunteer.route('/volunteer/create', methods = ['POST']) @Deco def createVolunteer(): - if not tkData.get("permission") in [2,4]: - # 这权限是不是有点奇怪? - # 我觉得义管会应该可以创建义工活动吧,难不成每次都要进入系统权限? - # 不能。只有教师和实践部、系统可以。 - return {'type':'ERROR', 'message':"权限不足"} - - OP.insert("volId,volName,volDate,volTime,stuMax,nowStuCount,description,status,", - "volunteer", - ()) - return {"type":"SUCCESS", "message":"创建成功"} -''' - { - "name": "义工活动1", - "date": "2020.10.1", - "time": "13:00", - "stuMax": 20, - "description": "新华书店打扫", - "inside": 0, - "outside": 3, - "large": 0, - "class": [ - {"id": 202001, "stuMax": 10}, - {"id": 202002, "stuMax": 5}, - {"id": 202003, "stuMax": 10} - ] - // hid 是自动从session获取的 - } -''' + # 判断权限 + if not tkData.get("permission") in [2,4]: + return {'type':'ERROR', 'message':"权限不足"} + # 创建一条总的记录 + volId=OP.getLength("volunteer") + OP.insert("volId,volName,volDate,volTime,stuMax,nowStuCount,description,status," + +"volTimeInside,volTimeOutside,volTimeLarge,holderId", + "volunteer", + (volId,json_data["name"],json_data["date"],json_data["time"],json_data["stuMax"],0 + json_data["description"],0,json_data["inside"],json_data["outside"],json_data["large"],tkData["userid"])) + # 这里的status默认是0,如果规范修改了记得改一下 + # 在每个班的表里添加一条记录 + for i in json_data["class"]: + OP.insert("volId,class,stuMax,nowStuCount","class_vol",volId,i["id"],i["stuMax"],0) + return {"type":"SUCCESS", "message":"创建成功"} @Volunteer.route('/volunteer/signerList/', methods = ['GET']) +@Deco def getSignerList(volId): - if not tkData.get("permission")<3: - return {'type':'ERROR', 'message':"权限不足"} - ret={"type":"SUCCESS", "message":"获取成功","result":[]} - fl,r=OP.select("stuId","stu_vol","volId=%d",(volId),["stuId"],only=False) - if not fl: return r - for i in r: # 为什么要返回学生姓名啊 - ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) - if not ff: return rr - ret["result"].append(rr) - return ret + # 判断权限 + if not tkData.get("permission")<3: + return {'type':'ERROR', 'message':"权限不足"} + ret={"type":"SUCCESS", "message":"获取成功","result":[]} + fl,r=OP.select("stuId","stu_vol","volId=%d",(volId),["stuId"],only=False) + if not fl: return r # 数据库错误:没有这个义工 + for i in r: # 返回学生姓名 + ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) + if not ff: return rr # 数据库错误:没有这个人 + ret["result"].append(rr) + return ret @Volunteer.route('/volunteer/choose/', methods = ['POST']) def chooseVolunteer(volId): - pass + pass @Volunteer.route('/volunteer/joinerList/', methods = ['GET']) +@Deco def getJoinerList(volId): - # 所以这个的意思是返回所有审核过了的报名的人吗? - if not tkData.get("permission")<3: - return {'type':'ERROR', 'message':"权限不足"} - ret={"type":"SUCCESS", "message":"获取成功","result":[]} - fl,r=OP.select("stuId","stu_vol","volId=%d and status=1",(volId),["stuId"],only=False) - if not fl: return r - for i in r: # 为什么要返回学生姓名啊 - ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) - if not ff: return rr - ret["result"].append(rr) - return ret + # 所以这个的意思是返回所有审核过了的报名的人吗? + if not tkData.get("permission")<3: + return {'type':'ERROR', 'message':"权限不足"} + ret={"type":"SUCCESS", "message":"获取成功","result":[]} + fl,r=OP.select("stuId","stu_vol","volId=%d and status=1",(volId),["stuId"],only=False) + if not fl: return r # 数据库错误:没有这个义工 + for i in r: # 返回学生姓名 + ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) + if not ff: return rr # 数据库错误:没有这个人 + ret["result"].append(rr) + return ret @Volunteer.route('/volunteer/thought/', methods = ['POST']) def submitThought(volId): - pass + pass @Volunteer.route('/volunteer/randomThought', methods=['GET']) -def randthought(): - respdata = {'type':'SUCCESS', 'stuName':'用户名', 'stuId': 20200101, 'content':'这是感想内容'} - return json.dumps(respdata) +def randthought(): # 随机【钦定】一条感想(话说SQL怎么随机取一条数据啊) + respdata = {'type':'SUCCESS', 'stuName':'用户名', 'stuId': 20200101, 'content':'这是感想内容'} + return json.dumps(respdata) -- Gitee From 97071b637da400a388735f990704adb167812110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E7=A8=8B=E7=82=80?= Date: Thu, 15 Apr 2021 14:19:04 +0800 Subject: [PATCH 14/18] =?UTF-8?q?oppressor.py=20=E5=B0=8F=E6=94=B9?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oppressor.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/oppressor.py b/oppressor.py index 31a97cd..93d040f 100644 --- a/oppressor.py +++ b/oppressor.py @@ -11,7 +11,7 @@ def classIdToString(a): _year = id // 100 _class = id % 100 ret = "" - # 特殊身份的判断 + # 特殊身份的判断 # 这些东西要放到文档里 # 教师 100001 100002 # 管理员 110001 110002 # 系统 120003 120004 @@ -77,18 +77,16 @@ def select(col,src,exp,val,ret,only=True): # 估计能用了 def update(col,src,exp,val): # 估计能用了 # 参数同上 s="UPDATE %s SET %s WHERE %s;"%(src,col,exp) - print("Updating:",s,val) # 生成的SQL语句和参数 # + print("Updating:",s,val) # 生成的SQL语句和参数 DB.execute(s,val) r=DB.fetchall() def insert(col,src,val): # 估计能用了 # 参数同上 - tmp="" - for i in val: tmp+="%s," + tmp=("%s,"*len(val))[:-1] # 谁能告诉我为什么?虽然这样写是对的。。难不成是隐式类型转换的锅? - tmp=tmp[0:-1] - s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) - print("Inserting:",s,val) # 生成的SQL语句和参数 # + s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) # 为什么不是tmp,col + print("Inserting:",s,val) # 生成的SQL语句和参数 DB.execute(s,val) r=DB.fetchall() @@ -124,4 +122,4 @@ def userLogin(userId, password): else: return False, {"message": "请求接口错误"} -# 其他一些就都暂时没用了,在这个分支上先删了 \ No newline at end of file +# 其他一些就都暂时没用了,在这个分支上先删了 -- Gitee From 5abcbcc392bf0d9913280b233aabed11c09d39d2 Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Sun, 9 May 2021 14:26:05 +0800 Subject: [PATCH 15/18] =?UTF-8?q?=E6=8A=8A=E8=A6=81=E5=B9=B2=E7=9A=84?= =?UTF-8?q?=E6=B4=BB=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 ++ notice.py | 21 +++++++++++++++++++++ oppressor.py | 4 ++-- user.py | 11 ++++++++--- volunteer.py | 10 ++++++++++ 5 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 notice.py diff --git a/main.py b/main.py index eb7b211..d823ad2 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,7 @@ from user import User from _class import Class from student import Student from volunteer import Volunteer +from notice import Notice # Flask init app = Flask(__name__) @@ -17,6 +18,7 @@ app.register_blueprint(User) app.register_blueprint(Class) app.register_blueprint(Student) app.register_blueprint(Volunteer) +app.register_blueprint(Notice) @app.route('/',methods=['POST']) def main(): diff --git a/notice.py b/notice.py new file mode 100644 index 0000000..4adb116 --- /dev/null +++ b/notice.py @@ -0,0 +1,21 @@ +from flask import Blueprint, request +import json +from deco import * +import oppressor as OP + +Notice = Blueprint('notice', __name__) + +@Notice.route('/notice/new', methods = ['POST']) +@Deco +def newNotice(): + pass + +@Notice.route('/notice/query', methods = ['GET']) +@Deco +def queryNotice(): + pass + +@Notice.route('/notice/modify/', methods = ['POST']) +@Deco +def modifyNotice(ntcId): + pass diff --git a/oppressor.py b/oppressor.py index 93d040f..41996dd 100644 --- a/oppressor.py +++ b/oppressor.py @@ -77,7 +77,7 @@ def select(col,src,exp,val,ret,only=True): # 估计能用了 def update(col,src,exp,val): # 估计能用了 # 参数同上 s="UPDATE %s SET %s WHERE %s;"%(src,col,exp) - print("Updating:",s,val) # 生成的SQL语句和参数 + print("Updating:",s,val) # 生成的SQL语句和参数 # DB.execute(s,val) r=DB.fetchall() @@ -86,7 +86,7 @@ def insert(col,src,val): # 估计能用了 tmp=("%s,"*len(val))[:-1] # 谁能告诉我为什么?虽然这样写是对的。。难不成是隐式类型转换的锅? s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) # 为什么不是tmp,col - print("Inserting:",s,val) # 生成的SQL语句和参数 + print("Inserting:",s,val) # 生成的SQL语句和参数 # DB.execute(s,val) r=DB.fetchall() diff --git a/user.py b/user.py index 2d98166..8944d04 100644 --- a/user.py +++ b/user.py @@ -7,7 +7,7 @@ import oppressor as OP User = Blueprint('user', __name__) -@User.route('/user/login', methods=['POST']) +@User.route('/user/login', methods = ['POST']) @Deco def login_NoToken(): userid = json_data().get("userid") @@ -28,13 +28,13 @@ def login_NoToken(): ret.update(val) return ret -@User.route('/user/logout', methods=['GET']) +@User.route('/user/logout', methods = ['GET']) @Deco def logout_NoToken(): return {'type': 'SUCCESS', 'message': '登出成功!'} #最好在这里做点什么吧,比如删除cookie什么的 -@User.route('/user/info', methods=['GET']) +@User.route('/user/info', methods = ['GET']) @Deco def info(): return {'type':'SUCCESS', 'message':"获取成功", 'info':tkData()} @@ -43,3 +43,8 @@ def info(): @Deco def getInfo(userId): pass + +@User.route('/user/modPwd', methods = ['POST']) +@Deco +def modifyPassword(): + pass \ No newline at end of file diff --git a/volunteer.py b/volunteer.py index fa1cc5c..0018447 100644 --- a/volunteer.py +++ b/volunteer.py @@ -113,6 +113,16 @@ def getJoinerList(volId): ret["result"].append(rr) return ret +@Volunteer.route('/volunteer/audit/', methods = ['POST']) +@Deco +def auditThought(volId): + pass + +@Volunteer.route('/volunteer/modify/', methods = ['POST']) +@Deco +def modifyVolunteer(volId): + pass + @Volunteer.route('/volunteer/thought/', methods = ['POST']) def submitThought(volId): pass -- Gitee From e796b80e7fa50e8638325d850bd23fa91fdf6269 Mon Sep 17 00:00:00 2001 From: FPC5719 Date: Tue, 11 May 2021 11:41:32 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86deco.py=E9=87=8C=E9=9D=A2=E7=9A=84=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=94=85=20=E5=86=99=E5=AE=8C=E4=BA=86user.py=20=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E4=B8=AAres.py=E7=94=A8=E4=BA=8E=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deco.py | 16 ++-------------- res.py | 4 ++++ user.py | 10 ++++++++-- 3 files changed, 14 insertions(+), 16 deletions(-) create mode 100644 res.py diff --git a/deco.py b/deco.py index b674ee6..2dbcfb6 100644 --- a/deco.py +++ b/deco.py @@ -33,12 +33,12 @@ def Deco(func): except: postdata="" print("No Postdata loaded.") + # Token还是不行。。前端到底是用什么实现的? # 现在估计是能用了 if not "NoToken" in func.__name__: # 为了判断是否需要Token验证 # 我知道这很不好,但是带参数的修饰器和Flask冲突了(估计是) # 所以请在不用Token的函数名后面加上"_NoToken" -<<<<<<< HEAD try: # 获取Token tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 print("Loading Token:",tkst, tkdata) @@ -50,20 +50,8 @@ def Deco(func): tksk=TK.ERROR tkdata={} return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) + # 上面这一段是在上面的if里面的啊,要加上缩进的 -======= - try: # 获取Token - tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 - print("Loading Token:",tkst, tkdata) - if tkst==TK.EXPIRED: - return json.dumps({'type':'ERROR', 'message':"token过期"}) - elif tkst==TK.BAD: - return json.dumps({'type':'ERROR', 'message':"token失效"}) - except: - tksk=TK.ERROR - tkdata={} - return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) ->>>>>>> 2d48b2b731d88beba6ad7785a1e92208ebcab8b8 try: r=func(*args,**kwargs) print("result->",r) # 函数返回的JSON diff --git a/res.py b/res.py new file mode 100644 index 0000000..7f05529 --- /dev/null +++ b/res.py @@ -0,0 +1,4 @@ +STATUS_WAITING=0 +STATUS_ACCEPT=1 +STATUS_THOUGHT_REJECT=2 +STATUS_FAIL=3 \ No newline at end of file diff --git a/user.py b/user.py index 8944d04..16abbac 100644 --- a/user.py +++ b/user.py @@ -42,9 +42,15 @@ def info(): @User.route('/user/getInfo/', methods=['POST']) @Deco def getInfo(userId): - pass + r,fl=OP.select("userName,class,permission","user","userId=%s",userId,[]) + if not fl: return r + r.update({"type":"SUCCESS", "message":"获取成功"}) + return r @User.route('/user/modPwd', methods = ['POST']) @Deco def modifyPassword(): - pass \ No newline at end of file + old=json_data().get("oldPwd") + new=json_data().get("newPwd") + OP.update("password","user","userId=%s",tkData().get("userid")) + return {"type":"SUCCESS", "message":"修改成功"} \ No newline at end of file -- Gitee From b16e8bab0ea8018d84f7212546a0148dc381c06c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E7=A8=8B=E7=82=80?= Date: Fri, 11 Jun 2021 21:27:21 +0800 Subject: [PATCH 17/18] add some utility --- _class.py | 1 + deco.py | 58 +++++++-------- oppressor.py | 10 ++- res.py | 32 +++++++- user.py | 40 +++++----- volunteer.py | 205 ++++++++++++++++++++++++++++++++++++++------------- 6 files changed, 240 insertions(+), 106 deletions(-) diff --git a/_class.py b/_class.py index 3d6d838..c6d4001 100644 --- a/_class.py +++ b/_class.py @@ -9,6 +9,7 @@ Class = Blueprint('class', __name__) @Class.route('/class/list', methods = ['GET']) @Deco def getClassList(): # 好了 + # 是不是还要加上特殊情况的判断? fl,r=OP.select("class","user","true",(),["id"],only=False) print(fl,r) if not fl: return r diff --git a/deco.py b/deco.py index 2dbcfb6..a684c33 100644 --- a/deco.py +++ b/deco.py @@ -8,37 +8,37 @@ import sys # 不要吐槽这堆奇奇怪怪的变量名了。。全部改掉太麻烦了 postdata={} def json_data(): - return postdata + return postdata tkst=TK.BAD -tkdt={} +tkdata={} def tkStatus(): - return tkst + return tkst def tkData(): - return tkdt + return tkdata # 以后把调试的代码写在这边,把一些公用的功能也可以移到这边 # 在所有函数名前面加上@Deco # 这样路由的函数直接返回一个字典就好了 def Deco(func): - @wraps(func) - def wrapper(*args,**kwargs): - tmp,sys.stdout=sys.stdout,open("logs/debug.log","w+") # 重定向到文件输出 # - print("Entering Function->%s:"%func.__name__) - global postdata, tkst, tkdata # 重要!! - try: # 为了防止空POST出锅 - postdata=json.loads(request.get_data().decode("utf-8")) - print("Postdata:",postdata) # 加载到的POST数据 - except: - postdata="" - print("No Postdata loaded.") + @wraps(func) + def wrapper(*args,**kwargs): + # tmp,sys.stdout=sys.stdout,open("logs/debug.log","w+") # 重定向到文件输出 # + print("Entering Function->%s:"%func.__name__) + global postdata, tkst, tkdata # 重要!! + try: # 为了防止空POST出锅 + postdata=json.loads(request.get_data().decode("utf-8")) + print("Postdata:",postdata) # 加载到的POST数据 + except: + postdata="" + print("No Postdata loaded.") - # Token还是不行。。前端到底是用什么实现的? # 现在估计是能用了 - if not "NoToken" in func.__name__: - # 为了判断是否需要Token验证 - # 我知道这很不好,但是带参数的修饰器和Flask冲突了(估计是) - # 所以请在不用Token的函数名后面加上"_NoToken" + # Token还是不行。。前端到底是用什么实现的? # 现在估计是能用了 + if not "NoToken" in func.__name__: + # 为了判断是否需要Token验证 + # 我知道这很不好,但是带参数的修饰器和Flask冲突了(估计是) + # 所以请在不用Token的函数名后面加上"_NoToken" try: # 获取Token tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 print("Loading Token:",tkst, tkdata) @@ -52,15 +52,15 @@ def Deco(func): return json.dumps({'type':'ERROR', 'message':"未获取到Token"}) # 上面这一段是在上面的if里面的啊,要加上缩进的 - try: - r=func(*args,**kwargs) - print("result->",r) # 函数返回的JSON + try: + r=func(*args,**kwargs) + print("result->",r) # 函数返回的JSON # 如果想做错误输出的话加在这里 - sys.stdout=tmp # 重新回到控制台输出 # - return json.dumps(r) - except: + # sys.stdout=tmp # 重新回到控制台输出 # + return json.dumps(r) + except: # 理论上不应该有这个 # 出现这种情况说明代码锅了或者前端接口错了 - sys.stdout=tmp # 重新回到控制台输出 # - return json.dumps({'type':'ERROR','message':'未知错误'}) - return wrapper \ No newline at end of file + # sys.stdout=tmp # 重新回到控制台输出 # + return json.dumps({'type':'ERROR','message':'未知错误'}) + return wrapper \ No newline at end of file diff --git a/oppressor.py b/oppressor.py index 41996dd..285af48 100644 --- a/oppressor.py +++ b/oppressor.py @@ -4,7 +4,7 @@ import database as DB thisYear = 2020 # 以后要改成自动获取 # 并且这个应该是指学年而不是当前年份 - +# 这个函数被用到的地方:_class.py def classIdToString(a): global thisYear id = int(a) @@ -43,6 +43,7 @@ def classIdToString(a): # 下面三个是对MySQL操作的封装 # 对SQL的操作尽量使用这三个而不是直接DB.execute() # 标出来的是调试输出 +# 注意:SQL中传入的所有参数要使用%s(我也不知道为什么,但是是对的) def select(col,src,exp,val,ret,only=True): # 估计能用了 # col:选择的列,字符串 src:从哪张表,字符串 exp:条件,字符串 # val:传入的数据,元组 ret:返回的格式,列表,内容为字符串,为[]则为col @@ -74,6 +75,9 @@ def select(col,src,exp,val,ret,only=True): # 估计能用了 result[i].update({ret[j]: r[i][j]}) return True, result +# !!!注意!!!下面两个函数是没有返回值的!!! +# fl,r=OP.update(...) 错! +# OP.update(...) 对! def update(col,src,exp,val): # 估计能用了 # 参数同上 s="UPDATE %s SET %s WHERE %s;"%(src,col,exp) @@ -84,8 +88,7 @@ def update(col,src,exp,val): # 估计能用了 def insert(col,src,val): # 估计能用了 # 参数同上 tmp=("%s,"*len(val))[:-1] - # 谁能告诉我为什么?虽然这样写是对的。。难不成是隐式类型转换的锅? - s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) # 为什么不是tmp,col + s="INSERT INTO %s (%s) VALUES (%s);"%(src,col,tmp) print("Inserting:",s,val) # 生成的SQL语句和参数 # DB.execute(s,val) r=DB.fetchall() @@ -93,6 +96,7 @@ def insert(col,src,val): # 估计能用了 # 获取一个表中有多少行记录 # (到目前)只被用于获取volId # 是不是可以用来随机获取一条数据? +# 这东西现在看来好像没什么用,只要设置AUTO_INCREMENT就好了 def getLength(src): # 还未调试! s="SELECT MAX(ROWNUM) FROM %s"%src print("Get Length:",s,src) # 生成的SQL语句和参数 # diff --git a/res.py b/res.py index 7f05529..d60f14d 100644 --- a/res.py +++ b/res.py @@ -1,4 +1,28 @@ -STATUS_WAITING=0 -STATUS_ACCEPT=1 -STATUS_THOUGHT_REJECT=2 -STATUS_FAIL=3 \ No newline at end of file +# 这个文件用来存放一些通用的数据 + +# 学生完成的义工的状态 +STATUS_WAITING =0 # 等待审核 +STATUS_ACCEPT =1 # 接受 +STATUS_REJECT =2 # 打回不可重新提交 +STATUS_RESUBMIT=3 # 打回可重新提交 +# 义工活动的状态 +VOLUNTEER_WAITING =0 # 等待审核 +VOLUNTEER_AVAILABLE=1 # 可以报名 +VOLUNTEER_FINISHED =2 # 报名截止 +# 用户权限 +PMS_CLASS =0 # 每个班的团支书 +PMS_TEACHER=1 # 教师 +PMS_MANAGER=2 # 义管会 +PMS_SYSTEM =3 # 系统 + +def checkPermission(cls,pms,stu): # 判断一个用户是否有权限管理该学生 + # 教师、义管会、系统能管理所有学生 + # 班级编号为6位:202001,学号为8位:20200100~20200199 + return pms in [PMS_CLASS,PMS_TEACHER,PMS_SYSTEM] or(pms==PMS_CLASS and stu>=cls*100 and stu', methods=['POST']) @Deco def getInfo(userId): - r,fl=OP.select("userName,class,permission","user","userId=%s",userId,[]) + fl,r=OP.select("userName,class,permission","user","userId=%s",userId,["userName","class","permission"]) if not fl: return r r.update({"type":"SUCCESS", "message":"获取成功"}) return r diff --git a/volunteer.py b/volunteer.py index 0018447..f1f2e85 100644 --- a/volunteer.py +++ b/volunteer.py @@ -1,6 +1,7 @@ from flask import Blueprint, request import json from deco import * +from res import * import oppressor as OP Volunteer = Blueprint('volunteer', __name__) @@ -11,11 +12,7 @@ def getVolunteerList(): # 可以了 fl,r=OP.select("volId,volName,description,volDate,volTime,status,stuMax","volunteer","true",(), ["id", "name", "description","date","time","status","stuMax"],only=False) if not fl: return r # 数据库错误 - return { - "type": "SUCCESS", - "message": "获取成功", - "volunteer": r - } + return {"type":"SUCCESS","message":"获取成功","volunteer":r} @Volunteer.route('/volunteer/fetch/', methods = ['GET']) @Deco @@ -27,105 +24,213 @@ def getVolunteer(volId): # 可以了 r.update({"type":"SUCCESS","message":"获取成功"}) return r +# 判断班级人数是否超限 +# 义工vol,在cls班里再报名dlt个人 +def checkStuLimit(vol,cls,dlt): + print("Checking:",vol,cls,dlt) + fl,r=OP.select("stuMax,nowStuCount","class_vol","volId=%s AND class=%s",(vol,cls),["stuMax","nowStuCount"]) + if not fl: + if r["message"]=="数据库信息错误:未查询到相关信息": + r["message"]="班级%d无法报名该义工"%cls + return False,r + else: return False,r + if r["nowStuCount"]+dlt>r["stuMax"]: + return False,{"type":"ERROR","message":"班级%d人数超限"%cls} + return True,{} + +# 目前已有BUG: +# 1. 先后报名同一个人可以报两次 @Volunteer.route('/volunteer/signup/', methods = ['POST']) @Deco def signupVolunteer(volId): - user_class = tkData.get("class") - # 判断是否都是本班的人 - for i in json_data['stulst']: - if i < user_class * 100 or i >= user_class * 100 + 100: - return {"type": "ERROR", "message": "学生列表错误"} - + # 判断权限 + for i in json_data()['stulst']: + if not checkPermission(tkData()["class"],tkData()["permission"],i): + return {"type":"ERROR", "message":"权限不足:学生列表中有别班学生"} # 判断人数是否超过这个义工的人数上限 - st, r = OP.select("stuMax, nowStuCount","volunteer","volId=%d",volId,["stuMax","nowStuCount"]) - if not st: return r # 数据库错误 - if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: + fl,r=OP.select("stuMax,nowStuCount","volunteer","volId=%s",volId,["stuMax","nowStuCount"]) + if not fl: return r # 数据库错误 + if len(json_data()['stulst']) > r["stuMax"] - r["nowStuCount"]: return {"type":"ERROR", "message":"人数超限"} - # 判断人数是否超过班级人数上限 - st, r = OP.select("stuMax, nowStuCount","class_vol","volId=%d AND classId=%d",(volId,classId),["stuMax"]) - if not st: return r # 数据库错误 - if len(json_data['stulst']) > r["stuMax"] - r["nowStuCount"]: - return {"type":"ERROR", "message":"人数超限"} - + # 先统计每个班级报名人数 + num={} # {202001:233,202002:234,...} + for i in json_data()['stulst']: + cur=i//100 # 获取学生的班级 + if cur in num: num[cur]+=1 + else: num[cur]=1 + for i in num: + fl,r=checkStuLimit(volId,i,num[i]) + if not fl: return r # 修改数据库 - OP.update("nowStuCount=nowStuCount+%d","class_vol","volId=%d AND classId=%d", - (len(json_data['stulst']),volId,classId)) # 修改每个班的记录 - OP.update("nowStuCount=nowStuCount+%d","volunteer","volId=%d", - (len(json_data['stulst']),volId)) # 修改总的记录 - for i in json_data['stulst']: + OP.update("nowStuCount=nowStuCount+%s","volunteer","volId=%s", + (len(json_data()['stulst']),volId)) # 修改总的记录 + for i in num: + OP.update("nowStuCount=nowStuCount+%s","class_vol","volId=%s AND class=%s", + (num[i],volId,i)) # 修改每个班的记录 + for i in json_data()['stulst']: # 遍历每一个学生,加入一条未审核的记录 OP.insert("volId,stuId,status,volTimeInside,volTimeOutside,volTimeLarge,thought", - "stu_vol",(volId,i,0,0,0,"")) + "stu_vol",(volId,i,STATUS_WAITING,0,0,0,"")) # 审核过了以后再发义工时间 return {"type":"SUCCESS","message":"添加成功"} @Volunteer.route('/volunteer/create', methods = ['POST']) @Deco -def createVolunteer(): - # 判断权限 - if not tkData.get("permission") in [2,4]: +def createVolunteer(): # 大概可以了 + # 判断权限,教师、义管会、系统可以创建义工 + print(tkData()) + if not tkData().get("permission") in [PMS_TEACHER,PMS_MANAGER,PMS_SYSTEM]: return {'type':'ERROR', 'message':"权限不足"} + if not checkStudentCount(json_data()): + return {"type":"ERROR", "message":"最大人数不符合要求:义工人数永远无法报满"} # 创建一条总的记录 - volId=OP.getLength("volunteer") - OP.insert("volId,volName,volDate,volTime,stuMax,nowStuCount,description,status," + OP.insert("volName,volDate,volTime,stuMax,nowStuCount,description,status," +"volTimeInside,volTimeOutside,volTimeLarge,holderId", "volunteer", - (volId,json_data["name"],json_data["date"],json_data["time"],json_data["stuMax"],0 - json_data["description"],0,json_data["inside"],json_data["outside"],json_data["large"],tkData["userid"])) - # 这里的status默认是0,如果规范修改了记得改一下 + (json_data()["name"],json_data()["date"],json_data()["time"],json_data()["stuMax"],0, + json_data()["description"],VOLUNTEER_WAITING,json_data()["inside"],json_data()["outside"],json_data()["large"],tkData()["userid"])) + fl,r=OP.select("volId","volunteer","volName=%s AND volDate=%s AND volTime=%s", + (json_data()["name"],json_data()["date"],json_data()["time"]),["id"]) + if not fl: return r + volId=r["id"] # 在每个班的表里添加一条记录 - for i in json_data["class"]: - OP.insert("volId,class,stuMax,nowStuCount","class_vol",volId,i["id"],i["stuMax"],0) + for i in json_data()["class"]: + OP.insert("volId,class,stuMax,nowStuCount","class_vol",(volId,i["id"],i["stuMax"],0)) return {"type":"SUCCESS", "message":"创建成功"} @Volunteer.route('/volunteer/signerList/', methods = ['GET']) @Deco def getSignerList(volId): # 判断权限 - if not tkData.get("permission")<3: + if not tkData().get("permission") in [PMS_TEACHER,PMS_MANAGER,PMS_SYSTEM]: return {'type':'ERROR', 'message':"权限不足"} ret={"type":"SUCCESS", "message":"获取成功","result":[]} - fl,r=OP.select("stuId","stu_vol","volId=%d",(volId),["stuId"],only=False) + fl,r=OP.select("stuId","stu_vol","volId=%s",(volId),["stuId"],only=False) if not fl: return r # 数据库错误:没有这个义工 for i in r: # 返回学生姓名 - ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) + ff,rr=OP.select("stuId,stuName","student","stuId=%s",(i[stuId]),["stuId","stuName"]) if not ff: return rr # 数据库错误:没有这个人 ret["result"].append(rr) return ret - +''' @Volunteer.route('/volunteer/choose/', methods = ['POST']) def chooseVolunteer(volId): pass @Volunteer.route('/volunteer/joinerList/', methods = ['GET']) @Deco -def getJoinerList(volId): +def getJoinerList(volId): # 这个到底要不要? # 所以这个的意思是返回所有审核过了的报名的人吗? - if not tkData.get("permission")<3: + if not tkData().get("permission")<3: return {'type':'ERROR', 'message':"权限不足"} - ret={"type":"SUCCESS", "message":"获取成功","result":[]} - fl,r=OP.select("stuId","stu_vol","volId=%d and status=1",(volId),["stuId"],only=False) + ret={"type":"SUCCESS", "message":"获取成功", "result":[]} + fl,r=OP.select("stuId","stu_vol","volId=%s AND status=1",(volId),["stuId"],only=False) + # 这里的审核通过是1,如果改了记得改 if not fl: return r # 数据库错误:没有这个义工 for i in r: # 返回学生姓名 - ff,rr=OP.select("stuId,stuName","student","stuId=%d",i.get("stuId"),[]) + ff,rr=OP.select("stuId,stuName","student","stuId=%s",i.get("stuId"),[]) if not ff: return rr # 数据库错误:没有这个人 ret["result"].append(rr) return ret +''' @Volunteer.route('/volunteer/audit/', methods = ['POST']) @Deco -def auditThought(volId): - pass +def auditThought(volId): # 大概是过了 + # 判断权限,只有义管会和系统可以审核 + if not tkData()["permission"] in [PMS_MANAGER,PMS_SYSTEM]: + return {'type':'ERROR', 'message':"权限不足"} + # 判断状态是否可以审核 + for i in json_data()["thought"]: + fl,r=OP.select("status","stu_vol","volId=%s AND stuId=%s",(volId,i["stuId"]),["status"]) + if not fl: return r + if r["status"]==STATUS_ACCEPT: + return {"type":"ERROR", "message":"学生%d已过审,不可重复审核"%i["stuId"]} + if r["status"]==STATUS_REJECT: + return {"type":"ERROR", "message":"学生%d不可重新提交"%i["stuId"]} + # 修改数据库 + for i in json_data()["thought"]: + stuId=i["stuId"] + # 修改状态。状态由JSON传入 + OP.update("status=%s","stu_vol","volId=%s AND stuId=%s",(i["status"],volId,stuId)) + # 把stu_vol的表里的数据填上 + OP.update("volTimeInside=%s","stu_vol","volId=%s AND stuId=%s",(i["inside"],volId,stuId)) + OP.update("volTimeOutside=%s","stu_vol","volId=%s AND stuId=%s",(i["outside"],volId,stuId)) + OP.update("volTimeLarge=%s","stu_vol","volId=%s AND stuId=%s",(i["large"],volId,stuId)) + # 修改学生数据 + OP.update("volTimeInside=volTimeInside+%s","student","stuId=%s",(i["inside"],stuId)) + OP.update("volTimeOutside=volTimeOutside+%s","student","stuId=%s",(i["outside"],stuId)) + OP.update("volTimeLarge=volTimeLarge+%s","student","stuId=%s",(i["large"],stuId)) + # 如果SQL的update可以一次修改多列的话麻烦把上面改了 + return {"type":"SUCCESS", "message":"审核成功"} +'''暂时去掉 @Volunteer.route('/volunteer/modify/', methods = ['POST']) @Deco def modifyVolunteer(volId): - pass + # 判断权限,教师、义管会和系统(也即可以创建义工的)可以修改 + if not tkData()["permission"] in [PMS_TEACHER,PMS_MANAGER,PMS_SYSTEM]: + return {"type":"ERROR", "message":"权限不足"} + if not checkStudentCount(json_data()): + return {"type":"ERROR", "message":"最大人数不符合要求:义工人数永远无法报满"} + # 最大人数大于当前报名人数 + fl,r=OP.select("nowStuCount","volunteer","volId=%s",(volId),["now"]) + if not fl: return r + if json_data()["stuMax"]', methods = ['POST']) -def submitThought(volId): - pass +@Deco +def submitThought(volId): # 大概是过了 + # 判断权限 + for i in json_data()["thought"]: + if not checkPermission(tkData()["class"],tkData()["permission"],i): + return {"type":"ERROR","message":"权限不足:学生列表中有别班学生"} + # 判断状态是否可以提交 + for i in json_data()["thought"]: + print(i) + fl,r=OP.select("status","stu_vol","volId=%s AND stuId=%s",(volId,i["stuId"]),["status"]) + if not fl: return r + if r["status"]==STATUS_ACCEPT: + return {"type":"ERROR", "message":"学生%d已过审,不可重复提交"%i["stuId"]} + if r["status"]==STATUS_REJECT: + return {"type":"ERROR", "message":"学生%d不可重新提交"%i["stuId"]} + # 修改数据库 + for i in json_data()["thought"]: + OP.update("thought=%s","stu_vol","stuId=%s",(i["content"],i["stuId"])) + return {"type":"SUCCESS","message":"提交成功"} @Volunteer.route('/volunteer/randomThought', methods=['GET']) def randthought(): # 随机【钦定】一条感想(话说SQL怎么随机取一条数据啊) -- Gitee From 49229ef3232a0b8842c50de1711ad1a025d777ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E7=A8=8B=E7=82=80?= Date: Sun, 13 Jun 2021 21:34:32 +0800 Subject: [PATCH 18/18] =?UTF-8?q?=E9=99=A4=E4=BA=86=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E6=84=9F=E6=83=B3=E5=85=B6=E5=AE=83=E6=8E=A5=E5=8F=A3=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E8=83=BD=E7=94=A8=E4=BA=86=EF=BC=8Cres.py=E4=B8=AD?= =?UTF-8?q?=E6=9C=89=E5=92=8C=E6=96=87=E6=A1=A3=E4=B8=8D=E7=AC=A6=E7=9A=84?= =?UTF-8?q?=E4=BB=A5res.py=E4=B8=BA=E5=87=86=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deco.py | 7 +++---- res.py | 7 ------- volunteer.py | 40 ++++++++++++++++++++++++++++------------ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/deco.py b/deco.py index a684c33..ff3201b 100644 --- a/deco.py +++ b/deco.py @@ -6,15 +6,15 @@ import sys # 我不知道还有没有更好的方法,如果有的话麻烦把下面这几行改掉 # 不要吐槽这堆奇奇怪怪的变量名了。。全部改掉太麻烦了 +# 在其他文件中请使用:json_data(),tkData() +# !!!注意上面这两个括号!!! postdata={} def json_data(): return postdata - tkst=TK.BAD tkdata={} def tkStatus(): return tkst - def tkData(): return tkdata @@ -34,13 +34,12 @@ def Deco(func): postdata="" print("No Postdata loaded.") - # Token还是不行。。前端到底是用什么实现的? # 现在估计是能用了 if not "NoToken" in func.__name__: # 为了判断是否需要Token验证 # 我知道这很不好,但是带参数的修饰器和Flask冲突了(估计是) # 所以请在不用Token的函数名后面加上"_NoToken" try: # 获取Token - tkst, tkdata=TK.readToken(request.headers.get("Authorization")) # 改了一下 + tkst, tkdata=TK.readToken(request.headers.get("Authorization")) print("Loading Token:",tkst, tkdata) if tkst==TK.EXPIRED: return json.dumps({'type':'ERROR', 'message':"token过期"}) diff --git a/res.py b/res.py index d60f14d..bb93615 100644 --- a/res.py +++ b/res.py @@ -19,10 +19,3 @@ def checkPermission(cls,pms,stu): # 判断一个用户是否有权限管理该 # 教师、义管会、系统能管理所有学生 # 班级编号为6位:202001,学号为8位:20200100~20200199 return pms in [PMS_CLASS,PMS_TEACHER,PMS_SYSTEM] or(pms==PMS_CLASS and stu>=cls*100 and stu', methods = ['POST']) @Deco -def signupVolunteer(volId): +def signupVolunteer(volId): # 过了 # 判断权限 for i in json_data()['stulst']: if not checkPermission(tkData()["class"],tkData()["permission"],i): return {"type":"ERROR", "message":"权限不足:学生列表中有别班学生"} # 判断人数是否超过这个义工的人数上限 - fl,r=OP.select("stuMax,nowStuCount","volunteer","volId=%s",volId,["stuMax","nowStuCount"]) + fl,r=OP.select("stuMax,nowStuCount","volunteer","volId=%s",(volId),["stuMax","nowStuCount"]) if not fl: return r # 数据库错误 - if len(json_data()['stulst']) > r["stuMax"] - r["nowStuCount"]: + if len(json_data()['stulst'])>r["stuMax"]-r["nowStuCount"]: return {"type":"ERROR", "message":"人数超限"} + # 判断是否有人已经报名了 + for i in json_data()["stulst"]: + fl,r=OP.select("status","stu_vol","volId=%s AND stuId=%s",(volId,i),["status"]) + # 理论上所有人都没有在数据库里面 + if not (fl==False and r["message"]=="数据库信息错误:未查询到相关信息"): + return {"type":"ERROR", "message":"学生%d已经报名,不可重复报名!"%i} # 判断人数是否超过班级人数上限 # 先统计每个班级报名人数 num={} # {202001:233,202002:234,...} @@ -59,7 +73,7 @@ def signupVolunteer(volId): cur=i//100 # 获取学生的班级 if cur in num: num[cur]+=1 else: num[cur]=1 - for i in num: + for i in num: # 分别检查每个班的报名 fl,r=checkStuLimit(volId,i,num[i]) if not fl: return r # 修改数据库 @@ -90,9 +104,11 @@ def createVolunteer(): # 大概可以了 "volunteer", (json_data()["name"],json_data()["date"],json_data()["time"],json_data()["stuMax"],0, json_data()["description"],VOLUNTEER_WAITING,json_data()["inside"],json_data()["outside"],json_data()["large"],tkData()["userid"])) + # 因为volunteer表里面是AUTO_INCREMENT,所以insert的时候volId自动加一 + # 所以下面要获取当前的volId以供后面操作(为了防止一些奇奇怪怪的锅用了三项) fl,r=OP.select("volId","volunteer","volName=%s AND volDate=%s AND volTime=%s", (json_data()["name"],json_data()["date"],json_data()["time"]),["id"]) - if not fl: return r + if not fl: return r # 理论上这个错误不可能发生 volId=r["id"] # 在每个班的表里添加一条记录 for i in json_data()["class"]: @@ -101,7 +117,7 @@ def createVolunteer(): # 大概可以了 @Volunteer.route('/volunteer/signerList/', methods = ['GET']) @Deco -def getSignerList(volId): +def getSignerList(volId): # 过了 # 判断权限 if not tkData().get("permission") in [PMS_TEACHER,PMS_MANAGER,PMS_SYSTEM]: return {'type':'ERROR', 'message':"权限不足"} @@ -109,10 +125,11 @@ def getSignerList(volId): fl,r=OP.select("stuId","stu_vol","volId=%s",(volId),["stuId"],only=False) if not fl: return r # 数据库错误:没有这个义工 for i in r: # 返回学生姓名 - ff,rr=OP.select("stuId,stuName","student","stuId=%s",(i[stuId]),["stuId","stuName"]) + ff,rr=OP.select("stuId,stuName","student","stuId=%s",(i["stuId"]),["stuId","stuName"]) if not ff: return rr # 数据库错误:没有这个人 ret["result"].append(rr) return ret + ''' @Volunteer.route('/volunteer/choose/', methods = ['POST']) def chooseVolunteer(volId): @@ -220,9 +237,8 @@ def submitThought(volId): # 大概是过了 return {"type":"ERROR","message":"权限不足:学生列表中有别班学生"} # 判断状态是否可以提交 for i in json_data()["thought"]: - print(i) fl,r=OP.select("status","stu_vol","volId=%s AND stuId=%s",(volId,i["stuId"]),["status"]) - if not fl: return r + if not fl: return r # 数据库错误 if r["status"]==STATUS_ACCEPT: return {"type":"ERROR", "message":"学生%d已过审,不可重复提交"%i["stuId"]} if r["status"]==STATUS_REJECT: -- Gitee