package com.qxueyou.scc.school.service.impl;
|
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Locale;
|
import java.util.Map;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import com.qxueyou.scc.base.dao.CommonDAO;
|
//import com.qxueyou.scc.base.model.ONSMsg;
|
import com.qxueyou.scc.base.model.Pager;
|
import com.qxueyou.scc.base.model.Result;
|
//import com.qxueyou.scc.base.service.ICacheService;
|
//import com.qxueyou.scc.base.service.impl.CommonONSProducer;
|
import com.qxueyou.scc.base.util.ClientUtils;
|
import com.qxueyou.scc.base.util.CollectionUtils;
|
import com.qxueyou.scc.base.util.TraceUtils;
|
//import com.qxueyou.scc.msg.service.IMsgVenderService;
|
import com.qxueyou.scc.school.dao.RankDAO;
|
import com.qxueyou.scc.school.model.SchRank;
|
import com.qxueyou.scc.school.model.SchRankHis;
|
import com.qxueyou.scc.school.model.SchRankVer;
|
import com.qxueyou.scc.school.service.IRankService;
|
//import com.qxueyou.scc.transact.model.TransAccountType;
|
|
/**
|
* 排名消息发送服务,对应的消息接收服务为 RankMsgReceiveService
|
*
|
* @author 德虎
|
*
|
*/
|
@Service
|
public class RankService implements
|
IRankService {
|
|
/**排行**/
|
private static final String RANK = "rank";
|
|
/**日志**/
|
private final Logger log = LogManager.getLogger("RankService");
|
|
@Autowired
|
CommonDAO dao;
|
|
@Autowired
|
RankDAO rankDao;
|
|
// @Autowired
|
// CommonONSProducer onsProducer;
|
//
|
// @Autowired
|
// IMsgVenderService easemobService;
|
//
|
// /** 积分账户和佣金账户 */
|
// @Autowired
|
// ITransAccountService transAccountService;
|
//
|
// /**缓存**/
|
// @Autowired
|
// ICacheService cacheService;
|
|
@Override
|
public Result reqUpdateRankOld(String userId) {
|
|
// ONSMsg msg = new ONSMsg(onsProducer.getTopic());
|
//
|
// msg.put("msgType", "SCH_RANK");
|
// msg.put("userId", userId);
|
//
|
// try {
|
//
|
// onsProducer.sendMsg(msg);
|
//
|
// return new Result(true);
|
//
|
// } catch (Exception e) {
|
// log.error("call rankMsgSendService fail.userId: " + userId, e);
|
// }
|
|
return new Result(false);
|
}
|
|
@Override
|
public Result reqUpdateRank(String userId, String rankType, String scopeType, String scopeId) {
|
|
// ONSMsg msg = new ONSMsg(onsProducer.getTopic());
|
//
|
// msg.put("msgType", "SCH_RANK");
|
// msg.put("userId", userId);
|
// msg.put("rankType", rankType);
|
// msg.put("scopeType", scopeType);
|
// msg.put("scopeId", scopeId);
|
//
|
// try {
|
//
|
// onsProducer.sendMsg(msg);
|
//
|
// return new Result(true);
|
//
|
// } catch (Exception e) {
|
// log.error("call rankMsgSendService fail.userId: " + userId, e);
|
// }
|
|
return new Result(false);
|
}
|
|
@Override
|
public int getRankInScope(String userId, String rankType, String scopeType, String scopeId) {
|
|
String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
|
"where his.versionId=ver.versionId " +
|
"and ver.latest is true " +
|
"and ver.rankType=? " +
|
"and ver.scopeType=? " +
|
"and ver.scopeId=? " +
|
"and his.userId=?";
|
|
Integer rank = dao.findUnique(hql,
|
CollectionUtils.newList(rankType,scopeType,scopeId,userId), Integer.class);
|
|
return rank==null?-1:rank;
|
}
|
|
|
@Override
|
public int getRankInClass(String userId, String classId) {
|
|
String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
|
"where his.versionId=ver.versionId " +
|
"and ver.latest is true " +
|
"and ver.rankType=? " +
|
"and ver.scopeType=? " +
|
"and ver.scopeId=? " +
|
"and his.userId=?";
|
|
Integer rank = dao.findUnique(hql, CollectionUtils.newList(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_CLASS,classId,userId), Integer.class);
|
|
return rank==null?-1:rank;
|
}
|
|
@Override
|
public List<SchRankHis> getClassRankLst(String classId) {
|
|
Pager page = new Pager();
|
page.setPageNum(1);
|
page.setPageSize(200);
|
|
return getClassRankLst(classId,page);
|
}
|
|
@Override
|
public List<SchRankHis> getClassRankLst(String classId,Pager page) {
|
|
String versionId = getLastestVersionId(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_CLASS,classId);
|
|
String hql = "from SchRankHis his where his.versionId=? and his.value is not null order by his.rank";
|
|
List<SchRankHis> result = dao.findList(hql, page, CollectionUtils.newList(versionId), SchRankHis.class);
|
|
return result;
|
}
|
|
/**
|
* 获取最新版本ID
|
* @param rankType
|
* @param scopeType
|
* @param scopeId
|
* @return
|
*/
|
private String getLastestVersionId(String rankType,String scopeType,String scopeId) {
|
String hql = "select ver.versionId from SchRankVer ver where " +
|
"ver.latest is true " +
|
"and ver.rankType=? " +
|
"and ver.scopeType=? " +
|
"and ver.scopeId=? " ;
|
|
return this.dao.findUnique(hql, CollectionUtils.newList(rankType,scopeType,scopeId), String.class);
|
}
|
|
@Override
|
public int getRankInQxueyou(String userId) {
|
|
String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
|
"where his.versionId=ver.versionId " +
|
"and ver.latest is true " +
|
"and ver.rankType=? " +
|
"and ver.scopeType=? "+
|
"and his.userId=?";
|
|
Integer rank = dao.findUnique(hql, CollectionUtils.newList(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_QXUEYOU,userId), Integer.class);
|
|
return rank==null?-1:rank;
|
}
|
|
@Override
|
public List<SchRankHis> getQxueyouTopRankLst() {
|
|
String versionId = getLastestVersionId(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_QXUEYOU,"null");
|
|
String hql = "from SchRankHis his where his.versionId=? order by his.rank";
|
|
List<SchRankHis> result = dao.find(hql, CollectionUtils.newList(versionId), SchRankHis.class);
|
|
return result;
|
}
|
|
/**
|
* 获取用户个人传播大使积分和排名信息
|
*
|
* @param userId 用户id
|
* @return
|
*/
|
@Override
|
public SchRankHis doGetUserRank(String userId) {
|
// //防止重复回调
|
// String ing = cacheService.get("CREAT_ACCOUNT"+userId, String.class);
|
// if(StringUtils.isBlank(ing)){
|
// //放入缓存
|
// cacheService.set("CREAT_ACCOUNT"+userId, 60*60, "ING");
|
// //判断用户是否存在积分和佣金账户,不存在就添加
|
// boolean hasCommission = transAccountService.existsAccount(TransAccountType.ACCOUNT_TYPE_ATS_COMMISSION, userId);
|
// boolean hasScore = transAccountService.existsAccount(TransAccountType.ACCOUNT_TYPE_ATS_SCORE, userId);
|
// if(!hasCommission){
|
// transAccountService.addAccount(TransAccountType.ACCOUNT_TYPE_ATS_COMMISSION, userId);
|
// }
|
// if(!hasScore){
|
// transAccountService.addAccount(TransAccountType.ACCOUNT_TYPE_ATS_SCORE, userId);
|
// }
|
// }
|
|
String versionId = this.getAtsLastVersion();
|
//获取个人排名
|
String hql = "from SchRankHis his where his.versionId=? and his.userId = ? and his.deleteFlag is false";
|
SchRankHis objSchRankHis = dao.findUnique(hql, CollectionUtils.newList(versionId, userId), SchRankHis.class);
|
|
Integer iCount = this.atsUserCount(versionId);
|
if(objSchRankHis == null){
|
//新建排行
|
objSchRankHis = new SchRankHis();
|
TraceUtils.setCreateTrace(objSchRankHis);
|
objSchRankHis.setDeleteFlag(false);
|
objSchRankHis.setUserId(userId);
|
objSchRankHis.setName(ClientUtils.getUserName());
|
objSchRankHis.setRankTime(new Date());
|
objSchRankHis.setRank(iCount+1);
|
objSchRankHis.setValue(BigDecimal.ZERO);
|
objSchRankHis.setVersionId(versionId);
|
this.dao.save(objSchRankHis);
|
iCount++;
|
}
|
int percentages = 100-(iCount == 0?0:objSchRankHis.getRank()*100/iCount);
|
if(percentages <= 0){
|
percentages = 0;
|
}
|
if(percentages >= 100){
|
percentages = 99;
|
}
|
//获取排名百分比
|
objSchRankHis.setPercentages(new BigDecimal(percentages).setScale(2, BigDecimal.ROUND_HALF_UP));
|
return objSchRankHis;
|
}
|
|
/**
|
* 获取排行最新版本
|
*
|
* @return
|
*/
|
private String getAtsLastVersion(){
|
// String versionId = cacheService.get("ATS_RANK_VERSION", String.class);
|
String versionId =null;
|
if(StringUtils.isBlank(versionId)){
|
//获取最新排名版本
|
versionId = getLastestVersionId(SchRank.RANK_TYPE_ATS_SCORE,SchRank.SCOPE_TYPE_QXUEYOU,"null");
|
//新增版本表
|
if(StringUtils.isEmpty(versionId)){
|
SchRankVer objSchRankVer = new SchRankVer();
|
objSchRankVer.setLatest(true);
|
objSchRankVer.setRankType(SchRank.RANK_TYPE_ATS_SCORE);
|
objSchRankVer.setScopeType(SchRank.SCOPE_TYPE_QXUEYOU);
|
objSchRankVer.setScopeId("null");
|
objSchRankVer.setVersionTime(new Date());
|
objSchRankVer.setDeleteFlag(false);
|
TraceUtils.setCreateTrace(objSchRankVer);
|
this.dao.save(objSchRankVer);
|
versionId = objSchRankVer.getVersionId();
|
}
|
//放入缓存
|
// cacheService.set("ATS_RANK_VERSION", 60*60*8, versionId);
|
}
|
|
return versionId;
|
}
|
|
/**
|
* 获取全部人数
|
*
|
* @param versionId
|
* @return
|
*/
|
private Integer atsUserCount(String versionId){
|
// Integer count = cacheService.get("ATS_RANK_USER_COUNT", Integer.class);
|
Integer count =0;
|
if(count == null || count == 0){
|
//获取全站大使人数
|
String hql_count = "from SchRankHis his where his.versionId=? and his.deleteFlag is false";
|
|
count = dao.findCount(hql_count, CollectionUtils.newList(versionId));
|
//放入缓存
|
// cacheService.set("ATS_RANK_USER_COUNT", 60*60*8, count);
|
}
|
return count;
|
}
|
|
@Override
|
public void updateRankValue(String userId, String rankType, BigDecimal delta,
|
BigDecimal total, String remark, boolean isSendMsg) {
|
|
String hql = "update SchRank set value= ? where rankType=? and userId=?";
|
|
dao.bulkUpdate(hql, new Object[]{total,rankType,userId});
|
|
//请求更新排名
|
// 1.更新当前班级数据
|
reqUpdateRank(userId, SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_CLASS, ClientUtils.getClassId());
|
|
// 2.更新Q学友数据
|
reqUpdateRank(userId, SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_QXUEYOU, "null");
|
|
// 判断是否发送消息
|
if(!isSendMsg){
|
return;
|
}
|
|
try {
|
|
Map<String,String> extra = new HashMap<String,String>();
|
extra.put("title", "积分变动");
|
extra.put("delta", String.valueOf(delta));
|
// 积分不再发系统通知 by cyq 20160823
|
//easemobService.doSendTextMsgToUsers("notice-sys", new String[]{userId}, msg.getContent(), extra);
|
|
} catch (Exception e) {
|
|
log.error("增加积分推送消息出错:"+e,e);
|
}
|
}
|
|
/**
|
* 创建积分消息
|
* @param userId
|
* @param delta
|
* @param remark
|
* @return
|
*//*
|
private Message newScoreMsg(String userId, BigDecimal delta, String remark) {
|
|
//新建消息并保存
|
Message msg = new Message();
|
TraceUtils.setCreateTrace(msg);
|
|
msg.setMsgType("SCH_SCORES");
|
msg.setSenderId(ClientUtils.getUserId()!=null?ClientUtils.getUserId():"admin");
|
msg.setSender(ClientUtils.getUserName()!=null?ClientUtils.getUserName():"系统管理员");
|
msg.setReceiverId(userId);
|
msg.setSender(null);
|
msg.setContent("增加"+delta+"个积分:"+remark);
|
|
return msg;
|
}*/
|
|
|
|
|
/**
|
* 请求好友排名
|
* @return -1代表还没有名次
|
*/
|
public int getRankInFriend(String userId) {
|
String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
|
"where his.versionId=ver.versionId " +
|
"and ver.latest is true " +
|
"and ver.rankType = ? " +
|
"and ver.scopeType = ? " +
|
"and ver.scopeId = ? " +
|
"and his.userId = ?";
|
|
Integer rank = dao.findUnique(hql, CollectionUtils.newList(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_FRIEND,userId,userId), Integer.class);
|
|
return rank==null?-1:rank;
|
}
|
|
/**
|
* 请求好友排名列表
|
* @return
|
*/
|
public List<SchRankHis> getFriendRankLst(String userId, Pager page) {
|
|
String versionId = getLastestVersionId(SchRank.RANK_TYPE_SCORE,SchRank.SCOPE_TYPE_FRIEND,userId);
|
|
String hql = "from SchRankHis his where his.versionId=? order by his.rank";
|
|
List<SchRankHis> result = dao.findList(hql, page, CollectionUtils.newList(versionId), SchRankHis.class);
|
|
return result;
|
}
|
|
/**
|
* 最近num天全站排名状态变化
|
*/
|
public List<Map<String,Object>> getPersonalQxueyouRankTrend(String userId,Pager page, int num) {
|
|
List<SchRankHis> lstRankHis = new ArrayList<SchRankHis>();
|
List<String> versionId = this.getLastestNumVersionId(SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_QXUEYOU, null , num);
|
|
if(!versionId.isEmpty()){
|
String hql = "from SchRankHis his where his.versionId in (:versionId) and his.userId = :userId order by his.rankTime asc ";
|
|
Map<String,Object> argsMap = new HashMap<String,Object>();
|
argsMap.put("versionId", versionId);
|
argsMap.put("userId", ClientUtils.getUserId());
|
|
lstRankHis = this.dao.findByComplexHql(hql, page, argsMap, SchRankHis.class);
|
}
|
|
return this.generatePersonalRankTrend(lstRankHis,num ,SchRank.SCOPE_TYPE_QXUEYOU,null,userId);
|
}
|
|
/**
|
* 最近num天好友排名状态变化
|
*/
|
public List<Map<String,Object>> getPersonalFriendRankTrend(String userId,
|
Pager page, int num) {
|
|
List<SchRankHis> lstRankHis = new ArrayList<SchRankHis>();
|
List<String> versionId = this.getLastestNumVersionId(SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_FRIEND, userId , num);
|
|
if(!versionId.isEmpty()){
|
String hql = "from SchRankHis his where his.versionId in (:versionId) and his.userId = :userId order by his.rankTime asc ";
|
|
Map<String,Object> argsMap = new HashMap<String,Object>();
|
argsMap.put("versionId", versionId);
|
argsMap.put("userId", ClientUtils.getUserId());
|
|
lstRankHis = this.dao.findByComplexHql(hql, page, argsMap, SchRankHis.class);
|
}
|
|
|
|
return this.generatePersonalRankTrend(lstRankHis,num ,SchRank.SCOPE_TYPE_FRIEND,null,userId);
|
}
|
|
|
/**
|
* 最近num天班级排名状态变化
|
*/
|
public List<Map<String,Object>> getPersonalClassRankTrend(String userId,String classId,Pager page,int num) {
|
|
List<SchRankHis> lstRankHis = new ArrayList<SchRankHis>();
|
List<String> versionId = this.getLastestNumVersionId(SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_CLASS, classId , num);
|
|
if(!versionId.isEmpty()){
|
String hql = "from SchRankHis his where his.versionId in (:versionId) and his.userId = :userId order by his.rankTime asc ";
|
|
Map<String,Object> argsMap = new HashMap<String,Object>();
|
argsMap.put("versionId", versionId);
|
argsMap.put("userId", userId);
|
|
lstRankHis = this.dao.findByComplexHql(hql, page, argsMap, SchRankHis.class);
|
}
|
|
return this.generatePersonalRankTrend(lstRankHis,num ,SchRank.SCOPE_TYPE_CLASS,classId,userId);
|
}
|
|
/**
|
* 组装变化趋势,有一个bug,新登录的用户第一次查看积分,会显示前面四天积分和当前最新积分一致
|
* @param lstRankHis
|
* @param num
|
* @param classId
|
* @return
|
*/
|
private List<Map<String,Object>> generatePersonalRankTrend(List<SchRankHis> lstRankHis,int num ,String scopeType,String scopeId,String userId ){
|
|
// 取得每天的最后一个版本,查询排名表数据
|
List<Map<String,Object>> result = new ArrayList<Map<String,Object>>(lstRankHis.size());
|
Map<Integer,Integer> mapIndex = new HashMap<Integer,Integer>();
|
SimpleDateFormat weekFm = new SimpleDateFormat("EEEE", Locale.CHINA);
|
//SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd");
|
Map<String,Object> map;
|
|
// 将本来有的排名抽取组装
|
if(!lstRankHis.isEmpty()){
|
|
int index = 0;
|
for(SchRankHis rank : lstRankHis){
|
if( (System.currentTimeMillis() / (1000 * 60 * 60 * 24) - rank.getRankTime().getTime() / (1000 * 60 * 60 * 24 )) < num ){
|
index = num - (int)(System.currentTimeMillis()/(1000 * 60 * 60 * 24) - rank.getRankTime().getTime() / (1000 * 60 * 60 * 24)) ;
|
map = new HashMap<String,Object>();
|
map.put("index", index );
|
map.put(RANK, rank.getRank());
|
map.put("rankTime", rank.getRankTime().getTime());
|
map.put("rankWeek", weekFm.format(rank.getRankTime()));
|
//map.put("rankDate", dateFm.format(rank.getRankTime()));
|
result.add(map);
|
mapIndex.put(index,rank.getRank());
|
}
|
}
|
|
}
|
|
//判断,少了需要重新组装
|
long startTime = System.currentTimeMillis() - ((long)num) * 24 * 60 * 60 * 1000 ;
|
if( !result.isEmpty() && result.size() < num ){
|
Integer iRank = null;
|
long lTime = 0 ;
|
|
//第一遍取最新排名
|
for(int i = result.size() -1 ; i >= 0 ; i--){
|
if(null != result.get(i) && StringUtils.isNotBlank(String.valueOf(result.get(i).get("rankTime")))
|
&& Long.parseLong(String.valueOf(result.get(i).get("rankTime"))) > lTime ){
|
lTime = Long.parseLong(String.valueOf(result.get(i).get("rankTime"))) ;
|
iRank = Integer.parseInt(String.valueOf(result.get(i).get(RANK))) ;
|
}
|
}
|
|
//第二遍组装
|
for(int i = num ; i > 0 ; i--){
|
if(!mapIndex.containsKey(i)){
|
//如果没有,统一以后面的排名为准
|
iRank = i == num ? iRank : mapIndex.get(i+1);
|
map = new HashMap<String,Object>();
|
map.put("index", i);
|
map.put(RANK, iRank);
|
map.put("rankTime", startTime + ((long)i) * 24 * 60 * 60 * 1000 );
|
map.put("rankWeek", weekFm.format(startTime + ((long)i) * 24 * 60 * 60 * 1000));
|
//map.put("rankDate", dateFm.format(startTime + ((long)i) * 24 * 60 * 60 * 1000));
|
result.add(map);
|
mapIndex.put(i,iRank);
|
}
|
}
|
|
}else{
|
|
//没有的话,直接用当前积分
|
Integer iRank = null;
|
|
if(SchRank.SCOPE_TYPE_CLASS.equals(scopeType)){
|
iRank = this.getRankInClass(userId, scopeId);
|
}
|
if(SchRank.SCOPE_TYPE_QXUEYOU.equals(scopeType)){
|
iRank = this.getRankInQxueyou(userId);
|
}
|
if(SchRank.SCOPE_TYPE_FRIEND.equals(scopeType)){
|
iRank = this.getRankInFriend(userId);
|
}
|
|
String strRank = iRank > 0 ? String.valueOf(iRank) : "--" ;
|
|
for(int i = 1 ; i <= num ; i++ ){
|
map = new HashMap<String,Object>();
|
map.put("index", i);
|
map.put(RANK, strRank);
|
map.put("rankTime", startTime + ((long)i) * 24 * 60 * 60 * 1000 );
|
map.put("rankWeek", weekFm.format(startTime + ((long)i) * 24 * 60 * 60 * 1000 ));
|
result.add(map);
|
}
|
|
}
|
|
return result ;
|
}
|
|
/**
|
* 获取最近N天的每天一个版本,每天获取的一个版本规则为:当天最新的一个版本
|
* @param rankType
|
* @param scopeType
|
* @param scopeId
|
* @return
|
*/
|
private List<String> getLastestNumVersionId(String rankType,String scopeType,String scopeId,int num) {
|
|
Pager page = new Pager();
|
page.setPageNum(1);
|
page.setPageSize(num);
|
|
String plusSQL = "";
|
if(StringUtils.isNotBlank(scopeId)){
|
plusSQL = " AND SCOPE_ID = :scopeId ";
|
}
|
|
String sql = "SELECT " +
|
"VID,VER,VTIME " +
|
"FROM " +
|
"( " +
|
"SELECT DISTINCT VERSION_ID VID, VERSION_TIME VTIME,VERSION VER " +
|
"FROM SCH_RANK_VER WHERE RANK_TYPE = :randType AND SCOPE_TYPE = :scopeType " +
|
plusSQL +
|
" ORDER BY VERSION DESC " +
|
") V GROUP BY DATE(VTIME) ORDER BY V.VER DESC ";
|
|
|
Map<String, Object> argsHWMap = new HashMap<String, Object>();
|
argsHWMap.put("randType", rankType);
|
argsHWMap.put("scopeType", scopeType);
|
|
if(StringUtils.isNotBlank(scopeId)){
|
argsHWMap.put("scopeId", scopeId);
|
}
|
|
List<Object[]> lstObj = this.dao.findByComplexSql(sql, page, argsHWMap, Object[].class);
|
|
if(lstObj.isEmpty()){
|
return new ArrayList<String>();
|
}
|
|
List<String> lstVer = new ArrayList<String>(num);
|
//判断是否每天都有一条记录
|
for(Object[] obj : lstObj ){
|
lstVer.add(String.valueOf(obj[0]));
|
}
|
|
return lstVer;
|
}
|
|
/**
|
* 得到排名数据(班级、好友、全站)排名 及排名上升下降
|
* @return
|
*/
|
public Map<String,Object> getScoreRankPageData(){
|
|
Map<String,Object> result = new HashMap<String,Object>();
|
|
Pager page = new Pager();
|
page.setPageNum(1);
|
page.setPageSize(Integer.MAX_VALUE);
|
|
|
//1.班级排名及上升
|
List<Map<String,Object>> lstClass = this.getPersonalClassRankTrend(ClientUtils.getUserId(), ClientUtils.getClassId(), page, 2);
|
String firstClassRank = String.valueOf(lstClass.get(0).get(RANK));
|
String lastestClassRank = String.valueOf(lstClass.get(1).get(RANK));
|
|
this.getChange(result, firstClassRank, lastestClassRank, "class");
|
|
//2.qxueyou排名及上升
|
List<Map<String,Object>> lstQxueyou = this.getPersonalQxueyouRankTrend(ClientUtils.getUserId(), page, 2);
|
String firstQxueyouRank = String.valueOf(lstQxueyou.get(0).get(RANK));
|
String lastestQxueyouRank = String.valueOf(lstQxueyou.get(1).get(RANK));
|
|
this.getChange(result, firstQxueyouRank, lastestQxueyouRank, "qxueyou");
|
//3.好友排名及上升
|
List<Map<String,Object>> lstFriend = this.getPersonalFriendRankTrend(ClientUtils.getUserId(), page, 2);
|
String firstFriendRank = String.valueOf(lstFriend.get(0).get(RANK));
|
String lastestFriendRank = String.valueOf(lstFriend.get(1).get(RANK));
|
|
this.getChange(result, firstFriendRank, lastestFriendRank, "friend");
|
|
return result;
|
|
}
|
|
/**
|
* 判断改变
|
*
|
* @param firstRank
|
* @param lastestRank
|
* @param type
|
* @return
|
*/
|
private Map<String,Object> getChange(Map<String,Object> result, String firstRank, String lastestRank, String type){
|
if(!"--".equals(lastestRank)){
|
result.put(type+"Rank", lastestRank);
|
if(!"--".equals(firstRank)){
|
int first = Integer.parseInt(firstRank) ;
|
int last = Integer.parseInt(lastestRank);
|
|
result.put(type+"ChangeNum", last > first ? last - first : first - last );
|
result.put(type+"ChangeUp", last > first ? true : false );
|
}else{
|
result.put(type+"ChangeNum", "" );
|
result.put(type+"ChangeUp", false );
|
}
|
}else{
|
result.put(type+"Rank", "--");
|
result.put(type+"ChangeNum", "" );
|
result.put(type+"ChangeUp", false );
|
}
|
|
return result;
|
}
|
|
}
|