派生自 projectDept/qhighschool

EricsHu
2022-12-05 068fc7f2e81178e55fa191a13709af64b1a163f6
src/main/java/com/qxueyou/scc/school/service/impl/RankService.java
@@ -33,19 +33,19 @@
//import com.qxueyou.scc.transact.model.TransAccountType;
/**
 * 排名消息发送服务,对应的消息接收服务为 RankMsgReceiveService
 * 排名消息发送服务,对应的消息接收服务为 RankMsgReceiveService
 * 
 * @author 德虎
 * @author 德虎
 * 
 */
@Service
public class RankService implements
      IRankService {
   
   /**排行**/
   /**排行**/
   private static final String RANK = "rank";
   /**日志**/
   /**日志**/
   private final Logger log = LogManager.getLogger("RankService");
   
   @Autowired
@@ -60,11 +60,11 @@
//   @Autowired
//   IMsgVenderService  easemobService;
//   
//   /** 积分账户和佣金账户 */
//   /** 积分账户和佣金账户 */
//   @Autowired
//   ITransAccountService  transAccountService;
//   
//   /**缓存**/
//   /**缓存**/
//   @Autowired
//   ICacheService cacheService;
@@ -170,7 +170,7 @@
   }
   /**
    * 获取最新版本ID
    * 获取最新版本ID
    * @param rankType
    * @param scopeType
    * @param scopeId
@@ -214,19 +214,19 @@
   }
   
   /**
    * 获取用户个人传播大使积分和排名信息
    * 获取用户个人传播大使积分和排名信息
    * 
    * @param userId 用户id
    * @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){
@@ -238,13 +238,13 @@
//      }
      
      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);
@@ -264,13 +264,13 @@
      if(percentages >= 100){
         percentages = 99;
      }
      //获取排名百分比
      //获取排名百分比
      objSchRankHis.setPercentages(new BigDecimal(percentages).setScale(2, BigDecimal.ROUND_HALF_UP));
      return objSchRankHis;
   }
   
   /**
    * 获取排行最新版本
    * 获取排行最新版本
    * 
    * @return
    */
@@ -278,9 +278,9 @@
//      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);
@@ -293,7 +293,7 @@
            this.dao.save(objSchRankVer);
            versionId = objSchRankVer.getVersionId();
         }
         //放入缓存
         //放入缓存
//         cacheService.set("ATS_RANK_VERSION", 60*60*8, versionId);
      }
      
@@ -301,7 +301,7 @@
   }
   
   /**
    * 获取全部人数
    * 获取全部人数
    * 
    * @param versionId
    * @return
@@ -310,11 +310,11 @@
//      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;
@@ -328,14 +328,14 @@
      
      dao.bulkUpdate(hql, new Object[]{total,rankType,userId});
      
      //请求更新排名
      // 1.更新当前班级数据
      //请求更新排名
      // 1.更新当前班级数据
      reqUpdateRank(userId, SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_CLASS, ClientUtils.getClassId());
      
      // 2.更新Q学友数据
      // 2.更新Q学友数据
      reqUpdateRank(userId, SchRank.RANK_TYPE_SCORE, SchRank.SCOPE_TYPE_QXUEYOU, "null");
      
      // 判断是否发送消息
      // 判断是否发送消息
      if(!isSendMsg){
         return;
      }
@@ -343,19 +343,19 @@
      try {
         
         Map<String,String> extra = new HashMap<String,String>();
         extra.put("title", "积分变动");
         extra.put("title", "积分变动");
         extra.put("delta", String.valueOf(delta));
         // 积分不再发系统通知 by cyq 20160823
         // 积分不再发系统通知 by cyq 20160823
         //easemobService.doSendTextMsgToUsers("notice-sys", new String[]{userId}, msg.getContent(), extra);
         
      } catch (Exception e) {
         
         log.error("增加积分推送消息出错:"+e,e);
         log.error("增加积分推送消息出错:"+e,e);
      }
   }
   /**
    * 创建积分消息
    * 创建积分消息
    * @param userId
    * @param delta
    * @param remark
@@ -363,16 +363,16 @@
    *//*
   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.setSender(ClientUtils.getUserName()!=null?ClientUtils.getUserName():"系统管理员");
      msg.setReceiverId(userId);
      msg.setSender(null);
      msg.setContent("增加"+delta+"个积分:"+remark);
      msg.setContent("增加"+delta+"个积分:"+remark);
      
      return msg;
   }*/
