risk_router.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  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. traceback.print_exc()
  80. raise HTTPException(status_code=500, detail=str(e))
  81. @router.get('/{id}')
  82. async def get_inspection_task(
  83. id: str ,
  84. db: Session = Depends(get_db),
  85. user_id = Depends(valid_access_token)
  86. ):
  87. try:
  88. # 构建查询
  89. query = db.query(RiskManagementRiskTask)
  90. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  91. # 应用查询条件
  92. if id:
  93. query = query.filter(RiskManagementRiskTask.id == id)
  94. # 执行查询
  95. task = query.first()
  96. if not task:
  97. detail = "任务不存在"
  98. raise HTTPException(status_code=404, detail="任务不存在")
  99. # 将查询结果转换为列表形式的字典
  100. if task.task_status == '3':
  101. task_status = '3' # '已完结'
  102. else:
  103. if datetime.now() < task.start_time:
  104. task_status = '0' # '未开始'
  105. elif task.start_time <= datetime.now() <= task.end_time:
  106. task_status = '1' # '进行中'
  107. else:
  108. task_status = '2' # '未完成'
  109. create_by = task.create_by
  110. create_by = db.query(SysUser).filter(SysUser.user_id == create_by).first()
  111. risk_task_result = {
  112. "id": task.id,
  113. "task_number": task.task_number,
  114. "type": task.risk_type,
  115. "task_time": '%s-%s'%(task.start_time.strftime('%Y/%m/%d'),task.end_time.strftime('%Y/%m/%d')),
  116. "cycle": task.task_cycle,
  117. "task_range": task.task_range,
  118. "task_status": task_status,
  119. "create_by":create_by.nick_name,
  120. "create_time": task.create_time.strftime('%Y-%m-%d')
  121. }
  122. # 返回结果
  123. return {
  124. "code": 200,
  125. "msg": "成功",
  126. "data": risk_task_result
  127. }
  128. except Exception as e:
  129. # 处理异常
  130. traceback.print_exc()
  131. if str(e)=='':
  132. e = detail
  133. raise HTTPException(status_code=500, detail=str(e))
  134. @router.post('/create')
  135. async def create_inspection_task(
  136. db: Session = Depends(get_db),
  137. body = Depends(remove_xss_json),
  138. user_id = Depends(valid_access_token)
  139. ):
  140. try:
  141. cycle = body['cycle']
  142. # 0每年、1每月、2每周、3每日、4一次
  143. corn_query = body['corn_query']
  144. if cycle=='0':
  145. corn=f'0 0 {corn_query} *'
  146. elif cycle=='1':
  147. corn=f'0 0 {corn_query} * *'
  148. elif cycle == '2':
  149. corn = f'0 0 * * {corn_query}'
  150. elif cycle == '3':
  151. corn = f'0 0 * * *'
  152. else:
  153. corn=''
  154. # 创建新的预案记录
  155. new_task = RiskManagementRiskTask(
  156. risk_type=body['type'],
  157. start_time = body['start_time'],
  158. end_time = body['end_time'],
  159. task_cycle = cycle,
  160. corn_expression = corn,
  161. task_range = body['task_range'],
  162. task_status = '-1',
  163. create_by = user_id
  164. )
  165. # 添加到数据库会话并提交
  166. db.add(new_task)
  167. db.commit()
  168. db.refresh(new_task) # 可选,如果需要刷新实例状态
  169. new_task.task_number = f'YJFX{str(new_task.id).zfill(10)}'
  170. db.commit()
  171. # 返回创建成功的响应
  172. return {
  173. "code": 200,
  174. "msg": "成功",
  175. "data": None
  176. }
  177. except Exception as e:
  178. # 处理异常
  179. traceback.print_exc()
  180. raise HTTPException(status_code=500, detail=str(e))
  181. @router.put('/update')
  182. async def update_inspection_task(
  183. db: Session = Depends(get_db),
  184. body = Depends(remove_xss_json),
  185. user_id = Depends(valid_access_token)
  186. ):
  187. try:
  188. # 提取请求数据
  189. query = db.query(RiskManagementRiskTask)
  190. query = query.filter(RiskManagementRiskTask.id == body['id'])
  191. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  192. task = query.first()
  193. if not task:
  194. detail = "任务不存在"
  195. raise HTTPException(status_code=404, detail="任务不存在")
  196. if 'cycle' in body:
  197. cycle = body['cycle']
  198. # 0每年、1每月、2每周、3每日、4一次
  199. corn_query = body['corn_query']
  200. if cycle == '0':
  201. corn = f'0 0 {corn_query} *'
  202. elif cycle == '1':
  203. corn = f'0 0 {corn_query} * *'
  204. elif cycle == '2':
  205. corn = f'0 0 * * {corn_query}'
  206. elif cycle == '3':
  207. corn = f'0 0 * * *'
  208. else:
  209. corn = ''
  210. task.inspection_cycle = cycle
  211. task.corn_expression = corn
  212. if 'type' in body:
  213. task.risk_type = body['type']
  214. if 'start_time' in body:
  215. task.start_time = body['start_time']
  216. if 'end_time' in body:
  217. task.end_time = body['end_time']
  218. if 'task_range' in body:
  219. task.task_range = body['task_range']
  220. if 'task_status' in body:
  221. task.task_status = body['task_status']
  222. if user_id:
  223. task.update_by = user_id
  224. # 更新到数据库会话并提交
  225. db.commit()
  226. db.refresh(task) # 可选,如果需要刷新实例状态
  227. # 返回创建成功的响应
  228. return {
  229. "code": 200,
  230. "msg": "成功",
  231. "data": None
  232. }
  233. except Exception as e:
  234. # 处理异常
  235. traceback.print_exc()
  236. if str(e)=='':
  237. e = detail
  238. raise HTTPException(status_code=500, detail=str(e))
  239. @router.delete('/delete')
  240. async def delete_inspection_tasks(
  241. taskIds: list,
  242. db: Session = Depends(get_db),
  243. body = Depends(remove_xss_json),
  244. user_id = Depends(valid_access_token)
  245. ):
  246. try:
  247. # 提取请求数据
  248. query = db.query(RiskManagementRiskTask)
  249. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  250. query = query.filter(RiskManagementRiskTask.id.in_(taskIds))
  251. tasks = query.all()
  252. if not tasks:
  253. detail = "任务不存在"
  254. raise HTTPException(status_code=404, detail="任务不存在")
  255. for task in tasks:
  256. task.del_flag = '2'
  257. task.update_by=user_id
  258. # 更新到数据库会话并提交
  259. db.commit()
  260. # 返回创建成功的响应
  261. return {
  262. "code": 200,
  263. "msg": "删除成功",
  264. "data": None
  265. }
  266. except Exception as e:
  267. # 处理异常
  268. if str(e) == '':
  269. e = detail
  270. raise HTTPException(status_code=500, detail=str(e))
  271. @router.delete('/delete/{userId}')
  272. async def delete_inspection_task(
  273. userId: str,
  274. db: Session = Depends(get_db),
  275. body = Depends(remove_xss_json),
  276. user_id = Depends(valid_access_token)
  277. ):
  278. try:
  279. # 提取请求数据
  280. query = db.query(RiskManagementRiskTask)
  281. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  282. query = query.filter(RiskManagementRiskTask.id==userId)
  283. task = query.first()
  284. if not task:
  285. detail = "任务不存在"
  286. raise HTTPException(status_code=404, detail="任务不存在")
  287. task.del_flag = '2'
  288. task.update_by = user_id
  289. # 更新到数据库会话并提交
  290. db.commit()
  291. db.refresh(task) # 可选,如果需要刷新实例状态
  292. # 返回创建成功的响应
  293. return {
  294. "code": 200,
  295. "msg": "删除成功",
  296. "data": None
  297. }
  298. except Exception as e:
  299. # 处理异常
  300. traceback.print_exc()
  301. if str(e) == '':
  302. e = detail
  303. raise HTTPException(status_code=500, detail=str(e))