You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
6.2 KiB
231 lines
6.2 KiB
6 years ago
|
#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
|