Browse Source

作者:张哲
时间:2023/03/21
类型:开发
描述:里程碑(3)专辑统计接口开发-访问量统计

zizg 2 năm trước cách đây
mục cha
commit
57325aaa8f

+ 15 - 5
src/main/java/com/redxun/knowledge/analysis/controller/AnalysisCommonController.java

@@ -2,10 +2,8 @@ package com.redxun.knowledge.analysis.controller;
 
 import com.redxun.common.annotation.ClassDefine;
 import com.redxun.common.base.entity.JsonResult;
-import com.redxun.knowledge.analysis.entity.vo.KnowledgeCategoryVo;
-import com.redxun.knowledge.analysis.entity.vo.KnowledgeCompanyVo;
-import com.redxun.knowledge.analysis.entity.vo.SearchParticipleWordCloudVo;
-import com.redxun.knowledge.analysis.entity.vo.SearchVisitHistogramVo;
+import com.redxun.knowledge.analysis.entity.vo.*;
+import com.redxun.knowledge.analysis.service.AnalysisAlbumServiceImpl;
 import com.redxun.knowledge.analysis.service.AnalysisCommonServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -39,6 +37,9 @@ public class AnalysisCommonController {
     @Autowired
     private AnalysisCommonServiceImpl analysisCommonService;
 
+    @Autowired
+    private AnalysisAlbumServiceImpl analysisAlbumService;
+
     @ApiOperation("PC 各模块整体数量统计")
     @GetMapping("totalAmount")
     public JsonResult totalAmount() {
@@ -94,7 +95,16 @@ public class AnalysisCommonController {
     @ApiOperation("专辑创建总量")
     @GetMapping("albumAmount")
     public JsonResult albumAmount(@RequestParam("type") String type){
-        Map<String ,Object> result = analysisCommonService.albumAmount(type);
+        Map<String ,Object> result = analysisAlbumService.albumAmount(type);
+        return JsonResult.getSuccessResult(result);
+    }
+
+    @ApiOperation("专辑详情Top访问量(pv)统计")
+    @GetMapping("albumDetailVisits")
+    public JsonResult albumDetailVisits(@RequestParam("type") String type,
+                                        @RequestParam(value = "tops",required = false,defaultValue = "10") Integer tops){
+        List<AlbumDetailVisitsVo> result = analysisAlbumService.albumDetailVisits(type,tops);
         return JsonResult.getSuccessResult(result);
+
     }
 }

+ 30 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/AlbumDetailVisitsVo.java

@@ -0,0 +1,30 @@
+package com.redxun.knowledge.analysis.entity.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文件名: AlbumDetailVisitsVo
+ * 作者: zizg
+ * 时间: 2023/3/21
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@ApiModel("专辑详情Top访问量(pv)统计Vo")
+@Data
+public class AlbumDetailVisitsVo implements Serializable {
+
+    @ApiModelProperty("名称")
+    private String name;
+
+    @ApiModelProperty("访问数量")
+    private Integer value;
+
+    @ApiModelProperty("占比")
+    private Double percentage;
+}

+ 0 - 1
src/main/java/com/redxun/knowledge/analysis/entity/vo/KnowledgeCompanyVo.java

@@ -2,7 +2,6 @@ package com.redxun.knowledge.analysis.entity.vo;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.io.Serializable;

+ 0 - 2
src/main/java/com/redxun/knowledge/analysis/mapper/AnalysisCommonMapper.java

@@ -2,12 +2,10 @@ package com.redxun.knowledge.analysis.mapper;
 
 
 import com.redxun.knowledge.analysis.entity.vo.SearchParticipleWordCloudVo;
-import io.swagger.annotations.ApiImplicitParams;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 文件名: CommonMapper

+ 9 - 0
src/main/java/com/redxun/knowledge/analysis/mapper/PvLogMapper.java

@@ -3,6 +3,7 @@ package com.redxun.knowledge.analysis.mapper;
 
 import com.redxun.common.base.db.BaseDao;
 import com.redxun.knowledge.analysis.entity.dao.PvLog;
+import com.redxun.knowledge.analysis.entity.vo.AlbumDetailVisitsVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -33,4 +34,12 @@ public interface PvLogMapper extends BaseDao<PvLog> {
     Integer selectSearchVisitHistogramByMonth(@Param("firstOfMonth") String firstOfMonth,
                                               @Param("lastOfMonth") String lastOfMonth,
                                               @Param("platform") String platform);
+
+    /**
+     * 专辑详情Top访问量(pv)统计
+     * @param firstDay
+     * @param lastDay
+     * @return
+     */
+    List<AlbumDetailVisitsVo> albumDetailVisits(@Param("firstDay") String firstDay,@Param("lastDay") String lastDay);
 }

+ 77 - 0
src/main/java/com/redxun/knowledge/analysis/service/AnalysisAlbumServiceImpl.java

@@ -0,0 +1,77 @@
+package com.redxun.knowledge.analysis.service;
+
+
+import com.redxun.knowledge.analysis.entity.vo.AlbumDetailVisitsVo;
+import com.redxun.knowledge.analysis.mapper.PvLogMapper;
+import com.redxun.knowledge.utils.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 文件名: AnalysisAlbumServiceImpl
+ * 作者: zizg
+ * 时间: 2023/3/21
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Service
+@Slf4j
+public class AnalysisAlbumServiceImpl {
+
+    @Autowired
+    private PvLogMapper pvLogMapper;
+
+    /**
+     * 专辑创建总量
+     * @param type
+     * @return
+     */
+    public Map<String, Object> albumAmount(String type) {
+        return null;
+    }
+
+    /**
+     * 专辑详情Top访问量(pv)统计
+     * @param type
+     * @return
+     */
+    public List<AlbumDetailVisitsVo> albumDetailVisits(String type, Integer tops) {
+        List<AlbumDetailVisitsVo> result = new ArrayList<>();
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+        if (("total").equals(type)){
+             result = pvLogMapper.albumDetailVisits(null,null);
+        } else if ("year".equals(type)){
+             result = pvLogMapper.albumDetailVisits(DateUtils.format(DateUtils.getFirstOfYear(year)),
+                     DateUtils.format(DateUtils.getLastOfYear(year)));
+        } else if ("month".equals(type)){
+            int month = calendar.get(Calendar.MONTH);
+            String firstOfMonth = DateUtils.getFirstOfMonth(year, month + 1, 15);
+            String lastOfMonth = DateUtils.getLastOfMonth(year, month + 1, 15);
+            result = pvLogMapper.albumDetailVisits(firstOfMonth,lastOfMonth);
+        }
+        //取tops10
+        result = result.stream().limit(tops).collect(Collectors.toList());
+        int countSum = result.stream().mapToInt(AlbumDetailVisitsVo::getValue).sum();
+        //计算百分比
+        if (countSum != 0){
+            result.forEach(e -> {
+                BigDecimal countbg = BigDecimal.valueOf(e.getValue() / (double) countSum);
+                e.setPercentage(countbg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+            });
+        }
+        return result;
+    }
+
+
+}

+ 2 - 11
src/main/java/com/redxun/knowledge/analysis/service/AnalysisCommonServiceImpl.java

@@ -8,7 +8,8 @@ import com.redxun.knowledge.analysis.mapper.PvLogMapper;
 import com.redxun.knowledge.common.UserService;
 import com.redxun.knowledge.mapper.KnowledgeCategoryMapper;
 import com.redxun.knowledge.utils.DateUtils;
-import groovy.util.logging.Slf4j;
+
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -294,14 +295,4 @@ public class AnalysisCommonServiceImpl {
         List<KnowledgeCompanyVo> resultTop = result.stream().limit(tops).collect(Collectors.toList());
         return resultTop;
     }
-
-    /**
-     * 专辑创建总量
-     *
-     * @param type
-     * @return
-     */
-    public Map<String, Object> albumAmount(String type) {
-        return null;
-    }
 }

+ 10 - 0
src/main/resources/mapper/knowledge/analysis/PvLogMapper.xml

@@ -69,6 +69,16 @@
         </where>
     </select>
 
+    <select id="albumDetailVisits" resultType="com.redxun.knowledge.analysis.entity.vo.AlbumDetailVisitsVo">
+        select USSD,count(*) as value,ai.NAME as name
+        from KM_PV_LOG pl
+        join KM_ALBUM_INFO ai
+        on USSD = ai.PK_ID and ai.IS_DEL = 0
+        where MODULE = '知识专辑' and SUB_MODULE = '详情'
+        group by USSD,ai.NAME
+        order by value desc
+    </select>
+
 </mapper>