接口文档补充修改

This commit is contained in:
Àî×ÚÕñ 2022-07-15 17:10:49 +08:00
parent cd3098675e
commit 2b57c5db5a
13 changed files with 521 additions and 43 deletions

View File

@ -1,31 +1,18 @@
import datetime
import mimetypes
from collections import defaultdict
import time
import os import os
from urllib.parse import quote
import re import re
from clickhouse_driver import Client
import pandas as pd import pandas as pd
import numpy as np
from fastapi import APIRouter, Depends, Request, File, UploadFile from fastapi import APIRouter, Depends, Request, File, UploadFile
from motor.motor_asyncio import AsyncIOMotorDatabase from motor.motor_asyncio import AsyncIOMotorDatabase
from pandas import DataFrame
from starlette.responses import StreamingResponse
from utils.jianli import get_resume from utils.jianli import get_resume
import crud, schemas import crud, schemas
from common import *
from api import deps
from core.configuration import * from core.configuration import *
from db import get_database from db import get_database
from db.ckdb import get_ck_db, CKDrive, ckdb from db.ckdb import get_ck_db, CKDrive
from db.redisdb import get_redis_pool, RedisDrive
from models.behavior_analysis import BehaviorAnalysis
from models.user_analysis import UserAnalysis
from models.interview_zsgc import InterviewDo from models.interview_zsgc import InterviewDo
from utils import DfToStream, get_bijiao, get_time, qujian_time, Download_xlsx from utils import get_time, qujian_time, Download_xlsx
router = APIRouter() router = APIRouter()

View File

@ -10,8 +10,8 @@ class ApiInterviewRemark(CRUDBase):
# 获取简历所有备注 # 获取简历所有备注
async def get_interview_remarks(self, db: AsyncIOMotorDatabase, data_in: schemas.FindRemark): async def get_interview_remarks(self, db: AsyncIOMotorDatabase, data_in: schemas.FindRemark):
where = data_in.where where = data_in.where
where.update({'uid': data_in.remark_uid}) where.update({'remark_uid': data_in.remark_uid})
return await self.find_many(db, where) return await self.find_many(db, where,{'_id': 0})
# 插入一条全新的备注 # 插入一条全新的备注
async def insert_remark(self, db: AsyncIOMotorDatabase, data_in: schemas.BaseRemark): async def insert_remark(self, db: AsyncIOMotorDatabase, data_in: schemas.BaseRemark):

View File

@ -31,6 +31,7 @@ class CKDrive:
async def execute(self, sql) -> dict: async def execute(self, sql) -> dict:
data, columns = await self._execute(sql, with_column_types=True, columnar=True) data, columns = await self._execute(sql, with_column_types=True, columnar=True)
df = pd.DataFrame({col[0]: d for d, col in zip(data, columns)}) df = pd.DataFrame({col[0]: d for d, col in zip(data, columns)})
df = df.fillna('')
return df.T.to_dict() return df.T.to_dict()
async def execute_dict(self, sql, insert_data) -> dict: async def execute_dict(self, sql, insert_data) -> dict:

View File

