候选人
This commit is contained in:
parent
e1e6c544bc
commit
f5998c14a5
@ -10,6 +10,7 @@ from .endpoints import data_mana
|
||||
from .endpoints import query
|
||||
from .endpoints import xquery
|
||||
from .endpoints import interview
|
||||
from .endpoints import forms
|
||||
from .endpoints import data_auth
|
||||
from .endpoints import event_mana
|
||||
from .endpoints import test
|
||||
@ -41,4 +42,5 @@ api_router.include_router(check_data.router, tags=["打点验证"], prefix='/che
|
||||
api_router.include_router(user_label.router, tags=["用户标签"], prefix='/user_label')
|
||||
|
||||
api_router.include_router(interview.router, tags=["面试数据管理"], prefix='/itr')
|
||||
api_router.include_router(forms.router, tags=["hr报表模板管理"], prefix='/forms')
|
||||
|
||||
|
38
api/api_v1/endpoints/forms.py
Normal file
38
api/api_v1/endpoints/forms.py
Normal file
@ -0,0 +1,38 @@
|
||||
import operator
|
||||
import os
|
||||
import re
|
||||
import pandas as pd
|
||||
from fastapi import APIRouter, Depends, Request, File, UploadFile
|
||||
from motor.motor_asyncio import AsyncIOMotorDatabase
|
||||
|
||||
from utils.dingding import get_redis_alluid, send_dates
|
||||
from utils.jianli import get_resume
|
||||
import crud, schemas
|
||||
from datetime import datetime
|
||||
from core.configuration import *
|
||||
from db import get_database
|
||||
from db.ckdb import get_ck_db, CKDrive
|
||||
|
||||
from models.interview_zsgc import InterviewDo
|
||||
from utils import get_time, qujian_time, Download_xlsx, send_str_mail
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# 候选人质量报表
|
||||
@router.post("/man_mass_form")
|
||||
async def interview_find(
|
||||
request: Request,
|
||||
interview: InterviewDo = Depends(InterviewDo),
|
||||
db: CKDrive = Depends(get_ck_db),
|
||||
) -> schemas.Msg:
|
||||
""" interview面试数据查询 """
|
||||
await interview.init()
|
||||
res = interview.get_man_mass_form_sql()
|
||||
sql = res['sql']
|
||||
# data = await db.execute(sql)
|
||||
df = await db.query_dataframe(sql)
|
||||
if df.empty:
|
||||
return schemas.Msg(code=-9, msg='无数据', data=None)
|
||||
|
||||
# return schemas.Msg(code=200, msg='ok', data=data)
|
@ -20,6 +20,7 @@ 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增删改查
|
||||
@ -35,6 +36,77 @@ class InterviewDo:
|
||||
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 = {
|
||||
@ -145,10 +217,12 @@ class InterviewDo:
|
||||
append_data.update(data_true)
|
||||
res_data.append(append_data)
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
'insert_data': res_data
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
'insert_data': res_data
|
||||
}
|
||||
|
||||
# 更新面试数据sql
|
||||
def update_interview_sql(self):
|
||||
updateStr = ''
|
||||
whereStr = ''
|
||||
@ -167,8 +241,9 @@ class InterviewDo:
|
||||
sql = f"alter table HR.resumes update {updateStr} where {whereStr}"
|
||||
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
}
|
||||
|
||||
def find_interview_sql(self):
|
||||
whereStr = ''
|
||||
@ -185,8 +260,9 @@ class InterviewDo:
|
||||
sql = f"select {findStr} from HR.resumes where {whereStr}"
|
||||
# sql = f"select * from HR.resumes where {whereStr}"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
}
|
||||
|
||||
# 主页初筛查询
|
||||
def find_interview_home_sql(self):
|
||||
@ -208,8 +284,9 @@ class InterviewDo:
|
||||
findStr = findStr.strip().strip(',')
|
||||
sql = f"select {findStr} from HR.resumes where {whereStr}"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
}
|
||||
|
||||
# 复筛查询
|
||||
def find_interview_screen_sql(self):
|
||||
@ -231,8 +308,9 @@ class InterviewDo:
|
||||
findStr = findStr.strip().strip(',')
|
||||
sql = f"select {findStr} from HR.resumes where {whereStr}"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
}
|
||||
|
||||
# 面试阶段查询
|
||||
def find_interview_exam_sql(self):
|
||||
@ -254,8 +332,9 @@ class InterviewDo:
|
||||
findStr = findStr.strip().strip(',')
|
||||
sql = f"select {findStr} from HR.resumes where {whereStr}"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
}
|
||||
|
||||
# offer阶段查询
|
||||
def find_interview_offer_sql(self):
|
||||
@ -277,8 +356,9 @@ class InterviewDo:
|
||||
findStr = findStr.strip().strip(',')
|
||||
sql = f"select {findStr} from HR.resumes where {whereStr}"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
}
|
||||
|
||||
# 待入职阶段查询
|
||||
def find_interview_waite_in_sql(self):
|
||||
@ -301,8 +381,48 @@ class InterviewDo:
|
||||
findStr = findStr.strip().strip(',')
|
||||
sql = f"select {findStr} from HR.resumes where {whereStr}"
|
||||
print(sql)
|
||||
return {'sql': sql,
|
||||
}
|
||||
return {
|
||||
'sql': sql,
|
||||
}
|
||||
|
||||
# 分组报表候选人质量查询
|
||||
def get_man_mass_form_sql(self):
|
||||
whereStr = ''
|
||||
findStr = ''
|
||||
# 查询字段
|
||||
self.find_column = ["uid", "age", "gender", "name", "education", "owner_name", "school", "specialty",
|
||||
"work_exp", "job_name", "account"]
|
||||
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__':
|
||||
|
@ -6,6 +6,10 @@ import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
from email.utils import formataddr
|
||||
|
||||
from datetime import timedelta
|
||||
from datetime import datetime as p1
|
||||
import calendar
|
||||
|
||||
from core.config import Email
|
||||
|
||||
|
||||
@ -230,3 +234,49 @@ def send_str_mail(str_msg, my_user):
|
||||
# server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
|
||||
server.sendmail(Email.my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
|
||||
server.quit() # 关闭连接
|
||||
|
||||
|
||||
def get_week(date_str=None):
|
||||
if date_str and isinstance(date_str, str):
|
||||
now_time = (p1.strptime(date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S") + datetime.timedelta(days=1)).strftime(
|
||||
"%Y-%m-%d %H:%M:%S")
|
||||
else:
|
||||
now_time = p1.now().replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
now_time = strptime(now_time)
|
||||
# 当前日期所在周的周一
|
||||
week_start_time = now_time - timedelta(days=now_time.weekday() + 1, hours=now_time.hour, minutes=now_time.minute,
|
||||
seconds=now_time.second)
|
||||
# 当前日期所在周的周日
|
||||
week_end_time = week_start_time + timedelta(days=6, hours=23, minutes=59, seconds=59)
|
||||
return week_start_time, week_end_time
|
||||
|
||||
|
||||
def strptime(date_string):
|
||||
"""
|
||||
将字符串转换成datetime.datetime类型
|
||||
:param date_string: '2022-05-29 23:59:59'
|
||||
:return: 2022-05-29 23:59:59
|
||||
"""
|
||||
return p1.strptime(date_string, '%Y-%m-%d %H:%M:%S')
|
||||
|
||||
|
||||
def strptime1(date_str):
|
||||
"""
|
||||
将字符串转换成datetime.datetime类型
|
||||
:param date_string: '2022-05-29'
|
||||
:return: 2022-05-29 00:00:00
|
||||
"""
|
||||
return p1.strptime(date_str + " 00:00:00", "%Y-%m-%d %H:%M:%S")
|
||||
|
||||
|
||||
def start_end_month(time):
|
||||
"""
|
||||
获取某个月的起始时间和结束时间
|
||||
:param time: '2022-05-29'
|
||||
:return:
|
||||
"""
|
||||
now = p1.strptime(time + " 00:00:00", "%Y-%m-%d %H:%M:%S")
|
||||
this_month_start = datetime.datetime(now.year, now.month, 1)
|
||||
this_month_end = datetime.datetime(now.year, now.month, calendar.monthrange(now.year, now.month)[1])
|
||||
this_month_end1 = this_month_end + timedelta(hours=23, minutes=59, seconds=59)
|
||||
return this_month_start, this_month_end1
|
Loading…
Reference in New Issue
Block a user