Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
inspect_report
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhengjinlei
inspect_report
Commits
15bda856
Commit
15bda856
authored
Apr 27, 2020
by
lvshibao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码整理
parent
7461aed9
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
496 additions
and
675 deletions
+496
-675
agencyapi.py
src/inspect_report/api/agencyapi.py
+0
-1
dataapi.py
src/inspect_report/api/dataapi.py
+12
-205
tasksapi.py
src/inspect_report/api/tasksapi.py
+196
-457
cron.py
src/inspect_report/cron.py
+12
-12
dbhelper.py
src/inspect_report/dbhelper.py
+246
-0
pagehelper.py
src/inspect_report/pagehelper.py
+30
-0
No files found.
src/inspect_report/api/agencyapi.py
View file @
15bda856
...
@@ -98,7 +98,6 @@ class AgencyApi(viewsets.ViewSet):
...
@@ -98,7 +98,6 @@ class AgencyApi(viewsets.ViewSet):
"""
"""
city_id
=
req
.
GET
.
get
(
'city_id'
,
''
)
city_id
=
req
.
GET
.
get
(
'city_id'
,
''
)
country_id
=
req
.
GET
.
get
(
'country_id'
,
''
)
country_id
=
req
.
GET
.
get
(
'country_id'
,
''
)
team_list
=
list
()
top
=
Country
.
objects
.
filter
(
id
=
city_id
)
.
first
()
top
=
Country
.
objects
.
filter
(
id
=
city_id
)
.
first
()
if
top
is
not
None
:
if
top
is
not
None
:
if
top
.
parent
is
None
:
if
top
.
parent
is
None
:
...
...
src/inspect_report/api/dataapi.py
View file @
15bda856
# coding: utf-8
# coding: utf-8
from
django.db.models
import
Count
,
Sum
,
Avg
from
rest_framework
import
viewsets
from
rest_framework
import
viewsets
from
rest_framework.decorators
import
action
from
rest_framework.decorators
import
action
from
rest_framework.request
import
Request
from
rest_framework.request
import
Request
from
before_request
import
before_request
from
before_request
import
before_request
from
inspect_report.agency
import
get_team_names
,
get_agent_name
from
inspect_report.dbhelper
import
db_static_score
,
db_seat_rule
,
db_seat_check
,
db_seat_area
,
db_static_rule
from
inspect_report.models
import
Tasks
,
CheckSession
,
RulesStat
,
SeatStat
,
ScoreStat
,
Round
,
Seat
,
Country
from
datetime
import
datetime
import
json
from
datetime
import
datetime
,
timedelta
from
config.config
import
TABLE_PRE
,
name_list
from
django.http
import
HttpResponse
from
django.http
import
HttpResponse
import
logging
import
logging
from
pypinyin
import
Style
,
pinyin
import
csv
import
csv
import
codecs
import
codecs
from
django.utils.http
import
urlquote
from
django.utils.http
import
urlquote
from
inspect_report.pagehelper
import
set_object_seat_name
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
...
@@ -28,27 +25,12 @@ class DataApi(viewsets.ViewSet):
...
@@ -28,27 +25,12 @@ class DataApi(viewsets.ViewSet):
@
before_request
@
before_request
def
static_score_export
(
self
,
req
:
Request
):
def
static_score_export
(
self
,
req
:
Request
):
"""
"""
概览-
地市
得分统计-导出
概览-得分统计-导出
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
GET
.
get
(
'city'
,
None
)
country_id
=
req
.
GET
.
get
(
'country'
,
None
)
sort
=
req
.
GET
.
get
(
'sort'
,
'-avg_score'
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
print
(
type
(
country_id
))
team_names
=
get_team_names
(
city_id
,
country_id
)
task_condition
[
'task__in'
]
=
team_names
rules
=
ScoreStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'area'
:
"task"
})
\
rules
=
db_static_score
(
req
)
.
values
(
'area'
)
.
annotate
(
avg_score_svc
=
Round
(
Avg
(
'service_score'
),
2
),
avg_score_bus
=
Round
(
Avg
(
'business_score'
),
2
),
avg_score
=
Round
(
Avg
(
'score'
),
2
),
total_session
=
Sum
(
'total_session'
),
validate_num
=
Sum
(
'validate_num'
),
validate_zero
=
Sum
(
'validate_zero'
))
\
.
order_by
(
sort
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
file_name
=
'组长概览_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
file_name
=
'组长概览_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
response
[
'Content-Type'
]
=
'application/octet-stream'
response
[
'Content-Type'
]
=
'application/octet-stream'
...
@@ -74,41 +56,9 @@ class DataApi(viewsets.ViewSet):
...
@@ -74,41 +56,9 @@ class DataApi(viewsets.ViewSet):
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
GET
.
get
(
'city'
,
None
)
country_id
=
req
.
GET
.
get
(
'country'
,
None
)
team_id
=
req
.
GET
.
get
(
'country'
,
None
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
data_sort
=
db_static_rule
(
req
)
task_condition
[
'task__in'
]
=
team_names
call_count
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
aggregate
(
Sum
(
"validate_session"
))[
'validate_session__sum'
]
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
task_condition
[
'task__in'
]
=
team_names
# tasks = RulesStat.objects.filter(**task_condition).values('rule', 'sessionCollectionId', 'rule_num')
tasks
=
RulesStat
.
objects
.
all
()
.
filter
(
**
task_condition
)
\
.
extra
(
select
=
{
'rule'
:
"rule"
,
'sessionCollectionId'
:
'sessionCollectionId'
})
\
.
values
(
'rule'
,
'sessionCollectionId'
)
.
annotate
(
rule_num
=
Count
(
'id'
))
.
order_by
(
'-rule_num'
)
return_data
=
{}
for
t
in
tasks
:
name
=
t
[
'rule'
]
if
name
in
return_data
.
keys
():
return_data
[
name
][
'count'
]
+=
int
(
t
[
'rule_num'
])
else
:
return_data
[
name
]
=
{
'count'
:
int
(
t
[
'rule_num'
]),
'tables'
:
[]}
if
t
[
'sessionCollectionId'
]
not
in
return_data
[
name
][
'tables'
]:
return_data
[
name
][
'tables'
]
.
append
(
t
[
'sessionCollectionId'
])
data_sort
=
[]
for
k
,
v
in
return_data
.
items
():
v
[
'rule'
]
=
k
v
[
'ratio'
]
=
round
(
v
[
'count'
]
/
call_count
,
2
)
if
call_count
else
0
v
[
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
v
[
'ratio'
]
*
100
))
v
[
'call_count'
]
=
call_count
data_sort
.
append
(
v
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
file_name
=
'违规项分析_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
file_name
=
'违规项分析_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
response
[
'Content-Type'
]
=
'application/octet-stream'
response
[
'Content-Type'
]
=
'application/octet-stream'
...
@@ -133,49 +83,9 @@ class DataApi(viewsets.ViewSet):
...
@@ -133,49 +83,9 @@ class DataApi(viewsets.ViewSet):
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
GET
.
get
(
'city'
,
None
)
country_id
=
req
.
GET
.
get
(
'country'
,
None
)
team_id
=
req
.
GET
.
get
(
'team'
,
None
)
agent_name
=
req
.
GET
.
get
(
'seat'
,
''
)
sort
=
req
.
GET
.
get
(
'sort'
,
'des'
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
''
)
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
task_condition
[
'task__in'
]
=
team_names
if
agent_name
:
total_count
,
data_sort
=
db_seat_rule
(
req
)
task_condition
[
'agentName'
]
=
agent_name
if
sort
==
'des'
:
seats
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'agentName'
:
'agentName'
})
\
.
values
(
'agentName'
)
.
annotate
(
remainTime
=
Sum
(
'remainTime'
),
validate_session
=
Sum
(
'validate_session'
),
total_session
=
Sum
(
'total_session'
))
.
order_by
(
'-validate_session'
)
else
:
seats
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'agentName'
:
'agentName'
})
\
.
values
(
'agentName'
)
.
annotate
(
remainTime
=
Sum
(
'remainTime'
),
validate_session
=
Sum
(
'validate_session'
),
total_session
=
Sum
(
'total_session'
))
.
order_by
(
'validate_session'
)
return_data
=
[]
agent_name_set
=
set
()
for
s
in
seats
:
detail
=
{
'agentName'
:
s
[
'agentName'
],
'validate_session'
:
s
[
'validate_session'
],
'remainTime'
:
s
[
'remainTime'
],
'total_session'
:
s
[
'total_session'
],
'ratio'
:
round
(
s
[
'validate_session'
]
/
s
[
'total_session'
],
2
)}
return_data
.
append
(
detail
)
agent_name_set
.
add
(
s
[
'agentName'
])
seat_code_name_lists
=
Seat
.
objects
.
filter
(
code__in
=
agent_name_set
)
.
values
(
'code'
,
'name'
)
seat_code_name_dict
=
dict
()
for
seat_code_name
in
seat_code_name_lists
:
seat_code_name_dict
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
if
sort
==
'asc'
:
data_sort
=
sorted
(
return_data
,
key
=
lambda
x
:
x
[
'ratio'
])
for
i
in
range
(
len
(
data_sort
)):
data_sort
[
i
][
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
data_sort
[
i
][
'ratio'
]
*
100
))
data_sort
[
i
][
'seatName'
]
=
seat_code_name_dict
.
get
(
data_sort
[
i
][
'agentName'
],
data_sort
[
i
][
'agentName'
])
else
:
data_sort
=
sorted
(
return_data
,
key
=
lambda
x
:
x
[
'ratio'
],
reverse
=
True
)
for
i
in
range
(
len
(
data_sort
)):
data_sort
[
i
][
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
data_sort
[
i
][
'ratio'
]
*
100
))
data_sort
[
i
][
'seatName'
]
=
seat_code_name_dict
.
get
(
data_sort
[
i
][
'agentName'
],
data_sort
[
i
][
'agentName'
])
response
=
HttpResponse
(
content_type
=
'text/csv'
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
file_name
=
'坐席违规_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
file_name
=
'坐席违规_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
response
[
'Content-Type'
]
=
'application/octet-stream'
response
[
'Content-Type'
]
=
'application/octet-stream'
...
@@ -200,33 +110,8 @@ class DataApi(viewsets.ViewSet):
...
@@ -200,33 +110,8 @@ class DataApi(viewsets.ViewSet):
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
GET
.
get
(
'city'
,
None
)
scores
=
db_seat_area
(
req
)
country_id
=
req
.
GET
.
get
(
'country'
,
None
)
scores
=
set_object_seat_name
(
scores
)
team_id
=
req
.
GET
.
get
(
'team'
,
None
)
agent_name
=
req
.
GET
.
get
(
'seat'
,
''
)
sort
=
req
.
GET
.
get
(
'sort'
,
'-avg_score'
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
''
)
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
task_condition
[
'task__in'
]
=
team_names
if
agent_name
:
task_condition
[
'agentName'
]
=
agent_name
# , 'total_session', 'validate_num', 'validate_session', 'validate_zero'
rules
=
ScoreStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'area'
:
"task"
,
'agentName'
:
'agentName'
})
\
.
values
(
'area'
,
'agentName'
)
.
annotate
(
avg_score_svc
=
Round
(
Avg
(
'service_score'
),
2
),
avg_score_bus
=
Round
(
Avg
(
'business_score'
),
2
),
avg_score
=
Round
(
Avg
(
'score'
),
2
),
total_session
=
Sum
(
'total_session'
),
validate_num
=
Sum
(
'validate_num'
),
validate_zero
=
Sum
(
'validate_zero'
))
\
.
order_by
(
sort
)
agent_names
=
[
x
[
'agentName'
]
for
x
in
rules
]
seats_code_name_list
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
seats_code_name
=
dict
()
for
seat_code_name
in
seats_code_name_list
:
seats_code_name
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
for
rule_dict
in
rules
:
rule_dict
[
'seatName'
]
=
seats_code_name
.
get
(
rule_dict
[
'agentName'
],
rule_dict
[
'agentName'
])
response
=
HttpResponse
(
content_type
=
'text/csv'
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
file_name
=
'坐席成绩_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
file_name
=
'坐席成绩_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
response
[
'Content-Type'
]
=
'application/octet-stream'
response
[
'Content-Type'
]
=
'application/octet-stream'
...
@@ -238,7 +123,7 @@ class DataApi(viewsets.ViewSet):
...
@@ -238,7 +123,7 @@ class DataApi(viewsets.ViewSet):
header
=
[
'地市'
,
'坐席工号'
,
'坐席名称'
,
'全部会话数'
,
'触发违规项次数'
,
'服务类平均分'
,
'业务类平均分'
,
'平均分'
,
'触发0分项次数'
]
header
=
[
'地市'
,
'坐席工号'
,
'坐席名称'
,
'全部会话数'
,
'触发违规项次数'
,
'服务类平均分'
,
'业务类平均分'
,
'平均分'
,
'触发0分项次数'
]
writer
.
writerow
(
header
)
writer
.
writerow
(
header
)
# 设置表数据
# 设置表数据
for
r
in
rul
es
:
for
r
in
scor
es
:
row
=
[
r
[
'area'
],
r
[
'agentName'
],
r
[
'seatName'
],
r
[
'total_session'
],
r
[
'validate_num'
],
r
[
'avg_score_svc'
],
row
=
[
r
[
'area'
],
r
[
'agentName'
],
r
[
'seatName'
],
r
[
'total_session'
],
r
[
'validate_num'
],
r
[
'avg_score_svc'
],
r
[
'avg_score_bus'
],
r
[
'avg_score'
],
r
[
'validate_zero'
]]
r
[
'avg_score_bus'
],
r
[
'avg_score'
],
r
[
'validate_zero'
]]
writer
.
writerow
(
row
)
writer
.
writerow
(
row
)
...
@@ -251,85 +136,7 @@ class DataApi(viewsets.ViewSet):
...
@@ -251,85 +136,7 @@ class DataApi(viewsets.ViewSet):
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
GET
.
get
(
'city'
,
''
)
total_count
,
return_data
=
db_seat_check
(
req
)
country_id
=
req
.
GET
.
get
(
'country'
,
''
)
team_id
=
req
.
GET
.
get
(
'team'
,
''
)
agent_name
=
req
.
GET
.
get
(
'agentName'
,
''
)
start_date
=
req
.
GET
.
get
(
'start_date'
,
(
datetime
.
now
()
+
timedelta
(
days
=-
1
))
.
strftime
(
'
%
Y-
%
m-
%
d'
))
end_date
=
req
.
GET
.
get
(
'end_date'
,
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d'
))
task_condition
=
{
'hasCheck'
:
1
,
'createdAt__gte'
:
start_date
,
'createdAt__lt'
:
end_date
+
' 23:59:59'
}
if
city_id
:
city
=
Country
.
objects
.
filter
(
id
=
city_id
)
.
first
()
if
city
.
parent
is
not
None
:
task_condition
[
'name__startswith'
]
=
city
.
name
tasks
=
Tasks
.
objects
.
filter
(
**
task_condition
)
.
values
(
'id'
,
'name'
,
'sessionCollectionId'
)
task_dict
=
{}
task_name_dict
=
{}
for
t
in
tasks
:
task_name_dict
[
t
[
'id'
]]
=
t
[
'name'
]
if
t
[
'sessionCollectionId'
]
in
task_dict
.
keys
():
task_dict
[
t
[
'sessionCollectionId'
]]
.
append
(
t
[
'id'
])
else
:
task_dict
[
t
[
'sessionCollectionId'
]]
=
[
t
[
'id'
],
]
agent_names
=
get_agent_name
(
city_id
,
country_id
,
team_id
,
agent_name
)
if
len
(
agent_names
)
>
0
:
seat_code_name_lists
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
else
:
seat_code_name_lists
=
Seat
.
objects
.
filter
()
.
values
(
'code'
,
'name'
)
seat_code_name_dict
=
dict
()
for
seat_code_name
in
seat_code_name_lists
:
seat_code_name_dict
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
return_data
=
[]
for
k
,
v
in
task_dict
.
items
():
table_name
=
TABLE_PRE
+
k
tn
=
CheckSession
.
set_table
(
table_name
)
session_condition
=
{
'taskId__in'
:
v
}
if
len
(
agent_names
)
>
0
:
session_condition
[
'agentName__in'
]
=
agent_names
checks
=
tn
.
objects
.
filter
(
**
session_condition
)
.
values
(
'id'
,
'createdAt'
,
'agentName'
,
'extra'
,
'taskId'
,
'remainTime'
,
'startTime'
,
'closeTime'
,
'scoreItemRecord'
,
'sessionId'
)
for
check
in
checks
:
result
=
check
[
'scoreItemRecord'
]
t_name
=
task_name_dict
[
check
[
'taskId'
]]
total_score
=
100
extra
=
json
.
loads
(
check
[
'extra'
])
remain
=
0
if
check
[
'startTime'
]
and
check
[
'closeTime'
]:
start
=
datetime
.
strptime
(
check
[
'startTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
close
=
datetime
.
strptime
(
check
[
'closeTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
remain
=
int
(
close
-
start
)
f_name
=
extra
[
'filename'
]
if
extra
and
'filename'
in
extra
.
keys
()
else
''
detail
=
{
'id'
:
check
[
'id'
],
'sessionId'
:
check
[
'sessionId'
],
'createdAt'
:
check
[
'createdAt'
],
'area'
:
t_name
.
split
(
'_'
)[
0
],
'seatName'
:
seat_code_name_dict
.
get
(
check
[
'agentName'
],
check
[
'agentName'
]),
'agentName'
:
check
[
'agentName'
],
'filename'
:
f_name
,
'remainTime'
:
remain
,
'sessionCollectionId'
:
k
,
'taskId'
:
check
[
'taskId'
]}
rule_detail
=
{
'fwyy'
:
15
,
'kcb'
:
5
,
'jsy'
:
3
,
'fwtd'
:
5
,
'yssb'
:
5
,
'jysb'
:
5
,
'yycl'
:
10
,
'ywcc'
:
10
,
'yyjlz'
:
10
,
'fwjs'
:
10
,
'wtgbj'
:
2
,
'cgjxxhs'
:
20
,
'wgzlf'
:
100
,
'mgc'
:
100
}
if
result
:
data
=
json
.
loads
(
result
)
for
d
in
data
:
if
'scoreItemName'
in
d
.
keys
()
and
'score'
in
d
.
keys
():
item_score
=
0
if
d
[
'score'
]
and
d
[
'score'
]
>
0
else
1
name_py
=
pinyin
(
d
[
'scoreItemName'
],
style
=
Style
.
FIRST_LETTER
,
strict
=
False
)
item_name
=
''
.
join
([
x
[
0
]
for
x
in
name_py
])
# detail[item_name] = {d['scoreItemName']: item_score}
if
item_name
in
rule_detail
.
keys
():
if
item_score
==
0
:
total_score
-=
rule_detail
[
item_name
]
rule_detail
[
item_name
]
=
item_score
for
kk
,
vv
in
rule_detail
.
items
():
if
vv
>
1
:
rule_detail
[
kk
]
=
1
if
rule_detail
[
'wgzlf'
]
==
0
or
rule_detail
[
'mgc'
]
==
0
:
total_score
=
0
detail
.
update
(
rule_detail
)
detail
[
'total_score'
]
=
total_score
return_data
.
append
(
detail
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
response
=
HttpResponse
(
content_type
=
'text/csv'
)
file_name
=
'质检绩效考核_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
file_name
=
'质检绩效考核_'
+
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d
%
H
%
M
%
S'
)
+
'.csv'
...
...
src/inspect_report/api/tasksapi.py
View file @
15bda856
# coding: utf-8
# coding: utf-8
from
django.shortcuts
import
render
from
django.shortcuts
import
render
from
django.db.models
import
Count
,
Sum
,
Avg
,
Q
from
django.db.models
import
Sum
,
Avg
from
rest_framework
import
viewsets
from
rest_framework
import
viewsets
from
rest_framework.decorators
import
action
from
rest_framework.decorators
import
action
from
rest_framework.request
import
Request
from
rest_framework.request
import
Request
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
before_request
import
before_request
from
before_request
import
before_request
from
inspect_report.agency
import
get_team_names
,
get_agent_name
from
inspect_report.agency
import
get_team_names
from
inspect_report.models
import
Tasks
,
CheckSession
,
RulesStat
,
SeatStat
,
ScoreStat
,
Round
,
Team
,
Country
,
Seat
from
inspect_report.dbhelper
import
db_static_score
,
db_seat_rule
,
db_seat_check
,
db_seat_area
,
db_static_rule
from
inspect_report.models
import
RulesStat
,
SeatStat
,
ScoreStat
,
Round
,
Seat
import
json
import
json
from
datetime
import
datetime
,
timedelta
from
config.config
import
TABLE_PRE
,
name_list
,
name_code_dict
from
django.views.decorators.clickjacking
import
xframe_options_exempt
from
django.views.decorators.clickjacking
import
xframe_options_exempt
import
logging
import
logging
from
pypinyin
import
Style
,
pinyin
from
django.core.paginator
import
Paginator
,
EmptyPage
,
PageNotAnInteger
from
inspect_report.pagehelper
import
page_with_seat_name
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
...
@@ -58,126 +57,126 @@ class TasksApi(viewsets.ViewSet):
...
@@ -58,126 +57,126 @@ class TasksApi(viewsets.ViewSet):
extra
=
[{
'code'
:
seat_id
,
'name'
:
seat_id
}
for
seat_id
in
seat_ids
if
seat_id
not
in
seat_ids_with_name
]
extra
=
[{
'code'
:
seat_id
,
'name'
:
seat_id
}
for
seat_id
in
seat_ids
if
seat_id
not
in
seat_ids_with_name
]
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
list
(
seat_id_names
)
+
extra
})
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
list
(
seat_id_names
)
+
extra
})
@
action
([
'post'
],
detail
=
False
)
#
@action(['post'], detail=False)
def
rule
(
self
,
req
:
Request
):
#
def rule(self, req: Request):
"""
#
"""
获取违规项分析
#
获取违规项分析
:param req:
#
:param req:
:return:
#
:return:
"""
#
"""
task_id
=
req
.
data
.
get
(
'task'
,
''
)
#
task_id = req.data.get('task', '')
agent_name
=
req
.
data
.
get
(
'agentName'
,
''
)
#
agent_name = req.data.get('agentName', '')
start_date
=
req
.
data
.
get
(
'start_date'
,
(
datetime
.
now
()
+
timedelta
(
days
=-
1
))
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
start_date = req.data.get('start_date', (datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d'))
end_date
=
req
.
data
.
get
(
'end_date'
,
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
end_date = req.data.get('end_date', datetime.now().strftime('%Y-%m-%d'))
q_start_date
=
datetime
.
strptime
(
start_date
,
'
%
Y-
%
m-
%
d'
)
.
date
()
#
q_start_date = datetime.strptime(start_date, '%Y-%m-%d').date()
q_end_date
=
(
datetime
.
strptime
(
end_date
,
'
%
Y-
%
m-
%
d'
)
+
+
timedelta
(
days
=
1
))
.
date
()
#
q_end_date = (datetime.strptime(end_date, '%Y-%m-%d') + + timedelta(days=1)).date()
task_condition
=
{
'create_date__gte'
:
q_start_date
,
'create_date__lt'
:
q_end_date
}
#
task_condition = {'create_date__gte': q_start_date, 'create_date__lt': q_end_date}
data_sort
=
[]
#
data_sort = []
return_data
=
{}
#
return_data = {}
if
task_id
:
#
if task_id:
task_condition
[
'task'
]
=
task_id
#
task_condition['task'] = task_id
if
agent_name
:
#
if agent_name:
task_condition
[
'agentName'
]
=
agent_name
#
task_condition['agentName'] = agent_name
# tasks = RulesStat.objects.filter(**task_condition).values('rule', 'sessionCollectionId', 'rule_num')
#
# tasks = RulesStat.objects.filter(**task_condition).values('rule', 'sessionCollectionId', 'rule_num')
tasks
=
RulesStat
.
objects
.
all
()
.
filter
(
**
task_condition
)
\
#
tasks = RulesStat.objects.all().filter(**task_condition) \
.
extra
(
select
=
{
'rule'
:
"rule"
,
'sessionCollectionId'
:
'sessionCollectionId'
})
\
#
.extra(select={'rule': "rule", 'sessionCollectionId': 'sessionCollectionId'}) \
.
values
(
'rule'
,
'sessionCollectionId'
)
.
annotate
(
rule_num
=
Count
(
'id'
))
.
order_by
(
'-rule_num'
)
#
.values('rule', 'sessionCollectionId').annotate(rule_num=Count('id')).order_by('-rule_num')
for
t
in
tasks
:
#
for t in tasks:
name
=
t
[
'rule'
]
#
name = t['rule']
if
name
in
return_data
.
keys
():
#
if name in return_data.keys():
return_data
[
name
][
'count'
]
+=
int
(
t
[
'rule_num'
])
#
return_data[name]['count'] += int(t['rule_num'])
else
:
#
else:
return_data
[
name
]
=
{
'count'
:
int
(
t
[
'rule_num'
]),
'tables'
:
[]}
#
return_data[name] = {'count': int(t['rule_num']), 'tables': []}
if
t
[
'sessionCollectionId'
]
not
in
return_data
[
name
][
'tables'
]:
#
if t['sessionCollectionId'] not in return_data[name]['tables']:
return_data
[
name
][
'tables'
]
.
append
(
t
[
'sessionCollectionId'
])
#
return_data[name]['tables'].append(t['sessionCollectionId'])
#
for
k
,
v
in
return_data
.
items
():
#
for k, v in return_data.items():
v
[
'rule'
]
=
k
#
v['rule'] = k
data_sort
.
append
(
v
)
#
data_sort.append(v)
# data_sort = sorted(data_sort, key=lambda x: x['count'], reverse=True)
#
# data_sort = sorted(data_sort, key=lambda x: x['count'], reverse=True)
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
data_sort
})
#
return Response({'code': 0, 'msg': 'success', 'data': data_sort})
@
action
([
'post'
],
detail
=
False
)
#
@action(['post'], detail=False)
def
seat_session
(
self
,
req
:
Request
):
#
def seat_session(self, req: Request):
"""
#
"""
坐席违规分析-按照会话
#
坐席违规分析-按照会话
:param req:
#
:param req:
:return:
#
:return:
"""
#
"""
task_id
=
req
.
data
.
get
(
'task'
,
''
)
#
task_id = req.data.get('task', '')
num
=
req
.
data
.
get
(
'num'
,
'10'
)
#
num = req.data.get('num', '10')
start_date
=
req
.
data
.
get
(
'start_date'
,
(
datetime
.
now
()
+
timedelta
(
days
=-
1
))
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
start_date = req.data.get('start_date', (datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d'))
end_date
=
req
.
data
.
get
(
'end_date'
,
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
end_date = req.data.get('end_date', datetime.now().strftime('%Y-%m-%d'))
task_condition
=
{
'hasCheck'
:
1
,
'createdAt__gte'
:
start_date
,
'createdAt__lt'
:
end_date
+
' 23:59:59'
}
#
task_condition = {'hasCheck': 1, 'createdAt__gte': start_date, 'createdAt__lt': end_date + ' 23:59:59'}
if
task_id
:
#
if task_id:
task_condition
[
'name__startswith'
]
=
task_id
#
task_condition['name__startswith'] = task_id
tasks
=
Tasks
.
objects
.
filter
(
**
task_condition
)
.
values
(
'id'
,
'sessionCollectionId'
)
#
tasks = Tasks.objects.filter(**task_condition).values('id', 'sessionCollectionId')
task_dict
=
{}
#
task_dict = {}
for
t
in
tasks
:
#
for t in tasks:
if
t
[
'sessionCollectionId'
]
in
task_dict
.
keys
():
#
if t['sessionCollectionId'] in task_dict.keys():
task_dict
[
t
[
'sessionCollectionId'
]]
.
append
(
t
[
'id'
])
#
task_dict[t['sessionCollectionId']].append(t['id'])
else
:
#
else:
task_dict
[
t
[
'sessionCollectionId'
]]
=
[
t
[
'id'
],
]
#
task_dict[t['sessionCollectionId']] = [t['id'], ]
return_data
=
{}
#
return_data = {}
for
k
,
v
in
task_dict
.
items
():
#
for k, v in task_dict.items():
table_name
=
TABLE_PRE
+
k
#
table_name = TABLE_PRE + k
tn
=
CheckSession
.
set_table
(
table_name
)
#
tn = CheckSession.set_table(table_name)
session_condition
=
{
'taskId__in'
:
v
}
#
session_condition = {'taskId__in': v}
checks
=
tn
.
objects
.
filter
(
**
session_condition
)
.
values
(
'agentName'
)
#
checks = tn.objects.filter(**session_condition).values('agentName')
for
check
in
checks
:
#
for check in checks:
agent_name
=
check
[
'agentName'
]
#
agent_name = check['agentName']
if
agent_name
:
#
if agent_name:
if
agent_name
in
return_data
.
keys
():
#
if agent_name in return_data.keys():
return_data
[
agent_name
]
+=
1
#
return_data[agent_name] += 1
else
:
#
else:
return_data
[
agent_name
]
=
1
#
return_data[agent_name] = 1
data_max
=
sorted
(
return_data
.
items
(),
key
=
lambda
item
:
item
[
1
],
reverse
=
False
)
#
data_max = sorted(return_data.items(), key=lambda item: item[1], reverse=False)
data_max
=
data_max
[
-
int
(
num
):]
#
data_max = data_max[-int(num):]
data_max_return
=
{}
#
data_max_return = {}
for
dm
in
data_max
:
#
for dm in data_max:
data_max_return
[
dm
[
0
]]
=
dm
[
1
]
#
data_max_return[dm[0]] = dm[1]
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
data_max_return
})
#
return Response({'code': 0, 'msg': 'success', 'data': data_max_return})
@
action
([
'post'
],
detail
=
False
)
#
@action(['post'], detail=False)
def
seat_score
(
self
,
req
:
Request
):
#
def seat_score(self, req: Request):
"""
#
"""
坐席违规分析-按照得分
#
坐席违规分析-按照得分
:param req:
#
:param req:
:return:
#
:return:
"""
#
"""
task_id
=
req
.
data
.
get
(
'task'
,
''
)
#
task_id = req.data.get('task', '')
num
=
req
.
data
.
get
(
'num'
,
'10'
)
#
num = req.data.get('num', '10')
start_date
=
req
.
data
.
get
(
'start_date'
,
(
datetime
.
now
()
+
timedelta
(
days
=-
1
))
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
start_date = req.data.get('start_date', (datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d'))
end_date
=
req
.
data
.
get
(
'end_date'
,
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
end_date = req.data.get('end_date', datetime.now().strftime('%Y-%m-%d'))
task_condition
=
{
'hasCheck'
:
1
,
'createdAt__gte'
:
start_date
,
'createdAt__lt'
:
end_date
+
' 23:59:59'
}
#
task_condition = {'hasCheck': 1, 'createdAt__gte': start_date, 'createdAt__lt': end_date + ' 23:59:59'}
if
task_id
:
#
if task_id:
task_condition
[
'name__startswith'
]
=
task_id
#
task_condition['name__startswith'] = task_id
tasks
=
Tasks
.
objects
.
filter
(
**
task_condition
)
.
values
(
'id'
,
'sessionCollectionId'
)
#
tasks = Tasks.objects.filter(**task_condition).values('id', 'sessionCollectionId')
task_dict
=
{}
#
task_dict = {}
for
t
in
tasks
:
#
for t in tasks:
if
t
[
'sessionCollectionId'
]
in
task_dict
.
keys
():
#
if t['sessionCollectionId'] in task_dict.keys():
task_dict
[
t
[
'sessionCollectionId'
]]
.
append
(
t
[
'id'
])
#
task_dict[t['sessionCollectionId']].append(t['id'])
else
:
#
else:
task_dict
[
t
[
'sessionCollectionId'
]]
=
[
t
[
'id'
],
]
#
task_dict[t['sessionCollectionId']] = [t['id'], ]
return_data
=
{}
#
return_data = {}
for
k
,
v
in
task_dict
.
items
():
#
for k, v in task_dict.items():
table_name
=
TABLE_PRE
+
k
#
table_name = TABLE_PRE + k
tn
=
CheckSession
.
set_table
(
table_name
)
#
tn = CheckSession.set_table(table_name)
session_condition
=
{
'taskId__in'
:
v
}
#
session_condition = {'taskId__in': v}
checks
=
tn
.
objects
.
filter
(
**
session_condition
)
.
values
(
'agentName'
,
'score'
)
#
checks = tn.objects.filter(**session_condition).values('agentName', 'score')
for
check
in
checks
:
#
for check in checks:
agent_name
=
check
[
'agentName'
]
#
agent_name = check['agentName']
if
agent_name
:
#
if agent_name:
if
agent_name
in
return_data
.
keys
():
#
if agent_name in return_data.keys():
return_data
[
agent_name
]
+=
check
[
'score'
]
#
return_data[agent_name] += check['score']
else
:
#
else:
return_data
[
agent_name
]
=
check
[
'score'
]
#
return_data[agent_name] = check['score']
data_max
=
sorted
(
return_data
.
items
(),
key
=
lambda
item
:
item
[
1
],
reverse
=
False
)
#
data_max = sorted(return_data.items(), key=lambda item: item[1], reverse=False)
data_max
=
data_max
[:
int
(
num
)]
#
data_max = data_max[:int(num)]
data_max_return
=
{}
#
data_max_return = {}
for
dm
in
data_max
:
#
for dm in data_max:
data_max_return
[
dm
[
0
]]
=
dm
[
1
]
#
data_max_return[dm[0]] = dm[1]
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
data_max_return
})
#
return Response({'code': 0, 'msg': 'success', 'data': data_max_return})
@
action
([
'post'
],
detail
=
False
)
@
action
([
'post'
],
detail
=
False
)
@
before_request
@
before_request
...
@@ -187,62 +186,7 @@ class TasksApi(viewsets.ViewSet):
...
@@ -187,62 +186,7 @@ class TasksApi(viewsets.ViewSet):
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
data
.
get
(
'city'
,
None
)
total_count
,
data_sort
=
db_seat_rule
(
req
,
if_page
=
True
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
team_id
=
req
.
data
.
get
(
'team'
,
None
)
agent_name
=
req
.
data
.
get
(
'seat'
,
''
)
sort
=
req
.
data
.
get
(
'sort'
,
'des'
)
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
task_condition
[
'task__in'
]
=
team_names
if
agent_name
!=
''
and
agent_name
is
not
None
:
task_condition
[
'agentName'
]
=
agent_name
if
sort
==
'des'
:
seats
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'agentName'
:
'agentName'
})
\
.
values
(
'agentName'
)
.
annotate
(
remainTime
=
Sum
(
'remainTime'
),
validate_session
=
Sum
(
'validate_session'
),
total_session
=
Sum
(
'total_session'
))
.
order_by
(
'-validate_session'
)
else
:
seats
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'agentName'
:
'agentName'
})
\
.
values
(
'agentName'
)
.
annotate
(
remainTime
=
Sum
(
'remainTime'
),
validate_session
=
Sum
(
'validate_session'
),
total_session
=
Sum
(
'total_session'
))
.
order_by
(
'validate_session'
)
paginator
=
Paginator
(
seats
,
page_size
)
total_count
=
paginator
.
count
try
:
seats
=
paginator
.
page
(
page
)
except
PageNotAnInteger
:
seats
=
paginator
.
page
(
1
)
except
EmptyPage
:
seats
=
paginator
.
page
(
paginator
.
num_pages
)
return_data
=
[]
agent_name_set
=
set
()
for
s
in
seats
:
detail
=
{
'agentName'
:
s
[
'agentName'
],
'validate_session'
:
s
[
'validate_session'
],
'remainTime'
:
s
[
'remainTime'
],
'total_session'
:
s
[
'total_session'
],
'ratio'
:
round
(
s
[
'validate_session'
]
/
s
[
'total_session'
],
2
)}
agent_name_set
.
add
(
s
[
'agentName'
])
return_data
.
append
(
detail
)
seat_code_name_lists
=
Seat
.
objects
.
filter
(
code__in
=
agent_name_set
)
.
values
(
'code'
,
'name'
)
seat_code_name_dict
=
dict
()
for
seat_code_name
in
seat_code_name_lists
:
seat_code_name_dict
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
if
sort
==
'asc'
:
data_sort
=
sorted
(
return_data
,
key
=
lambda
x
:
x
[
'ratio'
])
for
i
in
range
(
len
(
data_sort
)):
data_sort
[
i
][
'ranking'
]
=
total_count
-
(
int
(
page
)
-
1
)
*
int
(
page_size
)
-
i
data_sort
[
i
][
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
data_sort
[
i
][
'ratio'
]
*
100
))
data_sort
[
i
][
'seatName'
]
=
seat_code_name_dict
.
get
(
data_sort
[
i
][
'agentName'
],
data_sort
[
i
][
'agentName'
])
else
:
data_sort
=
sorted
(
return_data
,
key
=
lambda
x
:
x
[
'ratio'
],
reverse
=
True
)
for
i
in
range
(
len
(
data_sort
)):
data_sort
[
i
][
'ranking'
]
=
(
int
(
page
)
-
1
)
*
int
(
page_size
)
+
i
+
1
data_sort
[
i
][
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
data_sort
[
i
][
'ratio'
]
*
100
))
data_sort
[
i
][
'seatName'
]
=
seat_code_name_dict
.
get
(
data_sort
[
i
][
'agentName'
],
data_sort
[
i
][
'agentName'
])
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
data_sort
})
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
data_sort
})
@
action
([
'post'
],
detail
=
False
)
@
action
([
'post'
],
detail
=
False
)
...
@@ -258,8 +202,8 @@ class TasksApi(viewsets.ViewSet):
...
@@ -258,8 +202,8 @@ class TasksApi(viewsets.ViewSet):
session_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
session_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
team_names
=
get_team_names
(
city_id
,
country_id
)
team_names
=
get_team_names
(
city_id
,
country_id
)
session_condition
[
'task__in'
]
=
team_names
session_condition
[
'task__in'
]
=
team_names
seat_data
=
SeatStat
.
objects
.
filter
(
**
session_condition
)
.
aggregate
(
seat_data
=
SeatStat
.
objects
.
filter
(
**
session_condition
)
.
aggregate
(
validate_session_sum
=
Sum
(
'validate_session'
),
total_session_sum
=
Sum
(
'total_session'
))
validate_session_sum
=
Sum
(
'validate_session'
),
total_session_sum
=
Sum
(
'total_session'
))
avg_score
=
ScoreStat
.
objects
.
filter
(
**
session_condition
)
.
aggregate
(
score_avg
=
Round
(
Avg
(
'score'
),
2
))
avg_score
=
ScoreStat
.
objects
.
filter
(
**
session_condition
)
.
aggregate
(
score_avg
=
Round
(
Avg
(
'score'
),
2
))
...
@@ -273,54 +217,54 @@ class TasksApi(viewsets.ViewSet):
...
@@ -273,54 +217,54 @@ class TasksApi(viewsets.ViewSet):
return_data
[
'avg_score'
]
=
0.0
return_data
[
'avg_score'
]
=
0.0
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
return_data
})
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
return_data
})
@
action
([
'post'
],
detail
=
False
)
#
@action(['post'], detail=False)
def
static_date
(
self
,
req
:
Request
):
#
def static_date(self, req: Request):
"""
#
"""
获取违规项分析
#
获取违规项分析
:param req:
#
:param req:
:return:
#
:return:
"""
#
"""
task_id
=
req
.
data
.
get
(
'task'
,
''
)
#
task_id = req.data.get('task', '')
start_date
=
req
.
data
.
get
(
'start_date'
,
(
datetime
.
now
()
+
timedelta
(
days
=-
6
))
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
start_date = req.data.get('start_date', (datetime.now() + timedelta(days=-6)).strftime('%Y-%m-%d'))
end_date
=
req
.
data
.
get
(
'end_date'
,
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d'
))
#
end_date = req.data.get('end_date', datetime.now().strftime('%Y-%m-%d'))
task_condition
=
{
'hasCheck'
:
1
,
'createdAt__gte'
:
start_date
,
'createdAt__lt'
:
end_date
+
' 23:59:59'
}
#
task_condition = {'hasCheck': 1, 'createdAt__gte': start_date, 'createdAt__lt': end_date + ' 23:59:59'}
if
task_id
:
#
if task_id:
task_condition
[
'name__startswith'
]
=
task_id
#
task_condition['name__startswith'] = task_id
tasks
=
Tasks
.
objects
.
filter
(
**
task_condition
)
.
values
(
'id'
,
'sessionCollectionId'
)
#
tasks = Tasks.objects.filter(**task_condition).values('id', 'sessionCollectionId')
task_dict
=
{}
#
task_dict = {}
for
t
in
tasks
:
#
for t in tasks:
if
t
[
'sessionCollectionId'
]
in
task_dict
.
keys
():
#
if t['sessionCollectionId'] in task_dict.keys():
task_dict
[
t
[
'sessionCollectionId'
]]
.
append
(
t
[
'id'
])
#
task_dict[t['sessionCollectionId']].append(t['id'])
else
:
#
else:
task_dict
[
t
[
'sessionCollectionId'
]]
=
[
t
[
'id'
],
]
#
task_dict[t['sessionCollectionId']] = [t['id'], ]
return_data
=
{}
#
return_data = {}
for
k
,
v
in
task_dict
.
items
():
#
for k, v in task_dict.items():
table_name
=
TABLE_PRE
+
k
#
table_name = TABLE_PRE + k
tn
=
CheckSession
.
set_table
(
table_name
)
#
tn = CheckSession.set_table(table_name)
session_condition
=
{
'taskId__in'
:
v
}
#
session_condition = {'taskId__in': v}
checks
=
tn
.
objects
.
filter
(
**
session_condition
)
.
values
(
'violationRuleCount'
,
'createdAt'
)
#
checks = tn.objects.filter(**session_condition).values('violationRuleCount', 'createdAt')
for
check
in
checks
:
#
for check in checks:
date
=
check
[
'createdAt'
]
.
strftime
(
'
%
Y-
%
m-
%
d'
)
#
date = check['createdAt'].strftime('%Y-%m-%d')
if
date
in
return_data
.
keys
():
#
if date in return_data.keys():
return_data
[
date
][
'total_session'
]
+=
1
#
return_data[date]['total_session'] += 1
if
check
[
'violationRuleCount'
]
>
0
:
#
if check['violationRuleCount'] > 0:
return_data
[
date
][
'validate_session'
]
+=
1
#
return_data[date]['validate_session'] += 1
else
:
#
else:
if
check
[
'violationRuleCount'
]
>
0
:
#
if check['violationRuleCount'] > 0:
return_data
[
date
]
=
{
'total_session'
:
1
,
'validate_session'
:
1
}
#
return_data[date] = {'total_session': 1, 'validate_session': 1}
else
:
#
else:
return_data
[
date
]
=
{
'total_session'
:
1
,
'validate_session'
:
0
}
#
return_data[date] = {'total_session': 1, 'validate_session': 0}
data_sort
=
[]
#
data_sort = []
for
k
,
v
in
return_data
.
items
():
#
for k, v in return_data.items():
# return_data[k]['ratio'] = round(v['validate_session']/v['total_session'], 2)
#
# return_data[k]['ratio'] = round(v['validate_session']/v['total_session'], 2)
if
v
[
'total_session'
]:
#
if v['total_session']:
v
[
'ratio'
]
=
round
(
v
[
'validate_session'
]
/
v
[
'total_session'
],
2
)
#
v['ratio'] = round(v['validate_session'] / v['total_session'], 2)
else
:
#
else:
v
[
'ratio'
]
=
0
#
v['ratio'] = 0
v
[
'date'
]
=
k
#
v['date'] = k
data_sort
.
append
(
v
)
#
data_sort.append(v)
data_sort
=
sorted
(
data_sort
,
key
=
lambda
x
:
x
[
'date'
],
reverse
=
True
)
#
data_sort = sorted(data_sort, key=lambda x: x['date'], reverse=True)
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
data_sort
})
#
return Response({'code': 0, 'msg': 'success', 'data': data_sort})
@
action
([
'post'
],
detail
=
False
)
@
action
([
'post'
],
detail
=
False
)
@
before_request
@
before_request
...
@@ -330,99 +274,7 @@ class TasksApi(viewsets.ViewSet):
...
@@ -330,99 +274,7 @@ class TasksApi(viewsets.ViewSet):
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
data
.
get
(
'city'
,
''
)
total_count
,
return_data
=
db_seat_check
(
req
,
if_page
=
True
)
country_id
=
req
.
data
.
get
(
'country'
,
''
)
team_id
=
req
.
data
.
get
(
'team'
,
''
)
agent_name
=
req
.
data
.
get
(
'agentName'
,
''
)
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
task_condition
=
req
.
data
.
get
(
'at_condition'
,
{})
task_condition
[
'hasCheck'
]
=
1
if
city_id
:
city
=
Country
.
objects
.
filter
(
id
=
city_id
)
.
first
()
if
city
.
parent
is
not
None
:
task_condition
[
'name__startswith'
]
=
city
.
name
tasks
=
Tasks
.
objects
.
filter
(
**
task_condition
)
.
values
(
'id'
,
'name'
,
'sessionCollectionId'
)
task_dict
=
{}
task_name_dict
=
{}
for
t
in
tasks
:
task_name_dict
[
t
[
'id'
]]
=
t
[
'name'
]
if
t
[
'sessionCollectionId'
]
in
task_dict
.
keys
():
task_dict
[
t
[
'sessionCollectionId'
]]
.
append
(
t
[
'id'
])
else
:
task_dict
[
t
[
'sessionCollectionId'
]]
=
[
t
[
'id'
],
]
return_data
=
[]
total_count
=
0
agent_names
=
get_agent_name
(
city_id
,
country_id
,
team_id
,
agent_name
)
if
len
(
agent_names
)
>
0
:
seat_code_name_lists
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
else
:
seat_code_name_lists
=
Seat
.
objects
.
filter
()
.
values
(
'code'
,
'name'
)
seat_code_name_dict
=
dict
()
for
seat_code_name
in
seat_code_name_lists
:
seat_code_name_dict
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
for
k
,
v
in
task_dict
.
items
():
# session_collection = t.sessionCollectionId
table_name
=
TABLE_PRE
+
k
tn
=
CheckSession
.
set_table
(
table_name
)
session_condition
=
{
'taskId__in'
:
v
}
if
len
(
agent_names
)
>
0
:
session_condition
[
'agentName__in'
]
=
agent_names
checks
=
tn
.
objects
.
filter
(
**
session_condition
)
.
values
(
'id'
,
'createdAt'
,
'agentName'
,
'extra'
,
'taskId'
,
'remainTime'
,
'startTime'
,
'closeTime'
,
'scoreItemRecord'
,
'sessionId'
)
paginator
=
Paginator
(
checks
,
page_size
)
total_count
+=
paginator
.
count
try
:
seats
=
paginator
.
page
(
page
)
except
PageNotAnInteger
:
seats
=
paginator
.
page
(
1
)
except
EmptyPage
:
seats
=
paginator
.
page
(
paginator
.
num_pages
)
for
check
in
seats
:
result
=
check
[
'scoreItemRecord'
]
t_name
=
task_name_dict
[
check
[
'taskId'
]]
total_score
=
100
extra
=
json
.
loads
(
check
[
'extra'
])
remain
=
0
if
check
[
'startTime'
]
and
check
[
'closeTime'
]:
start
=
datetime
.
strptime
(
check
[
'startTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
close
=
datetime
.
strptime
(
check
[
'closeTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
remain
=
int
(
close
-
start
)
f_name
=
extra
[
'filename'
]
if
extra
and
'filename'
in
extra
.
keys
()
else
''
detail
=
{
'id'
:
check
[
'id'
],
'sessionId'
:
check
[
'sessionId'
],
'createdAt'
:
check
[
'createdAt'
],
'area'
:
t_name
.
split
(
'_'
)[
0
],
'seatName'
:
seat_code_name_dict
.
get
(
check
[
'agentName'
],
check
[
'agentName'
]),
'agentName'
:
check
[
'agentName'
],
'filename'
:
f_name
,
'remainTime'
:
remain
,
'sessionCollectionId'
:
k
,
'taskId'
:
check
[
'taskId'
]}
rule_detail
=
{
'fwyy'
:
15
,
'kcb'
:
5
,
'jsy'
:
3
,
'fwtd'
:
5
,
'yssb'
:
5
,
'jysb'
:
5
,
'yycl'
:
10
,
'ywcc'
:
10
,
'yyjlz'
:
10
,
'fwjs'
:
10
,
'wtgbj'
:
2
,
'cgjxxhs'
:
20
,
'wgzlf'
:
100
,
'mgc'
:
100
}
if
result
:
data
=
json
.
loads
(
result
)
for
d
in
data
:
if
'scoreItemName'
in
d
.
keys
()
and
'score'
in
d
.
keys
():
item_score
=
0
if
d
[
'score'
]
and
d
[
'score'
]
>
0
else
1
name_py
=
pinyin
(
d
[
'scoreItemName'
],
style
=
Style
.
FIRST_LETTER
,
strict
=
False
)
item_name
=
''
.
join
([
x
[
0
]
for
x
in
name_py
])
# detail[item_name] = {d['scoreItemName']: item_score}
if
item_name
in
rule_detail
.
keys
():
if
item_score
==
0
:
total_score
-=
rule_detail
[
item_name
]
rule_detail
[
item_name
]
=
item_score
for
kk
,
vv
in
rule_detail
.
items
():
if
vv
>
1
:
rule_detail
[
kk
]
=
1
if
rule_detail
[
'wgzlf'
]
==
0
or
rule_detail
[
'mgc'
]
==
0
:
total_score
=
0
detail
.
update
(
rule_detail
)
detail
[
'total_score'
]
=
total_score
return_data
.
append
(
detail
)
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
return_data
})
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
return_data
})
@
action
([
'post'
],
detail
=
False
)
@
action
([
'post'
],
detail
=
False
)
...
@@ -433,46 +285,12 @@ class TasksApi(viewsets.ViewSet):
...
@@ -433,46 +285,12 @@ class TasksApi(viewsets.ViewSet):
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
data
.
get
(
'city'
,
None
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
team_id
=
req
.
data
.
get
(
'team'
,
None
)
agent_name
=
req
.
data
.
get
(
'seat'
,
''
)
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
sort
=
req
.
data
.
get
(
'sort'
,
'-avg_score'
)
all_scores
=
db_seat_area
(
req
)
t
ask_condition
=
req
.
data
.
get
(
'date_condition'
,
''
)
t
otal_count
,
scores
=
page_with_seat_name
(
all_scores
,
page
,
page_size
,
agent
=
True
)
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
scores
.
object_list
})
task_condition
[
'task__in'
]
=
team_names
if
agent_name
:
task_condition
[
'agentName'
]
=
agent_name
# , 'total_session', 'validate_num', 'validate_session', 'validate_zero'
rules
=
ScoreStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'area'
:
"task"
,
'agentName'
:
'agentName'
})
\
.
values
(
'area'
,
'agentName'
)
.
annotate
(
avg_score_svc
=
Round
(
Avg
(
'service_score'
),
2
),
avg_score_bus
=
Round
(
Avg
(
'business_score'
),
2
),
avg_score
=
Round
(
Avg
(
'score'
),
2
),
total_session
=
Sum
(
'total_session'
),
validate_num
=
Sum
(
'validate_num'
),
validate_zero
=
Sum
(
'validate_zero'
))
\
.
order_by
(
sort
)
paginator
=
Paginator
(
rules
,
page_size
)
total_count
=
paginator
.
count
try
:
seats
=
paginator
.
page
(
page
)
except
PageNotAnInteger
:
seats
=
paginator
.
page
(
1
)
except
EmptyPage
:
seats
=
paginator
.
page
(
paginator
.
num_pages
)
agent_names
=
[
x
[
'agentName'
]
for
x
in
seats
]
seats_code_name_list
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
seats_code_name
=
dict
()
for
seat_code_name
in
seats_code_name_list
:
seats_code_name
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
for
rule_dict
in
seats
:
rule_dict
[
'seatName'
]
=
seats_code_name
.
get
(
rule_dict
[
'agentName'
],
rule_dict
[
'agentName'
])
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
seats
.
object_list
})
@
action
([
'post'
],
detail
=
False
)
@
action
([
'post'
],
detail
=
False
)
@
before_request
@
before_request
...
@@ -483,39 +301,7 @@ class TasksApi(viewsets.ViewSet):
...
@@ -483,39 +301,7 @@ class TasksApi(viewsets.ViewSet):
:return:
:return:
"""
"""
city_id
=
req
.
data
.
get
(
'city'
,
None
)
data_sort
=
db_static_rule
(
req
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
team_id
=
req
.
data
.
get
(
'team'
,
None
)
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
task_condition
[
'task__in'
]
=
team_names
call_count
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
aggregate
(
Sum
(
"validate_session"
))[
'validate_session__sum'
]
# tasks = RulesStat.objects.filter(**task_condition).values('rule', 'sessionCollectionId', 'rule_num')
tasks
=
RulesStat
.
objects
.
all
()
.
filter
(
**
task_condition
)
\
.
extra
(
select
=
{
'rule'
:
"rule"
,
'sessionCollectionId'
:
'sessionCollectionId'
})
\
.
values
(
'rule'
,
'sessionCollectionId'
)
.
annotate
(
rule_num
=
Count
(
'id'
))
.
order_by
(
'-rule_num'
)
return_data
=
{}
for
t
in
tasks
:
name
=
t
[
'rule'
]
if
name
in
return_data
.
keys
():
return_data
[
name
][
'count'
]
+=
int
(
t
[
'rule_num'
])
else
:
return_data
[
name
]
=
{
'count'
:
int
(
t
[
'rule_num'
]),
'tables'
:
[]}
if
t
[
'sessionCollectionId'
]
not
in
return_data
[
name
][
'tables'
]:
return_data
[
name
][
'tables'
]
.
append
(
t
[
'sessionCollectionId'
])
data_sort
=
[]
for
k
,
v
in
return_data
.
items
():
v
[
'rule'
]
=
k
v
[
'ratio'
]
=
round
(
v
[
'count'
]
/
call_count
,
2
)
if
call_count
else
0
v
[
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
v
[
'ratio'
]
*
100
))
v
[
'call_count'
]
=
call_count
data_sort
.
append
(
v
)
# data_sort = sorted(data_sort, key=lambda x: x['count'], reverse=True)
# data_sort = sorted(data_sort, key=lambda x: x['count'], reverse=True)
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
data_sort
})
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'data'
:
data_sort
})
...
@@ -542,63 +328,30 @@ class TasksApi(viewsets.ViewSet):
...
@@ -542,63 +328,30 @@ class TasksApi(viewsets.ViewSet):
session_condition
[
'rule'
]
=
rule_name
session_condition
[
'rule'
]
=
rule_name
session_condition
[
'sessionCollectionId__in'
]
=
table_list
session_condition
[
'sessionCollectionId__in'
]
=
table_list
session_condition
[
'task__in'
]
=
get_team_names
(
city_id
,
country_id
,
team_id
)
session_condition
[
'task__in'
]
=
get_team_names
(
city_id
,
country_id
,
team_id
)
checks
=
RulesStat
.
objects
.
filter
(
**
session_condition
)
.
values
(
'agentName'
,
'customName'
,
'remainTime'
,
'score'
,
all_rules
=
RulesStat
.
objects
.
filter
(
**
session_condition
)
.
values
(
'agentName'
,
'customName'
,
'remainTime'
,
'sessionCollectionId'
,
'sessionId'
,
'taskId'
)
'score'
,
paginator
=
Paginator
(
checks
,
page_size
)
'sessionCollectionId'
,
'sessionId'
,
'taskId'
)
total_count
=
paginator
.
count
total_count
,
rules
=
page_with_seat_name
(
all_rules
,
page
,
page_size
,
agent
=
True
)
try
:
seats
=
paginator
.
page
(
page
)
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
rules
.
object_list
})
except
PageNotAnInteger
:
seats
=
paginator
.
page
(
1
)
except
EmptyPage
:
seats
=
paginator
.
page
(
paginator
.
num_pages
)
agent_names
=
[
x
[
'agentName'
]
for
x
in
seats
]
seats_code_name_list
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
seats_code_name
=
dict
()
for
seat_code_name
in
seats_code_name_list
:
seats_code_name
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
for
rule_dict
in
seats
:
rule_dict
[
'seatName'
]
=
seats_code_name
.
get
(
rule_dict
[
'agentName'
],
rule_dict
[
'agentName'
])
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
seats
.
object_list
})
@
action
([
'post'
],
detail
=
False
)
@
action
([
'post'
],
detail
=
False
)
@
before_request
@
before_request
def
static_score
(
self
,
req
:
Request
):
def
static_score
(
self
,
req
:
Request
):
"""
"""
概览-
地市
得分统计
概览-
团队
得分统计
:param req:
:param req:
:return:
:return:
"""
"""
city_id
=
req
.
data
.
get
(
'city'
,
None
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
sort
=
req
.
data
.
get
(
'sort'
,
'-avg_score'
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
team_names
=
get_team_names
(
city_id
,
country_id
)
all_scores
=
db_static_score
(
req
)
task_condition
[
'task__in'
]
=
team_names
total_count
,
scores
=
page_with_seat_name
(
all_scores
,
page
,
page_size
)
rules
=
ScoreStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'area'
:
"task"
})
\
.
values
(
'area'
)
.
annotate
(
avg_score_svc
=
Round
(
Avg
(
'service_score'
),
2
),
avg_score_bus
=
Round
(
Avg
(
'business_score'
),
2
),
avg_score
=
Round
(
Avg
(
'score'
),
2
),
total_session
=
Sum
(
'total_session'
),
validate_num
=
Sum
(
'validate_num'
),
validate_zero
=
Sum
(
'validate_zero'
))
\
.
order_by
(
sort
)
paginator
=
Paginator
(
rules
,
page_size
)
total_count
=
paginator
.
count
try
:
seats
=
paginator
.
page
(
page
)
except
PageNotAnInteger
:
seats
=
paginator
.
page
(
1
)
except
EmptyPage
:
seats
=
paginator
.
page
(
paginator
.
num_pages
)
return
Response
(
return
Response
(
{
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
s
eat
s
.
object_list
})
{
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
s
core
s
.
object_list
})
@
action
([
'post'
],
detail
=
False
)
@
action
([
'post'
],
detail
=
False
)
@
before_request
@
before_request
...
@@ -620,28 +373,14 @@ class TasksApi(viewsets.ViewSet):
...
@@ -620,28 +373,14 @@ class TasksApi(viewsets.ViewSet):
if
agent_name
:
if
agent_name
:
session_condition
[
'agentName'
]
=
agent_name
session_condition
[
'agentName'
]
=
agent_name
check
s
=
RulesStat
.
objects
.
filter
(
**
session_condition
)
\
all_rule
s
=
RulesStat
.
objects
.
filter
(
**
session_condition
)
\
.
extra
(
select
=
{
'sessionCollectionId'
:
'sessionCollectionId'
})
\
.
extra
(
select
=
{
'sessionCollectionId'
:
'sessionCollectionId'
})
\
.
values
(
'agentName'
,
'customName'
,
'remainTime'
,
'score'
,
'sessionCollectionId'
,
'sessionId'
,
'taskId'
)
\
.
values
(
'agentName'
,
'customName'
,
'remainTime'
,
'score'
,
'sessionCollectionId'
,
'sessionId'
,
'taskId'
)
\
.
distinct
()
.
distinct
()
paginator
=
Paginator
(
checks
,
page_size
)
total_count
=
paginator
.
count
total_count
,
rules
=
page_with_seat_name
(
all_rules
,
page
,
page_size
,
agent
=
True
)
try
:
seats
=
paginator
.
page
(
page
)
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
rules
.
object_list
})
except
PageNotAnInteger
:
seats
=
paginator
.
page
(
1
)
except
EmptyPage
:
seats
=
paginator
.
page
(
paginator
.
num_pages
)
agent_names
=
[
x
[
'agentName'
]
for
x
in
seats
]
seats_code_name_list
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
seats_code_name
=
dict
()
for
seat_code_name
in
seats_code_name_list
:
seats_code_name
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
for
rule_dict
in
seats
:
rule_dict
[
'seatName'
]
=
seats_code_name
.
get
(
rule_dict
[
'agentName'
],
rule_dict
[
'agentName'
])
return
Response
({
'code'
:
0
,
'msg'
:
'success'
,
'count'
:
total_count
,
'data'
:
seats
.
object_list
})
@
xframe_options_exempt
@
xframe_options_exempt
...
...
src/inspect_report/cron.py
View file @
15bda856
...
@@ -16,6 +16,15 @@ score_item_service = {'服务用语': 15, '开场白': 5, '结束语': 3, '服
...
@@ -16,6 +16,15 @@ score_item_service = {'服务用语': 15, '开场白': 5, '结束语': 3, '服
score_item_business
=
{
'异议处理'
:
10
,
'业务促成'
:
10
,
'预约及流转'
:
10
,
'服务介绍'
:
10
,
'未提供报价'
:
2
,
'成功件信息核实'
:
20
}
score_item_business
=
{
'异议处理'
:
10
,
'业务促成'
:
10
,
'预约及流转'
:
10
,
'服务介绍'
:
10
,
'未提供报价'
:
2
,
'成功件信息核实'
:
20
}
def
get_remain
(
check
):
remain
=
0
if
check
[
'startTime'
]
and
check
[
'closeTime'
]:
start
=
datetime
.
strptime
(
check
[
'startTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
close
=
datetime
.
strptime
(
check
[
'closeTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
remain
=
int
(
close
-
start
)
return
remain
def
team_seat
():
def
team_seat
():
teams
=
Team
.
objects
.
values_list
(
'id'
,
'name'
)
teams
=
Team
.
objects
.
values_list
(
'id'
,
'name'
)
team_id_name
=
{
team
[
0
]:
team
[
1
]
for
team
in
teams
}
team_id_name
=
{
team
[
0
]:
team
[
1
]
for
team
in
teams
}
...
@@ -53,13 +62,8 @@ def rule_stat(start_date=None, end_date=None):
...
@@ -53,13 +62,8 @@ def rule_stat(start_date=None, end_date=None):
rules_list
=
[]
rules_list
=
[]
data
=
json
.
loads
(
result
)
data
=
json
.
loads
(
result
)
for
d
in
data
:
for
d
in
data
:
remain
=
0
remain
=
get_remain
(
check
)
if
check
[
'startTime'
]
and
check
[
'closeTime'
]:
if
'isViolation'
in
d
.
keys
()
and
d
[
'isViolation'
]
and
'rule'
in
d
.
keys
()
and
'name'
in
d
[
'rule'
]
.
keys
():
start
=
datetime
.
strptime
(
check
[
'startTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
close
=
datetime
.
strptime
(
check
[
'closeTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
remain
=
int
(
close
-
start
)
if
'isViolation'
in
d
.
keys
()
and
d
[
'isViolation'
]
and
'rule'
in
d
.
keys
()
and
'name'
in
d
[
'rule'
]
.
keys
():
name
=
d
[
'rule'
][
'name'
]
name
=
d
[
'rule'
][
'name'
]
rule_obj
=
{
'create_date'
:
start_date
,
'sessionCollectionId'
:
t
[
'sessionCollectionId'
],
rule_obj
=
{
'create_date'
:
start_date
,
'sessionCollectionId'
:
t
[
'sessionCollectionId'
],
'rule'
:
name
,
'rule_num'
:
1
,
'rule'
:
name
,
'rule_num'
:
1
,
...
@@ -102,11 +106,7 @@ def seat_stat(start_date=None, end_date=None):
...
@@ -102,11 +106,7 @@ def seat_stat(start_date=None, end_date=None):
seat_list
=
[]
seat_list
=
[]
for
check
in
checks
:
for
check
in
checks
:
stat_count
+=
1
stat_count
+=
1
remain
=
0
remain
=
get_remain
(
check
)
if
check
[
'startTime'
]
and
check
[
'closeTime'
]:
start
=
datetime
.
strptime
(
check
[
'startTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
close
=
datetime
.
strptime
(
check
[
'closeTime'
],
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
.
timestamp
()
remain
=
int
(
close
-
start
)
if
check
[
'agentName'
]
in
seat_dict
.
keys
():
if
check
[
'agentName'
]
in
seat_dict
.
keys
():
seat
=
seat_dict
.
get
(
check
[
'agentName'
])
seat
=
seat_dict
.
get
(
check
[
'agentName'
])
seat
[
'total_session'
]
+=
1
seat
[
'total_session'
]
+=
1
...
...
src/inspect_report/dbhelper.py
0 → 100644
View file @
15bda856
import
json
from
django.db.models
import
Avg
,
Sum
,
Count
from
pypinyin
import
pinyin
,
Style
from
config.config
import
TABLE_PRE
from
inspect_report.agency
import
get_team_names
,
get_agent_name
from
inspect_report.cron
import
get_remain
from
inspect_report.models
import
ScoreStat
,
Round
,
SeatStat
,
Seat
,
Country
,
Tasks
,
CheckSession
,
RulesStat
from
inspect_report.pagehelper
import
page_with_seat_name
def
db_static_score
(
req
):
city_id
=
req
.
data
.
get
(
'city'
,
None
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
team_names
=
get_team_names
(
city_id
,
country_id
)
task_condition
[
'task__in'
]
=
team_names
sort
=
req
.
data
.
get
(
'sort'
,
'-avg_score'
)
all_scores
=
ScoreStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'area'
:
"task"
})
.
values
(
'area'
)
.
annotate
(
avg_score_svc
=
Round
(
Avg
(
'service_score'
),
2
),
avg_score_bus
=
Round
(
Avg
(
'business_score'
),
2
),
avg_score
=
Round
(
Avg
(
'score'
),
2
),
total_session
=
Sum
(
'total_session'
),
validate_num
=
Sum
(
'validate_num'
),
validate_zero
=
Sum
(
'validate_zero'
))
.
order_by
(
sort
)
return
all_scores
def
db_seat_rule
(
req
,
if_page
=
False
):
city_id
=
req
.
data
.
get
(
'city'
,
None
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
team_id
=
req
.
data
.
get
(
'team'
,
None
)
agent_name
=
req
.
data
.
get
(
'seat'
,
''
)
sort
=
req
.
data
.
get
(
'sort'
,
'des'
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
task_condition
[
'task__in'
]
=
team_names
if
agent_name
!=
''
and
agent_name
is
not
None
:
task_condition
[
'agentName'
]
=
agent_name
if
sort
==
'des'
:
all_seats
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'agentName'
:
'agentName'
})
\
.
values
(
'agentName'
)
.
annotate
(
remainTime
=
Sum
(
'remainTime'
),
validate_session
=
Sum
(
'validate_session'
),
total_session
=
Sum
(
'total_session'
))
.
order_by
(
'-validate_session'
)
else
:
all_seats
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'agentName'
:
'agentName'
})
\
.
values
(
'agentName'
)
.
annotate
(
remainTime
=
Sum
(
'remainTime'
),
validate_session
=
Sum
(
'validate_session'
),
total_session
=
Sum
(
'total_session'
))
.
order_by
(
'validate_session'
)
if
if_page
:
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
total_count
,
seats
=
page_with_seat_name
(
all_seats
,
page
,
page_size
,
agent
=
False
)
else
:
page
=
1
page_size
=
10
total_count
=
0
seats
=
all_seats
return_data
=
[]
agent_name_set
=
set
()
for
s
in
seats
:
detail
=
{
'agentName'
:
s
[
'agentName'
],
'validate_session'
:
s
[
'validate_session'
],
'remainTime'
:
s
[
'remainTime'
],
'total_session'
:
s
[
'total_session'
],
'ratio'
:
round
(
s
[
'validate_session'
]
/
s
[
'total_session'
],
2
)}
agent_name_set
.
add
(
s
[
'agentName'
])
return_data
.
append
(
detail
)
seat_code_name_lists
=
Seat
.
objects
.
filter
(
code__in
=
agent_name_set
)
.
values
(
'code'
,
'name'
)
seat_code_name_dict
=
dict
()
for
seat_code_name
in
seat_code_name_lists
:
seat_code_name_dict
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
if
sort
==
'asc'
:
data_sort
=
sorted
(
return_data
,
key
=
lambda
x
:
x
[
'ratio'
])
for
i
in
range
(
len
(
data_sort
)):
if
if_page
:
data_sort
[
i
][
'ranking'
]
=
total_count
-
(
int
(
page
)
-
1
)
*
int
(
page_size
)
-
i
data_sort
[
i
][
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
data_sort
[
i
][
'ratio'
]
*
100
))
data_sort
[
i
][
'seatName'
]
=
seat_code_name_dict
.
get
(
data_sort
[
i
][
'agentName'
],
data_sort
[
i
][
'agentName'
])
else
:
data_sort
=
sorted
(
return_data
,
key
=
lambda
x
:
x
[
'ratio'
],
reverse
=
True
)
for
i
in
range
(
len
(
data_sort
)):
if
if_page
:
data_sort
[
i
][
'ranking'
]
=
(
int
(
page
)
-
1
)
*
int
(
page_size
)
+
i
+
1
data_sort
[
i
][
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
data_sort
[
i
][
'ratio'
]
*
100
))
data_sort
[
i
][
'seatName'
]
=
seat_code_name_dict
.
get
(
data_sort
[
i
][
'agentName'
],
data_sort
[
i
][
'agentName'
])
return
total_count
,
data_sort
def
db_seat_check
(
req
,
if_page
=
False
):
city_id
=
req
.
data
.
get
(
'city'
,
''
)
country_id
=
req
.
data
.
get
(
'country'
,
''
)
team_id
=
req
.
data
.
get
(
'team'
,
''
)
agent_name
=
req
.
data
.
get
(
'agentName'
,
''
)
task_condition
=
req
.
data
.
get
(
'at_condition'
,
{})
task_condition
[
'hasCheck'
]
=
1
if
city_id
:
city
=
Country
.
objects
.
filter
(
id
=
city_id
)
.
first
()
if
city
.
parent
is
not
None
:
task_condition
[
'name__startswith'
]
=
city
.
name
tasks
=
Tasks
.
objects
.
filter
(
**
task_condition
)
.
values
(
'id'
,
'name'
,
'sessionCollectionId'
)
task_dict
=
{}
task_name_dict
=
{}
for
t
in
tasks
:
task_name_dict
[
t
[
'id'
]]
=
t
[
'name'
]
if
t
[
'sessionCollectionId'
]
in
task_dict
.
keys
():
task_dict
[
t
[
'sessionCollectionId'
]]
.
append
(
t
[
'id'
])
else
:
task_dict
[
t
[
'sessionCollectionId'
]]
=
[
t
[
'id'
],
]
return_data
=
[]
total_count
=
0
agent_names
=
get_agent_name
(
city_id
,
country_id
,
team_id
,
agent_name
)
if
len
(
agent_names
)
>
0
:
seat_code_name_lists
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
else
:
seat_code_name_lists
=
Seat
.
objects
.
filter
()
.
values
(
'code'
,
'name'
)
seat_code_name_dict
=
dict
()
for
seat_code_name
in
seat_code_name_lists
:
seat_code_name_dict
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
for
k
,
v
in
task_dict
.
items
():
# session_collection = t.sessionCollectionId
table_name
=
TABLE_PRE
+
k
tn
=
CheckSession
.
set_table
(
table_name
)
session_condition
=
{
'taskId__in'
:
v
}
if
len
(
agent_names
)
>
0
:
session_condition
[
'agentName__in'
]
=
agent_names
all_checks
=
tn
.
objects
.
filter
(
**
session_condition
)
.
values
(
'id'
,
'createdAt'
,
'agentName'
,
'extra'
,
'taskId'
,
'remainTime'
,
'startTime'
,
'closeTime'
,
'scoreItemRecord'
,
'sessionId'
)
if
if_page
:
page
=
req
.
data
.
get
(
'page'
,
'1'
)
page_size
=
req
.
data
.
get
(
'page_size'
,
'10'
)
total_count
,
checks
=
page_with_seat_name
(
all_checks
,
page
,
page_size
,
agent
=
False
)
else
:
total_count
=
0
checks
=
all_checks
for
check
in
checks
:
result
=
check
[
'scoreItemRecord'
]
t_name
=
task_name_dict
[
check
[
'taskId'
]]
total_score
=
100
extra
=
json
.
loads
(
check
[
'extra'
])
remain
=
get_remain
(
check
)
f_name
=
extra
[
'filename'
]
if
extra
and
'filename'
in
extra
.
keys
()
else
''
detail
=
{
'id'
:
check
[
'id'
],
'sessionId'
:
check
[
'sessionId'
],
'createdAt'
:
check
[
'createdAt'
],
'area'
:
t_name
.
split
(
'_'
)[
0
],
'seatName'
:
seat_code_name_dict
.
get
(
check
[
'agentName'
],
check
[
'agentName'
]),
'agentName'
:
check
[
'agentName'
],
'filename'
:
f_name
,
'remainTime'
:
remain
,
'sessionCollectionId'
:
k
,
'taskId'
:
check
[
'taskId'
]}
rule_detail
=
{
'fwyy'
:
15
,
'kcb'
:
5
,
'jsy'
:
3
,
'fwtd'
:
5
,
'yssb'
:
5
,
'jysb'
:
5
,
'yycl'
:
10
,
'ywcc'
:
10
,
'yyjlz'
:
10
,
'fwjs'
:
10
,
'wtgbj'
:
2
,
'cgjxxhs'
:
20
,
'wgzlf'
:
100
,
'mgc'
:
100
}
if
result
:
data
=
json
.
loads
(
result
)
for
d
in
data
:
if
'scoreItemName'
in
d
.
keys
()
and
'score'
in
d
.
keys
():
item_score
=
0
if
d
[
'score'
]
and
d
[
'score'
]
>
0
else
1
name_py
=
pinyin
(
d
[
'scoreItemName'
],
style
=
Style
.
FIRST_LETTER
,
strict
=
False
)
item_name
=
''
.
join
([
x
[
0
]
for
x
in
name_py
])
# detail[item_name] = {d['scoreItemName']: item_score}
if
item_name
in
rule_detail
.
keys
():
if
item_score
==
0
:
total_score
-=
rule_detail
[
item_name
]
rule_detail
[
item_name
]
=
item_score
for
kk
,
vv
in
rule_detail
.
items
():
if
vv
>
1
:
rule_detail
[
kk
]
=
1
if
rule_detail
[
'wgzlf'
]
==
0
or
rule_detail
[
'mgc'
]
==
0
:
total_score
=
0
detail
.
update
(
rule_detail
)
detail
[
'total_score'
]
=
total_score
return_data
.
append
(
detail
)
return
total_count
,
return_data
def
db_seat_area
(
req
):
city_id
=
req
.
data
.
get
(
'city'
,
None
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
team_id
=
req
.
data
.
get
(
'team'
,
None
)
agent_name
=
req
.
data
.
get
(
'seat'
,
''
)
sort
=
req
.
data
.
get
(
'sort'
,
'-avg_score'
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
''
)
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
task_condition
[
'task__in'
]
=
team_names
if
agent_name
:
task_condition
[
'agentName'
]
=
agent_name
# , 'total_session', 'validate_num', 'validate_session', 'validate_zero'
all_scores
=
ScoreStat
.
objects
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'area'
:
"task"
,
'agentName'
:
'agentName'
})
.
values
(
'area'
,
'agentName'
)
.
annotate
(
avg_score_svc
=
Round
(
Avg
(
'service_score'
),
2
),
avg_score_bus
=
Round
(
Avg
(
'business_score'
),
2
),
avg_score
=
Round
(
Avg
(
'score'
),
2
),
total_session
=
Sum
(
'total_session'
),
validate_num
=
Sum
(
'validate_num'
),
validate_zero
=
Sum
(
'validate_zero'
))
.
order_by
(
sort
)
return
all_scores
def
db_static_rule
(
req
):
city_id
=
req
.
data
.
get
(
'city'
,
None
)
country_id
=
req
.
data
.
get
(
'country'
,
None
)
team_id
=
req
.
data
.
get
(
'team'
,
None
)
team_names
=
get_team_names
(
city_id
,
country_id
,
team_id
)
task_condition
=
req
.
data
.
get
(
'date_condition'
,
{})
task_condition
[
'task__in'
]
=
team_names
call_count
=
SeatStat
.
objects
.
filter
(
**
task_condition
)
.
aggregate
(
Sum
(
"validate_session"
))[
'validate_session__sum'
]
# tasks = RulesStat.objects.filter(**task_condition).values('rule', 'sessionCollectionId', 'rule_num')
tasks
=
RulesStat
.
objects
.
all
()
.
filter
(
**
task_condition
)
.
extra
(
select
=
{
'rule'
:
"rule"
,
'sessionCollectionId'
:
'sessionCollectionId'
})
.
values
(
'rule'
,
'sessionCollectionId'
)
.
annotate
(
rule_num
=
Count
(
'id'
))
.
order_by
(
'-rule_num'
)
return_data
=
{}
for
t
in
tasks
:
name
=
t
[
'rule'
]
if
name
in
return_data
.
keys
():
return_data
[
name
][
'count'
]
+=
int
(
t
[
'rule_num'
])
else
:
return_data
[
name
]
=
{
'count'
:
int
(
t
[
'rule_num'
]),
'tables'
:
[]}
if
t
[
'sessionCollectionId'
]
not
in
return_data
[
name
][
'tables'
]:
return_data
[
name
][
'tables'
]
.
append
(
t
[
'sessionCollectionId'
])
data_sort
=
[]
for
k
,
v
in
return_data
.
items
():
v
[
'rule'
]
=
k
v
[
'ratio'
]
=
round
(
v
[
'count'
]
/
call_count
,
2
)
if
call_count
else
0
v
[
'ratio'
]
=
'{0}
%
'
.
format
(
int
(
v
[
'ratio'
]
*
100
))
v
[
'call_count'
]
=
call_count
data_sort
.
append
(
v
)
return
data_sort
src/inspect_report/pagehelper.py
0 → 100644
View file @
15bda856
from
django.core.paginator
import
Paginator
,
PageNotAnInteger
,
EmptyPage
from
inspect_report.models
import
Seat
def
page_with_seat_name
(
all_objects
,
page
,
page_size
,
agent
=
False
):
paginator
=
Paginator
(
all_objects
,
page_size
)
total_count
=
paginator
.
count
try
:
objects
=
paginator
.
page
(
page
)
except
PageNotAnInteger
:
objects
=
paginator
.
page
(
1
)
except
EmptyPage
:
objects
=
paginator
.
page
(
paginator
.
num_pages
)
if
agent
:
objects
=
set_object_seat_name
(
objects
)
return
total_count
,
objects
def
set_object_seat_name
(
objects
):
agent_names
=
[
x
[
'agentName'
]
for
x
in
objects
]
seats_code_name_list
=
Seat
.
objects
.
filter
(
code__in
=
agent_names
)
.
values
(
'code'
,
'name'
)
seats_code_name
=
dict
()
for
seat_code_name
in
seats_code_name_list
:
seats_code_name
[
seat_code_name
[
'code'
]]
=
seat_code_name
[
'name'
]
for
object_dict
in
objects
:
object_dict
[
'seatName'
]
=
seats_code_name
.
get
(
object_dict
[
'agentName'
],
object_dict
[
'agentName'
])
return
objects
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment