Files
test/sg_wechat_enterprise/models/we_receive_message.py
2024-07-10 15:58:47 +08:00

144 lines
7.0 KiB
Python

from odoo import api, models, fields
import logging
from odoo.http import request
import datetime
_logger = logging.getLogger(__name__)
class WechatEnterpriseReceiveMessage(models.Model):
_name = 'we.receive.message'
_description = 'Wechat Enterprise Receive Message Manage'
name = fields.Char(required=True, index=True)
ToUserName = fields.Char(u'企业号CorpID')
FromUserName = fields.Char(u'成员UserID')
CreateTime = fields.Char(u'消息创建时间')
MsgId = fields.Char(u'消息id')
AgentID = fields.Many2one('we.app', u'企业应用')
MsgType = fields.Selection([('text', u'文本'),
('voice', u'语音'),
('image', u'图片'),
('video', u'视频'),
('shortvideo', u'短视频'),
('location', u'位置'),
('link', u'链接'),
('subscribe', u'关注'),
('unsubscribe', u'取消关注'),
('xml', u'自定义菜单链接跳转'),
('click', u'自定义菜单点击'),
('scan', u'扫描二维码'),
('scancode_waitmsg', u'扫描二维码并等待'),
('event', u'取消关注')],
string=u'消息类型', required=True, default='text')
Content = fields.Text(u'文本消息内容')
state = fields.Selection([('1', u'未处理'), ('2', u'已处理'), ('3', u'处理失败')], u'状态', default='1')
PicUrl = fields.Char(u'图片链接')
MediaId = fields.Char(u'图片媒体文件id')
Format = fields.Char(u'语音格式')
ThumbMediaId = fields.Char(u'视频消息缩略图的媒体id')
Location_X = fields.Char(u'地理位置纬度')
Location_Y = fields.Char(u'地理位置经度')
Scale = fields.Char(u'地图缩放大小')
Label = fields.Char(u'地理位置信息')
Title = fields.Char(u'标题')
Description = fields.Char(u'描述')
Cover_PicUrl = fields.Char(u'封面缩略图的url')
@api.depends('MsgType', 'MsgId')
def name_get(self):
result = []
for receive in self:
name = receive.MsgType + '_' + receive.MsgId
result.append((receive.id, name))
return result
def add_message(self, data):
"""
增加一条待处理的上传消息
:param data:
:return:
"""
app = request.env['we.app'].sudo().search([("agentid", "=", data["AgentID"])])
receive_message_data = {
'AgentID': app.id,
'MsgType': data["MsgType"],
'FromUserName': data["FromUserName"],
'ToUserName': data["ToUserName"]
}
current_time = datetime.datetime.now()
real_time = current_time + datetime.timedelta(hours=8)
receive_message_data["CreateTime"] = real_time
receive_message_data["name"] = data["MsgType"] + data["MsgId"]
if data["MsgType"] == "text":
receive_message_data["MsgId"] = data["MsgId"]
receive_message_data["Content"] = data["Content"]
if data["MsgType"] == "image":
receive_message_data["MsgId"] = data["MsgId"]
receive_message_data["PicUrl"] = data["PicUrl"]
receive_message_data["MediaId"] = data["MediaId"]
if data["MsgType"] == "voice":
receive_message_data["MsgId"] = data["MsgId"]
receive_message_data["MediaId"] = data["MediaId"]
receive_message_data["Format"] = data["Format"]
if data["MsgType"] == "video" or data["MsgType"] == "shortvideo":
receive_message_data["MsgId"] = data["MsgId"]
receive_message_data["MediaId"] = data["MediaId"]
receive_message_data["ThumbMediaId"] = data["ThumbMediaId"]
if data["MsgType"] == "location":
receive_message_data["MsgId"] = data["MsgId"]
receive_message_data["Location_X"] = data["Location_X"]
receive_message_data["Location_Y"] = data["Location_Y"]
receive_message_data["Scale"] = data["Scale"]
receive_message_data["Label"] = data["Label"]
if data["MsgType"] == "link":
receive_message_data["MsgId"] = data["MsgId"]
receive_message_data["Title"] = data["Title"]
receive_message_data["Description"] = data["Description"]
receive_message_data["Cover_PicUrl"] = data["PicUrl"]
if data["MsgType"] == "event":
if data["Event"] == "subscribe":
receive_message_data["MsgType"] = "subscribe"
if data["Event"] == "unsubscribe":
receive_message_data["MsgType"] = "unsubscribe"
return super(WechatEnterpriseReceiveMessage, self).create(receive_message_data)
def process_message(self, data):
"""
处理未处理和失败的消息
:param data:
:return:
"""
messages = self.sudo().add_message(data)
for message in messages:
if message:
if message.state == '2':
break
if data["MsgType"] == "text":
process = self.env['we.receive.message.process'].get_message_process(data["MsgType"],
data["Content"],
data["AgentID"])
else:
process = self.env['we.receive.message.process'].get_message_process(data["MsgType"],
" ",
data["AgentID"])
try:
if process:
if data["MsgType"] == "voice" or data["MsgType"] == "image" or data["MsgType"] == "video" or \
data["MsgType"] == "shortvideo":
process.sudo().exec_class_mothed(data["FromUserName"], data["AgentID"], data["MediaId"])
else:
process.sudo().exec_class_mothed(data["FromUserName"], data["AgentID"])
else:
return self.env['we.send.message'].sudo().send_text_message(data["FromUserName"],
data["AgentID"],
content=u'感谢您的关注!')
message.sudo().write({'state': '1'})
except Exception as e:
message.sudo().write({'state': u'处理失败'})
raise Warning(u'处理失败, 原因:%s', str(e))