浏览代码

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

zizg 2 年之前
父节点
当前提交
71df208b7d

+ 11 - 1
src/main/java/com/redxun/knowledge/analysis/controller/AnalysisCommonController.java

@@ -110,8 +110,18 @@ public class AnalysisCommonController {
     @ApiOperation("各一级分类专辑创建数量")
     @GetMapping("level1AlbumHistogram")
     public JsonResult level1AlbumHistogram(@RequestParam("type") String type,
-                                           @RequestParam("sort") String sort){
+                                           @RequestParam(value = "sort",required = false) String sort){
         List<AlbumCategoryVo> result = analysisAlbumService.level1AlbumHistogram(type,sort);
         return JsonResult.getSuccessResult(result);
     }
+
+    @ApiOperation("组织创建和访问专辑数量")
+    @GetMapping("organizationAlbums")
+    public JsonResult organizationAlbums(@RequestParam("type") String type,
+                                         @RequestParam(value = "tops",required = false,defaultValue = "10") Integer tops,
+                                         @RequestParam(value = "sort",required = false) String sort){
+        List<AlbumCompanyVo> result = analysisAlbumService.organizationAlbums(type,tops,sort);
+        return JsonResult.getSuccessResult(result);
+
+    }
 }

+ 30 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/AlbumCompanyVo.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;
+
+/**
+ * 文件名: KnowledgeCompanyVo
+ * 作者: zizg
+ * 时间: 2023/3/21
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@ApiModel("组织创建专辑数量Vo")
+@Data
+public class AlbumCompanyVo implements Serializable {
+
+    @ApiModelProperty("公司名称")
+    private String company;
+
+    @ApiModelProperty("专辑创建总量")
+    private Integer album;
+
+    @ApiModelProperty("专辑访问总量")
+    private Integer pv;
+}

+ 27 - 0
src/main/java/com/redxun/knowledge/analysis/mapper/AnalysisAlbumMapper.java

@@ -1,7 +1,9 @@
 package com.redxun.knowledge.analysis.mapper;
 
 
+import com.redxun.knowledge.analysis.entity.vo.AlbumCompanyVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -23,4 +25,29 @@ public interface AnalysisAlbumMapper {
      */
     List<String> selectCategory();
 
