__init__.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
  4. from database import get_db
  5. from sqlalchemy.orm import Session
  6. from sqlalchemy import not_
  7. from fastapi.responses import JSONResponse
  8. from models import *
  9. from utils import *
  10. from utils.ry_system_util import *
  11. from common.security import valid_access_token
  12. from common.db import db_user
  13. import traceback
  14. router = APIRouter()
  15. @router.post('')
  16. async def postcreate(
  17. db: Session = Depends(get_db),
  18. user_id: int = Depends(valid_access_token),
  19. body = Depends(remove_xss_json)
  20. ):
  21. try:
  22. deptId = body['deptId']
  23. postCategory = body['postCategory']
  24. postCode = body['postCode']
  25. postName = body['postName']
  26. postSort = body['postSort']
  27. status = body['status']
  28. remark = body['remark']
  29. new_post = SysPost(
  30. dept_id=deptId,
  31. post_category=postCategory,
  32. post_code=postCode,
  33. post_name=postName,
  34. post_sort=postSort,
  35. status=status,
  36. remark=remark,
  37. create_by=user_id,
  38. create_dept=0
  39. )
  40. db.add(new_post)
  41. db.commit()
  42. db.refresh(new_post)
  43. db.commit()
  44. return {"code": 200, "msg": "创建成功", "data": None}
  45. except Exception as e:
  46. traceback.print_exc()
  47. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  48. @router.get('/list')
  49. async def get_list(
  50. request: Request,
  51. belongDeptId: str = Query(None, max_length=100),
  52. postCode: str = Query(None, max_length=100),
  53. postName:str = Query(None, max_length=100),
  54. postCategory:str = Query(None, max_length=100),
  55. deptId:str = Query(None, max_length=100),
  56. status: str = Query(None, max_length=100),
  57. db: Session = Depends(get_db),
  58. body = Depends(remove_xss_json),
  59. user_id = Depends(valid_access_token)
  60. ):
  61. query = db.query(SysPost)
  62. if belongDeptId:
  63. query = query.filter(SysPost.dept_id == int(belongDeptId))
  64. if deptId:
  65. query = query.filter(SysPost.dept_id == int(deptId))
  66. if postCode:
  67. query = query.filter(SysPost.post_code.like(f'%{postCode}%'))
  68. if postName:
  69. query = query.filter(SysPost.post_name.like(f'%{postName}%'))
  70. if postCategory:
  71. query = query.filter(SysPost.post_category.like(f'%{postCategory}%'))
  72. if status:
  73. query = query.filter(SysPost.status.like(f'%{status}%'))
  74. def get_det_name(dept_id):
  75. dept_info = dept_id_get_dept_info(db, dept_id)
  76. return dept_info.dept_name if dept_info is not None else ''
  77. post_list = query.all()
  78. # 将模型实例转换为字典
  79. dept_list_dict = [{
  80. "postId": post.post_id,
  81. "postName": post.post_name,
  82. "postCode": post.post_code,
  83. "postCategory": post.post_category,
  84. "postSort": post.post_sort,
  85. "deptId": post.dept_id,
  86. "deptName": get_det_name(post.dept_id),
  87. "createDept": post.create_dept,
  88. "createBy": post.create_by,
  89. "status": post.status,
  90. "remark": post.remark,
  91. "createTime": post.create_time.strftime('%Y-%m-%d %H:%M:%S') if post.create_time else '',
  92. } for post in post_list]
  93. return {
  94. "code": 200,
  95. "rows": dept_list_dict,
  96. "msg": "操作成功"
  97. }
  98. @router.get('/optionselect')
  99. async def get_optionselect(
  100. deptId: int = Query(0),
  101. db: Session = Depends(get_db),
  102. ):
  103. try:
  104. # 构建查询
  105. query = db.query(SysPost)
  106. query = query.filter(SysPost.status == 0)
  107. # 计算总记录数
  108. posts = query.all()
  109. # 转换为字典
  110. posts = dept_id_get_dept_post(db, deptId)
  111. # 构建返回结果
  112. result = {
  113. "data": posts,
  114. "code": 200,
  115. "msg": "查询成功"
  116. }
  117. return result
  118. except Exception as e:
  119. # 处理异常
  120. raise HTTPException(status_code=500, detail=str(e))
  121. @router.put('')
  122. async def postupdate(
  123. db: Session = Depends(get_db),
  124. user_id: int = Depends(valid_access_token),
  125. body = Depends(remove_xss_json)
  126. ):
  127. try:
  128. postId = body['postId']
  129. query = db.query(SysPost)
  130. query = query.filter(SysPost.post_id == postId)
  131. post = query.first()
  132. if not post :
  133. return JSONResponse(status_code=410, content={
  134. 'code': 410,
  135. 'msg': f'岗位{postId}不存在'
  136. })
  137. post.dept_id = body['deptId']
  138. post.post_category = body['postCategory']
  139. post.post_code = body['postCode']
  140. post.post_name = body['postName']
  141. post.post_sort = body['postSort']
  142. post.status = body['status']
  143. post.remark = body['remark']
  144. db.commit()
  145. return {"code": 200, "msg": "更新成功", "data": None}
  146. except Exception as e:
  147. traceback.print_exc()
  148. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  149. @router.get('/{postId}')
  150. async def postId( postId:int,
  151. db: Session = Depends(get_db),
  152. user_id: int = Depends(valid_access_token)):
  153. try:
  154. # 构建查询
  155. query = db.query(SysPost)
  156. # 应用查询条件
  157. query = query.filter(SysPost.post_id==postId)
  158. posts = query.all()
  159. # 将查询结果转换为列表形式的字典
  160. post_list = post_list_to_dict(posts, db)
  161. # 返回结果
  162. return {
  163. "code": 200,
  164. "msg": "成功",
  165. "data": post_list[0]
  166. }
  167. except Exception as e:
  168. traceback.print_exc()
  169. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  170. @router.delete('/{post_id}')
  171. async def delete(
  172. post_id: int,
  173. db: Session = Depends(get_db),
  174. body = Depends(remove_xss_json),
  175. user_id = Depends(valid_access_token)
  176. ):
  177. try:
  178. query = db.query(SysPost)
  179. query = query.filter(SysPost.post_id == post_id)
  180. post_to_delete = query.first()
  181. if not post_to_delete:
  182. detail = "岗位不存在"
  183. raise HTTPException(status_code=404, detail="岗位不存在")
  184. db.delete(post_to_delete)
  185. db.commit()
  186. return {
  187. "code": 200,
  188. "msg": "岗位删除成功"
  189. }
  190. except Exception as e:
  191. db.rollback()
  192. if str(e)=='':
  193. e = detail
  194. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))