This commit is contained in:
caoqianming 2023-08-06 23:31:54 +08:00
commit 5899831935
4 changed files with 58 additions and 5 deletions

Binary file not shown.

42
safesite/services.py Normal file
View File

@ -0,0 +1,42 @@
import locale
from croniter import croniter
from cron_descriptor import get_description
from safesite.models import MySchedule, GridTaskSet, PeriodicTask
period_dict = {
"days": "",
"hours": "小时",
"minutes": "分钟",
"seconds": "",
"microseconds": "毫秒"
}
def get_chinese_description(type:str = 'interval', data: dict = {}):
"""转换为汉语描述
"""
if type == 'interval':
return f"每隔{data['every']}{period_dict[data['period']]}"
elif type == 'crontab':
exp = f"{data['minute']} {data['hour']} {data['day_of_month']} {data['month_of_year']} {data['day_of_week']}"
try:
croniter(exp)
except ValueError:
return ''
locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8')
return get_description(exp)
return ''
def correct_myschedule():
qs = MySchedule.objects.all()
for ind, item in enumerate(qs):
typeset = item.typeset
if typeset == 'interval':
interval = item.interval
item.name = get_chinese_description(typeset, {'every': interval.every, 'period': interval.period})
item.save()
elif typeset == 'crontab':
crontab = item.crontab
item.name = get_chinese_description(typeset,
{"minute": crontab.minute, "hour": crontab.hour, "day_of_month": crontab.day_of_month,
"month_of_year": crontab.month_of_year, "day_of_week": crontab.day_of_week})
if item.name == '':
crontab.delete()
item.delete()

View File

@ -7,11 +7,11 @@
</div> </div>
<div data-options="region:'center'" style="width:100%;height:100%;padding:5px 15px;"> <div data-options="region:'center'" style="width:100%;height:100%;padding:5px 15px;">
<form method="post" id="schedulesetff"> <form method="post" id="schedulesetff">
<div style="margin-bottom:10px"> {% comment %} <div style="margin-bottom:10px">
<input id="name" class="easyui-textbox" name="name" style="width:480px" data-options=" <input id="name" class="easyui-textbox" name="name" style="width:480px" data-options="
label:'名称'" label:'名称'"
required=true> required=true>
</div> </div> {% endcomment %}
<div style="margin-bottom:5px"> <div style="margin-bottom:5px">
<select id="set" class="easyui-combobox" name="set" style="width:200px" data-options=" <select id="set" class="easyui-combobox" name="set" style="width:200px" data-options="
label:'配置方案', label:'配置方案',
@ -87,7 +87,7 @@
if (data.code == 1) { if (data.code == 1) {
$("#schedulesettable").datagrid('reload'); $("#schedulesettable").datagrid('reload');
$("#dd").dialog("close"); $("#dd").dialog("close");
} else { $.messager.alert('提示', '失败!'); } } else { $.messager.alert('提示', data.msg); }
$('#submitb').linkbutton('enable'); $('#submitb').linkbutton('enable');
}, },
}); });

View File

@ -5359,6 +5359,11 @@ def apitool(req):
print(partlink) print(partlink)
return JsonResponse({"code":1}) return JsonResponse({"code":1})
elif a == 'correct_myschedule':
from safesite.services import correct_myschedule
correct_myschedule()
return JsonResponse({"code":1})
@ -7913,6 +7918,7 @@ def apiriskact(req):
@apicheck_login @apicheck_login
def apimyschedule(req): def apimyschedule(req):
from safesite.services import get_chinese_description
a = req.GET.get('a') a = req.GET.get('a')
userid = req.session['userid'] userid = req.session['userid']
companyid = getcompany(userid) companyid = getcompany(userid)
@ -7930,8 +7936,9 @@ def apimyschedule(req):
elif a == 'add': elif a == 'add':
data = json.loads(req.body.decode('utf-8')) data = json.loads(req.body.decode('utf-8'))
if data['set'] == 'interval': if data['set'] == 'interval':
name = get_chinese_description('interval', data)
iobj, b = IntervalSchedule.objects.get_or_create(every=data['every'], period=data['period'], defaults={'every':data['every'], 'period':data['period']}) iobj, b = IntervalSchedule.objects.get_or_create(every=data['every'], period=data['period'], defaults={'every':data['every'], 'period':data['period']})
MySchedule.objects.create(name=data['name'], typeset=data['set'], interval=iobj, usecomp=Partment.objects.get(partid=companyid)) MySchedule.objects.create(name=name, typeset=data['set'], interval=iobj, usecomp=Partment.objects.get(partid=companyid))
elif data['set'] == 'crontab': elif data['set'] == 'crontab':
cron = { cron = {
'minute' : data['minute'], 'minute' : data['minute'],
@ -7941,8 +7948,12 @@ def apimyschedule(req):
'month_of_year': data['month_of_year'], 'month_of_year': data['month_of_year'],
'timezone': 'Asia/Shanghai' 'timezone': 'Asia/Shanghai'
} }
# name = '测试'
name = get_chinese_description('crontab', cron)
if name == '':
return JsonResponse({'code': 0, 'msg': '时间配置格式错误'})
iobj, b = CrontabSchedule.objects.get_or_create(**cron, defaults=cron) iobj, b = CrontabSchedule.objects.get_or_create(**cron, defaults=cron)
MySchedule.objects.create(name=data['name'], typeset=data['set'], crontab=iobj, usecomp=Partment.objects.get(partid=companyid)) MySchedule.objects.create(name=name, typeset=data['set'], crontab=iobj, usecomp=Partment.objects.get(partid=companyid))
return JsonResponse({'code': 1}) return JsonResponse({'code': 1})
elif a == 'del': elif a == 'del':
user = User.objects.get(userid=userid) user = User.objects.get(userid=userid)