|  |  | # encoding: utf-8
 | 
						
						
						
							|  |  | module ApiHelper
 | 
						
						
						
							|  |  |   ONE_MINUTE = 60 * 1000
 | 
						
						
						
							|  |  |   ONE_HOUR = 60 * ONE_MINUTE
 | 
						
						
						
							|  |  |   ONE_DAY = 24 * ONE_HOUR
 | 
						
						
						
							|  |  |   ONE_MONTH = 30 * ONE_DAY
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   ONE_YEAR = 12 * ONE_MONTH
 | 
						
						
						
							|  |  |   #获取用户的工作单位
 | 
						
						
						
							|  |  |   def get_user_work_unit user
 | 
						
						
						
							|  |  |     work_unit = ""
 | 
						
						
						
							|  |  |     if user.user_extensions.identity == 0 || user.user_extensions.identity == 1
 | 
						
						
						
							|  |  |       work_unit = user.user_extensions.school.name unless  user.user_extensions.school.nil?
 | 
						
						
						
							|  |  |     elsif  user.user_extensions.identity == 3
 | 
						
						
						
							|  |  |       work_unit = user.user_extensions.occupation
 | 
						
						
						
							|  |  |     elsif user.user_extensions.identity == 2
 | 
						
						
						
							|  |  |       work_unit = user.firstname
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     work_unit
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #获取用户地区
 | 
						
						
						
							|  |  |   def get_user_location user
 | 
						
						
						
							|  |  |     location = ""
 | 
						
						
						
							|  |  |     location << (user.user_extensions.location || '')
 | 
						
						
						
							|  |  |     location << (user.user_extensions.location_city || '')
 | 
						
						
						
							|  |  |     location
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def get_assigned_homeworks(homeworks, n, index)
 | 
						
						
						
							|  |  |     homeworks += homeworks
 | 
						
						
						
							|  |  |     homeworks[index + 1 .. index + n]
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def stars_to_json_like starts,show_jour,homework,show_name
 | 
						
						
						
							|  |  |     result = []
 | 
						
						
						
							|  |  |     starts.each do |s|
 | 
						
						
						
							|  |  |       comment = get_homework_review homework,show_jour,s.rater
 | 
						
						
						
							|  |  |       rater_name = show_name ? s.rater.login : l(:label_anonymous)
 | 
						
						
						
							|  |  |       rater_id = show_name ? s.rater.id : ''
 | 
						
						
						
							|  |  |       result << {:rater_id =>rater_id ,:rater_name => rater_name,:created_at => format_time(s.created_at),:stars => s.stars,:comment => comment}
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     result
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #########################################################
 | 
						
						
						
							|  |  |   #sw
 | 
						
						
						
							|  |  |   #获取课程未匿评数量
 | 
						
						
						
							|  |  |   #param: user => "用户", course_id => "查询的课程ID"
 | 
						
						
						
							|  |  |   #return: 作业的数量
 | 
						
						
						
							|  |  |   #########################################################
 | 
						
						
						
							|  |  |   def get_course_anonymous_evaluation user,course
 | 
						
						
						
							|  |  |     count = 0
 | 
						
						
						
							|  |  |     if course
 | 
						
						
						
							|  |  |       is_teacher = is_course_teacher user,course
 | 
						
						
						
							|  |  |       if is_teacher #如果是老师,显示学生提交的作业数
 | 
						
						
						
							|  |  |         course.homeworks.each do |bid|
 | 
						
						
						
							|  |  |           count += bid.homeworks.count
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       else #如果是学生,显示未匿评的数量
 | 
						
						
						
							|  |  |         course.homeworks.each do |bid|
 | 
						
						
						
							|  |  |           count += get_student_not_batch_homework_list bid,user
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     [count,is_teacher]
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def get_user_language user
 | 
						
						
						
							|  |  |     (user.language.nil? || user.language == "") ? 'zh':user.language
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # 学生获取课程作业的状态
 | 
						
						
						
							|  |  |   def get_homework_status homework
 | 
						
						
						
							|  |  |     homework_status = ""
 | 
						
						
						
							|  |  |        if homework
 | 
						
						
						
							|  |  |          if  homework.homework_type == 1 && homework.homework_detail_manual
 | 
						
						
						
							|  |  |            case homework.homework_detail_manual.comment_status
 | 
						
						
						
							|  |  |              when 1
 | 
						
						
						
							|  |  |                homework_status = show_homework_deadline homework
 | 
						
						
						
							|  |  |              when 2
 | 
						
						
						
							|  |  |                homework_status = "正在匿评"
 | 
						
						
						
							|  |  |              when 3
 | 
						
						
						
							|  |  |                homework_status = "匿评结束"
 | 
						
						
						
							|  |  |            end
 | 
						
						
						
							|  |  |          elsif homework.homework_type == 0
 | 
						
						
						
							|  |  |            homework_status = "未启用匿评"
 | 
						
						
						
							|  |  |          elsif homework.homework_type == 2
 | 
						
						
						
							|  |  |            homework_status = "编程作业"
 | 
						
						
						
							|  |  |          else
 | 
						
						
						
							|  |  |          end
 | 
						
						
						
							|  |  |        end
 | 
						
						
						
							|  |  |     homework_status
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #获取作业的是否可以匿评的描述
 | 
						
						
						
							|  |  |   def homework_status_desc homework
 | 
						
						
						
							|  |  |     if homework.homework_type == 1 && homework.homework_detail_manual #匿评作业
 | 
						
						
						
							|  |  |       if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")
 | 
						
						
						
							|  |  |         link = show_homework_deadline homework
 | 
						
						
						
							|  |  |       elsif homework.student_works.count >= 2 #作业份数大于2
 | 
						
						
						
							|  |  |         case homework.homework_detail_manual.comment_status
 | 
						
						
						
							|  |  |           when 1
 | 
						
						
						
							|  |  |             link =  '启动匿评'
 | 
						
						
						
							|  |  |           when 2
 | 
						
						
						
							|  |  |             link =  '关闭匿评'
 | 
						
						
						
							|  |  |           when 3
 | 
						
						
						
							|  |  |             link = " 匿评结束"
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |         link = "提交作业数过少"
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       link = "未开启匿评作业"
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     link
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #获取
 | 
						
						
						
							|  |  |   def get_submit_sutdent_list homework
 | 
						
						
						
							|  |  |     studentlist = []
 | 
						
						
						
							|  |  |     if homework.is_a?(Hash) && homework.key?(:studentlist)
 | 
						
						
						
							|  |  |       studentlist = homework[:studentlist]
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       homework.student_works.order("created_at desc").page(1).per(6).each do |work|
 | 
						
						
						
							|  |  |             studentlist << work.user
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     studentlist
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #计算作业的截止日期,剩余日期
 | 
						
						
						
							|  |  |   def show_homework_deadline homework
 | 
						
						
						
							|  |  |    day = 0
 | 
						
						
						
							|  |  |     if (day = (Date.parse(homework.end_time.to_s) - Date.parse(Time.now.to_s)).to_i) > 0
 | 
						
						
						
							|  |  |       "距作业截止还有" << day.to_s << "天"
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       "已截止,但可补交"
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #获取作业中学生的匿评比率
 | 
						
						
						
							|  |  |   # 匿评比率 = 学生总共评价的作业的作业份数  /  作业份数 * 分配数 * 100%
 | 
						
						
						
							|  |  |   # 教辅匿评比率 = 教辅已经评价的作业份数 / 总的作业份数 * 100%
 | 
						
						
						
							|  |  |   def get_evaluation_part homework,role
 | 
						
						
						
							|  |  |     homework_eva_completed_task_num = 0
 | 
						
						
						
							|  |  |     homework_eva_task_num = 0
 | 
						
						
						
							|  |  |     #匿评作业 # 且匿评状态不是还没有开启匿评
 | 
						
						
						
							|  |  |     if homework.homework_type == 1 && homework.homework_detail_manual &&  homework.homework_detail_manual.comment_status != 1
 | 
						
						
						
							|  |  |       # 总共需要评价的任务数
 | 
						
						
						
							|  |  |       homework_eva_task_num = homework.homework_detail_manual.evaluation_num * homework.student_works.count
 | 
						
						
						
							|  |  |       unless homework_eva_task_num == 0 #总任务数不为0 的情况下
 | 
						
						
						
							|  |  |         #获取已经评价了多少的份作业  student_work_score里记录了评价情况,每条记录有提交作业的id
 | 
						
						
						
							|  |  |         #先求出提交作业的id集合
 | 
						
						
						
							|  |  |         work_ids = "(" + homework.student_works.map(&:id).join(",") + ")"
 | 
						
						
						
							|  |  |         #只要 student_work_score 中的 student_work_id在work_ids集合中,那么久说明这个任务被完成了
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |         sql = "select count(1) from student_works_scores where reviewer_role = #{role} and  student_work_id in #{work_ids} "
 | 
						
						
						
							|  |  |         homework_eva_completed_task_num = ActiveRecord::Base.connection().select_value(sql)
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     if homework_eva_task_num == 0
 | 
						
						
						
							|  |  |       0
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |      ( homework_eva_completed_task_num /  homework_eva_task_num.to_f * 100 ) .round(1)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # 获取当前时间
 | 
						
						
						
							|  |  |   def time_from_now time
 | 
						
						
						
							|  |  |     lastUpdateTime = time.to_i*1000
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     currentTime = Time.now.to_i*1000
 | 
						
						
						
							|  |  |     timePassed = currentTime - lastUpdateTime;
 | 
						
						
						
							|  |  |     timeIntoFormat = 0
 | 
						
						
						
							|  |  |     updateAtValue = ""
 | 
						
						
						
							|  |  |     if timePassed < 0
 | 
						
						
						
							|  |  |         updateAtValue = "时间有问题"
 | 
						
						
						
							|  |  |     elsif timePassed < ONE_MINUTE
 | 
						
						
						
							|  |  |         updateAtValue = "1分钟前"
 | 
						
						
						
							|  |  |     elsif timePassed < ONE_HOUR
 | 
						
						
						
							|  |  |         timeIntoFormat = timePassed / ONE_MINUTE
 | 
						
						
						
							|  |  |         updateAtValue = timeIntoFormat.to_s + "分钟前"
 | 
						
						
						
							|  |  |     elsif (timePassed < ONE_DAY)
 | 
						
						
						
							|  |  |         timeIntoFormat = timePassed / ONE_HOUR
 | 
						
						
						
							|  |  |         updateAtValue = timeIntoFormat.to_s + "小时前"
 | 
						
						
						
							|  |  |     elsif (timePassed < ONE_MONTH)
 | 
						
						
						
							|  |  |         timeIntoFormat = timePassed / ONE_DAY
 | 
						
						
						
							|  |  |         updateAtValue = timeIntoFormat.to_s + "天前"
 | 
						
						
						
							|  |  |     elsif (timePassed < ONE_YEAR)
 | 
						
						
						
							|  |  |         timeIntoFormat = timePassed / ONE_MONTH
 | 
						
						
						
							|  |  |         updateAtValue = timeIntoFormat.to_s + "个月前"
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |         timeIntoFormat = timePassed / ONE_YEAR
 | 
						
						
						
							|  |  |         updateAtValue = timeIntoFormat.to_s + "年前"
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     updateAtValue
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | end |