2023-03-01 16:04:43 +08:00
|
|
|
from datetime import datetime
|
|
|
|
|
2023-07-01 17:50:54 +08:00
|
|
|
from Models.DepartmentModel import Department
|
|
|
|
from Schemas.UserSchemas import TokenData
|
2023-04-23 17:24:36 +08:00
|
|
|
from sqlalchemy import func, or_, and_
|
2023-03-01 16:04:43 +08:00
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from Models.DailyModel import Daily
|
2023-07-01 13:49:32 +08:00
|
|
|
from Schemas.DailySchemas import DailyQuery, DailyTypeEnum
|
2023-03-01 16:04:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
def daily_get(db: Session, item_id):
|
|
|
|
return db.query(Daily).filter_by(id=item_id).first()
|
|
|
|
|
|
|
|
|
|
|
|
def daily_add(db: Session, data):
|
|
|
|
daily = Daily(**data)
|
|
|
|
db.add(daily)
|
|
|
|
db.commit()
|
|
|
|
db.refresh(daily)
|
|
|
|
return daily
|
|
|
|
|
|
|
|
|
|
|
|
def daily_change(db: Session, item_id, data):
|
|
|
|
db.query(Daily).filter_by(id=item_id).update(data)
|
2023-03-07 18:08:42 +08:00
|
|
|
db.commit()
|
2023-04-04 14:28:53 +08:00
|
|
|
item = db.query(Daily).filter_by(id=item_id).first()
|
2023-03-17 15:30:40 +08:00
|
|
|
return item
|
2023-03-07 18:08:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
def daily_delete(db: Session, item_id):
|
|
|
|
db.query(Daily).filter_by(id=item_id).delete()
|
|
|
|
db.commit()
|
2023-03-01 16:04:43 +08:00
|
|
|
|
|
|
|
|
2023-07-01 17:50:54 +08:00
|
|
|
def daily_query(db: Session, params: DailyQuery, token_data: TokenData) -> [int]:
|
2023-04-23 17:29:42 +08:00
|
|
|
print(params)
|
2023-07-01 17:50:54 +08:00
|
|
|
department = token_data.department
|
2023-07-03 11:04:15 +08:00
|
|
|
auth = token_data.auth_data or ''
|
2023-03-01 16:04:43 +08:00
|
|
|
params_dict = params.dict()
|
|
|
|
query = db.query(Daily)
|
|
|
|
db_model = Daily
|
2023-04-23 17:24:36 +08:00
|
|
|
if auth:
|
|
|
|
auth_list = auth.split(',')
|
2023-07-01 13:49:32 +08:00
|
|
|
# 有日报管理权限的可以查看所有 10
|
|
|
|
# 所有部门动态查看 2
|
2023-07-01 17:50:54 +08:00
|
|
|
# 动态权限设为了董监高的话,只有自己和董监高可以看
|
2023-07-03 17:04:39 +08:00
|
|
|
if '10' not in auth_list and '2' not in auth_list:
|
2023-04-23 17:24:36 +08:00
|
|
|
has_auth = [int(item) for item in auth_list if item in ['17', '18']]
|
2023-07-01 17:50:54 +08:00
|
|
|
departments = [int(item) for item in department.split(",")]
|
2023-07-03 17:04:39 +08:00
|
|
|
# 筛选能有权限看的日报
|
|
|
|
query = query.filter(
|
|
|
|
or_(*[func.find_in_set(str(item), Daily.required_auth) for item in has_auth],
|
2023-07-06 00:52:27 +08:00
|
|
|
Daily.required_auth == None, Daily.required_auth == '',Daily.required_auth == '-1',
|
2023-07-03 17:04:39 +08:00
|
|
|
Daily.fill_user == token_data.email
|
|
|
|
))
|
|
|
|
if params.type == DailyTypeEnum.部门子公司日报:
|
|
|
|
业务部门 = []
|
|
|
|
# 如果是只能看自己日报的,在业务部门内只能看自己日报
|
|
|
|
if '20' in auth_list:
|
|
|
|
for dp in db.query(Department).filter(Department.id.in_(departments)):
|
|
|
|
if dp.type.value == '业务部门':
|
|
|
|
业务部门.append(dp.id)
|
2023-07-01 17:50:54 +08:00
|
|
|
|
2023-07-03 17:04:39 +08:00
|
|
|
query_department = [d for d in departments if d not in 业务部门]
|
|
|
|
if query_department:
|
2023-07-03 21:04:29 +08:00
|
|
|
query = query.filter(or_(Daily.department.in_(query_department),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 == None, Daily.required_auth == '',
|
|
|
|
# Daily.fill_user == token_data.email
|
|
|
|
# )
|
|
|
|
# )
|
2023-07-03 17:04:39 +08:00
|
|
|
else:
|
|
|
|
query = query.filter(Daily.fill_user == token_data.email)
|
|
|
|
# 能看到自己动态 ,但看不到同部门的保密日报
|
2023-07-01 17:50:54 +08:00
|
|
|
|
2023-03-01 16:04:43 +08:00
|
|
|
for key, value in params_dict.items():
|
2023-07-02 00:56:42 +08:00
|
|
|
if value in ['', None]:
|
|
|
|
continue
|
2023-04-04 14:28:53 +08:00
|
|
|
if key == 'department' and type(value) == list:
|
|
|
|
query = query.filter(Daily.department.in_(value))
|
|
|
|
continue
|
2023-07-01 17:50:54 +08:00
|
|
|
# if key == 'required_auth':
|
|
|
|
# if not value:
|
|
|
|
# continue
|
|
|
|
# if auth:
|
|
|
|
# auth_list = auth.split(',')
|
|
|
|
# # 有日报管理权限的可以查看所有
|
|
|
|
# if '10' in auth_list:
|
|
|
|
# continue
|
|
|
|
# else:
|
|
|
|
# has_auth = [int(item) for item in auth_list if item in ['17', '18']]
|
|
|
|
# query = query.filter(or_(*[func.find_in_set(str(item), Daily.required_auth) for item in has_auth],
|
|
|
|
# Daily.required_auth._in['', None]))
|
|
|
|
# continue
|
|
|
|
# print(key, value)
|
2023-03-01 16:04:43 +08:00
|
|
|
if key not in ['page', 'page_size'] and value is not None:
|
|
|
|
# 在存储的数组值内查询 如存的 1,2,3,4 查询时则使用的 [1,2]这样的数据来查
|
2023-03-06 15:06:22 +08:00
|
|
|
# if key in ["xx"]:
|
|
|
|
# for item in value:
|
|
|
|
# query = query.filter(func.find_in_set(str(item), getattr(db_model, key)))
|
|
|
|
# continue
|
|
|
|
if type(value) == str:
|
2023-03-01 16:04:43 +08:00
|
|
|
query = query.filter(getattr(db_model, key).like(f'%{value}%'))
|
2023-03-02 15:19:14 +08:00
|
|
|
elif type(value) in [int, float, bool]:
|
2023-03-01 16:04:43 +08:00
|
|
|
query = query.filter_by(**{key: value})
|
|
|
|
# 日期范围查询
|
2023-03-07 18:08:42 +08:00
|
|
|
elif type(value) in [list, tuple] and getattr(db_model, key).type.python_type == datetime:
|
2023-03-07 10:13:13 +08:00
|
|
|
if value:
|
|
|
|
if value[0] is not None:
|
2023-03-07 18:08:42 +08:00
|
|
|
query = query.filter(getattr(db_model, key) >= datetime.fromtimestamp(value[0] / 1000))
|
2023-03-20 16:23:50 +08:00
|
|
|
print(datetime.fromtimestamp(value[0] / 1000))
|
2023-03-07 10:13:13 +08:00
|
|
|
if value[1] is not None:
|
2023-06-29 17:24:38 +08:00
|
|
|
query = query.filter(getattr(db_model, key) < datetime.fromtimestamp(value[1] / 1000))
|
2023-04-04 14:28:53 +08:00
|
|
|
print(datetime.fromtimestamp(value[1] / 1000))
|
2023-03-02 15:19:14 +08:00
|
|
|
else:
|
|
|
|
query = query.filter(getattr(db_model, key) == value)
|
2023-07-01 17:50:54 +08:00
|
|
|
|
2023-03-07 18:08:42 +08:00
|
|
|
query = query.order_by(Daily.daily_time.desc())
|
2023-03-01 16:04:43 +08:00
|
|
|
count = query.count()
|
|
|
|
page = None
|
|
|
|
page_size = None
|
2023-03-07 10:13:13 +08:00
|
|
|
|
2023-03-01 16:04:43 +08:00
|
|
|
if 'page' in params_dict:
|
|
|
|
page = params_dict['page']
|
|
|
|
if 'page_size' in params_dict:
|
|
|
|
page_size = params_dict['page_size']
|
|
|
|
if page is not None and page_size is not None:
|
|
|
|
query = query.offset((page - 1) * page_size).limit(page_size).all()
|
2023-03-07 18:08:42 +08:00
|
|
|
# print(query,"daily_query")
|
2023-03-01 16:04:43 +08:00
|
|
|
return count, query
|