generated from container/tmpl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
4.8 KiB
111 lines
4.8 KiB
SENIORS = ('刘文峰', '金亮', '姜珍', '余莎莎', '张阳根', '唐国华', '刘国勇', '刘会连', '肖琥', '邱峰', '姚文婷', '李跃')
|
|
IGNORE_PERSONS = ('黄红梅',)
|
|
IGNORE_PERSONS_SUBQUERY = f"and u.name != '{IGNORE_PERSONS[0]}'" if len(IGNORE_PERSONS) == 1 else f"and u.name not in {IGNORE_PERSONS}"
|
|
IGNORE_DEPARTMENTS = ('汇派-质量部', '汇派-生产部', '汇派-计划部', '汇派-人事部', '汇派-采购部',
|
|
'党建工会', '工程项目中心', '北京技术中心', '政委', '总经办-培训中心')
|
|
|
|
|
|
def querystring_department_user_procinst_duration(start, end, exclude_senior):
|
|
filter_user = f"and u.name not in {SENIORS + IGNORE_PERSONS}" if exclude_senior else IGNORE_PERSONS_SUBQUERY
|
|
return f'''
|
|
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 >='{start}' and wpa.end_time < '{end}' 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
|
|
and d.name not in {IGNORE_DEPARTMENTS}
|
|
{filter_user}
|
|
) as r
|
|
group by department_name, user_name, procinst_id
|
|
'''
|
|
|
|
|
|
def querystring_user_procinst_duration(start, end, senior):
|
|
filter_user = f"and u.name in {SENIORS}" if senior else IGNORE_PERSONS_SUBQUERY
|
|
return f'''
|
|
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
|
|
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 >='{start}' and wpa.end_time < '{end}' 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
|
|
and d.name not in {IGNORE_DEPARTMENTS}
|
|
{filter_user}
|
|
) as r
|
|
group by user_name, procinst_id
|
|
'''
|
|
|
|
|
|
# 按月统计项企平台使用人数
|
|
def querystring_user_count(start, end):
|
|
return f'''
|
|
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
|
|
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 >='{start}' and wpa.end_time < '{end}' and d.delete=0 and u.delete=0 and u.state=1 and u.active_status=1
|
|
and d.name not in {IGNORE_DEPARTMENTS}
|
|
{IGNORE_PERSONS_SUBQUERY}
|
|
'''
|
|
|
|
|
|
# 用户处理流程耗时+用户处理流程条数
|
|
def querystring_procinst_by_user(start, end, senior=False):
|
|
return '''
|
|
SELECT user_name,
|
|
count(*) as procinst_count_by_user,
|
|
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, senior))
|
|
|
|
|
|
# 各部门用户处理流程耗时+各部门用户处理流程条数
|
|
def querystring_procinst_by_department_user(start, end):
|
|
return """
|
|
SELECT department_name,
|
|
user_name,
|
|
count(*) as procinst_count_by_user,
|
|
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
|
|
order by procinst_duration_in_hours_by_user DESC
|
|
""".format(querystring_department_user_procinst_duration(start, end, True))
|
|
|