通用报表以及报表参数设置
This commit is contained in:
parent
aa0f0183fc
commit
023ba9f856
@ -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',
|
||||
|
@ -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
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,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:
|
||||
|
Loading…
Reference in New Issue
Block a user