__init__.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
  4. from common.security import valid_access_token
  5. from pydantic import BaseModel
  6. from database import get_db
  7. from sqlalchemy.orm import Session
  8. from typing import List
  9. from models import *
  10. from utils import *
  11. import json
  12. from sqlalchemy.sql import func
  13. from common.auth_user import *
  14. import traceback
  15. router = APIRouter()
  16. def dept_id_get_dept_info(db,dept_id):
  17. query = db.query(SysDept)
  18. query = query.filter(SysDept.del_flag != '2')
  19. query = query.filter(SysDept.dept_id == dept_id)
  20. return query.first()
  21. def user_id_get_user_info(db,user_id):
  22. query = db.query(SysUser)
  23. query = query.filter(SysUser.del_flag != '2')
  24. query = query.filter(SysUser.dept_id == user_id)
  25. return query.first()
  26. @router.get('/list')
  27. async def get_list(
  28. # request: Request,
  29. deptName: str = Query(None, max_length=100),
  30. deptCategory:str = Query(None, max_length=100),
  31. status: str = Query(None, max_length=100),
  32. db: Session = Depends(get_db),
  33. body = Depends(remove_xss_json),
  34. user_id = Depends(valid_access_token)
  35. ):
  36. query = db.query(SysDept)
  37. query = query.filter(SysDept.del_flag != '2')
  38. if deptName:
  39. query = query.filter(SysDept.dept_name.like(f'%{deptName}%'))
  40. if deptCategory:
  41. query = query.filter(SysDept.dept_category.like(f'%{deptCategory}%'))
  42. if status:
  43. query = query.filter(SysDept.status.like(f'%{status}%'))
  44. dept_list = query.all()
  45. # 将模型实例转换为字典
  46. dept_list_dict = [{
  47. "deptId": dept.dept_id,
  48. "deptName": dept.dept_name,
  49. "ancestors": dept.ancestors,
  50. "deptCategory": dept.dept_category,
  51. "leader": dept.leader,
  52. "email": dept.email,
  53. "leaderName": dept.leader_name,
  54. "orderNum": dept.order_num,
  55. "parentId": dept.parent_id,
  56. "parentName": dept.parent_name,
  57. "status": dept.status,
  58. "phone": dept.phone,
  59. "createTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else '',
  60. } for dept in dept_list]
  61. return {
  62. "code": 200,
  63. "data": dept_list_dict,
  64. "msg": "操作成功"
  65. }
  66. @router.get('/list/exclude/{dept_id}')
  67. async def get_list(
  68. # request: Request,
  69. dept_id: int,
  70. db: Session = Depends(get_db),
  71. body = Depends(remove_xss_json),
  72. user_id = Depends(valid_access_token)
  73. ):
  74. query = db.query(SysDept)
  75. query = query.filter(SysDept.del_flag != '2')
  76. if dept_id:
  77. query = query.filter(SysDept.dept_id != dept_id)
  78. dept_list = query.all()
  79. # 将模型实例转换为字典
  80. dept_list_dict = [{
  81. "deptId": dept.dept_id,
  82. "deptName": dept.dept_name,
  83. "ancestors": dept.ancestors,
  84. "deptCategory": dept.dept_category,
  85. "leader": dept.leader,
  86. "email": dept.email,
  87. "leaderName": dept.leader_name,
  88. "orderNum": dept.order_num,
  89. "parentId": dept.parent_id,
  90. "parentName": dept.parent_name,
  91. "status": dept.status,
  92. "phone": dept.phone,
  93. "createTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else '',
  94. } for dept in dept_list]
  95. return {
  96. "code": 200,
  97. "data": dept_list_dict,
  98. "msg": "操作成功"
  99. }
  100. @router.get('/{dept_id}')
  101. async def get_dept_info(
  102. dept_id:int,
  103. db: Session = Depends(get_db),
  104. body = Depends(remove_xss_json),
  105. user_id = Depends(valid_access_token)
  106. ):
  107. dept = dept_id_get_dept_info(db,dept_id)
  108. # 将模型实例转换为字典
  109. dept_dict = {
  110. "deptId": dept.dept_id,
  111. "deptName": dept.dept_name,
  112. "ancestors": dept.ancestors,
  113. "deptCategory": dept.dept_category,
  114. "leader": dept.leader,
  115. "email": dept.email,
  116. "leaderName": dept.leader_name,
  117. "orderNum": dept.order_num,
  118. "parentId": dept.parent_id,
  119. "parentName": dept.parent_name,
  120. "status": dept.status,
  121. "phone": dept.phone,
  122. "createTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else '',
  123. }
  124. return {
  125. "code": 200,
  126. "data": dept_dict,
  127. "msg": "操作成功"
  128. }
  129. @router.delete('/{dept_id}')
  130. async def delete_dept(
  131. dept_id:int,
  132. db: Session = Depends(get_db),
  133. body = Depends(remove_xss_json),
  134. user_id = Depends(valid_access_token)
  135. ):
  136. dept = dept_id_get_dept_info(db,dept_id)
  137. # 将模型实例转换为字典
  138. dept.del_flag = '2'
  139. dept.update_by = user_id
  140. db.commit()
  141. return {
  142. "code": 200,
  143. "data": None,
  144. "msg": "操作成功"
  145. }
  146. @router.post('')
  147. async def create_dept(
  148. db: Session = Depends(get_db),
  149. body = Depends(remove_xss_json),
  150. user_id = Depends(valid_access_token)
  151. ):
  152. try:
  153. # 验证必需的字段
  154. required_fields = ['deptName', 'orderNum', 'parentId', 'status']
  155. missing_fields = [field for field in required_fields if field not in body]
  156. print(missing_fields)
  157. if missing_fields:
  158. raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
  159. deptName = body['deptName']
  160. orderNum = body['orderNum']
  161. parentId = body['parentId']
  162. status = body['status']
  163. deptCategory = None
  164. email = None
  165. phone = None
  166. leader = None
  167. if 'deptCategory' in body:
  168. deptCategory = body['deptCategory']
  169. if 'email' in body:
  170. email = body['email']
  171. if 'phone' in body:
  172. phone = body['phone']
  173. if 'leader' in body:
  174. leader = body['leader']
  175. dept_parent = dept_id_get_dept_info(db,parentId)
  176. user = user_id_get_user_info(db,user_id)
  177. new_dept = SysDept(
  178. parent_id=parentId,
  179. parent_name = dept_parent.dept_name,
  180. ancestors = dept_parent.ancestors+','+str(parentId),
  181. dept_name = deptName,
  182. dept_category = deptCategory,
  183. order_num = orderNum,
  184. phone = phone,
  185. email = email,
  186. status = status,
  187. leader = leader,
  188. create_by = user_id,
  189. create_dept = user.dept_id
  190. )
  191. db.add(new_dept)
  192. db.commit()
  193. return {
  194. "code": 200,
  195. "data": None,
  196. "msg": "操作成功"
  197. }
  198. except Exception as e:
  199. db.rollback()
  200. traceback.print_exc()
  201. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  202. @router.put('')
  203. async def dept_info_update(
  204. db: Session = Depends(get_db),
  205. body = Depends(remove_xss_json),
  206. user_id = Depends(valid_access_token)
  207. ):
  208. try:
  209. required_fields = ['deptId','deptName', 'orderNum', 'parentId', 'status']
  210. missing_fields = [field for field in required_fields if field not in body]
  211. if missing_fields:
  212. raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
  213. deptId = body['deptId']
  214. dept = dept_id_get_dept_info(db,deptId)
  215. if not dept:
  216. detail = "部门不存在"
  217. raise HTTPException(status_code=404, detail="菜单不存在")
  218. dept.deptName = body['deptName']
  219. dept.orderNum = body['orderNum']
  220. dept.parentId = body['parentId']
  221. dept.status = body['status']
  222. if 'deptCategory' in body:
  223. dept.dept_category = body['deptCategory']
  224. if 'email' in body:
  225. dept.email = body['email']
  226. if 'phone' in body:
  227. dept.phone = body['phone']
  228. if 'leader' in body:
  229. dept.leader = body['leader']
  230. if 'leaderName' in body:
  231. dept.leader_name = body['leaderName']
  232. if 'parentName' in body:
  233. dept.parent_name = body['parentName']
  234. dept.update_by = user_id
  235. db.commit()
  236. return {
  237. "code": 200,
  238. "msg": "部门更新成功"
  239. }
  240. except Exception as e:
  241. # db.rollback()
  242. if str(e)=='':
  243. e = detail
  244. raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))