open_access_request_pending.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. import hashlib
  2. from datetime import datetime
  3. import config
  4. import logging
  5. from EchoBot import JabberBot
  6. from slixmpp.stanza import Message
  7. import jsonAndRequest as jsreq
  8. from time import sleep
  9. from lib import filter_interval_tickets
  10. botname = "open_access_request_pending"
  11. operating_status = 320
  12. JID = botname + "@" + config.JSERVER
  13. PORT = config.PORT
  14. PASSWORD = hashlib.md5((botname + config.PASSWORD).encode('utf-8')).hexdigest()
  15. bot = JabberBot(JID, PASSWORD)
  16. # таким образом хранится список jid, от которых можно получать сообщения этому боту
  17. listen_to = [
  18. "test@ej.sharix-app.org",
  19. "open_template_bot@ej.sharix-app.org"
  20. ]
  21. # тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
  22. proceed_to = [
  23. botname,
  24. "open_st_request_declined@ej.sharix-app.org",
  25. "open_service_request_forcemajeure@ej.sharix-app.org"
  26. ]
  27. INTERVAL_COUNT = 3
  28. # INTERVAL_TIME = 30 * 60 # 30 минут в секундах
  29. INTERVAL_TIME = 30 # Для проверки
  30. global ticket_list
  31. def message_handler(msg: Message):
  32. """Обработчик входящих сообщений"""
  33. if msg['type'] in ('chat', 'normal'):
  34. text = msg['body'] # текст сообщения боту
  35. sender = msg['from'] # отправитель сообщения
  36. if (str(sender).split("/")[0]) in listen_to:
  37. if text is not None:
  38. logging.info(f"Сообщение получено")
  39. def start_handler():
  40. """Событие запуска обработчика."""
  41. logging.info(">>>>> %s |---| %s <<<<<", JID, PASSWORD)
  42. global tickets
  43. tickets = get_fake_data()
  44. while(True):
  45. if tickets == []:
  46. sleep(INTERVAL_TIME)
  47. else:
  48. for ticket in tickets:
  49. ticket['interval_count'] -= 1
  50. if ticket <= 0:
  51. processing_interval_unlimited(ticket)
  52. else:
  53. processing(ticket)
  54. tickets = filter_interval_tickets(tickets)
  55. sleep(INTERVAL_TIME)
  56. # START CUSTOM FUNCTIONS
  57. def processing_interval_unlimited(ticket):
  58. logging.debug(f"Лимит попыток обработки тикета {ticket.id} исчерпан")
  59. # db.changestatus
  60. # bot.send_message(JID, f"Сообщение отправлено {JID}: {datetime.now()}")
  61. # bot message:
  62. # {
  63. # "action": "add_ticket"
  64. # "ticket_id": 0
  65. # "ticket_list_id": 0
  66. # }
  67. def processing(ticket):
  68. logging.debug(f"Начало обработки тикета {ticket.id}")
  69. # Do something
  70. logging.debug(f"Конец обработки тикета {ticket.id}")
  71. def get_fake_data():
  72. return [
  73. {
  74. "ticket_id": 0,
  75. "ticket_list_id": 0,
  76. "interval_count": INTERVAL_COUNT
  77. },
  78. {
  79. "ticket_id": 1,
  80. "ticket_list_id": 0,
  81. "interval_count": INTERVAL_COUNT
  82. },
  83. {
  84. "ticket_id": 2,
  85. "ticket_list_id": 0,
  86. "interval_count": INTERVAL_COUNT
  87. },
  88. {
  89. "ticket_id": 3,
  90. "ticket_list_id": 0,
  91. "interval_count": INTERVAL_COUNT
  92. },
  93. {
  94. "ticket_id": 4,
  95. "ticket_list_id": 0,
  96. "interval_count": INTERVAL_COUNT
  97. },
  98. ]
  99. # def get_token():
  100. # return jsreq.requestGetToken(botname, PASSWORD, config.API_URL + "/auth/token/login/")
  101. # def set_tasklist(token):
  102. # global tasklist
  103. # tasklist = []
  104. # tasklist = jsreq.requestGetList(token, config.API_URL + "/tickets/api/tickets/?list_id=10")
  105. # END CUSTOM FUNCTIONS
  106. # ---------------------------------------
  107. # ---------------------------------------
  108. # ---------------------------------------
  109. # ---------------------------------------
  110. # ---------------------------------------
  111. # # обработчик входящих сообщений
  112. # def message_handler(conn, mess):
  113. # text = mess.getBody() # текст сообщения боту
  114. # user = mess.getFrom() # отправитель сообщения
  115. # print(str(user).split("/")[0])
  116. # if (str(user).split("/")[0]) in listen_to:
  117. # print(text)
  118. # print(mess)
  119. # if text is not None:
  120. # orderObj = jsreq.jsonToOrderTicket(text)
  121. # print(orderObj)
  122. # tasklist.append(orderObj)
  123. # bot.bot_log(str(datetime.now()) + " Поступивший заказ успешно добавлен в очередь обработки\n")
  124. # def open_access_request_pending_wait(period, localtask):
  125. # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ ожидает\n")
  126. # time.sleep(period)
  127. # # ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
  128. # localtask.title = localtask.title + "1"
  129. # # обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
  130. # bot.proceed_status(proceed_to[1], localtask)
  131. # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ перенаправлен\n")
  132. # def open_access_request_pending_process(localtask):
  133. # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
  134. # push_notifications(localtask)
  135. # open_access_request_pending_wait(100, localtask)
  136. # # Пока не уверен
  137. # def push_notifications(localtask):
  138. # # Отправка уведомлений
  139. # # ...
  140. # return True
  141. # def open_access_request_pending():
  142. # while (len(tasklist)):
  143. # localtask = tasklist.pop(0)
  144. # bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " " + "Заказ в очереди на обработке\n")
  145. # print("EACH TASKLIST", tasklist)
  146. # if (localtask.status != operating_status):
  147. # bot.proceed_status(proceed_to[-1], localtask)
  148. # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ не по адресу, перенаправляем на форсмажор\n")
  149. # continue
  150. # # if (localtask.title!="10"):
  151. # # t1=threading.Thread(target=open_service_request_booked_wait, args=(5,localtask))
  152. # # t1.start()
  153. # # if (localtask.title=="101"):
  154. # # t1=threading.Thread(target=open_service_request_booked_process, args=(10,localtask))
  155. # # t1.start()
  156. # t1 = threading.Thread(target=open_access_request_pending_process, args=(localtask))
  157. # t1.start()
  158. # # если никакие обработчики не подошли - отправляем обратно в очередь
  159. # bot.proceed_status(proceed_to[0], localtask)
  160. # print("Заказ возвращен в очередь\n")
  161. # print(tasklist)
  162. # # пустой список заказов