You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

448 lines
20 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from PySide2.QtWidgets import QApplication,QMessageBox,QLineEdit,QTableWidgetItem
from PySide2.QtWidgets import QFileDialog
from PySide2.QtUiTools import QUiLoader
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import sys
import os
class Login():#登录界面窗口
def __init__(self):
self.ui = QUiLoader().load('login.ui')
self.ui.Btn_Login.clicked.connect(self.open_main)
self.worrycount=0#错误计数
self.df=pd.read_excel('社区信息表 .xlsx',dtype=object)
self.pw=self.df[['电话','密码']]
def open_main(self):#登录
ID=self.ui.Login_User_Input.text()
PassWord=self.ui.Login_Pa_Input.text()
if ID in self.pw.values:
if ID=='admin' and PassWord==self.pw[self.pw['电话']==ID].iloc[0,1]:
self.w2= windowgly()#管理员登录
self.w2.ui.show()
self.ui.close()
elif PassWord==self.pw[self.pw['电话']==ID].iloc[0,1]:
row=list(self.df[self.df['电话']==ID].index)
self.w2= windowjm(ID,row[0])#居民登录
self.w2.ui.myself.insertRow(0)
self.w2.ui.myself.setItem(0,0, QTableWidgetItem(self.df.loc[row[0],'姓名']))
self.w2.ui.myself.setItem(0,1, QTableWidgetItem(self.df.loc[row[0],'单元']))
self.w2.ui.myself.setItem(0,2, QTableWidgetItem(self.df.loc[row[0],'楼栋']))
self.w2.ui.myself.setItem(0,3, QTableWidgetItem(str(self.df.loc[row[0],'房间'])))
self.w2.ui.show()
self.ui.close()
QMessageBox.information(self.ui,'公告',self.df.loc[0,'单元'])
# 11714584364
else:
#密码错误重试判断
if self.worrycount<3:
self.worrycount+=1
self.ui.Login_Pa_Input.clear()
self.ui.wgt.setText('密码错误,您还有{}次重试机会'.format(3-self.worrycount))
print('>>>密码错误\n>>>您还有{}次重试机会'.format(3-self.worrycount))
#重复的登录判断
#self.open_main()
else:
print('>>>密码错误次数过多\n>>>请联系系统管理员\n>>>终端关闭')
a=self.df[(self.df['电话']==ID)].index
self.df.loc[a,'0还是1']=1
self.df.to_excel('社区信息表 .xlsx',index=None)
QMessageBox.warning(self.ui,'密码错误次数过多','请联系系统管理员,终端关闭')
self.ui.close()
else:
print('>>>系统中没有此账号\n>>>请联系管理员')
self.ui.wgt.setText('系统中没有此账号,请联系管理员')
class windowgly():#管理员窗口
def __init__(self):
self.ui= QUiLoader().load('windowgly.ui')
self.row=0
self.Things=pd.read_excel('社区物资表 .xlsx',dtype=object)
self.df=pd.read_excel('社区信息表 .xlsx',dtype=object)
self.xsj=pd.read_excel('打卡表.xlsx',dtype=object)
self.ui.Wang_GTgg.append(self.df.loc[0,'单元'])
self.ui.changekey.clicked.connect(self.changekey)
self.ui.Zhou_SJ1.clicked.connect(self.show_frozenusers)
self.ui.rechangekey.clicked.connect(self.rechangekey)
self.ui.newgg.clicked.connect(self.newgg)
self.ui.lookthings.clicked.connect(self.lookthings)
self.ui.changethings.clicked.connect(self.changethings)
self.ui.things.cellChanged.connect(self.newthings)
self.ui.Yang_XT1.clicked.connect(self.lookyang)
self.ui.Yang_XT2.clicked.connect(self.lookmj)
self.ui.Tu.clicked.connect(self.bar_show)
self.ui.daka1.clicked.connect(self.daka)
self.ui.nodaka1.clicked.connect(self.nodaka)
self.ui.in_information.clicked.connect(self.in_information)
self.ui.out_information.clicked.connect(self.out_information)
self.ui.changeuser.clicked.connect(self.changeuser)
self.ui.close1.clicked.connect(self.close)
def changekey(self):#修改管理员密码
Newkey1=self.ui.newkey1.text()
Newkey2=self.ui.newkey2.text()
if(Newkey1!=Newkey2):
QMessageBox.warning(self.ui,'两次输入不一致','请重新输入')
else:
self.df.loc[0,'密码']=Newkey1
self.df.to_excel('社区信息表 .xlsx',index=None)
QMessageBox.information(self.ui,'修改成功','请重新登录')
self.w2=Login()
self.w2.ui.show()
self.ui.close()
def show_frozenusers(self):#查看冻结账号
for i in range(0,len(self.df)):
if self.df.loc[i,'0还是1']==1:
print('%d'%self.row)
self.ui.frozenu_sers.insertRow(self.row)
self.ui.frozenu_sers.setItem(self.row,0, QTableWidgetItem(self.df.loc[i,'姓名']))
self.ui.frozenu_sers.setItem(self.row,1, QTableWidgetItem(self.df.loc[i,'电话']))
self.row+=1
self.ui.rechangekey.setEnabled(True)
self.ui.Zhou_SJ1.setEnabled(False)
def rechangekey(self):#重置冻结账号密码
for i in range(0,len(self.df)):
if self.df.loc[i,'0还是1']==1:
self.df.loc[i,'0还是1']=0
self.df.loc[i,'密码']='123456'
self.ui.frozenu_sers.removeRow(0)
self.df.to_excel('社区信息表 .xlsx',index=None)
QMessageBox.information(self.ui,'重置成功','请继续下一步操作')
self.row=0
self.ui.Zhou_SJ1.setEnabled(True)
self.ui.rechangekey.setEnabled(False)
def newgg(self):#发布新的公告
text=self.ui.Wang_GTnew.toPlainText()
self.ui.Wang_GTgg.clear()
self.ui.Wang_GTgg.append(text)
QMessageBox.information(self.ui,'修改成功','请继续下一步操作')
self.df.loc[0,'单元']=text
self.df.to_excel('社区信息表 .xlsx',index=None)
def lookthings(self):#查看物资情况
for i in range(0,len(self.Things)):
self.ui.things.insertRow(self.row)
self.ui.things.setItem(self.row,0, QTableWidgetItem(self.Things.loc[i,'大类']))
self.ui.things.setItem(self.row,1, QTableWidgetItem(self.Things.loc[i,'类型']))
self.ui.things.setItem(self.row,2, QTableWidgetItem(self.Things.loc[i,'具体']))
self.ui.things.setItem(self.row,3, QTableWidgetItem(str(self.Things.loc[i,'数量'])))
self.ui.things.setItem(self.row,4, QTableWidgetItem(self.Things.loc[i,'单位']))
self.row+=1
self.row=0
self.ui.lookthings.setEnabled(False)
def newthings(self,x,y):#修改物资情况
newthings=self.ui.things.item(x,y).text()
self.Things.iloc[x,y]=newthings
def changethings(self):#确认修改物资情况
self.Things.to_excel('社区物资表 .xlsx',index=None)
QMessageBox.information(self.ui,'修改成功','请继续下一步操作')
self.ui.lookthings.setEnabled(True)
def lookyang(self):#查看阳性名单
for i in list(self.df[self.df['核酸']==''].index):
self.ui.Yangtable.insertRow(self.row)
yxt=self.df.loc[i,'单元']+self.df.loc[i,'楼栋']+str(self.df.loc[i,'房间'])
self.ui.Yangtable.setItem(self.row,0, QTableWidgetItem(self.df.loc[i,'姓名']))
self.ui.Yangtable.setItem(self.row,1, QTableWidgetItem(yxt))
self.ui.Yangtable.setItem(self.row,2, QTableWidgetItem(self.df.loc[i,'电话']))
self.row+=1
self.row=0
print(1)
self.ui.Yang_XT1.setEnabled(False)
def lookmj(self):#查看密接人员
yxt=self.df[['姓名','单元','楼栋','房间','核酸','电话']]
str_value_list=[]
for row_index,row in yxt.iterrows():
str1=str(row['单元'])
str2=str(row['楼栋'])
str3=str(row['房间'])
str_value=str1[0]+str2[0]+str3
str_value_list.append(str_value)
yxt['编码']=str_value_list
yxt=yxt.set_index('编码')
yx=yxt[yxt['核酸']=='']
list1=[i for i in yx.index]
yx=yx.set_index('姓名')
for i in list1:
for row_index,row in yxt.iterrows():
if row_index[0:2]==i[0:2]:
self.ui.mjtable.insertRow(self.row)
yxtt=row['单元']+row['楼栋']+str(row['房间'])
self.ui.mjtable.setItem(self.row,0, QTableWidgetItem(row['姓名']))
self.ui.mjtable.setItem(self.row,1, QTableWidgetItem(yxtt))
self.ui.mjtable.setItem(self.row,2, QTableWidgetItem(row['电话']))
self.row+=1
self.row=0
self.ui.Yang_XT2.setEnabled(False)
def bar_show(self):#查看统计图
yx=self.df[self.df['核酸']=='']
list1=[i for i in yx.index]
yx=yx.set_index('姓名')
list2=[]
for i in list1:
for row_index,row in self.df.iterrows():
if str(row_index)[0:2]==str(i)[0:2]:
list2.append(row)
df_mj=pd.DataFrame(list2)
matplotlib.rcParams['font.family']='simHei'
matplotlib.rcParams['axes.unicode_minus'] =False
dy_list=self.df['单元'].unique()
y1=[]
y2=[]
for i in dy_list:
y1.append(len(yx[yx['单元']==i]))
for i in dy_list:
y2.append(len(df_mj[df_mj['单元']==i]))
x = range((len(dy_list)))
p1=plt.bar(x, y1, width=0.2,color='red',label='阳性')
p2=plt.bar([i + 0.2 for i in x], y2, width=0.2, color='orange',label='密接')
plt.xticks([i + 0.1 for i in x], dy_list)
plt.bar_label(p1,label_type='edge')
plt.bar_label(p2,label_type='edge')
plt.ylabel('人数')
plt.xlabel('单元')
plt.title('小区阳性及密接统计')
plt.legend()
plt.show()
def daka(self):#查看打卡情况
for i in range(0,len(self.xsj)):
self.ui.daka2.insertRow(self.row)
self.ui.daka2.setItem(self.row,0, QTableWidgetItem(self.xsj.loc[i,'姓名']))
self.ui.daka2.setItem(self.row,1, QTableWidgetItem(self.xsj.loc[i,'打卡情况']))
self.ui.daka2.setItem(self.row,2, QTableWidgetItem(self.xsj.loc[i,'今日所在地']))
self.ui.daka2.setItem(self.row,3, QTableWidgetItem(self.xsj.loc[i,'健康码状态']))
self.ui.daka2.setItem(self.row,4, QTableWidgetItem(self.xsj.loc[i,'是否核酸']))
self.ui.daka2.setItem(self.row,5, QTableWidgetItem(self.xsj.loc[i,'是否隔离']))
self.row+=1
self.row=0
def nodaka(self):#查看未打卡名单
for i in range(0,len(self.xsj)):
if(self.xsj.loc[i,'打卡情况']==''):
self.ui.nodaka2.insertRow(self.row)
self.ui.nodaka2.setItem(self.row,0, QTableWidgetItem(self.xsj.loc[i,'姓名']))
self.row+=1
self.row=0
def in_information(self):#导入居民信息
filePath, _ = QFileDialog.getOpenFileName(
self.ui,"选择你导入的文件", r"d:", "类型 (*.xlsx *.xls )")
in1=pd.read_excel(filePath,dtype=object)
#in1即为想要导入的文件将它拼接上去再写入即可
print(in1)
print(filePath)
QMessageBox.information(self.ui,'','导入成功')
def out_information(self):#导出居民信息
filePath, _ = QFileDialog.getSaveFileName(
self.ui,"导出居民信息",r"d:","类型 (*.xlsx)" )
print(filePath)
self.df.to_excel(filePath)
QMessageBox.information(self.ui,'','导出成功')
def changeuser(self):#切换账号
choice = QMessageBox.question(
self.ui,
'确认',
'确定要切换账号吗?')
if choice == QMessageBox.Yes:
self.w2= Login()
self.w2.ui.show()
self.ui.close()
if choice == QMessageBox.No:
print('你选择了no')
def close(self):#退出
choice = QMessageBox.question(
self.ui,
'确认',
'真的要离开吗qaq')
if choice == QMessageBox.Yes:
self.ui.close()
if choice == QMessageBox.No:
print('你选择了no')
class windowjm():#居民端窗口
def __init__(self,ID,index):
self.ui= QUiLoader().load('windowjm.ui')
self.id=ID
self.index=index
self.row=0
self.Things=pd.read_excel('社区物资表 .xlsx',dtype=object)
self.df=pd.read_excel('社区信息表 .xlsx',dtype=object)
self.xsj=pd.read_excel('打卡表.xlsx',dtype=object)
self.applything=pd.read_excel('物资申请表.xlsx',dtype=object)
self.ui.changekey.clicked.connect(self.changekey)
self.ui.lookthings.clicked.connect(self.lookthings)
self.ui.addthings.clicked.connect(self.addthings)
self.ui.myself.cellChanged.connect(self.newmyself)
self.ui.changemyself.clicked.connect(self.changemyself)
self.ui.checkYXT.clicked.connect(self.checkYXT)
self.ui.delete2.clicked.connect(self.delete)
self.ui.sign.clicked.connect(self.sign)
self.ui.lookhistory.clicked.connect(self.history)
self.ui.changeuser.clicked.connect(self.changeuser)
self.ui.close1.clicked.connect(self.close)
self.ui.Wang_GTgg.append(self.df.loc[0,'单元'])
self.ui.province.setText('湖南')
self.ui.city.setText('长沙')
self.ui.area.setText('岳麓')
def changekey(self):#修改密码
Newkey1=self.ui.newkey1.text()
Newkey2=self.ui.newkey2.text()
row=self.index
if(Newkey1!=Newkey2):
QMessageBox.warning(self.ui,'两次输入不一致','请重新输入')
else:
self.df.loc[row,'密码']=Newkey1
self.df.to_excel('社区信息表 .xlsx',index=None)
QMessageBox.information(self.ui,'修改成功','请重新登录')
self.w2=Login()
self.w2.ui.show()
self.ui.close()
def lookthings(self):#查看物资情况
for i in range(0,len(self.Things)):
self.ui.things.insertRow(self.row)
self.ui.things.setItem(self.row,0, QTableWidgetItem(self.Things.loc[i,'大类']))
self.ui.things.setItem(self.row,1, QTableWidgetItem(self.Things.loc[i,'类型']))
self.ui.things.setItem(self.row,2, QTableWidgetItem(self.Things.loc[i,'具体']))
self.ui.things.setItem(self.row,3, QTableWidgetItem(str(self.Things.loc[i,'数量'])))
self.ui.things.setItem(self.row,4, QTableWidgetItem(self.Things.loc[i,'单位']))
self.row+=1
self.row=0
print('lalal')
#self.ui.lookthings.setEnabled(False)
def addthings(self):#增加申领物资
self.ui.thingsadd.insertRow(self.row)
self.row+=1
print(self.row)
def delete(self):#删除申领物资
row=self.ui.deleterow.text()
row=int(row)-1
self.ui.thingsadd.removeRow(row)
self.row-=1
print(row)
def checkYXT(self):#确认申领取物资ID(电话号码/账号)df(社区物资表)df1(物资申请表)yxt(社区信息表)
yxt_dict={}; ID=self.id; df=self.Things
df1=self.applything; yxt=self.df
row=self.ui.thingsadd.rowCount()
for x in range(row):
key=self.ui.thingsadd.item(x,0).text()
value=self.ui.thingsadd.item(x,1).text()
yxt_dict[key]=value
print(yxt_dict)
list1=[]
dict2={}
for key,value in yxt_dict.items():
for row_index, row in df.iterrows():
if row['具体']==key:
dict1=dict(row)
df.loc[row_index,'数量']=int(df.loc[row_index,'数量'])-int(value)
dict1['数量']=value
dict1['电话']=ID
list1.append(dict1)
break
df2=pd.DataFrame(list1)
df=df.set_index('大类')
df.to_excel('社区物资表 .xlsx')
df1=df1.append(df2,ignore_index=True)
for row_index,row in yxt.iterrows():
dict2[row['姓名']]=row['电话']
for i in df1.index:
for key,value in dict2.items():
if value==str(df1.loc[i,'电话']):
df1.loc[i,'姓名']=key
df1=df1.set_index('姓名')
df1.to_excel('物资申请表.xlsx')
yxt_dict.clear()
print(yxt_dict)
QMessageBox.about(self.ui,'申请成功','请等待管理员审核')
def history(self):#df1(物资申请表)
ID=self.id; df1=self.applything
for row_index ,row in df1.iterrows():
if row['电话']==ID:
self.ui.thingshistory.insertRow(self.row)
self.ui.thingshistory.setItem(self.row,0, QTableWidgetItem(row['具体']))
self.ui.thingshistory.setItem(self.row,1, QTableWidgetItem(str(row['数量'])))
self.row+=1
print(row['具体'],row['数量']) #
self.row=0
def newmyself(self,x,y):#读取修改的个人信息
newmyself=self.ui.myself.item(x,y).text()
if(y==0):
self.df.loc[self.index,'姓名']=newmyself
elif(y==1):
self.df.loc[self.index,'单元']=newmyself
elif(y==2):
self.df.loc[self.index,'楼栋']=newmyself
else:
self.df.loc[self.index,'房间']=int(newmyself)
print(newmyself)
def changemyself(self):#确认修改个人信息
self.df.to_excel('社区信息表 .xlsx',index=None)
QMessageBox.information(self.ui,'修改成功','请继续下一步操作')
def sign(self):#打卡
adress=self.ui.province.text()+''+self.ui.city.text()+''+self.ui.area.text()+''
adress=adress+self.ui.detail.text()
jkm=self.ui.jkm.checkedButton().text()
hs=self.ui.hs.checkedButton().text()
gl=self.ui.geli.checkedButton().text()
self.xsj.loc[self.index-1,'打卡情况']='Yes'
self.xsj.loc[self.index-1,'今日所在地']=adress
self.xsj.loc[self.index-1,'健康码状态']=jkm
self.xsj.loc[self.index-1,'是否核酸']=hs
self.xsj.loc[self.index-1,'是否隔离']=gl
print(adress,jkm,hs,gl)
self.xsj.to_excel('打卡表.xlsx',index=None)
QMessageBox.about(self.ui,'','您已完成今日打卡')
def changeuser(self):#切换账号
choice = QMessageBox.question(
self.ui,
'确认',
'确定要切换账号吗?')
if choice == QMessageBox.Yes:
self.w2= Login()
self.w2.ui.show()
self.ui.close()
if choice == QMessageBox.No:
print('你选择了no')
def close(self):#退出
choice = QMessageBox.question(
self.ui,
'确认',
'真的要离开吗qaq')
if choice == QMessageBox.Yes:
self.ui.close()
if choice == QMessageBox.No:
print('你选择了no')
if __name__ == '__main__':
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
zp = Login()
zp.ui.show()
sys.exit(app.exec_())