通用报表以及报表参数设置

This commit is contained in:
Àî×ÚÕñ 2022-10-13 16:38:27 +08:00
parent aa0f0183fc
commit 023ba9f856
4 changed files with 169 additions and 22 deletions

View File

@ -1,6 +1,6 @@
import operator import operator
import os import os
import re,json import re, json
import pandas as pd import pandas as pd
from copy import deepcopy from copy import deepcopy
from fastapi import APIRouter, Depends, Request, File, UploadFile from fastapi import APIRouter, Depends, Request, File, UploadFile
@ -2681,36 +2681,124 @@ async def find_count_info(
return schemas.Msg(code=200, msg='ok', data=res_data) return schemas.Msg(code=200, msg='ok', data=res_data)
# 通用报表 # 添加一条查询字段对照表数据
@router.post("/currency_form") @router.post("/find_column_insert")
async def currency_form( async def find_column_insert(
request: Request,
insert_data: dict,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
""" 添加一条查询字段对照表数据 """
await crud.api_find_column.insert_columns(db, insert_data)
return schemas.Msg(code=200, msg='ok', data='')
# 修改一条查询字段对照表数据
@router.post("/find_column_update")
async def find_column_update(
request: Request,
column_type: str,
update_data: dict,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
""" 修改一条查询字段对照表数据 """
data = await crud.api_find_column.update_columns(db, update_data, where={'column_type': column_type})
return schemas.Msg(code=200, msg='ok', data=data)
# 报表查询字段对照列表
@router.post("/find_column_list")
async def find_column_list(
request: Request,
column_type: str,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
""" 报表查询字段对照列表 """
data = await crud.api_find_column.get_one_column(db, where={'column_type': column_type})
return schemas.Msg(code=200, msg='ok', data=data)
# 通用简历分析报表
@router.post("/currency_interview_form")
async def currency_interview_form(
request: Request, request: Request,
interview: InterviewDo = Depends(InterviewDo), interview: InterviewDo = Depends(InterviewDo),
ck_db: CKDrive = Depends(get_ck_db), ck_db: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database), db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user) current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg: ) -> schemas.Msg:
""" 通用模板报表 """ """ 通用简历分析报表 """
await interview.init() await interview.init()
res = interview.year_job_form_sql() res = interview.find_interview_every_sql()
sql = res['sql'] sql = res['sql']
data = await ck_db.execute(sql)
# 获取报表相关参数 # 获取报表相关参数
table_id = interview.data_in.get('table_id', '') table_id = interview.data_in.get('table_id', '')
if not table_id: if not table_id:
return schemas.Msg(code=200, msg='报表数据错误', data={}) return schemas.Msg(code=200, msg='报表数据错误', data={})
table_data = await crud.api_interview_tables.get_one_table(db, table_id) table_data = await crud.api_interview_tables.get_one_table(db, table_id)
if not table_data: if not table_data:
return schemas.Msg(code=200, msg='报表数据错误', data={}) return schemas.Msg(code=200, msg='报表数据错误', data={})
level_list = {
'count_id': '月份' find_column = table_data.get('find_column', [])
} title = table_data['title']
data = await ck_db.execute(sql)
level_list_data = await crud.api_find_column.get_one_column(db, where={'column_type': 'interview'})
level_list = {k: v for k, v in level_list_data.items() if k in find_column}
# 导出报表 # 导出报表
if interview.out_form == 'out': if interview.out_form == 'out':
xls_name = '在职人员年份分布' + interview.where.get('start_time', '') + '~' + interview.where.get('start_time', '') xls_name = title + interview.where.get('start_time', '') + '~' + interview.where.get('start_time', '')
chk_data = []
columns = list(level_list.values())
key_dict = {v: k for k, v in level_list.items()}
for i in data.values():
add_data = []
for key in columns:
add_data.append(i.get(key_dict[key], ''))
true_add_data = deepcopy(add_data)
chk_data.append(true_add_data)
chk_df = pd.DataFrame(data=chk_data, columns=columns)
download_xls = Download_xlsx(chk_df, xls_name)
return download_xls
res_msg = {
'data': data.values(),
'level_list': level_list
}
res_data = {
'data': res_msg,
'table_data': table_data
}
return schemas.Msg(code=200, msg='ok', data=res_data)
# 通用入职人员分析报表
@router.post("/currency_worker_form")
async def currency_worker_form(
request: Request,
interview: InterviewDo = Depends(InterviewDo),
ck_db: CKDrive = Depends(get_ck_db),
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
""" 通用入职人员分析报表 """
# 获取报表相关参数
table_id = interview.data_in.get('table_id', '')
if not table_id:
return schemas.Msg(code=200, msg='报表数据错误', data={})
table_data = await crud.api_interview_tables.get_one_table(db, table_id)
if not table_data:
return schemas.Msg(code=200, msg='报表数据错误', data={})
find_column = table_data.get('find_column', [])
title = table_data['title']
data = await crud.worker_info.find_worker_some(db, findlist=find_column)
level_list_data = await crud.api_find_column.get_one_column(db, where={'column_type': 'worker'})
level_list = {k: v for k, v in level_list_data.items() if k in find_column}
# 导出报表
if interview.out_form == 'out':
xls_name = title + interview.where.get('start_time', '') + '~' + interview.where.get('start_time', '')
chk_data = [] chk_data = []
columns = list(level_list.values()) columns = list(level_list.values())
key_dict = {v: k for k, v in level_list.items()} key_dict = {v: k for k, v in level_list.items()}
@ -2724,7 +2812,17 @@ async def currency_form(
download_xls = Download_xlsx(chk_df, xls_name) download_xls = Download_xlsx(chk_df, xls_name)
return download_xls return download_xls
res_msg = {
'data': data,
'level_list': level_list
}
res_data = {
'data': res_msg,
'table_data': table_data
}
return schemas.Msg(code=200, msg='ok', data=res_data)
# 读取邮箱简历方法
def email_user(dir_name, mail_dict): def email_user(dir_name, mail_dict):
file_list = [] # 简历文件 file_list = [] # 简历文件
# 获取当前文件所在目录的绝对路径 # 获取当前文件所在目录的绝对路径
@ -2780,10 +2878,10 @@ async def chk_email_files(
) -> schemas.Msg: ) -> schemas.Msg:
""" 获取hr邮箱简历 """ """ 获取hr邮箱简历 """
mail_user = { mail_user = {
'3a0c9e4958d12e': { # 李宗振 user表的_id '3a0c9e4958d12e': { # 李宗振 user表的_id
'mail': '1986461823@qq.com', # 接收简历的邮箱 'mail': '1986461823@qq.com', # 接收简历的邮箱
'host': 'imap.qq.com', # imap服务器地址 'host': 'imap.qq.com', # imap服务器地址
'pwd': 'hoosihokeaqkifdf' # 第三方提供的安全码 'pwd': 'hoosihokeaqkifdf' # 第三方提供的安全码
} }
# '吴操': { # '吴操': {
# 'mail': '2787668634@qq.com', # 'mail': '2787668634@qq.com',

View File

@ -34,4 +34,5 @@ from .crud_owner_info import owner_info
from .crud_count_in_worker import count_in_worker from .crud_count_in_worker import count_in_worker
from .crud_basic_data import basic_data from .crud_basic_data import basic_data
from .crud_section import section from .crud_section import section
from .crud_feedback import feedback from .crud_feedback import feedback
from .crud_find_column import api_find_column

31
crud/crud_find_column.py Normal file
View File

@ -0,0 +1,31 @@
from motor.motor_asyncio import AsyncIOMotorDatabase
import schemas
from crud.base import CRUDBase
__all__ = 'api_find_column',
class ApiFindColumn(CRUDBase):
# 获取所有
async def get_find_columns(self, db: AsyncIOMotorDatabase):
return await self.find_many(db, {}, {'_id': 0})
# 插入一条新数据
async def insert_columns(self, db: AsyncIOMotorDatabase, insert_data):
return await self.insert_one(db, insert_data)
# 更新一条数据
async def update_columns(self, db: AsyncIOMotorDatabase, update_data, where={}):
return await self.update_one(db, where, {'$set': update_data})
# 查询数据
async def get_columns(self, db: AsyncIOMotorDatabase, where={}):
return await self.find_many(db, where, {'_id': 0})
# 获取一条数据
async def get_one_column(self, db: AsyncIOMotorDatabase, where={}):
return await self.find_one(db, where, {'_id': 0})
api_find_column = ApiFindColumn('find_column')

View File

@ -375,8 +375,12 @@ class InterviewDo:
else: else:
for fstr in self.find_column: for fstr in self.find_column:
findStr += fstr + ', ' findStr += fstr + ', '
is_date = 0
for key, value in self.where.items(): for key, value in self.where.items():
if key in ['interview_id', 'hr_id', 'interview_name', 'hr_name','department']: if key in ['start_time', 'end_time']:
is_date = 1
continue
if key in ['interview_id', 'hr_id', 'interview_name', 'hr_name', 'department']:
# 多个条件 # 多个条件
if ',' in value: if ',' in value:
values = value.split(',') values = value.split(',')
@ -422,10 +426,23 @@ class InterviewDo:
else: else:
whereStr += str(key) + ' = ' + "'" + value + "'" + ' ' whereStr += str(key) + ' = ' + "'" + value + "'" + ' '
continue continue
if whereStr: # 有日期条件
whereStr += 'and ' + str(key) + ' = ' + str(value) + ' ' 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:
if whereStr:
sql += f" and toDate(addHours(`event_time`, 0)) >= '{start_time}'"
else:
sql += f" toDate(addHours(`event_time`, 0)) >= '{start_time}'"
if end_time:
sql += f" and toDate(addHours(`event_time`, 0)) <= '{end_time}'"
else: else:
whereStr += str(key) + ' = ' + str(value) + ' ' if whereStr:
whereStr += 'and ' + str(key) + ' = ' + str(value) + ' '
else:
whereStr += str(key) + ' = ' + str(value) + ' '
whereStr = whereStr.strip() whereStr = whereStr.strip()
findStr = findStr.strip().strip(',') findStr = findStr.strip().strip(',')
if whereStr: if whereStr: