|
|
|
def querystring_user_procinst_duration(start, end, except_senior, department):
|
|
|
|
filter_user = "and u.name not in ('刘文峰', '金亮', '姜珍', '余莎莎', '张阳根', '唐国华', '刘国勇', '刘会连', '肖琥', '邱峰')" if except_senior else ""
|
|
|
|
filter_department = "and department_name='{}'".format(department) if department else ""
|
|
|
|
return '''
|
|
|
|
select department_name,
|
|
|
|
user_name,
|
|
|
|
procinst_id,
|
|
|
|
sum(duration_in_minutes) as procinst_duration_in_minutes
|
|
|
|
from (
|
|
|
|
select distinct d.id as department_id,
|
|
|
|
d.name as department_name,
|
|
|
|
u.id as user_id,
|
|
|
|
u.name as user_name,
|
|
|
|
wp.name as process_name,
|
|
|
|
wpa.procinst_id as procinst_id,
|
|
|
|
wpa.task_id as taskinst_id,
|
|
|
|
wpa.task_name as task_name,
|
|
|
|
wpa.start_time as start_time,
|
|
|
|
wpa.end_time as end_time,
|
|
|
|
wpa.total_minutes as duration_in_minutes
|
|
|
|
from workflow_process_achievements as wpa
|
|
|
|
inner join workflow_process_history as wph on wpa.procinst_id=wph.procinst_id
|
|
|
|
inner join workflow_process_version as wpv on wph.version_id=wpv.id
|
|
|
|
inner join workflow_process as wp on wpv.process_id=wp.id
|
|
|
|
inner join user as u on wpa.deal_user_id=u.id
|
|
|
|
inner join department_user as du on u.id=du."user"
|
|
|
|
inner join department as d on du.department=d.id
|
|
|
|
where wpa.end_time >='{}' and wpa.end_time < '{}' and wp.deleted=false and wp.is_enable=true and d.delete=0 and u.delete=0 and u.state=1 and u.active_status=1
|
|
|
|
{} {}
|
|
|
|
) as r
|
|
|
|
group by department_name, user_name, procinst_id
|
|
|
|
'''.format(start, end, filter_user, filter_department)
|
|
|
|
|
|
|
|
|
|
|
|
def querystring_senior_procinst_duration(start, end):
|
|
|
|
return '''
|
|
|
|
select user_name,
|
|
|
|
procinst_id,
|
|
|
|
sum(duration_in_minutes) as procinst_duration_in_minutes
|
|
|
|
from (
|
|
|
|
select distinct u.id as user_id,
|
|
|
|
u.name as user_name,
|
|
|
|
wp.name as process_name,
|
|
|
|
wpa.procinst_id as procinst_id,
|
|
|
|
wpa.task_id as taskinst_id,
|
|
|
|
wpa.task_name as task_name,
|
|
|
|
wpa.start_time as start_time,
|
|
|
|
wpa.end_time as end_time,
|
|
|
|
wpa.total_minutes as duration_in_minutes
|
|
|
|
from workflow_process_achievements as wpa
|
|
|
|
inner join workflow_process_history as wph on wpa.procinst_id=wph.procinst_id
|
|
|
|
inner join workflow_process_version as wpv on wph.version_id=wpv.id
|
|
|
|
inner join workflow_process as wp on wpv.process_id=wp.id
|
|
|
|
inner join user as u on wpa.deal_user_id=u.id
|
|
|
|
where wpa.end_time >='{}' and wpa.end_time < '{}' and wp.deleted=false and wp.is_enable=true and u.delete=0 and u.state=1 and u.active_status=1
|
|
|
|
and u.name in ('刘文峰', '金亮', '姜珍', '余莎莎', '张阳根', '唐国华', '刘国勇', '刘会连', '肖琥', '邱峰')
|
|
|
|
) as r
|
|
|
|
group by user_name, procinst_id
|
|
|
|
'''.format(start, end)
|
|
|
|
|
|
|
|
|
|
|
|
# 按月统计项企平台使用人数
|
|
|
|
def querystring_user_count(start, end):
|
|
|
|
return '''
|
|
|
|
select count(distinct deal_user_id) as pep_using_user_count
|
|
|
|
from workflow_process_achievements as wpa
|
|
|
|
inner join user as u on wpa.deal_user_id=u.id
|
|
|
|
where wpa.end_time >='{}' and wpa.end_time < '{}' and u.delete=0 and u.state=1 and u.active_status=1
|
|
|
|
'''.format(start, end)
|
|
|
|
|
|
|
|
|
|
|
|
# 个人处理流程平均耗时
|
|
|
|
def querystring_procinst_duration_by_company(start, end):
|
|
|
|
return '''
|
|
|
|
SELECT ROUND(AVG(procinst_duration_in_minutes_by_user) /60, 2) as procinst_duration_in_hours from (
|
|
|
|
SELECT user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes), 2) as procinst_duration_in_minutes_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
GROUP by r2.user_name
|
|
|
|
) as r3
|
|
|
|
'''.format(querystring_user_procinst_duration(start, end, False, ''))
|
|
|
|
|
|
|
|
|
|
|
|
# 部门数(高于公司平均数)
|
|
|
|
def querystring_department_count_gt_avg(start, end, avg):
|
|
|
|
return '''
|
|
|
|
SELECT count(*) from (
|
|
|
|
SELECT department_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_hours_by_user), 2) as procinst_duration_in_hours_by_department
|
|
|
|
from (
|
|
|
|
SELECT department_name,
|
|
|
|
user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
GROUP by r2.department_name, r2.user_name
|
|
|
|
) as r3
|
|
|
|
GROUP by r3.department_name
|
|
|
|
) as r4
|
|
|
|
WHERE procinst_duration_in_hours_by_department > {}
|
|
|
|
'''.format(querystring_user_procinst_duration(start, end, True, ''), avg)
|
|
|
|
|
|
|
|
|
|
|
|
# 用户数(高于公司平均数)
|
|
|
|
def querystring_user_count_gt_avg(start, end, avg):
|
|
|
|
return '''
|
|
|
|
SELECT count(*) from (
|
|
|
|
SELECT user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
group by r2.user_name
|
|
|
|
) as r3
|
|
|
|
WHERE r3.procinst_duration_in_hours_by_user > {}
|
|
|
|
'''.format(querystring_user_procinst_duration(start, end, False, ''), avg)
|
|
|
|
|
|
|
|
|
|
|
|
# 部门处理流程平均耗时
|
|
|
|
def querystring_procinst_duration_by_department(start, end):
|
|
|
|
return """
|
|
|
|
SELECT department_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_hours_by_user), 2) as procinst_duration_in_hours_by_department
|
|
|
|
from (
|
|
|
|
SELECT department_name,
|
|
|
|
user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
GROUP by r2.department_name, r2.user_name
|
|
|
|
) as r3
|
|
|
|
GROUP by r3.department_name
|
|
|
|
order by procinst_duration_in_hours_by_department DESC
|
|
|
|
""".format(querystring_user_procinst_duration(start, end, True, ''))
|
|
|
|
|
|
|
|
|
|
|
|
# 部门处理流程平均耗时(高管)
|
|
|
|
def querystring_procinst_duration_by_senior(start, end):
|
|
|
|
return '''
|
|
|
|
SELECT ROUND(AVG(procinst_duration_in_hours_by_user), 2) as procinst_duration_in_hours_by_department
|
|
|
|
from (
|
|
|
|
SELECT user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
GROUP by r2.user_name
|
|
|
|
) as r3
|
|
|
|
'''.format(querystring_senior_procinst_duration(start, end))
|
|
|
|
|
|
|
|
|
|
|
|
# 用户单流程处理耗时(高管)
|
|
|
|
def querystring_procinst_duration_by_user_senior(start, end):
|
|
|
|
return '''
|
|
|
|
SELECT user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
GROUP by r2.user_name
|
|
|
|
order by procinst_duration_in_hours_by_user DESC
|
|
|
|
'''.format(querystring_senior_procinst_duration(start, end))
|
|
|
|
|
|
|
|
|
|
|
|
# 各部门耗时较长用户(高管)
|
|
|
|
def querystring_user_gt_senior_avg(start, end, avg):
|
|
|
|
return '''
|
|
|
|
SELECT * from (
|
|
|
|
SELECT user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
GROUP by r2.user_name
|
|
|
|
) as r3
|
|
|
|
WHERE r3.procinst_duration_in_hours_by_user > {}
|
|
|
|
order by procinst_duration_in_hours_by_user DESC
|
|
|
|
'''.format(querystring_senior_procinst_duration(start, end), avg)
|
|
|
|
|
|
|
|
|
|
|
|
# 各部门耗时较长用户
|
|
|
|
def querystring_user_gt_department_avg(start, end, department, avg):
|
|
|
|
return """
|
|
|
|
SELECT * from (
|
|
|
|
SELECT user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
group by r2.user_name
|
|
|
|
) as r3
|
|
|
|
WHERE r3.procinst_duration_in_hours_by_user > {}
|
|
|
|
order by procinst_duration_in_hours_by_user desc
|
|
|
|
""".format(querystring_user_procinst_duration(start, end, True, department), avg)
|
|
|
|
|
|
|
|
|
|
|
|
# 按部门统计用户单流程处理耗时
|
|
|
|
def querystring_procinst_duration_by_user(start, end, department):
|
|
|
|
return """
|
|
|
|
SELECT user_name,
|
|
|
|
ROUND(AVG(procinst_duration_in_minutes) /60, 2) as procinst_duration_in_hours_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
group by r2.user_name
|
|
|
|
order by procinst_duration_in_hours_by_user DESC
|
|
|
|
""".format(querystring_user_procinst_duration(start, end, True, department))
|
|
|
|
|
|
|
|
|
|
|
|
# 按部门统计用户处理流程数量
|
|
|
|
def querystring_procinst_count_by_user(start, end, department):
|
|
|
|
return '''
|
|
|
|
SELECT user_name,
|
|
|
|
COUNT(*) as procinst_count_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
group by r2.user_name
|
|
|
|
'''.format(querystring_user_procinst_duration(start, end, True, department))
|
|
|
|
|
|
|
|
|
|
|
|
# 用户处理流程数量(高管)
|
|
|
|
def querystring_procinst_count_by_senior(start, end):
|
|
|
|
return '''
|
|
|
|
SELECT user_name,
|
|
|
|
COUNT(*) as procinst_count_by_user
|
|
|
|
from ({}) as r2
|
|
|
|
group by r2.user_name
|
|
|
|
'''.format(querystring_senior_procinst_duration(start, end))
|