@ -22,7 +22,7 @@ from schemas import ExtendendOAuth
from utils . dingding import *
from utils . dingding import *
from utils . jianli import get_resume
from utils . jianli import get_resume
from utils . re_to_jianli import fmt_txt , getText_pdf
from utils . re_to_jianli import fmt_txt , getText_pdf
from utils . func import get_uid , send_affix_mail
from utils . func import get_uid , send_affix_mail , judge , hours
import crud , schemas
import crud , schemas
from datetime import datetime
from datetime import datetime
from core . configuration import *
from core . configuration import *
@ -377,6 +377,7 @@ async def interview_update(
await interview . init ( )
await interview . init ( )
res = interview . update_interview_sql ( )
res = interview . update_interview_sql ( )
sql = res [ ' sql ' ]
sql = res [ ' sql ' ]
print ( sql )
# try:
# try:
inte_stage = interview . data_in . get ( ' interview_stage ' , 0 ) # 修改的简历阶段
inte_stage = interview . data_in . get ( ' interview_stage ' , 0 ) # 修改的简历阶段
if inte_stage == 1 : # 人才推荐进入初筛时分配面试官和HR
if inte_stage == 1 : # 人才推荐进入初筛时分配面试官和HR
@ -405,7 +406,7 @@ async def interview_update(
f " interview_stage = 1 ,hr_name = ' { nicknames1 } ' ,hr_id = ' { user_ids1 } ' , " , 1 )
f " interview_stage = 1 ,hr_name = ' { nicknames1 } ' ,hr_id = ' { user_ids1 } ' , " , 1 )
interviews = int ( interview . data . get ( ' interview_stage ' , ' 0 ' ) ) # 当前简历阶段
interviews = int ( interview . data . get ( ' interview_stage ' , ' 0 ' ) ) # 当前简历阶段
if interview . data_in . get ( ' interview_stage ' , ' ' ) == 11 : # 当是淘汰时则把淘汰的时间,阶段等都记录下来
if interview . data_in . get ( ' interview_stage ' , ' ' ) == 11 : # 当是淘汰时则把淘汰的时间,阶段等都记录下来
now = str ( datetime . datetime. now( ) ) . split ( ' . ' ) [ 0 ]
now = str ( datetime . now( ) ) . split ( ' . ' ) [ 0 ]
sql = sql . replace ( " interview_stage = 11 " , f " interview_stage = 11,ago= { interviews } ,pass_time= ' { now } ' " )
sql = sql . replace ( " interview_stage = 11 " , f " interview_stage = 11,ago= { interviews } ,pass_time= ' { now } ' " )
data = await ckdb . execute ( sql )
data = await ckdb . execute ( sql )
print ( sql )
print ( sql )
@ -428,7 +429,7 @@ async def interview_update(
res = await crud . user . get_users ( db , userid_list )
res = await crud . user . get_users ( db , userid_list )
unionid_list = [ i [ ' unionid ' ] for i in res ]
unionid_list = [ i [ ' unionid ' ] for i in res ]
Sample . create_task ( ' 淘汰通知 ' , current_user . unionid , content , unionid_list ) # 待办通知
Sample . create_task ( ' 淘汰通知 ' , current_user . unionid , content , unionid_list ) # 待办通知
if interview . data_in . get ( ' hr_manner ' , 10 ) in [ 0 , 1 ] :
if interview . data_in . get ( ' hr_manner ' , 10 ) in [ 0 , 1 ] : # 1表示用人经理同意你的推荐人进入复筛阶段, 0不同意
# 更新推荐记录
# 更新推荐记录
await crud . department . update ( db , { ' types ' : True } , interview . where . get ( ' uid ' ) )
await crud . department . update ( db , { ' types ' : True } , interview . where . get ( ' uid ' ) )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = data )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = data )
@ -717,7 +718,8 @@ async def file_to_hw(
print ( ' errorCode: ' , res . errorCode )
print ( ' errorCode: ' , res . errorCode )
print ( ' errorMessage: ' , res . errorMessage )
print ( ' errorMessage: ' , res . errorMessage )
return schemas . Msg ( code = 400 , msg = ' 上传华为云失败 ' , data = None )
return schemas . Msg ( code = 400 , msg = ' 上传华为云失败 ' , data = None )
except :
except Exception as e :
print ( e )
return schemas . Msg ( code = 400 , msg = ' 上传华为云失败或者解析失败 ' , data = None )
return schemas . Msg ( code = 400 , msg = ' 上传华为云失败或者解析失败 ' , data = None )
@ -1231,6 +1233,8 @@ async def get_job(
"""
"""
# 获取各个职位的候选人总数
# 获取各个职位的候选人总数
df = await ckdb . query_dataframe ( sql1 )
df = await ckdb . query_dataframe ( sql1 )
if df . empty :
return schemas . Msg ( code = - 9 , msg = ' 无数据 ' , data = ' ' )
job_dict = dict ( zip ( df [ ' job_id ' ] , df [ ' nu ' ] ) )
job_dict = dict ( zip ( df [ ' job_id ' ] , df [ ' nu ' ] ) )
for i in res :
for i in res :
job_list = { }
job_list = { }
@ -2013,11 +2017,11 @@ async def login(
' rank ' : user . rank , # 区分hr和面试官
' rank ' : user . rank , # 区分hr和面试官
' nickname ' : user . nickname , # 显示名
' nickname ' : user . nickname , # 显示名
' token ' : security . create_access_token (
' token ' : security . create_access_token (
expires_delta = access_token_expires , user_id = user . user_id , email = user . email ,
expires_delta = access_token_expires , user_id = user . user_id , email = user . email , nickname = user . nickname ,
tel = user . tel , name = user . name , rank = user . rank , unionid = user . unionid , _id = str ( user . id ) ) ,
tel = user . tel , name = user . name , rank = user . rank , unionid = user . unionid , _id = str ( user . id ) ) ,
" token_type " : " bearer " } ,
" token_type " : " bearer " } ,
' access_token ' : security . create_access_token (
' access_token ' : security . create_access_token (
expires_delta = access_token_expires , user_id = user . user_id , email = user . email ,
expires_delta = access_token_expires , user_id = user . user_id , email = user . email , nickname = user . nickname ,
tel = user . tel , name = user . name , rank = user . rank , unionid = user . unionid , _id = str ( user . id )
tel = user . tel , name = user . name , rank = user . rank , unionid = user . unionid , _id = str ( user . id )
) ,
) ,
" token_type " : " bearer " ,
" token_type " : " bearer " ,
@ -2459,6 +2463,9 @@ async def send_interviewee(
' create ' : str ( datetime . now ( ) ) . split ( ' . ' ) [ 0 ] }
' create ' : str ( datetime . now ( ) ) . split ( ' . ' ) [ 0 ] }
# 先查有没有推荐记录
# 先查有没有推荐记录
res = await crud . department . where_dep ( db , { ' uid ' : data_in . uid } )
res = await crud . department . where_dep ( db , { ' uid ' : data_in . uid } )
# 放入任务之中
judge ( * * { ' uid ' : data_in . uid , ' subject ' : ' 推荐通知 ' , ' creator_id ' : current_user . unionid ,
' description ' : send , ' executor_ids ' : unionid_list , " types " : False , ' times ' : hours ( ) } )
if res == [ ] : # 没有则创建
if res == [ ] : # 没有则创建
await crud . department . create ( db , datas )
await crud . department . create ( db , datas )
else : # 有就更新
else : # 有就更新
@ -2517,6 +2524,7 @@ async def add_interviewee(
user_data = df1 [ 0 ]
user_data = df1 [ 0 ]
# 存份面试数据到mongodb
# 存份面试数据到mongodb
now_time = str ( datetime . now ( ) ) . split ( ' . ' ) [ 0 ]
now_time = str ( datetime . now ( ) ) . split ( ' . ' ) [ 0 ]
relevancy_id = get_uid ( )
await crud . interview_record . insert_record ( db , { ' uid ' : user_data [ ' uid ' ] , # 唯一id
await crud . interview_record . insert_record ( db , { ' uid ' : user_data [ ' uid ' ] , # 唯一id
' name ' : user_data [ ' name ' ] , # 求职者姓名
' name ' : user_data [ ' name ' ] , # 求职者姓名
' interview_name ' : user_data [ ' interview_name ' ] , # 面试官姓名
' interview_name ' : user_data [ ' interview_name ' ] , # 面试官姓名
@ -2529,7 +2537,8 @@ async def add_interviewee(
' times ' : now_time , # 创建数据日期
' times ' : now_time , # 创建数据日期
' read_status ' : 0 , # 读取状态
' read_status ' : 0 , # 读取状态
' back_status ' : 0 , # 反馈状态
' back_status ' : 0 , # 反馈状态
' type ' : ' interview ' # 记录的类型
' type ' : ' interview ' , # 记录的类型
' relevancy_id ' : relevancy_id # 标识,关联面试反馈用
} )
} )
# 创建空白的面试反馈到mdb数据库
# 创建空白的面试反馈到mdb数据库
survey = { }
survey = { }
@ -2543,7 +2552,7 @@ async def add_interviewee(
" evaluate " : " " ,
" evaluate " : " " ,
" teacher_back " : 0 ,
" teacher_back " : 0 ,
' type ' : False }
' type ' : False }
await crud . feedback . ins_feedback ( db , schemas . Feedback ( uid = data_in . uid , survey = survey ))
await crud . feedback . ins_feedback ( db , schemas . Feedback ( uid = data_in . uid , survey = survey ,relevancy_id = relevancy_id ))
return schemas . Msg ( code = 200 , msg = ' ok ' , data = ' ' )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = ' ' )
@ -2877,8 +2886,18 @@ async def hint(
""" 个人面试记录 """
""" 个人面试记录 """
res = [ ]
res = [ ]
interview = await crud . interview_record . all_fields ( db , { ' uid ' : data_in . uid } )
interview = await crud . interview_record . all_fields ( db , { ' uid ' : data_in . uid } )
#面试反馈
data = await crud . feedback . one_feedback ( db , { ' uid ' : data_in . uid } )
for i in interview :
for i in interview :
i . pop ( ' _id ' )
i . pop ( ' _id ' )
for ii in data :
if i [ ' relevancy_id ' ] == ii [ ' relevancy_id ' ] :
survey = [ ]
for k , v in ii [ ' survey ' ] . items ( ) :
vlave = v
vlave [ ' user_id ' ] = k
survey . append ( vlave )
i [ ' survey ' ] = survey
res . append ( i )
res . append ( i )
data = sorted ( res , key = operator . itemgetter ( ' times ' ) )
data = sorted ( res , key = operator . itemgetter ( ' times ' ) )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = data )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = data )
@ -2893,8 +2912,8 @@ async def talent_pool(
current_user : schemas . UserDB = Depends ( deps . get_current_user )
current_user : schemas . UserDB = Depends ( deps . get_current_user )
) - > schemas . Msg :
) - > schemas . Msg :
""" 获取人才库数据,分页查询 """
""" 获取人才库数据,分页查询 """
find_column = [ " uid " , " gender " , " at_school " , " name " , " event_time " , " education " , " school " , " specialty " ,
find_column = [ " uid " , " gender " , " at_school " , " name " , " event_time " , " education " , " school " , " specialty " , " work_list " ,
" work_exp " , " job_id " , " job_names " , " ago " , " pass_time" " job_name " , " pass_why " , " pass_text " ]
" work_exp " , " job_id " , " job_names " , " ago " , " age" , " pass_time" , " job_name " , " pass_why " , " pass_text " ]
find_columns = ' , ' . join ( find_column )
find_columns = ' , ' . join ( find_column )
if data_in . date != { } :
if data_in . date != { } :
strs = [ ]
strs = [ ]
@ -2904,18 +2923,107 @@ async def talent_pool(
strs . append ( str_s )
strs . append ( str_s )
where = ' and ' . join ( strs )
where = ' and ' . join ( strs )
sql = f """
sql = f """
select { find_columns } from HR . resumes where interview_stage = - 1 and { where } ORDER BY event_time
select { find_columns } from HR . resumes where interview_stage = 1 1 and { where } ORDER BY event_time
LIMIT 10 OFFSET { ( data_in . pages - 1 ) * 10 }
LIMIT 10 OFFSET { ( data_in . pages - 1 ) * 10 }
"""
"""
else :
else :
sql = f """
sql = f """
select { find_columns } from HR . resumes where interview_stage = - 1 ORDER BY event_time
select { find_columns } from HR . resumes where interview_stage = 1 1 ORDER BY event_time
LIMIT 10 OFFSET { ( data_in . pages - 1 ) * 10 }
LIMIT 10 OFFSET { ( data_in . pages - 1 ) * 10 }
"""
"""
print ( sql )
data = await ckdb . execute ( sql )
data = await ckdb . execute ( sql )
if not data :
if not data :
return schemas . Msg ( code = - 9 , msg = ' 无数据 ' , data = ' ' )
return schemas . Msg ( code = - 9 , msg = ' 无数据 ' , data = ' ' )
res = chkData ( data )
res = chkData ( data )
job_id = [ i [ ' job_id ' ] for i in res ]
# 查询对应职位数量
sql1 = f """ select job_id,count(*) as values from HR.resumes where interview_stage = 11 and job_id in { job_id } group by job_id """
df = await ckdb . query_dataframe ( sql1 )
if not df . empty :
job_dict = dict ( zip ( df [ ' job_id ' ] , df [ ' values ' ] ) )
for i in res :
i [ ' similarity ' ] = job_dict . get ( i [ ' job_id ' ] , 0 )
# res = [
# {"uid": "3b37c7d9a4f104", "gender": "女", "at_school": "2018/09-2020/06", "name": "张双琪",
# "event_time": "2022-10-27", "education": "大专",
# "school": "湖北科技职业学院", "specialty": "移动应用开发", "work_list": [
# {
# "company_name": "武汉筑梦科技有限公司",
# "time": "2019/07-2020/01",
# "position_name": "web前端 ",
# "duty": ": 主要从事自己负责Web前端开发。根据需求说明和设计文档, 完成所分模块的开发及负责模块的单元测试工作。\n协助UI设计师完成也是设计工作, 提出技术实现条件。负责前端页面的开发和前端交互的设计, 以及网站前端\n性能的优化和提升\n"
# }
# ],
# "work_exp": 0, "job_id": "", "job_names": "", "ago": 1, "age": 22, "pass_time": "2022-10-28",
# "job_name": " Web开发工程师", "pass_why": "招聘需求变更", "pass_text": "dfbhg", "similarity": 11
# }, {"uid": "3b37c7d9a4f105", "gender": "女", "at_school": "2018/09-2020/06", "name": "张双琪1",
# "event_time": "2022-10-27", "education": "大专",
# "school": "湖北科技职业学院", "specialty": "移动应用开发", "work_list": [
# {
# "company_name": "武汉筑梦科技有限公司",
# "time": "2019/07-2020/01",
# "position_name": "web前端 ",
# "duty": ": 主要从事自己负责Web前端开发。根据需求说明和设计文档, 完成所分模块的开发及负责模块的单元测试工作。\n协助UI设计师完成也是设计工作, 提出技术实现条件。负责前端页面的开发和前端交互的设计, 以及网站前端\n性能的优化和提升\n"
# }
# ],
# "work_exp": 0, "job_id": "", "job_names": "", "ago": 2, "age": 22, "pass_time": "2022-10-28",
# "job_name": " Web开发工程师", "pass_why": "招聘需求变更", "pass_text": "dfbhg", "similarity": 9
# }, {"uid": "3b37c7d9a4f106", "gender": "女", "at_school": "2018/09-2020/06", "name": "张双琪2",
# "event_time": "2022-10-27", "education": "大专",
# "school": "湖北科技职业学院", "specialty": "移动应用开发", "work_list": [
# {
# "company_name": "武汉筑梦科技有限公司",
# "time": "2019/07-2020/01",
# "position_name": "web前端 ",
# "duty": ": 主要从事自己负责Web前端开发。根据需求说明和设计文档, 完成所分模块的开发及负责模块的单元测试工作。\n协助UI设计师完成也是设计工作, 提出技术实现条件。负责前端页面的开发和前端交互的设计, 以及网站前端\n性能的优化和提升\n"
# }
# ],
# "work_exp": 0, "job_id": "", "job_names": "", "ago": 3, "age": 28, "pass_time": "2022-10-28",
# "job_name": " Web开发工程师", "pass_why": "招聘需求变更", "pass_text": "dfbhg", "similarity": 5
# }, {"uid": "3b37c7d9a4f107", "gender": "女", "at_school": "2018/09-2020/06", "name": "张双琪3",
# "event_time": "2022-10-27", "education": "大专",
# "school": "湖北科技职业学院", "specialty": "移动应用开发", "work_list": [
# {
# "company_name": "武汉筑梦科技有限公司",
# "time": "2019/07-2020/01",
# "position_name": "web前端 ",
# "duty": ": 主要从事自己负责Web前端开发。根据需求说明和设计文档, 完成所分模块的开发及负责模块的单元测试工作。\n协助UI设计师完成也是设计工作, 提出技术实现条件。负责前端页面的开发和前端交互的设计, 以及网站前端\n性能的优化和提升\n"
# }
# ],
# "work_exp": 0, "job_id": "", "job_names": "", "ago": 4, "age": 26, "pass_time": "2022-10-28",
# "job_name": " Web开发工程师", "pass_why": "招聘需求变更", "pass_text": "dfbhg", "similarity": 2
# }, {"uid": "3b37c7d9a4f108", "gender": "女", "at_school": "2018/09-2020/06", "name": "张双琪4",
# "event_time": "2022-10-27", "education": "大专",
# "school": "湖北科技职业学院", "specialty": "移动应用开发", "work_list": [
# {
# "company_name": "武汉筑梦科技有限公司",
# "time": "2019/07-2020/01",
# "position_name": "web前端 ",
# "duty": ": 主要从事自己负责Web前端开发。根据需求说明和设计文档, 完成所分模块的开发及负责模块的单元测试工作。\n协助UI设计师完成也是设计工作, 提出技术实现条件。负责前端页面的开发和前端交互的设计, 以及网站前端\n性能的优化和提升\n"
# }
# ],
# "work_exp": 0, "job_id": "", "job_names": "", "ago": 5, "age": 23, "pass_time": "2022-10-28",
# "job_name": " Web开发工程师", "pass_why": "招聘需求变更", "pass_text": "dfbhg", "similarity": 0
# }, {"uid": "3b37c7d9a4f109", "gender": "女", "at_school": "2018/09-2020/06", "name": "张双琪5",
# "event_time": "2022-10-27", "education": "大专",
# "school": "湖北科技职业学院", "specialty": "移动应用开发", "work_list": [
# {
# "company_name": "武汉筑梦科技有限公司",
# "time": "2019/07-2020/01",
# "position_name": "web前端 ",
# "duty": ": 主要从事自己负责Web前端开发。根据需求说明和设计文档, 完成所分模块的开发及负责模块的单元测试工作。\n协助UI设计师完成也是设计工作, 提出技术实现条件。负责前端页面的开发和前端交互的设计, 以及网站前端\n性能的优化和提升\n"
# }
# ],
# "work_exp": 0, "job_id": "", "job_names": "", "ago": 0, "age": 22,
# "pass_time": "2022-10-28", "job_name": " Web开发工程师", "pass_why": "招聘需求变更",
# "pass_text": "dfbhg", "similarity": 1
# },
# ]
else :
if len ( res ) > 0 :
for i in res :
i [ ' similarity ' ] = 0
return schemas . Msg ( code = 200 , msg = ' ok ' , data = res )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = res )
@ -2932,16 +3040,20 @@ async def talent_pool_nu(
strs = [ ]
strs = [ ]
for k , v in data_in . date . items ( ) :
for k , v in data_in . date . items ( ) :
if v != ' ' :
if v != ' ' :
if k not in [ ' event_time ' ] :
str_s = f " { k } like ' % { v } % ' "
str_s = f " { k } like ' % { v } % ' "
else :
str_s = f " { k } = ' { v } ' "
strs . append ( str_s )
strs . append ( str_s )
where = ' and ' . join ( strs )
where = ' and ' . join ( strs )
sql = f """ select count(*) as nu from HR.resumes where interview_stage = - 1 and { where } """
sql = f """ select count(*) as nu from HR.resumes where interview_stage = 1 1 and { where } """
else :
else :
sql = f """ select count(*) as nu from HR.resumes where interview_stage = -1 """
sql = f """ select count(*) as nu from HR.resumes where interview_stage = 11 """
print ( sql )
data = await ckdb . query_dataframe ( sql )
data = await ckdb . query_dataframe ( sql )
if not data :
if data . empty :
return schemas . Msg ( code = - 9 , msg = ' 无数据 ' , data = ' ' )
return schemas . Msg ( code = - 9 , msg = ' 无数据 ' , data = ' ' )
res = data [ ' nu ' ] [ 0 ]
res = int ( data [ ' nu ' ] [ 0 ] )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = res )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = res )
@ -2974,13 +3086,26 @@ async def up_option(
) - > schemas . Msg :
) - > schemas . Msg :
""" 修改/新增人才库筛选项 """
""" 修改/新增人才库筛选项 """
res = await crud . talentpool_filtrate . where_filtrate ( db , [ ' default ' , current_user . id ] )
res = await crud . talentpool_filtrate . where_filtrate ( db , [ ' default ' , current_user . id ] )
if len ( res ) > 1 : # 修改自 定义筛选项
if len ( res ) > 1 : # 修改自 己的自 定义筛选项
for i in res :
for i in res :
if i [ ' user_id ' ] != ' default ' :
if i [ ' user_id ' ] != ' default ' :
await crud . talentpool_filtrate . update_filtrate ( db , current_user . id , data_in . dict ( ) )
for up_id in i [ ' where ' ] :
if up_id [ ' id ' ] in data_in . where :
up_id [ ' type ' ] = True
else :
up_id [ ' type ' ] = False
i . pop ( ' user_id ' )
await crud . talentpool_filtrate . update_filtrate ( db , current_user . id , i )
break
break
else : # 新增自定义筛选项
else : # 新增自己的自定义筛选项
await crud . talentpool_filtrate . ins_filtrate ( db , schemas . Filtrate ( * * data_in . dict ( ) , user_id = current_user . id ) )
for i in res [ 0 ] [ ' where ' ] :
if i [ ' id ' ] in data_in . where :
i [ ' type ' ] = True
else :
i [ ' type ' ] = False
res [ 0 ] . pop ( ' user_id ' )
await crud . talentpool_filtrate . ins_filtrate ( db ,
schemas . Filtrate ( where = res [ 0 ] [ ' where ' ] , user_id = current_user . id ) )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = ' ' )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = ' ' )
@ -2995,26 +3120,88 @@ async def option_data(
""" 获取才库筛选项数据 """
""" 获取才库筛选项数据 """
data = { }
data = { }
for i in data_in . where :
for i in data_in . where :
if i == ' job ' : # 应聘职位
if i == ' job _id ' : # 应聘职位
res = await crud . jobs . where_field ( db )
res = await crud . jobs . where_field ( db )
job = {}
job = []
for i in res :
for i in res :
job [ i [ ' job_id ' ] ] = i [ ' job_name ' ]
job_s = { }
job_s [ ' id ' ] = i [ ' job_id ' ]
job_s [ ' name ' ] = i [ ' job_name ' ]
job . append ( job_s )
data [ ' job_id ' ] = job
data [ ' job_id ' ] = job
elif i == ' pass_why ' : # 归档原因
elif i == ' pass_why ' : # 归档原因
data [ ' pass_why ' ] = pass_why_dict
pass_why = [ ]
for k , v in pass_why_dict . items ( ) :
pass_w = { }
pass_w [ ' id ' ] = k
pass_w [ ' name ' ] = v
pass_why . append ( pass_w )
data [ ' pass_why ' ] = pass_why
elif i == ' owner_name ' : # 渠道
elif i == ' owner_name ' : # 渠道
data [ ' owner_name ' ] = owner_name_dict
owner_name = [ ]
for k , v in owner_name_dict . items ( ) :
owner = { }
owner [ ' id ' ] = k
owner [ ' name ' ] = v
owner_name . append ( owner )
data [ ' owner_name ' ] = owner_name
elif i == ' education ' : # 学历
elif i == ' education ' : # 学历
data [ ' education ' ] = education_dict
education = [ ]
for k , v in education_dict . items ( ) :
educa = { }
educa [ ' id ' ] = k
educa [ ' name ' ] = v
education . append ( educa )
data [ ' education ' ] = education
elif i == ' gender ' : # 性别
elif i == ' gender ' : # 性别
data [ ' gender ' ] = [ ' 男 ' , ' 女 ' ]
data [ ' gender ' ] = [ ' 男 ' , ' 女 ' ]
elif i == ' department ' : # 职位负责人
elif i == ' department ' : # 职位负责人
res1 = await crud . user . get_all_users ( db , { ' rank ' : 2 } )
res1 = await crud . user . get_all_users ( db , { ' rank ' : 2 } )
data [ ' department ' ] = [ { i [ ' _id ' ] : i [ ' nickname ' ] } for i in res1 ]
department = [ ]
for i in res1 :
depar = { }
depar [ ' id ' ] = i [ ' _id ' ]
depar [ ' name ' ] = i [ ' nickname ' ]
department . append ( depar )
data [ ' department ' ] = department
elif i == ' hr_name ' : # 候选人所有者
elif i == ' hr_name ' : # 候选人所有者
res2 = await crud . user . get_all_users ( db , { } )
res2 = await crud . user . get_all_users ( db , { } )
data [ ' hr_name ' ] = [ { i [ ' _id ' ] : i [ ' nickname ' ] } for i in res2 ]
hr_name = [ ]
for i in res2 :
hr_n = { }
hr_n [ ' id ' ] = i [ ' _id ' ]
hr_n [ ' name ' ] = i [ ' nickname ' ]
hr_name . append ( hr_n )
data [ ' hr_name ' ] = hr_name
elif i == ' ago ' : # 归档前的阶段
elif i == ' ago ' : # 归档前的阶段
data [ ' ago ' ] = interview_stage_dict
ago = [ ]
for k , v in interview_stage_dict . items ( ) :
stage = { }
stage [ ' id ' ] = k
stage [ ' name ' ] = v
ago . append ( stage )
data [ ' ago ' ] = ago
return schemas . Msg ( code = 200 , msg = ' ok ' , data = data )
@router.get ( " /get_number " )
async def option_data (
request : Request ,
ckdb : CKDrive = Depends ( get_ck_db ) ,
db : AsyncIOMotorDatabase = Depends ( get_database ) ,
current_user : schemas . UserDB = Depends ( deps . get_current_user )
) - > schemas . Msg :
""" 获取才库候选人总数和今日归档人数 """
now = datetime . now ( ) . strftime ( ' % Y- % m- %d ' )
start_time = now + ' 00:00:00 '
end_time = now + ' 23:59:59 '
sql = f """ SELECT count(*) as values from HR.resumes where addHours(pass_time,0) >= ' { start_time } ' and addHours(pass_time,0) <= ' { end_time } ' and interview_stage = 11 """
# 今日归档人数
print ( sql )
nu = await ckdb . execute ( sql )
num = nu [ 0 ] [ ' values ' ]
_sql = f """ SELECT count(*) as values from HR.resumes where interview_stage <=6 """
_nu = await ckdb . execute ( _sql )
_num = _nu [ 0 ] [ ' values ' ]
data = { ' now ' : num , ' candidate ' : _num }
return schemas . Msg ( code = 200 , msg = ' ok ' , data = data )
return schemas . Msg ( code = 200 , msg = ' ok ' , data = data )