__init__.py 33 KB

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