db_task.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from sqlalchemy.orm import Session
  4. from sqlalchemy import text, exists, and_, or_, not_
  5. from sqlalchemy.sql import func
  6. from database import get_db
  7. from extensions import logger
  8. import random
  9. from models import *
  10. from utils import *
  11. def get_next_event_id(db: Session):
  12. while True:
  13. random_10_digit_number = random.randint(1000000000, 9999999999)
  14. taskId = 'task' + str(random_10_digit_number)
  15. it_exists = db.query(
  16. exists().where(TaskRegistration.task_id == taskId)
  17. ).scalar()
  18. if it_exists == False:
  19. return taskId
  20. def get_image_file_list(db: Session, task_id: str):
  21. row = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id).first()
  22. if row is None:
  23. return []
  24. task_id = row.task_id
  25. file_query = db.query(TaskFile)
  26. file_query = file_query.filter(TaskFile.del_flag != '2')
  27. file_query = file_query.filter(TaskFile.from_scenario == 'task_img')
  28. file_query = file_query.filter(TaskFile.foreign_key == str(row.id))
  29. files = file_query.all()
  30. result = [{
  31. "uid": file.file_id,
  32. "status": file.status,
  33. "name": file.file_name_desc,
  34. "url": file.file_name
  35. } for file in files]
  36. return result
  37. def get_task_file_list(db: Session, task_id: str):
  38. row = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id).first()
  39. if row is None:
  40. return []
  41. task_id = row.task_id
  42. file_query = db.query(TaskFile)
  43. file_query = file_query.filter(TaskFile.del_flag != '2')
  44. file_query = file_query.filter(TaskFile.from_scenario == 'task_file')
  45. file_query = file_query.filter(TaskFile.foreign_key == str(row.id))
  46. files = file_query.all()
  47. result = [{
  48. "uid": file.file_id,
  49. "status": file.status,
  50. "name": file.file_name_desc,
  51. "url": file.file_name
  52. } for file in files]
  53. return result
  54. def get_task_type_text(task_type: str) -> str:
  55. if task_type == '0':
  56. return '事件处置'
  57. elif task_type == '1':
  58. return '防范措施'
  59. elif task_type == '2':
  60. return '险情处理'
  61. elif task_type == '3':
  62. return '督办任务'
  63. else:
  64. return str(task_type)
  65. def get_task_feebacks(db: Session, task_id: str):
  66. rows = db.query(TaskFeeback).filter(and_(TaskFeeback.task_id == task_id)).all()
  67. data = []
  68. for row in rows:
  69. info = get_model_dict(row)
  70. info['create_time'] = get_datetime_str(row.create_time)
  71. info['approval_time'] = get_datetime_str(row.approval_time)
  72. data.append(info)
  73. return data
  74. # 任务发布后半个小时内没反馈记录就需要alert
  75. def need_task_alert(db: Session, task_id: str):
  76. rows = db.query(TaskFeeback).filter(and_(TaskFeeback.task_id == task_id)).all()
  77. if len(rows) > 0:
  78. return False
  79. row = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id).first()
  80. alert_time = row.creation_time + timedelta(seconds=60 * 30) # 半个小时后
  81. return datetime.now() > alert_time