rescue_resources.py 41 KB

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