Browse Source

月排行榜

yangyale 1 year ago
parent
commit
f27a7d691a

+ 14 - 0
src/main/java/com/hy/common/tools/DateTimeUtil.java

@@ -1,6 +1,7 @@
 package com.hy.common.tools;
 
 import java.lang.management.ManagementFactory;
+import java.util.Calendar;
 import java.util.Date;
 
 /**
@@ -40,4 +41,17 @@ public class DateTimeUtil {
         // long sec = diff % nd % nh % nm / ns;
         return day + "天" + hour + "小时" + min + "分钟";
     }
+
+    public static Date getMonthStartDate(Date date) {
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+
+        return calendar.getTime();
+    }
 }

+ 8 - 0
src/main/java/com/hy/modules/bz/mapper/BzGiftRecordMapper.java

@@ -2,6 +2,8 @@ package com.hy.modules.bz.mapper;
 
 import com.hy.modules.bz.webapi.dto.RankingDto;
 import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -30,4 +32,10 @@ public interface BzGiftRecordMapper extends BaseMapper<BzGiftRecord> {
     Map<String,Object> statisticsPayingUsers(BzGiftRecord bzGiftRecord);
 
     List<RankingDto> selectRankingList(@Param("roomId") String roomId,@Param("start") int start,@Param("limit") int limit);
+
+    List<RankingDto> selectRankingListByMonth(@Param("anchorName") String anchorName
+            , @Param("beginTime") Date beginTime
+            , @Param("endTime") Date endTime
+            , @Param("start") int start
+            , @Param("limit") int limit);
 }

+ 20 - 0
src/main/java/com/hy/modules/bz/mapper/xml/BzGiftRecordMapper.xml

@@ -49,6 +49,26 @@
             total_gift_value DESC LIMIT #{start},#{limit}
     </select>
 
+    <select id="selectRankingListMonthly" resultMap="RankingDto">
+        SELECT
+            user_id,
+            user_id AS user_nick_name,
+            SUM( gift_value ) AS total_gift_value
+        FROM
+            bz_gift_record
+        WHERE
+            anchor_name = #{anchorName}
+          AND `status` = 'finished'
+            <![CDATA[
+          AND publish_time >= #{beginTime}
+          AND publish_time < #{endTime}
+          ]]>
+        GROUP BY
+            user_id
+        ORDER BY
+            total_gift_value DESC LIMIT #{start},#{limit}
+    </select>
+
     <select id="selectBzGiftRecordList" parameterType="BzGiftRecord" resultMap="BzGiftRecordResult">
         select `id`,`platform`,`game`,`gift_info`,`gift_count`,`gift_value`,`status`,`mode`,`user_nick_name`,`user_id`,`anchor_code`,`anchor_id`,`anchor_nick_name`,`studio_id`,`room_id`,`publish_time`,`create_time`,`update_time`,`create_by`,`update_by`,`remark` from `bz_gift_record`
         <where>

+ 9 - 0
src/main/java/com/hy/modules/bz/service/IBzGiftRecordService.java

@@ -40,4 +40,13 @@ public interface IBzGiftRecordService extends IService<BzGiftRecord> {
      * @return
      */
     List<RankingDto> rankingList(String roomId, int start, int limit);
+
+    /**
+     * 获取月排行榜
+     * @param anchorName
+     * @param start
+     * @param limit
+     * @return
+     */
+    List<RankingDto> monthlyRankingList(String anchorName, int start, int limit);
 }

+ 13 - 0
src/main/java/com/hy/modules/bz/service/impl/BzGiftRecordServiceImpl.java

@@ -2,14 +2,17 @@ package com.hy.modules.bz.service.impl;
 
 import java.math.BigDecimal;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.hy.common.tools.DateTimeUtil;
 import com.hy.common.web.domain.request.PageDomain;
 import com.hy.modules.bz.webapi.dto.RankingDto;
+import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.stereotype.Service;
 import com.hy.modules.bz.mapper.BzGiftRecordMapper;
 import com.hy.modules.bz.domain.BzGiftRecord;
@@ -56,5 +59,15 @@ public class BzGiftRecordServiceImpl extends ServiceImpl<BzGiftRecordMapper,BzGi
         return baseMapper.selectRankingList(roomId,start,limit);
     }
 
+    @Override
+    public List<RankingDto> monthlyRankingList(String anchorName, int start, int limit) {
+
+        Date now = new Date();
+        Date beginTime = DateTimeUtil.getMonthStartDate(now);
+        Date endTime = DateUtils.addMonths(beginTime,1);
+
+        return baseMapper.selectRankingListByMonth(anchorName,beginTime,endTime,start,limit);
+    }
+
 
 }

+ 5 - 0
src/main/java/com/hy/modules/bz/webapi/dto/RankingFetchDto.java

@@ -20,6 +20,11 @@ public class RankingFetchDto implements Serializable {
      */
     private String cardNo;
 
+    /**
+     * 是否月榜
+     */
+    private boolean monthly;
+
     /**
      * token 必传
      */

+ 14 - 1
src/main/java/com/hy/modules/bz/webapi/service/impl/WebApiServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.hy.common.tools.EncodeUtils;
 import com.hy.modules.bz.domain.BzAnchorStudio;
 import com.hy.modules.bz.domain.BzPlayer;
+import com.hy.modules.bz.exception.BzException;
 import com.hy.modules.bz.service.IBzAnchorStudioService;
 import com.hy.modules.bz.service.IBzGiftRecordService;
 import com.hy.modules.bz.service.IBzPlayerService;
@@ -103,10 +104,22 @@ public class WebApiServiceImpl implements WebApiService {
     @Override
     public List<RankingDto> rankingList(RankingFetchDto fetchDto) {
 
+        BzAnchorStudio anchorStudio = anchorStudioService.getByRoomId(fetchDto.getToken());
+
+        if(null == anchorStudio){
+            throw new BzException(ErrorCode.TOKEN_EXPIRED);
+        }
+
         if(fetchDto.getEndRank() - fetchDto.getStartRank() > 500){
             fetchDto.setEndRank(fetchDto.getStartRank() + 500);
         }
-        List<RankingDto> rankingDtos = giftRecordService.rankingList(fetchDto.getRoomId(),fetchDto.getStartRank(),fetchDto.getEndRank() == 0 ? 20 : fetchDto.getEndRank() - fetchDto.getStartRank() );
+        List<RankingDto> rankingDtos;
+        int limit = fetchDto.getEndRank() == 0 ? 20 : (fetchDto.getEndRank() - fetchDto.getStartRank());
+        if(fetchDto.isMonthly()){
+            rankingDtos = giftRecordService.monthlyRankingList(fetchDto.getCardNo(), fetchDto.getStartRank(), limit);
+        }else {
+            rankingDtos = giftRecordService.rankingList(fetchDto.getRoomId(),fetchDto.getStartRank(),limit);
+        }
 
         if(rankingDtos.isEmpty()){
             return Collections.emptyList();