perf: 优化消息通知 (#7024)

* perf: 优化系统用户列表

* stash

* perf: 优化消息通知

* perf: 修改钉钉

* perf: 修改优化消息通知

* perf: 修改requirements

* perf: 优化datetime

Co-authored-by: ibuler <ibuler@qq.com>
This commit is contained in:
fit2bot
2021-10-20 19:45:37 +08:00
committed by GitHub
parent 9acfd461b4
commit 00d434ceea
39 changed files with 948 additions and 1738 deletions

View File

@@ -1,70 +1,49 @@
from urllib.parse import urljoin
from django.conf import settings
from django.template.loader import render_to_string
from django.utils.translation import ugettext as _
from . import const
from notifications.notifications import UserMessage
from common.utils import get_logger
from .models import Ticket
logger = get_logger(__file__)
EMAIL_TEMPLATE = '''
<div>
<p>
{title}
</p>
<div>
{body}
</div>
<div>
<a href={ticket_detail_url}>
<strong>{ticket_detail_url_description}</strong>
</a>
</div>
</div>
'''
class BaseTicketMessage(UserMessage):
title: ''
ticket: Ticket
content_title: str
@property
def subject(self):
return _(self.title).format(self.ticket.title, self.ticket.get_type_display())
return self.title.format(self.ticket.title, self.ticket.get_type_display())
@property
def ticket_detail_url(self):
return urljoin(settings.SITE_URL, const.TICKET_DETAIL_URL.format(id=str(self.ticket.id)))
def get_text_msg(self) -> dict:
message = """
{title}: {ticket_detail_url}
{body}
""".format(
def get_html_msg(self) -> dict:
context = dict(
title=self.content_title,
ticket_detail_url=self.ticket_detail_url,
body=self.ticket.body.replace('<div style="margin-left: 20px;">', '').replace('</div>', '')
body=self.ticket.body.replace('\n', '<br/>'),
)
message = render_to_string('tickets/_msg_ticket.html', context)
return {
'subject': self.subject,
'message': message
}
def get_html_msg(self) -> dict:
message = EMAIL_TEMPLATE.format(
title=self.content_title,
ticket_detail_url=self.ticket_detail_url,
ticket_detail_url_description=_('click here to review'),
body=self.ticket.body.replace('\n', '<br/>'),
)
return {
'subject': self.subject,
'message': message
}
@classmethod
def gen_test_msg(cls):
return cls(None)
class TicketAppliedToAssignee(BaseTicketMessage):
title = 'New Ticket - {} ({})'
title = _('New Ticket - {} ({})')
def __init__(self, user, ticket):
self.ticket = ticket
@@ -72,11 +51,21 @@ class TicketAppliedToAssignee(BaseTicketMessage):
@property
def content_title(self):
return _('Your has a new ticket, applicant - {}').format(str(self.ticket.applicant_display))
return _('Your has a new ticket, applicant - {}').format(
str(self.ticket.applicant_display)
)
@classmethod
def gen_test_msg(cls):
from .models import Ticket
from users.models import User
ticket = Ticket.objects.first()
user = User.objects.first()
return cls(user, ticket)
class TicketProcessedToApplicant(BaseTicketMessage):
title = 'Ticket has processed - {} ({})'
title = _('Ticket has processed - {} ({})')
def __init__(self, user, ticket, processor):
self.ticket = ticket
@@ -86,3 +75,12 @@ class TicketProcessedToApplicant(BaseTicketMessage):
@property
def content_title(self):
return _('Your ticket has been processed, processor - {}').format(str(self.processor))
@classmethod
def gen_test_msg(cls):
from .models import Ticket
from users.models import User
ticket = Ticket.objects.first()
user = User.objects.first()
processor = User.objects.last()
return cls(user, ticket, processor)