#coding=utf-8 class AtMessage < ActiveRecord::Base include ApplicationHelper belongs_to :user belongs_to :sender, class_name: "User", foreign_key: "sender_id" attr_accessible :at_message, :container, :viewed, :user_id, :sender_id belongs_to :at_message, polymorphic: true belongs_to :container, polymorphic: true has_many :message_alls, :class_name => 'MessageAll',:as =>:message, :dependent => :destroy validates :user_id, :sender_id, :at_message_id, :at_message_type, presence: true after_create :add_user_message, :send_wechat_message scope :unviewed, ->(type, id){ where(at_message_type: type, at_message_id:id, viewed: false) } def viewed! update_attribute :viewed, true end def at_valid? return true if at_message_type == 'Issue' return true if 'Journal' == at_message_type return true if 'JournalsForMessage' == at_message_type return true if 'Message' == at_message_type false end def add_user_message if MessageAll.where(message_type: self.class.name,message_id: self.id).empty? self.message_alls << MessageAll.new(:user_id => self.user_id) end end #@的时候发微信模版消息通知被@的人 def send_wechat_message shield_type = "" container_id = 0 status = 0 type = "" detail_id = 0 detail_title = "" if defined? at_message.notes detail_content = strip_html at_message.notes,30 elsif defined? at_message.content detail_content = strip_html at_message.content,30 elsif defined? at_message.description detail_content = strip_html at_message.description,30 end user = self.user topic = get_root_parent at_message case at_message_type when "Issue" #新建issue shield_type = "Project" container_id = at_message.project.id type = "issues" detail_id = topic.id detail_title = at_message.subject when "Journal" #issue回复 topic = get_root_parent at_message.journalized shield_type = "Project" container_id = at_message.journalized.project.id type = "issues" detail_id = topic.id detail_title = at_message.journalized.subject when 'Message' if at_message.course shield_type = "Course" container_id = at_message.course.id type = "course_discussion" detail_id = topic.id detail_title = at_message.subject elsif at_message.project shield_type = "Project" container_id = at_message.project.id type = "project_discussion" detail_id = topic.id detail_title = at_message.subject else status = -1 end when 'JournalsForMessage' if at_message.jour && at_message.jour.course #作业回复 shield_type = "Course" container_id = at_message.jour.course.id type = "homework" detail_id = at_message.jour.id detail_title = at_message.jour.name else type = "journal_for_message" detail_id = topic.id detail_title = at_message.subject end else status = -1 end count = 0 detail_title = detail_title.gsub(/RE: /, '') if container_id != 0 count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='#{shield_type}' and shield_id=#{container_id}").count end if count == 0 && status == 0 message_title = self.sender.show_name+"@了您" ws = WechatService.new ws.at_notice user.id, type, detail_id, message_title, detail_title, format_time(Time.now), detail_content, "点击查看详情。",0 end end def subject case at_message_type when "Issue" "新建问题: " + at_message.subject when "Journal" "问题留言: " + at_message.journalized.subject when 'Message' if(at_message.topic?) "发布新帖: " else "回复帖子: " end + at_message.subject when 'JournalsForMessage' if at_message.jour_type == 'Principal' "留言: 在#{at_message.at_user.show_name}主页中留言" else "作业: #{at_message.jour.name} 中留言" end else logger.error "error type: #{at_message_type}" end end def description case at_message_type when "Issue" at_message.description when "Journal" at_message.notes when 'Message' at_message.content when "JournalsForMessage" at_message.notes else logger.error "error type: #{at_message_type}" end end def author case at_message_type when "Issue" at_message.author when "Journal" at_message.user when 'Message' at_message.author when 'JournalsForMessage' at_message.user else logger.error "error type: #{at_message_type}" end end def url case at_message_type when "Issue" {controller: :issues, action: :show, id: at_message} when "Journal" {controller: :issues, action: :show, id: at_message.journalized} when 'Message' {controller: :boards, action: :show, project_id: at_message.board.project, id: at_message.board} when 'JournalsForMessage' if at_message.jour_type == 'Principal' {controller: :users, action: :user_messages, id: at_message.at_user} elsif at_message.jour_type == 'HomeworkCommon' {controller: :homework_common, action: :index, course: at_message.jour.course_id} elsif at_message.jour_type == 'Course' {controller: :courses, action: :feedback, id: at_message.jour_id} end else logger.error "error type: #{at_message_type}" end end end