risk_router.py 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query, HTTPException, status,BackgroundTasks
  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. from utils.ry_system_util import *
  15. from utils.riskManagement_uitl import *
  16. import json
  17. import traceback
  18. router = APIRouter()
  19. @router.get('/list')
  20. async def get_inspection_task_list(
  21. type: str = Query(None, description='类型'),
  22. cycle :str = Query(None, description='周期'),
  23. page: int = Query(1, gt=0, description='页码'),
  24. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  25. db: Session = Depends(get_db),
  26. user_id = Depends(valid_access_token)
  27. ):
  28. try:
  29. # 构建查询
  30. query = db.query(RiskManagementRiskTask)
  31. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  32. # 应用查询条件
  33. if type:
  34. query = query.filter(RiskManagementRiskTask.risk_type == type)
  35. if cycle:
  36. query = query.filter(RiskManagementRiskTask.task_cycle == cycle)
  37. # 计算总条目数
  38. total_items = query.count()
  39. # 排序
  40. query = query.order_by(RiskManagementRiskTask.create_time.desc())
  41. # 执行分页查询
  42. RiskTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  43. # 将查询结果转换为列表形式的字典
  44. RiskTasks_list = []
  45. for task in RiskTasks:
  46. if task.task_status=='3':
  47. task_status = '3' #'已完结'
  48. else:
  49. if datetime.now()<task.start_time:
  50. task_status = '0' #'未开始'
  51. elif task.start_time<=datetime.now()<=task.end_time:
  52. task_status = '1' #'进行中'
  53. else:
  54. task_status = '2' #'未完成'
  55. create_by = task.create_by
  56. create_by = db.query(SysUser).filter(SysUser.user_id==create_by).first()
  57. nick_name = None
  58. if create_by:
  59. nick_name=create_by.nick_name
  60. task_info = {
  61. "id": task.id,
  62. "task_number": task.task_number,
  63. "type": task.risk_type,
  64. "task_time": '%s-%s'%(task.start_time.strftime('%Y/%m/%d'),task.end_time.strftime('%Y/%m/%d')),
  65. "cycle": task.task_cycle,
  66. "task_range": task.task_range,
  67. "corn_query":task.corn_query,
  68. "task_status": task_status,
  69. "create_by":nick_name,
  70. "create_time": task.create_time#.strftime('%Y-%m-%d')
  71. }
  72. RiskTasks_list.append(task_info)
  73. # 返回结果
  74. return {
  75. "code": 200,
  76. "msg": "成功",
  77. "data": RiskTasks_list,
  78. "total": total_items,
  79. "page": page,
  80. "pageSize": pageSize,
  81. "totalPages": (total_items + pageSize - 1) // pageSize
  82. }
  83. except Exception as e:
  84. # 处理异常
  85. traceback.print_exc()
  86. raise HTTPException(status_code=500, detail=str(e))
  87. @router.get('/{id}')
  88. async def get_inspection_task(
  89. id: str ,
  90. db: Session = Depends(get_db),
  91. user_id = Depends(valid_access_token)
  92. ):
  93. try:
  94. # 构建查询
  95. query = db.query(RiskManagementRiskTask)
  96. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  97. # 应用查询条件
  98. if id:
  99. query = query.filter(RiskManagementRiskTask.id == id)
  100. # 执行查询
  101. task = query.first()
  102. if not task:
  103. detail = "任务不存在"
  104. raise HTTPException(status_code=404, detail="任务不存在")
  105. # 将查询结果转换为列表形式的字典
  106. if task.task_status == '3':
  107. task_status = '3' # '已完结'
  108. else:
  109. if datetime.now() < task.start_time:
  110. task_status = '0' # '未开始'
  111. elif task.start_time <= datetime.now() <= task.end_time:
  112. task_status = '1' # '进行中'
  113. else:
  114. task_status = '2' # '未完成'
  115. create_by = task.create_by
  116. create_by = db.query(SysUser).filter(SysUser.user_id == create_by).first()
  117. nick_name = None
  118. if create_by:
  119. nick_name = create_by.nick_name
  120. risk_task_result = {
  121. "id": task.id,
  122. "task_number": task.task_number,
  123. "type": task.risk_type,
  124. "task_time": '%s-%s'%(task.start_time.strftime('%Y/%m/%d'),task.end_time.strftime('%Y/%m/%d')),
  125. "cycle": task.task_cycle,
  126. "task_range": task.task_range,
  127. "corn_query":task.corn_query,
  128. "task_status": task_status,
  129. "create_by":nick_name,
  130. "create_time": task.create_time.strftime('%Y-%m-%d')
  131. }
  132. # 返回结果
  133. return {
  134. "code": 200,
  135. "msg": "成功",
  136. "data": risk_task_result
  137. }
  138. except Exception as e:
  139. # 处理异常
  140. traceback.print_exc()
  141. if str(e)=='':
  142. e = detail
  143. raise HTTPException(status_code=500, detail=str(e))
  144. @router.post('/create')
  145. async def create_inspection_task(
  146. background_tasks: BackgroundTasks,
  147. db: Session = Depends(get_db),
  148. body = Depends(remove_xss_json),
  149. user_id = Depends(valid_access_token)
  150. ):
  151. try:
  152. cycle = body['cycle']
  153. # 0每年、1每月、2每周、3每日、4一次
  154. corn_query = body['corn_query']
  155. if cycle=='0':
  156. corn=f'0 0 {corn_query} *'
  157. elif cycle=='1':
  158. corn=f'0 0 {corn_query} * *'
  159. elif cycle == '2':
  160. corn = f'0 0 * * {corn_query}'
  161. elif cycle == '3':
  162. corn = f'0 0 * * *'
  163. else:
  164. corn=''
  165. # 创建新的预案记录
  166. new_task = RiskManagementRiskTask(
  167. risk_type=body['type'],
  168. start_time = body['start_time'],
  169. end_time = body['end_time'],
  170. task_cycle = cycle,
  171. corn_query= corn_query,
  172. corn_expression = corn,
  173. task_range = body['task_range'],
  174. task_status = '-1',
  175. create_by = user_id
  176. )
  177. # 添加到数据库会话并提交
  178. db.add(new_task)
  179. db.commit()
  180. db.refresh(new_task) # 可选,如果需要刷新实例状态
  181. new_task.task_number = f'YJFX{str(new_task.id).zfill(10)}'
  182. db.commit()
  183. background_tasks.add_task(create_risk_children_task,db,new_task,corn_query)
  184. # 返回创建成功的响应
  185. return {
  186. "code": 200,
  187. "msg": "成功",
  188. "data": None
  189. }
  190. except Exception as e:
  191. # 处理异常
  192. traceback.print_exc()
  193. raise HTTPException(status_code=500, detail=str(e))
  194. @router.put('/update')
  195. async def update_inspection_task(
  196. db: Session = Depends(get_db),
  197. body = Depends(remove_xss_json),
  198. user_id = Depends(valid_access_token)
  199. ):
  200. try:
  201. # 提取请求数据
  202. query = db.query(RiskManagementRiskTask)
  203. query = query.filter(RiskManagementRiskTask.id == body['id'])
  204. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  205. task = query.first()
  206. if not task:
  207. detail = "任务不存在"
  208. raise HTTPException(status_code=404, detail="任务不存在")
  209. # if 'cycle' in body:
  210. # cycle = body['cycle']
  211. # # 0每年、1每月、2每周、3每日、4一次
  212. # corn_query = body['corn_query']
  213. # if cycle == '0':
  214. # corn = f'0 0 {corn_query} *'
  215. # elif cycle == '1':
  216. # corn = f'0 0 {corn_query} * *'
  217. # elif cycle == '2':
  218. # corn = f'0 0 * * {corn_query}'
  219. # elif cycle == '3':
  220. # corn = f'0 0 * * *'
  221. # else:
  222. # corn = ''
  223. # task.inspection_cycle = cycle
  224. # task.corn_expression = corn
  225. if 'type' in body:
  226. task.risk_type = body['type']
  227. # if 'start_time' in body:
  228. # task.start_time = body['start_time']
  229. # if 'end_time' in body:
  230. # task.end_time = body['end_time']
  231. if 'task_range' in body:
  232. task.task_range = body['task_range']
  233. if 'task_status' in body:
  234. task.task_status = body['task_status']
  235. if user_id:
  236. task.update_by = user_id
  237. # 更新到数据库会话并提交
  238. db.commit()
  239. db.refresh(task) # 可选,如果需要刷新实例状态
  240. # 返回创建成功的响应
  241. return {
  242. "code": 200,
  243. "msg": "成功",
  244. "data": None
  245. }
  246. except Exception as e:
  247. # 处理异常
  248. traceback.print_exc()
  249. if str(e)=='':
  250. e = detail
  251. raise HTTPException(status_code=500, detail=str(e))
  252. @router.delete('/delete')
  253. async def delete_inspection_tasks(
  254. taskIds: list,
  255. db: Session = Depends(get_db),
  256. body = Depends(remove_xss_json),
  257. user_id = Depends(valid_access_token)
  258. ):
  259. try:
  260. # 提取请求数据
  261. query = db.query(RiskManagementRiskTask)
  262. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  263. query = query.filter(RiskManagementRiskTask.id.in_(taskIds))
  264. tasks = query.all()
  265. if not tasks:
  266. detail = "任务不存在"
  267. raise HTTPException(status_code=404, detail="任务不存在")
  268. for task in tasks:
  269. task.del_flag = '2'
  270. task.update_by=user_id
  271. # 更新到数据库会话并提交
  272. db.commit()
  273. # 返回创建成功的响应
  274. return {
  275. "code": 200,
  276. "msg": "删除成功",
  277. "data": None
  278. }
  279. except Exception as e:
  280. # 处理异常
  281. if str(e) == '':
  282. e = detail
  283. raise HTTPException(status_code=500, detail=str(e))
  284. @router.delete('/delete/{userId}')
  285. async def delete_inspection_task(
  286. userId: str,
  287. db: Session = Depends(get_db),
  288. body = Depends(remove_xss_json),
  289. user_id = Depends(valid_access_token)
  290. ):
  291. try:
  292. # 提取请求数据
  293. query = db.query(RiskManagementRiskTask)
  294. query = query.filter(RiskManagementRiskTask.del_flag != '2')
  295. query = query.filter(RiskManagementRiskTask.id==userId)
  296. task = query.first()
  297. if not task:
  298. detail = "任务不存在"
  299. raise HTTPException(status_code=404, detail="任务不存在")
  300. task.del_flag = '2'
  301. task.update_by = user_id
  302. # 更新到数据库会话并提交
  303. db.commit()
  304. db.refresh(task) # 可选,如果需要刷新实例状态
  305. # 返回创建成功的响应
  306. return {
  307. "code": 200,
  308. "msg": "删除成功",
  309. "data": None
  310. }
  311. except Exception as e:
  312. # 处理异常
  313. traceback.print_exc()
  314. if str(e) == '':
  315. e = detail
  316. raise HTTPException(status_code=500, detail=str(e))
  317. ####小屏子任务查询
  318. @router.get('/children/task/list')
  319. async def get_risk_task_list(
  320. type: str =Query(None, description='类型'),
  321. page: int = Query(1, gt=0, description='页码'),
  322. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  323. db: Session = Depends(get_db),
  324. user_id = Depends(valid_access_token)
  325. ):
  326. try:
  327. # 构建查询
  328. # 查询用户负责层级
  329. task_range = user_id_get_task_range(db,user_id)
  330. #查询未办结巡查任务列表
  331. Task_list = db.query(RiskManagementRiskTask)\
  332. .filter(RiskManagementRiskTask.del_flag!='2')\
  333. .filter(RiskManagementRiskTask.task_range.in_(task_range))\
  334. .filter(RiskManagementRiskTask.task_status!='3').all()
  335. #获取所有巡查任务id
  336. task_ids = [i.id for i in Task_list]
  337. #用户所有负责的区域
  338. user_area_code_list = db.query(RiskManagementInspectionUser)\
  339. .filter(RiskManagementInspectionUser.del_flag!='2')\
  340. .filter(RiskManagementInspectionUser.user_id==user_id).all()
  341. user_area_codes = [i.area_code for i in user_area_code_list]
  342. #查询子任务
  343. query = db.query(RiskManagementRiskTaskChildrenTask)
  344. query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2')
  345. # 应用查询条件
  346. # 查询小于今天
  347. query = query.filter(RiskManagementRiskTaskChildrenTask.tsak_time <=datetime.now())
  348. # 查询层级、未办结子任务
  349. query = query.filter(RiskManagementRiskTaskChildrenTask.task_range.in_(task_range))
  350. query = query.filter(RiskManagementRiskTaskChildrenTask.task_id.in_(task_ids))
  351. # 计算总条目数
  352. if type:
  353. query = query.filter(RiskManagementRiskTaskChildrenTask.type==type)
  354. total_items = query.count()
  355. # 排序
  356. query = query.order_by(RiskManagementRiskTaskChildrenTask.tsak_time.asc())
  357. # 执行分页查询
  358. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  359. # 将查询结果转换为列表形式的字典
  360. InspectionTasks_list = []
  361. for task in InspectionTasks:
  362. # 判断这个任务该user_id完成了没
  363. tasklog = db.query(RiskManagementRiskTaskChildrenTaskLog).\
  364. filter(RiskManagementRiskTaskChildrenTaskLog.del_flag!='2').\
  365. filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id==task.id).\
  366. filter(RiskManagementRiskTaskChildrenTaskLog.area_code.in_(user_area_codes)).all()
  367. task_area_code_list = [i.area_code for i in tasklog]
  368. query = db.query(RiskManagementInspectionUser)\
  369. .filter(RiskManagementInspectionUser.del_flag!='2')\
  370. .filter(RiskManagementInspectionUser.user_id==user_id)
  371. if task.task_range == '0' and '440900000000' not in task_area_code_list:
  372. user_range_area_codes= ['440900000000']
  373. elif task.task_range == '1':
  374. query = query.filter(
  375. and_(RiskManagementInspectionUser.area_code.like('%000000'),
  376. RiskManagementInspectionUser.area_code.notlike('%00000000'),
  377. ~RiskManagementInspectionUser.area_code.in_(task_area_code_list)))
  378. user_range_area_codes= list({i.area_code for i in query.all()})
  379. elif task.task_range == '2':
  380. query = query.filter(and_(RiskManagementInspectionUser.area_code.like('%000'),
  381. RiskManagementInspectionUser.area_code.notlike('%000000'),
  382. ~RiskManagementInspectionUser.area_code.in_(task_area_code_list)))
  383. user_range_area_codes= list({i.area_code for i in query.all()})
  384. elif task.task_range == '3':
  385. query = query.filter(RiskManagementInspectionUser.area_code.notlike('%000'),
  386. ~RiskManagementInspectionUser.area_code.in_(task_area_code_list))
  387. user_range_area_codes= list({i.area_code for i in query.all()})
  388. else:
  389. user_range_area_codes= []
  390. for area_code in user_range_area_codes:
  391. task_info = {
  392. "id": task.id,
  393. "type": task.type,
  394. "task_range": task.task_range,
  395. "cycle": task.cycle,
  396. "area_code":area_code,
  397. "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
  398. "task_time": task.tsak_time.strftime('%Y-%m-%d'),
  399. "create_time": task.create_time.strftime('%Y-%m-%d')
  400. }
  401. InspectionTasks_list.append(task_info)
  402. # 返回结果
  403. return {
  404. "code": 200,
  405. "msg": "成功",
  406. "data": InspectionTasks_list,
  407. "total": total_items,
  408. "page": page,
  409. "pageSize": pageSize,
  410. "totalPages": (total_items + pageSize - 1) // pageSize
  411. }
  412. except Exception as e:
  413. # 处理异常
  414. traceback.print_exc()
  415. raise HTTPException(status_code=500, detail=str(e))
  416. ##日历
  417. @router.get('/children/task/calendar/list')
  418. async def get_inspection_task_list(
  419. year_1: int =Query(None, description='年份'),
  420. month_1: int =Query(None, description='月份'),
  421. # page: int = Query(1, gt=0, description='页码'),
  422. # pageSize: int = Query(10, gt=0, description='每页条目数量'),
  423. db: Session = Depends(get_db),
  424. user_id = Depends(valid_access_token)
  425. ):
  426. try:
  427. # 构建查询
  428. import datetime as datetime_1
  429. task_range = user_id_get_task_range(db,user_id)
  430. Task_list = db.query(RiskManagementRiskTask).\
  431. filter(RiskManagementRiskTask.del_flag!='2').\
  432. filter(RiskManagementRiskTask.task_range.in_(task_range)).all() #.filter(RiskManagementInspectionTask.task_status!='3')
  433. task_ids = [i.id for i in Task_list]
  434. user_area_code_list = db.query(RiskManagementInspectionUser).\
  435. filter(RiskManagementInspectionUser.del_flag!='2').\
  436. filter(RiskManagementInspectionUser.user_id==user_id).all()
  437. user_area_codes = [i.area_code for i in user_area_code_list]
  438. query = db.query(RiskManagementRiskTaskChildrenTask)
  439. query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2')
  440. # 应用查询条件
  441. current_date = datetime.today()
  442. if year_1 is None:
  443. year_1 =current_date.year
  444. if month_1 is None:
  445. month_1 = current_date.month
  446. if month_1 == 12:
  447. query = query.filter(RiskManagementRiskTaskChildrenTask.tsak_time < datetime_1.date(year_1+1, 1, 1))
  448. else:
  449. query = query.filter(RiskManagementRiskTaskChildrenTask.tsak_time < datetime_1.date(year_1, month_1 + 1, 1))
  450. query = query.filter(RiskManagementRiskTaskChildrenTask.tsak_time >= datetime_1.date(year_1, month_1, 1))
  451. # query = query.filter(RiskManagementInspectionTaskChildrenTask.tsak_time <=datetime.now())
  452. query = query.filter(RiskManagementRiskTaskChildrenTask.task_range.in_(task_range))
  453. query = query.filter(RiskManagementRiskTaskChildrenTask.task_id.in_(task_ids))
  454. # 计算总条目数
  455. total_items = query.count()
  456. print(total_items)
  457. result = []
  458. # 获取指定月份的第一天是周几
  459. # first_day = datetime.date(yaer_1, month_1, 1)
  460. # 计算该月的天数
  461. if month_1 == 12:
  462. number_of_days = (datetime_1.date(year_1+1, 1, 1) - datetime_1.timedelta(days=1)).day
  463. else:
  464. number_of_days = (datetime_1.date(year_1, month_1 + 1, 1) - datetime_1.timedelta(days=1)).day
  465. # 遍历该月的每一天
  466. for day in range(1, number_of_days + 1):
  467. # 创建日期对象
  468. date_obj = datetime_1.date(year_1, month_1, day)
  469. # 获取星期(0是周一,6是周日)
  470. week_day = date_obj.weekday()
  471. # 将星期转换为中文
  472. week_day_cn = "一二三四五六日"[week_day]
  473. data = {"day":day,"date":f"{year_1}-{month_1}-{day}","week":f'周{week_day_cn}',"status":0}
  474. if date_obj==datetime_1.date.today():
  475. data['status']=4
  476. # 排序
  477. # total_items = query.count()
  478. # print( '前',total_items)
  479. # print(datetime_1.date(year_1, month_1, day))
  480. query_1 = query.filter(
  481. RiskManagementRiskTaskChildrenTask.tsak_time == datetime_1.date(year_1, month_1, day))
  482. # query = query.order_by(RiskManagementInspectionTaskChildrenTask.tsak_time.asc())
  483. # total_items = query_1.count()
  484. # print( '后',total_items)
  485. InspectionTasks = query_1.all()
  486. # 将查询结果转换为列表形式的字典
  487. InspectionTasks_list = []
  488. for task in InspectionTasks:
  489. # 判断这个任务该user_id完成了没
  490. # tasklog = db.query(RiskManagementInspectionTaskChildrenTaskLog).\
  491. # filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag!='2').\
  492. # filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id==task.id).\
  493. # filter(RiskManagementInspectionTaskChildrenTaskLog.area_code.in_(user_area_codes)).all()
  494. # task_area_code_list = [i.area_code for i in tasklog]
  495. query_2 = db.query(RiskManagementInspectionUser).\
  496. filter(RiskManagementInspectionUser.del_flag!='2').\
  497. filter(RiskManagementInspectionUser.user_id==user_id)
  498. if task.task_range == '0':
  499. user_range_area_codes= ['440900000000']
  500. elif task.task_range == '1':
  501. query_2 = query_2.filter(
  502. and_(RiskManagementInspectionUser.area_code.like('%000000'),
  503. RiskManagementInspectionUser.area_code.notlike('%00000000')))
  504. user_range_area_codes= list({i.area_code for i in query_2.all()})
  505. elif task.task_range == '2':
  506. query_2 = query_2.filter(and_(RiskManagementInspectionUser.area_code.like('%000'),
  507. RiskManagementInspectionUser.area_code.notlike('%000000')))
  508. user_range_area_codes= list({i.area_code for i in query_2.all()})
  509. elif task.task_range == '3':
  510. query_2 = query_2.filter(RiskManagementInspectionUser.area_code.notlike('%000'))
  511. user_range_area_codes= list({i.area_code for i in query_2.all()})
  512. else:
  513. user_range_area_codes= []
  514. print(task.task_range)
  515. print(user_range_area_codes)
  516. for area_code in user_range_area_codes:
  517. tasklog = db.query(RiskManagementRiskTaskChildrenTaskLog). \
  518. filter(RiskManagementRiskTaskChildrenTaskLog.del_flag != '2'). \
  519. filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id == task.id). \
  520. filter(RiskManagementRiskTaskChildrenTaskLog.area_code==area_code).first()
  521. task_info = {
  522. "id": task.id,
  523. "type": task.type,
  524. "cycle": task.cycle,
  525. "area_code":area_code,
  526. "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
  527. "task_status": tasklog is not None,
  528. "task_time": task.tsak_time.strftime('%Y-%m-%d'),
  529. "create_time": task.create_time.strftime('%Y-%m-%d %H:%M')
  530. }
  531. if tasklog :
  532. task_info['create_time'] = tasklog.create_time.strftime('%Y-%m-%d %H:%M')
  533. if task.tsak_time<datetime.today() and data['status']<1:
  534. data['status'] = 1 #有事已完成
  535. # elif tasklog.tsak_time > datetime.today():
  536. # data['status'] = 3 # 未来有事
  537. else:
  538. if task.tsak_time < datetime.today() and data['status'] < 2:
  539. data['status'] = 2 # 有事未完成
  540. elif task.tsak_time > datetime.today():
  541. data['status'] = 3 # 未来有事
  542. InspectionTasks_list.append(task_info)
  543. data['task_list']=InspectionTasks_list
  544. result.append(data)
  545. # 返回结果
  546. return {
  547. "code": 200,
  548. "msg": "成功",
  549. "data": result
  550. }
  551. except Exception as e:
  552. # 处理异常
  553. traceback.print_exc()
  554. raise HTTPException(status_code=500, detail=str(e))
  555. @router.get('/children/task/records')
  556. async def get_children_task_records_list(
  557. type: str =Query(None, description='类型'),
  558. page: int = Query(1, gt=0, description='页码'),
  559. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  560. db: Session = Depends(get_db),
  561. user_id = Depends(valid_access_token)
  562. ):
  563. try:
  564. # 获取子任务id
  565. query = db.query(RiskManagementRiskTaskChildrenTask)
  566. query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2')
  567. if type:
  568. query = query.filter(RiskManagementRiskTaskChildrenTask.type==type)
  569. children_ids = [i.id for i in query.all()]
  570. print(children_ids)
  571. # 构建查询
  572. query = db.query(RiskManagementRiskTaskChildrenTaskLog)
  573. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.del_flag != '2')
  574. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.user_id == user_id)
  575. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id.in_(children_ids))
  576. total_items = query.count()
  577. # 排序
  578. query = query.order_by(RiskManagementRiskTaskChildrenTaskLog.create_time.desc())
  579. # 执行分页查询
  580. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  581. # 将查询结果转换为列表形式的字典
  582. InspectionTasks_list = []
  583. for task in InspectionTasks:
  584. children_task = risk_task_children_task_id_get_risk_task_children_task_info(db,task.children_task_id)
  585. task_info = {
  586. "id": task.children_task_id,
  587. "type": children_task.type,
  588. "task_range": children_task.task_range,
  589. "cycle": children_task.cycle,
  590. "area_code": task.area_code,
  591. "area": area_code_get_ancestors_names(db, area_code_get_area_info(db, task.area_code)),
  592. "task_time": children_task.tsak_time.strftime('%Y-%m-%d'),
  593. "create_time": task.create_time.strftime('%Y-%m-%d %H:%M')
  594. }
  595. InspectionTasks_list.append(task_info)
  596. # 返回结果
  597. return {
  598. "code": 200,
  599. "msg": "成功",
  600. "data": InspectionTasks_list,
  601. "total": total_items,
  602. "page": page,
  603. "pageSize": pageSize,
  604. "totalPages": (total_items + pageSize - 1) // pageSize
  605. }
  606. except Exception as e:
  607. # 处理异常
  608. traceback.print_exc()
  609. raise HTTPException(status_code=500, detail=str(e))
  610. @router.get('/children/task/result/{children_task_id}')
  611. async def get_children_task_result(
  612. children_task_id: str ,
  613. db: Session = Depends(get_db),
  614. page: int = Query(1, gt=0, description='页码'),
  615. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  616. user_id = Depends(valid_access_token)
  617. ):
  618. try:
  619. # 构建查询
  620. query = db.query(RiskManagementRiskTaskChildrenTaskResult)
  621. query = query.filter(RiskManagementRiskTaskChildrenTaskResult.del_flag != '2')
  622. # 应用查询条件
  623. query = query.filter(RiskManagementRiskTaskChildrenTaskResult.children_task_id == children_task_id)
  624. # 计算总条目数
  625. total_items = query.count()
  626. # 排序
  627. query = query.order_by(RiskManagementRiskTaskChildrenTaskResult.create_time.desc())
  628. # 执行分页查询
  629. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  630. InspectionTasks_list = []
  631. for task in InspectionTasks:
  632. area_code = task.area_code
  633. area = area_code_get_area_info(db, area_code)
  634. area = area_code_get_ancestors_names(db, area)
  635. task_info = {
  636. "id": task.id,
  637. # "children_task_id": task.children_task_id,
  638. "type":risk_task_children_task_id_get_risk_task_children_task_info(db,task.children_task_id).type,
  639. "point_name": task.inspection_point_name,
  640. # "area": area,
  641. # "create_time": task.create_time.strftime('%Y-%m-%d'),
  642. # "nick_name": task.nick_name,
  643. "task_result": task.inspection_result,
  644. "remark": task.remark,
  645. "fileList": get_file_query_fun(db=db, from_scenario='RiskManagementRiskTaskChildrenTaskResult',
  646. foreign_key=task.id)
  647. }
  648. InspectionTasks_list.append(task_info)
  649. # 返回结果
  650. return {
  651. "code": 200,
  652. "msg": "成功",
  653. "data": InspectionTasks_list,
  654. "total": total_items,
  655. "page": page,
  656. "pageSize": pageSize,
  657. "totalPages": (total_items + pageSize - 1) // pageSize
  658. }
  659. except Exception as e:
  660. # 处理异常
  661. traceback.print_exc()
  662. raise HTTPException(status_code=500, detail=str(e))
  663. @router.post('/children/task/result/create')
  664. async def create_inspection_task(
  665. db: Session = Depends(get_db),
  666. body = Depends(remove_xss_json),
  667. user_id = Depends(valid_access_token)
  668. ):
  669. try:
  670. children_task_id = body['children_task_id']
  671. result = body['result']
  672. area_code = body['area_code']
  673. area =area_code_get_ancestors_names(db, area_code_get_area_info(db, area_code))
  674. # task_time = body['task_time']
  675. # 创建新的
  676. new_task_log = RiskManagementRiskTaskChildrenTaskLog(
  677. id=new_guid(),
  678. children_task_id=children_task_id,
  679. area_code = area_code,
  680. area = area,
  681. task_status = '1',
  682. user_id = user_id,
  683. nick_name = user_id_get_user_info(db,user_id).nick_name,
  684. create_by = user_id
  685. )
  686. for info in result:
  687. new_file_list = info['fileList']
  688. inspection_point_name= info['point_name']
  689. inspection_result = info['task_result']
  690. remark = info['remark']
  691. new_task_result = RiskManagementRiskTaskChildrenTaskResult(
  692. id=new_guid(),
  693. children_task_id=children_task_id,
  694. inspection_point_name=inspection_point_name,
  695. area_code=area_code,
  696. inspection_result=inspection_result,
  697. remark = remark,
  698. user_id = user_id,
  699. nick_name = user_id_get_user_info(db,user_id).nick_name,
  700. create_by = user_id
  701. )
  702. db.add(new_task_result)
  703. for file in new_file_list:
  704. file_name = file['file_name']
  705. file_name_desc = file['file_name_desc']
  706. status = file['status']
  707. new_file = RiskManagementFile(
  708. file_id=new_guid(),
  709. foreign_key=new_task_result.id,
  710. from_scenario='RiskManagementRiskTaskChildrenTaskResult',
  711. file_name=file_name,
  712. file_name_desc=file_name_desc,
  713. status=status
  714. )
  715. db.add(new_file)
  716. # 添加到数据库会话并提交
  717. db.add(new_task_log)
  718. db.commit()
  719. # 标记消息已读
  720. child_task_info = db.query(RiskManagementRiskTaskChildrenTask).filter(RiskManagementRiskTaskChildrenTask.id == children_task_id).first()
  721. if child_task_info is not None:
  722. logger.info("标记[风险排查任务]已读 {}", str(child_task_info.task_id))
  723. db_msg_center.update_msg_read(db, user_id, "风险排查", str(child_task_info.task_id))
  724. # 返回创建成功的响应
  725. return {
  726. "code": 200,
  727. "msg": "成功",
  728. "data": None
  729. }
  730. except Exception as e:
  731. # 处理异常
  732. traceback.print_exc()
  733. raise HTTPException(status_code=500, detail=str(e))
  734. ####中屏子任务
  735. @router.get('/children/task/{task_id}/list')
  736. async def get_inspection_task_list(
  737. task_id: str ,
  738. page: int = Query(1, gt=0, description='页码'),
  739. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  740. db: Session = Depends(get_db),
  741. user_id = Depends(valid_access_token)
  742. ):
  743. try:
  744. # 构建查询
  745. query = db.query(RiskManagementRiskTaskChildrenTask)
  746. query = query.filter(RiskManagementRiskTaskChildrenTask.del_flag != '2')
  747. # 应用查询条件
  748. query = query.filter(RiskManagementRiskTaskChildrenTask.task_id == task_id)
  749. # 计算总条目数
  750. total_items = query.count()
  751. # 排序
  752. query = query.order_by(RiskManagementRiskTaskChildrenTask.tsak_time.asc())
  753. # 执行分页查询
  754. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  755. # 将查询结果转换为列表形式的字典
  756. InspectionTasks_list = []
  757. for task in InspectionTasks:
  758. task_num=task.task_num
  759. completed_num = db.query(RiskManagementRiskTaskChildrenTaskLog)\
  760. .filter(RiskManagementRiskTaskChildrenTaskLog.del_flag!='2')\
  761. .filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id==task.id).count()
  762. incomplete_num = task_num-completed_num
  763. task_info = {
  764. "id": task.id,
  765. "task_id":task.task_id,
  766. "task_number": task.task_number,
  767. "type": task.type,
  768. "task_time": task.tsak_time.strftime('%Y-%m-%d'),
  769. "cycle": task.cycle,
  770. "task_range": task.task_range,
  771. "completed_num": completed_num,
  772. "incomplete_num": incomplete_num,
  773. "create_time": task.create_time.strftime('%Y-%m-%d')
  774. }
  775. InspectionTasks_list.append(task_info)
  776. # 返回结果
  777. return {
  778. "code": 200,
  779. "msg": "成功",
  780. "data": InspectionTasks_list,
  781. "total": total_items,
  782. "page": page,
  783. "pageSize": pageSize,
  784. "totalPages": (total_items + pageSize - 1) // pageSize
  785. }
  786. except Exception as e:
  787. # 处理异常
  788. traceback.print_exc()
  789. raise HTTPException(status_code=500, detail=str(e))
  790. @router.get('/children/task/log/{children_task_id}/{status}/list')
  791. async def get_inspection_task_list(
  792. children_task_id: str ,
  793. status:str,
  794. area_code: str = Query(None, description='区划编码'),
  795. page: int = Query(1, gt=0, description='页码'),
  796. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  797. db: Session = Depends(get_db),
  798. user_id = Depends(valid_access_token)
  799. ):
  800. try:
  801. # 构建查询
  802. total_items= 0
  803. InspectionTasks_list = []
  804. if status=='completed':
  805. query = db.query(RiskManagementRiskTaskChildrenTaskLog)
  806. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.del_flag != '2')
  807. # 应用查询条件
  808. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.children_task_id == children_task_id)
  809. if area_code:
  810. query = query.filter(RiskManagementRiskTaskChildrenTaskLog.area_code == area_code)
  811. # 计算总条目数
  812. total_items = query.count()
  813. # 排序
  814. query = query.order_by(RiskManagementRiskTaskChildrenTaskLog.create_time.desc())
  815. # 执行分页查询
  816. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  817. # 将查询结果转换为列表形式的字典
  818. for task in InspectionTasks:
  819. task_info = {
  820. "id": task.id,
  821. "children_task_id":children_task_id,
  822. "area_code": task.area_code,
  823. "area": task.area,
  824. "task_status": task.task_status,
  825. "user_id": task.user_id,
  826. "nick_name": task.nick_name,
  827. "create_time": task.create_time.strftime('%Y-%m-%d')
  828. }
  829. InspectionTasks_list.append(task_info)
  830. # 返回结果
  831. elif status == 'incomplete':
  832. children_task = risk_task_children_task_id_get_risk_task_children_task_info(db,children_task_id)
  833. if children_task:
  834. task = risk_task_id_get_risk_task_info(db,children_task.task_id)
  835. if task:
  836. complete_area_code_list =[i.area_code for i in risk_task_children_task_id_get_risk_task_children_task_log_info(db,children_task_id)]
  837. area_code_list = get_area_code_exclude_list(db,task.task_range,complete_area_code_list)
  838. if area_code:
  839. area_code_list = area_code_rang_get_area_children_list(db, children_task.task_range, area_code,
  840. complete_area_code_list)
  841. for area_code in area_code_list:
  842. task_info = {
  843. "id": new_guid(),
  844. "children_task_id": children_task_id,
  845. "area_code": area_code,
  846. "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
  847. "task_status": '0',
  848. "user_id": '',
  849. "nick_name": '',
  850. "create_time": children_task.tsak_time.strftime('%Y-%m-%d')
  851. }
  852. InspectionTasks_list.append(task_info)
  853. return {
  854. "code": 200,
  855. "msg": "成功",
  856. "data": InspectionTasks_list,
  857. "total": total_items,
  858. "page": page,
  859. "pageSize": pageSize,
  860. "totalPages": (total_items + pageSize - 1) // pageSize
  861. }
  862. except Exception as e:
  863. # 处理异常
  864. traceback.print_exc()
  865. raise HTTPException(status_code=500, detail=str(e))
  866. @router.get('/children/task/result/{children_task_id}/list')
  867. async def get_inspection_task_list(
  868. children_task_id: str ,
  869. area_code: str = Query(None, description='区划编码'),
  870. result: str = Query(None, description='巡查结果'),
  871. nick_name: str = Query(None, description='姓名'),
  872. page: int = Query(1, gt=0, description='页码'),
  873. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  874. db: Session = Depends(get_db),
  875. user_id = Depends(valid_access_token)
  876. ):
  877. try:
  878. # 构建查询
  879. query = db.query(RiskManagementRiskTaskChildrenTaskResult)
  880. query = query.filter(RiskManagementRiskTaskChildrenTaskResult.del_flag != '2')
  881. query = query.filter(RiskManagementRiskTaskChildrenTaskResult.children_task_id == children_task_id)
  882. # 应用查询条件
  883. if area_code:
  884. query = query.filter(RiskManagementRiskTaskChildrenTaskResult.area_code == area_code)
  885. if result:
  886. query = query.filter(RiskManagementRiskTaskChildrenTaskResult.inspection_result == result)
  887. if nick_name:
  888. query = query.filter(RiskManagementRiskTaskChildrenTaskResult.nick_name.like(f'%{nick_name}%') )
  889. # 计算总条目数
  890. total_items = query.count()
  891. # 排序
  892. query = query.order_by(RiskManagementRiskTaskChildrenTaskResult.create_time.desc())
  893. # 执行分页查询
  894. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  895. # 将查询结果转换为列表形式的字典
  896. InspectionTasks_list = []
  897. for task in InspectionTasks:
  898. area_code = task.area_code
  899. area = area_code_get_area_info(db, area_code)
  900. area = area_code_get_ancestors_names(db, area)
  901. task_info = {
  902. "id": task.id,
  903. "children_task_id": task.children_task_id,
  904. "point_name":task.inspection_point_name,
  905. "area": area,
  906. "create_time": task.create_time.strftime('%Y-%m-%d'),
  907. "nick_name": task.nick_name,
  908. "result": task.inspection_result,
  909. "fileList": get_file_query_fun(db=db,from_scenario='RiskManagementRiskTaskChildrenTaskResult', foreign_key=task.id),
  910. "remark":task.remark
  911. }
  912. InspectionTasks_list.append(task_info)
  913. # 返回结果
  914. return {
  915. "code": 200,
  916. "msg": "成功",
  917. "data": InspectionTasks_list,
  918. "total": total_items,
  919. "page": page,
  920. "pageSize": pageSize,
  921. "totalPages": (total_items + pageSize - 1) // pageSize
  922. }
  923. except Exception as e:
  924. # 处理异常
  925. traceback.print_exc()
  926. raise HTTPException(status_code=500, detail=str(e))