通用报表以及报表参数设置
This commit is contained in:
parent
aa0f0183fc
commit
023ba9f856
@ -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 = [] # 简历文件
|
||||||
# 获取当前文件所在目录的绝对路径
|
# 获取当前文件所在目录的绝对路径
|
||||||
|
@ -35,3 +35,4 @@ 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
31
crud/crud_find_column.py
Normal 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')
|
@ -375,7 +375,11 @@ 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 ['start_time', 'end_time']:
|
||||||
|
is_date = 1
|
||||||
|
continue
|
||||||
if key in ['interview_id', 'hr_id', 'interview_name', 'hr_name', 'department']:
|
if key in ['interview_id', 'hr_id', 'interview_name', 'hr_name', 'department']:
|
||||||
# 多个条件
|
# 多个条件
|
||||||
if ',' in value:
|
if ',' in value:
|
||||||
@ -422,6 +426,19 @@ class InterviewDo:
|
|||||||
else:
|
else:
|
||||||
whereStr += str(key) + ' = ' + "'" + value + "'" + ' '
|
whereStr += str(key) + ' = ' + "'" + value + "'" + ' '
|
||||||
continue
|
continue
|
||||||
|
# 有日期条件
|
||||||
|
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:
|
||||||
if whereStr:
|
if whereStr:
|
||||||
whereStr += 'and ' + str(key) + ' = ' + str(value) + ' '
|
whereStr += 'and ' + str(key) + ' = ' + str(value) + ' '
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user