risk_router.py 40 KB

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