|
@@ -20,6 +20,7 @@ global process_status
|
|
|
|
|
|
# botname="open_strequest_assigned"
|
|
|
botname="open_template_bot"
|
|
|
+operating_status=210
|
|
|
JID=botname+"@"+config.JSERVER
|
|
|
PORT=config.PORT
|
|
|
|
|
@@ -29,10 +30,10 @@ PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
|
|
|
print(JID, PASSWORD)
|
|
|
|
|
|
#таким образом хранится список jid, от которых можно получать сообщения этому боту
|
|
|
-listen_to=["test@ej.sharix-app.org"]
|
|
|
+listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
|
|
|
|
|
|
#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
|
|
|
-proceed_to=["test1@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
|
|
|
+proceed_to=["open_template_bot@ej.sharix-app.org", "test@ej.sharix-app.org", "test1@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
|
|
|
|
|
|
#максимальное значение попыток обработать заказ
|
|
|
idle_value=10
|
|
@@ -53,66 +54,61 @@ def message_handler(conn, mess):
|
|
|
orderObj = jsreq.jsonToOrderTicket(text)
|
|
|
print (orderObj)
|
|
|
tasklist.append(orderObj)
|
|
|
- process_status.append(0)
|
|
|
+ #process_status.append(0)
|
|
|
bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
|
|
|
|
|
|
-def open_bot_template_wait(period, i):
|
|
|
+def open_bot_template_wait(period, i,localtask):
|
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
|
|
|
time.sleep(period)
|
|
|
- #тут надо искать не по порядковому номеру, а по контенту или передавать указатель на элемент, так как длина списка может измениться по ходу обработки, но надо менять именно в исходном списке
|
|
|
- tasklist[i].ticket=123
|
|
|
- process_status[i]=0
|
|
|
+
|
|
|
+ #ВАЖНО! Надо скорее всего через API редактировать заказ, иначе возможна потеря данных
|
|
|
+ localtask.title=localtask.title+"1"
|
|
|
+
|
|
|
+ #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
|
|
|
+ jsonTicket = json.dumps(localtask.__dict__)
|
|
|
+ bot.proceed_status(proceed_to[0],jsonTicket)
|
|
|
+ bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ подождал и возвращен в очередь\n")
|
|
|
+
|
|
|
+def open_bot_template_process(localtask):
|
|
|
+ bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ в обработчике\n")
|
|
|
+
|
|
|
+ #ВАЖНО! Надо через API редактировать заказ, иначе возможна потеря данных
|
|
|
+ #localtask.title +=1
|
|
|
+
|
|
|
+ jsonTicket = json.dumps(localtask.__dict__)
|
|
|
+ bot.proceed_status(proceed_to[1],jsonTicket)
|
|
|
+ bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ успешно обработан\n")
|
|
|
+
|
|
|
|
|
|
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 ("EACH TASKLIST", tasklist[i], process_status[i])
|
|
|
+ print ("EACH TASKLIST", tasklist[i])
|
|
|
+ #print ("EACH TASKLIST", tasklist[i], process_status[i])
|
|
|
+ localtask=tasklist.pop(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")
|
|
|
+ #если боту почему-то пришла не его заявка - это явно ошибка движения процессов и отдаем в форсмажор - этот обработчик указывать стоит всегда последним
|
|
|
+ if (localtask.status!=operating_status):
|
|
|
+ jsonTicket = json.dumps(localtask.__dict__)
|
|
|
+ bot.proceed_status(proceed_to[-1],jsonTicket)
|
|
|
+ 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 (process_status[i]==0):
|
|
|
- print ("Proceeding started", tasklist[i])
|
|
|
- #example of function that should be run each time process is ready
|
|
|
- bot.fake_api_call(tasklist[i].status)
|
|
|
-
|
|
|
- if (tasklist[i].status==210):
|
|
|
- #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].status>210):
|
|
|
- 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")
|
|
|
+ if (localtask.title!="10"):
|
|
|
+ t1=threading.Thread(target=open_bot_template_wait, args=(5,i,localtask))
|
|
|
+ t1.start()
|
|
|
+
|
|
|
+ if (localtask.title=="101"):
|
|
|
+ t1=threading.Thread(target=open_bot_template_process, args=(10,i,localtask))
|
|
|
+ t1.start()
|
|
|
+
|
|
|
+ #если никакие обработчики не подошли - отправляем обратно в очередь
|
|
|
+ jsonTicket = json.dumps(localtask.__dict__)
|
|
|
+ bot.proceed_status(proceed_to[0],jsonTicket)
|
|
|
+ print("Заказ возвращен в очередь\n")
|
|
|
+ print (tasklist)
|
|
|
|
|
|
#Авторизация и запуск бота
|
|
|
|
|
@@ -122,6 +118,8 @@ tasklist = []
|
|
|
#надо инициализировать tasklist при запуске из API
|
|
|
token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
|
|
|
#requestGetList(token, API_URL+"/tickets/api/tickets")
|
|
|
+
|
|
|
+#ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
|
|
|
tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
|
|
|
#tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets")
|
|
|
#надо дописать таким образом, чтобы tasklist пополнялся тикетами определенного листа, а не всех
|
|
@@ -129,9 +127,9 @@ tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_
|
|
|
print (len(tasklist))
|
|
|
|
|
|
#список статусов обработки заказов
|
|
|
-process_status = []
|
|
|
-while len(process_status)<len(tasklist):
|
|
|
- process_status.append(0)
|
|
|
+#process_status = []
|
|
|
+#while len(process_status)<len(tasklist):
|
|
|
+# process_status.append(0)
|
|
|
|
|
|
|
|
|
bot = JabberBot(JID, PASSWORD, PORT)
|