prs_server/api/api_v1/endpoints/interview.py
2022-07-27 11:07:26 +08:00

819 lines
30 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import operator
import os
import re
import pandas as pd
import pymongo
from fastapi import APIRouter, Depends, Request, File, UploadFile
from motor.motor_asyncio import AsyncIOMotorDatabase
from api import deps
from utils.dingding import get_redis_alluid, send_dates
from utils.jianli import get_resume
import crud, schemas
from datetime import datetime
from core.configuration import *
from db import get_database
from db.ckdb import get_ck_db, CKDrive
from models.interview_zsgc import InterviewDo
from utils import get_time, qujian_time, Download_xlsx, send_str_mail
router = APIRouter()
# 面试查询
@router.post("/interview_find")
async def interview_find(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据查询 """
await interview.init()
res = interview.find_interview_sql()
sql = res['sql']
data = await db.execute(sql)
if not data:
return schemas.Msg(code=-9, msg='无数据', data=None)
return schemas.Msg(code=200, msg='ok', data=data)
# 面试_主页初筛查询
@router.post("/interview_home_find")
async def interview_find(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据主页初筛查询 """
await interview.init()
res = interview.find_interview_home_sql()
sql = res['sql']
data = await db.execute(sql)
if not data:
return schemas.Msg(code=-9, msg='无数据', data=None)
return schemas.Msg(code=200, msg='ok', data=data)
# 复筛查询
@router.post("/interview_screen_find")
async def interview_find(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据复筛查询 """
await interview.init()
res = interview.find_interview_screen_sql()
sql = res['sql']
data = await db.execute(sql)
if not data:
return schemas.Msg(code=-9, msg='无数据', data=None)
return schemas.Msg(code=200, msg='ok', data=data)
# 面试阶段查询
@router.post("/interview_exam_find")
async def interview_find(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据面试阶段查询 """
await interview.init()
res = interview.find_interview_exam_sql()
sql = res['sql']
data = await db.execute(sql)
if not data:
return schemas.Msg(code=-9, msg='无数据', data=None)
return schemas.Msg(code=200, msg='ok', data=data)
# offer阶段查询
@router.post("/interview_offer_find")
async def interview_find(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据offer阶段查询 """
await interview.init()
res = interview.find_interview_offer_sql()
sql = res['sql']
data = await db.execute(sql)
if not data:
return schemas.Msg(code=-9, msg='无数据', data=None)
return schemas.Msg(code=200, msg='ok', data=data)
# 待入职阶段查询
@router.post("/interview_waite_in_find")
async def interview_find(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据待入职阶段查询 """
await interview.init()
res = interview.find_interview_waite_in_sql()
sql = res['sql']
data = await db.execute(sql)
if not data:
return schemas.Msg(code=-9, msg='无数据', data=None)
return schemas.Msg(code=200, msg='ok', data=data)
# 面试修改
@router.post("/interview_update")
async def interview_update(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据更新 """
await interview.init()
res = interview.update_interview_sql()
sql = res['sql']
try:
data = await db.execute(sql)
except:
return schemas.Msg(code=-9, msg='数据有误', data=None)
return schemas.Msg(code=200, msg='ok', data=data)
# 写入面试数据
@router.post("/interview_insert")
async def interview_insert(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
db: CKDrive = Depends(get_ck_db),
) -> schemas.Msg:
""" interview面试数据写入 """
await interview.init()
res = interview.insert_interview_sql()
sql = res['sql']
insert_data = res['insert_data']
data = await db.execute_dict(sql, insert_data)
return schemas.Msg(code=200, msg='ok', data=data)
# 导入面试数据
@router.post("/interview_file_insert")
async def interview_insert(
request: Request,
file: UploadFile = File(...),
) -> schemas.Msg:
""" interview面试数据导入 """
path_data = os.getcwd() + '/jianli/' # 当前文件所在的目录
contents = await file.read()
filename = file.filename
try:
with open(path_data + filename, "wb") as f:
# 将获取的file文件内容写入到新文件中
f.write(contents)
f.close()
except:
return schemas.Msg(code=400, msg='上传文件有误', data=None)
data = get_resume(filename, path_data)
education = data['education']
# 学历int转化
education_int = {
'大专': 1,
'本科': 2,
'研究生': 3,
'博士': 4,
'硕士': 5,
}
if education and isinstance(education, str):
data['education'] = education_int.get(education, 1)
age = data['age']
if not age:
data['age'] = 20
# 年龄int转化
if age and isinstance(age, str):
true_age = re.search(r"\d+\.?\d*", age)
if len(true_age.group()) > 2:
data['age'] = 20
else:
data['age'] = int(true_age.group())
work_exp = data['work_exp']
if not work_exp:
data['work_exp'] = 0
# 工作经验float转化
if work_exp and isinstance(work_exp, str):
true_work_exp = re.search(r"\d+\.?\d*", work_exp)
if len(true_work_exp.group()) > 3:
data['work_exp'] = 0
else:
data['work_exp'] = float(true_work_exp.group())
print(data)
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/add_job")
async def event_edit(
request: Request,
data_in: schemas.Ins_Job,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""新增职位"""
await crud.jobs.insert_job(db, data_in)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/condition")
async def interview_insert(
request: Request,
data_in: schemas.Interview,
ckdb: CKDrive = Depends(get_ck_db)
) -> schemas.Msg:
""" 面试情况 """
res = data_in.date
strs = []
for k, v in res.items():
if v != '':
if 'int' in str(type(v)):
str_s = f"{k} = {v}"
strs.append(str_s)
else:
str_s = f"{k} = '{v}'"
strs.append(str_s)
where = ' and '.join(strs)
# 当前日期
times = get_time()
# 今天的面试
if data_in.time_type == 'now':
# 查询返回的数据一共多少条
len_sql = f"""select uid from HR.resumes where {where} and toDate(star_time) == '{times}' ORDER BY event_time"""
sql = f"""select interview_round,interview_type,star_time,end_time,name,phone,job_names,hr_name,uid,
feedback,interview_name from HR.resumes where {where} and toDate(star_time) == '{times}' ORDER BY event_time
LIMIT 10 OFFSET {(data_in.pages - 1) * 10}"""
# 明天及之后的面试
elif data_in.time_type == 'tomorrow':
len_sql = f"""select uid from HR.resumes where {where} and toDate(star_time) > '{times}' ORDER BY event_time"""
sql = f"""select interview_round,interview_type,star_time,end_time,name,phone,job_names,hr_name,uid,
feedback,interview_name from HR.resumes where {where} and toDate(star_time) > '{times}' ORDER BY event_time
LIMIT 10 OFFSET {(data_in.pages - 1) * 10}"""
# 昨天及以前的面试
else:
len_sql = f"""select uid from HR.resumes where {where} and toDate(star_time) < '{times}' ORDER BY event_time"""
sql = f"""select interview_round,interview_type,star_time,end_time,name,phone,job_names,hr_name,uid,
feedback,interview_name from HR.resumes where {where} and toDate(star_time) < '{times}' ORDER BY event_time
LIMIT 10 OFFSET {(data_in.pages - 1) * 10}"""
if where == '':
len_sql = len_sql.replace('where and', 'where', 1)
sql = sql.replace('where and', 'where', 1)
# 返回数据条数
df_len = await ckdb.query_dataframe(len_sql)
len_date = len(df_len)
df = await ckdb.query_dataframe(sql)
if df.empty:
data = {'lens': 0,
'data': []
}
return schemas.Msg(code=-9, msg='无数据', data=data)
datas = []
for i in range(len(df)):
dates = {}
dates['key'] = df['uid'][i]
date = {} # 面试信息
date['interview_round'] = int(df['interview_round'][i])
date['interview_type'] = int(df['interview_type'][i])
noe = str(df['end_time'][i]).split(' ')[-1]
timess = str(df['star_time'][i]) + '~' + noe
date['time'] = timess
dates['msg'] = date
dates['name'] = df['name'][i]
dates['phone'] = df['phone'][i]
dates['job_names'] = df['job_names'][i]
dates['hr_name'] = df['hr_name'][i]
date1 = {}
date1['type'] = int(df['feedback'][i])
date1['name'] = df['interview_name'][i]
dates['type'] = date1
datas.append(dates)
data = {'lens': len_date,
'data': datas
}
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/get_job")
async def event_edit(
request: Request,
data_in: schemas.Jobs = None,
db: AsyncIOMotorDatabase = Depends(get_database),
ckdb: CKDrive = Depends(get_ck_db)
) -> schemas.Msg:
"""获取职位名称"""
# 获取对应条件的职位
res = await crud.jobs.all_fields(db, data_in)
# 获取职位数量
num = len(res)
job = []
for i in res:
# 获取职位名称
job_list = []
job_list.append(i['job_id'])
# 查询对应职位id入职多少人
sql = f"""
select count(job_id) from HR.resumes where job_id = '{i['job_id']}' and interview_stage = 7
"""
num = await ckdb.execute(sql)
job_list.append(i['job_name'])
job_list.append(i['job_sector'])
job_list.append(i['principal'])
job_list.append(i['owner_name'])
job_list.append(num)
job_list.append(i['job_num'])
job.append(job_list)
data = {
'num': num,
'job': job
}
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/download_interview")
async def download_inter(
request: Request,
data_in: schemas.Timesinter,
ckdb: CKDrive = Depends(get_ck_db)):
"""导出所有面试安排"""
sql = f"""SELECT interview_type,interview_stage,star_time,end_time,name,phone,job_name,hr_name,interview_name,
interview_sign FROM HR.resumes WHERE toDate(star_time) >= '{data_in.start_time}' and toDate(star_time) <= '{data_in.end_time}'"""
df = await ckdb.query_dataframe(sql)
if df.empty:
return schemas.Msg(code=-9, msg='无数据', data='')
# xlsx表名
xlsx_name = data_in.start_time + '~' + data_in.end_time + '(包含起止日)'
datas = []
for i in range(len(df)):
one_data = []
one_data.append(interview_type_dict[df['interview_type'][i]])
one_data.append(interview_stage_dict[df['interview_stage'][i]])
df_time = qujian_time(df['star_time'][i], df['end_time'][i])
one_data.append(df_time)
one_data.append(df['name'][i])
one_data.append(df['phone'][i])
one_data.append(df['job_name'][i])
one_data.append(df['hr_name'][i])
one_data.append(df['interview_name'][i])
one_data.append(interview_sign_dict[df['interview_sign'][i]])
datas.append(one_data)
columns = ['面试类型', '面试阶段', '面试时间', '候选人', '联系方式', '应聘职位', '面试负责人', '面试官', '面试签到']
dfmi = pd.DataFrame(data=datas, columns=columns)
Download = Download_xlsx(dfmi, xlsx_name)
return Download
@router.post("/add_remark")
async def event_edit(
request: Request,
data_in: schemas.BaseRemark,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""添加备注"""
await crud.api_interview_remark.insert_remark(db, data_in)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/find_remark")
async def event_edit(
request: Request,
data_in: schemas.FindRemark,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""查找备注"""
data = await crud.api_interview_remark.get_interview_remarks(db, data_in)
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/find_criterion")
async def event_edit(
request: Request,
data_in: schemas.get_uid,
ckdb: CKDrive = Depends(get_ck_db)
) -> schemas.Msg:
"""获取标准版简历"""
# sql = f"""
# select name,phone,job_name,work_exp,owner_name,education,work_undergo,school,specialty,
# graduate_time,mail,account,id_card,gender,nation,age,at_school,specialty_do,hope_money,resume_affix_id,
# review,work_list,project_undergo,upgrade,come_time,now_money,work_in_time from HR.resumes WHERE uid = '{data_in.uid}'
# """
sql = f"""
select * from HR.resumes WHERE uid = '{data_in.uid}'
"""
df = await ckdb.query_dataframe(sql)
data = {}
column = df.columns
for i in column:
if 'int' in str(type(df[i][0])):
data[i] = int(df[i][0])
else:
data[i] = df[i][0]
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/resume_affix")
async def event_edit(
request: Request,
data_in: schemas.Post_uid,
ckdb: CKDrive = Depends(get_ck_db)
) -> schemas.Msg:
"""保存附件id"""
sql = f"""
ALTER table HR.resumes update resume_affix_id = {data_in.resume_affix_id} WHERE uid = '{data_in.uid}'
"""
await ckdb.execute(sql)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/updata_entry")
async def event_edit(
request: Request,
data_in: schemas.Entry,
ckdb: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""修改入职状态"""
sql = f"""
ALTER table HR.resumes update interview_stage = {data_in.interview_stage} WHERE uid = '{data_in.uid}'
"""
await ckdb.execute(sql)
# 给招聘中职位计入职数
res = await crud.jobs.find_job(db, data_in.job_id)
num = res['now_job_num'] + 1
await crud.jobs.update_job(db, schemas.Jobs(job_id=data_in.job_id, now_job_num=num))
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/get_str_mail")
async def event_edit(
request: Request,
data_in: schemas.Email_str,
ckdb: CKDrive = Depends(get_ck_db)
) -> schemas.Msg:
"""获取邮件文本"""
data = f"""
{data_in.name},您好\n\n感谢关注乐谷在线科技有限公司!很高兴的通知您通过了我们的面试,真诚的邀请您加入我们的团队\n职位:{data_in.job}\n入职时间:{data_in.times}
\n薪酬:{data_in.money}\n联系人:{data_in.hr_name}\n联系电话:{data_in.phone}\n联系邮箱:{data_in.email}\n\n如有问题请用以上联系方式及时与我们沟通,谢谢!\n(系统邮件,请勿回复)
"""
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/send_str_mail")
async def event_edit(
request: Request,
data_in: schemas.send_str_mail,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""发送邮件"""
try:
# 发送邮件
send_str_mail(data_in.email_str, data_in.email)
# 保存发送邮件的记录
now_time = str(datetime.now()).split('.')[0]
await crud.email_record.create(db, schemas.email_record(user_id=data_in.user_id, text=data_in.email_str,
times=now_time, name=data_in.name, state=1,
read_status=0, type='email'))
return schemas.Msg(code=200, msg='邮件发送成功', data='')
except Exception:
now_time = str(datetime.now()).split('.')[0]
await crud.email_record.create(db, schemas.email_record(user_id=data_in.user_id, text=data_in.email_str,
times=now_time, name=data_in.name, state=0,
read_status=0, type='email'))
return schemas.Msg(code=200, msg='邮件发送失败', data='')
@router.post("/email_record")
async def event_edit(
request: Request,
data_in: schemas.get_email_record,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""获取发送邮件的记录"""
data = await crud.email_record.all_record(db, data_in)
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/operate_log")
async def event_edit(
request: Request,
data_in: schemas.operate_log,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""同步插入操作记录"""
await crud.operate_log.create(db, data_in)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/get_operate_log")
async def event_edit(
request: Request,
data_in: schemas.get_operate_log,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""获取操作记录"""
data = await crud.operate_log.all_log(db, data_in)
# 对时间进行排序
data = sorted(data, key=operator.itemgetter('times'))
return schemas.Msg(code=200, msg='ok', data=data)
@router.get("/get_dding_user")
async def event_edit(
request: Request,
) -> schemas.Msg:
"""获取钉钉的用户id"""
data = get_redis_alluid()
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/teacher_state")
async def event_edit(
request: Request,
data_in: schemas.user_id,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""催促面试官反馈功能"""
# 同步钉钉发消息给面试官
try:
now_time = str(datetime.now()).split('.')[0]
content = f"【催促反馈】\n请面试官尽快给{data_in.name}做面试反馈\n提醒时间:{now_time}"
send_dates(content, data_in.user_id)
return schemas.Msg(code=200, msg='发送成功', data='')
except Exception:
return schemas.Msg(code=-9, msg='发送失败', data='')
@router.post("/add_mode")
async def event_edit(
request: Request,
data_in: schemas.InsertModes,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""添加hr分组"""
await crud.api_interview_modes.insert_modes(db, data_in)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/find_mode")
async def event_edit(
request: Request,
data_in: schemas.FindModes,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""查找hr所有分组"""
data = await crud.api_interview_modes.get_interview_modes(db, data_in)
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/update_mode")
async def event_edit(
request: Request,
data_in: schemas.UpdateModes,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""更新一条hr分组数据"""
await crud.api_interview_modes.update_modes(db, data_in)
return schemas.Msg(code=200, msg='ok', data='')
@router.get("/name")
async def event_edit(
request: Request,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""获取所有用户角色"""
res = await crud.user.get_all_users(db, {})
data = []
for i in res:
data_dict = {}
data_dict['name'] = i.get('name')
data_dict['email'] = i.get('email')
data_dict['rank'] = i.get('rank') # 用于区分是面试官还是hr
data.append(data_dict)
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/amend_job")
async def event_edit(
request: Request,
data_in: schemas.Jobs,
db: AsyncIOMotorDatabase = Depends(get_database),
) -> schemas.Msg:
"""修改职位信息,修改职位招聘状态"""
await crud.jobs.update_job(db, data_in)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/create")
async def create(
request: Request,
data_in: schemas.DashboardCreate,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""创建看板"""
try:
await crud.dashboard.create(db, data_in.name, user_id=current_user.id)
except pymongo.errors.DuplicateKeyError:
return schemas.Msg(code=-1, msg='看板已存在', data='看板已存在')
return schemas.Msg(code=200, msg='ok', data='创建成功')
@router.post("/delete")
async def delete(
request: Request,
data_in: schemas.DashboardDelete,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""删除看板"""
del_dashboard = await crud.dashboard.delete(db, {'_id': {'$in': data_in.ids}})
if del_dashboard.deleted_count == 0:
return schemas.Msg(code=-1, msg='error', data='删除失败')
return schemas.Msg(code=200, msg='ok', data='删除成功')
@router.post("/get_dashboard")
async def dashboards(request: Request,
data_in: schemas.ReadDashboard,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
):
"""获取一个看板"""
res = await crud.dashboard.get(db, id=data_in.id)
reports = {item['report_id']: item for item in res['reports']}
reports_detail = await crud.report.find_many(db, {'_id': {'$in': list(reports.keys())}}, {'query.cachedata': False})
for item in reports_detail:
reports[item['_id']].update(item)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/edit")
async def edit(
request: Request,
data_in: schemas.EditDashboard,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
):
"""编辑看板名"""
await crud.dashboard.update_one(db, {'_id': data_in.dashboard_id}, {'$set': {'name': data_in.new_name}})
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/notarize")
async def event_edit(
request: Request,
data_in: schemas.Notarize,
ckdb: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""简历确认进入面试阶段"""
sql = f"""
ALTER table HR.resumes update interview_state = 2,hr_name = '{data_in.hr_name}',hr_id = '{data_in.hr_id}',interview_name = '{data_in.interview_name}',interview_id = '{data_in.interview_id}' WHERE uid = '{data_in.uid}'
"""
await ckdb.execute(sql)
find_sql = f"""
select uid,name,interview_name,hr_name,star_time,interview_sign,job_id,job_names,mail from HR.resumes where uid = '{data_in.uid}'
"""
df = await ckdb.query_dataframe(find_sql)
# 存份面试数据到mongodb
await crud.interview_record.insert_record(db, schemas.interview_record(uid=df['uid'][0], # 唯一id
name=df['name'][0], # 求职者姓名
interview_name=df['interview_name'][0],
# 面试官姓名
hr_name=df['hr_name'][0], # hr姓名
star_time=df['star_time'][0], # 开始面试时间
interview_sign=0, # 签到状态
job_id=df['job_id'][0], # 我们自己招聘的职位id
job_names=df['job_names'][0] # 我们自己招聘的职位名
))
if df['mail'][0] != '':
# 发送邮件给面试者通知面试
msg = f"""{df['name'][0]},您好\n\n感谢关注乐谷在线科技有限公司!请于{df['star_time'][0]}到公司参见面试。\n联系人:{data_in.hr_name}\n联系电话:{data_in.hr_phone}\n联系邮箱:{
data_in.hr_email}\n\n如有问题请用以上联系方式及时与我们沟通,谢谢!\n(系统邮件,请勿回复)
"""
send_str_mail(msg, df['mail'][0])
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/alter")
async def edit(
request: Request,
data_in: schemas.Stage,
ckdb: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""更改简历阶段"""
if data_in.stage == 1: # 初筛
sql = f"""
ALTER table HR.resumes update interview_stage = 1,job_id = '{data_in.data['job_id']}',job_names = '{data_in.data['job_names']}' WHERE uid = '{data_in.uid}'
"""
else:
sql = f"""
ALTER table HR.resumes update interview_stage = {data_in.stage} WHERE uid = '{data_in.uid}'
"""
await ckdb.execute(sql)
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/get_report")
async def edit(
request: Request,
data_in: schemas.Findreport,
ckdb: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""获得已添加的报表"""
# 获取自己的报表
res = await crud.dashboard.find_report(db, user_id=data_in.report_id)
return schemas.Msg(code=200, msg='ok', data=res)
@router.post("/create_report")
async def edit(
request: Request,
data_in: schemas.ReportCreate,
ckdb: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""新建报表"""
try:
await crud.report.create(db, data_in)
except pymongo.errors.DuplicateKeyError:
return schemas.Msg(code=-9, msg='error', data='报表已存在')
return schemas.Msg(code=200, msg='创建成功', data='')
@router.post("/up_report")
async def edit(
request: Request,
data_in: schemas.ReportEdit,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""编辑报表"""
await crud.report.update_one(db, {'_id': data_in.report_id},
{'$set': {'query': data_in.query, 'name': data_in.name, 'desc': data_in.desc}})
# 只能报表所有者编辑
# res = await crud.report.update_one(db, {'_id': data_in.report_id, 'user_id': request.user.id},
# {'$set': {'query': data_in.query, 'name': data_in.name, 'desc': data_in.desc}})
# if not res.matched_count:
# #if res.matched_count:
# return schemas.Msg(code=-1, msg='只能报表所有者编辑')
return schemas.Msg(code=200, msg='编辑成功', data='')
@router.post("/edit_report")
async def edit_report(request: Request,
data_in: schemas.EditReport,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""看板样式设置"""
await crud.dashboard.update_one(db, {'_id': data_in.id, 'reports.report_id': data_in.report.report_id},
{'$set': {f'reports.$.{k}': v for k, v in
data_in.report.dict(skip_defaults=True).items()}})
return schemas.Msg(code=200, msg='ok', data='')
@router.post("/head")
async def event_edit(
request: Request,
data_in: schemas.Post_head,
ckdb: CKDrive = Depends(get_ck_db)
) -> schemas.Msg:
"""保存头像链接"""
sql = f"""
ALTER table HR.resumes update head = '{data_in.head_id}' WHERE uid = '{data_in.uid}'
"""
await ckdb.execute(sql)
return schemas.Msg(code=200, msg='ok', data='')
@router.get("/hint")
async def edit_report(
request: Request,
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""重要事项-面试相关"""
res = await crud.email_record.all_hint(db)
data = sorted(res, key=operator.itemgetter('times'))
return schemas.Msg(code=200, msg='ok', data=data)
@router.post("/up_hint")
async def event_edit(
request: Request,
data_in: schemas.Up_hint,
ckdb: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database)
) -> schemas.Msg:
"""批量修改已读状态"""
await crud.email_record.up_hint(db, data_in)
return schemas.Msg(code=200, msg='ok', data='')