__init__.py 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  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 fastapi.responses import JSONResponse
  7. from models import *
  8. from utils import *
  9. from utils.ry_system_util import *
  10. from common.security import valid_access_token
  11. import traceback
  12. router = APIRouter()
  13. @router.get('/')
  14. async def usercreate01(
  15. db: Session = Depends(get_db),
  16. user_id: int = Depends(valid_access_token)):
  17. try:
  18. return {
  19. "code": 200,
  20. "msg": "成功",
  21. "data": {
  22. "postIds":None,
  23. "posts":None,
  24. "roleIds":None,
  25. "roles":get_role(db),
  26. "user":None
  27. }
  28. }
  29. except Exception as e:
  30. traceback.print_exc()
  31. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  32. @router.post('')
  33. async def usercreate(
  34. db: Session = Depends(get_db),
  35. user_id: int = Depends(valid_access_token),
  36. body = Depends(remove_xss_json)
  37. ):
  38. try:
  39. if 'deptId' in body:
  40. deptId = body['deptId']
  41. else:
  42. deptId = None
  43. if 'phonenumber' in body:
  44. phonenumber = body['phonenumber']
  45. else:
  46. phonenumber = None
  47. if 'email' in body:
  48. email = body['email']
  49. else:
  50. email = None
  51. if 'sex' in body:
  52. sex = body['sex']
  53. else:
  54. sex = None
  55. userName = body['userName']
  56. user = user_name_get_user_info(db,userName)
  57. if user:
  58. return JSONResponse(status_code=404, content={"code": 404, "msg": "用户名称已存在"})
  59. pattern = r'^[a-zA-Z0-9_]+$'
  60. if re.match(pattern, userName) == False:
  61. return JSONResponse(status_code=404, content={"code": 404, "msg": "用户名称又字母大小写、阿拉伯数字和下划线组成"})
  62. nickName = body['nickName']
  63. roleIds = body['roleIds']
  64. postIds = body['postIds']
  65. remark = body['remark']
  66. status = body['status']
  67. password = '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne'
  68. new_user = SysUser(
  69. user_name = userName,
  70. nick_name=nickName,
  71. dept_id=deptId,
  72. phonenumber=phonenumber,
  73. email=email,
  74. sex=sex,
  75. remark=remark,
  76. status=status,
  77. password=password
  78. )
  79. db.add(new_user)
  80. db.commit()
  81. db.refresh(new_user)
  82. # 创建新的用户角色关联
  83. new_roles = [SysUserRole(user_id=new_user.user_id, role_id=role_id) for role_id in roleIds]
  84. db.add_all(new_roles)
  85. # 创建新的用户角色关联
  86. new_posts = [SysUserPost(user_id=new_user.user_id, post_id=post_id) for post_id in postIds]
  87. db.add_all(new_posts)
  88. db.commit()
  89. return {"code": 200, "msg": "创建成功", "data": None}
  90. except Exception as e:
  91. traceback.print_exc()
  92. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  93. @router.put('')
  94. async def userupdate(
  95. db: Session = Depends(get_db),
  96. user_id: int = Depends(valid_access_token),
  97. body = Depends(remove_xss_json)
  98. ):
  99. try:
  100. user_id_1 = body['userId']
  101. user = user_id_get_user_info(db,user_id_1)
  102. nickName = body['nickName']
  103. deptId = body['deptId']
  104. phonenumber = body['phonenumber']
  105. email = body['email']
  106. sex = body['sex']
  107. roleIds = body['roleIds']
  108. postIds = body['postIds']
  109. remark = body['remark']
  110. user.nick_name=nickName
  111. user.dept_id=deptId
  112. user.phonenumber=phonenumber
  113. user.email=email
  114. user.sex=sex
  115. user.remark=remark
  116. # 解析角色ID列表
  117. # role_ids_list = [int(id) for id in roleIds.split(',')]
  118. # 清除当前用户的所有角色关联
  119. db.query(SysUserRole).filter(SysUserRole.user_id == user_id_1).delete()
  120. # 创建新的用户角色关联
  121. new_roles = [SysUserRole(user_id=user_id_1, role_id=role_id) for role_id in roleIds]
  122. db.add_all(new_roles)
  123. # 解析角色ID列表
  124. # post_ids_list = [int(id) for id in postIds.split(',')]
  125. # 清除当前用户的所有角色关联
  126. db.query(SysUserPost).filter(SysUserPost.user_id == user_id_1).delete()
  127. # 创建新的用户角色关联
  128. new_posts = [SysUserPost(user_id=user_id_1, post_id=post_id) for post_id in postIds]
  129. db.add_all(new_posts)
  130. db.commit()
  131. return {"code": 200, "msg": "更新成功", "data": None}
  132. except Exception as e:
  133. traceback.print_exc()
  134. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  135. @router.put('/resetPwd')
  136. async def userupdate(
  137. db: Session = Depends(get_db),
  138. user_id: int = Depends(valid_access_token),
  139. body = Depends(remove_xss_json)
  140. ):
  141. try:
  142. user_id_1 = body['userId']
  143. user = user_id_get_user_info(db,user_id_1)
  144. password = body['password']
  145. user.password=password
  146. user.update_by=user_id
  147. db.commit()
  148. return {"code": 200, "msg": "更新成功", "data": None}
  149. except Exception as e:
  150. traceback.print_exc()
  151. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  152. @router.get('/getInfo')
  153. async def getInfo(request: Request,db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  154. try:
  155. # 用户信息
  156. info = db.query(SysUser).filter(SysUser.user_id == user_id).first()
  157. if info is None:
  158. return {
  159. "code": 200,
  160. "msg": "操作成功",
  161. "data": None}
  162. # 部门信息
  163. dept_name = ""
  164. dept_info = db.query(SysDept).filter(SysDept.dept_id == info.dept_id).first()
  165. if dept_name is not None:
  166. dept_name = dept_info.dept_name
  167. # 角色信息
  168. roles = []
  169. role_ids = db.query(SysUserRole).filter(SysUserRole.user_id == user_id).all()
  170. for role in role_ids:
  171. role_info = db.query(SysRole).filter(SysRole.role_id == role.role_id).first()
  172. roles.append(
  173. {
  174. "roleId": role_info.role_id,
  175. "roleName": role_info.role_name,
  176. "roleKey": role_info.role_key,
  177. "roleSort": role_info.role_sort,
  178. "dataScope": role_info.data_scope,
  179. "menuCheckStrictly": role_info.menu_check_strictly,
  180. "deptCheckStrictly": role_info.dept_check_strictly,
  181. "status": role_info.status,
  182. "remark": role_info.remark,
  183. "createTime": get_datetime_str(role_info.create_time),
  184. "flag": False,
  185. "superAdmin": True
  186. }
  187. )
  188. role_keys = [
  189. n['roleKey']
  190. for n in roles
  191. ]
  192. return {
  193. "code": 200,
  194. "msg": "操作成功",
  195. "data": {
  196. "user": {
  197. "userId": info.user_id,
  198. "tenantId": info.tenant_id,
  199. "deptId": info.dept_id,
  200. "userName": info.user_name,
  201. "nickName": info.nick_name,
  202. "userType": info.user_type,
  203. "email": info.email,
  204. "phonenumber": info.phonenumber,
  205. "sex": info.sex,
  206. "avatar": info.avatar,
  207. "status": info.status,
  208. "loginIp": info.login_ip,
  209. "loginDate": get_datetime_str(info.login_date),
  210. "remark": info.remark,
  211. "createTime": get_datetime_str(info.create_time),
  212. "deptName": dept_name,
  213. "roles": roles,
  214. "roleIds": None,
  215. "postIds": None,
  216. "roleId": None
  217. },
  218. "permissions": [
  219. "*:*:*"
  220. ],
  221. "roles": role_keys
  222. }
  223. }
  224. except Exception as e:
  225. traceback.print_exc()
  226. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  227. @router.get('/deptTree')
  228. async def deptTree(request: Request,db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  229. def build_dept_tree(depts, parent_dept):
  230. dept_tree = []
  231. for dept_info in depts:
  232. dept = {
  233. "id": dept_info.dept_id,
  234. "label": dept_info.dept_name,
  235. "parentId": dept_info.parent_id,
  236. "weight": dept_info.order_num
  237. }
  238. # print(dept_info.dept_id)
  239. children = parent_id_get_dept_info(db, dept_info.dept_id)
  240. if len(children) > 0:
  241. children_depts = build_dept_tree(children, dept)
  242. dept["children"] = children_depts
  243. dept_tree.append(dept)
  244. return dept_tree
  245. result = build_dept_tree(parent_id_get_dept_info(db, 0),None)
  246. return {
  247. "code": 200,
  248. "msg": "操作成功",
  249. "data": result
  250. }
  251. @router.get('/avcon/deptTree')
  252. async def deptTree(request: Request,label: str = Query(None, description='部门名称'),db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  253. """
  254. def build_dept_tree(depts, parent_dept):
  255. dept_tree = []
  256. for dept_info in depts:
  257. dept = {
  258. "id": dept_info.dept_id,
  259. "label": dept_info.dept_name,
  260. # "parentId": dept_info.parent_id,
  261. # "weight": dept_info.order_num
  262. }
  263. # print(dept_info.dept_id)
  264. children = parent_id_get_dept_info(db, dept_info.dept_id)
  265. if len(children) > 0:
  266. children_depts = build_dept_tree(children, dept)
  267. dept["children"] = children_depts
  268. # userlist=dept_id_get_user_info(db,dept_info.dept_id)
  269. # if userlist:
  270. # for user_info in userlist:
  271. # dept["children"].append({"id":user_info.user_id,"label":user_info.nick_name,"isLeaf":True})
  272. else:
  273. dept['isLeaf']=True
  274. # userlist = dept_id_get_user_info(db, dept_info.dept_id)
  275. # if userlist:
  276. # for user_info in userlist:
  277. # dept["children"].append({"id": user_info.user_id, "label": user_info.nick_name, "isLeaf": True})
  278. dept_tree.append(dept)
  279. return dept_tree
  280. # result = []
  281. if label:
  282. query = db.query(SysDept)
  283. query = query.filter(SysDept.del_flag != '2')
  284. query = query.filter(SysDept.dept_name.like(f'%{label}%'))
  285. # for dept_info in :
  286. result=build_dept_tree(query.all(), None)
  287. else:
  288. result=build_dept_tree(parent_id_get_dept_info(db, 0),None)
  289. """
  290. result = []
  291. # 暂时写死
  292. result.append({
  293. "id": "G2@mm.zw.yj",
  294. "label": "指挥终端",
  295. "isLeaf": True
  296. })
  297. result.append({
  298. "id": "G5@mm.zw.yj",
  299. "label": "移动视频",
  300. "isLeaf": True
  301. })
  302. result.append({
  303. "id": "G6@mm.zw.yj",
  304. "label": "H323会议",
  305. "isLeaf": True
  306. })
  307. return {
  308. "code": 200,
  309. "msg": "操作成功",
  310. "data": result
  311. }
  312. """
  313. 本接口已废弃
  314. """
  315. @router.get('/avcon/deptUserTree_____________')
  316. async def deptTree(request: Request,label: str = Query(None, description='部门名称'),db: Session = Depends(get_db), user_id: int = Depends(valid_access_token)):
  317. def build_dept_tree(depts, parent_dept):
  318. dept_tree = []
  319. for dept_info in depts:
  320. dept = {
  321. "id": dept_info.dept_id,
  322. "label": dept_info.dept_name,
  323. # "parentId": dept_info.parent_id,
  324. # "weight": dept_info.order_num
  325. }
  326. # print(dept_info.dept_id)
  327. children = parent_id_get_dept_info(db, dept_info.dept_id)
  328. if len(children) > 0:
  329. children_depts = build_dept_tree(children, dept)
  330. dept["children"] = children_depts
  331. userlist=dept_id_get_user_info(db,dept_info.dept_id)
  332. if userlist:
  333. for user_info in userlist:
  334. dept["children"].append({"id":user_info.user_id,"label":user_info.nick_name,"isUser":True,"isLeaf":True})
  335. else:
  336. dept['isLeaf']=True
  337. userlist = dept_id_get_user_info(db, dept_info.dept_id)
  338. if userlist:
  339. for user_info in userlist:
  340. dept["children"].append({"id": user_info.user_id, "label": user_info.nick_name,"isUser":True, "isLeaf": True})
  341. dept_tree.append(dept)
  342. return dept_tree
  343. # result = []
  344. if label:
  345. query = db.query(SysDept)
  346. query = query.filter(SysDept.del_flag != '2')
  347. query = query.filter(SysDept.dept_name.like(f'%{label}%'))
  348. # for dept_info in :
  349. result=build_dept_tree(query.all(), None)
  350. else:
  351. result=build_dept_tree(parent_id_get_dept_info(db, 0),None)
  352. return {
  353. "code": 200,
  354. "msg": "操作成功",
  355. "data": result
  356. }
  357. """
  358. 本接口已废弃
  359. """
  360. @router.get('/avcon/list/dept_____________/{dept_id}')
  361. async def get_dept_user_list(
  362. # request: Request,
  363. dept_id: str,
  364. name: str = Query(None, description='昵称'),
  365. db: Session = Depends(get_db),
  366. body = Depends(remove_xss_json),
  367. user_id = Depends(valid_access_token)
  368. ):
  369. def get_avcon_type_text(type: str) -> str:
  370. if type == '001':
  371. return '指挥视频终端'
  372. elif type == '060':
  373. return '营区监控'
  374. elif type == '085':
  375. return '监控网关服务器'
  376. elif type == '100':
  377. return 'H.323终端'
  378. return "未知终端"
  379. """
  380. query = db.query(SysUser)
  381. query = query.filter(SysUser.del_flag != '2')
  382. def get_dept_chli(dept_list: list, parent_id: int):
  383. depts = parent_id_get_dept_info(db, parent_id)
  384. if depts:
  385. for dept in depts:
  386. dept_list.append(dept.dept_id)
  387. get_dept_chli(dept_list, dept.dept_id)
  388. return dept_list
  389. if dept_id:
  390. query = query.filter(SysUser.dept_id.in_(get_dept_chli([], dept_id)))
  391. if name:
  392. query = query.filter(SysUser.nick_name.like(f'%{name}%'))
  393. user_list = query.all()
  394. user_list_dict = []
  395. # 将模型实例转换为字典
  396. for user in user_list:
  397. dept = dept_id_get_ancestors_names(db,dept_id_get_dept_info(db,user.dept_id))
  398. roleIds = user_id_get_user_roleIds(db, user_id)
  399. user_roles = role_id_list_get_user_role(db,roleIds)
  400. dev_id = user_id_get_avcon_dev_id(db, user.user_id)
  401. user_list_dict.append({
  402. "id": user.user_id,
  403. "dept": dept,
  404. "name": user.nick_name,
  405. "mobile": dev_id,
  406. "duty": '/'.join([i["roleName"] for i in user_roles])
  407. } )
  408. """
  409. user_list_dict = []
  410. query = db.query(AvconDevice).filter(AvconDevice.group_id == dept_id)
  411. query = query.filter(AvconDevice.dev_type == '001')
  412. # query = query.filter(AvconDevice.status == 1) # 上线状态
  413. query = query.order_by(AvconDevice.group_id.asc(), AvconDevice.dev_id.asc())
  414. rows = query.all()
  415. for row in rows:
  416. user_list_dict.append({
  417. "id": row.dev_id,
  418. "dept": get_avcon_type_text(row.dev_type),
  419. "name": row.dev_name,
  420. "mobile": row.dev_id
  421. })
  422. return {
  423. "code": 200,
  424. "data": user_list_dict,
  425. "msg": "操作成功"
  426. }
  427. # def get_query_params(params: dict):
  428. # return params
  429. # def get_time_params(params: dict = Depends(get_query_params)):
  430. # try:
  431. # begin_time = params.get("beginTime")
  432. # end_time = params.get("endTime")
  433. # return begin_time, end_time
  434. # except:
  435. # return None,None
  436. @router.get('/list')
  437. async def userlist( deptId: int = Query(None ,description='部门id'),
  438. userName: str = Query(None, description='用户名'),
  439. status: int = Query(None, description='用户状态'),
  440. phonenumber : str = Query(None, description='手机号'),
  441. # params:dict = Query(None, description='创建日期'),
  442. # beginTime: str = Depends(get_time_params),
  443. # endTime: str = Depends(get_time_params),
  444. page: int = Query(1, gt=0, description='页码'),
  445. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  446. db: Session = Depends(get_db),
  447. user_id: int = Depends(valid_access_token)):
  448. try:
  449. # 构建查询
  450. query = db.query(SysUser)
  451. query = query.filter(SysUser.del_flag != '2')
  452. # 应用查询条件
  453. # if beginTime:
  454. # query = query.filter(SysUser.create_time >= beginTime)
  455. # if endTime:
  456. # query = query.filter(SysUser.create_time <= endTime)
  457. # if params:
  458. # query = query.filter(SysUser.create_time >= params.get("beginTime"))
  459. # query = query.filter(SysUser.create_time <= params.get("endTime"))
  460. if userName:
  461. query =query.filter(SysUser.user_name.like(f'%{userName}%'))
  462. if status:
  463. query =query.filter(SysUser.status==status)
  464. if phonenumber:
  465. query =query.filter(SysUser.phonenumber.like(f'%{phonenumber}%'))
  466. def get_dept_chli(dept_list : list,parent_id : int):
  467. depts = parent_id_get_dept_info(db,parent_id)
  468. if depts:
  469. for dept in depts:
  470. dept_list.append(dept.dept_id)
  471. get_dept_chli(dept_list, dept.dept_id)
  472. return dept_list
  473. if deptId:
  474. query = query.filter(SysUser.dept_id.in_(get_dept_chli([deptId],deptId)))
  475. # 计算总条目数
  476. total_items = query.count()
  477. # 排序
  478. query = query.order_by(SysUser.create_time.desc())
  479. # 执行分页查询
  480. users = query.offset((page - 1) * pageSize).limit(pageSize).all()
  481. # 将查询结果转换为列表形式的字典
  482. user_list = []
  483. for user in users:
  484. roleIds = user_id_get_user_roleIds(db, user.user_id)
  485. user_roles = role_id_list_get_user_role(db,roleIds)
  486. user_info = {
  487. "userId": user.user_id,
  488. "tenantId": user.tenant_id,
  489. "deptId": user.dept_id,
  490. "userName": user.user_name,
  491. "nickName": user.nick_name,
  492. "userType": user.user_type,
  493. "email": user.email,
  494. "phonenumber": user.phonenumber,
  495. "sex": user.sex,
  496. "avatar": user.avatar,
  497. "status": user.status,
  498. "loginIp": user.login_ip,
  499. "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
  500. "remark": user.remark,
  501. "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
  502. "deptName": user.dept_name,
  503. "roles": user_roles,
  504. "roleIds": None,
  505. "postIds": None,
  506. "roleId": None
  507. }
  508. user_list.append(user_info)
  509. # 返回结果
  510. return {
  511. "code": 200,
  512. "msg": "成功用户列表",
  513. "rows": user_list,
  514. "total": total_items,
  515. "page": page,
  516. "pageSize": pageSize,
  517. "totalPages": (total_items + pageSize - 1) // pageSize
  518. }
  519. except Exception as e:
  520. traceback.print_exc()
  521. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  522. @router.get('/list/dept/{dept_id}')
  523. async def get_dept_user_list(
  524. # request: Request,
  525. dept_id: int,
  526. db: Session = Depends(get_db),
  527. body = Depends(remove_xss_json),
  528. user_id = Depends(valid_access_token)
  529. ):
  530. query = db.query(SysUser)
  531. query = query.filter(SysUser.del_flag != '2')
  532. if dept_id:
  533. query = query.filter(SysUser.dept_id == dept_id)
  534. user_list = query.all()
  535. # 将模型实例转换为字典
  536. user_list_dict = [{
  537. "userId": user.user_id,
  538. "tenantId": user.tenant_id,
  539. "deptId": user.dept_id,
  540. "userName": user.user_name,
  541. "nickName": user.nick_name,
  542. "userType": user.user_type,
  543. "email": user.email,
  544. "phonenumber": user.phonenumber,
  545. "sex": user.sex,
  546. "avatar": user.avatar,
  547. "status": user.status,
  548. "loginIp": user.login_ip,
  549. "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
  550. "remark": user.remark,
  551. "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
  552. "deptName": user.dept_name,
  553. "roles": None,
  554. "roleIds": None,
  555. "postIds": None,
  556. "roleId": None
  557. } for user in user_list]
  558. return {
  559. "code": 200,
  560. "data": user_list_dict,
  561. "msg": "操作成功"
  562. }
  563. @router.put('/changeStatus')
  564. async def change_user_status(
  565. db: Session = Depends(get_db),
  566. body=Depends(remove_xss_json),
  567. user_id=Depends(valid_access_token)
  568. ):
  569. try:
  570. userId = body['userId']
  571. status = body['status']
  572. query = db.query(SysUser)
  573. query = query.filter(SysUser.del_flag != '2')
  574. query = query.filter(SysUser.user_id == userId)
  575. user = query.first()
  576. user.status= status
  577. user.update_by=user_id
  578. db.commit()
  579. return {
  580. "code": 200,
  581. "msg": "操作成功"
  582. }
  583. except Exception as e:
  584. # 处理异常
  585. db.rollback()
  586. traceback.print_exc()
  587. raise HTTPException(status_code=500, detail=str(e))
  588. @router.delete('/{user_id1}')
  589. async def delete_dept(
  590. user_id1:int,
  591. db: Session = Depends(get_db),
  592. body = Depends(remove_xss_json),
  593. user_id = Depends(valid_access_token)
  594. ):
  595. user = user_id_get_user_info(db,user_id1)
  596. # 将模型实例转换为字典
  597. print(user)
  598. user.del_flag = '2'
  599. user.update_by = user_id
  600. db.commit()
  601. return {
  602. "code": 200,
  603. "data": None,
  604. "msg": "操作成功"
  605. }
  606. @router.get('/videoPoints')
  607. async def get_user_video_points(
  608. db: Session = Depends(get_db),
  609. body = Depends(remove_xss_json),
  610. user_id = Depends(valid_access_token)):
  611. try:
  612. videoIds = user_id_get_user_videoIds(db,user_id)
  613. video_list = [i.video_code_int for i in videoIds]
  614. query = db.query(TpVideoLog)
  615. query = query.filter(TpVideoLog.video_code_int.in_(video_list))
  616. video_info = query.all()
  617. return {
  618. "code": 200,
  619. "msg": "成功",
  620. "data": {"videoIds":[i.video_code_int for i in videoIds],
  621. "videoInfos":[{"name":info.name,"video_code_int":info.video_code_int} for info in video_info]}
  622. }
  623. except Exception as e:
  624. traceback.print_exc()
  625. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  626. @router.put('/videoPoints')
  627. async def get_user_video_points(
  628. db: Session = Depends(get_db),
  629. body = Depends(remove_xss_json),
  630. user_id = Depends(valid_access_token)):
  631. try:
  632. query = db.query(SysUserVideo)
  633. query = query.filter(SysUserVideo.user_id == user_id)
  634. query.delete(synchronize_session=False)
  635. db.commit()
  636. for video in body:
  637. new_user_video = SysUserVideo(
  638. user_id=user_id,
  639. video_code_int = video
  640. )
  641. db.add(new_user_video)
  642. db.commit()
  643. return {
  644. "code": 200,
  645. "msg": "成功",
  646. "data":None
  647. }
  648. except Exception as e:
  649. traceback.print_exc()
  650. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  651. @router.put('/authRole')
  652. async def authRoleUpdate( userId: int = Query(None ,description='用户id'),
  653. roleIds: str = Query(None ,description='权限id'),
  654. db: Session = Depends(get_db),
  655. user_id: int = Depends(valid_access_token)):
  656. try:
  657. # 解析角色ID列表
  658. role_ids_list = [int(id) for id in roleIds.split(',')]
  659. # 清除当前用户的所有角色关联
  660. db.query(SysUserRole).filter(SysUserRole.user_id == userId).delete()
  661. # 创建新的用户角色关联
  662. new_roles = [SysUserRole(user_id=userId, role_id=role_id) for role_id in role_ids_list]
  663. db.add_all(new_roles)
  664. db.commit()
  665. return {"code": 200, "msg": "更新成功", "data": None}
  666. except Exception as e:
  667. traceback.print_exc()
  668. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  669. @router.get('/profile')
  670. async def userlist( #user_id_1: int = Query(None ,description='用户id'),
  671. db: Session = Depends(get_db),
  672. user_id: int = Depends(valid_access_token)):
  673. try:
  674. user = user_id_get_user_info(db,user_id)
  675. # 将查询结果转换为列表形式的字典
  676. roleIds = user_id_get_user_roleIds(db, user_id)
  677. user_roles = role_id_list_get_user_role(db,roleIds)
  678. dept = dept_id_get_dept_info(db,user.dept_id)
  679. user_list = {
  680. "admin":1 in roleIds,
  681. "avatar": user.avatar,
  682. "createBy":user_id_get_user_info(db,user.create_by).user_name,
  683. "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
  684. "delFlag":user.del_flag,
  685. "dept":{
  686. "createBy": user_id_get_user_info(db,dept.create_by).user_name if dept.create_by else None,
  687. "createTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else None,
  688. "updateBy": user_id_get_user_info(db,dept.update_by).user_name if dept.update_by else None,
  689. "updateTime": dept.create_time.strftime('%Y-%m-%d %H:%M:%S') if dept.create_time else None,
  690. "remark": '',#dept.remark,
  691. "deptId": dept.dept_id,
  692. "parentId": dept.parent_id,
  693. "ancestors": dept.ancestors,
  694. "deptName": dept.dept_name,
  695. "orderNum": dept.order_num,
  696. "leader": dept.leader_name,
  697. "phone": dept.phone,
  698. "email": dept.email,
  699. "status": dept.status,
  700. "delFlag": dept.del_flag,
  701. "parentName": dept.parent_name,
  702. "children": []
  703. },
  704. "deptId": user.dept_id,
  705. "email": user.email,
  706. "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
  707. "loginIp": user.login_ip,
  708. "nickName": user.nick_name,
  709. "password":"",
  710. "phonenumber": user.phonenumber,
  711. "postIds": None,
  712. "remark": user.remark,
  713. "roleId": None,
  714. "roleIds": roleIds,
  715. "roles": user_roles,
  716. "sex": user.sex,
  717. "status": user.status,
  718. "updateBy":user.update_by,
  719. "updateTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else None,
  720. "userId": user.user_id,
  721. "userName": user.user_name,
  722. "tenantId": user.tenant_id,
  723. "userType": user.user_type,
  724. "deptName": dept.dept_name,
  725. }
  726. roles = get_role(db,roleIds)
  727. # 返回结果
  728. return {
  729. "code": 200,
  730. "msg": "成功用户列表",
  731. "data": user_list,
  732. # {
  733. # "user":user_list,
  734. # "roleIds":roleIds,
  735. # "roles":roles,
  736. # "postIds":[],
  737. # "posts":[]
  738. # }
  739. "postGroup":"工作人员",
  740. "roleGroup":'/'.join([i["roleName"] for i in user_roles])
  741. }
  742. except Exception as e:
  743. traceback.print_exc()
  744. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  745. @router.put('/profile')
  746. async def userlist( #user_id_1: int = Query(None ,description='用户id'),
  747. db: Session = Depends(get_db),
  748. body = Depends(remove_xss_json),
  749. user_id: int = Depends(valid_access_token)):
  750. try:
  751. user = user_id_get_user_info(db,user_id)
  752. if "email" in body:
  753. user.email=body['email']
  754. user.update_by=user_id
  755. if "nickName" in body:
  756. user.nick_name = body['nickName']
  757. user.update_by=user_id
  758. if "phonenumber" in body:
  759. user.phonenumber = body['phonenumber']
  760. user.update_by=user_id
  761. if "sex" in body:
  762. user.nick_name = body['sex']
  763. user.update_by=user_id
  764. db.commit()
  765. return {"code":200,"msg":"成功","data":None}
  766. except Exception as e:
  767. traceback.print_exc()
  768. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  769. @router.put('/profile/updatePwd')
  770. async def userlist( #user_id_1: int = Query(None ,description='用户id'),
  771. db: Session = Depends(get_db),
  772. body = Depends(remove_xss_json),
  773. user_id: int = Depends(valid_access_token)):
  774. try:
  775. user = user_id_get_user_info(db,user_id)
  776. if user.password!=body['oldPassword']:
  777. return JSONResponse(status_code=404,content={"code":404,"msg":"密码错误"})
  778. if "newPassword" in body:
  779. user.nick_name = body['newPassword']
  780. user.update_by=user_id
  781. db.commit()
  782. return {"code":200,"msg":"成功","data":None}
  783. except Exception as e:
  784. traceback.print_exc()
  785. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  786. @router.get('/authRole/{user_id_1}')
  787. @router.get('/{user_id_1}')
  788. async def userlist( user_id_1: int = Query(None ,description='用户id'),
  789. db: Session = Depends(get_db),
  790. user_id: int = Depends(valid_access_token)):
  791. try:
  792. user = user_id_get_user_info(db,user_id_1)
  793. # 将查询结果转换为列表形式的字典
  794. roleIds = user_id_get_user_roleIds(db, user_id_1)
  795. user_roles = role_id_list_get_user_role(db,roleIds)
  796. user_list = {
  797. "userId": user.user_id,
  798. "tenantId": user.tenant_id,
  799. "deptId": user.dept_id,
  800. "userName": user.user_name,
  801. "nickName": user.nick_name,
  802. "userType": user.user_type,
  803. "email": user.email,
  804. "phonenumber": user.phonenumber,
  805. "sex": user.sex,
  806. "avatar": user.avatar,
  807. "status": user.status,
  808. "loginIp": user.login_ip,
  809. "loginDate": user.login_date.strftime('%Y-%m-%d %H:%M:%S') if user.login_date else '',
  810. "remark": user.remark,
  811. "createTime": user.create_time.strftime('%Y-%m-%d %H:%M:%S') if user.create_time else '',
  812. "deptName": user.dept_name,
  813. "roles": user_roles,
  814. "roleIds": roleIds,
  815. "postIds": None,
  816. "roleId": None
  817. }
  818. roles = get_role(db,roleIds)
  819. # 返回结果
  820. return {
  821. "code": 200,
  822. "msg": "成功用户列表",
  823. "data": {
  824. "user":user_list,
  825. "roleIds":roleIds,
  826. "roles":roles,
  827. "postIds":[],
  828. "posts":[]
  829. }
  830. }
  831. except Exception as e:
  832. traceback.print_exc()
  833. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")