From baddcf7b36810aae61207b138b35a18396887e75 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, 15 Jul 2022 10:39:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E6=B3=A8=E7=AD=89=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api_v1/endpoints/interview.py | 122 ++++++++++++++++++++++++------ crud/__init__.py | 3 +- crud/crud_interview_remark.py | 32 ++++++++ models/interview_zsgc.py | 102 ++++++++++++++++++++++++- schemas/__init__.py | 3 +- schemas/interview_remark.py | 22 ++++++ utils/jianli.py | 6 +- 7 files changed, 259 insertions(+), 31 deletions(-) create mode 100644 crud/crud_interview_remark.py create mode 100644 schemas/interview_remark.py diff --git a/api/api_v1/endpoints/interview.py b/api/api_v1/endpoints/interview.py index 12682e8..f910bce 100644 --- a/api/api_v1/endpoints/interview.py +++ b/api/api_v1/endpoints/interview.py @@ -47,14 +47,14 @@ async def interview_find( 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面试数据查询 """ + """ interview面试数据主页初筛查询 """ await interview.init() res = interview.find_interview_home_sql() sql = res['sql'] @@ -64,6 +64,74 @@ async def interview_find( 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( @@ -98,12 +166,11 @@ async def interview_insert( return schemas.Msg(code=200, msg='ok', data=data) -# 写入面试数据 +# 导入面试数据 @router.post("/interview_file_insert") async def interview_insert( request: Request, file: UploadFile = File(...), - db: CKDrive = Depends(get_ck_db), ) -> schemas.Msg: """ interview面试数据导入 """ path_data = os.getcwd() + '/jianli/' # 当前文件所在的目录 @@ -129,6 +196,8 @@ async def interview_insert( 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) @@ -150,31 +219,17 @@ async def interview_insert( return schemas.Msg(code=200, msg='ok', data=data) -# @router.post("/interview_insert") -# async def interview_insert( -# request: Request, -# data_in: schemas.Interview, -# ckdb: CKDrive = Depends(get_ck_db), -# ) -> schemas.Msg: -# """ 面试情况 """ -# 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("/add_job") async def event_edit( request: Request, data_in: schemas.Ins_Job, db: AsyncIOMotorDatabase = Depends(get_database), - current_user: schemas.UserDB = Depends(deps.get_current_user) ) -> 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, @@ -229,12 +284,12 @@ async def interview_insert( } 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), - current_user: schemas.UserDB = Depends(deps.get_current_user) + db: AsyncIOMotorDatabase = Depends(get_database) ) -> schemas.Msg: """获取职位名称""" # 获取对应条件的职位 @@ -283,4 +338,27 @@ async def download_inter( columns = ['面试类型', '面试阶段', '面试时间', '候选人', '联系方式', '应聘职位', '面试负责人', '面试官', '面试签到'] dfmi = pd.DataFrame(data=datas, columns=columns) Download = Download_xlsx(dfmi, xlsx_name) - return Download \ No newline at end of file + 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.Ins_Job, + 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) + diff --git a/crud/__init__.py b/crud/__init__.py index 5fd6a38..ce068e4 100644 --- a/crud/__init__.py +++ b/crud/__init__.py @@ -21,4 +21,5 @@ from .crud_url_list import url_list from .crud_user_url import user_url from .crud_api_module import api_module from .crud_event_list import event_list -from .crud_jobs import jobs \ No newline at end of file +from .crud_jobs import jobs +from .crud_interview_remark import api_interview_remark diff --git a/crud/crud_interview_remark.py b/crud/crud_interview_remark.py new file mode 100644 index 0000000..62e317f --- /dev/null +++ b/crud/crud_interview_remark.py @@ -0,0 +1,32 @@ +from motor.motor_asyncio import AsyncIOMotorDatabase +import schemas +from crud.base import CRUDBase + +__all__ = 'api_interview_remark', + + +class ApiInterviewRemark(CRUDBase): + + # 获取简历所有备注 + async def get_interview_remarks(self, db: AsyncIOMotorDatabase, data_in: schemas.FindRemark): + where = data_in.where + where.update({'uid': data_in.remark_uid}) + return await self.find_many(db, where) + + # 插入一条全新的备注 + async def insert_remark(self, db: AsyncIOMotorDatabase, data_in: schemas.BaseRemark): + return await self.insert_one(db, data_in.dict()) + + # 更新一条备注数据 + async def updata_remark(self, db: AsyncIOMotorDatabase, data_in: schemas.Url_module): + return await self.update_one(db, {'auth_id': data_in.auth_id, 'path_name': data_in.path_name}, + {'$set': {'api_list': data_in.api_list, 'api_name': data_in.api_name, + 'state': data_in.state}}) + + # 更新一条面试安排数据 + async def update_one_interview(self, db: AsyncIOMotorDatabase, res): + return await self.update_one(db, {'_id': res['_id']}, { + '$set': res}) + + +api_interview_remark = ApiInterviewRemark('interview_remark') diff --git a/models/interview_zsgc.py b/models/interview_zsgc.py index c913857..7be793f 100644 --- a/models/interview_zsgc.py +++ b/models/interview_zsgc.py @@ -142,12 +142,108 @@ class InterviewDo: return {'sql': sql, } - # 主页查询 + # 主页初筛查询 def find_interview_home_sql(self): + self.where.update({'interview_stage': 1}) whereStr = '' findStr = '' # 主页查询字段 - self.find_column = ["uid","age","gender","at_school","name","event_time", "owner_name", "education", "school", "specialty", "interview_name", "mmended_state", "work_list", "work_exp", "job_name"] + self.find_column = ["uid", "age", "gender", "at_school", "name", "event_time", "owner_name", "education", + "school", "specialty", "interview_name", "mmended_state", "work_list", "work_exp", + "notice_state", "job_name", "interview_stage"] + for fstr in self.find_column: + findStr += fstr + ', ' + for key, value in self.where.items(): + if isinstance(value, str): + whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' + continue + whereStr += str(key) + ' = ' + str(value) + ' ' + whereStr = whereStr.strip() + findStr = findStr.strip().strip(',') + sql = f"select {findStr} from HR.resumes where {whereStr}" + print(sql) + return {'sql': sql, + } + + # 复筛查询 + def find_interview_screen_sql(self): + self.where.update({'interview_stage': 2}) + whereStr = '' + findStr = '' + # 主页查询字段 + self.find_column = ["uid", "age", "gender", "at_school", "name", "event_time", "owner_name", "education", + "school", "specialty", "interview_name", "mmended_state", "work_list", "work_exp", + "notice_state", "job_name", "interview_stage"] + for fstr in self.find_column: + findStr += fstr + ', ' + for key, value in self.where.items(): + if isinstance(value, str): + whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' + continue + whereStr += str(key) + ' = ' + str(value) + ' ' + whereStr = whereStr.strip() + findStr = findStr.strip().strip(',') + sql = f"select {findStr} from HR.resumes where {whereStr}" + print(sql) + return {'sql': sql, + } + + # 面试阶段查询 + def find_interview_exam_sql(self): + self.where.update({'interview_stage': 3}) + whereStr = '' + findStr = '' + # 面试阶段查询字段 + self.find_column = ["uid", "age", "gender", "at_school", "name", "event_time", "owner_name", "education", + "school", "specialty", "interview_name", "mmended_state", "work_list", "work_exp", + "job_name", "feedback", "interview_round", "interview_state", "interview_stage"] + for fstr in self.find_column: + findStr += fstr + ', ' + for key, value in self.where.items(): + if isinstance(value, str): + whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' + continue + whereStr += str(key) + ' = ' + str(value) + ' ' + whereStr = whereStr.strip() + findStr = findStr.strip().strip(',') + sql = f"select {findStr} from HR.resumes where {whereStr}" + print(sql) + return {'sql': sql, + } + + # offer阶段查询 + def find_interview_offer_sql(self): + self.where.update({'interview_stage': 4}) + whereStr = '' + findStr = '' + # 面试阶段查询字段 + self.find_column = ["uid", "age", "gender", "at_school", "name", "event_time", "owner_name", "education", + "school", "specialty", "interview_name", "mmended_state", "work_list", "work_exp", + "job_name", "feedback", "interview_round", "interview_state", "interview_stage"] + for fstr in self.find_column: + findStr += fstr + ', ' + for key, value in self.where.items(): + if isinstance(value, str): + whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' + continue + whereStr += str(key) + ' = ' + str(value) + ' ' + whereStr = whereStr.strip() + findStr = findStr.strip().strip(',') + sql = f"select {findStr} from HR.resumes where {whereStr}" + print(sql) + return {'sql': sql, + } + + # 待入职阶段查询 + def find_interview_waite_in_sql(self): + self.where.update({'interview_stage': 5}) + whereStr = '' + findStr = '' + # 面试阶段查询字段 + self.find_column = ["uid", "age", "gender", "at_school", "name", "event_time", "owner_name", "education", + "school", "specialty", "interview_name", "mmended_state", "work_list", "work_exp", + "job_name", "feedback", "interview_round", "interview_state", "interview_stage", "pass_why", + "pass_text"] for fstr in self.find_column: findStr += fstr + ', ' for key, value in self.where.items(): @@ -165,4 +261,4 @@ class InterviewDo: if __name__ == '__main__': find = re.search(r"\d+\.?\d*", "18岁") - print(len(find.group())) \ No newline at end of file + print(len(find.group())) diff --git a/schemas/__init__.py b/schemas/__init__.py index 5048c36..722c84c 100644 --- a/schemas/__init__.py +++ b/schemas/__init__.py @@ -27,4 +27,5 @@ from .api_module import * from .event_list import * from .interview import * from .interview_plan import * -from .jobs import * \ No newline at end of file +from .jobs import * +from .interview_remark import * \ No newline at end of file diff --git a/schemas/interview_remark.py b/schemas/interview_remark.py new file mode 100644 index 0000000..aa85ee4 --- /dev/null +++ b/schemas/interview_remark.py @@ -0,0 +1,22 @@ +import time +from datetime import datetime + +from pydantic import BaseModel + + +# 备注信息 +class BaseRemark(BaseModel): + remark_id: str = int(time.time()) # 备注的唯一id + remark_from: str # 编写备注的人 + comment: str # 备注内容 + stage_num: int = 0 # 备注查看权限 + remark_time: datetime = datetime.now() # 备注时间 + remark_uid: str # 备注的简历uid + remark_stage: int # 备注时简历所处阶段 + + +# 查询备注规则 +class FindRemark(BaseModel): + remark_uid: str # 简历uid + where: dict = {} # 其他条件 + diff --git a/utils/jianli.py b/utils/jianli.py index 4865681..b19b672 100644 --- a/utils/jianli.py +++ b/utils/jianli.py @@ -26,8 +26,6 @@ data_mode = { "hope_money": 10000, "feedback": 0, "interview_round": 0, - "star_time": "", - "end_time": "", "event_time": "", "name": "", "phone": "", @@ -52,8 +50,8 @@ data_mode = { "age": 0, "gam": "", "interview_state": 1, - "graduate_time": "", - "counts": 1 + "counts": 1, + "nation": 1, }