Преглед на файлове

order processing example improved

Dev Server преди 1 година
родител
ревизия
c264bac026
променени са 1 файла, в които са добавени 54 реда и са изтрити 6 реда
  1. 54 6
      open_template_bot.py

+ 54 - 6
open_template_bot.py

@@ -7,10 +7,14 @@ import json
 import hashlib
 from datetime import datetime
 
+import time
+import threading
+
 #test
 import jsonAndRequest as jsreq
 
 global tasklist
+global process_status
 
 #В этом файле содержится только то, что запускает конкретный обработчик
 
@@ -29,10 +33,13 @@ PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
 print(JID, PASSWORD)
 
 #таким образом хранится список jid, от которых можно получать сообщения этому боту
-listen_to=["test@ej.sharix-app.org", "test1@ej.sharix-app.org"]
+listen_to=["test@ej.sharix-app.org"]
 
 #тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
-proceed_to=["test1@ej.sharix-app.org"]
+proceed_to=["test1@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
 
 # обработчик входящих сообщений
 def message_handler(conn, mess):
@@ -62,32 +69,73 @@ def message_handler(conn, mess):
             orderObj = jsreq.jsonToUser(text)
             print (orderObj)
             tasklist.append(orderObj)
+            process_status.append(0)
             bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
 
+def open_bot_template_wait(period, i):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
+    time.sleep(period)
+    #тут надо искать не по порядковому номеру, а по контенту или передавать указатель на элемент, так как длина списка может измениться по ходу обработки, но надо менять именно в исходном списке
+    tasklist[i].address.number=123
+    process_status[i]=0
 
 def open_bot_template():
     #print("Тут описывается работа со списком задач в данном статусе")
     for i in range(len(tasklist)):
         #проверяем элемент tasklist[i]
         bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " " + str(i) + " " + "Заказ в очереди на обработке\n")
-        print ("TASKLIST", tasklist[i])
+        print ("TASKLIST", tasklist[i], process_status[i])
+        
+        #если много циклов с процессом ничего не происходит - это неправильно и отдаем заказ на обработку по форсмажору
+        if (process_status[i]>idle_value):
+            bot.proceed_status(proceed_to[1],tasklist[i])
+            del tasklist[i]
+            del process_status[i]
+            bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ передан обработчику форс-мажоров по количеству попыток\n")
+            continue
+
+        #пропускаем обработку, если процесс еще не готов и инкрементируем счетчик попыток
+        if (process_status[i]>0):
+            process_status[i] +=1
+            bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ оставлен в очереди\n")
+            continue
         
-        if (tasklist[i].address.number==122):
+        if (process_status[i]==0):
+            print ("Proceeding started")
+            #example of function that should be run each time process is ready
             bot.fake_api_call(tasklist[i].name)
+
+            if (tasklist[i].address.number==122):
+                #function that need to be run as thread 
+                #open_bot_template_wait(5,i)
+                t1=threading.Thread(target=open_bot_template_wait, args=(5,i))
+                t1.start()
+                process_status[i] +=1
+                continue
+
+            if (tasklist[i].address.number>130):
+                t2=threading.Thread(target=open_bot_template_wait, args=(15,i))
+                t2.start()
+                print("Заказ оставлен в очереди\n")
+                bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ оставлен в очереди\n")
             
-            #он тут вроде не валится, но сообщения не приходят вроде
+            #common way to proceed order
             bot.proceed_status(proceed_to[0],tasklist[i])
-            
             del tasklist[i]
+            del process_status[i]
             bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ успешно обработан и удален из очереди\n")
+            print("Заказ успешно обработан и удален из очереди\n")
             print (tasklist)
         else:
+            print("Заказ оставлен в очереди\n")
             bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ оставлен в очереди\n")
 
 #Авторизация и запуск бота
 
 #пустой список заказов
 tasklist = []
+#список статусов обработки заказов
+process_status = []
 
 bot = JabberBot(JID, PASSWORD, PORT)