__init__.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query,HTTPException
  4. from database import get_db
  5. from sqlalchemy.orm import Session
  6. from models import *
  7. from utils import *
  8. from utils.ry_system_util import *
  9. from common.security import valid_access_token
  10. import traceback
  11. router = APIRouter()
  12. @router.get('/')
  13. async def usercreate01(
  14. db: Session = Depends(get_db),
  15. user_id: int = Depends(valid_access_token)):
  16. try:
  17. return {
  18. "code": 200,
  19. "msg": "成功",
  20. "data": {
  21. "postIds":None,
  22. "posts":None,
  23. "roleIds":None,
  24. "roles":get_role(db),
  25. "user":None
  26. }
  27. }
  28. except Exception as e:
  29. traceback.print_exc()
  30. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  31. @router.post('')
  32. async def usercreate(
  33. db: Session = Depends(get_db),
  34. user_id: int = Depends(valid_access_token),
  35. body = Depends(remove_xss_json)
  36. ):
  37. try:
  38. if 'deptId' in body:
  39. deptId = body['deptId']
  40. else:
  41. deptId = None
  42. if 'phonenumber' in body:
  43. phonenumber = body['phonenumber']
  44. else:
  45. phonenumber = None
  46. if 'email' in body:
  47. email = body['email']
  48. else:
  49. email = None
  50. if 'sex' in body:
  51. sex = body['sex']
  52. else:
  53. sex = None
  54. userName = body['userName']
  55. nickName = body['nickName']
  56. roleIds = body['roleIds']
  57. postIds = body['postIds']
  58. remark = body['remark']
  59. status = body['status']
  60. password = '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne'
  61. new_user = SysUser(
  62. user_name = userName,
  63. nick_name=nickName,
  64. dept_id=deptId,
  65. phonenumber=phonenumber,
  66. email=email,
  67. sex=sex,
  68. remark=remark,
  69. status=status,
  70. password=password
  71. )
  72. db.add(new_user)
  73. db.commit()
  74. db.refresh(new_user)
  75. # 创建新的用户角色关联
  76. new_roles = [SysUserRole(user_id=new_user.user_id, role_id=role_id) for role_id in roleIds]
  77. db.add_all(new_roles)
  78. # 创建新的用户角色关联
  79. new_posts = [SysUserPost(user_id=new_user.user_id, post_id=post_id) for post_id in postIds]
  80. db.add_all(new_posts)
  81. db.commit()
  82. return {"code": 200, "msg": "创建成功", "data": None}
  83. except Exception as e:
  84. traceback.print_exc()
  85. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  86. @router.put('')
  87. async def userupdate(
  88. db: Session = Depends(get_db),
  89. user_id: int = Depends(valid_access_token),
  90. body = Depends(remove_xss_json)
  91. ):
  92. try:
  93. user_id_1 = body['userId']
  94. user = user_id_get_user_info(db,user_id_1)
  95. nickName = body['nickName']
  96. deptId = body['deptId']
  97. phonenumber = body['phonenumber']
  98. email = body['email']
  99. sex = body['sex']
  100. roleIds = body['roleIds']
  101. postIds = body['postIds']
  102. remark = body['remark']
  103. user.nick_name=nickName
  104. user.dept_id=deptId
  105. user.phonenumber=phonenumber
  106. user.email=email
  107. user.sex=sex
  108. user.remark=remark
  109. # 解析角色ID列表
  110. # role_ids_list = [int(id) for id in roleIds.split(',')]
  111. # 清除当前用户的所有角色关联
  112. db.query(SysUserRole).filter(SysUserRole.user_id == user_id_1).delete()
  113. # 创建新的用户角色关联
  114. new_roles = [SysUserRole(user_id=user_id_1, role_id=role_id) for role_id in roleIds]
  115. db.add_all(new_roles)
  116. # 解析角色ID列表
  117. # post_ids_list = [int(id) for id in postIds.split(',')]
  118. # 清除当前用户的所有角色关联
  119. db.query(SysUserPost).filter(SysUserPost.user_id == user_id_1).delete()
  120. # 创建新的用户角色关联
  121. new_posts = [SysUserPost(user_id=user_id_1, post_id=post_id) for post_id in postIds]
  122. db.add_all(new_posts)
  123. db.commit()
  124. return {"code": 200, "msg": "更新成功", "data": None}
  125. except Exception as e:
  126. traceback.print_exc()
  127. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  128. @router.get('/getInfo')
  129. async def getInfo(request: Request,db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  130. # 用户信息
  131. info = db.query(SysUser).filter(SysUser.user_id == user_id).first()
  132. # 部门信息
  133. dept_name = ""
  134. dept_info = db.query(SysDept).filter(SysDept.dept_id == info.dept_id).first()
  135. if dept_name is not None:
  136. dept_name = dept_info.dept_name
  137. # 角色信息
  138. roles = []
  139. role_ids = db.query(SysUserRole).filter(SysUserRole.user_id == user_id).all()
  140. for role in role_ids:
  141. role_info = db.query(SysRole).filter(SysRole.role_id == role.role_id).first()
  142. roles.append(
  143. {
  144. "roleId": role_info.role_id,
  145. "roleName": role_info.role_name,
  146. "roleKey": role_info.role_key,
  147. "roleSort": role_info.role_sort,
  148. "dataScope": role_info.data_scope,
  149. "menuCheckStrictly": role_info.menu_check_strictly,
  150. "deptCheckStrictly": role_info.dept_check_strictly,
  151. "status": role_info.status,
  152. "remark": role_info.remark,
  153. "createTime": get_datetime_str(role_info.create_time),
  154. "flag": False,
  155. "superAdmin": True
  156. }
  157. )
  158. role_keys = [
  159. n['roleKey']
  160. for n in roles
  161. ]
  162. return {
  163. "code": 200,
  164. "msg": "操作成功",
  165. "data": {
  166. "user": {
  167. "userId": info.user_id,
  168. "tenantId": info.tenant_id,
  169. "deptId": info.dept_id,
  170. "userName": info.user_name,
  171. "nickName": info.nick_name,
  172. "userType": info.user_type,
  173. "email": info.email,
  174. "phonenumber": info.phonenumber,
  175. "sex": info.sex,
  176. "avatar": info.avatar,
  177. "status": info.status,
  178. "loginIp": info.login_ip,
  179. "loginDate": get_datetime_str(info.login_date),
  180. "remark": info.remark,
  181. "createTime": get_datetime_str(info.create_time),
  182. "deptName": dept_name,
  183. "roles": roles,
  184. "roleIds": None,
  185. "postIds": None,
  186. "roleId": None
  187. },
  188. "permissions": [
  189. "*:*:*"
  190. ],
  191. "roles": role_keys
  192. }
  193. }
  194. @router.get('/deptTree')
  195. async def deptTree(request: Request,db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  196. def build_dept_tree(depts, parent_dept):
  197. dept_tree = []
  198. for dept_info in depts:
  199. dept = {
  200. "id": dept_info.dept_id,
  201. "label": dept_info.dept_name,
  202. "parentId": dept_info.parent_id,
  203. "weight": dept_info.order_num
  204. }
  205. # print(dept_info.dept_id)
  206. children = parent_id_get_dept_info(db, dept_info.dept_id)
  207. if len(children) > 0:
  208. children_depts = build_dept_tree(children, dept)
  209. dept["children"] = children_depts
  210. dept_tree.append(dept)
  211. return dept_tree
  212. result = build_dept_tree(parent_id_get_dept_info(db, 0),None)
  213. return {
  214. "code": 200,
  215. "msg": "操作成功",
  216. "data": result
  217. }
  218. # def get_query_params(params: dict):
  219. # return params
  220. # def get_time_params(params: dict = Depends(get_query_params)):
  221. # try:
  222. # begin_time = params.get("beginTime")
  223. # end_time = params.get("endTime")
  224. # return begin_time, end_time
  225. # except:
  226. # return None,None
  227. @router.get('/list')
  228. async def userlist( deptId: int = Query(None ,description='部门id'),
  229. userName: str = Query(None, description='用户名'),
  230. status: int = Query(None, description='用户状态'),
  231. phonenumber : str = Query(None, description='手机号'),
  232. # params:dict = Query(None, description='创建日期'),
  233. # beginTime: str = Depends(get_time_params),
  234. # endTime: str = Depends(get_time_params),
  235. page: int = Query(1, gt=0, description='页码'),
  236. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  237. db: Session = Depends(get_db),
  238. user_id: int = Depends(valid_access_token)):
  239. try:
  240. # 构建查询
  241. query = db.query(SysUser)
  242. query = query.filter(SysUser.del_flag != '2')
  243. # 应用查询条件
  244. # if beginTime:
  245. # query = query.filter(SysUser.create_time >= beginTime)
  246. # if endTime:
  247. # query = query.filter(SysUser.create_time <= endTime)
  248. # if params:
  249. # query = query.filter(SysUser.create_time >= params.get("beginTime"))
  250. # query = query.filter(SysUser.create_time <= params.get("endTime"))
  251. if userName:
  252. query =query.filter(SysUser.user_name.like(f'%{userName}%'))
  253. if status:
  254. query =query.filter(SysUser.status==status)
  255. if phonenumber:
  256. query =query.filter(SysUser.phonenumber.like(f'%{phonenumber}%'))
  257. def get_dept_chli(dept_list : list,parent_id : int):
  258. depts = parent_id_get_dept_info(db,parent_id)
  259. if depts:
  260. for dept in depts:
  261. dept_list.append(dept.dept_id)
  262. get_dept_chli(dept_list, dept.dept_id)
  263. return dept_list
  264. if deptId:
  265. query = query.filter(SysUser.dept_id.in_(get_dept_chli([],deptId)))
  266. # 计算总条目数
  267. total_items = query.count()
  268. # 排序
  269. query = query.order_by(SysUser.create_time.desc())
  270. # 执行分页查询
  271. users = query.offset((page - 1) * pageSize).limit(pageSize).all()
  272. # 将查询结果转换为列表形式的字典
  273. user_list = []
  274. for user in users:
  275. roleIds = user_id_get_user_roleIds(db, user.user_id)
  276. user_roles = role_id_list_get_user_role(db,roleIds)
  277. user_info = {
  278. "userId": user.user_id,
  279. "tenantId": user.tenant_id,
  280. "deptId": user.dept_id,
  281. "userName": user.user_name,
  282. "nickName": user.nick_name,
  283. "userType": user.user_type,
  284. "email": user.email,
  285. "phonenumber": user.phonenumber,
  286. "sex": user.sex,
  287. "avatar": user.avatar,
  288. "status": user.status,
  289. "loginIp": user.login_ip,
  290. "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
  291. "remark": user.remark,
  292. "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
  293. "deptName": user.dept_name,
  294. "roles": user_roles,
  295. "roleIds": None,
  296. "postIds": None,
  297. "roleId": None
  298. }
  299. user_list.append(user_info)
  300. # 返回结果
  301. return {
  302. "code": 200,
  303. "msg": "成功用户列表",
  304. "rows": user_list,
  305. "total": total_items,
  306. "page": page,
  307. "pageSize": pageSize,
  308. "totalPages": (total_items + pageSize - 1) // pageSize
  309. }
  310. except Exception as e:
  311. traceback.print_exc()
  312. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  313. @router.get('/list/dept/{dept_id}')
  314. async def get_dept_user_list(
  315. # request: Request,
  316. dept_id: int,
  317. db: Session = Depends(get_db),
  318. body = Depends(remove_xss_json),
  319. user_id = Depends(valid_access_token)
  320. ):
  321. query = db.query(SysUser)
  322. query = query.filter(SysUser.del_flag != '2')
  323. if dept_id:
  324. query = query.filter(SysUser.dept_id == dept_id)
  325. user_list = query.all()
  326. # 将模型实例转换为字典
  327. user_list_dict = [{
  328. "userId": user.user_id,
  329. "tenantId": user.tenant_id,
  330. "deptId": user.dept_id,
  331. "userName": user.user_name,
  332. "nickName": user.nick_name,
  333. "userType": user.user_type,
  334. "email": user.email,
  335. "phonenumber": user.phonenumber,
  336. "sex": user.sex,
  337. "avatar": user.avatar,
  338. "status": user.status,
  339. "loginIp": user.login_ip,
  340. "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
  341. "remark": user.remark,
  342. "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
  343. "deptName": user.dept_name,
  344. "roles": None,
  345. "roleIds": None,
  346. "postIds": None,
  347. "roleId": None
  348. } for user in user_list]
  349. return {
  350. "code": 200,
  351. "data": user_list_dict,
  352. "msg": "操作成功"
  353. }
  354. @router.put('/changeStatus')
  355. async def change_user_status(
  356. db: Session = Depends(get_db),
  357. body=Depends(remove_xss_json),
  358. user_id=Depends(valid_access_token)
  359. ):
  360. try:
  361. userId = body['userId']
  362. status = body['status']
  363. query = db.query(SysUser)
  364. query = query.filter(SysUser.del_flag != '2')
  365. query = query.filter(SysUser.user_id == userId)
  366. user = query.first()
  367. user.status= status
  368. user.update_by=user_id
  369. db.commit()
  370. return {
  371. "code": 200,
  372. "msg": "操作成功"
  373. }
  374. except Exception as e:
  375. # 处理异常
  376. db.rollback()
  377. traceback.print_exc()
  378. raise HTTPException(status_code=500, detail=str(e))
  379. @router.delete('/{user_id1}')
  380. async def delete_dept(
  381. user_id1:int,
  382. db: Session = Depends(get_db),
  383. body = Depends(remove_xss_json),
  384. user_id = Depends(valid_access_token)
  385. ):
  386. user = user_id_get_user_info(db,user_id1)
  387. # 将模型实例转换为字典
  388. print(user)
  389. user.del_flag = '2'
  390. user.update_by = user_id
  391. db.commit()
  392. return {
  393. "code": 200,
  394. "data": None,
  395. "msg": "操作成功"
  396. }
  397. @router.get('/videoPoints')
  398. async def get_user_video_points(
  399. db: Session = Depends(get_db),
  400. body = Depends(remove_xss_json),
  401. user_id = Depends(valid_access_token)):
  402. try:
  403. videoIds = user_id_get_user_videoIds(db,user_id)
  404. video_list = [i.video_code_int for i in videoIds]
  405. query = db.query(TpVideoLog)
  406. query = query.filter(TpVideoLog.video_code_int.in_(video_list))
  407. video_info = query.all()
  408. return {
  409. "code": 200,
  410. "msg": "成功",
  411. "data": {"videoIds":[i.video_code_int for i in videoIds],
  412. "videoInfos":[{"name":info.name,"video_code_int":info.video_code_int} for info in video_info]}
  413. }
  414. except Exception as e:
  415. traceback.print_exc()
  416. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  417. @router.put('/videoPoints')
  418. async def get_user_video_points(
  419. db: Session = Depends(get_db),
  420. body = Depends(remove_xss_json),
  421. user_id = Depends(valid_access_token)):
  422. try:
  423. query = db.query(SysUserVideo)
  424. query = query.filter(SysUserVideo.user_id == user_id)
  425. query.delete(synchronize_session=False)
  426. db.commit()
  427. for video in body:
  428. new_user_video = SysUserVideo(
  429. user_id=user_id,
  430. video_code_int = video
  431. )
  432. db.add(new_user_video)
  433. db.commit()
  434. return {
  435. "code": 200,
  436. "msg": "成功",
  437. "data":None
  438. }
  439. except Exception as e:
  440. traceback.print_exc()
  441. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  442. @router.put('/authRole')
  443. async def authRoleUpdate( userId: int = Query(None ,description='用户id'),
  444. roleIds: str = Query(None ,description='权限id'),
  445. db: Session = Depends(get_db),
  446. user_id: int = Depends(valid_access_token)):
  447. try:
  448. # 解析角色ID列表
  449. role_ids_list = [int(id) for id in roleIds.split(',')]
  450. # 清除当前用户的所有角色关联
  451. db.query(SysUserRole).filter(SysUserRole.user_id == userId).delete()
  452. # 创建新的用户角色关联
  453. new_roles = [SysUserRole(user_id=userId, role_id=role_id) for role_id in role_ids_list]
  454. db.add_all(new_roles)
  455. db.commit()
  456. return {"code": 200, "msg": "更新成功", "data": None}
  457. except Exception as e:
  458. traceback.print_exc()
  459. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  460. @router.get('/authRole/{user_id_1}')
  461. @router.get('/{user_id_1}')
  462. async def userlist( user_id_1: int = Query(None ,description='用户id'),
  463. db: Session = Depends(get_db),
  464. user_id: int = Depends(valid_access_token)):
  465. try:
  466. user = user_id_get_user_info(db,user_id_1)
  467. # 将查询结果转换为列表形式的字典
  468. roleIds = user_id_get_user_roleIds(db, user_id_1)
  469. user_roles = role_id_list_get_user_role(db,roleIds)
  470. user_list = {
  471. "userId": user.user_id,
  472. "tenantId": user.tenant_id,
  473. "deptId": user.dept_id,
  474. "userName": user.user_name,
  475. "nickName": user.nick_name,
  476. "userType": user.user_type,
  477. "email": user.email,
  478. "phonenumber": user.phonenumber,
  479. "sex": user.sex,
  480. "avatar": user.avatar,
  481. "status": user.status,
  482. "loginIp": user.login_ip,
  483. "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
  484. "remark": user.remark,
  485. "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
  486. "deptName": user.dept_name,
  487. "roles": user_roles,
  488. "roleIds": roleIds,
  489. "postIds": None,
  490. "roleId": None
  491. }
  492. roles = get_role(db,roleIds)
  493. # 返回结果
  494. return {
  495. "code": 200,
  496. "msg": "成功用户列表",
  497. "data": {
  498. "user":user_list,
  499. "roleIds":roleIds,
  500. "roles":roles,
  501. "postIds":[],
  502. "posts":[]
  503. }
  504. }
  505. except Exception as e:
  506. traceback.print_exc()
  507. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")