Bladeren bron

refaktoring_of_bot_script

stuckedS 11 maanden geleden
bovenliggende
commit
a3bbf93bc5
2 gewijzigde bestanden met toevoegingen van 175 en 2 verwijderingen
  1. 3 2
      handlers/open_servicerequest_booked.py
  2. 172 0
      handlers/open_servicerequest_booked_v2.py

+ 3 - 2
handlers/open_servicerequest_booked.py

@@ -27,7 +27,7 @@ PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
 print(JID, PASSWORD)
 
 #таким образом хранится список jid, от которых можно получать сообщения этому боту
-listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+listen_to=["9090@ej.sharix-app.org","test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org","799999999990@ej.shaix-app.org"]
 
 #тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
 proceed_to=["open_servicerequest_assigned@ej.sharix-app.org", "open_servicerequest_pending@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
@@ -39,7 +39,7 @@ idle_value=10
 def message_handler(conn, mess):
     text = mess.getBody()#текст сообщения боту
     user = mess.getFrom()#отправитель сообщения
-   
+
     print (str(user).split("/")[0])
     if (str(user).split("/")[0]) in listen_to:
         print(text)
@@ -164,6 +164,7 @@ tasklist = []
 token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/base/auth/token/login/")
 #ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
 tasklist=jsreq.requestGetList(token, config.API_URL+"/webservice/api/webservice/")
+
 print (len(tasklist))
 
 bot = JabberBot(JID, PASSWORD, PORT)

+ 172 - 0
handlers/open_servicerequest_booked_v2.py

@@ -0,0 +1,172 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+botname="open_servicerequest_booked"
+
+operating_status=211
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+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.shaix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+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
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+    print(text)
+    print(user)
+    print(f'This is text{text} and this is\n\n{user}')
+    # print (str(user).split("/")[0])
+    # print('good')
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+        
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+def open_servicerequest_booked_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    
+    #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
+    localtask.title=localtask.title+"1"
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[0],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ подождал и возвращен в очередь\n")
+
+def open_servicerequest_booked_process(localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ в обработчике\n")
+
+    order = jsreq.jsonToOrder(localtask)
+    #Пока заглушка
+    balance = get_balance(order.client_id)
+
+    
+    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
+
+def get_balance(client):
+    headers = {'Authorization': f'Token {token}'}
+    # Передаем id пользователя и получаем его баланс
+    response = requests.get(config.API_URL+f"/api/example/{client}", headers=headers)
+    print(response.json())
+    ordertext=response.json()
+    
+    if not ordertext:
+        print("Empty array")
+    else:
+        print(ordertext[0], "PROCESSING")
+        try:
+            balance = ordertext[0].get('balance')
+            return balance
+        except Exception as ex:
+            print(ex)
+
+def set_provider(ticket, provider):
+    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()
+    
+    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):
+            bot.proceed_status(proceed_to[-1],localtask)
+            bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            # continue
+
+        t1=threading.Thread(target=open_servicerequest_booked_process, args=(localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        bot.proceed_status(proceed_to[0],localtask)
+        print("Заказ возвращен в очередь\n")
+        print(tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/base/auth/token/login/")
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+tasklist=jsreq.requestGetList(token, config.API_URL+"/webservice/api/webservice/")
+
+print (len(tasklist))
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_servicerequest_booked)
+
+
+