+    /**
+     * 获取全部专辑数据(根据分类id)
+     * @param categoryId
+     * @param firstDay
+     * @param lastDay
+     * @return
+     */
+    Integer selectAlbumId(@Param("categoryId") String categoryId, @Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
+
+    /**
+     * 获取全部知识数据(根据分类id)
+     * @param categoryId
+     * @param firstDay
+     * @param lastDay
+     * @return
+     */
+    Integer selectKnowledge(@Param("categoryId") String categoryId, @Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
+
+    /**
+     * 获取组织下创建专辑数量和访问数量
+     * @param firstDay
+     * @param lastDay
+     * @return
+     */
+    List<AlbumCompanyVo> organizationAlbums(@Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
 }

+ 110 - 13
src/main/java/com/redxun/knowledge/analysis/service/AnalysisAlbumServiceImpl.java

@@ -1,20 +1,21 @@
 package com.redxun.knowledge.analysis.service;
 
 
+import com.redxun.common.tool.StringUtils;
+import com.redxun.knowledge.album.mapper.AlbumCategoryMapper;
 import com.redxun.knowledge.analysis.entity.vo.AlbumCategoryVo;
+import com.redxun.knowledge.analysis.entity.vo.AlbumCompanyVo;
 import com.redxun.knowledge.analysis.entity.vo.AlbumDetailVisitsVo;
 import com.redxun.knowledge.analysis.mapper.AnalysisAlbumMapper;
 import com.redxun.knowledge.analysis.mapper.PvLogMapper;
+import com.redxun.knowledge.common.UserService;
 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.*;
 import java.util.stream.Collectors;
 
 /**
@@ -36,8 +37,15 @@ public class AnalysisAlbumServiceImpl {
     @Autowired
     private AnalysisAlbumMapper analysisAlbumMapper;
 
+    @Autowired
+    private AlbumCategoryMapper albumCategoryMapper;
+
+    @Autowired
+    private UserService userService;
+
     /**
      * 专辑创建总量
+     *
      * @param type
      * @return
      */
@@ -47,6 +55,7 @@ public class AnalysisAlbumServiceImpl {
 
     /**
      * 专辑详情Top访问量(pv)统计
+     *
      * @param type
      * @return
      */
@@ -54,22 +63,22 @@ public class AnalysisAlbumServiceImpl {
         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)){
+        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);
+            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){
+        if (countSum != 0) {
             result.forEach(e -> {
                 BigDecimal countbg = BigDecimal.valueOf(e.getValue() / (double) countSum);
                 e.setPercentage(countbg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
@@ -81,14 +90,102 @@ public class AnalysisAlbumServiceImpl {
 
     /**
      * 各一级分类专辑创建数量
+     *
      * @param type
      * @param sort
      * @return
      */
     public List<AlbumCategoryVo> level1AlbumHistogram(String type, String sort) {
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
         //获取全部一级分类id
         List<String> albumCategoryIdList = analysisAlbumMapper.selectCategory();
+        List<AlbumCategoryVo> result = albumCategoryIdList.stream().map(categoryId -> {
+            Integer albumIdList = 0;
+            Integer knowledgeList = 0;
+            AlbumCategoryVo albumCategoryVo = new AlbumCategoryVo();
+            if (("total").equals(type)) {
+                //根据分类Id查询其下所有专辑Id数量
+                albumIdList = analysisAlbumMapper.selectAlbumId(categoryId, null, null);
+                knowledgeList = analysisAlbumMapper.selectKnowledge(categoryId, null, null);
+            } else if (("year").equals(type)) {
+                //根据分类Id查询其下所有专辑Id(按年统计)
+                albumIdList = analysisAlbumMapper.selectAlbumId(categoryId, DateUtils.format(DateUtils.getFirstOfYear(year)),
+                        DateUtils.format(DateUtils.getLastOfYear(year)));
+                knowledgeList = analysisAlbumMapper.selectKnowledge(categoryId, DateUtils.format(DateUtils.getFirstOfYear(year)),
+                        DateUtils.format(DateUtils.getLastOfYear(year)));
+            } else if (("month").equals(type)) {
+                //根据分类Id查询其下所有专辑Id(按月统计)
+                int month = calendar.get(Calendar.MONTH);
+                String firstOfMonth = DateUtils.getFirstOfMonth(year, month + 1, 15);
+                String lastOfMonth = DateUtils.getLastOfMonth(year, month + 1, 15);
+                albumIdList = analysisAlbumMapper.selectAlbumId(categoryId, firstOfMonth, lastOfMonth);
+                knowledgeList = analysisAlbumMapper.selectKnowledge(categoryId, firstOfMonth, lastOfMonth);
+            }
+            albumCategoryVo.setLabel(albumCategoryMapper.selectById(categoryId).getName());
+            albumCategoryVo.setAlbum(albumIdList);
+            albumCategoryVo.setKnowledge(knowledgeList);
+            return albumCategoryVo;
+        }).collect(Collectors.toList());
+        //排序
+        if (StringUtils.isEmpty(sort)) {
+            result = result.stream().
+                    sorted(Comparator.comparingInt(AlbumCategoryVo::getKnowledge).thenComparingInt(AlbumCategoryVo::getAlbum).reversed()).
+                    collect(Collectors.toList());
+        } else {
+            if ("albumDesc".equals(sort)) {
+                result = result.stream().sorted((t1, t2) -> t2.getAlbum().compareTo(t1.getAlbum())).collect(Collectors.toList());
+            } else {
+                result = result.stream().sorted((t1, t2) -> t2.getKnowledge().compareTo(t1.getKnowledge())).collect(Collectors.toList());
+            }
+        }
+        return result;
+    }
 
-        return null;
+    /**
+     * 组织创建和访问专辑数量
+     *
+     * @param type
+     * @param tops
+     * @param sort
+     * @return
+     */
+    public List<AlbumCompanyVo> organizationAlbums(String type, Integer tops, String sort) {
+        //创建过专辑的公司Id集合
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+        List<AlbumCompanyVo> result = new ArrayList<>();
+        if ("total".equals(type)) {
+            result = analysisAlbumMapper.organizationAlbums(null, null);
+        } else if ("year".equals(type)) {
+            result = analysisAlbumMapper.organizationAlbums(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 = analysisAlbumMapper.organizationAlbums(firstOfMonth, lastOfMonth);
+        }
+        //排序
+        if (sort != null) {
+            switch (sort) {
+                case "albumDesc":
+                    result = result.stream().sorted((t1, t2) -> t2.getAlbum().compareTo(t1.getAlbum())).collect(Collectors.toList());
+                    break;
+                case "albumAsc":
+                    result = result.stream().sorted(Comparator.comparing(AlbumCompanyVo::getAlbum)).collect(Collectors.toList());
+                    break;
+                case "pvDesc":
+                    result = result.stream().sorted((t1, t2) -> t2.getPv().compareTo(t1.getPv())).collect(Collectors.toList());
+                    break;
+                case "pvAsc":
+                    result = result.stream().sorted(Comparator.comparing(AlbumCompanyVo::getPv)).collect(Collectors.toList());
+                    break;
+            }
+        }
+        //取tops10
+        result = result.stream().limit(tops).collect(Collectors.toList());
+        result.forEach(e -> e.setCompany(userService.findDeptByDeptId(e.getCompany()).getName()));
+        return result;
     }
 }

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

@@ -147,7 +147,7 @@ public class AnalysisCommonServiceImpl {
         Calendar calendar = Calendar.getInstance();
         int year = calendar.get(Calendar.YEAR);
         //查询出结果
-        List<Integer> count = null;
+        List<Integer> count = new ArrayList<>();
         if (type.equals("total")) {
             count = analysisCommonMapper.knowledgeTypeVisitProportion(null, null);
         } else if (type.equals("year")) {

+ 68 - 1
src/main/resources/mapper/knowledge/analysis/AnalysisAlbumMapper.xml

@@ -1,8 +1,75 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.redxun.knowledge.analysis.mapper.AnalysisAlbumMapper">
+
     <select id="selectCategory" resultType="string">
-        select PK_ID FROM KM_ALBUM_CATEGORY where IS_DEL = 0 and PARENT = '0'
+        select PK_ID
+        FROM KM_ALBUM_CATEGORY
+        where IS_DEL = 0
+          and PARENT = '0'
+    </select>
+
+    <select id="selectAlbumId" resultType="int">
+        select count(*)
+        from KM_ALBUM_INFO
+        WHERE CATEGORY_ID IN (SELECT c.PK_ID
+        FROM KM_ALBUM_CATEGORY c
+        WHERE c.IS_DEL = 0
+        START WITH c.PK_ID = #{categoryId}
+        CONNECT BY PRIOR c.PK_ID = c.PARENT
+        and c.IS_DEL = 0)
+        <if test="firstDay != null and lastDay != null">
+            and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
+            and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}
+        </if>
+    </select>
+
+    <select id="selectKnowledge" resultType="int">
+        select NVL(sum(count(*)),0)
+        from KM_ALBUM_CATALOGUE_KNOWLEDGE
+        where CATALOGUE_ID in (
+        select PK_ID
+        from KM_ALBUM_CATALOGUE
+        WHERE ALBUM_ID in (select PK_ID
+        from KM_ALBUM_INFO
+        WHERE CATEGORY_ID IN (SELECT c.PK_ID
+        FROM KM_ALBUM_CATEGORY c
+        WHERE c.IS_DEL = 0
+        START WITH c.PK_ID = #{categoryId}
+        CONNECT BY PRIOR c.PK_ID = c.PARENT
+        and c.IS_DEL = 0)
+        <if test="firstDay != null and lastDay != null">
+            and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
+            and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}
+        </if>))
+        group by CATALOGUE_ID
+    </select>
+
+    <select id="organizationAlbums" resultType="com.redxun.knowledge.analysis.entity.vo.AlbumCompanyVo">
+        select companyId as company, NVL(b.album,0) as album, NVL(a.pv,0) as pv
+        from (
+        (select COMPANY_ID as companyId, count(*) pv from KM_PV_LOG
+        <where>
+            MODULE = '知识专辑'
+            <if test="firstDay != null and lastDay != null">
+                and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
+                and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}
+            </if>
+        </where>
+        group by COMPANY_ID) a
+        full join
+        (select COMPANY_ID_ as companyId, count(*) album from KM_ALBUM_INFO
+        <where>
+            <if test="firstDay != null and lastDay != null">
+                and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
+                and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}
+            </if>
+        </where>
+        group by COMPANY_ID_) b
+        using (companyId)
+        )
+        order by album desc
     </select>
 
+
 </mapper>

+ 7 - 7
src/main/resources/mapper/knowledge/analysis/AnalysisCommonMapper.xml

@@ -3,21 +3,21 @@
 <mapper namespace="com.redxun.knowledge.analysis.mapper.AnalysisCommonMapper">
 
     <select id="knowledgeTotalAmount" resultType="int">
-        select count(*) from KM_KNOWLEDGE where APPROVAL_STATUS = 5 and IS_DEL = 0
+        select count(*) from KM_KNOWLEDGE where APPROVAL_STATUS = 5
     </select>
 
     <select id="mapTotalAmount" resultType="int">
-        select count(*) from KM_MAP where IS_DEL = 0
+        select count(*) from KM_MAP
     </select>
 
     <select id="albumTotalAmount" resultType="int">
-        select count(distinct ALBUM_ID)  from KM_ALBUM_VERSION where IS_DEL = 0 and APPROVAL_STATE = 5
+        select count(distinct ALBUM_ID)  from KM_ALBUM_VERSION where APPROVAL_STATE = 5
     </select>
 
     <select id="knowledgeTotalByType" resultType="int">
         select count(*)
         from KM_KNOWLEDGE
-        where APPROVAL_STATUS = 5 and IS_DEL = 0 and TYPE = #{type}
+        where APPROVAL_STATUS = 5 and TYPE = #{type}
     </select>
 
     <select id="searchParticipleWordCloud" resultType="com.redxun.knowledge.analysis.entity.vo.SearchParticipleWordCloudVo">
@@ -50,7 +50,7 @@
         <where>
             CATEGORY_ID IN (
             SELECT c.PK_ID FROM KM_KNOWLEDGE_CATEGORY c WHERE c.IS_DEL = 0 START WITH c.PK_ID = #{categoryId} CONNECT BY PRIOR c.PK_ID = c.PARENT and c.IS_DEL = 0
-            ) and IS_DEL = 0
+            )
            <if test="firstDay != null and lastDay != null">
                and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
                and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}
@@ -59,13 +59,13 @@
     </select>
 
     <select id="selectCompanyId" resultType="string">
-        select distinct COMPANY_ID_ from KM_KNOWLEDGE where IS_DEL = 0
+        select distinct COMPANY_ID_ from KM_KNOWLEDGE
     </select>
 
     <select id="organizationKnowledges" resultType="int">
         select type from KM_KNOWLEDGE
         <where>
-            IS_DEL = 0 and COMPANY_ID_ = #{companyId}
+            COMPANY_ID_ = #{companyId}
             <if test="firstDay != null and lastDay != null">
                 and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
                 and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}