@@ -381,8 +381,8 @@
   
   
   /**
    * 请求好友排名
    * @return -1代表还没有名次
    * 请求好友排名
    * @return -1代表还没有名次
    */
   public int getRankInFriend(String userId) {
      String hql = "select his.rank from SchRankHis his,SchRankVer ver " +
@@ -399,7 +399,7 @@
   }
   /**
    * 请求好友排名列表
    * 请求好友排名列表
    * @return
    */
   public List<SchRankHis> getFriendRankLst(String userId, Pager page) {
@@ -414,7 +414,7 @@
   }
   /**
    * 最近num天全站排名状态变化
    * 最近num天全站排名状态变化
    */
   public List<Map<String,Object>> getPersonalQxueyouRankTrend(String userId,Pager page, int num) {
      
@@ -435,7 +435,7 @@
   }
   /**
    * 最近num天好友排名状态变化
    * 最近num天好友排名状态变化
    */
   public List<Map<String,Object>> getPersonalFriendRankTrend(String userId,
         Pager page, int num) {
@@ -460,7 +460,7 @@
   
   
   /**
    * 最近num天班级排名状态变化
    * 最近num天班级排名状态变化
    */
   public List<Map<String,Object>> getPersonalClassRankTrend(String userId,String classId,Pager page,int num) {
      
@@ -481,7 +481,7 @@
   }
   
   /**
    * 组装变化趋势,有一个bug,新登录的用户第一次查看积分,会显示前面四天积分和当前最新积分一致
    * 组装变化趋势,有一个bug,新登录的用户第一次查看积分,会显示前面四天积分和当前最新积分一致
    * @param lstRankHis
    * @param num
    * @param classId
@@ -489,14 +489,14 @@
    */
   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;
@@ -516,13 +516,13 @@
         
      }
      
      //判断,少了需要重新组装
      //判断,少了需要重新组装
      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 ){
@@ -531,10 +531,10 @@
            }
         }
         
         //第二遍组装
         //第二遍组装
         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);
@@ -549,7 +549,7 @@
         
      }else{
         
         //没有的话,直接用当前积分
         //没有的话,直接用当前积分
         Integer iRank = null;
         
         if(SchRank.SCOPE_TYPE_CLASS.equals(scopeType)){
@@ -579,7 +579,7 @@
   }
   
   /**
    * 获取最近N天的每天一个版本,每天获取的一个版本规则为:当天最新的一个版本
    * 获取最近N天的每天一个版本,每天获取的一个版本规则为:当天最新的一个版本
    * @param rankType
    * @param scopeType
    * @param scopeId
@@ -622,7 +622,7 @@
      }
      
      List<String> lstVer = new ArrayList<String>(num);
      //判断是否每天都有一条记录
      //判断是否每天都有一条记录
      for(Object[] obj : lstObj ){
         lstVer.add(String.valueOf(obj[0]));
      }
@@ -631,7 +631,7 @@
   }
   
   /**
    * 得到排名数据(班级、好友、全站)排名 及排名上升下降
    * 得到排名数据(班级、好友、全站)排名 及排名上升下降
    * @return
    */
   public Map<String,Object> getScoreRankPageData(){
@@ -643,20 +643,20 @@
      page.setPageSize(Integer.MAX_VALUE);
      
      
      //1.班级排名及上升
      //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排名及上升
      //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.好友排名及上升
      //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));
@@ -668,7 +668,7 @@
   }
   
   /**
    * 判断改变
    * 判断改变
    * 
    * @param firstRank
    * @param lastestRank