From 87327d36e9a0b98b06198fb57d22ad5777a3d82c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=80=C3=AE=C3=97=C3=9A=C3=95=C3=B1?= Date: Fri, 16 Sep 2022 18:24:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=BE=85=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api_v1/endpoints/forms.py | 224 ++++++++++++++++++++++++++++++++++ models/interview_zsgc.py | 61 ++++++++- 2 files changed, 283 insertions(+), 2 deletions(-) diff --git a/api/api_v1/endpoints/forms.py b/api/api_v1/endpoints/forms.py index 95e86dc..6507c8e 100644 --- a/api/api_v1/endpoints/forms.py +++ b/api/api_v1/endpoints/forms.py @@ -1235,6 +1235,230 @@ async def interview_funnel_form( return schemas.Msg(code=200, msg='ok', data=res_data) +# 初筛数量 +@router.post("/interview_start_form") +async def interview_start_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() + res = interview.get_hr_works_form_sql() + sql = res['sql'] + data = await ck_db.execute(sql) + + # 获取报表相关参数 + 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={}) + + res_msg = { + 'value': 0, + } + for i_data in data.values(): + stage = i_data['interview_stage'] + if stage >= 1: + res_msg['value'] += 1 + + res_data = { + 'data': res_msg, + 'table_data': table_data + } + return schemas.Msg(code=200, msg='ok', data=res_data) + + +# 面试数量 +@router.post("/interview_exam_form") +async def interview_exam_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() + res = interview.get_hr_works_form_sql() + sql = res['sql'] + data = await ck_db.execute(sql) + + # 获取报表相关参数 + 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={}) + + res_msg = { + 'value': 0, + } + for i_data in data.values(): + stage = i_data['interview_stage'] + if stage >= 3: + res_msg['value'] += 1 + + res_data = { + 'data': res_msg, + 'table_data': table_data + } + return schemas.Msg(code=200, msg='ok', data=res_data) + + +# 待入职数量 +@router.post("/interview_wait_in_form") +async def interview_wait_in_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() + res = interview.get_hr_works_form_sql() + sql = res['sql'] + data = await ck_db.execute(sql) + + # 获取报表相关参数 + 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={}) + + res_msg = { + 'value': 0, + } + for i_data in data.values(): + stage = i_data['interview_stage'] + if stage >= 5: + res_msg['value'] += 1 + + res_data = { + 'data': res_msg, + 'table_data': table_data + } + return schemas.Msg(code=200, msg='ok', data=res_data) + + +# 初筛渠道 +@router.post("/interview_stage1_owner_form") +async def interview_stage1_owner_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() + res = interview.get_owner_stage1_form_sql() + sql = res['sql'] + data = await ck_db.execute(sql) + + # 获取报表相关参数 + 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={}) + + # 简历渠道 + owner_dict = {1: '前程无忧', 2: '人才库', 3: '智联招聘', 4: 'Boss直聘', 5: '58同城', 6: '拉勾'} + chk_data = { + '前程无忧': [], + '人才库': [], + '智联招聘': [], + 'Boss直聘': [], + '58同城': [], + '拉勾': [] + } + for i in data.values(): + owner_name = owner_dict[i['owner_name']] + i_data = deepcopy(i) + chk_data[owner_name].append(i_data) + res_data = { + 'data': chk_data, + 'table_data': table_data, + } + return schemas.Msg(code=200, msg='ok', data=res_data) + + +# 招聘职位数 +@router.post("/interview_job_num_form") +async def interview_job_num_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: + """ 开放中的职位 """ + job_data = await crud.jobs.all_some_field + value = list(set([i['job_name'] for i in job_data])) + # 获取报表相关参数 + 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={}) + res_msg = { + 'value': len(value) + } + # 简历渠道 + res_data = { + 'data': res_msg, + 'table_data': table_data + } + return schemas.Msg(code=200, msg='ok', data=res_data) + + +# 招聘职位总人数数 +@router.post("/interview_job_need_num_form") +async def interview_job_need_num_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: + """ 职位招聘人数 """ + job_data = await crud.jobs.all_some_field + value = [i['job_num'] for i in job_data] + # 获取报表相关参数 + 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={}) + res_msg = { + 'value': sum(value) + } + # 简历渠道 + res_data = { + 'data': res_msg, + 'table_data': table_data + } + return schemas.Msg(code=200, msg='ok', data=res_data) + + # 渠道质量报表 @router.post("/owner_form") async def owner_form( diff --git a/models/interview_zsgc.py b/models/interview_zsgc.py index 02b8781..0c1364a 100644 --- a/models/interview_zsgc.py +++ b/models/interview_zsgc.py @@ -30,13 +30,13 @@ class InterviewDo: self.find_column = set() self.data_in = {} self.where = {} - self.data={} + self.data = {} async def init(self, *args, **kwargs): self.find_column = self.query_in.find_column self.data_in = self.query_in.data_in self.where = self.query_in.interview_query - self.data=self.query_in.data + self.data = self.query_in.data def handler_filts(self, where): """ @@ -759,6 +759,63 @@ class InterviewDo: 'sql': sql } + # 初筛渠道质量sql + def get_owner_stage1_form_sql(self): + findStr = '' + whereStr = '' + # 查询字段 + self.find_column = ["name", "owner_name", "interview_stage"] + for fstr in self.find_column: + findStr += fstr + ', ' + is_date = 0 + self.where.update({ + 'interview_stage': 1 + }) + if self.where: + for key, value in self.where.items(): + if isinstance(value, str): + if not value.strip(): + continue + if whereStr: + whereStr += 'and ' + str(key) + ' = ' + "'" + value + "'" + ' ' + else: + whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' + continue + if whereStr: + whereStr += 'and ' + str(key) + ' = ' + str(value) + ' ' + else: + whereStr += str(key) + ' = ' + str(value) + ' ' + whereStr = whereStr.strip() + findStr = findStr.strip().strip(',') + + # 有日期条件 + if is_date: + start_time = self.where.get('start_time', '') + end_time = self.where.get('end_time', '') + if whereStr: + sql = f"select {findStr} from HR.resumes where {whereStr}" + else: + sql = f"select {findStr} from HR.resumes" + if start_time or end_time: + sql += f" where" + if start_time: + if whereStr: + sql += f" and toDate(addHours(`event_time`, 0)) >= '{start_time}'" + else: + sql += f" toDate(addHours(`event_time`, 0)) >= '{start_time}'" + if end_time: + sql += f" and toDate(addHours(`event_time`, 0)) <= '{end_time}'" + # 没有日期条件 + else: + if whereStr: + sql = f"select {findStr} from HR.resumes where {whereStr}" + else: + sql = f"select {findStr} from HR.resumes" + print(sql) + return { + 'sql': sql + } + # 阶段数据sql def get_every_stage_form_sql(self, job_ids): findStr = ''