# -*- coding: utf-8 -*- # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). # from odoo import models # import json # # # class MailThread(models.AbstractModel): # _inherit = "mail.thread" # # def _notify_by_web_push(self, message, recipients_data, msg_vals=False): # """ # 重写 Web Push 通知方法,强制使用异步发送方式, # 避免同步发送导致的请求阻塞问题(如加班审批转交按钮反应慢)。 # """ # msg_vals = dict(msg_vals or {}) # partner_ids = self._extract_partner_ids_for_notifications(message, msg_vals, recipients_data) # if not partner_ids: # return # # partner_devices_sudo = self.env['mail.partner.device'].sudo() # devices = partner_devices_sudo.search([ # ('partner_id', 'in', partner_ids) # ]) # if not devices: # return # # ir_parameter_sudo = self.env['ir.config_parameter'].sudo() # vapid_private_key = ir_parameter_sudo.get_param('mail.web_push_vapid_private_key') # vapid_public_key = ir_parameter_sudo.get_param('mail.web_push_vapid_public_key') # if not vapid_private_key or not vapid_public_key: # return # # payload = self._notify_by_web_push_prepare_payload(message, msg_vals=msg_vals) # payload = self._truncate_payload(payload) # # # 强制使用异步发送方式 # # 不再同步调用 push_to_end_point,避免阻塞请求 # self.env['mail.notification.web.push'].sudo().create([{ # 'user_device': device.id, # 'payload': json.dumps(payload), # } for device in devices]) # self.env.ref('mail.ir_cron_web_push_notification')._trigger()