Parcourir la source

作者:张哲
时间:2023/03/23
类型:开发
描述:里程碑(3)地图统计接口开发

zizg il y a 2 ans
Parent
commit
5a982fcb47

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

@@ -5,9 +5,9 @@ import com.redxun.common.base.entity.JsonResult;
 import com.redxun.knowledge.analysis.entity.vo.*;
 import com.redxun.knowledge.analysis.service.AnalysisAlbumServiceImpl;
 import com.redxun.knowledge.analysis.service.AnalysisCommonServiceImpl;
+import com.redxun.knowledge.analysis.service.AnalysisMapServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -40,6 +40,9 @@ public class AnalysisCommonController {
     @Autowired
     private AnalysisAlbumServiceImpl analysisAlbumService;
 
+    @Autowired
+    private AnalysisMapServiceImpl analysisMapService;
+
     @ApiOperation("PC 各模块整体数量统计")
     @GetMapping("totalAmount")
     public JsonResult totalAmount() {
@@ -122,6 +125,34 @@ public class AnalysisCommonController {
                                          @RequestParam(value = "sort",required = false) String sort){
         List<AlbumCompanyVo> result = analysisAlbumService.organizationAlbums(type,tops,sort);
         return JsonResult.getSuccessResult(result);
+    }
+
+    @ApiOperation("地图创建总量")
+    @GetMapping("mapAmount")
+    public JsonResult mapAmount(){
+        return JsonResult.getSuccessResult(null);
+    }
+
+    @ApiOperation("各类型地图创建数量")
+    @GetMapping("typeMapPie")
+    public JsonResult typeMapPie(@RequestParam("type") String type){
+        List<MapTypeCountVo> result = analysisMapService.typeMapPie(type);
+        return JsonResult.getSuccessResult(result);
+    }
+
+    @ApiOperation("地图页面访问量")
+    @GetMapping("mapPageHistogram")
+    public JsonResult mapPageHistogram(@RequestParam("type") String type){
+        List<MapPagePvVo> result = analysisMapService.mapPageHistogram(type);
+        return JsonResult.getSuccessResult(result);
+    }
 
+    @ApiOperation("组织创建和访问地图数量")
+    @GetMapping("organizationMaps")
+    public JsonResult organizationMaps(@RequestParam("type") String type,
+                                       @RequestParam(value = "tops",required = false,defaultValue = "10") Integer tops,
+                                       @RequestParam(value = "sort",required = false) String sort){
+        List<MapCompanyVo> result = analysisMapService.organizationMaps(type,tops,sort);
+        return JsonResult.getSuccessResult(result);
     }
 }

+ 30 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/MapCompanyVo.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 MapCompanyVo implements Serializable {
+
+    @ApiModelProperty("公司名称")
+    private String company;
+
+    @ApiModelProperty("地图创建总量")
+    private Integer map;
+
+    @ApiModelProperty("地图访问总量")
+    private Integer pv;
+}

+ 27 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/MapPagePvVo.java

@@ -0,0 +1,27 @@
+package com.redxun.knowledge.analysis.entity.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文件名: MapPagePvVo
+ * 作者: zizg
+ * 时间: 2023/3/23
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@ApiModel("地图页面访问量")
+@Data
+public class MapPagePvVo implements Serializable {
+
+    @ApiModelProperty("地图名称")
+    private String label;
+
+    @ApiModelProperty("页面访问量")
+    private Integer pv;
+}

+ 30 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/MapTypeCountVo.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;
+
+/**
+ * 文件名: MapTypeCountVo
+ * 作者: zizg
+ * 时间: 2023/3/22
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@ApiModel("各类型地图创建数量Vo")
+@Data
+public class MapTypeCountVo implements Serializable {
+
+    @ApiModelProperty("地图类型名称")
+    private String type;
+
+    @ApiModelProperty("地图数量")
+    private Integer maps;
+
+    @ApiModelProperty("百分比")
+    private Double percentage;
+}

+ 53 - 0
src/main/java/com/redxun/knowledge/analysis/mapper/AnalysisMapMapper.java

@@ -0,0 +1,53 @@
+package com.redxun.knowledge.analysis.mapper;
+
+import com.redxun.knowledge.analysis.entity.vo.AlbumCompanyVo;
+import com.redxun.knowledge.analysis.entity.vo.MapCompanyVo;
+import com.redxun.knowledge.analysis.entity.vo.MapPagePvVo;
+import com.redxun.knowledge.analysis.entity.vo.MapTypeCountVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 文件名: AnalysisMapMapper
+ * 作者: zizg
+ * 时间: 2023/3/23
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Mapper
+public interface AnalysisMapMapper {
+    /**
+     * 各类型地图创建数量及所占百分比
+     * @param firstDay
+     * @param lastDay
+     * @return
+     */
+    List<MapTypeCountVo> typeMapPie(@Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
+
+    /**
+     * 根据类型获取类型名称
+     * @param type
+     * @return
+     */
+    String selectTypeName(String type);
+
+    /**
+     * 地图页面访问量
+     * @param firstDay
+     * @param lastDay
+     * @return
+     */
+    List<MapPagePvVo> mapPageHistogram(@Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
+
+    /**
+     * 获取组织下创建地图数量和访问数量
+     * @param firstDay
+     * @param lastDay
+     * @return
+     */
+    List<MapCompanyVo> organizationMaps(@Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
+}

+ 138 - 0
src/main/java/com/redxun/knowledge/analysis/service/AnalysisMapServiceImpl.java

@@ -0,0 +1,138 @@
+package com.redxun.knowledge.analysis.service;
+
+import com.redxun.knowledge.analysis.entity.vo.AlbumCompanyVo;
+import com.redxun.knowledge.analysis.entity.vo.MapCompanyVo;
+import com.redxun.knowledge.analysis.entity.vo.MapPagePvVo;
+import com.redxun.knowledge.analysis.entity.vo.MapTypeCountVo;
+import com.redxun.knowledge.analysis.mapper.AnalysisMapMapper;
+import com.redxun.knowledge.common.UserService;
+import com.redxun.knowledge.entity.vo.DicVo;
+import com.redxun.knowledge.mapper.CommonMapper;
+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.util.ArrayList;
+import java.util.Calendar;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 文件名: AnalysisMapServiceImpl
+ * 作者: zizg
+ * 时间: 2023/3/22
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Slf4j
+@Service
+public class AnalysisMapServiceImpl {
+
+    @Autowired
+    private AnalysisMapMapper analysisMapMapper;
+
+    @Autowired
+    private UserService userService;
+
+
+    /**
+     * 各类型地图创建数量
+     * @param type
+     * @return
+     */
+    public List<MapTypeCountVo> typeMapPie(String type) {
+        List<MapTypeCountVo> result = new ArrayList<>();
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+        if (("total").equals(type)){
+            result = analysisMapMapper.typeMapPie(null,null);
+        } else if (("year").equals(type)){
+            result = analysisMapMapper.typeMapPie(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 = analysisMapMapper.typeMapPie(firstOfMonth,lastOfMonth);
+        }
+        //类型名称赋值
+        result.forEach(e -> {
+            String name = analysisMapMapper.selectTypeName(e.getType());
+            e.setType(name);
+        });
+        return result;
+    }
+
+    /**
+     * 地图页面访问量
+     * @param type
+     * @return
+     */
+    public List<MapPagePvVo> mapPageHistogram(String type) {
+        List<MapPagePvVo> result = new ArrayList<>();
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+        if (("total").equals(type)){
+            result = analysisMapMapper.mapPageHistogram(null,null);
+        } else if (("year").equals(type)){
+            result = analysisMapMapper.mapPageHistogram(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 = analysisMapMapper.mapPageHistogram(firstOfMonth,lastOfMonth);
+        }
+        return result;
+    }
+
+    /**
+     * 组织创建和访问地图数量
+     * @param type
+     * @param tops
+     * @param sort
+     * @return
+     */
+    public List<MapCompanyVo> organizationMaps(String type, Integer tops, String sort) {
+        //创建过专辑的公司Id集合
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+        List<MapCompanyVo> result = new ArrayList<>();
+        if ("total".equals(type)) {
+            result = analysisMapMapper.organizationMaps(null, null);
+        } else if ("year".equals(type)) {
+            result = analysisMapMapper.organizationMaps(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 = analysisMapMapper.organizationMaps(firstOfMonth, lastOfMonth);
+        }
+        //排序
+        if (sort != null) {
+            switch (sort) {
+                case "mapDesc":
+                    result = result.stream().sorted((t1, t2) -> t2.getMap().compareTo(t1.getMap())).collect(Collectors.toList());
+                    break;
+                case "mapAsc":
+                    result = result.stream().sorted(Comparator.comparing(MapCompanyVo::getMap)).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(MapCompanyVo::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;
+    }
+}

+ 66 - 0
src/main/resources/mapper/knowledge/analysis/AnalysisMapMapper.xml

@@ -0,0 +1,66 @@
+<?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.AnalysisMapMapper">
+
+    <select id="typeMapPie" resultType="com.redxun.knowledge.analysis.entity.vo.MapTypeCountVo">
+        select type,count(*) maps,round(count(*) / sum(count(*)) over (),2) percentage from KM_MAP
+        <where>
+            <if test="firstDay != null and lastDay != null">
+                TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
+                and TO_CHAR(CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}
+            </if>
+        </where>
+        group by type
+    </select>
+
+    <select id="selectTypeName" resultType="string">
+        select NAME_ as name
+        FROM LEARNING_SYSTEM_DEV.SYS_DIC
+        WHERE TREE_ID_ =
+              (select TREE_ID_ from LEARNING_SYSTEM_DEV.SYS_TREE where ALIAS_ = 'KNOWLEDGE_MAP')
+          and VALUE_ = #{type}
+    </select>
+
+    <select id="mapPageHistogram" resultType="com.redxun.knowledge.analysis.entity.vo.MapPagePvVo">
+        select NAME as label, count(*) as pv
+        from KM_PV_LOG pvlog
+        join KM_MAP map
+        on pvlog.USSD = map.PK_ID
+        <where>
+            MODULE = '知识地图' and SUB_MODULE = '详情'
+            <if test="firstDay != null and lastDay != null">
+                and TO_CHAR(pvlog.CREATE_TIME_,'yyyy-mm-dd') &gt;= #{firstDay}
+                and TO_CHAR(pvlog.CREATE_TIME_,'yyyy-mm-dd') &lt;= #{lastDay}
+            </if>
+        </where>
+        GROUP BY USSD,NAME
+        ORDER BY pv desc
+    </select>
+
+    <select id="organizationMaps" resultType="com.redxun.knowledge.analysis.entity.vo.MapCompanyVo">
+        select companyId as company, NVL(b.map,0) as map, 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(*) map from KM_MAP
+        <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 map desc
+    </select>
+
+</mapper>