From d6b8f0058566932ba28b9379ef8346fbeb6ea116 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 22 Dec 2019 00:46:23 +0800 Subject: [PATCH 1/5] daoru trouble --- mysite/settings.py | 2 + safesite/daoru.py | 169 +++++++++++++++++- .../migrations/0297_merge_20191217_1200.py | 14 ++ .../migrations/0298_auto_20191217_1200.py | 22 +++ safesite/migrations/0299_remove_menu_type.py | 17 ++ safesite/migrations/0300_menu_type.py | 18 ++ .../migrations/0301_auto_20191217_1414.py | 28 +++ safesite/migrations/0302_group_menulist.py | 19 ++ safesite/migrations/0303_trouble_yhlxo.py | 19 ++ .../migrations/0304_trouble_submituser.py | 19 ++ safesite/models.py | 12 +- safesite/static/safesite/mystatic/js/util.js | 52 +++++- safesite/templates/abpart.html | 17 +- safesite/templates/abuser.html | 2 +- safesite/templates/addtrouble.html | 9 + safesite/templates/datashow.html | 43 ++--- safesite/templates/dichtml.html | 5 +- safesite/templates/index.html | 23 ++- safesite/templates/main.html | 2 +- safesite/templates/report.html | 3 + safesite/templates/rights.html | 1 + safesite/templates/trouble.html | 114 ++++++++---- safesite/templatetags/__init__.py | 0 safesite/templatetags/myfilter.py | 8 + safesite/views.py | 142 +++++++++++---- sheetimage.png | Bin 0 -> 846 bytes 26 files changed, 631 insertions(+), 129 deletions(-) create mode 100644 safesite/migrations/0297_merge_20191217_1200.py create mode 100644 safesite/migrations/0298_auto_20191217_1200.py create mode 100644 safesite/migrations/0299_remove_menu_type.py create mode 100644 safesite/migrations/0300_menu_type.py create mode 100644 safesite/migrations/0301_auto_20191217_1414.py create mode 100644 safesite/migrations/0302_group_menulist.py create mode 100644 safesite/migrations/0303_trouble_yhlxo.py create mode 100644 safesite/migrations/0304_trouble_submituser.py create mode 100644 safesite/templatetags/__init__.py create mode 100644 safesite/templatetags/myfilter.py create mode 100644 sheetimage.png diff --git a/mysite/settings.py b/mysite/settings.py index 76d47c61..2a425a8a 100644 --- a/mysite/settings.py +++ b/mysite/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'safesite', + 'safesite.templatetags', 'groups', 'captcha', ] @@ -148,6 +149,7 @@ CELERY_ENABLE_UTC=True SESSION_EXPIRE_AT_BROWSER_CLOSE = True #SESSION_COOKIE_AGE = 2400 SESSION_SAVE_EVERY_REQUEST = True +# PERMISSIONS_SESSION_KEY = {} #权限字典 #日志配置 # 创建日志的路径 diff --git a/safesite/daoru.py b/safesite/daoru.py index f8c8f0ab..b8106134 100644 --- a/safesite/daoru.py +++ b/safesite/daoru.py @@ -10,6 +10,7 @@ import qrcode import os from django.contrib.auth.hashers import make_password from django.db.models import Q +from .tasks import send_wechatmsg def makeqr(data): upload_folder = 'media/qr_equipment' @@ -109,7 +110,7 @@ def drquestions(companyid,path,userid): obj.level = leveldict[level] else: obj.level = 1 - obj.usecoms = ','+companyid+',' + obj.usecomps = ','+companyid+',' obj.createuser = user obj.save() elif type == '多选': @@ -131,7 +132,7 @@ def drquestions(companyid,path,userid): obj.level = leveldict[level] else: obj.level = 1 - obj.usecoms = ','+companyid+',' + obj.usecomps = ','+companyid+',' obj.createuser = user obj.save() elif type == '判断': @@ -153,14 +154,166 @@ def drquestions(companyid,path,userid): obj.level = leveldict[level] else: obj.level = 1 - obj.usecoms = ','+companyid+',' + obj.usecomps = ','+companyid+',' obj.createuser = user obj.save() i = i +1 print(notinlist) return notinlist +def drtodotroubles(companyid,path,userid): + wb = load_workbook(path) + sheet = wb.worksheets[0] + # 验证文件内容 + if sheet['a2'].value != '检查类型': + return {'code':0,'msg':'excel格式错误!'} + if sheet['b2'].value != '隐患等级': + return {'code':0,'msg':'excel格式错误!'} + if sheet['h2'].value != '隐患地点': + return {'code':0,'msg':'excel格式错误!'} + partdict = {} + jclxdict = {} + yhdjdict = {} + yhlxdicto = {} + yhlbdict = {} + yhpgdict = {} + yhqydict = {} + parts = Partment.objects.filter(partlink__contains=',' + companyid + ',')|Partment.objects.filter(partid=companyid) #获取所有部门 + for i in parts: + partdict[i.partname] = i + for i in Dickey.objects.filter(dicparent__dicid=14): + jclxdict[i.dickeyname] = i + for i in Dickey.objects.filter(dicparent__dicid=18): + yhdjdict[i.dickeyname] = i + for i in Dickey.objects.filter(dicparent__dicid=15): + yhlxdicto[i.dickeyname] = i + for i in Dickey.objects.filter(Q(dicparent__dicid=16)|Q(dicparent__dicid=17)): + yhlbdict[i.dickeyname] = i + for i in Dickey.objects.filter(dicparent__dicid=19): + yhpgdict[i.dickeyname] = i + for i in Area.objects.filter(usecomp__partid=companyid): + yhqydict[i.name]=i + i = 3 + sheetimages = sheet._images #获取图片列表 + username = User.objects.get(userid=userid).username + while sheet['B'+str(i)].value: + jclx = sheet['A'+str(i)].value + yhdj = sheet['B'+str(i)].value + yhlxo = sheet['C'+str(i)].value + yhlb = sheet['D'+str(i)].value + yhpg = sheet['E'+str(i)].value + fxsj = sheet['F'+str(i)].value + yhqy = sheet['g'+str(i)].value + yhdd = sheet['h'+str(i)].value + fxbm = sheet['i'+str(i)].value + fxr = sheet['j'+str(i)].value + yhms = sheet['k'+str(i)].value + zgbm = sheet['l'+str(i)].value + zgr= sheet['m'+str(i)].value + zgqx = sheet['n'+str(i)].value + yyfx = sheet['o'+str(i)].value + zgcs = sheet['p'+str(i)].value + fcbm = sheet['q'+str(i)].value + fcr = sheet['r'+str(i)].value + obj = Trouble() + if jclx in jclxdict: + obj.jclx = jclxdict[jclx] + if yhdj in yhdjdict: + obj.yhdj = yhdjdict[yhdj] + if yhlxo in yhlxdicto: + obj.yhlxo = yhlxdicto[yhlxo] + for key in yhlbdict: + if key in yhlb: + obj.yhlb = yhlbdict[key] + obj.yhlx = obj.yhlb.dicparent + if yhpg in yhpgdict: + obj.yhpg = yhpgdict[yhpg] + if fxsj: + if isinstance(fxsj,datetime): + obj.fxsj = fxsj + else: + fxsj = fxsj.replace(' ','') + if '-' in fxsj: + obj.fxsj = datetime.strptime(fxsj,'%Y-%m-%d').date() + elif '.' in fdate: + obj.fxsj = datetime.strptime(fxsj,'%Y.%m.%d').date() + elif '/' in fdate: + obj.fxsj = datetime.strptime(fxsj,'%Y/%m/%d').date() + if yhqy in yhqydict: + obj.yhqy = yhqydict[yhqy] + if yhdd: + obj.yhdd = yhdd + if fxbm in partdict: + obj.fxbm = partdict[fxbm] + if fxr: + obj.fxr = User.objects.filter(name=fxr,ubelongpart=obj.fxbm)[0] + if yhms: + obj.yhms = yhms + if zgbm in partdict: + obj.zgbm = partdict[zgbm] + if zgr: + obj.zgr = User.objects.filter(name=zgr,ubelongpart=obj.zgbm)[0] + obj.todouser = obj.zgr + if zgqx: + if isinstance(zgqx,datetime): + obj.zgqx = zgqx + else: + zgqx = zgqx.replace(' ','') + if '-' in zgqx: + obj.zgqx = datetime.strptime(zgqx,'%Y-%m-%d').date() + elif '.' in fdate: + obj.zgqx = datetime.strptime(zgqx,'%Y.%m.%d').date() + elif '/' in fdate: + obj.zgqx = datetime.strptime(zgqx,'%Y/%m/%d').date() + if yyfx: + obj.yyfx = yyfx + if zgcs: + obj.zgcs = zgcs + if fcbm in partdict: + user = User.objects.filter(name=fcr,ubelongpart=partdict[fcbm])[0] + obj.fcr = user + for image in sheetimages: + if image.anchor._from.row == i-1 and image.anchor._from.col == 18: + imagedata = image._data()#图片二进制数据 + file_name = datetime.now().strftime('%Y%m%d%H%M%S') + '_yh.jpg' + user_upload_folder = os.path.join('media', username) + if not os.path.exists(user_upload_folder): + os.mkdir(user_upload_folder) + filepath = os.path.join(user_upload_folder, file_name) + filepath = filepath.replace('\\', '/') + with open(filepath,'wb') as f: + f.write(imagedata) + obj.yhtp = filepath + obj.yhzt = 3 #待整改 + obj.yhnum = 'YH'+datetime.now().strftime('%Y%m%d%H%M%S') + obj.usecomp = Partment.objects.get(partid=companyid) + obj.save() + postdict = { + 'touser': 'oPGqkweX75QtLmgehUN-ipR4hcyc', + 'template_id': 'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0', + "miniprogram": {"appid": "wx5c39b569f01c27db"}, + 'data': { + 'first': { + 'value': yhdj + '待整改:' + }, + 'keyword1': { + 'value': yhms + }, + 'keyword2': { + 'value': fxsj + }, + 'keyword3': { + 'value': yhdd + }, + 'remark': { + 'value': '请您及时完成整改。' + } + } + } + postdict['touser'] = obj.todouser.openid + send_wechatmsg.delay(postdict) + i = i + 1 def drequipments(companyid,path): @@ -298,12 +451,6 @@ def drequipments(companyid,path): return {'code':2,'msg':'部分未导入成功!','info':numsdict} - - - - - - def drusers(companyid,path): wb = load_workbook(path) sheet = wb.worksheets[0] @@ -373,6 +520,7 @@ def drusers(companyid,path): else: return {'code':1,'msg':'导入全部成功!'} + def drrisks(companyid,path): wb = load_workbook(path) sheet = wb.worksheets[0] @@ -530,6 +678,7 @@ def drrisks(companyid,path): i = i+1 return errorlist + def cal_riskact_level(riskact): levellist = [] for i in Risk.objects.filter(riskact=riskact): @@ -548,6 +697,7 @@ def cal_riskact_level(riskact): riskact.save() cal_area_risk_level(riskact.area) + def cal_area_risk_level(area): levellist = [] objs = RiskAct.objects.filter(area=area,type__dickeyid=396) @@ -570,6 +720,7 @@ def cal_area_risk_level(area): area.risklevel = None area.save() + def is_float(str): if str.count('.') == 1: #小数有且仅有一个小数点 left = str.split('.')[0] #小数点左边(整数位,可为正或负) diff --git a/safesite/migrations/0297_merge_20191217_1200.py b/safesite/migrations/0297_merge_20191217_1200.py new file mode 100644 index 00000000..7fbb12d3 --- /dev/null +++ b/safesite/migrations/0297_merge_20191217_1200.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.8 on 2019-12-17 12:00 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0296_auto_20191209_1029'), + ('safesite', '0296_auto_20191206_1559'), + ] + + operations = [ + ] diff --git a/safesite/migrations/0298_auto_20191217_1200.py b/safesite/migrations/0298_auto_20191217_1200.py new file mode 100644 index 00000000..8f1ccef4 --- /dev/null +++ b/safesite/migrations/0298_auto_20191217_1200.py @@ -0,0 +1,22 @@ +# Generated by Django 2.2.8 on 2019-12-17 12:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0297_merge_20191217_1200'), + ] + + operations = [ + migrations.RemoveField( + model_name='companyinfo', + name='liaison_fax', + ), + migrations.AddField( + model_name='menu', + name='type', + field=models.IntegerField(default=1), + ), + ] diff --git a/safesite/migrations/0299_remove_menu_type.py b/safesite/migrations/0299_remove_menu_type.py new file mode 100644 index 00000000..7d93103e --- /dev/null +++ b/safesite/migrations/0299_remove_menu_type.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.8 on 2019-12-17 12:01 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0298_auto_20191217_1200'), + ] + + operations = [ + migrations.RemoveField( + model_name='menu', + name='type', + ), + ] diff --git a/safesite/migrations/0300_menu_type.py b/safesite/migrations/0300_menu_type.py new file mode 100644 index 00000000..af5cd058 --- /dev/null +++ b/safesite/migrations/0300_menu_type.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.8 on 2019-12-17 12:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0299_remove_menu_type'), + ] + + operations = [ + migrations.AddField( + model_name='menu', + name='type', + field=models.IntegerField(default=1), + ), + ] diff --git a/safesite/migrations/0301_auto_20191217_1414.py b/safesite/migrations/0301_auto_20191217_1414.py new file mode 100644 index 00000000..caa02b7c --- /dev/null +++ b/safesite/migrations/0301_auto_20191217_1414.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2.8 on 2019-12-17 14:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0300_menu_type'), + ] + + operations = [ + migrations.AlterField( + model_name='menu', + name='deletemark', + field=models.IntegerField(default=1), + ), + migrations.AlterField( + model_name='menu', + name='icon', + field=models.CharField(blank=True, max_length=100, null=True), + ), + migrations.AlterField( + model_name='menu', + name='sortnum', + field=models.IntegerField(default=1), + ), + ] diff --git a/safesite/migrations/0302_group_menulist.py b/safesite/migrations/0302_group_menulist.py new file mode 100644 index 00000000..efbf0f83 --- /dev/null +++ b/safesite/migrations/0302_group_menulist.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.8 on 2019-12-17 15:06 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0301_auto_20191217_1414'), + ] + + operations = [ + migrations.AddField( + model_name='group', + name='menulist', + field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), blank=True, null=True, size=None), + ), + ] diff --git a/safesite/migrations/0303_trouble_yhlxo.py b/safesite/migrations/0303_trouble_yhlxo.py new file mode 100644 index 00000000..f6952905 --- /dev/null +++ b/safesite/migrations/0303_trouble_yhlxo.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.8 on 2019-12-18 09:18 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0302_group_menulist'), + ] + + operations = [ + migrations.AddField( + model_name='trouble', + name='yhlxo', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='yhlxo', to='safesite.Dickey'), + ), + ] diff --git a/safesite/migrations/0304_trouble_submituser.py b/safesite/migrations/0304_trouble_submituser.py new file mode 100644 index 00000000..627e4e4d --- /dev/null +++ b/safesite/migrations/0304_trouble_submituser.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.8 on 2019-12-19 16:00 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('safesite', '0303_trouble_yhlxo'), + ] + + operations = [ + migrations.AddField( + model_name='trouble', + name='submituser', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='submituser', to='safesite.User'), + ), + ] diff --git a/safesite/models.py b/safesite/models.py index 15a6c14b..ef6b0db0 100644 --- a/safesite/models.py +++ b/safesite/models.py @@ -162,6 +162,8 @@ class Trouble(models.Model): # 隐患排查 yhdd = models.CharField(max_length=200, default='test') yhdj = models.ForeignKey(Dickey, related_name='yhdj', on_delete=models.CASCADE, null=True, blank=True) + yhlxo = models.ForeignKey(Dickey, related_name='yhlxo', + on_delete=models.CASCADE, null=True, blank=True) yhlx = models.ForeignKey( Dicclass, related_name='yhlx', on_delete=models.CASCADE, null=True, blank=True) yhlb = models.ForeignKey(Dickey, related_name='yhlb', @@ -208,6 +210,8 @@ class Trouble(models.Model): # 隐患排查 pgyj = models.TextField(null=True, blank=True) # 评估退回意见 yhqy = models.ForeignKey( Area, on_delete=models.CASCADE, null=True, blank=True) # 隐患区域 + submituser = models.ForeignKey(User, related_name='submituser', + on_delete=models.CASCADE, null=True, blank=True) # 记录人 class TroubleAccess(models.Model): # 隐患流程表 @@ -357,6 +361,7 @@ class Group(models.Model): # 用户组,岗位 usecomp = models.ForeignKey( Partment, on_delete=models.CASCADE, related_name='usecompg', default=1) menulink = models.CharField(max_length=200, default='11') + menulist = ArrayField(models.IntegerField(), blank=True, null=True) class Groupuser2(models.Model): # 比较好的方式 @@ -374,9 +379,10 @@ class Menu(models.Model): # 菜单 detail = models.CharField(max_length=100, blank=True, null=True) parentid = models.ForeignKey( 'self', blank=True, null=True, on_delete=models.CASCADE) - icon = models.CharField(max_length=100, default='') - sortnum = models.IntegerField(default='1') - deletemark = models.IntegerField(default='1') + icon = models.CharField(max_length=100, blank=True, null=True) + sortnum = models.IntegerField(default=1) + deletemark = models.IntegerField(default=1) + type = models.IntegerField(default=1)#1是菜单,2是按钮 class Yjyc(models.Model): # 预警预测表 diff --git a/safesite/static/safesite/mystatic/js/util.js b/safesite/static/safesite/mystatic/js/util.js index 685679b2..8053b121 100644 --- a/safesite/static/safesite/mystatic/js/util.js +++ b/safesite/static/safesite/mystatic/js/util.js @@ -598,4 +598,54 @@ $.get('api/check_session',function(res){ }) } var t1 = window.setInterval(update, 1000 * 60) -var t2 = window.setInterval(checksession,1000*60*41) \ No newline at end of file +var t2 = window.setInterval(checksession,1000*60*41) + +//扩展easyui表单的验证 +$.extend($.fn.validatebox.defaults.rules, { + //验证汉字 + CHS: { + validator: function (value) { + return /^[\u0391-\uFFE5]+$/.test(value); + }, + message: '请输入汉字' + }, + //移动手机号码验证 + Mobile: {//value值为文本框中的值 + validator: function (value) { + var reg = /^1[3|4|5|8|9]\d{9}$/; + return reg.test(value); + }, + message: '请输入正确号码' + }, + //国内邮编验证 + ZipCode: { + validator: function (value) { + var reg = /^[0-9]\d{5}$/; + return reg.test(value); + }, + message: '6位数字' + }, + //数字 + Number: { + validator: function (value) { + var reg =/^[0-9]*$/; + return reg.test(value); + }, + message: '请输入数字' + }, + //非负整数 + Integer: { + validator: function (value) { + var reg = /^[1-9]\d*|0$/; + return reg.test(value); + }, + message: '请输入非负整数' + }, + Password:{ + validator:function(value){ + var reg = /(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}/; + return reg.test(value); + }, + message:'至少8位包含数字,大小写字母' + } +}) diff --git a/safesite/templates/abpart.html b/safesite/templates/abpart.html index f7bb676e..0d521950 100644 --- a/safesite/templates/abpart.html +++ b/safesite/templates/abpart.html @@ -18,15 +18,15 @@ +