@ -36,6 +36,54 @@ class InterviewDo:
self.where = self.query_in.interview_query self.where = self.query_in.interview_query
def insert_interview_sql(self): def insert_interview_sql(self):
# 简历初始文档
data_mode = {
"interview_name": "吴操",
"interview_type": 1,
"interview_sign": 0,
"hope_money": "",
"feedback": 0,
"interview_round": 0,
"event_time": "",
"name": "",
"phone": "",
"job_name": "",
"hr_name": "吴操",
"work_exp": 0,
"interview_stage": 1,
"owner_name": 2,
"education": 1,
"work_undergo": [],
"project_undergo": [],
"work_list": [],
"school": "",
"at_school": "",
"specialty": "",
"specialty_do": [],
"mmended_state": 0,
"mail": "",
"account": "",
"id_card": "",
"gender": "",
"age": 0,
"gam": "",
"interview_state": 1,
"counts": 1,
"nation": "",
"review": [],
"upgrade": [],
"come_time": "",
"now_money": "",
"men_state": 1,
"teacher_state": 1,
"teacher_back": 1,
"offer_state": 1,
"offer_exam_state": 1,
"notice_state": 1,
"pass_why": 0,
"pass_text": [],
}
insert_data = [] insert_data = []
res_data = [] res_data = []
if isinstance(self.data_in, dict): if isinstance(self.data_in, dict):
@ -43,29 +91,25 @@ class InterviewDo:
if isinstance(self.data_in, list): if isinstance(self.data_in, list):
insert_data = self.data_in insert_data = self.data_in
sql = f"insert into HR.resumes(interview_name, interview_type, interview_sign, feedback, interview_round, star_time, end_time, event_time, uid, name, phone, job_name, hr_name, work_exp, interview_stage, owner_name, education, work_undergo, project_undergo, work_list, school, at_school, specialty, specialty_do, mmended_state, mail, account, id_card, gender, age, gam, interview_state, graduate_time, counts, nation, come_time, review, upgrade) values" sql = f"insert into HR.resumes(interview_name, interview_type, interview_sign, hope_money, feedback," \
f" interview_round, event_time, uid, name, phone, job_name, hr_name, work_exp, interview_stage, owner_name," \
f" education, work_undergo, project_undergo, work_list, school, at_school, specialty, specialty_do, " \
f"mmended_state, mail, account, id_card, gender, age, gam, interview_state, counts, nation, come_time," \
f" review, upgrade, now_money, men_state, teacher_state, teacher_back, offer_state, offer_exam_state," \
f" notice_state, pass_why, pass_text) values"
now_time = datetime.datetime.now() now_time = datetime.datetime.now()
for data in insert_data: for data in insert_data:
s1 = data['star_time'] s1 = data['event_time']
s2 = data['end_time'] s2 = data['hope_money']
s3 = data['event_time'] s3 = data['now_money']
s4 = data['graduate_time']
if not s1: if not s1:
data['star_time'] = None
else:
data['star_time'] = parser.parse(s1)
if not s2:
data['end_time'] = None
else:
data['end_time'] = parser.parse(s2)
if not s3:
data['event_time'] = now_time data['event_time'] = now_time
else: else:
data['event_time'] = parser.parse(s3) data['event_time'] = parser.parse(s1)
if not s4: if s2 and isinstance(s2, int):
data['graduate_time'] = None data['hope_money'] = str(s2)
else: if s3 and isinstance(s3, int):
data['graduate_time'] = parser.parse(s4) data['now_money'] = str(s3)
data_true = deepcopy(data) data_true = deepcopy(data)
data_true['uid'] = get_uid() data_true['uid'] = get_uid()
education = data_true['education'] education = data_true['education']
@ -97,7 +141,9 @@ class InterviewDo:
data_true['work_exp'] = 0.0 data_true['work_exp'] = 0.0
else: else:
data_true['work_exp'] = float(true_work_exp.group()) data_true['work_exp'] = float(true_work_exp.group())
res_data.append(data_true) append_data = deepcopy(data_mode)
append_data.update(data_true)
res_data.append(append_data)
print(sql) print(sql)
return {'sql': sql, return {'sql': sql,
'insert_data': res_data 'insert_data': res_data

View File

@ -23,7 +23,7 @@ data_mode = {
"interview_name": "吴操", "interview_name": "吴操",
"interview_type": 1, "interview_type": 1,
"interview_sign": 0, "interview_sign": 0,
"hope_money": 10000, "hope_money": "",
"feedback": 0, "feedback": 0,
"interview_round": 0, "interview_round": 0,
"event_time": "", "event_time": "",
@ -51,7 +51,19 @@ data_mode = {
"gam": "", "gam": "",
"interview_state": 1, "interview_state": 1,
"counts": 1, "counts": 1,
"nation": 1, "nation": "",
"review": [],
"upgrade": [],
"come_time": "",
"now_money": "",
"men_state": 1,
"teacher_state": 1,
"teacher_back": 1,
"offer_state": 1,
"offer_exam_state": 1,
"notice_state": 1,
"pass_why": 0,
"pass_text": [],
} }
@ -92,7 +104,7 @@ def chkworlkandtime(listdata):
'name': res['公司名'][i]['text'], 'name': res['公司名'][i]['text'],
'time': res['时间'][i]['text'] 'time': res['时间'][i]['text']
} }
ress.append(date) ress.append(str(date))
return ress return ress

View File

