敏感词 部门排序

This commit is contained in:
Administrator 2023-07-06 00:52:27 +08:00
parent 614b3c8e4a
commit 332cd569b9
8 changed files with 1600 additions and 7 deletions

File diff suppressed because one or more lines are too long

View File

@ -50,7 +50,7 @@ def daily_query(db: Session, params: DailyQuery, token_data: TokenData) -> [int]
# 筛选能有权限看的日报 # 筛选能有权限看的日报
query = query.filter( query = query.filter(
or_(*[func.find_in_set(str(item), Daily.required_auth) for item in has_auth], or_(*[func.find_in_set(str(item), Daily.required_auth) for item in has_auth],
Daily.required_auth == None, Daily.required_auth == '', Daily.required_auth == None, Daily.required_auth == '',Daily.required_auth == '-1',
Daily.fill_user == token_data.email Daily.fill_user == token_data.email
)) ))
if params.type == DailyTypeEnum.部门子公司日报: if params.type == DailyTypeEnum.部门子公司日报:

View File

@ -109,7 +109,7 @@ def get_user_by_department_type(db: Session, department_type: str):
def get_department_list(db: Session): def get_department_list(db: Session):
return db.query(Department).all() return db.query(Department).order_by(Department.index).all()
def get_department_config(db: Session): def get_department_config(db: Session):

View File

@ -12,6 +12,7 @@ class Department(Base):
auth_data = Column(Text, comment="部门权限数据") auth_data = Column(Text, comment="部门权限数据")
type = Column(Enum(DepartmentTypeEnum, values_callable=lambda x: [e.value for e in x]), nullable=False) type = Column(Enum(DepartmentTypeEnum, values_callable=lambda x: [e.value for e in x]), nullable=False)
sub_type = Column(String(255), comment="二级分类") sub_type = Column(String(255), comment="二级分类")
index = Column(Integer, comment="索引")
def to_dict(self): def to_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns} return {c.name: getattr(self, c.name) for c in self.__table__.columns}

View File

@ -125,17 +125,17 @@ class DailyNotice:
*[func.find_in_set(str(d_id), User.department) for d_id in *[func.find_in_set(str(d_id), User.department) for d_id in
can_watch_departments])): can_watch_departments])):
emails.append(user.email) emails.append(user.email)
数字化部emails = [item.email for item in db.query(User).filter(func.find_in_set('17', User.department))] # 数字化部emails = [item.email for item in db.query(User).filter(func.find_in_set('17', User.department))]
# task_args = [["", email, daily_pdf_upload_notice] for email in emails] # task_args = [["", email, daily_pdf_upload_notice] for email in emails]
# 测试 # 测试
task_args = [["每日运行日报已上传", email, daily_pdf_upload_notice] for email in test_email] task_args = [["每日运行日报已上传", email, daily_pdf_upload_notice] for email in emails]
print(task_args) print(task_args)
self.email_send_thread(task_args) self.email_send_thread(task_args)
def start_timer_to_notice_daily_fill(self): def start_timer_to_notice_daily_fill(self):
print('邮件发送服务已启动')
sended = False sended = False
while True: while True:
time.sleep(15) time.sleep(15)

View File

@ -55,9 +55,34 @@ def daily_get(req: DailySchemas.DailyGetReq, db: Session = Depends(get_db),
return DailySchemas.DailyGetRes(**item.to_dict(), comments=comments) return DailySchemas.DailyGetRes(**item.to_dict(), comments=comments)
json_filepath = os.path.join(os.getcwd(), 'Config', 'sensitive_word.json')
# 将列表保存为 json 文件
with open(json_filepath, 'r', encoding='utf-8') as json_file:
words = json.load(json_file)
class SensitiveWordChecker:
def __init__(self, sensitive_words):
self.automaton = Automaton()
for idx, word in enumerate(sensitive_words):
self.automaton.add_word(word, (idx, word))
self.automaton.make_automaton()
def check(self, text):
return {item for _, item in self.automaton.iter(text)}
checker = SensitiveWordChecker(words)
@router.post("/daily_add", response_model=DailySchemas.DailyAddRes, summary="添加日报") @router.post("/daily_add", response_model=DailySchemas.DailyAddRes, summary="添加日报")
def daily_add(req: DailySchemas.DailyAddReq, db: Session = Depends(get_db), def daily_add(req: DailySchemas.DailyAddReq, db: Session = Depends(get_db),
token_data: TokenData = Depends(token_data_depend)): token_data: TokenData = Depends(token_data_depend)):
if req.content:
bad_words = [item[1] for item in checker.check(req.content)]
if bad_words:
raise HTTPException(detail=f"内容包含敏感词:{','.join(bad_words)}", status_code=305)
if req.fill_user != token_data.email: if req.fill_user != token_data.email:
raise HTTPException(detail="填报人与email不符", status_code=305) raise HTTPException(detail="填报人与email不符", status_code=305)
# 本部门填报权限 # 本部门填报权限

2
email_send_server.py Normal file
View File

@ -0,0 +1,2 @@
from Mods.Notice.Utils import daily_notice
daily_notice.start_timer_to_notice_daily_fill()

View File

@ -41,6 +41,6 @@ app.include_router(ModsRouter.router)
# 中间件 # 中间件
# app.exception_handler(Exception)(exception_handler) # app.exception_handler(Exception)(exception_handler)
# app.exception_handler(RequestValidationError)(validation_exception_handler) # app.exception_handler(RequestValidationError)(validation_exception_handler)
daily_notice.init() # daily_notice.init()
uvicorn.run(app=app, host="0.0.0.0", port=8006, log_config=uvicorn_log_config) uvicorn.run(app=app, host="0.0.0.0", port=8006, log_config=uvicorn_log_config)