|
@@ -10,6 +10,7 @@ from datetime import datetime
|
|
|
|
|
|
import time
|
|
import time
|
|
import threading
|
|
import threading
|
|
|
|
+import asyncio
|
|
|
|
|
|
#test
|
|
#test
|
|
import jsonAndRequest as jsreq
|
|
import jsonAndRequest as jsreq
|
|
@@ -18,7 +19,7 @@ global tasklist
|
|
|
|
|
|
botname="open_servicerequest_assigned"
|
|
botname="open_servicerequest_assigned"
|
|
|
|
|
|
-operating_status=212
|
|
|
|
|
|
+operating_status='212'
|
|
JID=botname+"@"+config.JSERVER
|
|
JID=botname+"@"+config.JSERVER
|
|
PORT=config.PORT
|
|
PORT=config.PORT
|
|
|
|
|
|
@@ -26,6 +27,7 @@ PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
|
|
|
|
|
|
print(JID, PASSWORD)
|
|
print(JID, PASSWORD)
|
|
|
|
|
|
|
|
+drivers = ["799999999998@ej.sharix-app.org"]
|
|
#таким образом хранится список jid, от которых можно получать сообщения этому боту
|
|
#таким образом хранится список jid, от которых можно получать сообщения этому боту
|
|
listen_to=["open_servicerequest_booked@ej.sharix-app.org","open_servicerequest_pending@ej.sharix-app.org"]
|
|
listen_to=["open_servicerequest_booked@ej.sharix-app.org","open_servicerequest_pending@ej.sharix-app.org"]
|
|
|
|
|
|
@@ -39,18 +41,15 @@ idle_value=10
|
|
def message_handler(conn, mess):
|
|
def message_handler(conn, mess):
|
|
text = mess.getBody()#текст сообщения боту
|
|
text = mess.getBody()#текст сообщения боту
|
|
user = mess.getFrom()#отправитель сообщения
|
|
user = mess.getFrom()#отправитель сообщения
|
|
-
|
|
|
|
- print (str(user).split("/")[0])
|
|
|
|
if (str(user).split("/")[0]) in listen_to:
|
|
if (str(user).split("/")[0]) in listen_to:
|
|
- print(text)
|
|
|
|
- print(mess)
|
|
|
|
|
|
+ print('order_handler')
|
|
|
|
|
|
if text is not None:
|
|
if text is not None:
|
|
orderObj = jsreq.jsonToOrder(text)
|
|
orderObj = jsreq.jsonToOrder(text)
|
|
- print (orderObj)
|
|
|
|
tasklist.append(orderObj)
|
|
tasklist.append(orderObj)
|
|
bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
|
|
bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
def open_servicerequest_assigned_wait(period,localtask):
|
|
def open_servicerequest_assigned_wait(period,localtask):
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
|
|
time.sleep(period)
|
|
time.sleep(period)
|
|
@@ -62,66 +61,66 @@ def open_servicerequest_assigned_wait(period,localtask):
|
|
bot.proceed_status(proceed_to[0],localtask)
|
|
bot.proceed_status(proceed_to[0],localtask)
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
|
|
|
|
|
|
|
|
+def wait_for_answer(localtask):
|
|
|
|
+ order = localtask
|
|
|
|
+ driver = drivers[0]
|
|
|
|
+ send_message(order,driver) # Здесь можно реализовать логику выбора водителя
|
|
|
|
+ while True:
|
|
|
|
+ if len(answers) > 0:
|
|
|
|
+ answer = answers.pop(0)
|
|
|
|
+ if answer.answer == 'Accept':
|
|
|
|
+ localtask.status='221'
|
|
|
|
+ jsreq.change_to_task(localtask,token)
|
|
|
|
+ bot.proceed_status(proceed_to[1], localtask)
|
|
|
|
+ bot.bot_log(botname + " " + str(datetime.now()) + f" Заказ отправлен на {proceed_to[1]}\n")
|
|
|
|
+ else:
|
|
|
|
+ localtask.status='229'
|
|
|
|
+ localtask.provider=None
|
|
|
|
+ jsreq.change_to_task(localtask,token)
|
|
|
|
+ bot.proceed_status(proceed_to[2], localtask)
|
|
|
|
+ bot.bot_log(botname + " " + str(datetime.now()) + f" Заказ отправлен на {proceed_to[2]}\n")
|
|
|
|
+ break
|
|
|
|
+ else:
|
|
|
|
+ print("Ожидание ответа...")
|
|
|
|
+ time.sleep(1)
|
|
|
|
+
|
|
def open_servicerequest_assigned_process(localtask):
|
|
def open_servicerequest_assigned_process(localtask):
|
|
bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
|
|
bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ в обработчике\n")
|
|
-
|
|
|
|
- order = jsreq.jsonToOrder(localtask)
|
|
|
|
-
|
|
|
|
- if provider!=None:
|
|
|
|
- send_message(order)
|
|
|
|
- if check_order(order)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- # Заглушка проверка бронирования без подтверждения
|
|
|
|
- # if True:
|
|
|
|
- # bot.proceed_status(proceed_to[0],localtask)
|
|
|
|
- # bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
|
|
|
|
- # else:
|
|
|
|
- # if order.asap:
|
|
|
|
- # # Заглушка. Отображение ответственному в приложении показывается заказ
|
|
|
|
- # send_message(order)
|
|
|
|
- # check_order(order)
|
|
|
|
- # else:
|
|
|
|
- # # Заглушка. Отображение в предварительных заказах назначенному исполнителю
|
|
|
|
- # send_message()
|
|
|
|
- # # Заглушка
|
|
|
|
- # if order.time_start_predicted > 100:
|
|
|
|
- # bot.proceed_status(proceed_to[0],localtask)
|
|
|
|
- # bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и отправлен в очередь\n")
|
|
|
|
- # return
|
|
|
|
- # # Заглушка. Отображение ответственному в приложении показывается заказ
|
|
|
|
- # send_message()
|
|
|
|
- # check_order(order)
|
|
|
|
-
|
|
|
|
-def check_order(localtask):
|
|
|
|
- # Заглушка. Заказ принят?
|
|
|
|
- if localtask:
|
|
|
|
- bot.proceed_status(proceed_to[1],localtask)
|
|
|
|
- bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
|
|
|
|
- else:
|
|
|
|
- bot.proceed_status(proceed_to[2],localtask)
|
|
|
|
- bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен\n")
|
|
|
|
-
|
|
|
|
|
|
+ order = localtask
|
|
|
|
+ if order.provider!=None:
|
|
|
|
+ wait_thread = threading.Thread(target=wait_for_answer, args=(localtask,))
|
|
|
|
+ wait_thread.start()
|
|
|
|
|
|
|
|
|
|
|
|
+def message_answer(conn, mess):
|
|
|
|
+ text = mess.getBody()#текст сообщения боту
|
|
|
|
+ user = mess.getFrom()#отправитель сообщения
|
|
|
|
+ if (str(user).split("/")[0]) in drivers:
|
|
|
|
+ print ('answer_handler')
|
|
|
|
+ if text is not None:
|
|
|
|
+ answerObj = jsreq.to_answer(text)
|
|
|
|
+ answers.append(answerObj)
|
|
|
|
+ bot.bot_log(str(datetime.now())+" Поступивший ответ успешно добавлен в очередь обработки\n")
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def send_message(order,driver):
|
|
|
|
+ order=json.dumps(order.__dict__)
|
|
|
|
+ bot.send_notification(driver,order)
|
|
|
|
|
|
|
|
|
|
def open_servicerequest_assigned():
|
|
def open_servicerequest_assigned():
|
|
while (len(tasklist)):
|
|
while (len(tasklist)):
|
|
-
|
|
|
|
localtask=tasklist.pop(0)
|
|
localtask=tasklist.pop(0)
|
|
- bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
|
|
|
|
- print("EACH TASKLIST", tasklist)
|
|
|
|
-
|
|
|
|
if (localtask.status!=operating_status):
|
|
if (localtask.status!=operating_status):
|
|
|
|
+ localtask.status='239'
|
|
|
|
+ jsreq.change_to_task(localtask,token)
|
|
bot.proceed_status(proceed_to[-1],localtask)
|
|
bot.proceed_status(proceed_to[-1],localtask)
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
|
|
continue
|
|
continue
|
|
else:
|
|
else:
|
|
bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
|
|
bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
|
|
- t1=threading.Thread(target=open_servicerequest_assigned_wait, args=([localtask]))
|
|
|
|
|
|
+ t1=threading.Thread(target=open_servicerequest_assigned_process, args=([localtask]))
|
|
t1.start()
|
|
t1.start()
|
|
- continue
|
|
|
|
# if (localtask.title!="10"):
|
|
# if (localtask.title!="10"):
|
|
# t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
|
|
# t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
|
|
# t1.start()
|
|
# t1.start()
|
|
@@ -130,27 +129,30 @@ def open_servicerequest_assigned():
|
|
# t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
|
|
# t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
|
|
# t1.start()
|
|
# t1.start()
|
|
|
|
|
|
- t1=threading.Thread(target=open_servicerequest_assigned_process, args=(localtask))
|
|
|
|
- t1.start()
|
|
|
|
|
|
+ # t1=threading.Thread(target=open_servicerequest_assigned_process, args=(localtask))
|
|
|
|
+ # t1.start()
|
|
|
|
|
|
#если никакие обработчики не подошли - отправляем обратно в очередь
|
|
#если никакие обработчики не подошли - отправляем обратно в очередь
|
|
- bot.proceed_status(proceed_to[0],localtask)
|
|
|
|
- print("Заказ возвращен в очередь\n")
|
|
|
|
- print(tasklist)
|
|
|
|
|
|
+ # bot.proceed_status(proceed_to[0],localtask)
|
|
|
|
+ # print("Заказ возвращен в очередь\n")
|
|
|
|
+ # print(tasklist)
|
|
|
|
|
|
#Авторизация и запуск бота
|
|
#Авторизация и запуск бота
|
|
|
|
|
|
|
|
+answers = []
|
|
#пустой список заказов
|
|
#пустой список заказов
|
|
tasklist = []
|
|
tasklist = []
|
|
|
|
|
|
#надо инициализировать tasklist при запуске из API
|
|
#надо инициализировать tasklist при запуске из API
|
|
token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"my/api/v1/auth/token/login/")
|
|
token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"my/api/v1/auth/token/login/")
|
|
#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
|
|
#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
|
|
-tasklist_database=jsreq.requestGetList(token, config.API_URL+"/dbsynce/api/orders/")
|
|
|
|
-# print (len(tasklist))
|
|
|
|
|
|
+tasklist_dbsynce=jsreq.requestGetList(token, config.API_URL+"/dbsynce/api/orders/")
|
|
|
|
|
|
-bot = JabberBot(JID, PASSWORD, PORT)
|
|
|
|
|
|
|
|
|
|
+bot = JabberBot(JID, PASSWORD, PORT)
|
|
bot.register_handler('message', message_handler)
|
|
bot.register_handler('message', message_handler)
|
|
-print(tasklist)
|
|
|
|
|
|
+bot.register_handler('message', message_answer)
|
|
bot.start(open_servicerequest_assigned)
|
|
bot.start(open_servicerequest_assigned)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#Добавить функцию поток для ожидания получения заказа.
|