From 8ae1ac5e20fe09a7aec07da137aeee5db8c5052e Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 7 Jan 2020 19:13:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=BA=E8=83=BD=E7=BB=84=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ination_intelligent_settings_controller.rb | 14 ++++++++ app/models/examination_intelligent_setting.rb | 4 +++ app/models/examination_type_setting.rb | 3 ++ app/queries/optional_item_query.rb | 32 +++++++++++++++++++ .../optinal_items.json.jbuilder | 4 +++ config/routes.rb | 6 ++++ ...create_examination_intelligent_settings.rb | 13 ++++++++ ...091836_create_examination_type_settings.rb | 13 ++++++++ .../examination_intelligent_setting_spec.rb | 5 +++ spec/models/examination_type_setting_spec.rb | 5 +++ 10 files changed, 99 insertions(+) create mode 100644 app/controllers/examination_intelligent_settings_controller.rb create mode 100644 app/models/examination_intelligent_setting.rb create mode 100644 app/models/examination_type_setting.rb create mode 100644 app/queries/optional_item_query.rb create mode 100644 app/views/examination_intelligent_settings/optinal_items.json.jbuilder create mode 100644 db/migrate/20200107091630_create_examination_intelligent_settings.rb create mode 100644 db/migrate/20200107091836_create_examination_type_settings.rb create mode 100644 spec/models/examination_intelligent_setting_spec.rb create mode 100644 spec/models/examination_type_setting_spec.rb diff --git a/app/controllers/examination_intelligent_settings_controller.rb b/app/controllers/examination_intelligent_settings_controller.rb new file mode 100644 index 000000000..8a69a5c70 --- /dev/null +++ b/app/controllers/examination_intelligent_settings_controller.rb @@ -0,0 +1,14 @@ +class ExaminationIntelligentSettingsController < ApplicationController + + def optinal_items + items = OptionalItemQuery.call(params) + @single_question_count = items[:single_question_count] + @multiple_question_count = items[:multiple_question_count] + @judgement_question_count = items[:judgement_question_count] + @program_question_count = items[:program_question_count] + end + + def create + + end +end \ No newline at end of file diff --git a/app/models/examination_intelligent_setting.rb b/app/models/examination_intelligent_setting.rb new file mode 100644 index 000000000..16dd88300 --- /dev/null +++ b/app/models/examination_intelligent_setting.rb @@ -0,0 +1,4 @@ +class ExaminationIntelligentSetting < ApplicationRecord + belongs_to :sub_discipline + has_many :examination_type_settings, dependent: :destroy +end diff --git a/app/models/examination_type_setting.rb b/app/models/examination_type_setting.rb new file mode 100644 index 000000000..c985e578e --- /dev/null +++ b/app/models/examination_type_setting.rb @@ -0,0 +1,3 @@ +class ExaminationTypeSetting < ApplicationRecord + belongs_to :examination_intelligent_setting +end diff --git a/app/queries/optional_item_query.rb b/app/queries/optional_item_query.rb new file mode 100644 index 000000000..456a74c6a --- /dev/null +++ b/app/queries/optional_item_query.rb @@ -0,0 +1,32 @@ +class OptionalItemQuery < ApplicationQuery + attr_reader :params + + def initialize(params) + @params = params + end + + def call + items = ItemBank.all + if params[:tag_discipline_id].present? && params[:sub_discipline_id].present? + items = items.joins(:tag_discipline_containers).where(tag_discipline_containers: {tag_discipline_id: params[:tag_discipline_id]}) + hacks = Hack.joins(:tag_discipline_containers).where(tag_discipline_containers: {tag_discipline_id: params[:tag_discipline_id]}) + elsif params[:sub_discipline_id].present? + items = items.where(sub_discipline_id: params[:sub_discipline_id]) + hacks = Hack.where(sub_discipline_id: params[:sub_discipline_id]) + end + + # 来源 + source = params[:source].present? ? params[:source].to_i : 1 + public = source == 3 ? [0, 1] : source + items = items.where(public: public) + + # 难度 + difficulty = params[:difficulty] ? params[:difficulty].to_i : 1 + items = items.where(difficulty: difficulty) + single_question_count = items.select{ |item| item.item_type == "SINGLE" }.size + multiple_question_count = items.select{ |item| item.item_type == "MULTIPLE" }.size + judgement_question_count = items.select{ |item| item.item_type == "JUDGMENT" }.size + program_question_count = hacks.present? ? hacks.pluck(:item_bank_id).reject(&:blank?).size : items.select{ |item| item.item_type == "PROGRAM" }.size + {single_question_count: single_question_count, multiple_question_count: multiple_question_count, judgement_question_count: judgement_question_count, program_question_count: program_question_count} + end +end \ No newline at end of file diff --git a/app/views/examination_intelligent_settings/optinal_items.json.jbuilder b/app/views/examination_intelligent_settings/optinal_items.json.jbuilder new file mode 100644 index 000000000..7d8ec7381 --- /dev/null +++ b/app/views/examination_intelligent_settings/optinal_items.json.jbuilder @@ -0,0 +1,4 @@ +json.single_question_count @single_question_count +json.multiple_question_count @multiple_question_count +json.judgement_question_count @judgement_question_count +json.program_question_count @program_question_count diff --git a/config/routes.rb b/config/routes.rb index 065d12099..d41a8a783 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -96,6 +96,12 @@ Rails.application.routes.draw do end end + resources :examination_intelligent_settings do + collection do + get :optinal_items + end + end + resources :hacks, path: :problems, param: :identifier do collection do get :unpulished_list diff --git a/db/migrate/20200107091630_create_examination_intelligent_settings.rb b/db/migrate/20200107091630_create_examination_intelligent_settings.rb new file mode 100644 index 000000000..f00f19c33 --- /dev/null +++ b/db/migrate/20200107091630_create_examination_intelligent_settings.rb @@ -0,0 +1,13 @@ +class CreateExaminationIntelligentSettings < ActiveRecord::Migration[5.2] + def change + create_table :examination_intelligent_settings do |t| + t.references :sub_discipline + t.integer :public, default: 1 + t.integer :difficulty, default: 1 + + t.timestamps + end + + add_index :examination_intelligent_settings, :sub_discipline_id, name: "index_on_sub_discipline_id" + end +end diff --git a/db/migrate/20200107091836_create_examination_type_settings.rb b/db/migrate/20200107091836_create_examination_type_settings.rb new file mode 100644 index 000000000..c2eb50e9e --- /dev/null +++ b/db/migrate/20200107091836_create_examination_type_settings.rb @@ -0,0 +1,13 @@ +class CreateExaminationTypeSettings < ActiveRecord::Migration[5.2] + def change + create_table :examination_type_settings do |t| + t.references :examination_intelligent_setting, index: false + t.integer :item_type + t.integer :count + + t.timestamps + end + + add_index :examination_type_settings, :examination_intelligent_setting_id, name: "index_on_examination_intelligent_setting" + end +end diff --git a/spec/models/examination_intelligent_setting_spec.rb b/spec/models/examination_intelligent_setting_spec.rb new file mode 100644 index 000000000..fb82f86ca --- /dev/null +++ b/spec/models/examination_intelligent_setting_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ExaminationIntelligentSetting, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/examination_type_setting_spec.rb b/spec/models/examination_type_setting_spec.rb new file mode 100644 index 000000000..916cb367d --- /dev/null +++ b/spec/models/examination_type_setting_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ExaminationTypeSetting, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end