diff --git a/Crud/DailyCrud.py b/Crud/DailyCrud.py index 061d9c7..49c0521 100644 --- a/Crud/DailyCrud.py +++ b/Crud/DailyCrud.py @@ -35,7 +35,7 @@ def daily_delete(db: Session, item_id): def daily_query(db: Session, params: DailyQuery, token_data: TokenData) -> [int]: print(params) department = token_data.department - auth = token_data.auth_data + auth = token_data.auth_data or '' params_dict = params.dict() query = db.query(Daily) db_model = Daily @@ -44,43 +44,38 @@ def daily_query(db: Session, params: DailyQuery, token_data: TokenData) -> [int] # 有日报管理权限的可以查看所有 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: has_auth = [int(item) for item in auth_list if item in ['17', '18']] departments = [int(item) for item in department.split(",")] + # 筛选能有权限看的日报 + query = query.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 + )) + 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) - 业务部门 = [] - # 如果是只能看自己日报的,在业务部门内只能看自己日报 - if '20' in auth_list: - for dp in db.query(Department).filter(Department.id.in_(departments)): - if dp.type.value == '业务部门': - 业务部门.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])) - - # 能看到自己部门所有动态 - # 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_department = [d for d in departments if d not in 业务部门] - if query_department: - 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 == '' - ) - ) - else: - query = query.filter(Daily.fill_user == token_data.email) - # 能看到自己动态 ,但看不到同部门的保密日报 + query_department = [d for d in departments if d not in 业务部门] + if query_department: + query = query.filter(or_(Daily.department.in_(query_department), + )).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 + ) + ) + else: + query = query.filter(Daily.fill_user == token_data.email) + # 能看到自己动态 ,但看不到同部门的保密日报 for key, value in params_dict.items(): if value in ['', None]: - print(key, 'xxxxxxxxxxxx') continue if key == 'department' and type(value) == list: query = query.filter(Daily.department.in_(value)) diff --git a/Mods/Notice/Utils.py b/Mods/Notice/Utils.py index 08fbd7e..2045cb9 100644 --- a/Mods/Notice/Utils.py +++ b/Mods/Notice/Utils.py @@ -34,15 +34,15 @@ comment_notice_send = """您于【{daily_time}】发布在【{daily_type}】的 发布正文: {daily_content} """ -daily_fill_send = """您好 -请于今日下班前登录微信小程序【FECR业务助手】填报当日您的工作内容。 +daily_fill_send = """您好: + 请于今日下班前登录微信小程序【FECR业务助手】填报您的工作内容。 具体填报步骤: 1. 使用手机号或公司邮箱登录【FECR业务助手】。 - 2. 选择【填报-部门日报】进行填报。 + 2. 在填报页面中选择您的报送类型,进入相关填报页面进行操作。 - 若在使用过程中出现问题,请联系小程序管理员王思川(wangsichuan@fecr.com.cn)帮助您处理。 - 祝你工作顺利。""" + 若在使用过程中出现问题,请联系陈肖珏(chenxiaojue@fecr.com.cn)帮助您处理。 + """ daily_pdf_upload_notice = """您好 今日的运行日报已上传,请于微信小程序【FECR业务助手】->【运行日报】查看 @@ -97,6 +97,7 @@ class DailyNotice: def send_email(self, title, email, content): try: + print('邮件', email) return self.email_send_func(title, email, content) except Exception as e: print('邮件发送错误', e) @@ -137,14 +138,16 @@ class DailyNotice: sended = False while True: - time.sleep(60) - if is_workday() and datetime.now().hour == 15 and datetime.now().minute < 5 and not sended: + time.sleep(15) + now = datetime.now() + if is_workday() and now.hour == 15 and (35<= now.minute < 35 + 3) and not sended: sended = True try: user_list = get_user_not_fill_daily() args_list = [['日报填报提醒', user.email, daily_fill_send] for user in user_list] - # self.email_send_thread(args_list) - send_email('日报填报提醒', "fecribd@fecr.com.cn", daily_fill_send) + # args_list = [['日报填报提醒', user.email, daily_fill_send] for user in user_list if user.name in ['王思川','伍春全','李凯','彭森','徐聿成','陈世杰']] + self.email_send_thread(args_list) + # send_email('日报填报提醒', "fecribd@fecr.com.cn", daily_fill_send) except Exception as e: print(e, 'start_timer_to_notice_daily_fill错误') @@ -154,6 +157,7 @@ class DailyNotice: def email_send_thread(self, args_list, sem=5): with ThreadPoolExecutor(max_workers=sem) as executor: for args in args_list: + time.sleep(1) executor.submit(self.send_email, *args) def init(self): diff --git a/Router/FileRouter.py b/Router/FileRouter.py index e4251bb..52b1c9f 100644 --- a/Router/FileRouter.py +++ b/Router/FileRouter.py @@ -55,6 +55,7 @@ def file_upload(name: str = Header(None), file: UploadFile = File(...), mime_type=mime_type, user_id=token_data.email, common_type=common_type, file_url=file_url)) + print(user_file.to_dict(),'文件上传成功') return user_file.to_dict() diff --git a/Utils/SqlAlchemyUtils.py b/Utils/SqlAlchemyUtils.py index 1d45388..9b5e9f6 100644 --- a/Utils/SqlAlchemyUtils.py +++ b/Utils/SqlAlchemyUtils.py @@ -6,17 +6,17 @@ from typing import Literal, List, Any, Optional Base = declarative_base() -# user = "root" -# password = "123456" -# host = "127.0.0.1" -# db = 'daily' +user = "root" +password = "123456" +host = "127.0.0.1" +db = 'daily' # db = 'daily_test' -host = "139.9.249.34" -post = "3306" -user = "fecr" -password = "fecr1988.wcq" -db = "daily_test" +# host = "139.9.249.34" +# post = "3306" +# user = "fecr" +# password = "fecr1988.wcq" +# db = "daily_test" def get_engine(): engine = create_engine( diff --git a/main.py b/main.py index a20e5a9..c2e94b6 100644 --- a/main.py +++ b/main.py @@ -8,10 +8,11 @@ from Config.log import uvicorn_log_config from Mods.Notice.Utils import daily_notice from Router import DailyRouter, UserRouter, AuthRouter, FileRouter from Utils.MiddlewareUtils import exception_handler, validation_exception_handler +from Utils.PrintUtils import hook_print from Utils.SqlAlchemyUtils import init_database, get_db_i from fastapi.staticfiles import StaticFiles from Mods import Router as ModsRouter - +hook_print() init_database() app = FastAPI( title="日报小程序",