diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 377b13f12..a837e952f 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -192,7 +192,9 @@ class AccountsController < ApplicationController sync_params = { password: params[:password].to_s, - email: @user.mail + email: @user.mail, + login_name: @user.name, + source_id: 0 } interactor = Gitea::User::UpdateInteractor.call(@user.login, sync_params) diff --git a/app/controllers/notices_controller.rb b/app/controllers/notices_controller.rb new file mode 100644 index 000000000..bf7eb21b1 --- /dev/null +++ b/app/controllers/notices_controller.rb @@ -0,0 +1,21 @@ +class NoticesController < ApplicationController + + def create + tip_exception("参数有误") if params["source"].blank? + user_id = params[:user_id] + + if params["source"] == "CompetitionBegin" + competition_id = params[:competition_id] + SendTemplateMessageJob.perform_later('CompetitionBegin', user_id, competition_id) + elsif params["source"] == "CompetitionResult" + competition_id = params[:competition_id] + SendTemplateMessageJob.perform_later('CompetitionResult', user_id, competition_id) + elsif params["source"] == "CompetitionReview" + competition_id = params[:competition_id] + SendTemplateMessageJob.perform_later('CompetitionReview', user_id, competition_id) + else + tip_exception("#{params["source"]}未配置") + end + render_ok + end +end diff --git a/app/controllers/users/template_message_settings_controller.rb b/app/controllers/users/template_message_settings_controller.rb index 5421a29d5..d38e6614d 100644 --- a/app/controllers/users/template_message_settings_controller.rb +++ b/app/controllers/users/template_message_settings_controller.rb @@ -22,9 +22,9 @@ class Users::TemplateMessageSettingsController < Users::BaseController def get_current_setting @current_setting = @_observed_user.user_template_message_setting + @current_setting = UserTemplateMessageSetting.build(@_observed_user.id) if @current_setting.nil? @current_setting.notification_body.merge!(UserTemplateMessageSetting.init_notification_body.except(*@current_setting.notification_body.keys)) @current_setting.email_body.merge!(UserTemplateMessageSetting.init_email_body.except(*@current_setting.email_body.keys)) - @current_setting = UserTemplateMessageSetting.build(@_observed_user.id) if @current_setting.nil? end def setting_params diff --git a/app/jobs/cache_async_clear_job.rb b/app/jobs/cache_async_clear_job.rb index 651dfaf41..1d810781a 100644 --- a/app/jobs/cache_async_clear_job.rb +++ b/app/jobs/cache_async_clear_job.rb @@ -7,6 +7,8 @@ class CacheAsyncClearJob < ApplicationJob Cache::V2::ProjectCommonService.new(id).clear when "owner_common_service" Cache::V2::OwnnerCommonService.new(id).clear + when "project_rank_service" + Cache::V2::ProjectRankService.new(id).clear end end end \ No newline at end of file diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index 4cde94c4b..9cc819a11 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -52,6 +52,10 @@ class SendTemplateMessageJob < ApplicationJob receivers = User.where(id: [issue&.assigned_to_id, issue&.author_id]) receivers_string, content, notification_url = MessageTemplate::IssueExpire.get_message_content(receivers, issue) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {issue_id: issue.id}) + receivers.find_each do |receiver| + receivers_email_string, email_title, email_content = MessageTemplate::IssueExpire.get_email_message_content(receiver, issue) + Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) + end when 'IssueDeleted' operator_id, issue_title, issue_assigned_to_id, issue_author_id = args[0], args[1], args[2], args[3] operator = User.find_by_id(operator_id) @@ -322,6 +326,30 @@ class SendTemplateMessageJob < ApplicationJob receivers_email_string, email_title, email_content = MessageTemplate::TeamLeft.get_email_message_content(receiver, organization, team) Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) end + when 'CompetitionBegin' + user_id, competition_id = args[0], args[1] + user = User.find_by_id(user_id) + project = Project.find_by_sql("select *,title as name from competitions where id=#{competition_id}") + return unless user.present? && project.present? + receivers = User.where(id: user_id) + receivers_string, content, notification_url = MessageTemplate::CompetitionBegin.get_message_content(receivers, project.first) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user_id, competition_name: project.first&.name, identifier: project.first&.identifier}) + when 'CompetitionReview' + user_id, competition_id = args[0], args[1] + user = User.find_by_id(user_id) + project = Project.find_by_sql("select *,title as name from competitions where id=#{competition_id}") + return unless user.present? && project.present? + receivers = User.where(id: user_id) + receivers_string, content, notification_url = MessageTemplate::CompetitionReview.get_message_content(receivers, project.first) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user_id, competition_name: project.first&.name, identifier: project.first&.identifier}) + when 'CompetitionResult' + user_id, competition_id = args[0], args[1] + user = User.find_by_id(user_id) + project = Project.find_by_sql("select *,title as name from competitions where id=#{competition_id}") + return unless user.present? && project.present? + receivers = User.where(id: user_id) + receivers_string, content, notification_url = MessageTemplate::CompetitionResult.get_message_content(receivers, project.first) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user_id, competition_name: project.first&.name, identifier: project.first&.identifier}) end end end \ No newline at end of file diff --git a/app/models/issue.rb b/app/models/issue.rb index 52915cbf8..a691f9e11 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -76,7 +76,7 @@ class Issue < ApplicationRecord scope :issue_index_includes, ->{includes(:tracker, :priority, :version, :issue_status, :journals,:issue_tags,user: :user_extension)} scope :closed, ->{where(status_id: 5)} after_create :incre_project_common, :incre_user_statistic, :incre_platform_statistic - after_save :change_versions_count + after_save :change_versions_count, :send_update_message_to_notice_system after_destroy :update_closed_issues_count_in_project!, :decre_project_common, :decre_user_statistic, :decre_platform_statistic def incre_project_common @@ -200,4 +200,8 @@ class Issue < ApplicationRecord self.project.decrement!(:closed_issues_count) if self.status_id == 5 end + def send_update_message_to_notice_system + SendTemplateMessageJob.perform_later('IssueExpire', self.id) if Site.has_notice_menu? && self.due_date == Date.today + 1.days + end + end diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 13864184a..f34200132 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -74,6 +74,11 @@ class MessageTemplate < ApplicationRecord self.create(type: 'MessageTemplate::TeamJoined', sys_notice: '你已被拉入组织 {organization}{team} 团队,拥有{role}权限', email: email_html, email_title: "#{PLATFORM}: 在 {organization} 组织你的账号有权限变更", notification_url: '{baseurl}/{login}') email_html = File.read("#{email_template_html_dir}/team_left.html") self.create(type: 'MessageTemplate::TeamLeft', sys_notice: '你已被移出组织 {organization}{team} 团队', email: email_html, email_title: "#{PLATFORM}: 在 {organization} 组织你的账号有权限变更", notification_url: '{baseurl}/{login}') + + # 竞赛通知 + self.create(type: 'MessageTemplate::CompetitionBegin', sys_notice: '你报名的竞赛 {competition_name} 已进入比赛进行阶段,可在此期间提交作品', notification_url: '{to_url}') + self.create(type: 'MessageTemplate::CompetitionResult', sys_notice: '你报名的竞赛 {competition_name} 已进入成绩公示阶段,可查看排行榜信息', notification_url: '{to_url}') + self.create(type: 'MessageTemplate::CompetitionReview', sys_notice: '你报名的竞赛 {competition_name} 距作品提交结束日期仅剩3天,若尚未提交参赛作品,请尽快提交', notification_url: '{to_url}') end def self.sys_notice diff --git a/app/models/message_template/competition_begin.rb b/app/models/message_template/competition_begin.rb new file mode 100644 index 000000000..b521d7455 --- /dev/null +++ b/app/models/message_template/competition_begin.rb @@ -0,0 +1,35 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 报名的竞赛进入比赛进行阶段 +# 触发场景 +# 赛队成员报名的竞赛已进入比赛进行阶段 +# 通知文案格式 +# 你报名的竞赛 xxx 已进入比赛进行阶段,可在此阶段提交作品 +# 时间:x分钟/小时/天/月前 +# 通知文案示例 +# 你报名的竞赛 代码审查大赛 已进入比赛进行阶段,可在此期间提交作品 +# 时间:3小时前 +# 点击通知跳转页面 +# 点击此通知将跳转到代码审查大赛详情页: +# http://117.50.100.12:8080/competitions/lgw7st/home +class MessageTemplate::CompetitionBegin < MessageTemplate + + # MessageTemplate::FollowedTip.get_message_content(User.where(login: 'yystopf'), User.last) + def self.get_message_content(receivers, competition) + return receivers_string(receivers), sys_notice.to_s.gsub('{competition_name}', competition&.name), notification_url.to_s.gsub('{to_url}', "/competitions/#{competition.identifier}/home") + # rescue + # return '', '', '' + end +end diff --git a/app/models/message_template/competition_result.rb b/app/models/message_template/competition_result.rb new file mode 100644 index 000000000..c949a38cf --- /dev/null +++ b/app/models/message_template/competition_result.rb @@ -0,0 +1,35 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 报名的竞赛进入成绩公示阶段 +# 触发场景 +# 赛队成员报名的竞赛已进入成绩公示阶段 +# 通知文案格式 +# 你报名的竞赛 xxx 已进入成绩公示阶段,可查看排行榜信息 +# 时间:x分钟/小时/天/月前 +# 通知文案示例 +# 你报名的竞赛 代码审查大赛 已进入成绩公示阶段,可查看排行榜信息 +# 时间:3小时前 +# 点击通知跳转页面 +# 点击此通知将跳转到代码审查大赛详情页: +# http://117.50.100.12:8080/competitions/lgw7st/home +class MessageTemplate::CompetitionResult < MessageTemplate + + # MessageTemplate::FollowedTip.get_message_content(User.where(login: 'yystopf'), User.last) + def self.get_message_content(receivers, competition) + return receivers_string(receivers), sys_notice.gsub('{competition_name}', competition&.title), notification_url.gsub('{to_url}', "/competitions/#{competition.identifier}/home") + rescue + return '', '', '' + end +end diff --git a/app/models/message_template/competition_review.rb b/app/models/message_template/competition_review.rb new file mode 100644 index 000000000..12bf5a883 --- /dev/null +++ b/app/models/message_template/competition_review.rb @@ -0,0 +1,35 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 报名的竞赛比赛结束时间临近 +# 触发场景 +# 赛队成员报名的竞赛阶段处于比赛进行中,且距比赛结束日期仅剩3天 +# 通知文案格式 +# 你报名的竞赛 xxx 距作品提交结束日期仅剩3天,若尚未提交参赛作品,请尽快提交 +# 时间:x分钟/小时/天/月前 +# 通知文案示例 +# 你报名的竞赛 代码审查大赛 距作品提交结束日期仅剩3天,若尚未提交参赛作品,请尽快提交 +# 时间:3小时前 +# 点击通知跳转页面 +# 点击此通知将跳转到代码审查大赛详情页: +# http://117.50.100.12:8080/competitions/lgw7st/home +class MessageTemplate::CompetitionReview < MessageTemplate + + # MessageTemplate::FollowedTip.get_message_content(User.where(login: 'yystopf'), User.last) + def self.get_message_content(receivers, competition) + return receivers_string(receivers), sys_notice.gsub('{competition_name}', competition&.title), notification_url.gsub('{to_url}', "/competitions/#{competition.identifier}/home") + rescue + return '', '', '' + end +end diff --git a/app/models/message_template/issue_expire.rb b/app/models/message_template/issue_expire.rb index 88593d848..d77965f13 100644 --- a/app/models/message_template/issue_expire.rb +++ b/app/models/message_template/issue_expire.rb @@ -16,18 +16,21 @@ class MessageTemplate::IssueExpire < MessageTemplate # MessageTemplate::IssueCreatorExpire.get_message_content(User.where(login: 'yystopf'), Issue.last) - def self.get_message_content(receiver, issue) - if receiver.user_template_message_setting.present? - return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::IssueExpire"] - project = issue&.project - owner = project&.owner - content = sys_notice.gsub('{title}', issue&.subject) - url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) - - return receivers_string(receivers), content, url - else - return '', '', '' + def self.get_message_content(receivers, issue) + receivers.each do |receiver| + if receiver.user_template_message_setting.present? + send_setting = receiver.user_template_message_setting.notification_body["CreateOrAssign::IssueExpire"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_notification_body["CreateOrAssign::IssueExpire"] : send_setting + receivers = receivers.where.not(id: receiver.id) unless send_setting + end end + return '', '', '' if receivers.blank? + project = issue&.project + owner = project&.owner + content = sys_notice.gsub('{title}', issue&.subject) + url = notification_url.gsub('{owner}', owner&.login).gsub('{identifier}', project&.identifier).gsub('{id}', issue&.id.to_s) + + return receivers_string(receivers), content, url rescue => e Rails.logger.info("MessageTemplate::IssueExpire.get_message_content [ERROR] #{e}") return '', '', '' @@ -35,9 +38,12 @@ class MessageTemplate::IssueExpire < MessageTemplate def self.get_email_message_content(receiver, issue) if receiver.user_template_message_setting.present? - return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::IssueExpire"] + send_setting = receiver.user_template_message_setting.email_body["CreateOrAssign::IssueExpire"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_email_body["CreateOrAssign::IssueExpire"] : send_setting + return '', '', '' unless send_setting project = issue&.project owner = project&.owner + title = email_title content = email content.gsub!('{receiver}', receiver&.real_name) diff --git a/app/models/message_template/project_forked.rb b/app/models/message_template/project_forked.rb index a395d0db6..c119feed6 100644 --- a/app/models/message_template/project_forked.rb +++ b/app/models/message_template/project_forked.rb @@ -19,7 +19,9 @@ class MessageTemplate::ProjectForked < MessageTemplate def self.get_message_content(receivers, user, project) receivers.each do |receiver| if receiver.user_template_message_setting.present? - receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::Forked"] + send_setting = receiver.user_template_message_setting.notification_body["ManageProject::Forked"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_notification_body["ManageProject::Forked"] : send_setting + receivers = receivers.where.not(id: receiver.id) unless send_setting end end return '', '', '' if receivers.blank? diff --git a/app/models/message_template/project_milestone.rb b/app/models/message_template/project_milestone.rb index 8c9c47d16..3436908e0 100644 --- a/app/models/message_template/project_milestone.rb +++ b/app/models/message_template/project_milestone.rb @@ -19,6 +19,8 @@ class MessageTemplate::ProjectMilestone < MessageTemplate def self.get_message_content(receivers, operator, milestone) receivers.each do |receiver| if receiver.user_template_message_setting.present? + send_setting = receiver.user_template_message_setting.notification_body["ManageProject::Milestone"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_notification_body["ManageProject::Milestone"] : send_setting receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::Milestone"] end end @@ -36,7 +38,9 @@ class MessageTemplate::ProjectMilestone < MessageTemplate def self.get_email_message_content(receiver, operator, milestone) if receiver.user_template_message_setting.present? - return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::Milestone"] + send_setting = receiver.user_template_message_setting.email_body["ManageProject::Milestone"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_email_body["ManageProject::Milestone"] : send_setting + return '', '', '' unless send_setting project = milestone&.project owner = project&.owner title = email_title diff --git a/app/models/message_template/project_milestone_completed.rb b/app/models/message_template/project_milestone_completed.rb index eec895a6b..899af8d61 100644 --- a/app/models/message_template/project_milestone_completed.rb +++ b/app/models/message_template/project_milestone_completed.rb @@ -19,7 +19,9 @@ class MessageTemplate::ProjectMilestoneCompleted < MessageTemplate def self.get_message_content(receivers, milestone) receivers.each do |receiver| if receiver.user_template_message_setting.present? - receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::MilestoneCompleted"] + send_setting = receiver.user_template_message_setting.notification_body["ManageProject::MilestoneCompleted"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_notification_body["ManageProject::MilestoneCompleted"] : send_setting + receivers = receivers.where.not(id: receiver.id) unless send_setting end end return '', '', '' if receivers.blank? @@ -36,7 +38,9 @@ class MessageTemplate::ProjectMilestoneCompleted < MessageTemplate def self.get_email_message_content(receiver, milestone) if receiver.user_template_message_setting.present? - return '', '', '' unless receiver.user_template_message_setting.email_body["ManageProject::MilestoneCompleted"] + send_setting = receiver.user_template_message_setting.email_body["ManageProject::MilestoneCompleted"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_email_body["ManageProject::MilestoneCompleted"] : send_setting + return '', '', '' unless send_setting project = milestone&.project owner = project&.owner title = email_title diff --git a/app/models/message_template/project_praised.rb b/app/models/message_template/project_praised.rb index 35af6148f..1686b3197 100644 --- a/app/models/message_template/project_praised.rb +++ b/app/models/message_template/project_praised.rb @@ -19,7 +19,9 @@ class MessageTemplate::ProjectPraised < MessageTemplate def self.get_message_content(receivers, user, project) receivers.each do |receiver| if receiver.user_template_message_setting.present? - receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["ManageProject::Praised"] + send_setting = receiver.user_template_message_setting.notification_body["ManageProject::Praised"] + send_setting = send_setting.nil? ? UserTemplateMessageSetting.init_notification_body["ManageProject::Praised"] : send_setting + receivers = receivers.where.not(id: receiver.id) unless send_setting end end return '', '', '' if receivers.blank? diff --git a/app/models/project.rb b/app/models/project.rb index b5957edc9..a35fbf387 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -125,8 +125,8 @@ class Project < ApplicationRecord has_many :has_pinned_users, through: :pinned_projects, source: :user has_many :webhooks, class_name: "Gitea::Webhook", primary_key: :gpid, foreign_key: :repo_id after_create :incre_user_statistic, :incre_platform_statistic - after_save :check_project_members, :reset_cache_data - before_save :set_invite_code, :reset_unmember_followed, :set_recommend_and_is_pinned + after_save :check_project_members + before_save :set_invite_code, :reset_unmember_followed, :set_recommend_and_is_pinned, :reset_cache_data before_destroy :decre_project_common, :decre_forked_from_project_count after_destroy :decre_user_statistic, :decre_platform_statistic scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :description, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} @@ -150,7 +150,7 @@ class Project < ApplicationRecord end def reset_cache_data - CacheAsyncResetJob.perform_later("project_common_service", self.id) + CacheAsyncResetJob.set(wait: 5.seconds).perform_later("project_common_service", self.id) if changes[:user_id].present? CacheAsyncSetJob.perform_later("user_statistic_service", {project_count: -1}, changes[:user_id].first) CacheAsyncSetJob.perform_later("user_statistic_service", {project_count: 1}, changes[:user_id].last) @@ -163,6 +163,14 @@ class Project < ApplicationRecord CacheAsyncSetJob.perform_later("platform_statistic_service", {project_language_count_key: first_language&.name, project_language_count: -1}) CacheAsyncSetJob.perform_later("platform_statistic_service", {project_language_count_key: last_language&.name, project_language_count: 1}) end + if changes[:is_public].present? + if changes[:is_public][0] && !changes[:is_public][1] + CacheAsyncClearJob.perform_later('project_rank_service', self.id) + end + if !changes[:is_public][0] && changes[:is_public][1] + $redis_cache.srem("v2-project-rank-deleted", self.id) + end + end end def decre_project_common diff --git a/config/routes.rb b/config/routes.rb index 36cd53919..05ffc8b5f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,7 +9,6 @@ Rails.application.routes.draw do # Serve websocket cable requests in-process mount ActionCable.server => '/cable' - get 'attachments/entries/get_file', to: 'attachments#get_file' get 'attachments/download/:id', to: 'attachments#show' get 'attachments/download/:id/:filename', to: 'attachments#show' @@ -25,7 +24,6 @@ Rails.application.routes.draw do resources :edu_settings scope '/api' do - resources :topics, only: [:index] namespace :ci do resources :languages, only: [:index, :show] do collection do @@ -147,16 +145,6 @@ Rails.application.routes.draw do get :get_children_journals end end - - resources :claims, only: [:index] do - collection do - post :create - delete :destroy - get :index - put :update - end - end - resources :issue_times, only: [:create] do collection do post :end_work @@ -385,6 +373,7 @@ Rails.application.routes.draw do resource :bind_user, only: [:create] resources :hot_keywords, only: [:index] + resources :notices, only: [:create] namespace :weapps do resource :home, only: [:show] @@ -683,16 +672,6 @@ Rails.application.routes.draw do namespace :admins do mount Sidekiq::Web => '/sidekiq' get '/', to: 'dashboards#index' - namespace :topic do - resources :activity_forums - resources :banners - resources :cards - resources :cooperators - resources :excellent_projects - resources :experience_forums - resources :pinned_forums - end - resources :project_statistics, only: [:index] do collection do get :visits_static diff --git a/lib/tasks/competition_notice.rake b/lib/tasks/competition_notice.rake new file mode 100644 index 000000000..3de5b3eeb --- /dev/null +++ b/lib/tasks/competition_notice.rake @@ -0,0 +1,38 @@ +# 竞赛通知 + +namespace :competition_notice do + + desc "竞赛通知-进入提交作品状态" + task submit_work_begin: :environment do + competitions = Project.find_by_sql("select * from competitions where status=1 and DATE_FORMAT(enroll_end_time,'%Y-%m-%d %h:00:00') ='#{(Time.now - 1.day).strftime('%Y-%m-%d %H:00:00')}' ") + competitions.each do |c| + competition_teams = Project.find_by_sql("select * from competition_teams where competition_id=#{c.id} ") + competition_teams.each do |team| + SendTemplateMessageJob.perform_later('CompetitionBegin', team.user_id, c.id) + end + end + end + + desc "竞赛通知-截止提交作品时间前3小时" + task submit_work_end: :environment do + competitions = Project.find_by_sql("select * from competitions where status=1 and DATE_FORMAT(end_time,'%Y-%m-%d %h:00:00') ='#{(Time.now + 3.hours).strftime('%Y-%m-%d %H:00:00')}' ") + competitions.each do |c| + competition_teams = Project.find_by_sql("select * from competition_teams where competition_id=#{c.id} ") + competition_teams.each do |team| + SendTemplateMessageJob.perform_later('CompetitionReview', team.user_id, c.id) + end + end + end + + desc "竞赛通知-报名的竞赛进入成绩公示阶段" + task submit_work_result: :environment do + competitions = Project.find_by_sql("select * from competitions where status=1 and DATE_FORMAT(review_time,'%Y-%m-%d %h:00:00') ='#{(Time.now - 1.day).strftime('%Y-%m-%d %H:00:00')}' ") + competitions.each do |c| + competition_teams = Project.find_by_sql("select * from competition_teams where competition_id=#{c.id} ") + competition_teams.each do |team| + SendTemplateMessageJob.perform_later('CompetitionResult', team.user_id, c.id) + end + end + end + +end \ No newline at end of file