初始版本修改

This commit is contained in:
Àî×ÚÕñ 2022-07-11 10:53:52 +08:00
parent fd0c4c1a26
commit 1901c97760
7 changed files with 220 additions and 1 deletions

View File

@ -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')

View 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
View 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')

View File

@ -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
View 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,
}

View File

@ -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
View 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 # 显示列名