#coding=utf-8 # require 'net/http' require 'uri' class ReviewService @review_server_url = EduSetting.find_by_name('review_server_url').try(:value) def self.logger @logger ||= Logger.new(File.join(Rails.root, "log", "review.log"), 'daily') end def self.root_url @review_server_url.presence || 'http://10.9.79.221:80' end def self.postForm(action, map) Rails.logger.info("##################------action: #{action}") Rails.logger.info("##################------action: #{map}") begin uri = URI.parse("#{root_url}/api/v1/#{action}") Rails.logger.info "请求url: #{uri}" Rails.logger.info "参数: " map.each do |k, v| Rails.logger.info "#{k}=>#{v}" end res = Net::HTTP.post_form uri, map body = res.body Rails.logger.info("返回: #{body}") content = JSON.parse(body) content rescue => e Rails.logger.error("post #{action}: exception #{e.message}") end end def self.postJson(action, params) begin uri = URI.parse("#{root_url}/api/v1/#{action}") https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = root_url.start_with?('https') req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8'}) req.body = params.to_json res = https.request(req) body = res.body logger.info("--uri_exec: .....res is #{body}") content = JSON.parse(body) raise content["msg"] if content["code"] != 0 content["data"] rescue Exception => e logger.error("--uri_exec: exception #{e.message}") end end class CheckResponse attr_accessor :status, :msg, :query_id def initialize(status, msg, query_id) @status = status @msg = msg @query_id = query_id end end #查重 # 参数说明 # user_list [ # { # user_id: 1, # code_info: [ # { # "path": "src/step1/HelloWorld.java", # "content: "ADAGWDSSAS22", # "passed_time": "2016-01-08 00:00:00" # }, # ] # }, # ] # # 返回说明 # # { # code: 0, 0 成功,其他失败 # msg: '', //失败时的错误消息 # query_id: '123123123', //本次查重的查询号 # } # # def self.check(user_list = [], language='java') File.open("/tmp/check_codes_#{Time.now}.json", 'w+') do |f| f.write(user_list.to_json) end data = postForm('check_codes', {user_data: user_list.to_json, language: language}) if data.nil? return CheckResponse.new(-1, "系统调用出错", "") end Rails.logger.info("@@@@@@@@@@@@@@@@------------#{data}") CheckResponse.new(data["status"], data["msg"], data["query_id"]) end class QueryResultResponse UserList = Struct.new(:user_id, :target_user_id, :origin_path, :target_path, :rate) attr_accessor :status, :msg, :user_lists def initialize(status, msg, user_lists) @status, @msg, @user_lists = status, msg, [] if user_lists.present? user_lists.each do |info| user = find_by_user_id_and_origin_path(info["user_id"], info["path"]["origin"]) if !user.present? add_user_list(info) elsif user.rate < info["rate"] set_user_list(user, info) end end end end def set_user_list(user, obj) user.user_id = obj["user_id"] user.target_user_id = obj["target_user_id"] user.origin_path = obj["path"]["origin"] user.target_path = obj["path"]["target"] user.rate = obj["rate"] end def add_user_list(obj) user_list = UserList.new set_user_list(user_list, obj) @user_lists << user_list end def find_by_user_id_and_origin_path(user_id, origin_path) self.user_lists.each do |user| return user if user.user_id == user_id and user.origin_path == origin_path end nil end end class QueryDetailResultResponse CodeInfo = Struct.new(:origin_path, :target_path, :origin_content, :target_content, :target_user_id, :rate) attr_accessor :status, :msg, :code_info def initialize(status, msg, code_info) @status, @msg, @code_info = status, msg, [] if code_info.present? code_info.each do |code| info = find_by_path(code["path"]["origin"]) if !info.present? add_code_info(code) elsif info.rate < code["rate"] set_code_info(info, code) end end end end def set_code_info(info, obj) info.origin_path = obj["path"]["origin"] info.target_path = obj["path"]["target"] info.origin_content = obj["content"]["origin"] info.target_content = obj["content"]["target"] info.target_user_id = obj["target_user_id"] info.rate = obj["rate"] end def add_code_info(obj) info = CodeInfo.new set_code_info(info, obj) @code_info << info end def find_by_path(path) self.code_info.each do |code_info| return code_info if code_info.origin_path == path end nil end end #查询查重的结果 # # 输入参数 # query_id 待查询的ID # user_id 传入则查详情 # # 文档参考 https://www.showdoc.cc/127895880302646?page_id=1271144663669096 # def self.query_result(opt = {}) unless opt[:query_id].present? logger.error "query_id没有传" return end if opt[:user_id].present? data = postForm('check_info', query_id: opt[:query_id], user_id: opt[:user_id]) if data.nil? return QueryDetailResultResponse.new(-1, "系统调用出错", []) end response = QueryDetailResultResponse.new(data['status'], data['msg'], data["code_info"]) return response else data = postForm('check_lists', query_id: opt[:query_id]) if data.nil? return CheckResponse.new(-1, "系统调用出错", "") end response = QueryResultResponse.new(data['status'], data['msg'], data["user_lists"]) return response end end end