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