@ -0,0 +1,78 @@
路由: /api/v1/itr/interview_offer_find
参数:
{
"data_in": "string", # 任意类型 [修改数据和插入数据时需要使用]
"interview_query": {"interview_stage": 4}, # 查询条件dict类型 可为空
"find_column": [ # 需要查询的字段list包str
"name"
]
}
# 仅用于参数说明
返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"interview_name": "张三", # 面试官
"interview_type": 0, # 面试类型 0:线上面试1:线下面试
"interview_sign": 1, # 面试签到 1:已签到0:未签到
"feedback": 0, # 面试反馈 1:已反馈0:未反馈
"interview_round": 1, # 面试阶段 1初试2复试3终试
"star_time": "2022-07-11T10:30:00", # 面试开始时间
"end_time": "2022-07-11T11:00:00", # 面试结束时间
"event_time": "2022-07-01T10:00:00", # 简历投递时间
"uid": "123456789", # 唯一id
"name": "李四", # 面试者姓名
"phone": "13789923799", # 手机号
"job_name": "python开发", # 应聘职位
"hr_name": "王五", # 面试负责人 候选人所有者
"work_exp": "2年", # 工作经验
"interview_stage": 1, # 简历阶段 1:初筛 2:复筛 3:面试 4:沟通offer 5:待入职
"owner_name": 2, # 简历来源 1:前程无忧,2:人才库,3:智联招聘,4:Boss直聘,5:58同城
"education": 1, # 学历 1:大专,2:本科,3:研究生,4:博士,5:硕士
"work_undergo": "", # 工作经历
"school": "武汉大学", # 毕业院校
"specialty": "计算机专业", # 专业
"mmended_state": 0, # 推荐状态
"mail": "250213000@qq.com", # 邮箱
"account": "湖北武汉", # 所在地
"id_card": "421202199986750339", # 身份证号
"gender": "男", # 性别
"interview_state": 2, # 当前面试状态 1:待安排 2:面试中 3:已结束
"graduate_time": "2022-07-01T08:00:00", # 毕业时间
"counts": 1 # 第几次投递简历
}
}
}
实际返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"uid": "3ae3f4d54e03ca",
"age": 20,
"gender": "男",
"at_school": "2005.9-2009.6",
"name": "陈超峰",
"event_time": "2022-07-12T17:42:13",
"owner_name": 2,
"education": 2,
"school": "中南民族大学",
"specialty": "计算机科学与技术",
"interview_name": "吴操",
"mmended_state": 0,
"work_list": [],
"work_exp": 0,
"job_name": "android开发工程师",
"feedback": 0,
"interview_round": 0,
"interview_state": 1,
"interview_stage": 4
}
}
}

View File

@ -0,0 +1,97 @@
路由: /api/v1/itr/interview_home_find
参数:
{
"data_in": "string", # 任意类型 [修改数据和插入数据时需要使用]
"interview_query": {"interview_stage": 1}, # 查询条件dict类型,可为空{}
"find_column": [ # 需要查询的字段list包str
"name"
]
}
# 仅用于参数说明
返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"interview_name": "张三", # 面试官
"interview_type": 0, # 面试类型 0:线上面试1:线下面试
"interview_sign": 1, # 面试签到 1:已签到0:未签到
"feedback": 0, # 面试反馈 1:已反馈0:未反馈
"interview_round": 1, # 面试阶段 1初试2复试3终试
"star_time": "2022-07-11T10:30:00", # 面试开始时间
"end_time": "2022-07-11T11:00:00", # 面试结束时间
"event_time": "2022-07-01T10:00:00", # 简历投递时间
"uid": "123456789", # 唯一id
"name": "李四", # 面试者姓名
"phone": "13789923799", # 手机号
"job_name": "python开发", # 应聘职位
"hr_name": "王五", # 面试负责人 候选人所有者
"work_exp": "2年", # 工作经验
"interview_stage": 1, # 简历阶段 1:初筛 2:复筛 3:面试 4:沟通offer 5:待入职
"owner_name": 2, # 简历来源 1:前程无忧,2:人才库,3:智联招聘,4:Boss直聘,5:58同城
"education": 1, # 学历 1:大专,2:本科,3:研究生,4:博士,5:硕士
"work_undergo": "", # 工作经历
"school": "武汉大学", # 毕业院校
"specialty": "计算机专业", # 专业
"mmended_state": 0, # 推荐状态
"mail": "250213000@qq.com", # 邮箱
"account": "湖北武汉", # 所在地
"id_card": "421202199986750339", # 身份证号
"gender": "男", # 性别
"interview_state": 2, # 当前面试状态 1:待安排 2:面试中 3:已结束
"graduate_time": "2022-07-01T08:00:00", # 毕业时间
"counts": 1 # 第几次投递简历
}
}
}
实际返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"uid": "3ae3f4d54e03ca",
"age": 20,
"gender": "男",
"at_school": "2005.9-2009.6",
"name": "陈超峰",
"event_time": "2022-07-12T17:42:13",
"owner_name": 2,
"education": 2,
"school": "中南民族大学",
"specialty": "计算机科学与技术",
"interview_name": "吴操",
"mmended_state": 0,
"work_list": [],
"work_exp": 0,
"notice_state": 1,
"job_name": "android开发工程师",
"interview_stage": 1
},
"1": {
"uid": "3ae63e44e24a38",
"age": 29,
"gender": "男",
"at_school": "6年",
"name": "陈亚雄",
"event_time": "2022-07-15T15:32:56",
"owner_name": 2,
"education": 2,
"school": "武汉纺织大学",
"specialty": "计算机软件",
"interview_name": "吴操",
"mmended_state": 0,
"work_list": [
"{'name': '中软国际科技服务有限公司', 'time': '2016.08-2017.6'}"
],
"work_exp": 6,
"notice_state": 1,
"job_name": "Android软件工程师",
"interview_stage": 1
}
}
}

