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

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 os
import re,json
import re, json
import pandas as pd
from copy import deepcopy
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)
# 通用报表
@router.post("/currency_form")
async def currency_form(
# 添加一条查询字段对照表数据
@router.post("/find_column_insert")
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,
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:
""" 通用模板报表 """
""" 通用简历分析报表 """
await interview.init()
res = interview.year_job_form_sql()
res = interview.find_interview_every_sql()
sql = res['sql']
data = await ck_db.execute(sql)
# 获取报表相关参数
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={})
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':
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 = []
columns = list(level_list.values())
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)
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):
file_list = [] # 简历文件
# 获取当前文件所在目录的绝对路径
@ -2780,10 +2878,10 @@ async def chk_email_files(
) -> schemas.Msg:
""" 获取hr邮箱简历 """
mail_user = {
'3a0c9e4958d12e': { # 李宗振 user表的_id
'mail': '1986461823@qq.com', # 接收简历的邮箱
'host': 'imap.qq.com', # imap服务器地址
'pwd': 'hoosihokeaqkifdf' # 第三方提供的安全码
'3a0c9e4958d12e': { # 李宗振 user表的_id
'mail': '1986461823@qq.com', # 接收简历的邮箱
'host': 'imap.qq.com', # imap服务器地址
'pwd': 'hoosihokeaqkifdf' # 第三方提供的安全码
}
# '吴操': {
# '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_basic_data import basic_data
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:
for fstr in self.find_column:
findStr += fstr + ', '
is_date = 0
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:
values = value.split(',')
@ -422,10 +426,23 @@ class InterviewDo:
else:
whereStr += str(key) + ' = ' + "'" + value + "'" + ' '
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:
whereStr += str(key) + ' = ' + str(value) + ' '
if whereStr:
whereStr += 'and ' + str(key) + ' = ' + str(value) + ' '
else:
whereStr += str(key) + ' = ' + str(value) + ' '
whereStr = whereStr.strip()
findStr = findStr.strip().strip(',')
if whereStr: