contact.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  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 fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy import and_, or_
  8. from sqlalchemy.sql import func
  9. from common.auth_user import *
  10. from pydantic import BaseModel
  11. from database import get_db
  12. from typing import List
  13. from models import *
  14. from utils import *
  15. from utils.ry_system_util import *
  16. from utils.video_util import *
  17. import traceback
  18. import json
  19. router = APIRouter()
  20. def parent_id_get_contact_dept_list(db,parent_id):
  21. query = db.query(EmergencyContactDepartment)
  22. query = query.filter(EmergencyContactDepartment.del_flag != '2')
  23. query = query.filter(EmergencyContactDepartment.parent_department_id == parent_id)
  24. query = query.order_by(EmergencyContactDepartment.display_order,EmergencyContactDepartment.update_time)
  25. return query.all()
  26. def yzy_parent_id_get_contact_dept_list(db,parent_id):
  27. query = db.query(YzyOrgUnitEntity)
  28. query = query.filter(YzyOrgUnitEntity.parentunitid == parent_id)
  29. return query.all()
  30. def id_get_contact_dept_info(db,id):
  31. query = db.query(EmergencyContactDepartment)
  32. query = query.filter(EmergencyContactDepartment.del_flag != '2')
  33. query = query.filter(EmergencyContactDepartment.id == id)
  34. return query.first()
  35. @router.get('/department/data')
  36. async def get_dict_data_by_type(
  37. db: Session = Depends(get_db),
  38. user_id = Depends(valid_access_token)
  39. ):
  40. try:
  41. data = parent_id_get_contact_dept_list(db,0)
  42. def build_dept_tree(depts, parent_dept):
  43. dept_tree = [] # 初始化一个列表来存储菜单树结构
  44. for dept in depts:
  45. dept_data = {
  46. "id": dept.id,
  47. "isShowSelect": False,
  48. "label": dept.department_name,
  49. "regionPath": dept.regionPath,
  50. "yzy_unitid": dept.yzy_unitid,
  51. }
  52. children_depts = parent_id_get_contact_dept_list(db,dept.id)
  53. if len(children_depts) > 0:
  54. dept_data['children'] = build_dept_tree(children_depts, dept)
  55. dept_data['isShowSelect'] = True
  56. dept_tree.append(dept_data) # 将当前菜单数据添加到菜单树列表
  57. return dept_tree
  58. routers = build_dept_tree(data, None)
  59. # 构建返回结果
  60. result = {
  61. "data": routers,
  62. "code": 200,
  63. "msg": "查询成功"
  64. }
  65. return result
  66. except Exception as e:
  67. # 处理异常
  68. traceback.print_exc()
  69. return JSONResponse(status_code=404, content={
  70. 'code': 404,
  71. 'msg': str(e)
  72. })
  73. @router.get('/yzy/department/data')
  74. async def get_dict_data_by_type(
  75. db: Session = Depends(get_db),
  76. user_id = Depends(valid_access_token)
  77. ):
  78. try:
  79. data = yzy_parent_id_get_contact_dept_list(db,'0')
  80. def build_dept_tree(depts, parent_dept):
  81. dept_tree = [] # 初始化一个列表来存储菜单树结构
  82. for dept in depts:
  83. dept_data = {
  84. "yzy_unitid": dept.unitid,
  85. "isShowSelect": False,
  86. "label": dept.unitname,
  87. "regionPath": dept.unitpath
  88. }
  89. children_depts = yzy_parent_id_get_contact_dept_list(db,dept.unitid)
  90. if len(children_depts) > 0:
  91. dept_data['children'] = build_dept_tree(children_depts, dept)
  92. dept_data['isShowSelect'] = True
  93. dept_tree.append(dept_data) # 将当前菜单数据添加到菜单树列表
  94. return dept_tree
  95. routers = build_dept_tree(data, None)
  96. # 构建返回结果
  97. result = {
  98. "data": routers,
  99. "code": 200,
  100. "msg": "查询成功"
  101. }
  102. return result
  103. except Exception as e:
  104. # 处理异常
  105. traceback.print_exc()
  106. return JSONResponse(status_code=404, content={
  107. 'code': 404,
  108. 'msg': str(e)
  109. })
  110. @router.post('/department/create')
  111. async def create_dict_data(
  112. db: Session = Depends(get_db),
  113. body = Depends(remove_xss_json),
  114. user_id = Depends(valid_access_token)
  115. ):
  116. try:
  117. # 创建一个新的 SysDictData 实例
  118. display_order = 0
  119. if 'display_order' in body :
  120. display_order = body['display_order']
  121. if display_order=='':
  122. display_order = 0
  123. new_dict_data = EmergencyContactDepartment(
  124. parent_department_id=body['parent_department_id'],
  125. department_name=body['department_name'],
  126. regionPath=body['regionPath'],
  127. yzy_unitid=body['yzy_unitid'],
  128. yzy_regionPath=body['yzy_regionPath'],
  129. display_order=display_order,
  130. create_by=user_id
  131. )
  132. # 添加到会话并提交
  133. db.add(new_dict_data)
  134. db.commit()
  135. db.refresh(new_dict_data) # 可选,如果需要刷新实例状态
  136. # 构建返回结果
  137. result = {
  138. "code": 200,
  139. "msg": "操作成功",
  140. "data": None
  141. }
  142. return result
  143. except Exception as e:
  144. # 处理异常
  145. traceback.print_exc()
  146. return JSONResponse(status_code=404, content={
  147. 'code': 404,
  148. 'msg': str(e)
  149. })
  150. @router.delete("/department/delete/{id}") # 使用 ID 来标识要删除的接口
  151. async def delete_dict_data(
  152. id: str,
  153. db: Session = Depends(get_db),
  154. body = Depends(remove_xss_json),
  155. user_id = Depends(valid_access_token)
  156. ):
  157. try:
  158. # 从数据库中获取要删除的 OneShareApiEntity 实例
  159. query = db.query(EmergencyContactDepartment)
  160. query = query.filter(EmergencyContactDepartment.id == id)
  161. query = query.filter(EmergencyContactDepartment.del_flag != '2')
  162. dept_data = query.first()
  163. # dict_data = db.query(SysDictData).filter(SysDictData.dict_code == dictCode and SysDictData.del_flag != '2').first()
  164. if not dept_data:
  165. return JSONResponse(status_code=404, content={
  166. 'code': 404,
  167. 'msg': 'dept不存在'
  168. })
  169. dept_data.del_flag = '2'
  170. # 删除实例
  171. # db.delete(api)
  172. db.commit()
  173. # 构建并返回响应
  174. return {
  175. "code": 200,
  176. "msg": "操作成功",
  177. "data": None
  178. }
  179. except Exception as e:
  180. traceback.print_exc()
  181. return JSONResponse(status_code=404, content={
  182. 'code': 404,
  183. 'msg': str(e)
  184. })
  185. @router.get('/user/list')
  186. async def get_dict_data_by_type(
  187. dept_parent_id:int =Query(None),
  188. keywords:str =Query(None),
  189. page: int = Query(1, gt=0),
  190. pageSize: int = Query(10, gt=0),
  191. db: Session = Depends(get_db),
  192. body = Depends(remove_xss_json),
  193. user_id = Depends(valid_access_token)
  194. ):
  195. try:
  196. # 根据 dict_type 查询字典数据
  197. # dict_data = db.query(SysDictData).filter_by(dict_type=dictType).all()
  198. query = db.query(EmergencyContactUser)
  199. query = query.filter(EmergencyContactUser.del_flag != '2')
  200. # 添加查询条件
  201. if dept_parent_id:
  202. query = query.filter(EmergencyContactUser.department_id==dept_parent_id)
  203. if keywords:
  204. query = query.filter(or_(EmergencyContactUser.name.like(f'%{keywords}%'),EmergencyContactUser.mobile_phone.like(f'%{keywords}%'),EmergencyContactUser.office_phone.like(f'%{keywords}%')))
  205. query = query.order_by(EmergencyContactUser.display_order, EmergencyContactUser.update_time.desc())
  206. # 计算总记录数
  207. total_count = query.count()
  208. # 计算分页
  209. offset = (page - 1) * pageSize
  210. user_data = query.offset(offset).limit(pageSize).all()
  211. # 转换为字典
  212. data_list = []
  213. for d in user_data:
  214. department = id_get_contact_dept_info(db,d.department_id)
  215. if department is None:
  216. department=''
  217. continue
  218. data_list.append({
  219. "id": d.id,
  220. "name": d.name,
  221. "position":d.position,
  222. "mobile_phone": d.mobile_phone,
  223. "office_phone":d.office_phone,
  224. "department_id":d.department_id,
  225. "department":department,
  226. "display_order":d.display_order,
  227. "yzy_unitid":d.yzy_unitid,
  228. "userid": d.userid,
  229. "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else ''
  230. })
  231. # 构建返回结果
  232. result = {
  233. "total": total_count,
  234. "page": page,
  235. "pageSize": pageSize,
  236. "totalPages": (total_count + pageSize - 1) // pageSize,
  237. "data": data_list,
  238. "code": 200,
  239. "msg": "查询成功"
  240. }
  241. return result
  242. except Exception as e:
  243. # 处理异常
  244. traceback.print_exc()
  245. return JSONResponse(status_code=404, content={
  246. 'code': 404,
  247. 'msg': str(e)
  248. })
  249. @router.get('/user/info/{id}')
  250. async def get_dict_data_by_type(
  251. id: str ,
  252. db: Session = Depends(get_db),
  253. body = Depends(remove_xss_json),
  254. user_id = Depends(valid_access_token)
  255. ):
  256. try:
  257. # 根据 dict_type 查询字典数据
  258. # dict_data = dict_type_get_dict_data_info(db,'three_proofing')
  259. query = db.query(EmergencyContactUser)
  260. # 添加查询条件
  261. # if dictType:
  262. query = query.filter(EmergencyContactUser.id==id)
  263. query = query.filter(EmergencyContactUser.del_flag != '2')
  264. d = query.first()
  265. department = id_get_contact_dept_info(db, d.department_id)
  266. if department is None:
  267. department = ''
  268. return JSONResponse(status_code=404, content={
  269. 'code': 404,
  270. 'msg': '用户部门未查到'
  271. })
  272. data_list = {
  273. "id": d.id,
  274. "name": d.name,
  275. "position": d.position,
  276. "mobile_phone": d.mobile_phone,
  277. "office_phone": d.office_phone,
  278. "department_id": d.department_id,
  279. "department": department,
  280. "display_order": d.display_order,
  281. "yzy_unitid": d.yzy_unitid,
  282. "userid": d.userid,
  283. "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else ''
  284. }
  285. # 构建返回结果
  286. result = {
  287. "data": data_list,
  288. "code": 200,
  289. "msg": "查询成功"
  290. }
  291. return result
  292. except Exception as e:
  293. # 处理异常
  294. traceback.print_exc()
  295. return JSONResponse(status_code=404, content={
  296. 'code': 404,
  297. 'msg': str(e)
  298. })
  299. @router.post('/user/create')
  300. async def create_dict_data(
  301. db: Session = Depends(get_db),
  302. body = Depends(remove_xss_json),
  303. user_id = Depends(valid_access_token)
  304. ):
  305. try:
  306. # 创建一个新的 SysDictData 实例
  307. display_order = 0
  308. if 'display_order' in body :
  309. display_order = body['display_order']
  310. if display_order=='':
  311. display_order = 0
  312. new_user_data = EmergencyContactUser(
  313. name=body['name'],
  314. position=body['position'],
  315. mobile_phone=body['mobile_phone'],
  316. office_phone=body['office_phone'],
  317. department_id=body['department_id'],
  318. display_order=display_order,
  319. yzy_unitid=body['yzy_unitid'],
  320. userid=body['userid'],
  321. create_by=user_id
  322. )
  323. # 添加到会话并提交
  324. db.add(new_user_data)
  325. db.commit()
  326. # 构建返回结果
  327. result = {
  328. "code": 200,
  329. "msg": "操作成功",
  330. "data": None
  331. }
  332. return result
  333. except Exception as e:
  334. # 处理异常
  335. traceback.print_exc()
  336. return JSONResponse(status_code=404, content={
  337. 'code': 404,
  338. 'msg': str(e)
  339. })
  340. @router.put("/user/update")
  341. async def updata_dict_type(
  342. db: Session = Depends(get_db),
  343. body = Depends(remove_xss_json),
  344. user_id = Depends(valid_access_token)
  345. ):
  346. try:
  347. # 从请求数据创建一个新的 SysDictType 实例
  348. query = db.query(EmergencyContactUser)
  349. query = query.filter(EmergencyContactUser.id == body['id'])
  350. query = query.filter(EmergencyContactUser.del_flag != '2')
  351. # query = db.query(SysDictData).filter(SysDictData.dict_code == form_data.dictCode)
  352. # query = db.query(SysDictData).filter(SysDictData.del_flag != '2')
  353. user_data = query.first()
  354. if not user_data:
  355. return JSONResponse(status_code=404, content={
  356. 'errcode': 404,
  357. 'errmsg': 'user不存在'
  358. })
  359. user_data.name=body['name']
  360. user_data.position = body['position']
  361. user_data.mobile_phone = body['mobile_phone']
  362. user_data.office_phone = body['office_phone']
  363. user_data.position = body['position']
  364. user_data.department_id = body['department_id']
  365. user_data.display_order = body['display_order']
  366. user_data.yzy_unitid = body['yzy_unitid']
  367. user_data.userid = body['userid']
  368. user_data.update_by = user_id
  369. # 添加到数据库会话并提交
  370. db.commit()
  371. # db.refresh(new_dict_type) # 可选,如果需要刷新实例状态
  372. # 构建并返回响应
  373. return {
  374. "code": 200,
  375. "msg": "操作成功",
  376. "data": None # 根据你的响应示例,data 为 null
  377. }
  378. except Exception as e:
  379. # 处理异常
  380. traceback.print_exc()
  381. return JSONResponse(status_code=404, content={
  382. 'code': 404,
  383. 'msg': str(e)
  384. })
  385. @router.delete("/user/delete/{id}") # 使用 ID 来标识要删除的接口
  386. async def delete_dict_data(
  387. id: str,
  388. db: Session = Depends(get_db),
  389. body = Depends(remove_xss_json),
  390. user_id = Depends(valid_access_token)
  391. ):
  392. try:
  393. # 从数据库中获取要删除的 OneShareApiEntity 实例
  394. query = db.query(EmergencyContactUser)
  395. query = query.filter(EmergencyContactUser.id == id)
  396. query = query.filter(EmergencyContactUser.del_flag != '2')
  397. user_data = query.first()
  398. # dict_data = db.query(SysDictData).filter(SysDictData.dict_code == dictCode and SysDictData.del_flag != '2').first()
  399. if not user_data:
  400. return JSONResponse(status_code=404, content={
  401. 'errcode': 404,
  402. 'errmsg': 'type不存在'
  403. })
  404. user_data.del_flag = '2'
  405. # 删除实例
  406. # db.delete(api)
  407. db.commit()
  408. # 构建并返回响应
  409. return {
  410. "code": 200,
  411. "msg": "操作成功",
  412. "data": None
  413. }
  414. except Exception as e:
  415. traceback.print_exc()
  416. return JSONResponse(status_code=404, content={
  417. 'code': 404,
  418. 'msg': str(e)
  419. })