This commit is contained in:
Àî×ÚÕñ 2022-09-14 18:04:41 +08:00
parent 6f7dd4d0d6
commit ebc686d80d

View File

@ -782,12 +782,12 @@ async def man_info_form(
"phone": "电话", "phone": "电话",
"work_for": "上家公司" "work_for": "上家公司"
} }
res_data = { res_true_data = {
'data': res_data, 'data': res_data,
'level_list': level_list 'level_list': level_list
} }
res_msg = { res_msg = {
'data': res_data, 'data': res_true_data,
'table_data': table_data 'table_data': table_data
} }
return schemas.Msg(code=200, msg='ok', data=res_msg) return schemas.Msg(code=200, msg='ok', data=res_msg)
@ -814,13 +814,14 @@ async def every_stage_form(
job_id_to_name[job_id] = job_name job_id_to_name[job_id] = job_name
res_job_data = deepcopy({k: v for k, v in job_data.items() if k != 'job_id'}) res_job_data = deepcopy({k: v for k, v in job_data.items() if k != 'job_id'})
res_job_data.update({ res_job_data.update({
'初筛': 0, 'start_num': 0,
'复筛': 0, 'screen_num': 0,
'面试': 0, 'exam_num': 0,
'offer': 0, 'offer_num': 0,
'待入职': 0, 'wait_work_num': 0,
'已入职': job_data['now_job_num'], 'work_in_num': job_data['now_job_num'],
}) })
res_job_data['principal'] = res_job_data['principal'][0]['name']
res_msg[job_name] = res_job_data res_msg[job_name] = res_job_data
await interview.init() await interview.init()
@ -844,21 +845,42 @@ async def every_stage_form(
ck_job_name = job_id_to_name[ck_data['job_id']] ck_job_name = job_id_to_name[ck_data['job_id']]
stage = ck_data['interview_stage'] stage = ck_data['interview_stage']
if stage == 1: if stage == 1:
res_msg[ck_job_name]['初筛'] += 1 res_msg[ck_job_name]['start_num'] += 1
elif stage == 2: elif stage == 2:
res_msg[ck_job_name]['复筛'] += 1 res_msg[ck_job_name]['screen_num'] += 1
elif stage == 3: elif stage == 3:
res_msg[ck_job_name]['面试'] += 1 res_msg[ck_job_name]['exam_num'] += 1
elif stage == 4: elif stage == 4:
res_msg[ck_job_name]['offer'] += 1 res_msg[ck_job_name]['offer_num'] += 1
elif stage == 5: elif stage == 5:
res_msg[ck_job_name]['待入职'] += 1 res_msg[ck_job_name]['wait_work_num'] += 1
res_data = { res_data = []
'data': res_msg, for k, v in res_msg.items():
res_value = deepcopy(v)
res_data.append(res_value)
level_list = {
"job_name": "职位",
"job_sector": "部门",
"principal": "负责人",
"start_time": "招聘开始时间",
"job_num": "招聘人数",
"start_num": "初筛",
"screen_num": "复筛",
"exam_num": "面试",
"offer_num": "offer",
"wait_work_num": "待入职",
"work_in_num": "已入职"
}
res_true_data = {
'data': res_data,
'level_list': level_list
}
res_back_data = {
'data': res_true_data,
'table_data': table_data 'table_data': table_data
} }
return schemas.Msg(code=200, msg='ok', data=res_data) return schemas.Msg(code=200, msg='ok', data=res_back_data)
# hr工作量报表 # hr工作量报表
@ -1021,13 +1043,14 @@ async def stage_success_form(
job_id_to_name[job_id] = job_name job_id_to_name[job_id] = job_name
res_job_data = deepcopy({k: v for k, v in job_data.items() if k not in ['job_id', 'now_job_num']}) res_job_data = deepcopy({k: v for k, v in job_data.items() if k not in ['job_id', 'now_job_num']})
res_job_data.update({ res_job_data.update({
'初筛': 0, 'start_num': 0,
'复筛': 0, 'screen_num': 0,
'面试': 0, 'exam_num': 0,
'offer': 0, 'offer_num': 0,
'待入职': 0, 'wait_work_num': 0,
'已入职': 0 'work_in_num': 0
}) })
res_job_data['principal'] = res_job_data['principal'][0]['name']
res_msg[job_name] = res_job_data res_msg[job_name] = res_job_data
await interview.init() await interview.init()
@ -1051,25 +1074,25 @@ async def stage_success_form(
ck_job_name = job_id_to_name[ck_data['job_id']] ck_job_name = job_id_to_name[ck_data['job_id']]
stage = ck_data['interview_stage'] stage = ck_data['interview_stage']
if stage >= 1: if stage >= 1:
res_msg[ck_job_name]['初筛'] += 1 res_msg[ck_job_name]['start_num'] += 1
if stage >= 2: if stage >= 2:
res_msg[ck_job_name]['复筛'] += 1 res_msg[ck_job_name]['screen_num'] += 1
if stage >= 3: if stage >= 3:
res_msg[ck_job_name]['面试'] += 1 res_msg[ck_job_name]['exam_num'] += 1
if stage >= 4: if stage >= 4:
res_msg[ck_job_name]['offer'] += 1 res_msg[ck_job_name]['offer_num'] += 1
if stage >= 5: if stage >= 5:
res_msg[ck_job_name]['待入职'] += 1 res_msg[ck_job_name]['wait_work_num'] += 1
if stage >= 7: if stage >= 7:
res_msg[ck_job_name]['已入职'] += 1 res_msg[ck_job_name]['work_in_num'] += 1
for res_name, res_data in res_msg.items(): for res_name, res_data in res_msg.items():
chk_num1 = res_data['初筛'] chk_num1 = res_data['start_num']
chk_num2 = res_data['复筛'] chk_num2 = res_data['screen_num']
chk_num3 = res_data['面试'] chk_num3 = res_data['exam_num']
chk_num4 = res_data['offer'] chk_num4 = res_data['offer_num']
chk_num5 = res_data['待入职'] chk_num5 = res_data['wait_work_num']
chk_num7 = res_data['已入职'] chk_num7 = res_data['work_in_num']
if chk_num1 and chk_num2: if chk_num1 and chk_num2:
chance_1 = round(chk_num2 / chk_num1, 2) chance_1 = round(chk_num2 / chk_num1, 2)
else: else:
@ -1091,17 +1114,43 @@ async def stage_success_form(
else: else:
chance_5 = 0 chance_5 = 0
res_msg[res_name].update({ res_msg[res_name].update({
'初筛通过率': chance_1, 'chance_1': chance_1,
'复筛通过率': chance_2, 'chance_2': chance_2,
'面试通过率': chance_3, 'chance_3': chance_3,
'offer通过率': chance_4, 'chance_4': chance_4,
'待入职通过率': chance_5 'chance_5': chance_5
}) })
res_data = { res_data1 = []
'data': res_msg, for k, v in res_msg.items():
'table_data': table_data, res_value = deepcopy(v)
res_data1.append(res_value)
level_list = {
"job_name": "职位",
"job_sector": "部门",
"principal": "负责人",
"start_time": "招聘开始时间",
"job_num": "招聘人数",
"start_num": "初筛",
"screen_num": "复筛",
"exam_num": "面试",
"offer_num": "offer",
"wait_work_num": "待入职",
"work_in_num": "已入职",
"chance_1": "初筛通过率",
"chance_2": "复筛通过率",
"chance_3": "面试通过率",
"chance_4": "offer通过率",
"chance_5": "待入职通过率"
} }
return schemas.Msg(code=200, msg='ok', data=res_data) res_true_data = {
'data': res_data1,
'level_list': level_list
}
res_back_data = {
'data': res_true_data,
'table_data': table_data
}
return schemas.Msg(code=200, msg='ok', data=res_back_data)
# 招聘漏斗报表 # 招聘漏斗报表
@ -1237,11 +1286,28 @@ async def owner_form(
res_msg[key]['work_num'] = work_num res_msg[key]['work_num'] = work_num
res_msg[key]['offer_chance'] = offer_chance res_msg[key]['offer_chance'] = offer_chance
res_msg[key]['work_chance'] = work_chance res_msg[key]['work_chance'] = work_chance
res_data = { res_data = []
'data': res_msg, for k, v in res_msg.items():
v.update({'owner_name': k})
res_value = deepcopy(v)
res_data.append(res_value)
level_list = {
"owner_name": "渠道",
"count": "总数",
"offer_num": "面试通过",
"work_num": "入职人数",
"offer_chance": "面试通过率",
"work_chance": "入职率",
}
res_true_data = {
'data': res_data,
'level_list': level_list
}
res_back_data = {
'data': res_true_data,
'table_data': table_data 'table_data': table_data
} }
return schemas.Msg(code=200, msg='ok', data=res_data) return schemas.Msg(code=200, msg='ok', data=res_back_data)
# 渠道效果报表 # 渠道效果报表
@ -1306,27 +1372,50 @@ async def owner_effect(
for key, data_list in chk_data.items(): for key, data_list in chk_data.items():
count_num = len(data_list) count_num = len(data_list)
star_num = len([1 for i in data_list if i['interview_stage'] >= 1]) # 初筛 start_num = len([1 for i in data_list if i['interview_stage'] >= 1]) # 初筛
screen_num = len([1 for i in data_list if i['interview_stage'] >= 2]) # 复筛 screen_num = len([1 for i in data_list if i['interview_stage'] >= 2]) # 复筛
exam_num = len([1 for i in data_list if i['interview_stage'] >= 3]) # 面试 exam_num = len([1 for i in data_list if i['interview_stage'] >= 3]) # 面试
offer_num = len([1 for i in data_list if i['interview_stage'] >= 4]) # offer offer_num = len([1 for i in data_list if i['interview_stage'] >= 4]) # offer
work_num = len([1 for i in data_list if i['interview_stage'] >= 7]) # 入职 work_num = len([1 for i in data_list if i['interview_stage'] >= 7]) # 入职
res_msg[key]['count'] = count_num res_msg[key]['count'] = count_num
res_msg[key]['star_num'] = star_num res_msg[key]['start_num'] = start_num
res_msg[key]['screen_num'] = screen_num res_msg[key]['screen_num'] = screen_num
res_msg[key]['exam_num'] = exam_num res_msg[key]['exam_num'] = exam_num
res_msg[key]['offer_num'] = offer_num res_msg[key]['offer_num'] = offer_num
res_msg[key]['work_num'] = work_num res_msg[key]['work_num'] = work_num
res_msg[key]['year_money'] = 0 res_msg[key]['year_money'] = 0
res_msg[key]['one_money'] = 0
year = interview.where.get('start_time', '2022').split('-')[0] year = interview.where.get('start_time', '2022').split('-')[0]
owner_info = await crud.owner_info.find_owner_some(db, where={'year': year}, owner_info = await crud.owner_info.find_owner_some(db, where={'year': year},
findlist=['owner_name', 'year_money']) findlist=['owner_name', 'year_money'])
for i in owner_info: for i in owner_info:
if i['owner_name'] in res_msg: if i['owner_name'] in res_msg:
res_msg[i['owner_name']]['year_money'] = i['year_money'] res_msg[i['owner_name']]['year_money'] = i['year_money']
if res_msg[i['owner_name']]['count'] != 0:
res_msg[i['owner_name']]['one_money'] = res_msg[i['owner_name']]['year_money'] / res_msg[i['count']][
'one_money']
res_data = []
for k, v in res_msg.items():
v.update({'owner_name': k})
res_value = deepcopy(v)
res_data.append(res_value)
level_list = {
"owner_name": "渠道",
"count": "总数",
"start_num": "推荐简历",
"screen_num": "有效简历",
"exam_num": "到场面试数",
"offer_num": "面试通过",
"work_num": "入职人数",
"year_money": "成本",
"one_money": "人均成本",
}
res_true_msg = {
'data': res_data,
'level_list': level_list
}
res_true_data = { res_true_data = {
'data': res_msg, 'data': res_true_msg,
'table_data': table_data 'table_data': table_data
} }
return schemas.Msg(code=200, msg='ok', data=res_true_data) return schemas.Msg(code=200, msg='ok', data=res_true_data)
@ -1415,16 +1504,16 @@ async def year_trend_form(
res_msg = {} res_msg = {}
for i in months: for i in months:
res_msg[str(i)] = { res_msg[str(i)] = {
'简历推荐数': 0, 'start_num': 0,
'有效简历数': 0, 'ok_num': 0,
'到场面试数': 0, 'exam_num': 0,
'面试通过': 0, 'exam_pass_num': 0,
'offer发出数': 0, 'offer_num': 0,
'入职人数': 0, 'work_num': 0,
'转正人数': 0, 'work_ok_num': 0,
'离职人数': 0, 'out_num': 0,
'主动离职': 0, 'out_self_num': 0,
'被动离职': 0 'out_must_num': 0
} }
for chk_data in data.values(): for chk_data in data.values():
@ -1434,30 +1523,52 @@ async def year_trend_form(
chk_stage = chk_data['interview_stage'] chk_stage = chk_data['interview_stage']
count_num = chk_data['value'] count_num = chk_data['value']
if chk_stage >= 1: if chk_stage >= 1:
res_msg[chk_date]['简历推荐数'] += 1 * count_num res_msg[chk_date]['start_num'] += 1 * count_num
if chk_stage >= 2: if chk_stage >= 2:
res_msg[chk_date]['有效简历数'] += 1 * count_num res_msg[chk_date]['ok_num'] += 1 * count_num
if chk_stage >= 3: if chk_stage >= 3:
res_msg[chk_date]['到场面试数'] += 1 * count_num res_msg[chk_date]['exam_num'] += 1 * count_num
if chk_stage >= 4: if chk_stage >= 4:
res_msg[chk_date]['面试通过'] += 1 * count_num res_msg[chk_date]['exam_pass_num'] += 1 * count_num
if chk_stage >= 5: if chk_stage >= 5:
res_msg[chk_date]['offer发出数'] += 1 * count_num res_msg[chk_date]['offer_num'] += 1 * count_num
if chk_stage >= 7: if chk_stage >= 7:
res_msg[chk_date]['入职人数'] += 1 * count_num res_msg[chk_date]['work_num'] += 1 * count_num
if chk_stage >= 8: if chk_stage >= 8:
res_msg[chk_date]['转正人数'] += 1 * count_num res_msg[chk_date]['work_ok_num'] += 1 * count_num
if chk_stage == 9: if chk_stage == 9:
res_msg[chk_date]['离职人数'] += 1 * count_num res_msg[chk_date]['out_num'] += 1 * count_num
res_msg[chk_date]['主动离职'] += 1 * count_num res_msg[chk_date]['out_self_num'] += 1 * count_num
if chk_stage == 10: if chk_stage == 10:
res_msg[chk_date]['离职人数'] += 1 * count_num res_msg[chk_date]['out_num'] += 1 * count_num
res_msg[chk_date]['被动离职'] += 1 * count_num res_msg[chk_date]['out_must_num'] += 1 * count_num
res_data = { res_data = []
'data': res_msg, for k, v in res_msg.items():
v.update({'time': k})
res_v = deepcopy(v)
res_data.append(res_v)
level_list = {
"time": "时间",
"start_num": "简历推荐数",
"ok_num": "有效简历数",
"exam_num": "到场面试数",
"exam_pass_num": "面试通过",
"offer_num": "offer发出数",
"work_num": "入职人数",
"work_ok_num": "转正人数",
"out_num": "离职人数",
"out_self_num": "主动离职",
"out_must_num": "被动离职"
}
res_true_data = {
'data': res_data,
'level_list': level_list
}
res_back_data = {
'data': res_true_data,
'table_data': table_data 'table_data': table_data
} }
return schemas.Msg(code=200, msg='ok', data=res_data) return schemas.Msg(code=200, msg='ok', data=res_back_data)
# 年度岗位招聘数据报表 # 年度岗位招聘数据报表
@ -1548,7 +1659,16 @@ async def year_job_form(
else: else:
res_data[k]['其他'] = {} res_data[k]['其他'] = {}
res_data[k]['其他'].update({'其他': v1}) res_data[k]['其他'].update({'其他': v1})
level_list = {
"time": "时间",
"start_num": "简历推荐数",
"ok_num": "有效简历数",
"exam_num": "到场面试数",
"exam_pass_num": "面试通过",
"offer_num": "offer发出数",
"work_num": "入职人数",
"out_num": "离职人数"
}
res_true_data = { res_true_data = {
'data': res_data, 'data': res_data,
'table_data': table_data 'table_data': table_data
@ -1586,28 +1706,27 @@ async def year_in_out(
edate = res['edate'] edate = res['edate']
months = get_every_months(sdate, edate) months = get_every_months(sdate, edate)
res_msg = { res_msg = {
'入职': {},
'离职': {}
} }
for i in months: for i in months:
res_msg['入职'][str(i)] = 0 res_msg[str(i)] = {}
res_msg['离职'][str(i)] = 0 res_msg[str(i)]['入职'] = 0
res_msg[str(i)]['离职'] = 0
# 入职数据处理 # 入职数据处理
for in_data in data_in.values(): for in_data in data_in.values():
in_date = datetime.strftime(in_data['date'], '%Y-%m') in_date = datetime.strftime(in_data['date'], '%Y-%m')
if in_date not in res_msg['入职']: if in_date not in res_msg:
continue continue
value = in_data['value'] value = in_data['value']
res_msg['入职'][in_date] += value res_msg[in_date]['入职'] += value
# 离职数据处理 # 离职数据处理
for out_data in data_out.values(): for out_data in data_out.values():
out_date = datetime.strftime(out_data['date'], '%Y-%m') out_date = datetime.strftime(out_data['date'], '%Y-%m')
if out_date not in res_msg['离职']: if out_date not in res_msg:
continue continue
value = out_data['value'] value = out_data['value']
res_msg['离职'][out_date] += value res_msg[out_date]['离职'] += value
res_data = { res_data = {
'data': res_msg, 'data': res_msg,
'table_data': table_data 'table_data': table_data