123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
- from fastapi.responses import JSONResponse
- from common.security import valid_access_token
- from pydantic import BaseModel
- from database import get_db
- from sqlalchemy.orm import Session
- from typing import List
- from models import *
- from utils import *
- from utils.ry_system_util import *
- import json
- from common.db import db_user
- from sqlalchemy.sql import func
- from common.enc import mpfun, sys_dept_data
- from common.auth_user import *
- from common.db import db_czrz
- import traceback
- router = APIRouter()
- @router.post('')
- async def notice_create(
- db: Session = Depends(get_db),
- user_id: int = Depends(valid_access_token),
- body = Depends(remove_xss_json)
- ):
- try:
- noticeTitle = body['noticeTitle']
- noticeType = body['noticeType']
- noticeContent = body['noticeContent']
- status = body['status']
- remark = body['remark']
- new_notice = SysNotice(
- notice_title = noticeTitle,
- notice_type = noticeType,
- notice_content = noticeContent,
- status = status,
- remark = remark,
- create_by = user_id,
- update_by = user_id,
- create_dept = db_user.get_user_info(db, user_id).dept_id
- )
- db.add(new_notice)
- db.commit()
- db.refresh(new_notice)
- db.commit()
- return {"code": 200, "msg": "创建成功", "data": None}
- except Exception as e:
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
- @router.get('/list')
- async def get_list(
- request: Request,
- noticeTitle: str = Query(None, max_length=100),
- noticeType: str = Query(None, max_length=100),
- pageNum: int = Query(1, gt=0, description="页码"),
- pageSize: int = Query(10, gt=0, le=100, description="每页大小"),
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token),
- ):
- query = db.query(SysNotice)
- query = query.filter(SysNotice.status == '0')
- if noticeTitle:
- query = query.filter(SysNotice.notice_title.like(f'%{noticeTitle}%'))
- if noticeType:
- query = query.filter(SysNotice.notice_type == noticeType)
-
- total_count = query.count()
- offset = (pageNum - 1) * pageSize
- query = query.order_by(SysNotice.create_time.desc()).offset(offset).limit(pageSize)
- notice_list = query.all()
- # 将模型实例转换为字典
- czrz_list_dict = [{
- "noticeId": item.notice_id,
- "noticeTitle": item.notice_title,
- "noticeType": item.notice_type,
- "noticeContent": item.notice_content,
- "status": item.status,
- "createTime": item.create_time.strftime('%Y-%m-%d %H:%M:%S') if item.create_time else '',
- "createByName": db_user.get_nick_name_by_id(db, item.create_by),
- } for item in notice_list]
- return {
- "code": 200,
- "msg": "操作成功",
- "rows": czrz_list_dict,
- 'pages': (total_count + pageSize - 1) // pageSize,
- 'total': total_count,
- "currentPage": pageNum,
- "pageSize": pageSize,
- }
- @router.delete('/{notice_id}')
- async def delete(
- notice_id: int,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- query = db.query(SysNotice)
- query = query.filter(SysNotice.notice_id == notice_id)
- post_to_delete = query.first()
- if not post_to_delete:
- detail = "公告不存在"
- raise HTTPException(status_code=404, detail="公告不存在")
- db.delete(post_to_delete)
- db.commit()
- return {
- "code": 200,
- "msg": "公告删除成功"
- }
- except Exception as e:
- db.rollback()
- if str(e)=='':
- e = detail
- raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
- @router.get('/{notice_id}')
- async def get_notice_info( notice_id:int,
- db: Session = Depends(get_db),
- user_id: int = Depends(valid_access_token)):
- try:
- # 构建查询
- query = db.query(SysNotice)
- # 应用查询条件
- query = query.filter(SysNotice.notice_id==notice_id)
- notices = query.all()
- # 将查询结果转换为列表形式的字典
- notice_list = notice_list_to_dict(notices, db)
- # 返回结果
- return {
- "code": 200,
- "msg": "成功",
- "data": notice_list[0]
- }
- except Exception as e:
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
-
- @router.put('')
- async def postupdate(
- db: Session = Depends(get_db),
- user_id: int = Depends(valid_access_token),
- body = Depends(remove_xss_json)
- ):
- try:
- noticeId = body['noticeId']
- query = db.query(SysNotice)
- query = query.filter(SysNotice.notice_id == noticeId)
- notice = query.first()
- if not notice :
- return JSONResponse(status_code=410, content={
- 'code': 410,
- 'msg': f'公告{noticeId}不存在'
- })
- notice.notice_title = body['noticeTitle']
- notice.notice_content = body['noticeContent']
- notice.notice_type = body['noticeType']
- notice.status = body['status']
- notice.remark = body['remark']
- notice.update_by = user_id
- notice.update_time = datetime.now()
- db.commit()
- return {"code": 200, "msg": "更新成功", "data": None}
- except Exception as e:
- traceback.print_exc()
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|