update
This commit is contained in:
parent
2fb56e814a
commit
f87771e3ee
|
|
@ -22,9 +22,15 @@ gem "builder", "3.0.0"
|
|||
gem 'acts-as-taggable-on', '2.4.1'
|
||||
gem 'sunspot_rails', '2.2.0'
|
||||
gem 'sunspot_solr', '2.2.0'
|
||||
gem 'will_paginate'
|
||||
gem 'will_paginate', '~> 3.0'
|
||||
gem 'progress_bar'
|
||||
gem 'nokogiri', "~> 1.6.0"
|
||||
|
||||
gem 'ox' # For faster XML Parsing, use Ox or Nokogiri. Ox has highest priority if available.
|
||||
#gem 'nokogiri' # For faster XML Parsing. If neither Ox nor Nokogiri available, we'll fall back to REXML.
|
||||
gem 'httpclient' # Absolutely necessary for soap4r-ng. Net::HTTP Fallback is quite broken, so don't let that happen.
|
||||
gem 'soap4r-ng'
|
||||
|
||||
# Gems used only for assets and not required
|
||||
# in production environments by default.
|
||||
group :assets do
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -144,6 +144,8 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
#将搜索关键词中的程序语言相关词分离出来
|
||||
def getSearchWords(key_words)
|
||||
language_array = ["java","c++","ruby","php"," c ","c#","vb "," vb","delphi","asp "," asp"]
|
||||
|
|
@ -169,6 +171,9 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
|
||||
def search
|
||||
require 'logger'
|
||||
logger = Logger.new(STDOUT) #输出到控制台
|
||||
|
||||
if params[:name].nil? || params[:name] == ""
|
||||
respond_to do |format|
|
||||
format.html { redirect_to open_source_projects_url }
|
||||
|
|
@ -188,33 +193,69 @@ class OpenSourceProjectsController < ApplicationController
|
|||
language = ''
|
||||
language << @language
|
||||
#search_words << ' ' + @language if @language
|
||||
|
||||
# 请求starlee服务
|
||||
# require 'net/http'
|
||||
#
|
||||
# star_projects = []
|
||||
# parse_string = "http://172.16.128.35:5000/correlation_search?q=" + @name
|
||||
#
|
||||
# # parse_string = "http://172.20.10.3:5000/correlation_search?q=" + @name
|
||||
# parse_string.gsub! " ","%20"
|
||||
|
||||
|
||||
#access java webservice by zyr
|
||||
oldverb = $VERBOSE; $VERBOSE = nil
|
||||
require 'iconv'
|
||||
$VERBOSE = oldverb
|
||||
|
||||
require 'rubygems'
|
||||
require 'soap/wsdlDriver'
|
||||
|
||||
a_URL = "http://localhost:8083/testWebService_war/services/solrquery?wsdl"
|
||||
soap_client = SOAP::WSDLDriverFactory.new(a_URL).create_rpc_driver
|
||||
|
||||
#params = {:arg0 => "rails"}
|
||||
result = soap_client.query(@name)
|
||||
#logger.info(result)
|
||||
return_projects = []
|
||||
#project_ids = [770839,3674257,139,15397,98681,209133,770319,770675,770684,770839,907638,988140,1032900,1032911,1116837,1185243,1185345]
|
||||
|
||||
result.each do |id|
|
||||
id = id.to_i
|
||||
project = OpenSourceProject.find_by_id(id)
|
||||
return_projects << project
|
||||
end
|
||||
|
||||
require 'will_paginate/array'
|
||||
|
||||
per_page_option = 10
|
||||
@projects_count = return_projects.length.to_i
|
||||
@projects_pages = Paginator.new @projects_count, per_page_option, params['page'] #custom paginator,to show the 10 records the default paginator of solr gets
|
||||
|
||||
logger.info(@projects_pages.page)
|
||||
current_page = @projects_pages.page
|
||||
@open_source_projects = return_projects[(current_page-1)*per_page_option,per_page_option]
|
||||
respond_to do |format|
|
||||
format.html { render :layout => "base" }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# 请求solr单机服务
|
||||
#require 'net/http'
|
||||
|
||||
# parse_string = "http://localhost:8080/solr/production1/select?q=" + @name
|
||||
# #parse_string.gsub! " ","%20"
|
||||
# url = URI.parse(parse_string)
|
||||
# req = Net::HTTP::Get.new(url.to_s)
|
||||
# res = Net::HTTP.start(url.host, url.port) {|http|
|
||||
# http.request(req)
|
||||
# http.request(req)
|
||||
# }
|
||||
# star_items = res.body
|
||||
# return_items = res.body
|
||||
# #logger.info(return_items)
|
||||
# require 'json'
|
||||
# star_items = JSON.parse(star_items)["items"]
|
||||
# star_project_ids = star_items[0,5]
|
||||
# star_projects = []
|
||||
# # 查询出id对应的项目
|
||||
# star_project_ids.each do |id|
|
||||
# id = id.to_i
|
||||
# project = OpenSourceProject.find_by_id(id)
|
||||
# star_projects << project
|
||||
# end
|
||||
|
||||
# return_items = JSON.parse(star_items)["items"]
|
||||
#_projects = []
|
||||
# 查询出id对应的项目
|
||||
|
||||
|
||||
|
||||
#合成solr请求
|
||||
=begin
|
||||
search = OpenSourceProject.search do
|
||||
without(:filtration,0)
|
||||
# with(:created_time, Date.new(params[:created_time].to_i, 01, 01)..Date.new(params[:created_time].to_i+1, 01, 01)) if params[:created_time].present? && !('earlier'.eql? params[:created_time])
|
||||
|
|
@ -238,56 +279,27 @@ class OpenSourceProjectsController < ApplicationController
|
|||
boost_fields :description => 0.5
|
||||
boost_fields :language => 1.0
|
||||
#boost(function { log(sum(:composite_score, 1))^2000 })
|
||||
boost(function { log(:composite_score)^1000 })
|
||||
end
|
||||
boost(function { log(:composite_score)^1000 })
|
||||
end
|
||||
end
|
||||
=end
|
||||
#adjust_solr_params do |params|
|
||||
# params[:q] += " AND something_s:more"
|
||||
#end
|
||||
#order_by_function(:sum, :view_num_ossean, [:product, :composite_score, '0.01'], :desc)
|
||||
if "".eql?(search_words)
|
||||
order_by(:composite_score, :desc)
|
||||
else
|
||||
order_by(:score, :desc)
|
||||
end
|
||||
paginate :page => params[:page], :per_page => 10 # the default paginator of solr,10 records for each page
|
||||
end
|
||||
per_page_option = 10
|
||||
@hits = search.hits
|
||||
@open_source_projects = search.results
|
||||
@projects_count = search.total #get total count of search
|
||||
|
||||
#合并 star_projects和solr_projects
|
||||
open_source_projects_index = 0
|
||||
# while open_source_projects_index<@open_source_projects.length do
|
||||
# project = @open_source_projects[open_source_projects_index]
|
||||
# id = project.id
|
||||
# star_projects.each do |star_project|
|
||||
# if id.to_i == star_project.id
|
||||
# @open_source_projects.delete(project)
|
||||
# open_source_projects_index -= 1
|
||||
# break
|
||||
# end
|
||||
# end
|
||||
# open_source_projects_index += 1
|
||||
# if "".eql?(search_words)
|
||||
# order_by(:composite_score, :desc)
|
||||
# else
|
||||
# order_by(:score, :desc)
|
||||
# end
|
||||
# paginate :page => params[:page], :per_page => 10 # the default paginator of solr,10 records for each page
|
||||
# end
|
||||
|
||||
#
|
||||
# if params[:page]==nil || params[:page]==1
|
||||
# star_index = star_projects.length-1
|
||||
# while star_index >= 0 do
|
||||
# star_project = star_projects[star_index]
|
||||
# @open_source_projects.unshift(star_project)
|
||||
# star_index -= 1
|
||||
# end
|
||||
# end
|
||||
@projects_pages = Paginator.new @projects_count, per_page_option, params['page'] #custom paginator,to show the 10 records the default paginator of solr gets
|
||||
|
||||
respond_to do |format|
|
||||
format.html { render :layout => "base" }
|
||||
end
|
||||
end
|
||||
end
|
||||
# per_page_option = 10
|
||||
# @hits = search.hits
|
||||
# @open_source_projects = search.results
|
||||
# @projects_count = search.total #get total count of search
|
||||
|
||||
|
||||
|
||||
def showbug
|
||||
@open_source_project = OpenSourceProject.find(params[:id])
|
||||
|
|
@ -450,19 +462,19 @@ class OpenSourceProjectsController < ApplicationController
|
|||
redirect_to master_apply_open_source_project_path
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#echarts表的ajax函数
|
||||
def ajax
|
||||
name = params[:name]
|
||||
osp = OpenSourceProject.find(:first, :select => 'id', :conditions => ['name=?',name])
|
||||
id = osp.id
|
||||
|
||||
|
||||
respond_to do |format|
|
||||
format.json {render :json => {:osp_id => id}}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def require_master
|
||||
|
|
@ -475,7 +487,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
rescue ActiveRecord::RecordNotFound
|
||||
render_404 unless @open_source_project.present?
|
||||
end
|
||||
|
||||
|
||||
#分页查找项目关联的不同类型帖子
|
||||
def find_relative_topics(memo_type, sort_by)
|
||||
#approach 1
|
||||
|
|
@ -491,36 +503,36 @@ class OpenSourceProjectsController < ApplicationController
|
|||
@topics_pages = Paginator.new @topics_count, per_page_option, params['page']
|
||||
@relative_memo_ids=RelativeMemoToOpenSourceProject.where(osp_id: @open_source_project.id, memo_type: memo_type).order(sort_by).offset(@topics_pages.offset).limit(@topics_pages.per_page)
|
||||
end
|
||||
|
||||
|
||||
#get memos' info by memo_type
|
||||
def get_memos_info_by_type memo_type, osp_id, rmtosp_name, size
|
||||
memos = RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.* FROM #{rmtosp_name} mt" +
|
||||
memos = RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.* FROM #{rmtosp_name} mt" +
|
||||
" INNER JOIN relative_memos r ON mt.relative_memo_id = r.id" +
|
||||
" WHERE mt.osp_id = #{osp_id} AND r.memo_type = 'news' ORDER BY r.created_time DESC LIMIT #{size} "]
|
||||
end
|
||||
|
||||
|
||||
#get memos' count by memo_type
|
||||
def get_memos_count_by_type memo_type, osp_id, rmtosp_name, size
|
||||
memos_count = (RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.id FROM #{rmtosp_name} mt" +
|
||||
memos_count = (RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.id FROM #{rmtosp_name} mt" +
|
||||
" INNER JOIN relative_memos r ON mt.relative_memo_id = r.id" +
|
||||
" WHERE mt.osp_id = #{osp_id} AND r.memo_type = #{memo_type}"]).count
|
||||
return memos_count
|
||||
return memos_count
|
||||
end
|
||||
# find relative_topics of osp order by
|
||||
def find_osp_relative_topics
|
||||
|
||||
size = 5
|
||||
|
||||
#rmtosp_name = RelativeMemoToOpenSourceProject.getTableName @open_source_project.id
|
||||
#rmtosp_name = RelativeMemoToOpenSourceProject.getTableName @open_source_project.id
|
||||
RelativeMemoToOpenSourceProject.set_table_name RelativeMemoToOpenSourceProject.getTableName @open_source_project.id
|
||||
#@relative_memo_ids=RelativeMemoToOpenSourceProject.includes(:relative_memos).where(osp_id: @open_source_project.id).order('match_weight DESC').limit(10)#.pluck(:relative_memo_id)
|
||||
|
||||
|
||||
#@news = get_memos_info_by_type "'news'", @open_source_project.id, rmtosp_name, size
|
||||
#@news_count = get_memos_count_by_type "'news'", @open_source_project.id, rmtosp_name, size
|
||||
# @news = RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.* FROM #{rmtosp_name} mt" +
|
||||
# @news = RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.* FROM #{rmtosp_name} mt" +
|
||||
# " INNER JOIN relative_memos r ON mt.relative_memo_id = r.id" +
|
||||
# " WHERE mt.osp_id = #{@open_source_project.id} AND r.type = 'news' ORDER BY r.created_time DESC LIMIT #{size} "]
|
||||
# @news_count = (RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.id FROM #{rmtosp_name} mt" +
|
||||
# @news_count = (RelativeMemoToOpenSourceProject.find_by_sql ["SELECT r.id FROM #{rmtosp_name} mt" +
|
||||
# " INNER JOIN relative_memos r ON mt.relative_memo_id = r.id" +
|
||||
# " WHERE mt.osp_id = #{@open_source_project.id} AND r.type = 'news'"]).count
|
||||
@news = RelativeMemoToOpenSourceProject.includes(:relative_memos).where(osp_id: @open_source_project.id, memo_type: 'news').order('created_time DESC').limit(size)
|
||||
|
|
@ -528,12 +540,12 @@ class OpenSourceProjectsController < ApplicationController
|
|||
|
||||
#@blogs = get_memos_info_by_type "'blog'", @open_source_project.id, rmtosp_name, size
|
||||
#@blogs_count = get_memos_count_by_type "'blog'", @open_source_project.id, rmtosp_name, size
|
||||
|
||||
|
||||
#@posts = get_memos_info_by_type "'topic'", @open_source_project.id, rmtosp_name, size
|
||||
#@posts_count = get_memos_count_by_type "'topic'", @open_source_project.id, rmtosp_name, size
|
||||
@blogs = RelativeMemoToOpenSourceProject.includes(:relative_memos).where(osp_id: @open_source_project.id, memo_type: 'blog').order('created_time DESC').limit(size)
|
||||
@blogs_count = RelativeMemoToOpenSourceProject.includes(:relative_memos).where(osp_id: @open_source_project.id, memo_type: 'blog').count
|
||||
#
|
||||
#
|
||||
@posts = RelativeMemoToOpenSourceProject.includes(:relative_memos).where(osp_id: @open_source_project.id, memo_type: 'topic').order('created_time DESC').limit(size)
|
||||
@posts_count = RelativeMemoToOpenSourceProject.includes(:relative_memos).where(osp_id: @open_source_project.id, memo_type: 'topic').count
|
||||
|
||||
|
|
@ -541,10 +553,10 @@ class OpenSourceProjectsController < ApplicationController
|
|||
#@tech_trend_topics_ids=RelativeMemoToOpenSourceProject.where(osp_id: @open_source_project.id, memo_type: 'news').order('created_time DESC, match_weight DESC, review_num DESC').limit(7) #.pluck(:relative_memo_id)
|
||||
#@tech_trend_topics=RelativeMemo.where(id: @tech_trend_topics_ids).order('review_num DESC')
|
||||
end
|
||||
|
||||
|
||||
#用于在每个项目详情页面上显示对应职位工资信息表而定义的函数(查询数据库中的数据)
|
||||
def getHighcharts
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
|
@ -557,26 +569,26 @@ class OpenSourceProjectsController < ApplicationController
|
|||
idArray = []
|
||||
desArray=[]
|
||||
tmp_result = []
|
||||
|
||||
|
||||
# 用于存储相似项目的id
|
||||
relativeIdList = []
|
||||
unrelativeIdList = []
|
||||
|
||||
|
||||
if flag == "simility"
|
||||
# 首先查看一下simility_recommend_up_down中有没有排名在前size位的 且up_down_value值大于0的数据
|
||||
similityList = SimilityRecommendUpDown.select("relative_osp_id").where("osp_id=? and up_down_value > ?", id,0).order("up_down_value desc, last_up_time desc").limit(size)
|
||||
# 查看up_down_value值<0的记录 去除掉这些推荐记录
|
||||
unsimilityList = SimilityRecommendUpDown.select("relative_osp_id").where("osp_id=? and up_down_value < ?", id,0)
|
||||
# 将similityList结果中relative_id存储到relativeIdList数组中
|
||||
|
||||
|
||||
similityList.each do |s|
|
||||
relativeIdList << s.relative_osp_id.to_i
|
||||
end
|
||||
|
||||
|
||||
unsimilityList.each do |s|
|
||||
unrelativeIdList << s.relative_osp_id.to_i
|
||||
end
|
||||
|
||||
|
||||
# 表示推荐数量不够5个 应该再从simility_recommend表中取出size-similityList.length个相似推荐结果
|
||||
size2 = size - similityList.length
|
||||
if size2 == 0
|
||||
|
|
@ -605,13 +617,13 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
end #do结尾
|
||||
end
|
||||
|
||||
|
||||
#根据relativeIdList构造tmp_result
|
||||
relativeIdList.each do |relative_id|
|
||||
result = SimilityRecommend.where("osp_id=? and relative_osp_id = ?", id, relative_id).limit(1)
|
||||
tmp_result << result[0]
|
||||
end
|
||||
|
||||
|
||||
elsif flag == "relation"
|
||||
tmp_result = RelationRecommend.select("relative_osp_id , weight").where("osp_id=? and weight != ?",id,1.0).limit(size)
|
||||
end
|
||||
|
|
@ -671,7 +683,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
jobRequirement_count = JobRequirement.find_by_sql("select count(*) as num from job_requirements where id in (" + str_in + ") and year(created_time)=" + i.to_s + " and month(created_time)=" + j.to_s)
|
||||
count = jobRequirement_count[0].num.to_i
|
||||
countArray << count
|
||||
|
||||
|
||||
#薪资情况
|
||||
highcharts_avg_min_max_salary = Highchart.find(:first, :select => 'avg(min_salary) as avg_min_salary, avg(max_salary) as avg_max_salary', :conditions => ['year(jr.created_time)=? and month(jr.created_time)=? and hi.osp_id=?',i.to_s,j.to_s,id.to_s],
|
||||
:joins => 'as hi inner join job_requirements as jr on hi.relative_memo_id=jr.id')
|
||||
|
|
@ -713,17 +725,17 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return dataArray,data2Array,data3Array
|
||||
end
|
||||
|
||||
|
||||
#定义第二个图的函数(根据项目获取每个地区职位需求和薪资情况)参数为osp对应的id
|
||||
def chart2(id)
|
||||
dataArray = []
|
||||
cityArray = []
|
||||
countArray_city = []
|
||||
countSum = 0
|
||||
|
||||
rangeArray = []#第二个图表的返回值
|
||||
|
||||
rangeArray = []#第二个图表的返回值
|
||||
cityResultArray = []
|
||||
highcharts_city_count = Highchart.find(:all, :select => 'city,count(*) as num', :conditions => ['osp_id=? and city is not null',id],
|
||||
highcharts_city_count = Highchart.find(:all, :select => 'city,count(*) as num', :conditions => ['osp_id=? and city is not null',id],
|
||||
:group => 'city', :order => 'num desc')
|
||||
if highcharts_city_count.length == 0
|
||||
return nil
|
||||
|
|
@ -735,7 +747,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
cityArray << city
|
||||
countArray_city << count
|
||||
end
|
||||
|
||||
|
||||
#计算所有百分比大于等于5%的
|
||||
sumRate = 0.0
|
||||
for i in (0..cityArray.length - 1)
|
||||
|
|
@ -746,7 +758,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
sumRate = sumRate + rate
|
||||
data = [city,rate]
|
||||
dataArray << data
|
||||
|
||||
|
||||
#第二张图表
|
||||
cityResultArray << city
|
||||
highchart_avg_min_max_salary = Highchart.find(:first,:select => 'avg(min_salary) as avg_min_salary, avg(max_salary) as avg_max_salary', :conditions => ['city=? and osp_id=?',city,id])
|
||||
|
|
@ -760,7 +772,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
otherRate = 100 - sumRate
|
||||
data = ['其他',otherRate]
|
||||
dataArray << data
|
||||
|
||||
|
||||
#第二张图表
|
||||
str_in = changeStrArrayToStringSplitByComma(cityResultArray)
|
||||
if str_in == ""
|
||||
|
|
@ -775,7 +787,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return dataArray,cityResultArray,rangeArray
|
||||
end
|
||||
|
||||
|
||||
#定义当前项目工作经验需求对比分析 饼图
|
||||
def chart5(id)
|
||||
dataArray = []
|
||||
|
|
@ -783,7 +795,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
countArray = []
|
||||
rangeArray = []#记录平均最小、最大工资范围
|
||||
#查找experience字段
|
||||
highcharts_experience_count = Highchart.find(:all, :select => 'experience,count(*) as num', :conditions => ['osp_id=? and experience!=?',id,''],
|
||||
highcharts_experience_count = Highchart.find(:all, :select => 'experience,count(*) as num', :conditions => ['osp_id=? and experience!=?',id,''],
|
||||
:group => 'experience', :order => 'num desc')
|
||||
if highcharts_experience_count.length == 0
|
||||
dataArray = nil
|
||||
|
|
@ -803,10 +815,10 @@ class OpenSourceProjectsController < ApplicationController
|
|||
data = [experience, rate]
|
||||
dataArray << data
|
||||
end
|
||||
|
||||
|
||||
#查找当前项目和experience对应的avg_salary_min/max
|
||||
experienceArray.each do |e|
|
||||
|
||||
|
||||
highchart_avg_min_max_salary = Highchart.find(:first, :select => 'avg(min_salary) as avg_min_salary, avg(max_salary) as avg_max_salary', :conditions => ['osp_id=? and experience=?',id,e])
|
||||
avg_min_salary = highchart_avg_min_max_salary.avg_min_salary.to_i
|
||||
avg_max_salary = highchart_avg_min_max_salary.avg_max_salary.to_i
|
||||
|
|
@ -816,15 +828,15 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return dataArray,experienceArray,rangeArray
|
||||
end
|
||||
|
||||
|
||||
#绘制当前开源软件与相似开源软件职位需求数量对比柱状图
|
||||
def chart7(simility_osp_array,id)
|
||||
|
||||
|
||||
jobRequirements_osp = [] #记录用于显示的6个开源软件对象
|
||||
jobRequirements_count = []
|
||||
jobRequirements_drilldown_city = []
|
||||
jobRequirements_drilldown_count = []
|
||||
|
||||
|
||||
#查找当前id对应的项目
|
||||
osp_current = OpenSourceProject.find(id)
|
||||
#找相似软件中最热的5个软件
|
||||
|
|
@ -838,7 +850,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
jobRequirements_count << countItems_simility #将相似软件的结果存储到结果数组中
|
||||
jobRequirements_osp << osp
|
||||
end
|
||||
|
||||
|
||||
#查找每个软件对应6个城市的职位需求情况-drilldown
|
||||
hotOsps.each do |osp|
|
||||
#首先查找当前软件的热门城市和对应的职位需求数量
|
||||
|
|
@ -846,19 +858,19 @@ class OpenSourceProjectsController < ApplicationController
|
|||
jobRequirements_drilldown_city << jobRequirements_drilldown_city_tmp
|
||||
jobRequirements_drilldown_count << jobRequirements_drilldown_count_tmp
|
||||
end
|
||||
|
||||
|
||||
return jobRequirements_osp,jobRequirements_count,jobRequirements_drilldown_city,jobRequirements_drilldown_count
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
#绘制当前开源软件与相似开源软件薪资对比柱状图
|
||||
def chart8(simility_osp_array,id)
|
||||
|
||||
|
||||
salary_osp = [] #记录用于显示的6个开源软件对象
|
||||
salary_value = []
|
||||
salary_drilldown_city = []
|
||||
salary_drilldown_value = []
|
||||
|
||||
|
||||
#查找当前id对应的项目
|
||||
osp_current = OpenSourceProject.find(id)
|
||||
#找相似软件中最热的5个软件
|
||||
|
|
@ -874,7 +886,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
salary_value << avg_salary #将相似软件的结果存储到结果数组中
|
||||
salary_osp << osp
|
||||
end
|
||||
|
||||
|
||||
#查找每个软件对应6个城市的职位需求情况-drilldown
|
||||
hotOsps.each do |osp|
|
||||
#首先查找当前软件的热门城市和对应的薪资情况
|
||||
|
|
@ -882,12 +894,12 @@ class OpenSourceProjectsController < ApplicationController
|
|||
salary_drilldown_city << salary_drilldown_city_tmp
|
||||
salary_drilldown_value << salary_drilldown_value_tmp
|
||||
end
|
||||
|
||||
|
||||
return salary_osp,salary_value,salary_drilldown_city,salary_drilldown_value
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
#将查询结果拼成(1,2,3)的形式
|
||||
def changeResultsToStringSplitByComma(array)
|
||||
result = ""
|
||||
|
|
@ -902,7 +914,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
#将字符串数组变成1,2,3的形式
|
||||
def changeStrArrayToStringSplitByComma(array)
|
||||
result = ''
|
||||
|
|
@ -917,14 +929,14 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
#对datetime类型日期分离 年、月、日
|
||||
def splitDate(time)
|
||||
timeArray = time.to_s.split(' ')
|
||||
date = timeArray[0].split('-')
|
||||
return date[0],date[1],date[2]
|
||||
end
|
||||
|
||||
|
||||
#按年月时间将统计数据合并
|
||||
def mergeByYearAndMonth(yearArray, monthArray, countArray)
|
||||
i = 0
|
||||
|
|
@ -942,10 +954,10 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
|
||||
return yearArray,monthArray,countArray
|
||||
end
|
||||
|
||||
|
||||
#计算数组中所有值的和
|
||||
def sum(array)
|
||||
result = 0
|
||||
|
|
@ -954,7 +966,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
#找到软件数组中对应的n个热门软件
|
||||
def hottestN_osp(array, n)
|
||||
result = [] #用来存储最热门的n个软件
|
||||
|
|
@ -985,7 +997,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
#查找开源软件对应的热门的N个城市 和对应的职位需求数量
|
||||
def hottestN_cityAndCount_by_osp(osp,n)
|
||||
city = [] #记录排名靠前的n个
|
||||
|
|
@ -1018,8 +1030,8 @@ class OpenSourceProjectsController < ApplicationController
|
|||
end
|
||||
return city,count
|
||||
end # hottestN_cityAndCount_by_osp函数结尾
|
||||
|
||||
|
||||
|
||||
|
||||
#查找开源软件对应的热门的N个城市 和对应的平均薪资
|
||||
def hottestN_cityAndSalary_by_osp(osp,n)
|
||||
city = [] #记录排名靠前的n个
|
||||
|
|
@ -1051,7 +1063,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
city = city[0,n]
|
||||
count = count[0,n]
|
||||
end
|
||||
|
||||
|
||||
#根据city数组中的数据查找对应的avg_salary
|
||||
city.each do |c|
|
||||
highchart_avg_salary = Highchart.find(:first, :select => "avg(max_salary) as max, avg(min_salary) as min", :conditions => ['osp_id=? and city=?',osp.id,c])
|
||||
|
|
@ -1060,7 +1072,7 @@ class OpenSourceProjectsController < ApplicationController
|
|||
avg_salary_tmp = (avg_max_salary+avg_min_salary)/2
|
||||
avg_salary << avg_salary_tmp
|
||||
end
|
||||
|
||||
|
||||
return city,avg_salary
|
||||
end # hottestN_cityAndSalary_by_osp函数结尾
|
||||
|
||||
|
|
|
|||
|
|
@ -153,25 +153,79 @@ class RelativeMemosController < ApplicationController
|
|||
if "".eql?(params[:name]) || params[:name].nil?
|
||||
params[:name] = " "
|
||||
end
|
||||
|
||||
#请求服务
|
||||
require 'net/http'
|
||||
require 'json'
|
||||
require 'logger'
|
||||
logger = Logger.new(STDOUT) #输出到控制台
|
||||
per_page_option=10
|
||||
@sort_tag = params[:sort_field].to_s
|
||||
search = RelativeMemo.search do
|
||||
fulltext params[:name].downcase do
|
||||
fields(:title)
|
||||
fields(:tags)
|
||||
boost_fields :title => 3.0
|
||||
boost_fields :tags => 2.0
|
||||
#phrase_fields :title => 2.0
|
||||
end
|
||||
if "review_num DESC".eql?(params[:sort_field].to_s)
|
||||
order_by(:review_num, :desc)
|
||||
elsif "review_num ASC".eql?(params[:sort_field].to_s)
|
||||
order_by(:review_num, :asc)
|
||||
elsif "created_time DESC".eql?(params[:sort_field].to_s)
|
||||
order_by(:created_time, :desc)
|
||||
elsif "created_time ASC".eql?(params[:sort_field].to_s)
|
||||
order_by(:created_time, :asc)
|
||||
end
|
||||
@name = params[:name].downcase
|
||||
|
||||
#access java webservice by zyr
|
||||
oldverb = $VERBOSE; $VERBOSE = nil
|
||||
require 'iconv'
|
||||
$VERBOSE = oldverb
|
||||
|
||||
require 'rubygems'
|
||||
require 'soap/wsdlDriver'
|
||||
|
||||
a_URL = "http://localhost:8083/testWebService_war/services/memoquery?wsdl"
|
||||
soap_client = SOAP::WSDLDriverFactory.new(a_URL).create_rpc_driver
|
||||
|
||||
result = soap_client.query(@name)
|
||||
#memo_ids = [58,79,98,2207482,2207571,2207591,2207657,2207710,2208867,2209348,2209667,2209694,2210046]
|
||||
#logger.info(result)
|
||||
return_memos = []#
|
||||
|
||||
result.each do |id|
|
||||
id = id.to_i
|
||||
memo = RelativeMemo.find_by_id(id)
|
||||
return_memos << memo
|
||||
end
|
||||
|
||||
@topics_count = return_memos.length.to_i
|
||||
@topics_pages = Paginator.new @topics_count, per_page_option, params[:page]
|
||||
current_page = @topics_pages.page
|
||||
@topics = return_memos[(current_page-1)*per_page_option,per_page_option]
|
||||
|
||||
respond_to do |format|
|
||||
format.html { render :layout => "base"
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
#
|
||||
# memo_ids = [58,79,98,2207482,2207571,2207591,2207657,2207710,2208867,2209348,2209667,2209694,2210046]
|
||||
# relative_memos = []
|
||||
# # 查询出id对应的项目
|
||||
# memo_ids.each do |id|
|
||||
# id = id.to_i
|
||||
# memo = RelativeMemo.find_by_id(id)
|
||||
# logger.info(memo.title)
|
||||
#
|
||||
# relative_memos << memo
|
||||
# end
|
||||
#search = RelativeMemo.search do
|
||||
# fulltext params[:name].downcase do
|
||||
# fields(:title)
|
||||
# fields(:tags)
|
||||
# boost_fields :title => 3.0
|
||||
# boost_fields :tags => 2.0
|
||||
# #phrase_fields :title => 2.0
|
||||
# end
|
||||
# if "review_num DESC".eql?(params[:sort_field].to_s)
|
||||
# order_by(:review_num, :desc)
|
||||
# elsif "review_num ASC".eql?(params[:sort_field].to_s)
|
||||
# order_by(:review_num, :asc)
|
||||
# elsif "created_time DESC".eql?(params[:sort_field].to_s)
|
||||
# order_by(:created_time, :desc)
|
||||
# elsif "created_time ASC".eql?(params[:sort_field].to_s)
|
||||
# order_by(:created_time, :asc)
|
||||
# end
|
||||
|
||||
#order_by(:created_time, :desc)
|
||||
#with(:created_time, Date.new(year,01,01)..Date.new(year+1,01,01))
|
||||
|
|
@ -180,17 +234,9 @@ class RelativeMemosController < ApplicationController
|
|||
# # with :parent_id, nil
|
||||
# with :source, params[:name].downcase
|
||||
# end
|
||||
paginate :page => params[:page], :per_page => per_page_option
|
||||
end
|
||||
@topics = search.results
|
||||
|
||||
@topics_count = search.total
|
||||
@topics_pages = Paginator.new @topics_count, per_page_option, params[:page]
|
||||
respond_to do |format|
|
||||
format.html { render :layout => "base"
|
||||
}
|
||||
end
|
||||
end
|
||||
#paginate :page => params[:page], :per_page => per_page_option
|
||||
#end
|
||||
#@topics = search.results
|
||||
|
||||
private
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -323,6 +323,7 @@
|
|||
<%= pagination_links_full @projects_pages, @projects_count %>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<% html_title('项目搜索') -%>
|
||||
|
||||
<!-- ajax user trace zhangxunhui begin -->
|
||||
|
|
|
|||
Loading…
Reference in New Issue