prs_server/models/interview_zsgc.py

431 lines
16 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
from utils import get_week, strptime, start_end_month, strptime1
# 面试数据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 handler_filts(self, where):
"""
:param filters: (filts:list,relation:str)
:param g_f:
:param relation:
:return:
"""
filters = []
for col, value in where.items():
filters.append(col == value)
return filters
async def scatter_model_sql(self):
time = self.where.get('time', '')
start_time0 = self.where.get('start_time', '')
end_time0 = self.where.get('end_time', '')
global where
# 判断是分布分析里面的分组详情改时间范围其他情况都走else
if time != '':
timeParticleSize = self.where.get('timeParticleSize', 'P1M') # 筛选是按周,按月,合计等情况,用不同的时间
if timeParticleSize == 'P1W': # 按周
start_date, end_date = get_week(time)
if start_date < strptime(start_time0): # 开头的时间
where = [
func.addHours("event_time") >= start_time0,
func.addHours("event_time") <= end_date,
]
elif end_date < strptime(end_time0): # 中间的时间
where = [
func.addHours("event_time") >= start_date,
func.addHours("event_time") <= end_date, ]
else: # 结尾的时间
where = [
func.addHours("event_time") >= start_date,
func.addHours("event_time") <= end_time0, ]
elif timeParticleSize == 'P1M': # 按月
start_date, end_date = start_end_month(time)
if strptime(start_time0) > strptime1(time):
where = [
func.addHours("event_time") >= start_time0,
func.addHours("event_time") <= end_date,
]
else:
where = [
func.addHours("event_time") >= start_date,
func.addHours("event_time") <= end_time0,
]
else:
where = [
func.addHours("event_time") >= start_time0,
func.addHours("event_time") <= end_time0, ]
else:
where = [
func.addHours("event_time") >= start_time0,
func.addHours("event_time") <= end_time0,
]
filter = self.handler_filts(self.where)
where.extend(filter)
qry = sa.select(*self.find_column).where(and_(*where))
sql = str(qry.compile(compile_kwargs={"literal_binds": True}))
print(sql)
return {
'sql': sql
}
# 插入面试数据
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 = []
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, 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()
for data in insert_data:
s1 = data['event_time']
s2 = data['hope_money']
s3 = data['now_money']
if not s1:
data['event_time'] = now_time
else:
data['event_time'] = parser.parse(s1)
if s2 and isinstance(s2, int):
data['hope_money'] = str(s2)
if s3 and isinstance(s3, int):
data['now_money'] = str(s3)
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())
append_data = deepcopy(data_mode)
append_data.update(data_true)
res_data.append(append_data)
print(sql)
return {
'sql': sql,
'insert_data': res_data
}
# 更新面试数据sql
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):
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",
"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():
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 get_man_mass_form_sql(self):
whereStr = ''
findStr = ''
# 查询字段
self.find_column = ["uid", "age", "gender", "name", "education", "owner_name", "school", "work_exp", "job_name",
"account", "work_list"]
for fstr in self.find_column:
findStr += fstr + ', '
is_date = 0
for key, value in self.where.items():
if key in ['start_time', 'end_time']:
is_date = 1
continue
if isinstance(value, str):
whereStr += str(key) + ' = ' + "'" + value + "'" + ' '
continue
whereStr += str(key) + ' = ' + str(value) + ' '
whereStr = whereStr.strip()
findStr = findStr.strip().strip(',')
# 有日期条件
if is_date:
start_time = self.where.get('start_time', '')
end_time = self.where.get('end_time', '')
sql = f"select {findStr} from HR.resumes where {whereStr}"
if start_time:
sql += f" and toDate(event_time) >= `{start_time}`"
if end_time:
sql += f" and toDate(event_time) <= `{end_time}`"
# 没有日期条件
else:
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()))