View File

@ -0,0 +1,18 @@
路由: /api/v1/itr/interview_update
参数:
{
"data_in": {"interview_stage": 2}, # 字典,要修改的数据
"interview_query": {"uid": "3ae63e44e24a38"}, # 修改默认传当前简历数据的uid
"find_column": [ # 需要查询的字段list包str
"name"
]
}
返回值:
{
"code": 200,
"msg": "ok",
"data": {} # 第几次投递简历
}

View File

@ -1,15 +1,15 @@
路由: /api/v1/itr/interview_find 路由: /api/v1/itr/interview_screen_find
参数: 参数:
{ {
"data_in": "string", # 任意类型 [修改数据和插入数据时需要使用] "data_in": "string", # 任意类型 [修改数据和插入数据时需要使用]
"interview_query": {"interview_stage": 1}, # 查询条件dict类型 "interview_query": {"interview_stage": 2}, # 查询条件dict类型 可为空
"find_column": [ # 需要查询的字段list包str "find_column": [ # 需要查询的字段list包str
"name" "name"
] ]
} }
# 仅用于参数说明
返回值: 返回值:
{ {
"code": 200, "code": 200,
@ -46,4 +46,31 @@
"counts": 1 # 第几次投递简历 "counts": 1 # 第几次投递简历
} }
} }
}
实际返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"uid": "3ae3f4d54e03ca",
"age": 20,
"gender": "男",
"at_school": "2005.9-2009.6",
"name": "陈超峰",
"event_time": "2022-07-12T17:42:13",
"owner_name": 2,
"education": 2,
"school": "中南民族大学",
"specialty": "计算机科学与技术",
"interview_name": "吴操",
"mmended_state": 0,
"work_list": [],
"work_exp": 0,
"notice_state": 1,
"job_name": "android开发工程师",
"interview_stage": 2
}
}
} }

View File

@ -0,0 +1,80 @@
路由: /api/v1/itr/interview_waite_in_find
参数:
{
"data_in": "string", # 任意类型 [修改数据和插入数据时需要使用]
"interview_query": {"interview_stage": 5}, # 查询条件dict类型 可为空
"find_column": [ # 需要查询的字段list包str
"name"
]
}
# 仅用于参数说明
返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"interview_name": "张三", # 面试官
"interview_type": 0, # 面试类型 0:线上面试1:线下面试
"interview_sign": 1, # 面试签到 1:已签到0:未签到
"feedback": 0, # 面试反馈 1:已反馈0:未反馈
"interview_round": 1, # 面试阶段 1初试2复试3终试
"star_time": "2022-07-11T10:30:00", # 面试开始时间
"end_time": "2022-07-11T11:00:00", # 面试结束时间
"event_time": "2022-07-01T10:00:00", # 简历投递时间
"uid": "123456789", # 唯一id
"name": "李四", # 面试者姓名
"phone": "13789923799", # 手机号
"job_name": "python开发", # 应聘职位
"hr_name": "王五", # 面试负责人 候选人所有者
"work_exp": "2年", # 工作经验
"interview_stage": 1, # 简历阶段 1:初筛 2:复筛 3:面试 4:沟通offer 5:待入职
"owner_name": 2, # 简历来源 1:前程无忧,2:人才库,3:智联招聘,4:Boss直聘,5:58同城
"education": 1, # 学历 1:大专,2:本科,3:研究生,4:博士,5:硕士
"work_undergo": "", # 工作经历
"school": "武汉大学", # 毕业院校
"specialty": "计算机专业", # 专业
"mmended_state": 0, # 推荐状态
"mail": "250213000@qq.com", # 邮箱
"account": "湖北武汉", # 所在地
"id_card": "421202199986750339", # 身份证号
"gender": "男", # 性别
"interview_state": 2, # 当前面试状态 1:待安排 2:面试中 3:已结束
"graduate_time": "2022-07-01T08:00:00", # 毕业时间
"counts": 1 # 第几次投递简历
}
}
}
实际返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"uid": "3ae3f4d54e03ca",
"age": 20,
"gender": "男",
"at_school": "2005.9-2009.6",
"name": "陈超峰",
"event_time": "2022-07-12T17:42:13",
"owner_name": 2,
"education": 2,
"school": "中南民族大学",
"specialty": "计算机科学与技术",
"interview_name": "吴操",
"mmended_state": 0,
"work_list": [],
"work_exp": 0,
"job_name": "android开发工程师",
"feedback": 0,
"interview_round": 0,
"interview_state": 1,
"interview_stage": 5,
"pass_why": 0,
"pass_text": []
}
}
}

