初始版本修改
This commit is contained in:
parent
fd0c4c1a26
commit
1901c97760
@ -9,6 +9,7 @@ from .endpoints import report
|
||||
from .endpoints import data_mana
|
||||
from .endpoints import query
|
||||
from .endpoints import xquery
|
||||
from .endpoints import interview
|
||||
from .endpoints import data_auth
|
||||
from .endpoints import event_mana
|
||||
from .endpoints import test
|
||||
@ -38,3 +39,6 @@ api_router.include_router(xquery.router, tags=["xck"], prefix='/ck')
|
||||
api_router.include_router(authz.router, tags=["api接口管理"], prefix='/authz')
|
||||
api_router.include_router(check_data.router, tags=["打点验证"], prefix='/check_data')
|
||||
api_router.include_router(user_label.router, tags=["用户标签"], prefix='/user_label')
|
||||
|
||||
api_router.include_router(interview.router, tags=["面试数据管理"], prefix='/itr')
|
||||
|
||||
|
76
api/api_v1/endpoints/interview.py
Normal file
76
api/api_v1/endpoints/interview.py
Normal file
@ -0,0 +1,76 @@
|
||||
import datetime
|
||||
import mimetypes
|
||||
from collections import defaultdict
|
||||
import time
|
||||
from urllib.parse import quote
|
||||
import re
|
||||
from clickhouse_driver import Client
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from fastapi import APIRouter, Depends, Request
|
||||
from motor.motor_asyncio import AsyncIOMotorDatabase
|
||||
from pandas import DataFrame
|
||||
from starlette.responses import StreamingResponse
|
||||
|
||||
import crud, schemas
|
||||
from common import *
|
||||
|
||||
from api import deps
|
||||
from db import get_database
|
||||
from db.ckdb import get_ck_db, CKDrive, ckdb
|
||||
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 utils import DfToStream, get_bijiao
|
||||
|
||||
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 = await interview.find_interview_sql()
|
||||
sql = res['sql']
|
||||
data = await db.execute(sql)
|
||||
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 = await interview.update_interview_sql()
|
||||
sql = res['sql']
|
||||
data = await db.execute(sql)
|
||||
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 = await 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)
|
||||
|
||||
|
38
crud/crud_interview.py
Normal file
38
crud/crud_interview.py
Normal file
@ -0,0 +1,38 @@
|
||||
from motor.motor_asyncio import AsyncIOMotorDatabase
|
||||
import schemas
|
||||
from crud.base import CRUDBase
|
||||
|
||||
__all__ = 'api_interview',
|
||||
|
||||
|
||||
class ApiInterview(CRUDBase):
|
||||
|
||||
# 获取所有面试安排信息
|
||||
async def get_api_interview(self, db: AsyncIOMotorDatabase):
|
||||
return await self.find_many(db)
|
||||
|
||||
# 获取单个面试安排数据
|
||||
async def get_one(self, db: AsyncIOMotorDatabase, data_in: schemas.Url_quanxian):
|
||||
return await self.find_one(db, {'user_id': data_in.user_id})
|
||||
|
||||
# 插入一条全新的面试安排数据
|
||||
async def insert_quanxian(self, db: AsyncIOMotorDatabase, data_in: schemas.Url_module):
|
||||
return await self.insert_one(db, data_in.dict())
|
||||
|
||||
# 更新一条面试安排数据
|
||||
async def updata_quanxian_module(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 get_one_module(self, db: AsyncIOMotorDatabase, data_in: schemas.Add_module):
|
||||
return await self.find_one(db, {'auth_id': data_in.auth_id})
|
||||
|
||||
# 更新一条面试安排数据
|
||||
async def update_one_interview(self, db: AsyncIOMotorDatabase, res):
|
||||
return await self.update_one(db, {'_id': res['_id']}, {
|
||||
'$set': res})
|
||||
|
||||
|
||||
api_interview = ApiInterview('api_interview')
|
@ -33,6 +33,10 @@ class CKDrive:
|
||||
df = pd.DataFrame({col[0]: d for d, col in zip(data, columns)})
|
||||
return df.T.to_dict()
|
||||
|
||||
async def execute_dict(self, sql, insert_data) -> dict:
|
||||
data = await self._execute(sql, insert_data, types_check=True)
|
||||
return data
|
||||
|
||||
async def query_dataframe(self, sql):
|
||||
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)})
|
||||
@ -72,6 +76,7 @@ class CKDrive:
|
||||
df = await self.query_dataframe(sql)
|
||||
return df.T.to_dict().values()
|
||||
|
||||
|
||||
ckdb = CKDrive()
|
||||
|
||||
|
||||
|
71
models/interview_zsgc.py
Normal file
71
models/interview_zsgc.py
Normal file
@ -0,0 +1,71 @@
|
||||
import re
|
||||
from typing import Tuple
|
||||
|
||||
import arrow
|
||||
import sqlalchemy as sa
|
||||
import json
|
||||
|
||||
from fastapi import Depends
|
||||
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
|
||||
from sqlalchemy import func, or_, and_, not_
|
||||
|
||||
import crud
|
||||
import schemas
|
||||
from core.config import settings
|
||||
from db import get_database
|
||||
|
||||
from db.redisdb import get_redis_pool, RedisDrive
|
||||
from models.user_label import UserClusterDef
|
||||
|
||||
|
||||
# 面试数据ck增删改查
|
||||
class InterviewDo:
|
||||
def __init__(self, query_in: schemas.InterviewQuery):
|
||||
self.query_in = query_in
|
||||
self.find_column = set()
|
||||
self.data_in = {}
|
||||
self.where = {}
|
||||
|
||||
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
|
||||
|
||||
def insert_interview_sql(self):
|
||||
insert_data = []
|
||||
if isinstance(self.data_in, dict):
|
||||
insert_data = [self.data_in]
|
||||
if isinstance(self.data_in, list):
|
||||
insert_data = self.data_in
|
||||
|
||||
# sql = f"insert into test.interview(auth, state, name, phone, position, teacher_name, boss_name, stage, " \
|
||||
# f"interview_type,interview_location, interview_time) values"
|
||||
sql = f"insert into test.interview(name, kardid) values"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
'insert_data': insert_data
|
||||
}
|
||||
|
||||
def update_interview_sql(self):
|
||||
updateStr = ''
|
||||
whereStr = ''
|
||||
for key, value in self.data_in.items():
|
||||
updateStr += str(key) + ' = ' + str(value) + ' '
|
||||
for key, value in self.where.items():
|
||||
whereStr += str(key) + ' = ' + str(value) + ' '
|
||||
updateStr = updateStr.strip()
|
||||
whereStr = whereStr.strip()
|
||||
sql = f"alter table test.interview update `{updateStr}` where `{whereStr}`"
|
||||
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
|
||||
def find_interview_sql(self):
|
||||
sql = f"select `{self.find_column}` from test.interview where {self.where}"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
@ -24,4 +24,5 @@ from .api_board import *
|
||||
from .url_list import *
|
||||
from .user_url import *
|
||||
from .api_module import *
|
||||
from .event_list import *
|
||||
from .event_list import *
|
||||
from .interview import *
|
||||
|
24
schemas/interview.py
Normal file
24
schemas/interview.py
Normal file
@ -0,0 +1,24 @@
|
||||
from typing import Dict, List, Union, Any
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
# 面试数据包含字段样式
|
||||
class InterviewModel(BaseModel):
|
||||
auth: int # 可操作最低权限 权限控制0表示最高权限 数字越大权限越小
|
||||
state: str # 反馈状态,面试安排数据的反馈
|
||||
name: str # 被面试人名
|
||||
phone: int # 被面试者手机号
|
||||
position: str # 面试职位
|
||||
teacher_name: str # 面试官名
|
||||
boss_name: str # 面试负责人
|
||||
stage: int # 当前面试阶段 1-5 表示初试,复式,终试,offer,入职 0表示离职 -1表示拒绝
|
||||
interview_type: str # 当前阶段面试类型 视频面试, 现场面试
|
||||
interview_location: str # 面试地点
|
||||
interview_time: str # 面试时间
|
||||
|
||||
|
||||
# 面试查询格式
|
||||
class InterviewQuery(BaseModel):
|
||||
data_in: Any
|
||||
interview_query: dict = dict() # 查询删选条件
|
||||
find_column: List[str] = None # 显示列名
|
Loading…
Reference in New Issue
Block a user