Skip to content

Commit

Permalink
添加对worst10department设置门限的接口,添加top10ne,worst10department按年月删除的接口,修复导出d…
Browse files Browse the repository at this point in the history
…ocx的bug。
  • Loading branch information
jiangjiahe committed Mar 14, 2019
1 parent e14bf83 commit c2e072f
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 30 deletions.
33 changes: 26 additions & 7 deletions report/statistics_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
collect_deal_in_time_rate, collect_deal_quality, collect_specific_dealtime_amount
from utils.data_collect_AN import get_top10_ne, get_sum_amount, get_district_malfunction_reason, get_worst10_department
from utils.data_collect_weekly import collect_longtime_weekly, collect_track_weekly
from utils.data_parser import parse_indicators_xls, parse_malfunction_data_xlsx, parse_malfunction_longtime, parse_malfunction_track
from utils.data_parser import parse_indicators_xls, parse_malfunction_data_xlsx, parse_malfunction_longtime, parse_malfunction_track, \
parse_malfunction_data_xlsx_new
from utils.data_remove_AN import removeTop10Ne, removeWorst10department
from utils.decode_base64img import save_base64
from utils.export import export_top10ne
from utils.export_docx_from_tpl import monthly_export_docx, quarterly_export_docx, weekly_export_docx
Expand Down Expand Up @@ -142,11 +144,6 @@ def get(self, request, begin_date, end_date):
result_json['process_time'] = str(datetime.datetime.now() - st)
return JsonResponse(data=result_json, safe=False)

# except Exception as e:
result_json['status'] = 'fail'
result_json['msg'] = str(e)
return JsonResponse(data=result_json, safe=False)


class SpecificDealtimeAmountView(View):

Expand Down Expand Up @@ -333,6 +330,9 @@ def post(self, request, filename):
if filename == 'mf_data':
parse_malfunction_data_xlsx(file)
result_json['msg'] = '故障数据上传完成'
if filename == 'mf_data_new':
parse_malfunction_data_xlsx_new(file)
result_json['msg'] = '故障数据上传完成'
if filename == 'longtime_data':
parse_malfunction_longtime(file.read())
result_json['msg'] = '超72小时工单文件上传完成'
Expand Down Expand Up @@ -387,6 +387,10 @@ def get(self, request, year, month):
st = datetime.datetime.now()
result_json = dict()
rs_list = []
amount = request.query_params.get('amount', '10')
level = request.query_params.get('level', '85')
if amount != '10' or level != '85':
removeWorst10department(year, month)
try:
qs = StatisticsMonthlyWorst10Department.objects.filter(yearNum=year, monthNum=month)
if qs:
Expand All @@ -398,7 +402,8 @@ def get(self, request, year, month):
intime_rate=str(q.intimeRate))
rs_list.append(d)
else:
rs_list = get_worst10_department(begin_date, end_date)

rs_list = get_worst10_department(begin_date, end_date, amount, level)
for rs in rs_list:
StatisticsMonthlyWorst10Department(yearNum=year, monthNum=month,
department=rs['department'],
Expand Down Expand Up @@ -560,3 +565,17 @@ def post(self, request):
if weekly_longtime:
save_base64(weekly_longtime, 'weekly_longtime_' + beginDate + '_' + endDate + '.png')
return JsonResponse(data={'msg': 'OK'})


class MonthlyRemoveView(APIView):
def post(self, request):
year = request.POST.get('year', '')
month = request.POST.get('month', '')
rs = ''
if request.POST.get('top10ne', '') == 'y':
rs += removeTop10Ne(year, month)
print('removeTop10Ne')
if request.POST.get('worst10department', '') == 'y':
rs += removeWorst10department(year, month)
print('removeWorst10department')
return JsonResponse(data={'msg': rs})
7 changes: 4 additions & 3 deletions report/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from report.statistics_views import OrderAmountView, IntimeRateView, DealtimeView, Over48RateView, DealQualityView, SpecificDealtimeAmountView, \
Top10NeView, SumAmountComparedView, DistrictReasonView, FileUploadView, Worst10DepartmentView, CityRateView, Top10NeExportView, \
WeeklyLongTimeView, WeeklyTrackView, IndicatorUploadView, DocxExportView, Base64ImageView
WeeklyLongTimeView, WeeklyTrackView, IndicatorUploadView, DocxExportView, Base64ImageView, MonthlyRemoveView

from django.views.decorators.cache import cache_page

Expand All @@ -23,13 +23,14 @@
path('upload/<filename>', FileUploadView.as_view()),
# 指标文件上传
path('indicator/<year>/<num>', IndicatorUploadView.as_view()),
path('worst10department/<int:year>/<int:month>', cache_page(60 * 60 * 24)(Worst10DepartmentView.as_view())),
path('worst10department/<int:year>/<int:month>', Worst10DepartmentView.as_view()),
path('longtime/', WeeklyLongTimeView.as_view()),
path('track/<str:begin_date>/<str:end_date>/', WeeklyTrackView.as_view()),
path('top10ne/export/<int:year>/<int:month>', Top10NeExportView.as_view()),
# docx导出
path('docx/<str:type>/<str:arg1>/<str:arg2>', DocxExportView.as_view()),
# base64图片编码上传
path('image', Base64ImageView.as_view())
path('image', Base64ImageView.as_view()),
path('remove/', MonthlyRemoveView.as_view())

]
20 changes: 9 additions & 11 deletions utils/data_collect_AN.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
def get_top10_ne(begin_datetime, end_datetime, profession):
qs = MalfunctionData.objects.filter(distributeTime__range=(begin_datetime, end_datetime),
originProfession=profession,
malfunctionSource='集中告警系统报故障',
type='处理',
ne__isnull=False) \
.exclude(ne='') \
.values('city', 'ne') \
Expand Down Expand Up @@ -102,15 +100,15 @@ def get_district_malfunction_reason(begin_date, end_date):
from django.db import connection


