web作业是在线书城,之前由于时间匆忙就随便做了一个,后来想慢慢把功能写全。利用redis的zset把排行榜这块做完了。
界面大体是这个样子。因为前段的样式css不会太会,就把之前项目的样式拿过来
现
左侧的排行榜是根据用户提交订单是进行添加的。假如《我和你》在提交两本书籍,截图如下(左图为效果显示,右图为redis数据库里的数据):
效果就显而易见了。
下面看代码:
两个主要算法:
//传进来购买的数量,添加到排行榜
public void addSaleCount(Order order){
int num =Integer.parseInt(order.getOrderNum()) ;
jedisClientSingleService.zincrby("bookSaleNum:", num, order.getBookName()+"/"+order.getBookId());
}
public List<Map<String,String>> rankingList() {
final int ARTICLES_PER_PAGE = 10;
int page = 1;
//根据投票数
String bookSaleNum ="bookSaleNum:";
//根据发起时间
int start = (page - 1) * ARTICLES_PER_PAGE;
int end = start + ARTICLES_PER_PAGE - 1;
Set<String> values = jedisClientSingleService.zrevrange(bookSaleNum, start, end);
List<Map<String,String>> articles = new ArrayList<Map<String,String>>();
for (String value : values){
Map<String,String> bookData = jedisClientSingleService.hgetAll(value);
Double score =jedisClientSingleService.zscore(bookSaleNum, value) ;
bookData.put("value", value);
bookData.put("score", score.toString()) ;
articles.add(bookData);
}
return articles;
}
在对应的controller调用这些方法就可以了,因为前台要用到书籍的id,因此我把zset的id设置成书籍名+“/”+书籍id。
前台js代码:
function getRankingList(){
$.ajax({
url:'book/rankingList',
type:'POST',
dataType:'json',
success:function(data){
console.log(data);
initRankinglist(data);
}
});
}
拼写html
function initRankinglist(list){
for ( var i=0;i<list.length;i++){
var arr= new Array();
var arr2 = new Array() ;
arr =list[i].value.split("/");
var saleNum = list[i].score ;
arr2 = saleNum.split(".") ;
var str='<div class="shuming">' ;
str += '<a href="javascript:void(0);"
οnclick="show('+'\''+arr[1]+'\''+ ')">'+arr[0]+'('+arr2[0]+'册)'+'
</a><a href="#" target="_blank"></a></br>' ;
str += '</div>' ;
$('#rankList').append(str) ;
}
}
就这样功能基本就完成了。
欢迎骚扰