db_task.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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_feeback_file_list(db: Session, task_id: str):
  55. file_query = db.query(TaskFile)
  56. file_query = file_query.filter(TaskFile.del_flag != '2')
  57. file_query = file_query.filter(TaskFile.from_scenario == 'task_feeback')
  58. file_query = file_query.filter(TaskFile.foreign_key == task_id)
  59. files = file_query.all()
  60. result = [{
  61. "uid": file.file_id,
  62. "status": file.status,
  63. "name": file.file_name_desc,
  64. "url": file.file_name
  65. } for file in files]
  66. return result
  67. def get_task_type_text(task_type: str) -> str:
  68. if task_type == '0':
  69. return '事件处置'
  70. elif task_type == '1':
  71. return '防范措施'
  72. elif task_type == '2':
  73. return '险情处理'
  74. elif task_type == '3':
  75. return '督办任务'
  76. elif task_type == '4':
  77. return '现场人员'
  78. elif task_type == '5':
  79. return '手机工作台'
  80. elif task_type == '6':
  81. return '救援任务'
  82. else:
  83. return str(task_type)
  84. def get_task_feebacks(db: Session, task_id: str):
  85. rows = db.query(TaskFeeback).filter(and_(TaskFeeback.task_id == task_id)).all()
  86. data = []
  87. for row in rows:
  88. info = get_model_dict(row)
  89. info['create_time'] = get_datetime_str(row.create_time)
  90. info['approval_time'] = get_datetime_str(row.approval_time)
  91. info['fileList'] = get_task_feeback_file_list(db, task_id)
  92. data.append(info)
  93. return data
  94. # 任务发布后半个小时内没反馈记录就需要alert
  95. def need_task_alert(db: Session, task_id: str):
  96. rows = db.query(TaskFeeback).filter(and_(TaskFeeback.task_id == task_id)).all()
  97. if len(rows) > 0:
  98. return False
  99. row = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id).first()
  100. alert_time = row.creation_time + timedelta(seconds=60 * 30) # 半个小时后
  101. return datetime.now() > alert_time