risk_router.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  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 pydantic import BaseModel
  9. from datetime import datetime
  10. from database import get_db
  11. from typing import List
  12. from models import *
  13. from utils import *
  14. import json
  15. import traceback
  16. router = APIRouter()
  17. @router.get('/list')
  18. async def get_inspection_task_list(
  19. type: str = Query(None, description='类型'),
  20. cycle :str = Query(None, description='周期'),
  21. page: int = Query(1, gt=0, description='页码'),
  22. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  23. db: Session = Depends(get_db),
  24. user_id = Depends(valid_access_token)
  25. ):
  26. try:
  27. # 构建查询
  28. query = db.query(RiskManagementRiskTask)
  29. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  30. # 应用查询条件
  31. if type:
  32. query = query.filter(RiskManagementRiskTask.risk_type == type)
  33. if cycle:
  34. query = query.filter(RiskManagementRiskTask.task_cycle == cycle)
  35. # 计算总条目数
  36. total_items = query.count()
  37. # 排序
  38. query = query.order_by(RiskManagementRiskTask.create_time.desc())
  39. # 执行分页查询
  40. RiskTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  41. # 将查询结果转换为列表形式的字典
  42. RiskTasks_list = []
  43. for task in RiskTasks:
  44. if task.task_status=='3':
  45. task_status = '3' #'已完结'
  46. else:
  47. if datetime.now()<task.start_time:
  48. task_status = '0' #'未开始'
  49. elif task.start_time<=datetime.now()<=task.end_time:
  50. task_status = '1' #'进行中'
  51. else:
  52. task_status = '2' #'未完成'
  53. create_by = task.create_by
  54. create_by = db.query(SysUser).filter(SysUser.user_id==create_by).first()
  55. task_info = {
  56. "id": task.id,
  57. "task_number": task.task_number,
  58. "type": task.risk_type,
  59. "task_time": '%s-%s'%(task.start_time.strftime('%Y/%m/%d'),task.end_time.strftime('%Y/%m/%d')),
  60. "cycle": task.task_cycle,
  61. "task_range": task.task_range,
  62. "task_status": task_status,
  63. "create_by":create_by.nick_name,
  64. "create_time": task.create_time#.strftime('%Y-%m-%d')
  65. }
  66. RiskTasks_list.append(task_info)
  67. # 返回结果
  68. return {
  69. "code": 200,
  70. "msg": "成功",
  71. "data": RiskTasks_list,
  72. "total": total_items,
  73. "page": page,
  74. "pageSize": pageSize,
  75. "totalPages": (total_items + pageSize - 1) // pageSize
  76. }
  77. except Exception as e:
  78. # 处理异常
  79. raise HTTPException(status_code=500, detail=str(e))
  80. @router.get('/{id}')
  81. async def get_inspection_task(
  82. id: str ,
  83. db: Session = Depends(get_db),
  84. user_id = Depends(valid_access_token)
  85. ):
  86. try:
  87. # 构建查询
  88. query = db.query(RiskManagementRiskTask)
  89. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  90. # 应用查询条件
  91. if id:
  92. query = query.filter(RiskManagementRiskTask.id == id)
  93. # 执行查询
  94. task = query.first()
  95. if not task:
  96. detail = "任务不存在"
  97. raise HTTPException(status_code=404, detail="任务不存在")
  98. # 将查询结果转换为列表形式的字典
  99. if task.task_status == '3':
  100. task_status = '3' # '已完结'
  101. else:
  102. if datetime.now() < task.start_time:
  103. task_status = '0' # '未开始'
  104. elif task.start_time <= datetime.now() <= task.end_time:
  105. task_status = '1' # '进行中'
  106. else:
  107. task_status = '2' # '未完成'
  108. create_by = task.create_by
  109. create_by = db.query(SysUser).filter(SysUser.user_id == create_by).first()
  110. risk_task_result = {
  111. "id": task.id,
  112. "task_number": task.task_number,
  113. "type": task.risk_type,
  114. "task_time": '%s-%s'%(task.start_time.strftime('%Y/%m/%d'),task.end_time.strftime('%Y/%m/%d')),
  115. "cycle": task.task_cycle,
  116. "task_range": task.task_range,
  117. "task_status": task_status,
  118. "create_by":create_by.nick_name,
  119. "create_time": task.create_time.strftime('%Y-%m-%d')
  120. }
  121. # 返回结果
  122. return {
  123. "code": 200,
  124. "msg": "成功",
  125. "data": risk_task_result
  126. }
  127. except Exception as e:
  128. # 处理异常
  129. if str(e)=='':
  130. e = detail
  131. raise HTTPException(status_code=500, detail=str(e))
  132. @router.post('/create')
  133. async def create_inspection_task(
  134. db: Session = Depends(get_db),
  135. body = Depends(remove_xss_json),
  136. user_id = Depends(valid_access_token)
  137. ):
  138. try:
  139. cycle = body['cycle']
  140. # 0每年、1每月、2每周、3每日、4一次
  141. corn_query = body['corn_query']
  142. if cycle=='0':
  143. corn=f'0 0 {corn_query} *'
  144. elif cycle=='1':
  145. corn=f'0 0 {corn_query} * *'
  146. elif cycle == '2':
  147. corn = f'0 0 * * {corn_query}'
  148. elif cycle == '3':
  149. corn = f'0 0 * * *'
  150. else:
  151. corn=''
  152. # 创建新的预案记录
  153. new_task = RiskManagementRiskTask(
  154. risk_type=body['type'],
  155. start_time = body['start_time'],
  156. end_time = body['end_time'],
  157. task_cycle = cycle,
  158. corn_expression = corn,
  159. task_range = body['task_range'],
  160. task_status = '-1',
  161. create_by = user_id
  162. )
  163. # 添加到数据库会话并提交
  164. db.add(new_task)
  165. db.commit()
  166. db.refresh(new_task) # 可选,如果需要刷新实例状态
  167. new_task.task_number = f'YJFX{str(new_task.id).zfill(10)}'
  168. db.commit()
  169. # 返回创建成功的响应
  170. return {
  171. "code": 200,
  172. "msg": "成功",
  173. "data": None
  174. }
  175. except Exception as e:
  176. # 处理异常
  177. raise HTTPException(status_code=500, detail=str(e))
  178. @router.put('/update')
  179. async def update_inspection_task(
  180. db: Session = Depends(get_db),
  181. body = Depends(remove_xss_json),
  182. user_id = Depends(valid_access_token)
  183. ):
  184. try:
  185. # 提取请求数据
  186. query = db.query(RiskManagementRiskTask)
  187. query = query.filter(RiskManagementRiskTask.id == body['id'])
  188. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  189. task = query.first()
  190. if not task:
  191. detail = "任务不存在"
  192. raise HTTPException(status_code=404, detail="任务不存在")
  193. if 'cycle' in body:
  194. cycle = body['cycle']
  195. # 0每年、1每月、2每周、3每日、4一次
  196. corn_query = body['corn_query']
  197. if cycle == '0':
  198. corn = f'0 0 {corn_query} *'
  199. elif cycle == '1':
  200. corn = f'0 0 {corn_query} * *'
  201. elif cycle == '2':
  202. corn = f'0 0 * * {corn_query}'
  203. elif cycle == '3':
  204. corn = f'0 0 * * *'
  205. else:
  206. corn = ''
  207. task.inspection_cycle = cycle
  208. task.corn_expression = corn
  209. if 'type' in body:
  210. task.risk_type = body['type']
  211. if 'start_time' in body:
  212. task.start_time = body['start_time']
  213. if 'end_time' in body:
  214. task.end_time = body['end_time']
  215. if 'task_range' in body:
  216. task.task_range = body['task_range']
  217. if 'task_status' in body:
  218. task.task_status = body['task_status']
  219. if user_id:
  220. task.update_by = user_id
  221. # 更新到数据库会话并提交
  222. db.commit()
  223. db.refresh(task) # 可选,如果需要刷新实例状态
  224. # 返回创建成功的响应
  225. return {
  226. "code": 200,
  227. "msg": "成功",
  228. "data": None
  229. }
  230. except Exception as e:
  231. # 处理异常
  232. if str(e)=='':
  233. e = detail
  234. raise HTTPException(status_code=500, detail=str(e))
  235. @router.delete('/delete')
  236. async def delete_inspection_tasks(
  237. taskIds: list,
  238. db: Session = Depends(get_db),
  239. body = Depends(remove_xss_json),
  240. user_id = Depends(valid_access_token)
  241. ):
  242. try:
  243. # 提取请求数据
  244. query = db.query(RiskManagementRiskTask)
  245. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  246. query = query.filter(RiskManagementRiskTask.id.in_(taskIds))
  247. tasks = query.all()
  248. if not tasks:
  249. detail = "任务不存在"
  250. raise HTTPException(status_code=404, detail="任务不存在")
  251. for task in tasks:
  252. task.del_flag = '2'
  253. task.update_by=user_id
  254. # 更新到数据库会话并提交
  255. db.commit()
  256. # 返回创建成功的响应
  257. return {
  258. "code": 200,
  259. "msg": "删除成功",
  260. "data": None
  261. }
  262. except Exception as e:
  263. # 处理异常
  264. if str(e) == '':
  265. e = detail
  266. raise HTTPException(status_code=500, detail=str(e))
  267. @router.delete('/delete/{userId}')
  268. async def delete_inspection_task(
  269. userId: str,
  270. db: Session = Depends(get_db),
  271. body = Depends(remove_xss_json),
  272. user_id = Depends(valid_access_token)
  273. ):
  274. try:
  275. # 提取请求数据
  276. query = db.query(RiskManagementRiskTask)
  277. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  278. query = query.filter(RiskManagementRiskTask.id==userId)
  279. task = query.first()
  280. if not task:
  281. detail = "任务不存在"
  282. raise HTTPException(status_code=404, detail="任务不存在")
  283. task.del_flag = '2'
  284. task.update_by = user_id
  285. # 更新到数据库会话并提交
  286. db.commit()
  287. db.refresh(task) # 可选,如果需要刷新实例状态
  288. # 返回创建成功的响应
  289. return {
  290. "code": 200,
  291. "msg": "删除成功",
  292. "data": None
  293. }
  294. except Exception as e:
  295. # 处理异常
  296. if str(e) == '':
  297. e = detail
  298. raise HTTPException(status_code=500, detail=str(e))