daily/Crud/DailyCrud.py

105 lines
4.6 KiB
Python
Raw Normal View History

2023-03-01 16:04:43 +08:00
from datetime import datetime
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-04-23 17:24:36 +08:00
def daily_query(db: Session, params: DailyQuery, department: str, auth: str = None) -> [int]:
2023-04-23 17:29:42 +08:00
print(params)
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
#
if '10' not in auth_list and '2' not in auth_list and params.type == DailyTypeEnum.动态:
2023-04-23 17:24:36 +08:00
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]))
departments = [int(item) for item in department.split(",")]
2023-07-01 13:49:32 +08:00
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))))
2023-03-01 16:04:43 +08:00
for key, value in params_dict.items():
2023-04-04 14:28:53 +08:00
if key == 'department' and type(value) == list:
query = query.filter(Daily.department.in_(value))
continue
2023-04-23 17:24:36 +08:00
# if key == 'required_auth':
2023-06-30 18:41:45 +08:00
# if not value:
# continue
2023-04-23 17:24:36 +08:00
# 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
2023-03-09 16:33:39 +08:00
# 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))
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-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