def get_worst10_department(begin_datetime, end_datetime):
def get_worst10_department(begin_datetime, end_datetime, amount=10, level=85):
with connection.cursor() as cursor:
rs = cursor.execute("""SELECT T1.dutyDepartment,ROUND( T1.co / T2.totalCo * 100, 2 ) inTimeRate,T1.co inTimeAmount ,T2.totalCo
cursor.execute("""SELECT T1.dutyDepartment,ROUND( T1.co / T2.totalCo * 100, 2 ) inTimeRate,T1.co inTimeAmount ,T2.totalCo
FROM
( SELECT dutyDepartment, COUNT( * ) co FROM report_malfunction_data WHERE isTimeOut = '否' AND distributeTime BETWEEN %s AND %s GROUP BY dutyDepartment ) T1,
( SELECT dutyDepartment, COUNT( * ) totalCo FROM report_malfunction_data WHERE distributeTime BETWEEN %s AND %s GROUP BY dutyDepartment ) T2
WHERE T1.dutyDepartment = T2.dutyDepartment
ORDER BY inTimeRate,inTimeAmount DESC """,
[begin_datetime, end_datetime, begin_datetime, end_datetime])
ORDER BY inTimeRate DESC """,
[begin_datetime, end_datetime, begin_datetime, end_datetime])
rows = cursor.fetchall()
result_list = []
for row in rows:
Expand All @@ -120,8 +118,8 @@ def get_worst10_department(begin_datetime, end_datetime):
d['intime_amount'] = str(row[2])
d['timeout_admount'] = str(row[3] - row[2])
d['intime_rate'] = str(row[1])
if row[3] - row[2] >= 30:
result_list.append(d)
if len(result_list) == 10:
return result_list
return result_list
result_list.append(d)
result_list = sorted(result_list, key=lambda x: float(x['intime_rate']))
result_list = [x for x in result_list if float(x['timeout_admount']) >= float(amount) and float(x['intime_rate']) <= float(level)]

return result_list[:10]
17 changes: 17 additions & 0 deletions utils/data_remove_AN.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = silenthz
__date__ = 2019/3/14
"""
from report.models import StatisticsTop10Ne, StatisticsMonthlyWorst10Department


def removeTop10Ne(year, month):
StatisticsTop10Ne.objects.filter(yearNum=int(year), monthNum=int(month)).delete()
return '%s-%s Top10Ne删除成功' % (year, month) + ';\n'


def removeWorst10department(year, month):
StatisticsMonthlyWorst10Department.objects.filter(yearNum=int(year), monthNum=int(month)).delete()
return '%s-%s Worst10Department删除成功' % (year, month) + ';\n'
Binary file not shown.
30 changes: 21 additions & 9 deletions utils/export_docx_from_tpl.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def monthly_export_docx(year, month):
context['G4_Repeater'] = []
qs_Net_4G = StatisticsTop10Ne.objects.filter(yearNum=year, monthNum=month, profession='Net_4G')
qs_Repeater = StatisticsTop10Ne.objects.filter(yearNum=year, monthNum=month, profession='Repeater')

for q in qs_Net_4G:
d = dict()
q_dict = model_to_dict(q, exclude=['id', 'yearNum', 'monthNum', 'profession'])
Expand All @@ -50,8 +51,11 @@ def monthly_export_docx(year, month):
for k in q_dict:
new_k = k + '_' + 'Repeater'
d[new_k] = q_dict[k]
context['G4_Repeater'][i].update(d)
i += 1
if i < len(context['G4_Repeater']):
context['G4_Repeater'][i].update(d)
i += 1
else:
context['G4_Repeater'].append(d)

i = 0
context['CDMA_Transmission'] = []
Expand All @@ -71,8 +75,11 @@ def monthly_export_docx(year, month):
for k in q_dict:
new_k = k + '_' + 'Transmission'
d[new_k] = q_dict[k]
context['CDMA_Transmission'][i].update(d)
i += 1
if i < len(context['CDMA_Transmission']):
context['CDMA_Transmission'][i].update(d)
i += 1
else:
context['CDMA_Transmission'].append(d)

i = 0
context['Optical_Dynamics'] = []
Expand All @@ -92,8 +99,11 @@ def monthly_export_docx(year, month):
for k in q_dict:
new_k = k + '_' + 'Dynamics'
d[new_k] = q_dict[k]
context['Optical_Dynamics'][i].update(d)
i += 1
if i < len(context['Optical_Dynamics']):
context['Optical_Dynamics'][i].update(d)
i += 1
else:
context['Optical_Dynamics'].append(d)

i = 0
context['Exchange_Data'] = []
Expand All @@ -113,8 +123,11 @@ def monthly_export_docx(year, month):
for k in q_dict:
new_k = k + '_' + 'Data'
d[new_k] = q_dict[k]
context['Exchange_Data'][i].update(d)
i += 1
if i < len(context['Exchange_Data']):
context['Exchange_Data'][i].update(d)
i += 1
else:
context['Exchange_Data'].append(d)

# 五、处理及时率差的部门
context['departments'] = []
Expand Down Expand Up @@ -255,7 +268,6 @@ def weekly_export_docx(beginDate, endDate):
tpl.replace_pic('weekly_track.png', 'utils/export_docx/image/weekly_track_' + beginDate + '_' + endDate + '.png')
tpl.replace_pic('weekly_longtime.png', 'utils/export_docx/image/weekly_longtime_' + beginDate + '_' + endDate + '.png')


tpl.render(context)
tpl.save(filepath)
return filepath, filename

0 comments on commit c2e072f

Please sign in to comment.