rescue_resources.py 41 KB

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