diff --git a/app/controllers/managements_controller.rb b/app/controllers/managements_controller.rb index dd42d1fa..d05261b8 100644 --- a/app/controllers/managements_controller.rb +++ b/app/controllers/managements_controller.rb @@ -4161,7 +4161,7 @@ end sheet1 = book.create_worksheet :name => "sheet" blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 sheet1.row(0).default_format = blue - sheet1.row(0).concat(["姓名", "手机号","邮箱","单位名称", "职位","专业", "学号", '授课/研究领域' "支付方式","支付状态","支付时间", "发票类型", "发票抬头","税务登记号", "发票内容", "备注", "微信支付单号", "报名时间"]) + sheet1.row(0).concat(["姓名", "手机号","邮箱","单位名称", "职位","专业", "学号", '授课/研究领域', "支付方式","支付状态","支付时间", "发票类型", "发票抬头","税务登记号", "发票内容", "备注", "微信支付单号", "报名时间"]) count_row = 1 trainings.find_each do |t| sheet1[count_row, 0] = t.name diff --git a/app/controllers/trainings_controller.rb b/app/controllers/trainings_controller.rb index e3e96f11..0f291f4e 100644 --- a/app/controllers/trainings_controller.rb +++ b/app/controllers/trainings_controller.rb @@ -10,7 +10,7 @@ class TrainingsController < ApplicationController before_filter :authenticate, except: [:auth, :auth_callback, :pay_callback] - before_filter :find_tag_id, only: [:show, :create, :update, :enroll, :test] + before_filter :find_tag_id, except: [:auth, :auth_callback, :pay_callback] before_filter :find_training, only: [:show, :test] @@ -44,18 +44,24 @@ class TrainingsController < ApplicationController end def pay - _pay_params - @training = current_training + if @training.blank? + redirect_to enroll_training_path(id: @tag_id) + return + end + # 防止重复支付,对于已支付过的,不应该再到这个页来 if @training.payed? redirect_to result_training_path(id: @tag_id) return end - @training.training_payinfo ||= TrainingPayinfo.new - + @training.training_payinfo ||= begin + payinfo = TrainingPayinfo.new + payinfo.fee = @training.registration_fee # 默认值价格不对 + payinfo + end end def pay_callback @@ -98,11 +104,9 @@ class TrainingsController < ApplicationController end def result - _pay_params @training = current_training end - def create @training = current_training || Training.new(params) @training.training_type = @training_type @@ -113,15 +117,15 @@ class TrainingsController < ApplicationController @training.save! flash[:message] = '提交成功' - redirect_to enroll_training_path(id: @tag_id) - # redirect_to pay_training_path(id: @tag_id) + + redirect_to pay_training_path(id: @tag_id) end def update @training = current_training - unless @training - render_404 + if @training.blank? + redirect_to enroll_training_path(id: @tag_id) return end @@ -132,8 +136,8 @@ class TrainingsController < ApplicationController @training.save! flash[:message] = '提交成功' - redirect_to enroll_training_path(id: @tag_id) - # redirect_to pay_training_path(id: @tag_id) + + redirect_to pay_training_path(id: @tag_id) end @@ -143,13 +147,11 @@ class TrainingsController < ApplicationController # 采用ajax调用方式,返回支付参数 def update_payinfo @training = current_training - unless @training - render_404 + if @training.blank? + redirect_to enroll_training_path(id: @tag_id) return end - _pay_params - attachment = nil if params[:image] attachment = Attachment.create!(file: params[:image], author: User.first) @@ -163,12 +165,9 @@ class TrainingsController < ApplicationController training_info = TrainingPayinfo.new(params) end - training_info.num = params[:enlistN].to_i - if training_info.num < 1 - training_info.num = 1 - end + training_info.num = params[:enlistNum].to_i < 1 ? 1 : params[:enlistNum].to_i - training_info.fee = (training_info.num * @pay_fee).to_i + training_info.fee = @training.registration_fee(training_info.num) training_info.attachment = attachment if attachment.present? @@ -183,7 +182,8 @@ class TrainingsController < ApplicationController training_info.save! if params[:js] == 'true' - _pay_js(training_info.fee) + Rails.logger.info("### start wechat pay => fee: #{training_info.fee}") + _pay_js(0.01 || training_info.fee) else redirect_to url = result_training_path(id: @tag_id) end @@ -218,7 +218,7 @@ class TrainingsController < ApplicationController # # 写入wechat_pay付费表 WechatPay.create!(training_id: @training.id, out_trade_no: out_trade_no) - render json: {status: 0, data: unifiedorder(out_trade_no, fee)} + render json: {status: 0, data: unifiedorder(out_trade_no, fee, @training.pay_order_title)} end end @@ -248,9 +248,6 @@ class TrainingsController < ApplicationController end private - def _pay_params - @pay_fee = Redmine::Configuration['training_fee'].to_f || 5000 - end def authenticate if Rails.env.development? @@ -279,7 +276,7 @@ class TrainingsController < ApplicationController def current_training Rails.logger.info("##########openid:#{session[:wechat_open_id]}, training_type: #{@training_type}") - Training.where(openid: session[:wechat_open_id], training_type: @training_type).first + @_current_training ||= Training.where(openid: session[:wechat_open_id], training_type: @training_type).first end def valid_training @@ -326,14 +323,10 @@ class TrainingsController < ApplicationController end - def unifiedorder(out_trade_no, fee) + def unifiedorder(out_trade_no, fee, title) @config = {} - output = Wechat.pay.unifiedorder('湖南警察学院大数据培训会-报名费', - (fee * 100).to_i, - session[:wechat_open_id], - client_ip, - out_trade_no) + output = Wechat.pay.unifiedorder(title, (fee * 100).to_i, session[:wechat_open_id], client_ip, out_trade_no) data = output.fetch("xml") if data.nil? raise "获取微信统一单错误" @@ -361,5 +354,4 @@ class TrainingsController < ApplicationController @config end - end diff --git a/app/models/training.rb b/app/models/training.rb index 7c1333be..cb7f2db7 100644 --- a/app/models/training.rb +++ b/app/models/training.rb @@ -25,4 +25,22 @@ class Training < ActiveRecord::Base research_field.present? && research_field.split(',').include?(str) end + def pay_order_title + case training_type + when 3 then '全国高校大数据和人工智能暑期师资培训会-报名费' + when 4 then '工程教育认证培训会-报名费' + end + end + + def registration_fee(num = 1) + case training_type + when 3 then + # 三人以上 8折 + num >= 3 ? 3000.0 * 0.8 * num : 3000.0 * num + when 4 then + 1200.0 * num + else + raise ArgumentError + end + end end diff --git a/app/models/training_payinfo.rb b/app/models/training_payinfo.rb index 3520c4c0..71f1c793 100644 --- a/app/models/training_payinfo.rb +++ b/app/models/training_payinfo.rb @@ -15,7 +15,12 @@ class TrainingPayinfo < ActiveRecord::Base PayType_bank = 3 #银行卡支付 def pay_type_str - pay_type==PayType_Wechat ? '微信支付' : (pay_type==PayType_alipay ? '支付宝支付' : (pay_type==PayType_bank ? '银行卡支付' : '')) + case pay_type + when PayType_Wechat then '微信支付' + when PayType_alipay then '支付宝支付' + when PayType_bank then '银行卡支付' + else '' + end end def pay_status_str @@ -30,7 +35,7 @@ class TrainingPayinfo < ActiveRecord::Base end def pay_time - WechatPay.where(:out_trade_no => self.out_trade_no).first.try(:created_at) + WechatPay.where(out_trade_no: out_trade_no).first.try(:created_at) end def wechat_wait_pay? diff --git a/app/views/trainings/enroll.html.erb b/app/views/trainings/enroll.html.erb index 6b898691..84a88510 100644 --- a/app/views/trainings/enroll.html.erb +++ b/app/views/trainings/enroll.html.erb @@ -152,57 +152,25 @@ name="position" value="<%= @training.position %>"/> +
您的授课/研究领域(最少选1项)
-您关注的课程类型(最少选1项)
+ + <% %w(程序设计 操作系统 数据库 软件工程 云计算 大数据 人工智能 计算机网络 物联网 信息安全 其他).each_with_index do |name, index| %> +