rescue_resources.py 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008
  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. 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.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 %H:%M:%S')
  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(RiskManagementRescueResourcesTask)
  96. query = query.filter(RiskManagementRescueResourcesTask.del_flag != '2')
  97. # 应用查询条件
  98. if id:
  99. query = query.filter(RiskManagementRescueResourcesTask.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.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 = RiskManagementRescueResourcesTask(
  167. type=body['type'],
  168. start_time = body['start_time'],
  169. end_time = body['end_time'],
  170. task_cycle = cycle,
  171. corn_expression = corn,
  172. corn_query= corn_query,
  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'YJJY{str(new_task.id).zfill(10)}'
  182. db.commit()
  183. background_tasks.add_task(create_rescue_resources_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(RiskManagementRescueResourcesTask)
  203. query = query.filter(RiskManagementRescueResourcesTask.id == body['id'])
  204. query = query.filter(RiskManagementRescueResourcesTask.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.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(RiskManagementRescueResourcesTask)
  262. query = query.filter(RiskManagementRescueResourcesTask.del_flag != '2')
  263. query = query.filter(RiskManagementRescueResourcesTask.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(RiskManagementRescueResourcesTask)
  294. query = query.filter(RiskManagementRescueResourcesTask.del_flag != '2')
  295. query = query.filter(RiskManagementRescueResourcesTask.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(RiskManagementRescueResourcesTask)\
  332. .filter(RiskManagementRescueResourcesTask.del_flag!='2')\
  333. .filter(RiskManagementRescueResourcesTask.task_range.in_(task_range))\
  334. .filter(RiskManagementRescueResourcesTask.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(RiskManagementRescueResourcesTaskChildrenTask)
  344. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.del_flag != '2')
  345. # 应用查询条件
  346. # 查询小于今天
  347. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.tsak_time <=datetime.now())
  348. # 查询层级、未办结子任务
  349. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.task_range.in_(task_range))
  350. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.task_id.in_(task_ids))
  351. # 计算总条目数
  352. if type:
  353. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.type==type)
  354. total_items = query.count()
  355. # 排序
  356. query = query.order_by(RiskManagementRescueResourcesTaskChildrenTask.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(RiskManagementRescueResourcesTaskChildrenTaskLog).\
  364. filter(RiskManagementRescueResourcesTaskChildrenTaskLog.del_flag!='2').\
  365. filter(RiskManagementRescueResourcesTaskChildrenTaskLog.children_task_id==task.id).\
  366. filter(RiskManagementRescueResourcesTaskChildrenTaskLog.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(RiskManagementRescueResourcesTask).\
  431. filter(RiskManagementRescueResourcesTask.del_flag!='2').\
  432. filter(RiskManagementRescueResourcesTask.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(RiskManagementRescueResourcesTaskChildrenTask)
  439. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.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(
  448. RiskManagementRescueResourcesTaskChildrenTask.tsak_time < datetime_1.date(year_1+1, 1, 1))
  449. else:
  450. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.tsak_time < datetime_1.date(year_1, month_1 + 1, 1))
  451. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.tsak_time >= datetime_1.date(year_1, month_1, 1))
  452. # query = query.filter(RiskManagementInspectionTaskChildrenTask.tsak_time <=datetime.now())
  453. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.task_range.in_(task_range))
  454. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.task_id.in_(task_ids))
  455. # 计算总条目数
  456. total_items = query.count()
  457. print(total_items)
  458. result = []
  459. # 获取指定月份的第一天是周几
  460. # first_day = datetime.date(yaer_1, month_1, 1)
  461. # 计算该月的天数
  462. if month_1 == 12:
  463. number_of_days = (datetime_1.date(year_1+1, 1, 1) - datetime_1.timedelta(days=1)).day
  464. else:
  465. number_of_days = (datetime_1.date(year_1, month_1 + 1, 1) - datetime_1.timedelta(days=1)).day
  466. # 遍历该月的每一天
  467. for day in range(1, number_of_days + 1):
  468. # 创建日期对象
  469. date_obj = datetime_1.date(year_1, month_1, day)
  470. # 获取星期(0是周一,6是周日)
  471. week_day = date_obj.weekday()
  472. # 将星期转换为中文
  473. week_day_cn = "一二三四五六日"[week_day]
  474. data = {"day":day,"date":f"{year_1}-{month_1}-{day}","week":f'周{week_day_cn}',"status":0}
  475. if date_obj==datetime_1.date.today():
  476. data['status']=4
  477. # 排序
  478. # total_items = query.count()
  479. # print( '前',total_items)
  480. # print(datetime_1.date(year_1, month_1, day))
  481. query_1 = query.filter(
  482. RiskManagementRescueResourcesTaskChildrenTask.tsak_time == datetime_1.date(year_1, month_1, day))
  483. # query = query.order_by(RiskManagementInspectionTaskChildrenTask.tsak_time.asc())
  484. # total_items = query_1.count()
  485. # print( '后',total_items)
  486. InspectionTasks = query_1.all()
  487. # 将查询结果转换为列表形式的字典
  488. InspectionTasks_list = []
  489. for task in InspectionTasks:
  490. # 判断这个任务该user_id完成了没
  491. # tasklog = db.query(RiskManagementInspectionTaskChildrenTaskLog).\
  492. # filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag!='2').\
  493. # filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id==task.id).\
  494. # filter(RiskManagementInspectionTaskChildrenTaskLog.area_code.in_(user_area_codes)).all()
  495. # task_area_code_list = [i.area_code for i in tasklog]
  496. query_2 = db.query(RiskManagementInspectionUser).\
  497. filter(RiskManagementInspectionUser.del_flag!='2').\
  498. filter(RiskManagementInspectionUser.user_id==user_id)
  499. if task.task_range == '0':
  500. user_range_area_codes= ['440900000000']
  501. elif task.task_range == '1':
  502. query_2 = query_2.filter(
  503. and_(RiskManagementInspectionUser.area_code.like('%000000'),
  504. RiskManagementInspectionUser.area_code.notlike('%00000000')))
  505. user_range_area_codes= list({i.area_code for i in query_2.all()})
  506. elif task.task_range == '2':
  507. query_2 = query_2.filter(and_(RiskManagementInspectionUser.area_code.like('%000'),
  508. RiskManagementInspectionUser.area_code.notlike('%000000')))
  509. user_range_area_codes= list({i.area_code for i in query_2.all()})
  510. elif task.task_range == '3':
  511. query_2 = query_2.filter(RiskManagementInspectionUser.area_code.notlike('%000'))
  512. user_range_area_codes= list({i.area_code for i in query_2.all()})
  513. else:
  514. user_range_area_codes= []
  515. print(task.task_range)
  516. print(user_range_area_codes)
  517. for area_code in user_range_area_codes:
  518. tasklog = db.query(RiskManagementRescueResourcesTaskChildrenTaskLog). \
  519. filter(RiskManagementRescueResourcesTaskChildrenTaskLog.del_flag != '2'). \
  520. filter(RiskManagementRescueResourcesTaskChildrenTaskLog.children_task_id == task.id). \
  521. filter(RiskManagementRescueResourcesTaskChildrenTaskLog.area_code==area_code).first()
  522. task_info = {
  523. "id": task.id,
  524. "type": task.type,
  525. "cycle": task.cycle,
  526. "area_code":area_code,
  527. "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
  528. "task_status": tasklog is not None,
  529. "task_time": task.tsak_time.strftime('%Y-%m-%d'),
  530. "create_time": task.create_time.strftime('%Y-%m-%d %H:%M')
  531. }
  532. if tasklog :
  533. task_info['create_time'] = tasklog.create_time.strftime('%Y-%m-%d %H:%M')
  534. if task.tsak_time<datetime.today() and data['status']<1:
  535. data['status'] = 1 #有事已完成
  536. # elif tasklog.tsak_time > datetime.today():
  537. # data['status'] = 3 # 未来有事
  538. else:
  539. if task.tsak_time < datetime.today() and data['status'] < 2:
  540. data['status'] = 2 # 有事未完成
  541. elif task.tsak_time > datetime.today():
  542. data['status'] = 3 # 未来有事
  543. InspectionTasks_list.append(task_info)
  544. data['task_list']=InspectionTasks_list
  545. result.append(data)
  546. # 返回结果
  547. return {
  548. "code": 200,
  549. "msg": "成功",
  550. "data": result
  551. }
  552. except Exception as e:
  553. # 处理异常
  554. traceback.print_exc()
  555. raise HTTPException(status_code=500, detail=str(e))
  556. @router.get('/children/task/records')
  557. async def get_children_task_records_list(
  558. type: str =Query(None, description='类型'),
  559. page: int = Query(1, gt=0, description='页码'),
  560. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  561. db: Session = Depends(get_db),
  562. user_id = Depends(valid_access_token)
  563. ):
  564. try:
  565. # 获取子任务id
  566. query = db.query(RiskManagementRescueResourcesTaskChildrenTask)
  567. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.del_flag != '2')
  568. if type:
  569. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.type==type)
  570. children_ids = [i.id for i in query.all()]
  571. print(children_ids)
  572. # 构建查询
  573. query = db.query(RiskManagementRescueResourcesTaskChildrenTaskLog)
  574. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.del_flag != '2')
  575. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.user_id == user_id)
  576. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.children_task_id.in_(children_ids))
  577. total_items = query.count()
  578. # 排序
  579. query = query.order_by(RiskManagementRescueResourcesTaskChildrenTaskLog.create_time.desc())
  580. # 执行分页查询
  581. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  582. # 将查询结果转换为列表形式的字典
  583. InspectionTasks_list = []
  584. for task in InspectionTasks:
  585. children_task = resource_task_children_task_id_get_resource_task_children_task_info(db,task.children_task_id)
  586. task_info = {
  587. "id": task.children_task_id,
  588. "type": children_task.type,
  589. "task_range": children_task.task_range,
  590. "cycle": children_task.cycle,
  591. "area_code": task.area_code,
  592. "area": area_code_get_ancestors_names(db, area_code_get_area_info(db, task.area_code)),
  593. "task_time": children_task.tsak_time.strftime('%Y-%m-%d'),
  594. "create_time": task.create_time.strftime('%Y-%m-%d %H:%M')
  595. }
  596. InspectionTasks_list.append(task_info)
  597. # 返回结果
  598. return {
  599. "code": 200,
  600. "msg": "成功",
  601. "data": InspectionTasks_list,
  602. "total": total_items,
  603. "page": page,
  604. "pageSize": pageSize,
  605. "totalPages": (total_items + pageSize - 1) // pageSize
  606. }
  607. except Exception as e:
  608. # 处理异常
  609. traceback.print_exc()
  610. raise HTTPException(status_code=500, detail=str(e))
  611. @router.get('/children/task/result/{children_task_id}')
  612. async def get_children_task_result(
  613. children_task_id: str ,
  614. db: Session = Depends(get_db),
  615. page: int = Query(1, gt=0, description='页码'),
  616. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  617. user_id = Depends(valid_access_token)
  618. ):
  619. try:
  620. # 构建查询
  621. query = db.query(RiskManagementRescueResourcesTaskChildrenTaskResult)
  622. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskResult.del_flag != '2')
  623. # 应用查询条件
  624. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskResult.children_task_id == children_task_id)
  625. # 计算总条目数
  626. total_items = query.count()
  627. # 排序
  628. query = query.order_by(RiskManagementRescueResourcesTaskChildrenTaskResult.create_time.desc())
  629. # 执行分页查询
  630. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  631. InspectionTasks_list = []
  632. for task in InspectionTasks:
  633. area_code = task.area_code
  634. area = area_code_get_area_info(db, area_code)
  635. area = area_code_get_ancestors_names(db, area)
  636. task_info = {
  637. "id": task.id,
  638. # "children_task_id": task.children_task_id,
  639. "type":resource_task_children_task_id_get_resource_task_children_task_info(db,task.children_task_id).type,
  640. "point_name": task.inspection_point_name,
  641. # "area": area,
  642. # "create_time": task.create_time.strftime('%Y-%m-%d'),
  643. # "nick_name": task.nick_name,
  644. "task_result": task.inspection_result,
  645. "remark": task.remark,
  646. "fileList": get_file_query_fun(db=db, from_scenario='RiskManagementRescueResourcesTaskChildrenTaskResult',
  647. foreign_key=task.id)
  648. }
  649. InspectionTasks_list.append(task_info)
  650. # 返回结果
  651. return {
  652. "code": 200,
  653. "msg": "成功",
  654. "data": InspectionTasks_list,
  655. "total": total_items,
  656. "page": page,
  657. "pageSize": pageSize,
  658. "totalPages": (total_items + pageSize - 1) // pageSize
  659. }
  660. except Exception as e:
  661. # 处理异常
  662. traceback.print_exc()
  663. raise HTTPException(status_code=500, detail=str(e))
  664. @router.post('/children/task/result/create')
  665. async def create_inspection_task(
  666. db: Session = Depends(get_db),
  667. body = Depends(remove_xss_json),
  668. user_id = Depends(valid_access_token)
  669. ):
  670. try:
  671. children_task_id = body['children_task_id']
  672. result = body['result']
  673. area_code = body['area_code']
  674. area =area_code_get_ancestors_names(db, area_code_get_area_info(db, area_code))
  675. # task_time = body['task_time']
  676. # 创建新的
  677. new_task_log = RiskManagementRescueResourcesTaskChildrenTaskLog(
  678. id=new_guid(),
  679. children_task_id=children_task_id,
  680. area_code = area_code,
  681. area = area,
  682. task_status = '1',
  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. for info in result:
  688. new_file_list = info['fileList']
  689. inspection_point_name= info['point_name']
  690. inspection_result = info['task_result']
  691. remark = info['remark']
  692. new_task_result = RiskManagementRescueResourcesTaskChildrenTaskResult(
  693. id=new_guid(),
  694. children_task_id=children_task_id,
  695. inspection_point_name=inspection_point_name,
  696. area_code=area_code,
  697. inspection_result=inspection_result,
  698. remark = remark,
  699. user_id = user_id,
  700. nick_name = user_id_get_user_info(db,user_id).nick_name,
  701. create_by = user_id
  702. )
  703. db.add(new_task_result)
  704. for file in new_file_list:
  705. file_name = file['file_name']
  706. file_name_desc = file['file_name_desc']
  707. status = file['status']
  708. new_file = RiskManagementFile(
  709. file_id=new_guid(),
  710. foreign_key=new_task_result.id,
  711. from_scenario='RiskManagementRescueResourcesTaskChildrenTaskResult',
  712. file_name=file_name,
  713. file_name_desc=file_name_desc,
  714. status=status
  715. )
  716. db.add(new_file)
  717. # 添加到数据库会话并提交
  718. db.add(new_task_log)
  719. db.commit()
  720. # 标记消息已读
  721. child_task_info = db.query(RiskManagementRescueResourcesTaskChildrenTask).filter(RiskManagementRescueResourcesTaskChildrenTask.id == children_task_id).first()
  722. if child_task_info is not None:
  723. logger.info("标记[数据采集任务]已读 {}", str(child_task_info.task_id))
  724. db_msg_center.update_msg_read(db, user_id, "数据采集", str(child_task_info.task_id))
  725. # 返回创建成功的响应
  726. return {
  727. "code": 200,
  728. "msg": "成功",
  729. "data": None
  730. }
  731. except Exception as e:
  732. # 处理异常
  733. traceback.print_exc()
  734. raise HTTPException(status_code=500, detail=str(e))
  735. ####中屏子任务
  736. @router.get('/children/task/{task_id}/list')
  737. async def get_inspection_task_list(
  738. task_id: str ,
  739. page: int = Query(1, gt=0, description='页码'),
  740. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  741. db: Session = Depends(get_db),
  742. user_id = Depends(valid_access_token)
  743. ):
  744. try:
  745. # 构建查询
  746. query = db.query(RiskManagementRescueResourcesTaskChildrenTask)
  747. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.del_flag != '2')
  748. # 应用查询条件
  749. query = query.filter(RiskManagementRescueResourcesTaskChildrenTask.task_id == task_id)
  750. # 计算总条目数
  751. total_items = query.count()
  752. # 排序
  753. query = query.order_by(RiskManagementRescueResourcesTaskChildrenTask.tsak_time.asc())
  754. # 执行分页查询
  755. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  756. # 将查询结果转换为列表形式的字典
  757. InspectionTasks_list = []
  758. for task in InspectionTasks:
  759. task_num=task.task_num
  760. completed_num = db.query(RiskManagementRescueResourcesTaskChildrenTaskLog)\
  761. .filter(RiskManagementRescueResourcesTaskChildrenTaskLog.del_flag!='2')\
  762. .filter(RiskManagementRescueResourcesTaskChildrenTaskLog.children_task_id==task.id).count()
  763. incomplete_num = task_num-completed_num
  764. task_info = {
  765. "id": task.id,
  766. "task_id":task.task_id,
  767. "task_number": task.task_number,
  768. "type": task.type,
  769. "task_time": task.tsak_time.strftime('%Y-%m-%d'),
  770. "cycle": task.cycle,
  771. "task_range": task.task_range,
  772. "completed_num": completed_num,
  773. "incomplete_num": incomplete_num,
  774. "create_time": task.create_time.strftime('%Y-%m-%d')
  775. }
  776. InspectionTasks_list.append(task_info)
  777. # 返回结果
  778. return {
  779. "code": 200,
  780. "msg": "成功",
  781. "data": InspectionTasks_list,
  782. "total": total_items,
  783. "page": page,
  784. "pageSize": pageSize,
  785. "totalPages": (total_items + pageSize - 1) // pageSize
  786. }
  787. except Exception as e:
  788. # 处理异常
  789. traceback.print_exc()
  790. raise HTTPException(status_code=500, detail=str(e))
  791. @router.get('/children/task/log/{children_task_id}/{status}/list')
  792. async def get_inspection_task_list(
  793. children_task_id: str ,
  794. status:str,
  795. area_code: str = Query(None, description='区划编码'),
  796. page: int = Query(1, gt=0, description='页码'),
  797. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  798. db: Session = Depends(get_db),
  799. user_id = Depends(valid_access_token)
  800. ):
  801. try:
  802. # 构建查询
  803. total_items= 0
  804. InspectionTasks_list = []
  805. if status=='completed':
  806. query = db.query(RiskManagementRescueResourcesTaskChildrenTaskLog)
  807. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.del_flag != '2')
  808. # 应用查询条件
  809. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.children_task_id == children_task_id)
  810. if area_code:
  811. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskLog.area_code == area_code)
  812. # 计算总条目数
  813. total_items = query.count()
  814. # 排序
  815. query = query.order_by(RiskManagementRescueResourcesTaskChildrenTaskLog.create_time.desc())
  816. # 执行分页查询
  817. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  818. # 将查询结果转换为列表形式的字典
  819. for task in InspectionTasks:
  820. task_info = {
  821. "id": task.id,
  822. "children_task_id":children_task_id,
  823. "area_code": task.area_code,
  824. "area": task.area,
  825. "task_status": task.task_status,
  826. "user_id": task.user_id,
  827. "nick_name": task.nick_name,
  828. "create_time": task.create_time.strftime('%Y-%m-%d')
  829. }
  830. InspectionTasks_list.append(task_info)
  831. # 返回结果
  832. elif status == 'incomplete':
  833. children_task = resource_task_children_task_id_get_resource_task_children_task_info(db,children_task_id)
  834. if children_task:
  835. task = resource_task_id_get_resource_task_info(db,children_task.task_id)
  836. if task:
  837. 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)]
  838. area_code_list = get_area_code_exclude_list(db,task.task_range,complete_area_code_list)
  839. if area_code:
  840. area_code_list = area_code_rang_get_area_children_list(db, children_task.task_range, area_code,
  841. complete_area_code_list)
  842. for area_code in area_code_list:
  843. task_info = {
  844. "id": new_guid(),
  845. "children_task_id": children_task_id,
  846. "area_code": area_code,
  847. "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
  848. "task_status": '0',
  849. "user_id": '',
  850. "nick_name": '',
  851. "create_time": children_task.tsak_time.strftime('%Y-%m-%d')
  852. }
  853. InspectionTasks_list.append(task_info)
  854. return {
  855. "code": 200,
  856. "msg": "成功",
  857. "data": InspectionTasks_list,
  858. "total": total_items,
  859. "page": page,
  860. "pageSize": pageSize,
  861. "totalPages": (total_items + pageSize - 1) // pageSize
  862. }
  863. except Exception as e:
  864. # 处理异常
  865. traceback.print_exc()
  866. raise HTTPException(status_code=500, detail=str(e))
  867. @router.get('/children/task/result/{children_task_id}/list')
  868. async def get_inspection_task_list(
  869. children_task_id: str ,
  870. area_code: str = Query(None, description='区划编码'),
  871. result: str = Query(None, description='巡查结果'),
  872. nick_name: str = Query(None, description='姓名'),
  873. page: int = Query(1, gt=0, description='页码'),
  874. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  875. db: Session = Depends(get_db),
  876. user_id = Depends(valid_access_token)
  877. ):
  878. try:
  879. # 构建查询
  880. query = db.query(RiskManagementRescueResourcesTaskChildrenTaskResult)
  881. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskResult.del_flag != '2')
  882. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskResult.children_task_id == children_task_id)
  883. # 应用查询条件
  884. if area_code:
  885. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskResult.area_code == area_code)
  886. if result:
  887. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskResult.inspection_result == result)
  888. if nick_name:
  889. query = query.filter(RiskManagementRescueResourcesTaskChildrenTaskResult.nick_name.like(f'%{nick_name}%') )
  890. # 计算总条目数
  891. total_items = query.count()
  892. # 排序
  893. query = query.order_by(RiskManagementRescueResourcesTaskChildrenTaskResult.create_time.desc())
  894. # 执行分页查询
  895. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  896. # 将查询结果转换为列表形式的字典
  897. InspectionTasks_list = []
  898. for task in InspectionTasks:
  899. area_code = task.area_code
  900. area = area_code_get_area_info(db, area_code)
  901. area = area_code_get_ancestors_names(db, area)
  902. task_info = {
  903. "id": task.id,
  904. "children_task_id": task.children_task_id,
  905. "point_name":task.inspection_point_name,
  906. "area": area,
  907. "create_time": task.create_time.strftime('%Y-%m-%d'),
  908. "nick_name": task.nick_name,
  909. "result": task.inspection_result,
  910. "fileList": get_file_query_fun(db=db,from_scenario='RiskManagementRescueResourcesTaskChildrenTaskResult', foreign_key=task.id),
  911. "remark":task.remark
  912. }
  913. InspectionTasks_list.append(task_info)
  914. # 返回结果
  915. return {
  916. "code": 200,
  917. "msg": "成功",
  918. "data": InspectionTasks_list,
  919. "total": total_items,
  920. "page": page,
  921. "pageSize": pageSize,
  922. "totalPages": (total_items + pageSize - 1) // pageSize
  923. }
  924. except Exception as e:
  925. # 处理异常
  926. traceback.print_exc()
  927. raise HTTPException(status_code=500, detail=str(e))