__init__.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
  4. from fastapi.responses import JSONResponse
  5. from common.security import valid_access_token
  6. from pydantic import BaseModel
  7. from database import get_db
  8. from sqlalchemy.orm import Session
  9. from typing import List
  10. from models import *
  11. from utils import *
  12. from utils.ry_system_util import *
  13. import json
  14. from common.db import db_user
  15. from sqlalchemy.sql import func
  16. from common.enc import mpfun, sys_dept_data
  17. from common.auth_user import *
  18. from common.db import db_czrz
  19. import traceback
  20. router = APIRouter()
  21. @router.post('')
  22. async def notice_create(
  23. db: Session = Depends(get_db),
  24. user_id: int = Depends(valid_access_token),
  25. body = Depends(remove_xss_json)
  26. ):
  27. try:
  28. noticeTitle = body['noticeTitle']
  29. noticeType = body['noticeType']
  30. noticeContent = body['noticeContent']
  31. status = body['status']
  32. remark = body['remark']
  33. new_notice = SysNotice(
  34. notice_title = noticeTitle,
  35. notice_type = noticeType,
  36. notice_content = noticeContent,
  37. status = status,
  38. remark = remark,
  39. create_by = user_id,
  40. update_by = user_id,
  41. create_dept = db_user.get_user_info(db, user_id).dept_id
  42. )
  43. db.add(new_notice)
  44. db.commit()
  45. db.refresh(new_notice)
  46. db.commit()
  47. return {"code": 200, "msg": "创建成功", "data": None}
  48. except Exception as e:
  49. traceback.print_exc()
  50. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  51. @router.get('/list')
  52. async def get_list(
  53. request: Request,
  54. noticeTitle: str = Query(None, max_length=100),
  55. noticeType: str = Query(None, max_length=100),
  56. pageNum: int = Query(1, gt=0, description="页码"),
  57. pageSize: int = Query(10, gt=0, le=100, description="每页大小"),
  58. db: Session = Depends(get_db),
  59. user_id = Depends(valid_access_token),
  60. ):
  61. query = db.query(SysNotice)
  62. query = query.filter(SysNotice.status == '0')
  63. if noticeTitle:
  64. query = query.filter(SysNotice.notice_title.like(f'%{noticeTitle}%'))
  65. if noticeType:
  66. query = query.filter(SysNotice.notice_type == noticeType)
  67. total_count = query.count()
  68. offset = (pageNum - 1) * pageSize
  69. query = query.order_by(SysNotice.create_time.desc()).offset(offset).limit(pageSize)
  70. notice_list = query.all()
  71. # 将模型实例转换为字典
  72. czrz_list_dict = [{
  73. "noticeId": item.notice_id,
  74. "noticeTitle": item.notice_title,
  75. "noticeType": item.notice_type,
  76. "noticeContent": item.notice_content,
  77. "status": item.status,
  78. "createTime": item.create_time.strftime('%Y-%m-%d %H:%M:%S') if item.create_time else '',
  79. "createByName": db_user.get_nick_name_by_id(db, item.create_by),
  80. } for item in notice_list]
  81. return {
  82. "code": 200,
  83. "msg": "操作成功",
  84. "rows": czrz_list_dict,
  85. 'pages': (total_count + pageSize - 1) // pageSize,
  86. 'total': total_count,
  87. "currentPage": pageNum,
  88. "pageSize": pageSize,
  89. }
  90. @router.delete('/{notice_id}')
  91. async def delete(
  92. notice_id: int,
  93. db: Session = Depends(get_db),
  94. body = Depends(remove_xss_json),
  95. user_id = Depends(valid_access_token)
  96. ):
  97. try:
  98. query = db.query(SysNotice)
  99. query = query.filter(SysNotice.notice_id == notice_id)
  100. post_to_delete = query.first()
  101. if not post_to_delete:
  102. detail = "公告不存在"
  103. raise HTTPException(status_code=404, detail="公告不存在")
  104. db.delete(post_to_delete)
  105. db.commit()
  106. return {
  107. "code": 200,
  108. "msg": "公告删除成功"
  109. }
  110. except Exception as e:
  111. db.rollback()
  112. if str(e)=='':
  113. e = detail
  114. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
  115. @router.get('/{notice_id}')
  116. async def get_notice_info( notice_id:int,
  117. db: Session = Depends(get_db),
  118. user_id: int = Depends(valid_access_token)):
  119. try:
  120. # 构建查询
  121. query = db.query(SysNotice)
  122. # 应用查询条件
  123. query = query.filter(SysNotice.notice_id==notice_id)
  124. notices = query.all()
  125. # 将查询结果转换为列表形式的字典
  126. notice_list = notice_list_to_dict(notices, db)
  127. # 返回结果
  128. return {
  129. "code": 200,
  130. "msg": "成功",
  131. "data": notice_list[0]
  132. }
  133. except Exception as e:
  134. traceback.print_exc()
  135. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  136. @router.put('')
  137. async def postupdate(
  138. db: Session = Depends(get_db),
  139. user_id: int = Depends(valid_access_token),
  140. body = Depends(remove_xss_json)
  141. ):
  142. try:
  143. noticeId = body['noticeId']
  144. query = db.query(SysNotice)
  145. query = query.filter(SysNotice.notice_id == noticeId)
  146. notice = query.first()
  147. if not notice :
  148. return JSONResponse(status_code=410, content={
  149. 'code': 410,
  150. 'msg': f'公告{noticeId}不存在'
  151. })
  152. notice.notice_title = body['noticeTitle']
  153. notice.notice_content = body['noticeContent']
  154. notice.notice_type = body['noticeType']
  155. notice.status = body['status']
  156. notice.remark = body['remark']
  157. notice.update_by = user_id
  158. notice.update_time = datetime.now()
  159. db.commit()
  160. return {"code": 200, "msg": "更新成功", "data": None}
  161. except Exception as e:
  162. traceback.print_exc()
  163. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")