BusinessHadler.py 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. # from browserUtil import browserUtil
  2. import json
  3. import webbrowser
  4. from WebSocketServer import WebSocketServer
  5. class BusinessHadler:
  6. def __init__(self):
  7. print('__init__ socket')
  8. self.websocket_server = WebSocketServer()
  9. self.websocket_server.start()
  10. def send_message_to_clients(self, message):
  11. self.websocket_server.sendToAllClients(message)
  12. def cleanup(self):
  13. print('cleanup')
  14. self.websocket_server.stop()
  15. def handler(self, intent_action, intent_solts):
  16. # 遍历词槽,提取并转换关键信息
  17. solts = {}
  18. for item in intent_solts:
  19. if item["name"] == "xs_date" or item["name"] == "plan_month" or item["name"] == "time" or item[
  20. "name"] == "start_time":
  21. timedata = json.loads(item["normValue"])
  22. solts[item["name"]] = timedata["datetime"]
  23. else:
  24. solts[item["name"]] = item["normValue"]
  25. print("解析后的intent_solts: ", solts)
  26. tts_text = ""
  27. # 打开系统网页
  28. if intent_action == "open_system":
  29. # 使用webbrowser.open,会阻塞程序,导致AIUI发送2次NLP回调,打开2次浏览器页面,需要在调用前断开信号
  30. webbrowser.open('http://101.37.148.192:8080?socket=1')
  31. # 使用以下方式打开,也可以避免打开2次web页面问题
  32. # import os
  33. # os.system('start http://101.37.148.192:8080/')
  34. # 返回主页面
  35. elif intent_action == "main_page":
  36. message = '{"pageName":"map","type":"page_change"}'
  37. self.send_message_to_clients(message)
  38. # 查看系统模块
  39. elif intent_action == "open_modules":
  40. print(solts)
  41. if solts['charts'] == "今日线下门户流量":
  42. pageName = "offline"
  43. elif solts['charts'] == "平均用户类别排布":
  44. pageName = "userIdentityCategory"
  45. elif solts['charts'] == "用户数据状态":
  46. pageName = "userSitua"
  47. elif solts['charts'] == "关联数据类别分布":
  48. pageName = "browseCategories"
  49. elif solts['charts'] == "今日流量态势":
  50. pageName = "trafficSitua"
  51. message = '{"pageName":"' + pageName + '","type":"page_change"}'
  52. print(message)
  53. self.send_message_to_clients(message)
  54. # 查询在线/离线用户数
  55. elif intent_action == "query_online_user":
  56. message = '{"type":"user_query","userDialog":{"date":"' + solts['time'] + '","status":"' + solts[
  57. 'onlineState'] + '","number":"87"}}'
  58. print(message)
  59. self.send_message_to_clients(message)
  60. # 查询今日服务次数,并播报
  61. elif intent_action == "query_server_times":
  62. tts_text = '今日服务次数53461次 服务质量90%'
  63. else:
  64. print("无效意图")
  65. tts_text = "我没有理解您的话"
  66. print('handler end')
  67. return tts_text
  68. def handler_dipai(self, intent_action, intent_solts):
  69. solts = intent_solts[0]
  70. print("解析后的intent_solts: ", solts)
  71. tts_text = ""
  72. # 打开系统网页
  73. if intent_action == "open_system":
  74. # 使用webbrowser.open,会阻塞程序,导致AIUI发送2次NLP回调,打开2次浏览器页面,需要在调用前断开信号
  75. webbrowser.open('http://101.37.148.192:8080?socket=1')
  76. # 使用以下方式打开,也可以避免打开2次web页面问题
  77. # import os
  78. # os.system('start http://101.37.148.192:8080/')
  79. # 返回主页面
  80. elif intent_action == "main_page":
  81. message = '{"pageName":"map","type":"page_change"}'
  82. self.send_message_to_clients(message)
  83. # 查看系统模块
  84. elif intent_action == "open_modules":
  85. print(solts)
  86. if solts['slot_value'] == "今日线下门户流量":
  87. pageName = "offline"
  88. elif solts['slot_value'] == "平均用户类别排布":
  89. pageName = "userIdentityCategory"
  90. elif solts['slot_value'] == "用户数据状态":
  91. pageName = "userSitua"
  92. elif solts['slot_value'] == "关联数据类别分布":
  93. pageName = "browseCategories"
  94. elif solts['slot_value'] == "今日流量态势":
  95. pageName = "trafficSitua"
  96. elif solts['slot_value'] == "主界面":
  97. pageName = "map"
  98. message = '{"pageName":"' + pageName + '","type":"page_change"}'
  99. print(message)
  100. self.send_message_to_clients(message)
  101. # 查询在线/离线用户数
  102. elif intent_action == "query_online_user":
  103. message = '{"type":"user_query","userDialog":{"date":"' + solts['time'] + '","status":"' + solts[
  104. 'onlineState'] + '","number":"87"}}'
  105. print(message)
  106. self.send_message_to_clients(message)
  107. # 查询今日服务次数,并播报
  108. elif intent_action == "query_server_times":
  109. tts_text = '今日服务次数53461次 服务质量90%'
  110. else:
  111. print("无效意图")
  112. tts_text = "我没有理解您的话"
  113. print('handler end')
  114. return tts_text
  115. def handler_grpc(self, intent_action, intent_solts):
  116. # 遍历词槽,提取并转换关键信息
  117. solts = intent_solts
  118. tts_text = ""
  119. # 打开系统网页
  120. if intent_action == "open_web":
  121. # 使用webbrowser.open,会阻塞程序,导致AIUI发送2次NLP回调,打开2次浏览器页面,需要在调用前断开信号
  122. webbrowser.open('http://101.37.148.192:8080?socket=1')
  123. # 使用以下方式打开,也可以避免打开2次web页面问题
  124. # import os
  125. # os.system('start http://101.37.148.192:8080/')
  126. # 返回主页面
  127. elif intent_action == "main_page":
  128. message = '{"pageName":"map","type":"page_change"}'
  129. self.send_message_to_clients(message)
  130. # 查看系统模块
  131. elif intent_action == "open_modules":
  132. print(solts)
  133. if solts['charts'] == "今日线下门户流量":
  134. pageName = "offline"
  135. elif solts['charts'] == "平均用户类别排布":
  136. pageName = "userIdentityCategory"
  137. elif solts['charts'] == "用户数据状态":
  138. pageName = "userSitua"
  139. elif solts['charts'] == "关联数据类别分布":
  140. pageName = "browseCategories"
  141. elif solts['charts'] == "今日流量态势":
  142. pageName = "trafficSitua"
  143. message = '{"pageName":"' + pageName + '","type":"page_change"}'
  144. print(message)
  145. self.send_message_to_clients(message)
  146. # 查询在线/离线用户数
  147. elif intent_action == "query_online_user":
  148. message = '{"type":"user_query","userDialog":{"date":"' + solts['time'] + '","status":"' + solts[
  149. 'onlineState'] + '","number":"87"}}'
  150. print(message)
  151. self.send_message_to_clients(message)
  152. # 查询今日服务次数,并播报
  153. elif intent_action == "query_server_times":
  154. tts_text = '今日服务次数53461次 服务质量90%'
  155. else:
  156. print("无效意图")
  157. tts_text = "我没有理解您的话"
  158. print('handler end')
  159. return tts_text
  160. def handler_dipai(self, intent_action, intent_solts):
  161. solts = intent_solts[0]
  162. print("解析后的intent_solts: ", solts)
  163. tts_text = ""
  164. # 打开系统网页
  165. if intent_action == "open_system":
  166. # 使用webbrowser.open,会阻塞程序,导致AIUI发送2次NLP回调,打开2次浏览器页面,需要在调用前断开信号
  167. webbrowser.open('http://101.37.148.192:8080?socket=1')
  168. # 使用以下方式打开,也可以避免打开2次web页面问题
  169. # import os
  170. # os.system('start http://101.37.148.192:8080/')
  171. # 返回主页面
  172. elif intent_action == "main_page":
  173. message = '{"pageName":"map","type":"page_change"}'
  174. self.send_message_to_clients(message)
  175. # 查看系统模块
  176. elif intent_action == "open_modules":
  177. print(solts)
  178. if solts['slot_value'] == "今日线下门户流量":
  179. pageName = "offline"
  180. elif solts['slot_value'] == "平均用户类别排布":
  181. pageName = "userIdentityCategory"
  182. elif solts['slot_value'] == "用户数据状态":
  183. pageName = "userSitua"
  184. elif solts['slot_value'] == "关联数据类别分布":
  185. pageName = "browseCategories"
  186. elif solts['slot_value'] == "今日流量态势":
  187. pageName = "trafficSitua"
  188. elif solts['slot_value'] == "主界面":
  189. pageName = "map"
  190. message = '{"pageName":"' + pageName + '","type":"page_change"}'
  191. print(message)
  192. self.send_message_to_clients(message)
  193. # 查询在线/离线用户数
  194. elif intent_action == "query_online_user":
  195. message = '{"type":"user_query","userDialog":{"date":"' + solts['time'] + '","status":"' + solts[
  196. 'onlineState'] + '","number":"87"}}'
  197. print(message)
  198. self.send_message_to_clients(message)
  199. # 查询今日服务次数,并播报
  200. elif intent_action == "query_server_times":
  201. tts_text = '今日服务次数53461次 服务质量90%'
  202. else:
  203. print("无效意图")
  204. tts_text = "我没有理解您的话"
  205. print('handler end')
  206. return tts_text