From 4ab2427827365d3b065204710f295312db0e2071 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Wed, 3 Aug 2016 09:37:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=A1=B9=E7=9B=AE=E5=8F=8A?= =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E7=94=B3=E8=AF=B7=E5=AE=A1=E6=A0=B8=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/projects.rb | 47 +++++++ app/api/mobile/entities/project.rb | 4 +- app/models/applied_project.rb | 8 ++ app/services/courses_service.rb | 2 +- app/services/projects_service.rb | 95 +++++++++++++- app/services/wechat_service.rb | 35 +++++- config/wechat.yml.template | 2 +- config/wechat.yml.test | 1 + public/assets/wechat/project.html | 13 +- .../assets/wechat/review_project_member.html | 11 +- .../javascripts/wechat/controllers/project.js | 15 +++ .../controllers/review_project_member.js | 117 ++++++------------ 12 files changed, 252 insertions(+), 98 deletions(-) diff --git a/app/api/mobile/apis/projects.rb b/app/api/mobile/apis/projects.rb index f3242845f..04863c6e5 100644 --- a/app/api/mobile/apis/projects.rb +++ b/app/api/mobile/apis/projects.rb @@ -86,9 +86,24 @@ module Mobile develop_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=4").all.sort report_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=5").all.sort + review_master_members = [] + review_develop_members = [] + + my_member = project.member_principals.where("users.id=#{current_user.id}").first + if my_member && my_member.roles[0] && my_member.roles[0].id == 3 + ps = ProjectsService.new + + user = current_user + review_master_members = ps.get_project_review_members(project,3,user) + review_develop_members = ps.get_project_review_members(project,4,user) + + end + present :master_members,master_members, with: Mobile::Entities::ProjectMember present :develop_members,develop_members, with: Mobile::Entities::ProjectMember present :report_members,report_members, with: Mobile::Entities::ProjectMember + present :report_members,review_master_members + present :report_members,review_develop_members present :status, 0 end @@ -182,6 +197,38 @@ module Mobile # {status:-1, message: '该功能将在近日开放,敬请期待!' } end + desc "项目单个未审核用户信息" + params do + requires :token, type: String + requires :project_id, type: Integer, desc: "项目id" + requires :user_id, type: Integer, desc: "用户id" + end + post 'review_member_info' do + authenticate! + + ps = ProjectsService.new + reviewer = ps.get_reviewer_info(params) + present :data, reviewer, with: Mobile::Entities::User + present :status, 0 + end + + desc "处理管理或开发的身份申请" + params do + requires :token, type: String + requires :project_id, type: Integer, desc: "项目id" + requires :user_id, type: Integer, desc: "用户id" + requires :type, type: Integer, desc: "同意或拒绝" + end + post 'deal_join_apply' do + authenticate! + + ps = ProjectsService.new + result = ps.deal_join_apply(params,current_user) + + present :status, result[:status] + present :message, result[:message] + end + end end end diff --git a/app/api/mobile/entities/project.rb b/app/api/mobile/entities/project.rb index 073f7cd0f..3e1899caa 100644 --- a/app/api/mobile/entities/project.rb +++ b/app/api/mobile/entities/project.rb @@ -4,8 +4,8 @@ module Mobile expose :name expose :id expose :user_id - expose :invite_code - expose :qrcode + # expose :invite_code + # expose :qrcode expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| current_user = options[:user] diff --git a/app/models/applied_project.rb b/app/models/applied_project.rb index b1945a937..7597778f8 100644 --- a/app/models/applied_project.rb +++ b/app/models/applied_project.rb @@ -11,6 +11,14 @@ class AppliedProject < ActiveRecord::Base def send_appliled_message self.project.managers.each do |member| self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => true, :viewed => false, :applied_user_id => self.user_id, :role => self.role, :project_id => self.project_id) + + #----------------微信通知---------------------- + count = ShieldWechatMessage.where("container_type='User' and container_id=#{member.user_id} and shield_type='Project' and shield_id=#{self.project_id}").count + if count == 0 + ws = WechatService.new + ws.project_review_notice member.user_id, "review_project_member", self.project_id, "项目成员审批通知", self.project.name, self.user.show_name, format_time(Time.now),"点击查看申请详情。",self.user.id + end + #-------------------------------------------- end # end end diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index c8401f051..ccae53b45 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -605,7 +605,7 @@ class CoursesService rolename = role_ids.include?("7") ? "助教" : "教师" content = current_user.show_name + "申请以"+rolename+"身份加入班级,等待您的审批。" ws = WechatService.new - ws.class_notice tea_user.id, "course_join_review", course.id, "班级成员审批通知", course.name, tea_user.show_name, format_time(Time.now), content, "点击查看申请详情" + ws.class_notice tea_user.id, "review_class_member", course.id, "班级成员审批通知", course.name, tea_user.show_name, format_time(Time.now), content, "点击查看申请详情。",current_user.id end end #-------------------------------------------- diff --git a/app/services/projects_service.rb b/app/services/projects_service.rb index f519059d2..3dbf299c2 100644 --- a/app/services/projects_service.rb +++ b/app/services/projects_service.rb @@ -13,8 +13,8 @@ class ProjectsService #显示项目 def show_project(params,current_user) project = Project.find(params[:id]) - project.generate_invite_code - project.generate_qrcode + # project.generate_invite_code + # project.generate_qrcode project end @@ -108,6 +108,8 @@ class ProjectsService 4, '您已经是该项目的开发人员', 5, '您已经是该项目的报告人员', 6, '该项目不存在或已被删除啦', + 7, '您的申请已提交,请等待管理员审批', + 8, '您已经发送过申请了,请耐心等待', '未知错误,请稍后再试' ] end @@ -142,7 +144,13 @@ class ProjectsService status = 0 else + if !AppliedProject.where(:project_id => project.id, :user_id => current_user.id).first.nil? + status = 8 + else + AppliedProject.create(:user_id => current_user.id, :project_id => project.id, :role => params[:role_id]) + status = 7 + end end else status = 4 @@ -155,4 +163,87 @@ class ProjectsService status end + def get_project_review_members(project,role_id,current_user) + review_members = [] + + if role_id == 3 || role_id == 4 + + #AppliedMessage.where(:applied_id => @applied_message.applied_id, :project_id => @applied_message.project_id, :status => 1, + #:applied_type => "AppliedProject") + + + apply_messages = AppliedMessage.where(:user_id => current_user.id, :project_id => project.id, :status => 1, :role=>role_id) + + apply_messages.each do |m| + user = User.find(m.applied_user_id) + + if user + img_url = url_to_avatar(user) + gender = user.user_extensions.gender.nil? ? 0 : user.user_extensions.gender + work_unit = get_user_work_unit user + location = get_user_location user + review_members << {:id => user.id, :img_url => img_url, :nickname => user.login, :gender => gender, + :work_unit => work_unit, :mail => user.mail, :location => location, + role_name: "", + name: user.show_name, + roles_id: role_id, + :brief_introduction => user.user_extensions.brief_introduction,:realname=>user.realname} + end + end + end + + review_members + end + + def get_reviewer_info params + info = nil + project = Project.find(params[:project_id]) + if project + messages = AppliedProject.where("project_id = ? and user_id=?",project.id,params[:user_id]).first + + if messages + user = User.find(params[:user_id]) + if user + img_url = url_to_avatar(user) + gender = user.user_extensions.gender.nil? ? 0 : user.user_extensions.gender + work_unit = get_user_work_unit user + location = get_user_location user + info = {:id => user.id, :img_url => img_url, :nickname => user.login, :gender => gender, + :work_unit => work_unit, :mail => user.mail, :location => location, + role_name: "", + name: user.show_name, + roles_id: messages.role_id, + :brief_introduction => user.user_extensions.brief_introduction,:realname=>user.realname} + end + end + end + + info + end + + def deal_join_apply params,current_user + status = -1 + message = "" + + project = Project.find(params[:project_id]) + + if project + messages = AppliedProject.where("project_id = ? and user_id=?",project.id,params[:user_id]).first + if messages + apply_user = User.find(params[:user_id]) + + # + + + status = 0 + else + message = "该申请不存在或已被处理" + end + else + message = "该班级不存在或已被删除" + end + + {:status => status,:message => message} + end + end diff --git a/app/services/wechat_service.rb b/app/services/wechat_service.rb index 5f52aea49..d2dc683fd 100644 --- a/app/services/wechat_service.rb +++ b/app/services/wechat_service.rb @@ -139,11 +139,16 @@ class WechatService data end - def three_keys_template(openid, template_id, type, id, first, key1, key2, key3, remark="") + def three_keys_template(openid, template_id, type, id, first, key1, key2, key3, remark="",uid) + tmpurl = "#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}" + if uid && uid != 0 + tmpurl = tmpurl + "&user_id="+uid + end + data = { touser:openid, template_id:template_id, - url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}",#/assets/wechat/app.html#/#{type}/#{id} + url:tmpurl,#/assets/wechat/app.html#/#{type}/#{id} topcolor:"#FF0000", data:{ first: { @@ -171,11 +176,16 @@ class WechatService data end - def four_keys_template(openid, template_id, type, id, first, key1, key2, key3, key4, remark="") + def four_keys_template(openid, template_id, type, id, first, key1, key2, key3, key4, remark="",uid) + tmpurl = "#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}" + if uid && uid != 0 + tmpurl = tmpurl + "&user_id="+uid + end + data = { touser:openid, template_id:template_id, - url:"#{Setting.protocol}://#{Setting.host_name}/wechat/user_activities#/#{type}/#{id}", #/assets/wechat/app.html#/#{type}/#{id} + url:tmpurl, #/assets/wechat/app.html#/#{type}/#{id} topcolor:"#FF0000", data:{ first: { @@ -269,10 +279,10 @@ class WechatService end end - def class_notice(user_id, type, id, first, key1, key2, key3, key4, remark="") + def class_notice(user_id, type, id, first, key1, key2, key3, key4, remark="",uid=0) uw = UserWechat.where(user_id: user_id).first unless uw.nil? - data = four_keys_template uw.openid,Wechat.config.class_notice, type, id, first, key1, key2, key3, key4, remark + data = four_keys_template uw.openid,Wechat.config.class_notice, type, id, first, key1, key2, key3, key4, remark, uid begin req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data) rescue Exception => e @@ -360,4 +370,17 @@ class WechatService end end + def project_review_notice(user_id, type, id, first, key1, key2,key3,remark="",uid=0) + uw = UserWechat.where(user_id: user_id).first + unless uw.nil? + data = three_keys_template uw.openid,Wechat.config.project_review_notice, type, id, first, key1, key2, key3, remark,uid + begin + req = Wechat.api.template_message_send Wechat::Message.to(uw.openid).template(data) + rescue Exception => e + Rails.logger.error "[project_review_notice] ===> #{e}" + end + Rails.logger.info "send over. #{req}" + end + end + end \ No newline at end of file diff --git a/config/wechat.yml.template b/config/wechat.yml.template index 02ec8db55..68e6ed62e 100644 --- a/config/wechat.yml.template +++ b/config/wechat.yml.template @@ -22,7 +22,7 @@ default: &default class_notice: "MQ_mFupbXP-9jWbeHT3C5xqNBvPo8EIlNv4ULakSpJA" create_class_notice: "2GtJJGzzNlNy2i0UrsjEDlvfSVIUXQfSo47stpcQAVw" create_project_notice: "jYu0iimbDpgWYZaTLXioZe2lvqoWTdKnUPyphTJ1mxs" - + project_review_notice: "kdb-8UlMjTc3z51Qcf8g2vY4i_nE4OGKZAucdQma_2E" production: <<: *default diff --git a/config/wechat.yml.test b/config/wechat.yml.test index ec5e760fa..3d1861d67 100644 --- a/config/wechat.yml.test +++ b/config/wechat.yml.test @@ -22,6 +22,7 @@ default: &default class_notice: "8LVu33l6bP-56SDomVgHn-yJc57YpCwwJ81rAJgRONk" create_class_notice: "9CDIvHIKiGwPEQWRw_-wieec1o50tMXQPPZIfECKu0I" create_project_notice: "R2ZaQKJfDJgujPcHWPzadKHIRkIyj2CjX2o_qIuRqig" + project_review_notice: "cwpAHzdrYQo0Gc5ZKCBHMYEe8NjlOF6KpMGklMch8RM" production: <<: *default diff --git a/public/assets/wechat/project.html b/public/assets/wechat/project.html index 76ebc0430..1ec43de2c 100644 --- a/public/assets/wechat/project.html +++ b/public/assets/wechat/project.html @@ -110,16 +110,27 @@