task.py 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query, HTTPException, status,BackgroundTasks
  4. from common.security import valid_access_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy import and_, or_
  8. from pydantic import BaseModel
  9. from datetime import datetime, timedelta
  10. from dateutil.relativedelta import relativedelta
  11. from database import get_db
  12. from typing import List
  13. from models import *
  14. from utils import *
  15. from utils.ry_system_util import *
  16. from utils.riskManagement_uitl import *
  17. import json
  18. import traceback
  19. router = APIRouter()
  20. @router.get('/list')
  21. async def get_inspection_task_list(
  22. business: str = Query(None, description='巡查业务'),
  23. cycle :str = Query(None, description='巡查周期'),
  24. page: int = Query(1, gt=0, description='页码'),
  25. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  26. db: Session = Depends(get_db),
  27. user_id = Depends(valid_access_token)
  28. ):
  29. try:
  30. # 构建查询
  31. query = db.query(RiskManagementInspectionTask)
  32. query = query.filter(RiskManagementInspectionTask.del_flag != '2')
  33. # 应用查询条件
  34. if business:
  35. query = query.filter(RiskManagementInspectionTask.inspection_business == business)
  36. if cycle:
  37. query = query.filter(RiskManagementInspectionTask.inspection_cycle == cycle)
  38. # 计算总条目数
  39. total_items = query.count()
  40. # 排序
  41. query = query.order_by(RiskManagementInspectionTask.create_time.desc())
  42. # 执行分页查询
  43. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  44. # 将查询结果转换为列表形式的字典
  45. InspectionTasks_list = []
  46. for task in InspectionTasks:
  47. if task.task_status=='3':
  48. task_status = '3' #'已完结'
  49. else:
  50. if datetime.now()<task.start_time:
  51. task_status = '0' #'未开始'
  52. elif task.start_time<=datetime.now()<=task.end_time:
  53. task_status = '1' #'进行中'
  54. else:
  55. task_status = '2' #'未完成'
  56. create_by = task.create_by
  57. create_by = db.query(SysUser).filter(SysUser.user_id==create_by).first()
  58. task_info = {
  59. "id": task.id,
  60. "task_number": task.task_number,
  61. "business": task.inspection_business,
  62. "task_time": '%s-%s'%(task.start_time.strftime('%Y/%m/%d'),task.end_time.strftime('%Y/%m/%d')),
  63. "cycle": task.inspection_cycle,
  64. "inspection_range": task.inspection_range,
  65. "task_status": task_status,
  66. "create_by":create_by.nick_name,
  67. "create_time": task.create_time.strftime('%Y-%m-%d')
  68. }
  69. InspectionTasks_list.append(task_info)
  70. # 返回结果
  71. return {
  72. "code": 200,
  73. "msg": "成功",
  74. "data": InspectionTasks_list,
  75. "total": total_items,
  76. "page": page,
  77. "pageSize": pageSize,
  78. "totalPages": (total_items + pageSize - 1) // pageSize
  79. }
  80. except Exception as e:
  81. # 处理异常
  82. traceback.print_exc()
  83. raise HTTPException(status_code=500, detail=str(e))
  84. @router.get('/{id}')
  85. async def get_inspection_task(
  86. id: str ,
  87. db: Session = Depends(get_db),
  88. user_id = Depends(valid_access_token)
  89. ):
  90. try:
  91. # 构建查询
  92. query = db.query(RiskManagementInspectionTask)
  93. query = query.filter(RiskManagementInspectionTask.del_flag != '2')
  94. # 应用查询条件
  95. if id:
  96. query = query.filter(RiskManagementInspectionTask.id == id)
  97. # 执行查询
  98. task = query.first()
  99. if not task:
  100. detail = "巡查任务不存在"
  101. raise HTTPException(status_code=404, detail="巡查任务不存在")
  102. # 将查询结果转换为列表形式的字典
  103. if task.task_status == '3':
  104. task_status = '3' # '已完结'
  105. else:
  106. if datetime.now() < task.start_time:
  107. task_status = '0' # '未开始'
  108. elif task.start_time <= datetime.now() <= task.end_time:
  109. task_status = '1' # '进行中'
  110. else:
  111. task_status = '2' # '未完成'
  112. create_by = task.create_by
  113. create_by = db.query(SysUser).filter(SysUser.user_id == create_by).first()
  114. inspection_task_result = {
  115. "id": task.id,
  116. "task_number": task.task_number,
  117. "business": task.inspection_business,
  118. "task_time": '%s-%s'%(task.start_time.strftime('%Y/%m/%d'),task.end_time.strftime('%Y/%m/%d')),
  119. "cycle": task.inspection_cycle,
  120. "inspection_range": task.inspection_range,
  121. "task_status": task_status,
  122. "create_by":create_by.nick_name,
  123. "create_time": task.create_time.strftime('%Y-%m-%d')
  124. }
  125. # 返回结果
  126. return {
  127. "code": 200,
  128. "msg": "成功",
  129. "data": inspection_task_result
  130. }
  131. except Exception as e:
  132. # 处理异常
  133. traceback.print_exc()
  134. if str(e)=='':
  135. e = detail
  136. raise HTTPException(status_code=500, detail=str(e))
  137. @router.post('/create')
  138. async def create_inspection_task(
  139. background_tasks: BackgroundTasks,
  140. db: Session = Depends(get_db),
  141. body = Depends(remove_xss_json),
  142. user_id = Depends(valid_access_token)
  143. ):
  144. try:
  145. cycle = body['cycle']
  146. # 0每年、1每月、2每周、3每日、4一次
  147. corn_query = body['corn_query']
  148. if cycle=='0':
  149. corn=f'0 0 {corn_query} *'
  150. elif cycle=='1':
  151. corn=f'0 0 {corn_query} * *'
  152. elif cycle == '2':
  153. corn = f'0 0 * * {corn_query}'
  154. elif cycle == '3':
  155. corn = f'0 0 * * *'
  156. else:
  157. corn=''
  158. # 创建新的预案记录
  159. new_task = RiskManagementInspectionTask(
  160. inspection_business=body['business'],
  161. start_time = body['start_time'],
  162. end_time = body['end_time'],
  163. inspection_cycle = cycle,
  164. corn_expression = corn,
  165. inspection_range = body['inspection_range'],
  166. task_status = '-1',
  167. create_by = user_id
  168. )
  169. # 添加到数据库会话并提交
  170. db.add(new_task)
  171. db.commit()
  172. db.refresh(new_task) # 可选,如果需要刷新实例状态
  173. new_task.task_number = f'YJXC{str(new_task.id).zfill(10)}'
  174. db.commit()
  175. # 返回创建成功的响应
  176. background_tasks.add_task(create_children_task,db,new_task,corn_query)
  177. return {
  178. "code": 200,
  179. "msg": "成功",
  180. "data": None
  181. }
  182. except Exception as e:
  183. # 处理异常
  184. traceback.print_exc()
  185. raise HTTPException(status_code=500, detail=str(e))
  186. @router.put('/update')
  187. async def update_inspection_task(
  188. db: Session = Depends(get_db),
  189. body = Depends(remove_xss_json),
  190. user_id = Depends(valid_access_token)
  191. ):
  192. try:
  193. # 提取请求数据
  194. query = db.query(RiskManagementInspectionTask)
  195. query = query.filter(RiskManagementInspectionTask.id == body['id'])
  196. query = query.filter(RiskManagementInspectionTask.del_flag != '2')
  197. task = query.first()
  198. if not task:
  199. detail = "任务不存在"
  200. raise HTTPException(status_code=404, detail="任务不存在")
  201. # if 'cycle' in body:
  202. # cycle = body['cycle']
  203. # # 0每年、1每月、2每周、3每日、4一次
  204. # corn_query = body['corn_query']
  205. # if cycle == '0':
  206. # corn = f'0 0 {corn_query} *'
  207. # elif cycle == '1':
  208. # corn = f'0 0 {corn_query} * *'
  209. # elif cycle == '2':
  210. # corn = f'0 0 * * {corn_query}'
  211. # elif cycle == '3':
  212. # corn = f'0 0 * * *'
  213. # else:
  214. # corn = ''
  215. # task.inspection_cycle = cycle
  216. # task.corn_expression = corn
  217. if 'business' in body:
  218. task.inspection_business = body['business']
  219. # if 'start_time' in body:
  220. # task.start_time = body['start_time']
  221. # if 'end_time' in body:
  222. # task.end_time = body['end_time']
  223. if 'inspection_range' in body:
  224. task.inspection_range = body['inspection_range']
  225. if 'task_status' in body:
  226. task.task_status = body['task_status']
  227. if user_id:
  228. task.update_by = user_id
  229. # 更新到数据库会话并提交
  230. db.commit()
  231. db.refresh(task) # 可选,如果需要刷新实例状态
  232. # 返回创建成功的响应
  233. return {
  234. "code": 200,
  235. "msg": "成功",
  236. "data": None
  237. }
  238. except Exception as e:
  239. # 处理异常
  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(RiskManagementInspectionTask)
  253. query = query.filter(RiskManagementInspectionTask.del_flag != '2')
  254. query = query.filter(RiskManagementInspectionTask.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. traceback.print_exc()
  273. if str(e) == '':
  274. e = detail
  275. raise HTTPException(status_code=500, detail=str(e))
  276. @router.delete('/delete/{userId}')
  277. async def delete_inspection_task(
  278. userId: str,
  279. db: Session = Depends(get_db),
  280. body = Depends(remove_xss_json),
  281. user_id = Depends(valid_access_token)
  282. ):
  283. try:
  284. # 提取请求数据
  285. query = db.query(RiskManagementInspectionTask)
  286. query = query.filter(RiskManagementInspectionTask.del_flag != '2')
  287. query = query.filter(RiskManagementInspectionTask.id==userId)
  288. task = query.first()
  289. if not task:
  290. detail = "巡查任务不存在"
  291. raise HTTPException(status_code=404, detail="巡查任务不存在")
  292. task.del_flag = '2'
  293. task.update_by = user_id
  294. # 更新到数据库会话并提交
  295. db.commit()
  296. db.refresh(task) # 可选,如果需要刷新实例状态
  297. # 返回创建成功的响应
  298. return {
  299. "code": 200,
  300. "msg": "删除成功",
  301. "data": None
  302. }
  303. except Exception as e:
  304. # 处理异常
  305. traceback.print_exc()
  306. if str(e) == '':
  307. e = detail
  308. raise HTTPException(status_code=500, detail=str(e))
  309. ####小屏子任务查询
  310. @router.get('/children/task/list')
  311. async def get_inspection_task_list(
  312. type: str =Query(None, description='类型'),
  313. page: int = Query(1, gt=0, description='页码'),
  314. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  315. db: Session = Depends(get_db),
  316. user_id = Depends(valid_access_token)
  317. ):
  318. try:
  319. # 构建查询
  320. task_range = user_id_get_task_range(db,user_id)
  321. Task_list = db.query(RiskManagementInspectionTask).filter(RiskManagementInspectionTask.del_flag!='2').filter(RiskManagementInspectionTask.inspection_range.in_(task_range)).filter(RiskManagementInspectionTask.task_status!='3').all()
  322. task_ids = [i.id for i in Task_list]
  323. user_area_code_list = db.query(RiskManagementInspectionUser).filter(RiskManagementInspectionUser.del_flag!='2').filter(RiskManagementInspectionUser.user_id==user_id).all()
  324. user_area_codes = [i.area_code for i in user_area_code_list]
  325. query = db.query(RiskManagementInspectionTaskChildrenTask)
  326. query = query.filter(RiskManagementInspectionTaskChildrenTask.del_flag != '2')
  327. # 应用查询条件
  328. query = query.filter(RiskManagementInspectionTaskChildrenTask.tsak_time <=datetime.now())
  329. query = query.filter(RiskManagementInspectionTaskChildrenTask.task_range.in_(task_range))
  330. query = query.filter(RiskManagementInspectionTaskChildrenTask.task_id.in_(task_ids))
  331. # 计算总条目数
  332. if type:
  333. query = query.filter(RiskManagementInspectionTaskChildrenTask.type==type)
  334. total_items = query.count()
  335. # 排序
  336. query = query.order_by(RiskManagementInspectionTaskChildrenTask.tsak_time.asc())
  337. # 执行分页查询
  338. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  339. # 将查询结果转换为列表形式的字典
  340. InspectionTasks_list = []
  341. for task in InspectionTasks:
  342. # 判断这个任务该user_id完成了没
  343. tasklog = db.query(RiskManagementInspectionTaskChildrenTaskLog).\
  344. filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag!='2').\
  345. filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id==task.id).\
  346. filter(RiskManagementInspectionTaskChildrenTaskLog.area_code.in_(user_area_codes)).all()
  347. task_area_code_list = [i.area_code for i in tasklog]
  348. query = db.query(RiskManagementInspectionUser).filter(RiskManagementInspectionUser.user_id==user_id)
  349. if task.task_range == '0':
  350. user_range_area_codes= ['440900000000']
  351. elif task.task_range == '1':
  352. query = query.filter(
  353. and_(RiskManagementInspectionUser.area_code.like('%000000'), RiskManagementInspectionUser.area_code.notlike('%00000000')))
  354. user_range_area_codes= [i.area_code for i in query.all()]
  355. elif task.task_range == '2':
  356. query = query.filter(and_(RiskManagementInspectionUser.area_code.like('%000'), RiskManagementInspectionUser.area_code.notlike('%000000')))
  357. user_range_area_codes= [i.area_code for i in query.all()]
  358. elif task.task_range == '3':
  359. query = query.filter(RiskManagementInspectionUser.area_code.notlike('%000'))
  360. user_range_area_codes= [i.area_code for i in query.all()]
  361. else:
  362. user_range_area_codes= []
  363. for area_code in user_range_area_codes:
  364. task_info = {
  365. "id": task.id,
  366. "business": task.type,
  367. "cycle": task.cycle,
  368. "area_code":area_code,
  369. "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
  370. "task_time": task.tsak_time.strftime('%Y-%m-%d'),
  371. "create_time": task.create_time.strftime('%Y-%m-%d')
  372. }
  373. InspectionTasks_list.append(task_info)
  374. # 返回结果
  375. return {
  376. "code": 200,
  377. "msg": "成功",
  378. "data": InspectionTasks_list,
  379. "total": total_items,
  380. "page": page,
  381. "pageSize": pageSize,
  382. "totalPages": (total_items + pageSize - 1) // pageSize
  383. }
  384. except Exception as e:
  385. # 处理异常
  386. traceback.print_exc()
  387. raise HTTPException(status_code=500, detail=str(e))
  388. @router.get('/children/task/records')
  389. async def get_children_task_records_list(
  390. type: str =Query(None, description='类型'),
  391. page: int = Query(1, gt=0, description='页码'),
  392. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  393. db: Session = Depends(get_db),
  394. user_id = Depends(valid_access_token)
  395. ):
  396. try:
  397. # 获取子任务id
  398. query = db.query(RiskManagementInspectionTaskChildrenTask)
  399. query = query.filter(RiskManagementInspectionTaskChildrenTask.del_flag != '2')
  400. if type:
  401. query = query.filter(RiskManagementInspectionTaskChildrenTask.type==type)
  402. children_ids = [i.id for i in query.all()]
  403. print(children_ids)
  404. # 构建查询
  405. query = db.query(RiskManagementInspectionTaskChildrenTaskLog)
  406. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag != '2')
  407. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.user_id == user_id)
  408. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id.in_(children_ids))
  409. total_items = query.count()
  410. # 排序
  411. query = query.order_by(RiskManagementInspectionTaskChildrenTaskLog.create_time.desc())
  412. # 执行分页查询
  413. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  414. # 将查询结果转换为列表形式的字典
  415. InspectionTasks_list = []
  416. for task in InspectionTasks:
  417. children_task = inspection_task_children_task_id_get_inspection_task_children_task_info(db,task.children_task_id)
  418. task_info = {
  419. "id": task.id,
  420. "business": children_task.type,
  421. "cycle": children_task.cycle,
  422. "area_code": task.area_code,
  423. "area": area_code_get_ancestors_names(db, area_code_get_area_info(db, task.area_code)),
  424. "task_time": children_task.tsak_time.strftime('%Y-%m-%d'),
  425. "create_time": task.create_time.strftime('%Y-%m-%d %H:%M')
  426. }
  427. InspectionTasks_list.append(task_info)
  428. # 返回结果
  429. return {
  430. "code": 200,
  431. "msg": "成功",
  432. "data": InspectionTasks_list,
  433. "total": total_items,
  434. "page": page,
  435. "pageSize": pageSize,
  436. "totalPages": (total_items + pageSize - 1) // pageSize
  437. }
  438. except Exception as e:
  439. # 处理异常
  440. traceback.print_exc()
  441. raise HTTPException(status_code=500, detail=str(e))
  442. @router.get('/children/task/result/{children_task_id}')
  443. async def get_children_task_result(
  444. children_task_id: str ,
  445. db: Session = Depends(get_db),
  446. page: int = Query(1, gt=0, description='页码'),
  447. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  448. user_id = Depends(valid_access_token)
  449. ):
  450. try:
  451. # 构建查询
  452. query = db.query(RiskManagementInspectionTaskChildrenTaskResult)
  453. query = query.filter(RiskManagementInspectionTaskChildrenTaskResult.del_flag != '2')
  454. # 应用查询条件
  455. query = query.filter(RiskManagementInspectionTaskChildrenTaskResult.children_task_id == children_task_id)
  456. # 计算总条目数
  457. total_items = query.count()
  458. # 排序
  459. query = query.order_by(RiskManagementInspectionTaskChildrenTaskResult.create_time.desc())
  460. # 执行分页查询
  461. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  462. InspectionTasks_list = []
  463. for task in InspectionTasks:
  464. area_code = task.area_code
  465. area = area_code_get_area_info(db, area_code)
  466. area = area_code_get_ancestors_names(db, area)
  467. task_info = {
  468. "id": task.id,
  469. # "children_task_id": task.children_task_id,
  470. "type":inspection_task_children_task_id_get_inspection_task_children_task_info(db,task.children_task_id).type,
  471. "inspection_point_name": task.inspection_point_name,
  472. # "area": area,
  473. # "create_time": task.create_time.strftime('%Y-%m-%d'),
  474. # "nick_name": task.nick_name,
  475. "inspection_result": task.inspection_result,
  476. "remark": task.remark,
  477. "fileList": get_file_query_fun(db=db, from_scenario='RiskManagementInspectionTaskChildrenTaskResult',
  478. foreign_key=task.id)
  479. }
  480. InspectionTasks_list.append(task_info)
  481. # 返回结果
  482. return {
  483. "code": 200,
  484. "msg": "成功",
  485. "data": InspectionTasks_list,
  486. "total": total_items,
  487. "page": page,
  488. "pageSize": pageSize,
  489. "totalPages": (total_items + pageSize - 1) // pageSize
  490. }
  491. except Exception as e:
  492. # 处理异常
  493. traceback.print_exc()
  494. raise HTTPException(status_code=500, detail=str(e))
  495. @router.post('/children/task/result/create')
  496. async def create_inspection_task(
  497. db: Session = Depends(get_db),
  498. body = Depends(remove_xss_json),
  499. user_id = Depends(valid_access_token)
  500. ):
  501. try:
  502. children_task_id = body['children_task_id']
  503. result = body['result']
  504. area_code = body['area_code']
  505. area =area_code_get_ancestors_names(db, area_code_get_area_info(db, area_code))
  506. # task_time = body['task_time']
  507. # 创建新的
  508. new_task_log = RiskManagementInspectionTaskChildrenTaskLog(
  509. id=new_guid(),
  510. children_task_id=children_task_id,
  511. area_code = area_code,
  512. area = area,
  513. task_status = '1',
  514. user_id = user_id,
  515. nick_name = user_id_get_user_info(db,user_id).nick_name,
  516. create_by = user_id
  517. )
  518. for info in result:
  519. new_file_list = info['fileList']
  520. inspection_point_name= info['inspection_point_name']
  521. inspection_result = info['inspection_result']
  522. remark = info['remark']
  523. new_task_result = RiskManagementInspectionTaskChildrenTaskResult(
  524. id=new_guid(),
  525. children_task_id=children_task_id,
  526. inspection_point_name=inspection_point_name,
  527. area_code=area_code,
  528. inspection_result=inspection_result,
  529. remark = remark,
  530. user_id = user_id,
  531. nick_name = user_id_get_user_info(db,user_id).nick_name,
  532. create_by = user_id
  533. )
  534. db.add(new_task_result)
  535. for file in new_file_list:
  536. file_name = file['file_name']
  537. file_name_desc = file['file_name_desc']
  538. status = file['status']
  539. new_file = RiskManagementFile(
  540. file_id=new_guid(),
  541. foreign_key=new_task_result.id,
  542. from_scenario='RiskManagementInspectionTaskChildrenTaskResult',
  543. file_name=file_name,
  544. file_name_desc=file_name_desc,
  545. status=status
  546. )
  547. db.add(new_file)
  548. # 添加到数据库会话并提交
  549. db.add(new_task_log)
  550. db.commit()
  551. # 返回创建成功的响应
  552. return {
  553. "code": 200,
  554. "msg": "成功",
  555. "data": None
  556. }
  557. except Exception as e:
  558. # 处理异常
  559. traceback.print_exc()
  560. raise HTTPException(status_code=500, detail=str(e))
  561. ####中屏子任务
  562. @router.get('/children/task/{task_id}/list')
  563. async def get_inspection_task_list(
  564. task_id: str ,
  565. page: int = Query(1, gt=0, description='页码'),
  566. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  567. db: Session = Depends(get_db),
  568. user_id = Depends(valid_access_token)
  569. ):
  570. try:
  571. # 构建查询
  572. query = db.query(RiskManagementInspectionTaskChildrenTask)
  573. query = query.filter(RiskManagementInspectionTaskChildrenTask.del_flag != '2')
  574. # 应用查询条件
  575. query = query.filter(RiskManagementInspectionTaskChildrenTask.task_id == task_id)
  576. # 计算总条目数
  577. total_items = query.count()
  578. # 排序
  579. query = query.order_by(RiskManagementInspectionTaskChildrenTask.tsak_time.asc())
  580. # 执行分页查询
  581. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  582. # 将查询结果转换为列表形式的字典
  583. InspectionTasks_list = []
  584. for task in InspectionTasks:
  585. task_num=task.task_num
  586. completed_num = db.query(RiskManagementInspectionTaskChildrenTaskLog)\
  587. .filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag!='2')\
  588. .filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id==task.id).count()
  589. incomplete_num = task_num-completed_num
  590. task_info = {
  591. "id": task.id,
  592. "task_id":task.task_id,
  593. "task_number": task.task_number,
  594. "business": task.type,
  595. "task_time": task.tsak_time.strftime('%Y-%m-%d'),
  596. "cycle": task.cycle,
  597. "inspection_range": task.task_range,
  598. "completed_num": completed_num,
  599. "incomplete_num": incomplete_num,
  600. "create_time": task.create_time.strftime('%Y-%m-%d')
  601. }
  602. InspectionTasks_list.append(task_info)
  603. # 返回结果
  604. return {
  605. "code": 200,
  606. "msg": "成功",
  607. "data": InspectionTasks_list,
  608. "total": total_items,
  609. "page": page,
  610. "pageSize": pageSize,
  611. "totalPages": (total_items + pageSize - 1) // pageSize
  612. }
  613. except Exception as e:
  614. # 处理异常
  615. traceback.print_exc()
  616. raise HTTPException(status_code=500, detail=str(e))
  617. @router.get('/children/task/log/{children_task_id}/{status}/list')
  618. async def get_inspection_task_list(
  619. children_task_id: str ,
  620. status:str,
  621. area_code: str = Query(None, description='区划编码'),
  622. page: int = Query(1, gt=0, description='页码'),
  623. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  624. db: Session = Depends(get_db),
  625. user_id = Depends(valid_access_token)
  626. ):
  627. try:
  628. # 构建查询
  629. total_items= 0
  630. InspectionTasks_list = []
  631. if status=='completed':
  632. query = db.query(RiskManagementInspectionTaskChildrenTaskLog)
  633. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.del_flag != '2')
  634. # 应用查询条件
  635. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.children_task_id == children_task_id)
  636. if area_code:
  637. query = query.filter(RiskManagementInspectionTaskChildrenTaskLog.area_code == area_code)
  638. # 计算总条目数
  639. total_items = query.count()
  640. # 排序
  641. query = query.order_by(RiskManagementInspectionTaskChildrenTaskLog.create_time.desc())
  642. # 执行分页查询
  643. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  644. # 将查询结果转换为列表形式的字典
  645. for task in InspectionTasks:
  646. task_info = {
  647. "id": task.id,
  648. "children_task_id":children_task_id,
  649. "area_code": task.area_code,
  650. "area": task.area,
  651. "task_status": task.task_status,
  652. "user_id": task.user_id,
  653. "nick_name": task.nick_name,
  654. "create_time": task.create_time.strftime('%Y-%m-%d')
  655. }
  656. InspectionTasks_list.append(task_info)
  657. # 返回结果
  658. elif status == 'incomplete':
  659. children_task = inspection_task_children_task_id_get_inspection_task_children_task_info(db,children_task_id)
  660. if children_task:
  661. task = inspection_task_id_get_inspection_task_info(db,children_task.task_id)
  662. if task:
  663. complete_area_code_list =[i.area_code for i in inspection_task_children_task_id_get_inspection_task_children_task_log_info(db,children_task_id)]
  664. area_code_list = get_area_code_exclude_list(db,task.inspection_range,complete_area_code_list)
  665. if area_code and area_code in area_code_list:
  666. area_code_list = [area_code_list]
  667. for area_code in area_code_list:
  668. task_info = {
  669. "id": new_guid(),
  670. "children_task_id": children_task_id,
  671. "area_code": area_code,
  672. "area": area_code_get_ancestors_names(db,area_code_get_area_info(db,area_code)),
  673. "task_status": '0',
  674. "user_id": '',
  675. "nick_name": '',
  676. "create_time": children_task.tsak_time.strftime('%Y-%m-%d')
  677. }
  678. InspectionTasks_list.append(task_info)
  679. return {
  680. "code": 200,
  681. "msg": "成功",
  682. "data": InspectionTasks_list,
  683. "total": total_items,
  684. "page": page,
  685. "pageSize": pageSize,
  686. "totalPages": (total_items + pageSize - 1) // pageSize
  687. }
  688. except Exception as e:
  689. # 处理异常
  690. traceback.print_exc()
  691. raise HTTPException(status_code=500, detail=str(e))
  692. @router.get('/children/task/result/{children_task_id}/list')
  693. async def get_inspection_task_list(
  694. children_task_id: str ,
  695. area_code: str = Query(None, description='区划编码'),
  696. inspection_result: str = Query(None, description='巡查结果'),
  697. nick_name: str = Query(None, description='姓名'),
  698. page: int = Query(1, gt=0, description='页码'),
  699. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  700. db: Session = Depends(get_db),
  701. user_id = Depends(valid_access_token)
  702. ):
  703. try:
  704. # 构建查询
  705. query = db.query(RiskManagementInspectionTaskChildrenTaskResult)
  706. query = query.filter(RiskManagementInspectionTaskChildrenTaskResult.del_flag != '2')
  707. query = query.filter(RiskManagementInspectionTaskChildrenTaskResult.children_task_id == children_task_id)
  708. # 应用查询条件
  709. if area_code:
  710. query = query.filter(RiskManagementInspectionTaskChildrenTaskResult.area_code == area_code)
  711. if inspection_result:
  712. query = query.filter(RiskManagementInspectionTaskChildrenTaskResult.inspection_result == inspection_result)
  713. if nick_name:
  714. query = query.filter(RiskManagementInspectionTaskChildrenTaskResult.nick_name.like(f'%{nick_name}%') )
  715. # 计算总条目数
  716. total_items = query.count()
  717. # 排序
  718. query = query.order_by(RiskManagementInspectionTaskChildrenTaskResult.create_time.desc())
  719. # 执行分页查询
  720. InspectionTasks = query.offset((page - 1) * pageSize).limit(pageSize).all()
  721. # 将查询结果转换为列表形式的字典
  722. InspectionTasks_list = []
  723. for task in InspectionTasks:
  724. area_code = task.area_code
  725. area = area_code_get_area_info(db, area_code)
  726. area = area_code_get_ancestors_names(db, area)
  727. task_info = {
  728. "id": task.id,
  729. "children_task_id": task.children_task_id,
  730. "inspection_point_name":task.inspection_point_name,
  731. "area": area,
  732. "create_time": task.create_time.strftime('%Y-%m-%d'),
  733. "nick_name": task.nick_name,
  734. "inspection_result": task.inspection_result,
  735. "fileList": get_file_query_fun(db=db,from_scenario='RiskManagementInspectionTaskChildrenTaskResult', foreign_key=task.id),
  736. "remark":task.remark
  737. }
  738. InspectionTasks_list.append(task_info)
  739. # 返回结果
  740. return {
  741. "code": 200,
  742. "msg": "成功",
  743. "data": InspectionTasks_list,
  744. "total": total_items,
  745. "page": page,
  746. "pageSize": pageSize,
  747. "totalPages": (total_items + pageSize - 1) // pageSize
  748. }
  749. except Exception as e:
  750. # 处理异常
  751. traceback.print_exc()
  752. raise HTTPException(status_code=500, detail=str(e))