|
@@ -27,10 +27,10 @@ PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
|
|
|
print(JID, PASSWORD)
|
|
|
|
|
|
#таким образом хранится список jid, от которых можно получать сообщения этому боту
|
|
|
-listen_to=["9090@ej.sharix-app.org","test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org","799999999990@ej.sharix-app.org"]
|
|
|
+listen_to=["799999999990@ej.sharix-app.org"]
|
|
|
|
|
|
#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
|
|
|
-proceed_to=["open_servicerequest_assigned@ej.sharix-app.org","open_servicerequest_process@ej.sharix-app.org", "open_servicerequest_pending@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
|
|
|
+proceed_to=["open_servicerequest_assigned@ej.sharix-app.org","open_servicerequest_pending@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
|
|
|
|
|
|
#максимальное значение попыток обработать заказ
|
|
|
idle_value=10
|
|
@@ -42,8 +42,7 @@ def message_handler(conn, mess):
|
|
|
if (str(user).split("/")[0]) in listen_to:
|
|
|
# print (str(user).split("/")[0])
|
|
|
if text is not None:
|
|
|
- orderObj = jsreq.jsonToOrderTicket(text)
|
|
|
- print (orderObj)
|
|
|
+ orderObj = jsreq.jsonToOrder(text)
|
|
|
tasklist.append(orderObj)
|
|
|
bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
|
|
|
|
|
@@ -59,35 +58,63 @@ def open_servicerequest_booked_wait(period,localtask):
|
|
|
|
|
|
def open_servicerequest_booked_process(localtask):
|
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ в обработчике\n")
|
|
|
-
|
|
|
- order = jsreq.jsonToOrder(localtask)
|
|
|
+ # order = jsreq.jsonToOrder(localtask)
|
|
|
#Пока заглушка
|
|
|
- balance = get_balance(order.client_id)
|
|
|
-
|
|
|
|
|
|
- price = order.real_price
|
|
|
-
|
|
|
- if balance > price:
|
|
|
+ # balance = get_balance(order.client_id)
|
|
|
+ # print(balance)
|
|
|
+ # price = order.real_price
|
|
|
+ # if balance > price:
|
|
|
+ # #Заказ на основного водителя?
|
|
|
+ # if order.provider:
|
|
|
+ # bot.proceed_status(proceed_to[1], localtask)
|
|
|
+ # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан\n")
|
|
|
+ # else:
|
|
|
+ # # Проверка срочности заказа
|
|
|
+ # if order.asap:
|
|
|
+ # #Заглушка назначение исполнителя системой
|
|
|
+ # if set_provider(order.ticket, order.provider) == "success":
|
|
|
+ # bot.proceed_status(proceed_to[0], localtask)
|
|
|
+ # else:
|
|
|
+ # bot.bot_log(botname+" "+str(datetime.now())+" "+"Ошибка назначения исполнителя\n")
|
|
|
+ # else:
|
|
|
+ # bot.proceed_status(proceed_to[1], localtask)
|
|
|
+ # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан\n")
|
|
|
+ # else:
|
|
|
+ # # Заглушка получения оплаты от клиента
|
|
|
+ # pass
|
|
|
+ # price = localtask.real_price
|
|
|
#Заказ на основного водителя?
|
|
|
- if order.provider:
|
|
|
- bot.proceed_status(proceed_to[1], localtask)
|
|
|
- bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан\n")
|
|
|
- else:
|
|
|
- # Проверка срочности заказа
|
|
|
- if order.asap:
|
|
|
- #Заглушка назначение исполнителя системой
|
|
|
- if set_provider(order.ticket, order.provider) == "success":
|
|
|
- bot.proceed_status(proceed_to[0], localtask)
|
|
|
- else:
|
|
|
- bot.bot_log(botname+" "+str(datetime.now())+" "+"Ошибка назначения исполнителя\n")
|
|
|
- else:
|
|
|
- bot.proceed_status(proceed_to[1], localtask)
|
|
|
-
|
|
|
- bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан\n")
|
|
|
+ if not localtask.provider:
|
|
|
+ if set_provider(localtask.id):
|
|
|
+ print('Водитель успешно установлен')
|
|
|
+
|
|
|
+
|
|
|
+ if localtask.asap:
|
|
|
+
|
|
|
+ localtask.status = 220
|
|
|
+ bot.proceed_status(proceed_to[0], localtask)
|
|
|
+ bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан и отправлен на assigned\n")
|
|
|
else:
|
|
|
- # Заглушка получения оплаты от клиента
|
|
|
- pass
|
|
|
-
|
|
|
+
|
|
|
+ localtask.status = 212
|
|
|
+ bot.proceed_status(proceed_to[1], localtask)
|
|
|
+ bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан и отправлен на pending\n")
|
|
|
+
|
|
|
+ # Проверка срочности заказа
|
|
|
+ # if order.asap:
|
|
|
+ # #Заглушка назначение исполнителя системой
|
|
|
+ # if set_provider(order.ticket, order.provider) == "success":
|
|
|
+ # bot.proceed_status(proceed_to[0], localtask)
|
|
|
+ # else:
|
|
|
+ # bot.bot_log(botname+" "+str(datetime.now())+" "+"Ошибка назначения исполнителя\n")
|
|
|
+ # else:
|
|
|
+ # localtask.status = 220
|
|
|
+ # bot.proceed_status(proceed_to[0], localtask)
|
|
|
+ # print(localtask)
|
|
|
+ # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Заказ успешно обработан и отправлен на assigned\n")
|
|
|
+ # Проверка срочности заказа
|
|
|
+
|
|
|
def get_balance(client):
|
|
|
headers = {'Authorization': f'Token {token}'}
|
|
|
# Передаем id пользователя и получаем его баланс
|
|
@@ -104,37 +131,47 @@ def get_balance(client):
|
|
|
return balance
|
|
|
except Exception as ex:
|
|
|
print(ex)
|
|
|
+
|
|
|
#set provider?
|
|
|
-def set_provider(ticket, provider):
|
|
|
+def choose_provider(headers,geo):
|
|
|
+ providers=requests.get(config.API_URL+"/dbsynce/api/provider/",headers=headers)
|
|
|
+ provider=providers.json()[0]['id']
|
|
|
+ return provider
|
|
|
+
|
|
|
+def set_provider(localtask_id):
|
|
|
+
|
|
|
headers = {'Authorization': f'Token {token}'}
|
|
|
- data = {'ticket': ticket,
|
|
|
- 'provider': provider}
|
|
|
- response = requests.post(config.API_URL+f"/api/example/set-provider", headers=headers, data=data)
|
|
|
- print(response.json())
|
|
|
- ordertext=response.json()
|
|
|
+ provider = choose_provider(headers,'geoposition')
|
|
|
+ print(provider)
|
|
|
+ data = {'provider':f'{provider}',}
|
|
|
+ print(str(config.API_URL+f"/dbsynce/api/orders/{localtask_id}/"))
|
|
|
+ response = requests.post(config.API_URL+f"/dbsynce/api/orders/{localtask_id}/", headers=headers, json=data)
|
|
|
+ return response
|
|
|
+
|
|
|
|
|
|
- if not ordertext:
|
|
|
- print("Empty array")
|
|
|
- else:
|
|
|
- print(ordertext[0], "PROCESSING")
|
|
|
- try:
|
|
|
- message = ordertext[0].get('message')
|
|
|
- return message
|
|
|
- except Exception as ex:
|
|
|
- print(ex)
|
|
|
+ # if not ordertext:
|
|
|
+ # print("Empty array")
|
|
|
+ # else:
|
|
|
+ # print(ordertext[0], "PROCESSING")
|
|
|
+ # try:
|
|
|
+ # message = ordertext[0].get('message')
|
|
|
+ # return message
|
|
|
+ # except Exception as ex:
|
|
|
+ # print(ex)
|
|
|
|
|
|
def open_servicerequest_booked():
|
|
|
while (len(tasklist)):
|
|
|
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 (str(localtask.status)!=str(operating_status)):
|
|
|
# bot.proceed_status(proceed_to[-1],localtask) #временная проверка отправки
|
|
|
- bot.proceed_status(listen_to[-1],localtask)
|
|
|
+ bot.proceed_status(proceed_to[-1],localtask)
|
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
|
|
|
+
|
|
|
+ else:
|
|
|
+ bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
|
|
|
+ t1=threading.Thread(target=open_servicerequest_booked_process, args=([localtask]))
|
|
|
+ t1.start()
|
|
|
continue
|
|
|
-
|
|
|
# elif (localtask.provider==T):
|
|
|
# t1=threading.Thread(target=open_servicerequest_booked_wait, args=(5,localtask))
|
|
|
# t1.start()
|
|
@@ -142,31 +179,30 @@ def open_servicerequest_booked():
|
|
|
# if (localtask.title=="101"):
|
|
|
# t1=threading.Thread(target=open_servicerequest_booked_process, args=(10,localtask))
|
|
|
# t1.start()
|
|
|
- else:
|
|
|
- t1=threading.Thread(target=open_servicerequest_booked_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)
|
|
|
|
|
|
#Авторизация и запуск бота
|
|
|
|
|
|
#пустой список заказов
|
|
|
tasklist = []
|
|
|
|
|
|
-#надо инициализировать tasklist при запуске из API
|
|
|
+# #надо инициализировать tasklist при запуске из API
|
|
|
token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"my/api/v1/auth/token/login/")
|
|
|
-#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
|
|
|
+# #ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
|
|
|
tasklist=jsreq.requestGetList(token, config.API_URL+"/dbsynce/api/orders/")
|
|
|
|
|
|
-# print (len(tasklist))
|
|
|
+# # print (len(tasklist))
|
|
|
|
|
|
bot = JabberBot(JID, PASSWORD, PORT)
|
|
|
|
|
|
-bot.register_handler('message', message_handler)
|
|
|
-bot.start(open_servicerequest_booked)
|
|
|
|
|
|
|
|
|
+bot.register_handler('message', message_handler)
|
|
|
+bot.start(open_servicerequest_booked)
|
|
|
|
|
|
+# print(set_provider('localtask'))
|