__init__.py 8.3 KB

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