diff --git a/app/controllers/admins/disciplines_controller.rb b/app/controllers/admins/disciplines_controller.rb index 598ab7386..b7b3152fb 100644 --- a/app/controllers/admins/disciplines_controller.rb +++ b/app/controllers/admins/disciplines_controller.rb @@ -7,7 +7,7 @@ class Admins::DisciplinesController < Admins::BaseController def create name = params[:name].to_s.strip return render_error('名称重复') if Discipline.where(name: name).exists? - Discipline.create!(name: name, position: Discipline.all.pluck(:position).max + 1) + Discipline.create!(name: name, position: Discipline.all.pluck(:position).max.to_i + 1) render_ok end @@ -46,7 +46,7 @@ class Admins::DisciplinesController < Admins::BaseController end def adjust_position - max_position = Discipline.all.pluck(:position).max + max_position = Discipline.all.pluck(:position).max.to_i opr = params[:opr] || "down" if (params[:opr] == "up" && current_discipline.position == 1) || (params[:opr] == "down" && current_discipline.position == max_position) @message = "超出范围" diff --git a/app/controllers/admins/sub_disciplines_controller.rb b/app/controllers/admins/sub_disciplines_controller.rb index a60f497e5..61f644a91 100644 --- a/app/controllers/admins/sub_disciplines_controller.rb +++ b/app/controllers/admins/sub_disciplines_controller.rb @@ -9,7 +9,7 @@ class Admins::SubDisciplinesController < Admins::BaseController name = params[:name].to_s.strip return render_error('名称不能为空') if name.blank? return render_error('名称重复') if current_discipline.sub_disciplines.where(name: name).exists? - SubDiscipline.create!(name: name, discipline_id: current_discipline.id, position: current_discipline.sub_disciplines.pluck(:position).max + 1) + SubDiscipline.create!(name: name, discipline_id: current_discipline.id, position: current_discipline.sub_disciplines.pluck(:position).max.to_i + 1) render_ok end @@ -47,7 +47,7 @@ class Admins::SubDisciplinesController < Admins::BaseController def adjust_position discipline = current_sub_discipline.discipline - max_position = discipline.sub_disciplines.pluck(:position).max + max_position = discipline.sub_disciplines.pluck(:position).max.to_i opr = params[:opr] || "down" if (params[:opr] == "up" && current_sub_discipline.position == 1) || (params[:opr] == "down" && current_sub_discipline.position == max_position) @message = "超出范围" diff --git a/app/controllers/admins/tag_disciplines_controller.rb b/app/controllers/admins/tag_disciplines_controller.rb index c10f63884..c8e14dbd8 100644 --- a/app/controllers/admins/tag_disciplines_controller.rb +++ b/app/controllers/admins/tag_disciplines_controller.rb @@ -9,7 +9,7 @@ class Admins::TagDisciplinesController < Admins::BaseController name = params[:name].to_s.strip return render_error('名称重复') if current_sub_discipline.tag_disciplines.where(name: name).exists? TagDiscipline.create!(name: name, sub_discipline_id: current_sub_discipline.id, user_id: current_user.id, - position: current_sub_discipline.tag_disciplines.pluck(:position).max + 1) + position: current_sub_discipline.tag_disciplines.pluck(:position).max.to_i + 1) render_ok end @@ -42,7 +42,7 @@ class Admins::TagDisciplinesController < Admins::BaseController def adjust_position sub_discipline = current_tag_discipline.sub_discipline - max_position = sub_discipline.tag_disciplines.pluck(:position).max + max_position = sub_discipline.tag_disciplines.pluck(:position).max.to_i opr = params[:opr] || "down" if (params[:opr] == "up" && current_tag_discipline.position == 1) || (params[:opr] == "down" && current_tag_discipline.position == max_position) @message = "超出范围" diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index d0a2e5e4b..fd2d25dd5 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -395,9 +395,7 @@ class CoursesController < ApplicationController def destroy if @course.is_delete == 0 @course.delete! - Tiding.where(belong_container: @course).update_all(is_delete: 1) - Tiding.create!(user_id: current_user.id, trigger_user_id: current_user.id, container_id: @course.id, - container_type: 'DeleteCourse', tiding_type: 'System', belong_container: @course, extra: @course.name) + DeleteCourseNotifyJob.perform_later(@course.id, current_user.id) normal_status(0, "成功") else normal_status(-1, "课堂已删除,无需重复操作") diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 082c8118d..c2e09fe2b 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -87,16 +87,16 @@ class HomeworkCommonsController < ApplicationController end @task_count = @homework_commons.size - order_str = @homework_type == 4 ? "position DESC" : "IF(ISNULL(homework_commons.publish_time),0,1), homework_commons.publish_time DESC, + order_str = @homework_type == 4 ? "homework_commons.position DESC" : "IF(ISNULL(homework_commons.publish_time),0,1), homework_commons.publish_time DESC, homework_commons.created_at DESC" @homework_commons = @homework_commons.order(order_str).page(page).per(15) if @homework_type == 4 - @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :shixuns) + @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :shixuns, :course_second_category, user: :user_extension) elsif @homework_type == 3 - @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_detail_group) + @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :homework_detail_group, :course_second_category, user: :user_extension) else - @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings) + @homework_commons = @homework_commons.includes(:homework_detail_manual, :published_settings, :homework_group_settings, :course_second_category, user: :user_extension) end end @@ -902,7 +902,8 @@ class HomeworkCommonsController < ApplicationController def publish_groups @current_user = current_user - if @homework.publish_immediately @current_user + charge_ids = @course.charge_group_ids(@current_user) + if @homework.publish_immediately charge_ids # 可立即发布的分班:当前用户管理的分班去除已发布的分班 group_ids = @course.charge_group_ids(@current_user) - @homework.homework_group_settings.group_published.pluck(:course_group_id) @course_groups = @course.course_groups.where(id: group_ids) @@ -984,7 +985,7 @@ class HomeworkCommonsController < ApplicationController homework.homework_detail_manual.update_attributes!(comment_status: 1) if homework.course_act.blank? - homework.course_act << CourseActivity.new(user_id: homework.user_id, course_id: homework.course_id) + CourseActivity.create!(user_id: homework.user_id, course_id: homework.course_id, course_act: homework) end # 发消息 HomeworkCommonPushNotifyJob.perform_later(homework.id, tiding_group_ids) @@ -1031,7 +1032,8 @@ class HomeworkCommonsController < ApplicationController def end_groups @current_user = current_user - if @homework.end_immediately @current_user + charge_ids = @course.charge_group_ids(@current_user) + if @homework.end_immediately charge_ids # 可立即截止的分班:统一设置则是用户管理的所有分班,否则是当前用户管理的分班中已发布且未截止的 charge_group_ids = @course.charge_group_ids(@current_user) # 当前用户管理的分班 group_ids = @homework.unified_setting ? charge_group_ids : @@ -1117,7 +1119,7 @@ class HomeworkCommonsController < ApplicationController def choose_category @main_catrgory = @course.course_modules.where(module_type: "shixun_homework") - @homework_category = @main_catrgory.take.course_second_categories + @homework_category = @main_catrgory.take.course_second_categories.includes(:homework_commons) end # 实训作业移动到目录 @@ -1313,7 +1315,7 @@ class HomeworkCommonsController < ApplicationController # 最新一次的查重时间 @last_review_time = format_time @homework.homework_group_reviews.last.try(:created_at) - + @charge_ids = @course.charge_group_ids(@current_user) end # 代码查重代码的详情 diff --git a/app/controllers/item_baskets_controller.rb b/app/controllers/item_baskets_controller.rb index b047e3d78..00f2e49c9 100644 --- a/app/controllers/item_baskets_controller.rb +++ b/app/controllers/item_baskets_controller.rb @@ -34,8 +34,9 @@ class ItemBasketsController < ApplicationController def delete_item_type baskets = basket_items.where(item_type: params[:item_type]) + item_ids = baskets.pluck(:item_bank_id) baskets.destroy_all - render_ok + render_ok({item_ids: item_ids}) end def set_score diff --git a/app/controllers/tag_disciplines_controller.rb b/app/controllers/tag_disciplines_controller.rb index c80071824..2db5abf28 100644 --- a/app/controllers/tag_disciplines_controller.rb +++ b/app/controllers/tag_disciplines_controller.rb @@ -5,7 +5,7 @@ class TagDisciplinesController < ApplicationController sub_discipline = SubDiscipline.find_by!(id: params[:sub_discipline_id]) tip_exception("重复的知识点") if sub_discipline.tag_disciplines.exists?(name: params[:name].to_s.strip) tag_discipline = TagDiscipline.create!(name: params[:name].to_s.strip, sub_discipline: sub_discipline, user_id: current_user.id, - position: sub_discipline.tag_disciplines.pluck(:position).max + 1) + position: sub_discipline.tag_disciplines.pluck(:position).max.to_i + 1) render_ok({tag_discipline_id: tag_discipline.id}) end end \ No newline at end of file diff --git a/app/controllers/weapps/challenges_controller.rb b/app/controllers/weapps/challenges_controller.rb index 21a7fdee9..24bd4baeb 100644 --- a/app/controllers/weapps/challenges_controller.rb +++ b/app/controllers/weapps/challenges_controller.rb @@ -9,7 +9,7 @@ class Weapps::ChallengesController < Weapps::BaseController play = @shixun.is_jupyter? || @shixun.vnc || @shixun.hide_code? || (@shixun.small_mirror_name & ["Css", "Html", "Web"]).present? - if play + if @challenge.st != 1 && play normal_status(-5, "该关卡暂不支持小程序") else render_ok diff --git a/app/controllers/weapps/courses_controller.rb b/app/controllers/weapps/courses_controller.rb index ccd5d1bcf..a0ee59971 100644 --- a/app/controllers/weapps/courses_controller.rb +++ b/app/controllers/weapps/courses_controller.rb @@ -20,6 +20,7 @@ class Weapps::CoursesController < Weapps::BaseController activities = @course.course_activities.where("course_act_type in ('Course', 'CourseMessage') or (course_act_type = 'HomeworkCommon' and course_act_id in #{homework_ids})").order("id desc") + @activities_count = activities.size @activities = paginate activities.includes(:course_act, user: :user_extension) end diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index f0d58adbb..0e79f11de 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -42,6 +42,14 @@ module CoursesHelper end end + def practice_homework_count course + homeworks = course.homework_commons.practices + publish_count = homeworks.select{|homework| homework.publish_time.present? && homework.publish_time <= Time.now}.size + unpublish_count = homeworks.select{|homework| homework.publish_time.nil? || homework.publish_time > Time.now}.size + all_count = homeworks.size + {publish_count: publish_count, unpublish_count: unpublish_count, all_count: all_count} + end + # 课堂模块的url def module_url mod, course return nil if mod.blank? or course.blank? diff --git a/app/helpers/homework_commons_helper.rb b/app/helpers/homework_commons_helper.rb index 2ffc3872f..ffbc61b53 100644 --- a/app/helpers/homework_commons_helper.rb +++ b/app/helpers/homework_commons_helper.rb @@ -183,7 +183,7 @@ module HomeworkCommonsHelper student_works = homework_common.teacher_works(member) count[:commit_count] = student_works.select{|work| work.work_status != 0 }.size count[:uncommit_count] = student_works.select{|work| work.work_status == 0 }.size - count[:compelete_count] = Myshixun.where(id: student_works.pluck(:myshixun_id).reject(&:blank?), status: 1).size + count[:compelete_count] = Myshixun.where(id: student_works.pluck(:myshixun_id).reject{|ms| ms==0}, status: 1).size count[:all_count] = student_works.size count end diff --git a/app/jobs/delete_course_notify_job.rb b/app/jobs/delete_course_notify_job.rb new file mode 100644 index 000000000..4e3c21311 --- /dev/null +++ b/app/jobs/delete_course_notify_job.rb @@ -0,0 +1,13 @@ +# 删除课堂时将相应的课堂消息置为删除状态,并给老师发送删除消息 +class DeleteCourseNotifyJob < ApplicationJob + queue_as :default + + def perform(course_id, user_id) + course = Course.find_by(id: course_id) + return if course.blank? + + Tiding.where(belong_container: course).update_all(is_delete: 1) + Tiding.create!(user_id: user_id, trigger_user_id: user_id, container_id: course.id, + container_type: 'DeleteCourse', tiding_type: 'System', belong_container: course, extra: course.name) + end +end diff --git a/app/models/course.rb b/app/models/course.rb index 08e2e36f5..cbd09048f 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -257,7 +257,7 @@ class Course < ApplicationRecord # 老师负责的分班id def charge_group_ids user - member = course_member(user.id) + member = user.is_a?(CourseMember) ? user : course_member(user.id) group_ids = if member.present? member.teacher_course_groups.size > 0 ? member.teacher_course_groups.pluck(:course_group_id) : course_groups.pluck(:id) elsif user.admin_or_business? @@ -302,7 +302,7 @@ class Course < ApplicationRecord #课程动态公共表记录 def act_as_course_activity - self.course_act << CourseActivity.new(user_id: tea_id, course_id: id) + CourseActivity.create(user_id: tea_id, course_id: id, course_act: self) end # 当前老师分班下的所有学生 diff --git a/app/models/course_message.rb b/app/models/course_message.rb index b09613ec4..1bbb7e454 100644 --- a/app/models/course_message.rb +++ b/app/models/course_message.rb @@ -30,7 +30,7 @@ class CourseMessage < ApplicationRecord #课程动态公共表记录 def act_as_course_activity - self.course_act << CourseActivity.new(user_id: course_message_id, course_id: course_id) + CourseActivity.create(user_id: course_message_id, course_id: course_id, course_act: self) end def send_deal_tiding deal_status diff --git a/app/models/course_second_category.rb b/app/models/course_second_category.rb index 963367e0b..84b47e27f 100644 --- a/app/models/course_second_category.rb +++ b/app/models/course_second_category.rb @@ -12,4 +12,13 @@ class CourseSecondCategory < ApplicationRecord category_type == "graduation" && name == "毕设任务" ? "graduation_tasks" : category_type ) end + + def homework_publish_count + homework_commons.select{|homework| homework.publish_time.present? && homework.publish_time <= Time.now}.size + end + + def homework_unpublish_count + homework_commons.select{|homework| homework.publish_time.nil? || homework.publish_time > Time.now}.size + end + end diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index f3a2e85f8..a3030a728 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -141,15 +141,17 @@ class HomeworkCommon < ApplicationRecord end # 作业能否立即发布 - def publish_immediately user - homework_detail_manual.try(:comment_status) == 0 || homework_group_settings.where(course_group_id: course.charge_group_ids(user)). - none_published.count > 0 + def publish_immediately charge_ids + homework_detail_manual.try(:comment_status) == 0 || + homework_group_settings.select{|setting| charge_ids.include?(setting.course_group_id) && + (setting.publish_time.nil? || setting.publish_time > Time.now)}.size > 0 end # 作业能否立即截止 - def end_immediately user - (unified_setting && homework_detail_manual.try(:comment_status) == 1 && end_time > Time.now) || homework_group_settings. - where(course_group_id: course.charge_group_ids(user)).published_no_end.count > 0 + def end_immediately charge_ids + (unified_setting && homework_detail_manual.try(:comment_status) == 1 && end_time.present? && end_time > Time.now) || + homework_group_settings.select{|setting| charge_ids.include?(setting.course_group_id) && + !setting.publish_time.nil? && setting.publish_time < Time.now && setting.end_time > Time.now}.size > 0 end # 学生是否提交了作品 diff --git a/app/models/user.rb b/app/models/user.rb index e74290c84..5c22f46e7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -118,8 +118,8 @@ class User < ApplicationRecord has_many :manage_courses, through: :manage_course_members, source: :course # 关注 - has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 - has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 + # has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 + # has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 # 认证 has_many :apply_user_authentication @@ -726,8 +726,8 @@ class User < ApplicationRecord end def validate_sensitive_string - raise("真实姓名包含敏感词汇,请重新输入") if lastname && !HarmoniousDictionary.clean?(lastname) - raise("昵称包含敏感词汇,请重新输入") if nickname && !HarmoniousDictionary.clean?(nickname) + raise("真实姓名包含敏感词汇,请重新输入#{lastname}") if lastname && !HarmoniousDictionary.clean?(lastname) + raise("昵称包含敏感词汇,请重新输入#{nickname}") if nickname && !HarmoniousDictionary.clean?(nickname) end def set_laboratory diff --git a/app/services/admins/import_discipline_service.rb b/app/services/admins/import_discipline_service.rb index 37cb5b7e5..a18922135 100644 --- a/app/services/admins/import_discipline_service.rb +++ b/app/services/admins/import_discipline_service.rb @@ -29,14 +29,14 @@ class Admins::ImportDisciplineService < ApplicationService return unless discipline_name.present? discipline = Discipline.find_by(name: discipline_name) if discipline.blank? - discipline = Discipline.create!(name: discipline_name, position: Discipline.all.pluck(:position).max + 1) + discipline = Discipline.create!(name: discipline_name, position: Discipline.all.pluck(:position).max.to_i + 1) count += 1 end if sub_discipline_name.present? sub_discipline = SubDiscipline.find_by(name: discipline_name, discipline: discipline) if sub_discipline.blank? - SubDiscipline.create!(name: sub_discipline_name, discipline: discipline, position: discipline.sub_disciplines.pluck(:position).max + 1) + SubDiscipline.create!(name: sub_discipline_name, discipline: discipline, position: discipline.sub_disciplines.pluck(:position).max.to_i + 1) count += 1 end end diff --git a/app/services/oauth/create_or_find_cas_user_service.rb b/app/services/oauth/create_or_find_cas_user_service.rb index 0b6715471..550157ebd 100644 --- a/app/services/oauth/create_or_find_cas_user_service.rb +++ b/app/services/oauth/create_or_find_cas_user_service.rb @@ -14,7 +14,7 @@ class Oauth::CreateORFindCasUserService < ApplicationService return [open_user.user, false] if open_user.persisted? - @user = User.new(login: User.generate_login('C'), type: 'User', status: User::STATUS_ACTIVE, nickname: @params['comsys_name'], lastname: @params['comsys_name']) + @user = User.new(login: "tfxy#{@params['user']}", type: 'User', status: User::STATUS_ACTIVE, lastname: @params['comsys_name']) ActiveRecord::Base.transaction do @user.save! diff --git a/app/views/homework_commons/_homework_btn_check.json.jbuilder b/app/views/homework_commons/_homework_btn_check.json.jbuilder index ff6e5bc0c..1acf97d9d 100644 --- a/app/views/homework_commons/_homework_btn_check.json.jbuilder +++ b/app/views/homework_commons/_homework_btn_check.json.jbuilder @@ -1,5 +1,6 @@ # 教师身份的立即发布、立即截止、代码查重入口的判断 -json.publish_immediately identity < Course::STUDENT && homework.publish_immediately(user) -json.end_immediately identity < Course::STUDENT && homework.end_immediately(user) +charge_ids = homework.course.charge_group_ids(user) +json.publish_immediately identity < Course::STUDENT && homework.publish_immediately(charge_ids) +json.end_immediately identity < Course::STUDENT && homework.end_immediately(charge_ids) json.code_review identity < Course::STUDENT && homework.code_review if homework.homework_type == 'practice' json.view_answer homework.view_answer(identity, user.id) if homework.homework_type != "practice" \ No newline at end of file diff --git a/app/views/homework_commons/_second_category.json.jbuilder b/app/views/homework_commons/_second_category.json.jbuilder index b584abecc..04890e70c 100644 --- a/app/views/homework_commons/_second_category.json.jbuilder +++ b/app/views/homework_commons/_second_category.json.jbuilder @@ -1,8 +1,15 @@ json.main_category main_catrgory do |category| json.main_category_id 0 json.main_category_name category.module_name + homework_count = practice_homework_count category.course + json.publish_count homework_count[:publish_count] + json.unpublish_count homework_count[:unpublish_count] + json.all_count homework_count[:all_count] end json.homework_category homework_category do |category| json.category_id category.id json.category_name category.name + json.publish_count category.homework_publish_count + json.unpublish_count category.homework_unpublish_count + json.all_count category.homework_commons.size end \ No newline at end of file diff --git a/app/views/homework_commons/code_review_results.json.jbuilder b/app/views/homework_commons/code_review_results.json.jbuilder index 3759ea1c2..309938547 100644 --- a/app/views/homework_commons/code_review_results.json.jbuilder +++ b/app/views/homework_commons/code_review_results.json.jbuilder @@ -1,7 +1,9 @@ json.partial! "homework_public_navigation", locals: {homework: @homework, course: @course, user: @current_user} json.last_review_time @last_review_time -json.publish_immediately @user_course_identity < Course::STUDENT && @homework.publish_immediately(@current_user) -json.end_immediately @user_course_identity < Course::STUDENT && @homework.end_immediately(@current_user) + + +json.publish_immediately @user_course_identity < Course::STUDENT && @homework.publish_immediately(@charge_ids) +json.end_immediately @user_course_identity < Course::STUDENT && @homework.end_immediately(@charge_ids) # 分班情况 json.group_info do diff --git a/app/views/homework_commons/index.json.jbuilder b/app/views/homework_commons/index.json.jbuilder index 6d64cf1f1..44eabe06d 100644 --- a/app/views/homework_commons/index.json.jbuilder +++ b/app/views/homework_commons/index.json.jbuilder @@ -24,6 +24,10 @@ json.homeworks @homework_commons.each do |homework| # 只有在主目录才显示 json.upper_category_name homework.course_second_category&.name unless params[:category] + charge_ids = @course.charge_group_ids(@member) + json.publish_immediately @user_course_identity < Course::STUDENT && homework.publish_immediately(charge_ids) + json.end_immediately @user_course_identity < Course::STUDENT && homework.end_immediately(charge_ids) + unless curr_status[:status].include?("未发布") work_count = calculate_work_count homework, @member json.commit_count work_count[:commit_count] diff --git a/app/views/weapps/courses/course_activities.json.jbuilder b/app/views/weapps/courses/course_activities.json.jbuilder index 498189cf8..2b1059ce1 100644 --- a/app/views/weapps/courses/course_activities.json.jbuilder +++ b/app/views/weapps/courses/course_activities.json.jbuilder @@ -6,7 +6,8 @@ json.activities @activities do |activity| json.login user.login json.img url_to_avatar(user) end - json.created_at activity.created_at.strftime('%m-%d %H:%M:') + json.created_at activity.created_at.strftime('%m-%d %H:%M') json.container_name activity.container_name json.container_type activity.course_act_type == "HomeworkCommon" ? activity.course_act&.homework_type : "" -end \ No newline at end of file +end +json.activities_count @activities_count \ No newline at end of file diff --git a/config/harmonious_dictionary/chinese_dictionary.txt b/config/harmonious_dictionary/chinese_dictionary.txt index c65450d70..65f4397ce 100644 --- a/config/harmonious_dictionary/chinese_dictionary.txt +++ b/config/harmonious_dictionary/chinese_dictionary.txt @@ -357,7 +357,6 @@ H漫画 学生暴动 镇压学生 广安第二人民医院 -胡新宇 趙紫陽 自由亚州 践踏中国女性 @@ -682,7 +681,6 @@ A片 被迫 被逼 强暴 -口技 破处 精液 幼交 @@ -996,7 +994,6 @@ A片 李少民 李淑娴 李旺阳 -李文斌 李月月鸟 李志绥 连胜德 @@ -1157,7 +1154,6 @@ A片 信用危机 邢铮 熊炎 -熊焱 徐邦秦 徐才厚 徐匡迪 @@ -1194,7 +1190,6 @@ A片 张伯笠 张宏堡 张万年 -张伟国 张昭富 张志清 赵海青 diff --git a/config/harmonious_dictionary/harmonious.hash b/config/harmonious_dictionary/harmonious.hash index 7dfcdc80b..67e985d4c 100644 Binary files a/config/harmonious_dictionary/harmonious.hash and b/config/harmonious_dictionary/harmonious.hash differ diff --git a/lib/tasks/homework_publishtime.rake b/lib/tasks/homework_publishtime.rake index 180afcdc2..b0aae5e58 100644 --- a/lib/tasks/homework_publishtime.rake +++ b/lib/tasks/homework_publishtime.rake @@ -45,7 +45,7 @@ namespace :homework_publishtime do end end - homework.course_act << CourseActivity.new(user_id: homework.user_id, course_id: homework.course_id) if !homework.course_act.present? + CourseActivity.create(user_id: homework.user_id, course_id: homework.course_id, course_act: homework) if !homework.course_act.present? end # 分组设置发布时间的作业 diff --git a/lib/tasks/tfxy.rake b/lib/tasks/tfxy.rake new file mode 100644 index 000000000..bf535a3b7 --- /dev/null +++ b/lib/tasks/tfxy.rake @@ -0,0 +1,257 @@ +desc "同步天府学院数据, 执行顺序依次 import_teaches、 import_courses、 import_students、import_course_members" + +namespace :tfxy do + + xlsx =Roo::Spreadsheet.open(Rails.root.join("tfxy.xlsx").to_s) + + task import_teaches: :environment do + desc "同步天府学院老师数据" + xlsx =Roo::Spreadsheet.open(Rails.root.join("tfxy.xlsx").to_s) + + school = School.find_or_create_by(name: '西南财经大学天府学院') do |d| + d.province = '四川省' + d.city = '成都' + end + + #导入教师用户 + teach_data = xlsx.sheet(3) + teach_data_last_row = teach_data.last_row + + 2.upto(teach_data_last_row) do |r| + old_user = User.where("phone = '#{teach_data.cell(r, 5)}' OR mail = '#{teach_data.cell(r, 6)}' OR login = 'tfxy#{teach_data.cell(r, 1)}' " ) + + if !old_user.present? + user = User.new( + phone: teach_data.cell(r, 5), + login: "tfxy#{teach_data.cell(r, 1)}", + type: 'User', + status: User::STATUS_ACTIVE, + lastname: teach_data.cell(r, 2), + nickname: teach_data.cell(r, 2), + password: "Edu#{teach_data.cell(r, 5)}", + mail: teach_data.cell(r, 6), + profile_completed: true, + professional_certification: 1, + certification: 1, + authentication: true, + laboratory_id: Laboratory.find(1)&.id + ) + + if user.save! + departemnt = school.departments.find_or_create_by!(name: teach_data.cell(r, 4)) + + user.create_user_extension!( + school_id: school.id, + location: school.province, + location_city: school.city, + gender: teach_data.cell(r, 3) == '女' ? 1 : 0, + identity: 0, + technical_title: '教师', + department_id: departemnt.id + ) + + open_user = OpenUsers::Cas.find_or_initialize_by(uid: teach_data.cell(r, 1)) do |u| + u.extra = {phone: teach_data.cell(r, 8)} + u.user_id = user.id + end + + p "-------user -----#{user.inspect}" + open_user.save + end + else + old_user.update( + lastname: teach_data.cell(r, 2), + nickname: teach_data.cell(r, 2), + certification: true, + professional_certification: true, + authentication: true, + profile_completed: true) + + + OpenUsers::Cas.find_or_create_by(uid: teach_data.cell(r, 1)) do |u| + u.extra = {phone: teach_data.cell(r, 5)} + u.user_id = old_user.id + end + end + end + + + end + + task import_courses: :environment do + desc "同步天府学院课堂数据" + + school = School.find_or_create_by(name: '西南财经大学天府学院') do |d| + d.province = '四川省' + d.city = '成都' + end + + course_info = {"C程序设计与实践"=>4, "数据库技术应用"=>2, "数据库应用"=>2, "数据库原理"=>2, "数据库实践"=>2, "面向对象程序设计与实践"=>2, "JavaSE程序设计及实践(辅修)"=>4, "编译原理"=>2, "电路与电子技术"=>3, "传感器原理与应用"=>3, "物联网技术与应用"=>2, "人工智能实践"=>3, "计算机组成原理"=>2, "移动应用开发实训"=>4, "面向对象程序课程设计"=>1, "Web程序设计"=>2, "数据仓库与数据挖掘"=>2, "定量分析技术"=>4, "Python程序设计"=>4, "信息系统分析与设计"=>3, "数据处理综合实训"=>2, "绘画基础Ⅱ(色彩构成)"=>2, "数字图像处理"=>4, "虚拟现实技术及应用"=>4, "三维建模技术"=>4, "游戏技术基础"=>4, "传感器与单片机实训"=>2, "数据库原理与实践"=>4, "高级程序设计(二)"=>4, "数据结构与算法分析"=>4, "实训"=>1, "Linux 操作系统"=>4, "Java Web程序设计与实践"=>8, "软件测试与项目管理"=>4, "Android程序设计"=>8, "移动应用开发"=>4, "商业智能案例分析"=>4, "数据分析与挖掘"=>4, "Oracle DBA"=>4, "信息网络安全测试与评估"=>4, "Android编程"=>8, "电子线路CAD设计"=>2, "ARM接口技术"=>4, "嵌入式Linux应用系统设计"=>4, "信息系统开发实训"=>2, "绘画基础I(平面构成)"=>2, "智能信息处理技术"=>3} + + course_data = xlsx.sheet(4) + course_data_last_row = course_data.last_row + + 2.upto(course_data_last_row) do |r| + course_group = CourseGroup.find_or_initialize_by(invite_code: course_data.cell(r, 3)) + + teach_user = OpenUsers::Cas.find_by(uid: course_data.cell(r, 5))&.user + + + puts "----teach_user-----uid-----#{course_data.cell(r, 5)}------#{teach_user.inspect}---" + + if !course_group.persisted? && teach_user.present? + course = Course.find_or_initialize_by(school_id: school.id, name: course_data.cell(r, 2)) do |d| + d.is_public = 0 + d.tea_id = teach_user.id + d.laboratory_id = Laboratory.find(1)&.id + d.credit = course_info[course_data.cell(r, 1)] + end + + + + if !course.persisted? + # 创建课堂 + course_list = CourseList.find_or_initialize_by(name: course_data.cell(r, 2), user_id: teach_user.id) do |d| + d.is_admin = 0 + end + + course.course_list = course_list + course.invite_code = course_data.cell(r, 1)[3..7] + course.save! + + + CourseInfo.create!(user_id: teach_user.id, course_id: course.id) + course.create_course_modules(["shixun_homework", "common_homework", "group_homework", "exercise", "attachment", "course_group", "video"]) + end + + course_group.position = course.course_groups_count + 1 + course_group.name = course_data.cell(r, 4) + course_group.course = course + + course_group.save! + + + puts "---course_group----#{course_group.inspect}" + + course_member = CourseMember.find_or_initialize_by(course_id: course.id, user_id: teach_user.id) do |d| + d.role = 2 + d.course_group_id = 0 + end + course_member.save! if !course_member.persisted? + + TeacherCourseGroup.create!(course_id: course.id, course_member_id: course_member.id, user_id: teach_user.id, course_group_id: course_group.id) + end + end + end + + + task import_students: :environment do + desc "同步天府学院学生数据" + student_data = xlsx.sheet(5) + student_data_last_row = student_data.last_row + + school = School.find_or_create_by(name: '西南财经大学天府学院') do |d| + d.province = '四川省' + d.city = '成都' + end + + 2.upto(student_data_last_row) do |r| + # 邮箱存在 + if student_data.cell(r, 9).present? + old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR mail = '#{student_data.cell(r, 9)}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first + else + old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first + end + + if !old_user.present? + user = User.new( + phone: student_data.cell(r, 8), + login: "tfxy#{student_data.cell(r, 1)}", + type: 'User', + status: User::STATUS_ACTIVE, + lastname: student_data.cell(r, 2), + nickname: student_data.cell(r, 2), + password: "Edu#{student_data.cell(r, 1)}", + mail: student_data.cell(r, 9), + profile_completed: true, + professional_certification: 1, + certification: 1, + authentication: true, + laboratory_id: Laboratory.find(1)&.id + ) + + puts "----user #{user.inspect}" + + if user.save! + departemnt = school.departments.find_or_create_by!(name: student_data.cell(r, 4)) + + user.create_user_extension!( + school_id: school.id, + location: school.province, + location_city: school.city, + gender: student_data.cell(r, 3) == '女' ? 1 : 0, + identity: 1, + student_id: student_data.cell(r, 1), + department_id: departemnt.id + ) + + OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u| + u.extra = {phone: student_data.cell(r, 8)} + u.user_id = user.id + end + + end + + else + # 系统已有用户,关联sso认证用户 + old_user.update( + login: "tfxy#{student_data.cell(r, 1)}", + lastname: student_data.cell(r, 2), + nickname: student_data.cell(r, 2), + certification: true, + professional_certification: true, + authentication: true, + profile_completed: true) + + OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u| + u.extra = {phone: student_data.cell(r, 8)} + u.user_id = old_user.id + end + + end + end + + end + + task import_course_members: :environment do + desc "天府学院学生到课程分班" + course_member_data = xlsx.sheet(6) + course_member_data_last_row = course_member_data.last_row + + school = School.find_or_create_by(name: '西南财经大学天府学院') do |d| + d.province = '四川省' + d.city = '成都' + end + + 2.upto(course_member_data_last_row) do |r| + course_group = CourseGroup.find_by(invite_code: course_member_data.cell(r, 5)) + + student = OpenUsers::Cas.find_by(uid: course_member_data.cell(r, 1))&.user + + puts "------student --- #{course_member_data.cell(r, 1)}--course group--#{course_member_data.cell(r, 5)}" + + if student.present? && course_group.present? + + course_member = CourseMember.find_or_initialize_by(course_id: course_group.course_id, user_id: student.id) do |d| + d.role = 4 + d.course_group_id = course_group.id + end + puts "--------course_member #{course_member.inspect}" + course_member.save! if !course_member.persisted? + end + end + end + + +end + diff --git a/public/react/src/common/util/ShareUtil.js b/public/react/src/common/util/ShareUtil.js index bd34e2edb..a85c37c4a 100644 --- a/public/react/src/common/util/ShareUtil.js +++ b/public/react/src/common/util/ShareUtil.js @@ -60,17 +60,17 @@ function requestForSignatrue (callback) { /** 实践课程 平台提供涵盖基础入门、案例实践和创新应用的完整实训项目体系,通过由浅入深的实训路径,帮助学生快速提升实战能力。 实训项目 覆盖不同专业的IT实验和实训,每周更新,无需配置本机实验环境,随时随地开启企业级真实实训。 - 翻转课堂 自动评测实训任务,支持技能统计,提供教学活动分析报告,减轻教师和助教的辅导压力,免去作业发布和批改的困扰,实时了解学生学习情况,全面提升教师施教效率和水平。 + 教学课堂 自动评测实训任务,支持技能统计,提供教学活动分析报告,减轻教师和助教的辅导压力,免去作业发布和批改的困扰,实时了解学生学习情况,全面提升教师施教效率和水平。 单个课程和实训 获取课程/实训的简介 该课程或者实训展示的缩略图 */ -export function configShareForIndex (path) { +export function configShareForIndex (path) { requestForSignatrue(() => { var shareData = { title: 'EduCoder - 首页', desc: 'Educoder是一个面向计算机类的互联网IT教育和实战平台,提供企业级工程实训,以实现工程化专业教学的自动化和智能化。高校和企业人员可以在此开展计算机实践性教学活动,将传统的知识传授和时兴的工程实战一体化。', link: host + (path || ''), - imgUrl: window.__testImageUrl + imgUrl: window.__testImageUrl || host + '/react/build/images/share_logo_icon.jpg' }; share(shareData) @@ -83,7 +83,7 @@ export function configShareForPaths () { title: 'EduCoder - 实践课程', desc: '平台提供涵盖基础入门、案例实践和创新应用的完整实训项目体系,通过由浅入深的实训路径,帮助学生快速提升实战能力。', link: `${host}/paths`, - imgUrl: window.__testImageUrl + imgUrl: window.__testImageUrl || host + '/react/build/images/share_logo_icon.jpg' }; share(shareData) @@ -97,7 +97,7 @@ export function configShareForShixuns () { title: 'EduCoder - 实训项目', desc: '覆盖不同专业的IT实验和实训,每周更新,无需配置本机实验环境,随时随地开启企业级真实实训。', link: `${host}/shixuns`, - imgUrl: window.__testImageUrl + imgUrl: window.__testImageUrl || host + '/react/build/images/share_logo_icon.jpg' }; share(shareData) @@ -108,10 +108,10 @@ export function configShareForCourses () { console.log('configShareForCourses', host) var shareData = { - title: 'EduCoder - 翻转课堂', + title: 'EduCoder - 教学课堂', desc: '自动评测实训任务,支持技能统计,提供教学活动分析报告,减轻教师和助教的辅导压力,免去作业发布和批改的困扰,实时了解学生学习情况,全面提升教师施教效率和水平。', link: `${host}/courses`, - imgUrl: window.__testImageUrl + imgUrl: window.__testImageUrl || host + '/react/build/images/share_logo_icon.jpg' }; share(shareData) @@ -127,7 +127,7 @@ export function configShareForCustom (title, desc, imgUrl, path) { title: title, desc: desc, link: path ? `${host}/${path}` : _url, - imgUrl: imgUrl || window.__testImageUrl + imgUrl: imgUrl || window.__testImageUrl || host + '/react/build/images/share_logo_icon.jpg' }; share(shareData) diff --git a/public/react/src/modules/competitions/Competition_teams/Competitionteams.js b/public/react/src/modules/competitions/Competition_teams/Competitionteams.js index be6c2e68d..ef9cf58ce 100644 --- a/public/react/src/modules/competitions/Competition_teams/Competitionteams.js +++ b/public/react/src/modules/competitions/Competition_teams/Competitionteams.js @@ -250,7 +250,7 @@ class Competitionteams extends Component{ - 翻转课堂 + 教学课堂
diff --git a/public/react/src/modules/courses/busyWork/CommonWorkList.js b/public/react/src/modules/courses/busyWork/CommonWorkList.js index 35b2a1ee8..78e2a4e70 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkList.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkList.js @@ -404,7 +404,8 @@ class CommonWorkList extends Component{ category: {}, b_order: 'desc', searchtypes:false, - loadingstate:false + loadingstate:false, + comwbool:false } } onTablePagination = (page) => { @@ -476,6 +477,16 @@ class CommonWorkList extends Component{ this.fetchList() } fetchList = () => { + if(this.state.comwbool===true){ + console.log('arg_course_group2'); + console.log(this.state.arg_course_group); + return + } + + this.setState({ + comwbool:true, + }) + //分班 let workId=this.props.match.params.workId; let courseId=this.props.match.params.coursesId; @@ -493,12 +504,23 @@ class CommonWorkList extends Component{ moduleName: '作品列表' })) } - }).catch((error)=>{ + setTimeout(() => { + this.setState({ + comwbool:false, + }) + }, 1000) + }).catch((error)=>{ console.log(error) this.setState({ isSpin:false, loadingstate:false }) + setTimeout(() => { + this.setState({ + comwbool:false, + }) + }, 1000) + }) @@ -514,6 +536,7 @@ class CommonWorkList extends Component{ }) } courseGroupOptionChange = (values, isAllChecked) => { + this.setState({arg_course_group: isAllChecked ? [] : values, page: 1}, () => { this.fetchList() }) @@ -792,10 +815,10 @@ class CommonWorkList extends Component{
{ isAdmin && hasData &&
- 翻转课堂 + 教学课堂
diff --git a/public/react/src/modules/courses/coursesHome/CoursesHome.js b/public/react/src/modules/courses/coursesHome/CoursesHome.js index f6b6d7303..21f7b33bc 100644 --- a/public/react/src/modules/courses/coursesHome/CoursesHome.js +++ b/public/react/src/modules/courses/coursesHome/CoursesHome.js @@ -55,7 +55,7 @@ class CoursesHome extends Component{ } componentDidMount(){ - document.title="翻转课堂"; + document.title="教学课堂"; const upsystem=`/users/system_update.json`; axios.get(upsystem).then((response)=>{ let updata=response.data; @@ -159,7 +159,7 @@ class CoursesHome extends Component{ onClick={ () => this.changeStatus("created_at")}>最新 this.changeStatus("visits")}>最热 - {this.props.user&&this.props.user.user_identity==="学生"?"":this.getUser("/courses/new")}>+新建翻转课堂} + {this.props.user&&this.props.user.user_identity==="学生"?"":this.getUser("/courses/new")}>+新建教学课堂} {/*
*/} {/*/!* - {this.props.match.params.coursesId === undefined ?"翻转课堂":dataname} + {this.props.match.params.coursesId === undefined ?"教学课堂":dataname} > {this.props.match.params.coursesId === undefined ?"新建课堂":"编辑课堂"} diff --git a/public/react/src/modules/courses/new/Goldsubject.js b/public/react/src/modules/courses/new/Goldsubject.js index 006f3f44f..23e098f80 100644 --- a/public/react/src/modules/courses/new/Goldsubject.js +++ b/public/react/src/modules/courses/new/Goldsubject.js @@ -721,7 +721,7 @@ class Goldsubject extends Component { {/**/}

{Whethertocreateanewclassroom===true?"翻转课堂":name} + >{Whethertocreateanewclassroom===true?"教学课堂":name} > {Whethertocreateanewclassroom===true?"新建课堂":"编辑课堂"}

diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index b341e2d52..17bd92001 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -1097,7 +1097,7 @@ submittojoinclass=(value)=>{ {/*
  • 课堂
  • */}
  • {/*课堂*/} - 翻转课堂 + 教学课堂
  • 实训项目 @@ -1183,7 +1183,7 @@ submittojoinclass=(value)=>{ onBlur={(e)=>this.hideshowSearchOpen(e)} onMouseLeave={()=>this.setevaluatinghides()}> this.onKeywordSearchKeyDowns()} onSearch={(value) => this.onKeywordSearchKeyDown(value)} // onPressEnter={this.onKeywordSearchKeyDown} @@ -1230,7 +1230,7 @@ submittojoinclass=(value)=>{
      {/*{user.username}*/}
    • 我的个人主页
    • - {coursestypes===true?"":
    • {this.props.user&&this.props.user.main_site===false?"我的课堂":"我的翻转课堂"}
    • } + {coursestypes===true?"":
    • {this.props.user&&this.props.user.main_site===false?"我的课堂":"我的教学课堂"}
    • } {/* p 老师 l 学生 */} {shixuntype===true?"":
    • 我的实训项目
    • } {pathstype===true?"":
    • {this.props.user&&this.props.user.main_site===false?"我的课程":"我的实践课程"}
    • } @@ -1282,7 +1282,7 @@ submittojoinclass=(value)=>{
  • diff --git a/public/react/src/modules/tpm/newshixuns/Newshixuns.js b/public/react/src/modules/tpm/newshixuns/Newshixuns.js index 361ed3248..d017fe2aa 100644 --- a/public/react/src/modules/tpm/newshixuns/Newshixuns.js +++ b/public/react/src/modules/tpm/newshixuns/Newshixuns.js @@ -620,9 +620,9 @@ class Newshixuns extends Component {
    {this.state.mainvalues === undefined && this.state.subvalues === undefined || this.state.mainvalues === "" && this.state.subvalues === "" ? "" :
    - {`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}`} + {`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}`} {`${this.state.subvalues === undefined || this.state.subvalues === "" ? "" : this.state.mainvalues === undefined || this.state.mainvalues === "" ? this.state.subvalues : this.state.subvalues}`} - {`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : this.state.mainvalues}${this.state.subvalues === undefined || this.state.subvalues === "" ? "" : + {`${this.state.mainvalues === undefined || this.state.mainvalues === "" ? "" : ""}${this.state.subvalues === undefined || this.state.subvalues === "" ? "" : this.state.mainvalues === undefined || this.state.mainvalues === "" ? this.state.subvalues : this.state.subvalues}`}
    } diff --git a/public/react/src/modules/user/usersInfo/InfosBanner.js b/public/react/src/modules/user/usersInfo/InfosBanner.js index 16b70895f..face6e094 100644 --- a/public/react/src/modules/user/usersInfo/InfosBanner.js +++ b/public/react/src/modules/user/usersInfo/InfosBanner.js @@ -15,7 +15,7 @@ class InfosBanner extends Component{ super(props); } render(){ - let { + let { data , id, login, @@ -87,27 +87,27 @@ class InfosBanner extends Component{
    {is_current ? "我":"TA"}的经验值 {data && data.experience} -
    +
    {is_current ? "我":"TA"}的金币 {data && data.grade} -
    + { - is_current ? + is_current ? { - data && data.attendance_signed ? + data && data.attendance_signed ? 已签到 : 签到 } - + : - 私信 @@ -120,7 +120,7 @@ class InfosBanner extends Component{ {coursestypes===true?"":
  • this.setState({moduleName: 'courses'})} - to={`/users/${username}/courses`}>翻转课堂 + to={`/users/${username}/courses`}>教学课堂
  • } {shixuntype===true?"":
  • 实训项目
  • } {pathstype===true?"":
  • - this.setState({moduleName: 'paths'})} to={`/users/${username}/paths`}>实践课程
  • } diff --git a/public/react/src/search/SearchPage.js b/public/react/src/search/SearchPage.js index e25829554..fc50bcbfa 100644 --- a/public/react/src/search/SearchPage.js +++ b/public/react/src/search/SearchPage.js @@ -158,7 +158,7 @@ class SearchPage extends Component{
    实践课程 - 翻转课堂 + 教学课堂 实训项目 交流问答 diff --git a/spec/jobs/delete_course_notify_job_spec.rb b/spec/jobs/delete_course_notify_job_spec.rb new file mode 100644 index 000000000..9fdf97f32 --- /dev/null +++ b/spec/jobs/delete_course_notify_job_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe DeleteCourseNotifyJob, type: :job do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/tfxy.xlsx b/tfxy.xlsx new file mode 100644 index 000000000..ff3b5dc02 Binary files /dev/null and b/tfxy.xlsx differ