修改 如果是只能看自己日报的,在业务部门内只能看自己日报

This commit is contained in:
Administrator 2023-07-01 17:50:54 +08:00
parent 0d6e8d96ae
commit a1aabeb081
4 changed files with 69 additions and 29 deletions

View File

@ -1,5 +1,7 @@
from datetime import datetime
from Models.DepartmentModel import Department
from Schemas.UserSchemas import TokenData
from sqlalchemy import func, or_, and_
from sqlalchemy.orm import Session
from Models.DailyModel import Daily
@ -30,8 +32,10 @@ def daily_delete(db: Session, item_id):
db.commit()
def daily_query(db: Session, params: DailyQuery, department: str, auth: str = None) -> [int]:
def daily_query(db: Session, params: DailyQuery, token_data: TokenData) -> [int]:
print(params)
department = token_data.department
auth = token_data.auth_data
params_dict = params.dict()
query = db.query(Daily)
db_model = Daily
@ -39,17 +43,37 @@ def daily_query(db: Session, params: DailyQuery, department: str, auth: str = No
auth_list = auth.split(',')
# 有日报管理权限的可以查看所有 10
# 所有部门动态查看 2
#
if '10' not in auth_list and '2' not in auth_list and params.type == DailyTypeEnum.动态:
# 动态权限设为了董监高的话,只有自己和董监高可以看
if '10' not in auth_list and '2' not in auth_list and params.type == DailyTypeEnum.部门子公司日报:
has_auth = [int(item) for item in auth_list if item in ['17', '18']]
departments = [int(item) for item in department.split(",")]
业务部门 = []
# 如果是只能看自己日报的,在业务部门内只能看自己日报
if '20' in auth_list:
for dp in db.query(Department).filter(Department.id.in_(departments)):
if dp.to_dict()['type'] == '业务部门':
业务部门.append(dp.id)
# query = query.filter(or_(*[func.find_in_set(str(item), Daily.required_auth) for item in has_auth],
# Daily.required_auth._in['', None]))
departments = [int(item) for item in department.split(",")]
query = query.filter(or_(Daily.department.in_(departments), and_(Daily.department.not_in(departments),
or_(*[func.find_in_set(str(item),
Daily.required_auth)
for item in has_auth],
not Daily.required_auth))))
# 能看到自己部门所有动态
# query = query.filter(or_(
# Daily.department.in_(departments),
# and_(Daily.department.not_in(departments),
# # 日报没有权限或者这个人拥有日报查阅所需的权限
# or_(*[func.find_in_set(str(item), Daily.required_auth) for item in has_auth],
# not Daily.required_auth)
# )))
# 能看到自己动态 ,但看不到同部门的保密日报
query = query.filter(or_(Daily.department.in_([departments for d in departments if d not in 业务部门]),
Daily.fill_user == token_data.email)).filter(
or_(*[func.find_in_set(str(item), Daily.required_auth) for item in has_auth],
Daily.required_auth.in_(['', None]),
)
)
for key, value in params_dict.items():
if key == 'department' and type(value) == list:
query = query.filter(Daily.department.in_(value))
@ -89,6 +113,7 @@ def daily_query(db: Session, params: DailyQuery, department: str, auth: str = No
print(datetime.fromtimestamp(value[1] / 1000))
else:
query = query.filter(getattr(db_model, key) == value)
query = query.order_by(Daily.daily_time.desc())
count = query.count()
page = None

View File

@ -94,7 +94,16 @@ def daily_query(req: DailySchemas.DailyQuery, db: Session = Depends(get_db),
# same_department = set([req.department]) < set([int(item) for item in token_data.department.split(',')])
# if same_department and not check_auth(token_data.auth_data, [3]):
# raise HTTPException(detail="没有本部门动态查看权限", status_code=305)
count, items = DailyCrud.daily_query(db, req, token_data.department, token_data.auth_data)
count, items = DailyCrud.daily_query(db, req, token_data)
# new_items=[]
# for item in items:
# try:
# new_items.append(DailySchemas.DailyInfo(**item.to_dict()))
# except Exception as e:
# raise e
# print(e)
# print(item)
# print('xxxxx',item.to_dict())
items = [DailySchemas.DailyInfo(**item.to_dict()) for item in items]
return DailySchemas.DailyQueryRes(count=count, items=items)
@ -153,6 +162,8 @@ def daily_export(req: QueryParams, db: Session = Depends(get_db)):
@router.post("/daily_export_to_pdf", summary="每日运行日报导出")
def daily_export_to_pdf(req: DailySchemas.DailyExportToPdfReq, db: Session = Depends(get_db)):
req.day = req.day + datetime.timedelta(days=1)
print(req)
query = db.query(Daily).filter(cast(Daily.daily_time, DATE) == cast(req.day, DATE))
query = query.order_by(Daily.daily_time.desc())
department_name_dic = {item.id: item.name for item in db.query(Department).all()}
@ -194,6 +205,8 @@ def daily_export_to_pdf(req: DailySchemas.DailyExportToPdfReq, db: Session = Dep
}
def format_conversion(string):
if not string:
return ""
parts = string.split(";")
formatted_parts = []
for part in parts:
@ -304,8 +317,9 @@ def daily_export_to_pdf(req: DailySchemas.DailyExportToPdfReq, db: Session = Dep
doc_path = os.path.join(os.getcwd(), 'Config', 'daily_out_template.docx')
doc = DocxTemplate(doc_path)
doc.render(merged_dict)
today = datetime.date.today()
date_string = today.strftime('%Y%m%d')
# today = datetime.date.today()
date_string = req.day.strftime('%Y%m%d')
file_path = os.path.join(os.getcwd(), 'static_data', 'daily_out_temp', '运行日报{}.docx'.format(date_string))
doc.save(file_path)

View File

@ -36,7 +36,7 @@ class DepartmentInfo(BaseModel):
belong: Optional[int]
name: str
type: Optional[DepartmentTypeEnum]
sub_type:Optional[str]
sub_type: Optional[str]
class PostInfo(BaseModel):
@ -84,8 +84,8 @@ class UserInfo(BaseModel):
post: str
phone: Optional[str]
manage_departments: Optional[str]
department: str
registered: bool
department: Optional[str]
registered: Optional[bool]
class UserFullInfo(BaseModel):

View File

@ -10,6 +10,7 @@ user = "root"
password = "123456"
host = "127.0.0.1"
db = 'daily'
db = 'daily_test'
# host = "139.9.249.34"
# post = "3306"