From 8962cebd3adc2c20b2044a35efb84f577e995c24 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 2 Apr 2026 09:15:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=B8=93=E5=AE=B6?= =?UTF-8?q?=E6=99=BA=E4=BA=AB=E7=AB=99=E5=86=85=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admins/resident_experts_controller.rb | 2 ++ app/jobs/send_template_message_job.rb | 16 ++++++++++++++++ app/models/message_template.rb | 2 ++ .../message_template/resident_expert_approved.rb | 14 ++++++++++++++ .../message_template/resident_expert_rejected.rb | 15 +++++++++++++++ 5 files changed, 49 insertions(+) create mode 100644 app/models/message_template/resident_expert_approved.rb create mode 100644 app/models/message_template/resident_expert_rejected.rb diff --git a/app/controllers/admins/resident_experts_controller.rb b/app/controllers/admins/resident_experts_controller.rb index 977c9f147..5ff41087a 100644 --- a/app/controllers/admins/resident_experts_controller.rb +++ b/app/controllers/admins/resident_experts_controller.rb @@ -25,6 +25,7 @@ class Admins::ResidentExpertsController < Admins::BaseController @expert.resident_expert_actions.where.not(action_type: ResidentExpertAction::action_types[:approved]).destroy_all @expert.resident_expert_actions.create(action_type: ResidentExpertAction::action_types[:approved], action_name: '管理员审核通过' ) @expert.resident_expert_actions.create(action_type: ResidentExpertAction::action_types[:approved], action_name: '专家主页上线' ) + SendTemplateMessageJob.perform_later('ResidentExpertApproved', @expert.user_id, @expert.id) redirect_to admins_resident_experts_path flash[:success] = "入驻通过成功" else @@ -38,6 +39,7 @@ class Admins::ResidentExpertsController < Admins::BaseController @expert.resident_expert_actions.where.not(action_type: ResidentExpertAction::action_types[:approved]).destroy_all @expert.resident_expert_actions.create(action_type: ResidentExpertAction::action_types[:rejected], action_name: '管理员驳回', action_description: params[:rejection_reason] ) @expert.resident_expert_actions.create(action_type: ResidentExpertAction::action_types[:todo], action_name: '展示上线', action_description: "待重新申请并通过审核" ) + SendTemplateMessageJob.perform_later('ResidentExpertRejected', @expert.user_id, @expert.id) redirect_to admins_resident_experts_path flash[:success] = "入驻驳回成功" else diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index 4636b249c..a237a23f2 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -4,6 +4,22 @@ class SendTemplateMessageJob < ApplicationJob def perform(source, *args) Rails.logger.info "SendTemplateMessageJob [args] #{args}" case source + when 'ResidentExpertApproved' + receivers_id, resident_expert_id = args[0], args[1] + resident_expert = ResidentExpert.find_by_id(resident_expert_id) + return unless resident_expert.present? + receivers = User.where("id in(?)", receivers_id).or(User.where(mail: receivers_id)) + not_exists_receivers = receivers_id - receivers.pluck(:id) - receivers.pluck(:mail) + receivers_string, content, notification_url = MessageTemplate::ResidentExpertApproved.get_message_content(receivers, resident_expert) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {receivers_id: receivers_id, resident_expert_id: resident_expert_id}) + when 'ResidentExpertRejected' + receivers_id, resident_expert_id = args[0], args[1] + resident_expert = ResidentExpert.find_by_id(resident_expert_id) + return unless resident_expert.present? + receivers = User.where("id in(?)", receivers_id).or(User.where(mail: receivers_id)) + not_exists_receivers = receivers_id - receivers.pluck(:id) - receivers.pluck(:mail) + receivers_string, content, notification_url = MessageTemplate::ResidentExpertRejected.get_message_content(receivers, resident_expert) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {receivers_id: receivers_id, resident_expert_id: resident_expert_id}) when 'CustomTip' receivers_id, template_id, props = args[0], args[1], args[2] template = MessageTemplate.find_by_id(template_id) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 35b8dbe7d..b1c8b5bd6 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -85,6 +85,8 @@ class MessageTemplate < ApplicationRecord self.create(type: 'MessageTemplate::CompetitionReview', sys_notice: '你报名的竞赛 {competition_name} 距作品提交结束日期仅剩3天,若尚未提交参赛作品,请尽快提交', notification_url: '{to_url}') # 用户提交审核通知 self.create(type: 'MessageTemplate::ApplySignaturePassed', sys_notice: '您提交的 {nickname}/{repository} 仓库访问申请已审核通过,可正常访问受限仓库。{ifcdkey}软件激活码:{cdkey} {endcdkey}', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ResidentExpertApproved', sys_notice: '您好,您提交的专家入驻申请已审核通过,欢迎加入红山开源专家智享社区!', notification_url: '{baseurl}/forums/expert/apply') + self.create(type: 'MessageTemplate::ResidentExpertRejected', sys_notice: '您好,您提交的专家入驻申请未能通过审核,如有疑问或希望重新申请,请修改相关信息后再次提交。点击查看驳回理由→', notification_url: '{baseurl}/forums/expert/apply') end def self.sys_notice diff --git a/app/models/message_template/resident_expert_approved.rb b/app/models/message_template/resident_expert_approved.rb new file mode 100644 index 000000000..2115639d8 --- /dev/null +++ b/app/models/message_template/resident_expert_approved.rb @@ -0,0 +1,14 @@ +class MessageTemplate::ResidentExpertApproved < MessageTemplate + + # MessageTemplate::ResidentExpertApproved.get_message_content(User.where(phone: 15386415121), ResidentExpert.last) + def self.get_message_content(receivers, resident_expert) + return '', '', '' if receivers.blank? + content = sys_notice + url = notification_url + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ResidentExpertApproved.get_message_content [ERROR] #{e}") + + return '', '', '' + end +end \ No newline at end of file diff --git a/app/models/message_template/resident_expert_rejected.rb b/app/models/message_template/resident_expert_rejected.rb new file mode 100644 index 000000000..0f85dee34 --- /dev/null +++ b/app/models/message_template/resident_expert_rejected.rb @@ -0,0 +1,15 @@ +class MessageTemplate::ResidentExpertRejected < MessageTemplate + + # MessageTemplate::ResidentExpertRejected.get_message_content(User.where(phone: 15386415121), ResidentExpert.last) + def self.get_message_content(receivers, resident_expert) + return '', '', '' if receivers.blank? + content = sys_notice + url = notification_url + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ResidentExpertRejected.get_message_content [ERROR] #{e}") + + + return '', '', '' + end +end \ No newline at end of file