From b0a67b38c127a1558e8494513b94c5f03b46458d Mon Sep 17 00:00:00 2001 From: WangJingbo <1149669347@qq.com> Date: Wed, 6 May 2020 23:28:07 +0800 Subject: [PATCH] final --- .idea/.gitignore | 8 + .idea/epidemic.iml | 19 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + __pycache__/app.cpython-38.pyc | Bin 0 -> 12027 bytes app.py | 383 ++++++++++++++++++ templates/addPatient.html | 15 + templates/defaultUser.html | 10 + templates/error.html | 10 + templates/govUser.html | 10 + templates/login.html | 15 + templates/medicalUser.html | 74 ++++ templates/register.html | 18 + templates/select.html | 113 ++++++ 15 files changed, 696 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/epidemic.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 __pycache__/app.cpython-38.pyc create mode 100644 app.py create mode 100644 templates/addPatient.html create mode 100644 templates/defaultUser.html create mode 100644 templates/error.html create mode 100644 templates/govUser.html create mode 100644 templates/login.html create mode 100644 templates/medicalUser.html create mode 100644 templates/register.html create mode 100644 templates/select.html diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/epidemic.iml b/.idea/epidemic.iml new file mode 100644 index 0000000..b16640c --- /dev/null +++ b/.idea/epidemic.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6649a8c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7838098 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/__pycache__/app.cpython-38.pyc b/__pycache__/app.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9addcdb94c1c8ee3af21ba7dd4ed06ceaba50de5 GIT binary patch literal 12027 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 literal 0 HcmV?d00001 diff --git a/app.py b/app.py new file mode 100644 index 0000000..7442a45 --- /dev/null +++ b/app.py @@ -0,0 +1,383 @@ +from flask import Flask,render_template, request, redirect +from flask_sqlalchemy import SQLAlchemy +import datetime +import warnings +import requests +import re +warnings.filterwarnings("ignore") + +app=Flask(__name__) + +app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/epidemic' +db = SQLAlchemy(app) +#定义类 +class Province(db.Model): + __tablename__='province' + provinceID=db.Column(db.String(8)) + provinceName=db.Column(db.String(8),unique=True,primary_key=True) + currentCount = db.Column(db.Integer) + confirmedCount = db.Column(db.Integer) + suspectedCount = db.Column(db.Integer) + curedCount = db.Column(db.Integer) + deadCount = db.Column(db.Integer) + +class City(db.Model): + __tablename__='city' + cityID=db.Column(db.String(8),primary_key=True,index=True) + cityName=db.Column(db.String(8),nullable=False,unique=True) + provinceName=db.Column(db.String(8)) + currentCount=db.Column(db.Integer) + confirmedCount=db.Column(db.Integer) + suspectedCount=db.Column(db.Integer) + curedCount=db.Column(db.Integer) + deadCount=db.Column(db.Integer) + +class District(db.Model): + __tablename__='district' + districtID=db.Column(db.String(8),primary_key=True,index=True) + districtName=db.Column(db.String(8),nullable=False,unique=True) + cityID=db.Column(db.String(8),db.ForeignKey(City.cityID)) + currentCount = db.Column(db.Integer,default=0) + confirmedCount = db.Column(db.Integer,default=0) + suspectedCount = db.Column(db.Integer,default=0) + curedCount = db.Column(db.Integer,default=0) + deadCount = db.Column(db.Integer,default=0) + +class Community(db.Model): + __tablename__='community' + cID=db.Column(db.String(16),primary_key=True,index=True) + cName=db.Column(db.String(32),index=True,unique=True) + districtID = db.Column(db.String(8), db.ForeignKey(District.districtID)) + currentCount = db.Column(db.Integer,default=0) + confirmedCount = db.Column(db.Integer,default=0) + suspectedCount = db.Column(db.Integer,default=0) + curedCount = db.Column(db.Integer,default=0) + deadCount = db.Column(db.Integer,default=0) + +class Workplace(db.Model): + __tablename__='workplace' + wID=db.Column(db.String(32),primary_key=True) + wName=db.Column(db.String(32),unique=True,index=True) + wRate=db.Column(db.Float) + districtID=db.Column(db.String(8),db.ForeignKey(District.districtID)) + +class Hospital(db.Model): + __tablename__='hospital' + hID=db.Column(db.String(32),primary_key=True) + hName=db.Column(db.String(32),unique=True,nullable=False) + hStorage=db.Column(db.Integer) + hCurrent=db.Column(db.Integer,default=0) + hCured=db.Column(db.Integer,default=0) + hDead=db.Column(db.Integer,default=0) + districtID=db.Column(db.String(8),db.ForeignKey(District.districtID)) + +class Resident(db.Model): + __tablename__='resident' + rID=db.Column(db.String(18),primary_key=True) + rName=db.Column(db.String(8),nullable=False) + rFrom=db.Column(db.String(8)) #收录城市信息不全,暂不建立外键 + rLive=db.Column(db.String(16),db.ForeignKey(Community.cID),nullable=False) + rWork=db.Column(db.String(32),db.ForeignKey(Workplace.wID)) + rStatus=db.Column(db.String(16),default='default') + #r.Treat=db.Column(db.String(32),db.ForeignKey=(hospital.hID)) + +class Ware(db.Model): + __tablename__='ware' + ID=db.Column(db.Integer,primary_key=True,autoincrement=True) + wareID=db.Column(db.String(8)) + wareName=db.Column(db.String(16)) + wareNum=db.Column(db.Integer,default=0) + districtID=db.Column(db.String(8),db.ForeignKey(District.districtID),nullable=False) + +class Treat(db.Model): + __tablename__='treat' + treatID=db.Column(db.Integer,primary_key=True,autoincrement=True) + rID=db.Column(db.String(18),db.ForeignKey(Resident.rID)) + hID=db.Column(db.String(32),db.ForeignKey(Hospital.hID)) + startDate=db.Column(db.Date,nullable=False) + endDate=db.Column(db.Date) + endStatus=db.Column(db.String(8))#dead死亡crued出院 + +class Distribute1(db.Model): + __tablename__='distribute1' + d1=db.Column(db.Integer,primary_key=True,autoincrement=True) + districtID=db.Column(db.String(8),db.ForeignKey(District.districtID)) + wareID=db.Column(db.String(8),db.ForeignKey(Ware.wareID)) + cID=db.Column(db.String(16),db.ForeignKey(Community.cID)) + wareNum=db.Column(db.Integer,default=0) + +class Distribute2(db.Model): + __tablename__ = 'distribute2' + d2=db.Column(db.Integer,primary_key=True,autoincrement=True) + districtID = db.Column(db.String(8), db.ForeignKey(District.districtID)) + wareID=db.Column(db.String(8),db.ForeignKey(Ware.wareID)) + wID=db.Column(db.String(32),db.ForeignKey(Workplace.wID)) + wareNum=db.Column(db.Integer,default=0) + +class Distribute3(db.Model): + __tablename__ = 'distribute3' + d3=db.Column(db.Integer,primary_key=True,autoincrement=True) + districtID = db.Column(db.String(8), db.ForeignKey(District.districtID)) + wareID=db.Column(db.String(8),db.ForeignKey(Ware.wareID)) + hID=db.Column(db.String(32),db.ForeignKey(Hospital.hID)) + wareNum=db.Column(db.Integer,default=0) + +class User(db.Model): + __tablename__ = 'user' + uID=db.Column(db.String(32),primary_key=True) + uPassword=db.Column(db.String(32),nullable=False) + uType=db.Column(db.String(32),nullable=False) +''' +db.drop_all() +db.create_all() +''' +#从网页爬取各城市信息 +def getHTMLText(url): + try: + r = requests.get(url, timeout=30) + r.raise_for_status() + r.encoding = r.apparent_encoding + return r.text + except: + return '' + +def getData(provList,cityList,html): + prov=re.findall(r'{"provinceName":".+?","provinceShortName":".+?","currentConfirmedCount":.+?}]}',html,re.S) + for i in prov: + try: + l=[]#单省份信息列表 + i=eval(i) + provinceName=i['provinceShortName'] + l.append(i['locationId']) + l.append(i['provinceShortName']) + l.append(i['currentConfirmedCount']) + l.append(i['confirmedCount']) + l.append(i['suspectedCount']) + l.append(i['curedCount']) + l.append(i['deadCount']) + provList.append(l) + l2=i['cities'] + for j in range(len(l2)): + l3=[]#单城市信息列表 + if l2[j]['locationId']==0: + continue + l3.append(l2[j]['locationId']) + l3.append(l2[j]['cityName']) + l3.append(provinceName) + l3.append(l2[j]['currentConfirmedCount']) + l3.append(l2[j]['confirmedCount']) + l3.append(l2[j]['suspectedCount']) + l3.append(l2[j]['curedCount']) + l3.append(l2[j]['deadCount']) + cityList.append(l3) + except: + continue + +infourl='https://ncov.dxy.cn/ncovh5/view/pneumonia?scene=2' +HTMLText=getHTMLText(infourl) +provList=[] +cityList=[] +getData(provList,cityList,HTMLText) + +for i in provList: + provinceID=i[0] + prov=Province(provinceID=i[0],provinceName=i[1],currentCount=i[2],\ + confirmedCount=i[3],suspectedCount=i[4],curedCount=i[5],\ + deadCount=i[6]) + try: + db.session.add(prov) + db.session.commit() + except: + continue + +for j in cityList: + cityID=j[0] + city=City(cityID=j[0],cityName=j[1],provinceName=j[2],currentCount=j[3],\ + confirmedCount=j[4],suspectedCount=j[5],curedCount=j[6],deadCount=j[7]) + try: + if cityID>=100000: + db.session.add(city) + db.session.commit() + except: + continue + + +@app.route('/') +def frontpage(): + return redirect('/select') + +@app.route('/register_page') +def register_list(): + return render_template('register.html') + +@app.route('/register',methods=['GET','POST']) +def register(): + ID=request.form['ID'] + password=request.form['password'] + type=request.form['type'] + try: + user=User(uID=ID,uPassword=password,uType=type) + db.session.add(user) + db.session.commit() + return redirect('/select') + except: + return render_template('error.html') + +@app.route('/login_page') +def login_list(): + return render_template('login.html') + +@app.route('/login',methods=['POST','GET']) +def login(): + ID = request.form['ID'] + password = request.form['password'] + try: + a=User.query.filter_by(uID=ID).first() + if a.uPassword==password: + type=a.uType + else: + return render_template('error.html') + except: + return render_template('error.html') + if type=='default': + return redirect('/select') + elif type=='medical': + return redirect('/medicalUser') + else: + return redirect('/comUser') + +@app.route('/select') +def select(): + provinces=Province.query.all() + cities=City.query.all() + districts=District.query.all() + communities=Community.query.all() + d1=[] + d2=[] + d3=[] + d4=[] + for i in provinces: + d1.append({'provinceID':i.provinceID,'provinceName':i.provinceName,\ + 'currentCount':i.currentCount,'confirmedCount':i.confirmedCount,\ + 'suspectedCount':i.suspectedCount,'curedCount':i.curedCount,'deadCount':i.deadCount}) + for j in cities: + d2.append({'cityID':j.cityID,'cityName':j.cityName,'provinceName':j.provinceName, \ + 'currentCount': j.currentCount, 'confirmedCount': j.confirmedCount, \ + 'suspectedCount': j.suspectedCount, 'curedCount': j.curedCount, 'deadCount': j.deadCount}) + for k in districts: + d3.append({'districtID':k.districtID,'districtName':k.districtName,'cityId':k.cityID, \ + 'currentCount': k.currentCount, 'confirmedCount': k.confirmedCount, \ + 'suspectedCount': k.suspectedCount, 'curedCount': k.curedCount, 'deadCount': k.deadCount}) + for l in communities: + d4.append({'cID':l.cID,'cName':l.cName,'districtID':l.districtID, \ + 'currentCount': l.currentCount, 'confirmedCount': l.confirmedCount, \ + 'suspectedCount': l.suspectedCount, 'curedCount': l.curedCount, 'deadCount': l.deadCount}) + return render_template('select.html',d1=d1,d2=d2,d3=d3,d4=d4) + +@app.route('/medicalUser') +def medicalUser(): + hospitals = Hospital.query.all() + d1=[] + for l in hospitals: + d1.append({'districtID':l.districtID,'ID':l.hID,'name':l.hName,'storage':l.hStorage,\ + 'current':l.hCurrent,'crued':l.hCured,'dead':l.hDead}) + distributions=Distribute3.query.all() + d2=[] + for i in distributions: + ware=Ware.query.filter_by(wareID=i.wareID).first() + name=ware.wareName + d2.append({'wareID':i.wareID,'wareName':name,'wareNum':i.wareNum,'hospitalID':i.hID}) + patients=Treat.query.all() + d3=[] + for a in patients: + d3.append({'ID':a.treatID,'rID':a.rID,'hID':a.hID,'startDate':a.startDate,\ + 'endDate':a.endDate,'endStatus':a.endStatus}) + return render_template('medicalUser.html',d1=d1,d2=d2,d3=d3) + +@app.route('/cruedPatient',methods=['GET']) +def cruedP(): + try: + id=request.args.get('id')#获取病人id + hid=request.args.get('hid')#获取医院id + rid=request.args.get('rid') + patient=Treat.query.filter_by(treatID=id).first() + patient.endStatus='crued' + db.session.commit() + hospital=Hospital.query.filter_by(hID=hid).first() + hospital.hCured+=1 + db.session.commit() + resident=Resident.query.filter_by(rID=rid).first() + resident.rStatus='crued' + db.session.commit() + rlive=resident.rLive + community=Community.query.filter_by(cID=rlive).first() + community.currentCount-=1 + community.curedCount+=1 + db.session.commit() + did=community.districtID + district=District.query.filter_by(districtID=did).first() + district.currentCount -= 1 + district.curedCount += 1 + db.session.commit() + return redirect('/medicalUser') + except: + return render_template('error.html') + +@app.route('/deadPatient',methods=['GET']) +def deadP(): + try: + id=request.args.get('id')#获取病人id + hid=request.args.get('hid')#获取医院id + rid = request.args.get('rid') + patient=Treat.query.filter_by(treatID=id).first() + patient.endStatus='dead' + db.session.commit() + hospital=Hospital.query.filter_by(hID=hid).first() + hospital.hDead+=1 + db.session.commit() + resident = Resident.query.filter_by(rID=rid).first() + resident.rStatus = 'dead' + db.session.commit() + rlive = resident.rLive + community = Community.query.filter_by(cID=rlive).first() + community.currentCount -= 1 + community.deadCount += 1 + db.session.commit() + did = community.districtID + district = District.query.filter_by(districtID=did).first() + district.currentCount -= 1 + district.deadCount += 1 + db.session.commit() + return redirect('/medicalUser') + except: + return render_template('error.html') + + +@app.route('/addPatient') +def addPPage(): + return render_template('addPatient.html') + +@app.route('/addP',methods=['GET','POST']) +def addP(): + rID=request.form['rID'] + hID=request.form['hID'] + startDate=request.form['startDate'] + patient=Treat(rID=rID,hID=hID,startDate=startDate) + hospital=Hospital.query.filter_by(hID=hID).first() + hospital.hCurrent+=1 #医院累计收治人数增加 + resident=Resident.query.filter_by(rID=rID).first() + community=Community.query.filter_by(cID=resident.rLive).first() + resident.rStatus='comfirmed'#居民状态更改为确诊 + db.session.add(patient) + db.session.commit() + rlive = resident.rLive + community = Community.query.filter_by(cID=rlive).first() + community.currentCount += 1 + community.confirmedCount += 1 + db.session.commit() + did = community.districtID + district = District.query.filter_by(districtID=did).first() + district.currentCount += 1 + district.confirmedCount += 1 + db.session.commit() + return redirect('/medicalUser') \ No newline at end of file diff --git a/templates/addPatient.html b/templates/addPatient.html new file mode 100644 index 0000000..345ba64 --- /dev/null +++ b/templates/addPatient.html @@ -0,0 +1,15 @@ + + + + + 添加病人 + + +
+ 病人身份ID + 医院ID + 入院时间 + +
+ + \ No newline at end of file diff --git a/templates/defaultUser.html b/templates/defaultUser.html new file mode 100644 index 0000000..5fd093f --- /dev/null +++ b/templates/defaultUser.html @@ -0,0 +1,10 @@ + + + + + 普通用户 + + + 查询 + + \ No newline at end of file diff --git a/templates/error.html b/templates/error.html new file mode 100644 index 0000000..cfdc024 --- /dev/null +++ b/templates/error.html @@ -0,0 +1,10 @@ + + + + + 错误! + + +点此返回首页 + + \ No newline at end of file diff --git a/templates/govUser.html b/templates/govUser.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/templates/govUser.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..b2113cb --- /dev/null +++ b/templates/login.html @@ -0,0 +1,15 @@ + + + + + 用户登录 + + + +
+ 用户ID + 密码 + + + + \ No newline at end of file diff --git a/templates/medicalUser.html b/templates/medicalUser.html new file mode 100644 index 0000000..40d488b --- /dev/null +++ b/templates/medicalUser.html @@ -0,0 +1,74 @@ + + + + + 医疗单位用户 + + + + + + + + + + + + + +{% for item in d1 %} + + + + + + + + + +{% endfor %} +
+
医院信息
区ID医院ID医院名称最大容纳病人数在院人数治愈人数死亡人数
{{item.districtID}}{{item.ID}}{{item.name}}{{item.storage}}{{item.current}}{{item.crued}}{{item.dead}}
+ + + + + + + + +{% for item in d2 %} + + + + + + +{% endfor %} +
+
物资供给
物资ID物资名称数量医院ID
{{item.wareID}}{{item.wareName}}{{item.wareNum}}{{ item.hospitalID }}
+ + + + + + + + + + +{% for item in d3 %} + + + + + + + + +{% endfor %} +
+
病人信息
病人ID医院名称入院时间出院时间出院状态操作
{{item.rID}}{{item.hID}}{{item.startDate}}{{item.endDate}}{{item.endStatus}}出院 死亡
+
添加病人 + + \ No newline at end of file diff --git a/templates/register.html b/templates/register.html new file mode 100644 index 0000000..1d44ef7 --- /dev/null +++ b/templates/register.html @@ -0,0 +1,18 @@ + + + + + 用户注册 + + + + 用户ID + 密码 + + 用户类型 + + + + + + \ No newline at end of file diff --git a/templates/select.html b/templates/select.html new file mode 100644 index 0000000..25d7f38 --- /dev/null +++ b/templates/select.html @@ -0,0 +1,113 @@ + + + + + 信息查询 + + +用户注册 +用户登录 +

普通用户查询结果

+ +
+
+ + + + + + + + + + + +{% for item in d1 %} + + + + + + + + + +{% endfor %} +
+
省信息
省/自治区/直辖市ID名称现有感染人数累计感染人数疑似感染人数治愈死亡
{{item.provinceID}}{{item.provinceName}}{{item.currentCount}}{{item.confirmedCount}}{{item.suspectedCount}}{{item.curedCount}}{{item.deadCount}}
+ + + + + + + + + + + + +{% for item in d2 %} + + + + + + + + + + +{% endfor %} +
城市信息
市ID名称省ID现有感染人数累计感染人数疑似感染人数治愈死亡
{{item.cityID}}{{item.cityName}}{{item.provinceName}}{{item.currentCount}}{{item.confirmedCount}}{{item.suspectedCount}}{{item.curedCount}}{{item.deadCount}}
+ + + + + + + + + + + +{% for item in d3 %} + + + + + + + + + + +{% endfor %} +
区信息
区ID名称现有感染人数累计感染人数疑似感染人数治愈死亡
{{item.districtID}}{{item.districtedName}}{{item.cityID}}{{item.currentCount}}{{item.confirmedCount}}{{item.suspectedCount}}{{item.curedCount}}{{item.deadCount}}
+ +
+ + + + + + + + + + +{% for item in d4 %} + + + + + + + + + + +{% endfor %} +
社区信息
社区ID社区名称现有感染人数累计感染人数疑似感染人数治愈死亡
{{item.cID}}{{item.cName}}{{item.districtID}}{{item.currentCount}}{{item.confirmedCount}}{{item.suspectedCount}}{{item.curedCount}}{{item.deadCount}}
+ + \ No newline at end of file