View File

@ -0,0 +1,35 @@
接口: api/v1/itr/add_remark
参数:
{
"remark_uid": "3ae3f4d54e03ca", # 查询的简历uid
"where": {} # 预留字段额外删选条件
}
返回值:
{
"code": 200,
"msg": "ok",
"data": [
{
"remark_id": "1657867100",
"remark_from": "吴操",
"comment": "吴操觉得可以",
"stage_num": 0,
"remark_time": "2022-07-15T14:38:20.279000",
"remark_uid": "3ae3f4d54e03ca",
"remark_stage": 5
},
{
"remark_id": 1657872635,
"remark_from": "吴操",
"comment": "吴操觉得不是很可以",
"stage_num": 0,
"remark_time": "2022-07-15T16:10:35.622000",
"remark_uid": "3ae3f4d54e03ca",
"remark_stage": 5
}
]
}

View File

@ -0,0 +1,19 @@
接口: api/v1/itr/add_remark
参数:
{
"remark_from": "吴操", # 编写备注的人
"comment": "吴操觉得可以", # 备注内容
"stage_num": 0, # 备注查看权限
"remark_uid": "3ae3f4d54e03ca", # 被备注的简历的uid
"remark_stage": 5 # 备注时简历所处阶段
}
返回值:
{
"code": 200,
"msg": "ok",
"data": ""
}

View File

@ -0,0 +1,78 @@
路由: /api/v1/itr/interview_exam_find
参数:
{
"data_in": "string", # 任意类型 [修改数据和插入数据时需要使用]
"interview_query": {"interview_stage": 3}, # 查询条件dict类型 可为空
"find_column": [ # 需要查询的字段list包str
"name"
]
}
# 仅用于参数说明
返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"interview_name": "张三", # 面试官
"interview_type": 0, # 面试类型 0:线上面试1:线下面试
"interview_sign": 1, # 面试签到 1:已签到0:未签到
"feedback": 0, # 面试反馈 1:已反馈0:未反馈
"interview_round": 1, # 面试阶段 1初试2复试3终试
"star_time": "2022-07-11T10:30:00", # 面试开始时间
"end_time": "2022-07-11T11:00:00", # 面试结束时间
"event_time": "2022-07-01T10:00:00", # 简历投递时间
"uid": "123456789", # 唯一id
"name": "李四", # 面试者姓名
"phone": "13789923799", # 手机号
"job_name": "python开发", # 应聘职位
"hr_name": "王五", # 面试负责人 候选人所有者
"work_exp": "2年", # 工作经验
"interview_stage": 1, # 简历阶段 1:初筛 2:复筛 3:面试 4:沟通offer 5:待入职
"owner_name": 2, # 简历来源 1:前程无忧,2:人才库,3:智联招聘,4:Boss直聘,5:58同城
"education": 1, # 学历 1:大专,2:本科,3:研究生,4:博士,5:硕士
"work_undergo": "", # 工作经历
"school": "武汉大学", # 毕业院校
"specialty": "计算机专业", # 专业
"mmended_state": 0, # 推荐状态
"mail": "250213000@qq.com", # 邮箱
"account": "湖北武汉", # 所在地
"id_card": "421202199986750339", # 身份证号
"gender": "男", # 性别
"interview_state": 2, # 当前面试状态 1:待安排 2:面试中 3:已结束
"graduate_time": "2022-07-01T08:00:00", # 毕业时间
"counts": 1 # 第几次投递简历
}
}
}
实际返回值:
{
"code": 200,
"msg": "ok",
"data": {
"0": {
"uid": "3ae3f4d54e03ca",
"age": 20,
"gender": "男",
"at_school": "2005.9-2009.6",
"name": "陈超峰",
"event_time": "2022-07-12T17:42:13",
"owner_name": 2,
"education": 2,
"school": "中南民族大学",
"specialty": "计算机科学与技术",
"interview_name": "吴操",
"mmended_state": 0,
"work_list": [],
"work_exp": 0,
"job_name": "android开发工程师",
"feedback": 0,
"interview_round": 0,
"interview_state": 1,
"interview_stage": 3
}
}
}