From 36b29c4b35daa9c7e1bb0771805d0102c1bfd7e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=80=C3=AE=C3=97=C3=9A=C3=95=C3=B1?= Date: Thu, 15 Sep 2022 11:21:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api_v1/endpoints/forms.py | 137 ++++++++++++++++++++++++++++ api/api_v1/endpoints/worker_info.py | 15 +++ 2 files changed, 152 insertions(+) diff --git a/api/api_v1/endpoints/forms.py b/api/api_v1/endpoints/forms.py index 08b903d..95e86dc 100644 --- a/api/api_v1/endpoints/forms.py +++ b/api/api_v1/endpoints/forms.py @@ -1777,3 +1777,140 @@ async def year_in_out( 'table_data': table_data } return schemas.Msg(code=200, msg='ok', data=res_data) + + +# 查询入职人员信息 +@router.post("/find_worker_form") +async def find_worker_form( + request: Request, + interview: InterviewDo = Depends(InterviewDo), + ck_db: CKDrive = Depends(get_ck_db), + db: AsyncIOMotorDatabase = Depends(get_database), + current_user: schemas.UserDB = Depends(deps.get_current_user) +) -> schemas.Msg: + """ 人才密度报表 """ + await interview.init() + + # 获取报表相关参数 + table_id = interview.data_in.get('table_id', '') + if not table_id: + return schemas.Msg(code=200, msg='报表数据错误', data={}) + + table_data = await crud.api_interview_tables.get_one_table(db, table_id) + if not table_data: + return schemas.Msg(code=200, msg='报表数据错误', data={}) + + data = await crud.worker_info.find_worker_some(db, findlist=interview.find_column) + if not data: + return schemas.Msg(code=-9, msg='无数据', data=None) + res_msg = { + '未评级': [i['name'] for i in data if i['job_level'] == '未评级'], + 'p1-p3': [i['name'] for i in data if i['job_level'] in ['p1', 'p2', 'p3']], + 'p4': [i['name'] for i in data if i['job_level'] == 'p4'], + 'p5': [i['name'] for i in data if i['job_level'] == 'p5'], + 'p6': [i['name'] for i in data if i['job_level'] == 'p6'], + 'p7': [i['name'] for i in data if i['job_level'] == 'p7'], + 'p8': [i['name'] for i in data if i['job_level'] == 'p8'], + 'm1': [i['name'] for i in data if i['job_level'] == 'm1'], + 'm2': [i['name'] for i in data if i['job_level'] == 'm2'], + 'm3': [i['name'] for i in data if i['job_level'] == 'm3'], + 'm4': [i['name'] for i in data if i['job_level'] == 'm4'], + '总人数': len(data) + } + res_data = [] + res_msg1 = { + 'title': '数量', + '未评级': len(res_msg['未评级']), + 'p1-p3': len(res_msg['p1-p3']), + 'p4': len(res_msg['p4']), + 'p5': len(res_msg['p5']), + 'p6': len(res_msg['p6']), + 'p7': len(res_msg['p7']), + 'p8': len(res_msg['p8']), + 'm1': len(res_msg['m1']), + 'm2': len(res_msg['m2']), + 'm3': len(res_msg['m3']), + 'm4': len(res_msg['m4']), + } + res_data.append(res_msg1) + res_msg2 = { + 'title': '占比', + '未评级': round(res_msg1['未评级'] / res_msg['总人数'], 2), + 'p1-p3': round(res_msg1['p1-p3'] / res_msg['总人数'], 2), + 'p4': round(res_msg1['p4'] / res_msg['总人数'], 2), + 'p5': round(res_msg1['p5'] / res_msg['总人数'], 2), + 'p6': round(res_msg1['p6'] / res_msg['总人数'], 2), + 'p7': round(res_msg1['p7'] / res_msg['总人数'], 2), + 'p8': round(res_msg1['p8'] / res_msg['总人数'], 2), + 'm1': round(res_msg1['m1'] / res_msg['总人数'], 2), + 'm2': round(res_msg1['m2'] / res_msg['总人数'], 2), + 'm3': round(res_msg1['m3'] / res_msg['总人数'], 2), + 'm4': round(res_msg1['m4'] / res_msg['总人数'], 2), + } + res_data.append(res_msg2) + level_list = { + 'title': '职级', + '未评级': '未评级', + 'p1-p3': 'p1-p3', + 'p4': 'p4', + 'p5': 'p5', + 'p6': 'p6', + 'p7': 'p7', + 'p8': 'p8', + 'm1': 'm1', + 'm2': 'm2', + 'm3': 'm3', + 'm4': 'm4' + } + res_true_msg = { + 'data': res_data, + 'level_list': level_list + } + res_true_data = { + 'data': res_true_msg, + 'table_data': table_data + } + return schemas.Msg(code=200, msg='ok', data=res_true_data) + + +# 查询统计数据 +@router.post("/find_count_info") +async def find_count_info( + + request: Request, + interview: InterviewDo = Depends(InterviewDo), + ck_db: CKDrive = Depends(get_ck_db), + db: AsyncIOMotorDatabase = Depends(get_database), + current_user: schemas.UserDB = Depends(deps.get_current_user) +) -> schemas.Msg: + """ 在职人员年份分布 """ + await interview.init() + + # 获取报表相关参数 + table_id = interview.data_in.get('table_id', '') + if not table_id: + return schemas.Msg(code=200, msg='报表数据错误', data={}) + + table_data = await crud.api_interview_tables.get_one_table(db, table_id) + if not table_data: + return schemas.Msg(code=200, msg='报表数据错误', data={}) + data = await crud.count_in_worker.find_count_some(db) + true_index = 0 + max_num = 0 + for index, i in enumerate(data): + if len(i.keys()) > max_num: + true_index = index + index_key = [k for k in data[true_index].keys()] + level_list = {i: i for i in index_key} + level_list.update({ + 'count_id': '月份' + }) + res_msg = { + 'data': data, + 'level_list': level_list + } + res_data = { + 'data': res_msg, + 'table_data': table_data + } + return schemas.Msg(code=200, msg='ok', data=res_data) diff --git a/api/api_v1/endpoints/worker_info.py b/api/api_v1/endpoints/worker_info.py index 0070760..b02b9f3 100644 --- a/api/api_v1/endpoints/worker_info.py +++ b/api/api_v1/endpoints/worker_info.py @@ -124,6 +124,21 @@ async def add_count_info( return schemas.Msg(code=-10, msg='本月数据已添加', data=None) worker_data = await crud.worker_info.find_worker_some(db, findlist=['name', 'work_in']) insert_data = { + '2008': 0, + '2009': 0, + '2010': 0, + '2011': 0, + '2012': 0, + '2013': 0, + '2014': 0, + '2015': 0, + '2016': 0, + '2017': 0, + '2018': 0, + '2019': 0, + '2020': 0, + '2021': 0, + '2022': 0, 'count_id': count_id } for chk_data in worker_data: