addproject

This commit is contained in:
qiaoxinjiu
2026-01-22 19:10:37 +08:00
commit 6994b185a3
184 changed files with 21039 additions and 0 deletions

View File

@@ -0,0 +1,138 @@
# coding=utf-8
# 用于MQ的各类操作
import time
import os
from base_framework.public_business.common.UBRD.kw.promotion_keyword import obj_log
from base_framework.public_tools.read_config import ReadConfig, get_current_env, get_current_config
from base_framework.public_tools.runner import Runner
from base_framework.public_tools.custom_error import BusinessError
obj_runner = Runner()
class RocketMQ:
def __init__(self, env=''):
self.need_login = True # 是否需要登录
self.team = get_current_config(section="run_evn_name", key="current_team")
if not env:
env = get_current_env().lower()
if env.lower() == 'sim':
if self.team in ['XUEDAU']:
self.mq_host = ""
self.need_login = False
else:
self.mq_host = "https://mq-console.sim.huohua.cn"
else:
if self.team in ['XUEDAU']:
self.mq_host = "http://10.250.200.3:19876"
self.need_login = False
else:
self.mq_host = "https://mq-console.qa.huohua.cn"
def mq_query_msg_info(self, topic, begin_time, end_time):
"""查询mq消息"""
msg_id_list = self.__query_msg_id_list(topic=topic, begin_time=begin_time, end_time=end_time)
msg_info = []
for msg_id in msg_id_list:
m_info = self.__query_msg_detail_by_id(topic=topic, msg_id=msg_id)
msg_info.append(m_info)
return msg_info
def mq_query_msg_info_by_sub_str(self, topic, begin_time, end_time, sub_str=None):
"""查询mq消息并返回匹配的消息内容"""
msg_info = self.mq_query_msg_info(topic=topic, begin_time=begin_time, end_time=end_time)
if sub_str:
sub_msg = []
for msg in msg_info:
if str(sub_str) in str(msg["msg_body"]):
sub_msg.append(msg)
return sub_msg
else:
return msg_info
def __query_msg_id_list(self, topic, begin_time, end_time):
"""查询mq的id列表"""
mq_url = "{}/message/queryMessageByTopic.query".format(self.mq_host)
post_data = {"topic": topic,
"begin": str(time.mktime(time.strptime(str(begin_time), '%Y-%m-%d %H:%M'))).split('.')[0] + '000',
"end": str(time.mktime(time.strptime(str(end_time), '%Y-%m-%d %H:%M'))).split('.')[0] + '000'}
if self.need_login:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", params=post_data)
else:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", token=False, params=post_data)
if resp['status'] == 0:
msg_id_list = []
for item in resp['data']:
msg_id_list.append(item['msgId'])
return msg_id_list
else:
raise Exception("查询MQ消息列表失败{}".format(resp))
def __query_msg_detail_by_id(self, topic, msg_id):
"""查询mq消息明细"""
mq_url = "{}/message/viewMessage.query".format(self.mq_host)
post_data = {"topic": topic, "msgId": msg_id}
if self.need_login:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", params=post_data)
else:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="GET", token=False, params=post_data)
if resp['status'] == 0:
msg_tag = resp['data']['messageView']['properties'].get('TAGS', None)
msg_key = resp['data']['messageView']['properties'].get('KEYS', None)
msg_env = resp['data']['messageView']['properties'].get('podenv', None)
msg_body = resp['data']['messageView'].get('messageBody', None)
return {"msg_id": msg_id, "msg_tag": msg_tag, "msg_key": msg_key, "msg_env": msg_env, "msg_body": msg_body}
else:
raise Exception("查询MQ消息明细失败{}".format(resp))
def mq_send_msg(self, topic, message_body, tag=None, key=None, pro=None, **kwargs):
"""mq消息发送"""
mq_url = "{}/topic/sendTopicMessage.do".format(self.mq_host)
post_data = {'topic': topic,
'tag': tag,
'key': key,
'messageBody': str(message_body).replace("'", "\"")
}
if not pro:
# 添加启动文件中的独立环境编号
cfg_path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
ini_path = cfg_path + '/base_framework/base_config/env_choose.ini'
jira_id = ReadConfig(ini_path).get_value(sections='run_jira_id', options='huohua-podenv')
if jira_id:
post_data['pro'] = jira_id
else:
post_data['pro'] = 'qa'
else:
post_data['pro'] = pro
if self.team.lower() == "xuedau":
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data, **kwargs)
else:
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data)
try:
obj_log.info("发送mq消息返回{}".format(resp))
if resp and 'errMsg' in resp and 'timeout' in str(resp['errMsg']):
time.sleep(1) # 如果接口返回超时,就再发送一次
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data)
elif resp and 'message' in resp and '无效的token' in str(resp['message']):
time.sleep(1) # 如果token过期就再发送一次
resp = obj_runner.call_rest_api(user=None, API_URL=mq_url, req_type="POST", json=post_data)
elif resp and resp['status'] == 0 and resp['data']['sendStatus'] == 'SEND_OK':
return True
else:
raise Exception("发送mq消息失败{}".format(resp))
except Exception as e:
obj_log.info("发送mq消息体{}".format(post_data))
raise Exception("发送mq消息失败{}|{}".format(e, resp))
if __name__ == '__main__':
mq = RocketMQ()
mb = {"platformId": 2, "eventType": "user.join", "roleType": 200, "roleId": 48711, "appId": "", "source": "SparkEnglish", "classroomCode": "", "classroomType": 1, "scheduleCode": "ECR666358307917090884", "joinTime": 1747189786903, "classSizeType": 1, "isFirst": "", "subChannelCodeList": "", "deviceId": "20200830-9CFC-E8BE-8D68-9CFCE8BE8D6C", "classroomVersion": "25.5.3-qa.2212381", "appVersion": "25.4.7-stable.2172220"}
rsp = mq.mq_send_msg(topic='CP_CLASSROOM_STATUS_SYNC', message_body=mb, tag='TAG_ROLE_JOIN_TIME', pro='QA', xuedau="")
print(rsp)