__init__.py 9.9 KB

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