168 lines
6.1 KiB
Python
168 lines
6.1 KiB
Python
import re
|
|
from typing import Tuple
|
|
import datetime
|
|
import arrow
|
|
import sqlalchemy as sa
|
|
import json
|
|
|
|
from fastapi import Depends
|
|
|
|
import pandas as pd
|
|
import numpy as np
|
|
from utils.func import get_uid
|
|
from sqlalchemy import func, or_, and_, not_
|
|
from copy import deepcopy
|
|
import crud
|
|
import schemas
|
|
from dateutil import parser
|
|
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 = []
|
|
res_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 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"
|
|
now_time = datetime.datetime.now()
|
|
for data in insert_data:
|
|
s1 = data['star_time']
|
|
s2 = data['end_time']
|
|
s3 = data['event_time']
|
|
s4 = data['graduate_time']
|
|
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
|
|
else:
|
|
data['event_time'] = parser.parse(s3)
|
|
if not s4:
|
|
data['graduate_time'] = None
|
|
else:
|
|
data['graduate_time'] = parser.parse(s4)
|
|
data_true = deepcopy(data)
|
|
data_true['uid'] = get_uid()
|
|
education = data_true['education']
|
|
# 学历int转化
|
|
education_int = {
|
|
'大专': 1,
|
|
'本科': 2,
|
|
'研究生': 3,
|
|
'博士': 4,
|
|
'硕士': 5,
|
|
}
|
|
if education and isinstance(education, str):
|
|
data_true['education'] = education_int.get(education, 1)
|
|
age = data_true['age']
|
|
# 年龄int转化
|
|
if age and isinstance(age, str):
|
|
true_age = re.search(r"\d+\.?\d*", age)
|
|
if len(true_age.group()) > 2:
|
|
data_true['age'] = 20
|
|
else:
|
|
data_true['age'] = int(true_age.group())
|
|
work_exp = data_true['work_exp']
|
|
# 工作经验float转化
|
|
if not work_exp:
|
|
data_true['work_exp'] = 0
|
|
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_true['work_exp'] = 0.0
|
|
else:
|
|
data_true['work_exp'] = float(true_work_exp.group())
|
|
res_data.append(data_true)
|
|
print(sql)
|
|
return {'sql': sql,
|
|
'insert_data': res_data
|
|
}
|
|
|
|
def update_interview_sql(self):
|
|
updateStr = ''
|
|
whereStr = ''
|
|
for key, value in self.data_in.items():
|
|
if isinstance(value, str):
|
|
updateStr += str(key) + ' = ' + "'" + value + "'" + ' '
|
|
continue
|
|
updateStr += str(key) + ' = ' + str(value) + ' '
|
|
for key, value in self.where.items():
|
|
if isinstance(value, str):
|
|
whereStr += str(key) + ' = ' + "'" + value + "'" + ' '
|
|
continue
|
|
whereStr += str(key) + ' = ' + str(value) + ' '
|
|
updateStr.strip()
|
|
whereStr.strip()
|
|
sql = f"alter table HR.resumes update {updateStr} where {whereStr}"
|
|
|
|
print(sql)
|
|
return {'sql': sql,
|
|
}
|
|
|
|
def find_interview_sql(self):
|
|
whereStr = ''
|
|
findStr = ''
|
|
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}"
|
|
# sql = f"select * from HR.resumes where {whereStr}"
|
|
print(sql)
|
|
return {'sql': sql,
|
|
}
|
|
|
|
# 主页查询
|
|
def find_interview_home_sql(self):
|
|
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"]
|
|
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,
|
|
}
|
|
|
|
|
|
if __name__ == '__main__':
|
|
find = re.search(r"\d+\.?\d*", "18岁")
|
|
print(len(find.group())) |