wuweihao 3 роки тому
батько
коміт
c2997f444e

+ 7 - 0
gis_cms/src/main/java/com/gis/cms/controller/VillageController.java

@@ -35,4 +35,11 @@ public class VillageController {
     public Result getList(){
         return entityService.getList();
     }
+
+
+    @ApiOperation(value = "统计-5分钟更新一次")
+    @GetMapping("/getStatistics")
+    public Result getStatistics(){
+        return entityService.getStatistics();
+    }
 }

+ 25 - 3
gis_cms/src/main/java/com/gis/cms/controller/WebController.java

@@ -1,6 +1,7 @@
 package com.gis.cms.controller;
 
 import com.gis.cms.service.ContentService;
+import com.gis.cms.service.MenuService;
 import com.gis.cms.service.VillageService;
 import com.gis.common.util.Result;
 import io.swagger.annotations.Api;
@@ -25,10 +26,19 @@ public class WebController {
     @Autowired
     VillageService villageService;
 
+    @Autowired
+    MenuService menuService;
+
     @ApiOperation(value = "内容-列表")
-    @GetMapping("/content/list/{villageId}/{menuId}")
-    public Result getList(@PathVariable Long villageId, @PathVariable Long menuId){
-        return contentService.getList(villageId, menuId);
+    @GetMapping("/content/list/{villageId}")
+    public Result getList(@PathVariable Long villageId){
+        return contentService.getList(villageId, null);
+    }
+
+    @ApiOperation(value = "获取菜单树")
+    @GetMapping("/getTreeMenu")
+    public Result getTreeMenu(){
+        return menuService.getTreeMenu();
     }
 
 
@@ -44,9 +54,21 @@ public class WebController {
         return villageService.addStar(villageId);
     }
 
+    @ApiOperation(value = "村庄-保存分享量")
+    @GetMapping("/village/addShare/{villageId}")
+    public Result addShare(@PathVariable String villageId){
+        return villageService.addShare(villageId);
+    }
+
     @ApiOperation(value = "村庄-获取点赞量|浏览量")
     @GetMapping("/village/getDetail/{villageId}")
     public Result getDetail(@PathVariable String villageId){
         return Result.success(villageService.getById(villageId));
     }
+
+    @ApiOperation(value = "村庄-统计-5分钟更新一次")
+    @GetMapping("/village/getStatistics")
+    public Result getStatistics(){
+        return villageService.getStatistics();
+    }
 }

+ 23 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/VillageCountEntity.java

@@ -0,0 +1,23 @@
+package com.gis.cms.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gis.common.base.entity.po.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2022/5/19 0019 15:40
+ * 村落-统计
+ *
+ */
+@Data
+@TableName(value = "tb_village_count")
+public class VillageCountEntity extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 2798635561762487183L;
+    @ApiModelProperty(value = "类型: visit")
+    private String type;
+
+}

+ 3 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/VillageEntity.java

@@ -25,4 +25,7 @@ public class VillageEntity extends BaseEntity implements Serializable {
 
     @ApiModelProperty(value = "点赞量")
     private Integer star;
+
+    @ApiModelProperty(value = "分享量")
+    private Integer share;
 }

+ 20 - 0
gis_cms/src/main/java/com/gis/cms/mapper/VillageCountMapper.java

@@ -0,0 +1,20 @@
+package com.gis.cms.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gis.cms.entity.po.VillageCountEntity;
+import com.gis.cms.entity.po.VillageEntity;
+import com.gis.common.base.mapper.provider.BaseProvider;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by owen on 2022/5/19 0019 15:47
+ */
+@Component
+@Mapper
+public interface VillageCountMapper extends BaseMapper<VillageCountEntity> {
+
+
+}

+ 11 - 0
gis_cms/src/main/java/com/gis/cms/mapper/VillageMapper.java

@@ -2,10 +2,15 @@ package com.gis.cms.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.gis.cms.entity.po.VillageEntity;
+import com.gis.common.base.mapper.provider.BaseProvider;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.SelectProvider;
 import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDate;
+
 /**
  * Created by owen on 2022/5/19 0019 15:47
  */
@@ -18,4 +23,10 @@ public interface VillageMapper extends BaseMapper<VillageEntity> {
 
     @Update("UPDATE tb_village set star=star+1, update_time=NOW() where is_delete=0 and id=#{villageId}")
     void addStar(String villageId);
+
+    @Update("UPDATE tb_village set share=share+1, update_time=NOW() where is_delete=0 and id=#{villageId}")
+    void addShare(String villageId);
+
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    Integer visitToday(String sql);
 }

+ 4 - 0
gis_cms/src/main/java/com/gis/cms/service/VillageService.java

@@ -13,4 +13,8 @@ public interface VillageService extends IService<VillageEntity> {
     Result addVisit(String villageId);
 
     Result addStar(String villageId);
+
+    Result addShare(String villageId);
+
+    Result getStatistics();
 }

+ 50 - 4
gis_cms/src/main/java/com/gis/cms/service/impl/ContentServiceImpl.java

@@ -1,6 +1,8 @@
 package com.gis.cms.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,6 +11,7 @@ import com.gis.cms.entity.dto.FileDto;
 import com.gis.cms.entity.po.ContentEntity;
 import com.gis.cms.entity.po.FileEntity;
 import com.gis.cms.entity.vo.ContentVo;
+import com.gis.cms.entity.vo.FileVo;
 import com.gis.cms.mapper.ContentMapper;
 import com.gis.cms.service.ContentService;
 import com.gis.cms.service.FileService;
@@ -22,8 +25,8 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.validation.constraints.NotBlank;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
@@ -51,20 +54,63 @@ public class ContentServiceImpl extends ServiceImpl<ContentMapper, ContentEntity
     public Result getList(Long villageId, Long menuId) {
         LambdaQueryWrapper<ContentEntity> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(ContentEntity::getVillageId, villageId);
-        wrapper.eq(ContentEntity::getMenuId, menuId);
+        wrapper.eq(menuId!=null, ContentEntity::getMenuId, menuId);
         List<ContentEntity> list = this.list(wrapper);
+
+        // 封装文件id
+        StringBuilder idsStr = new StringBuilder();
+        int i = 1;
+        for (ContentEntity entity : list) {
+            String imgIds = entity.getImgIds();
+            String videoIds = entity.getVideoIds();
+            if (StrUtil.isNotBlank(imgIds)){
+                if (i > 1){
+                    idsStr.append(",");
+                }
+                idsStr.append(imgIds);
+            }
+            if (StrUtil.isNotBlank(videoIds)){
+                if (StrUtil.isNotBlank(idsStr.toString())){
+                    idsStr.append(",");
+                }
+                idsStr.append(videoIds);
+            }
+            i ++;
+        }
+
+        log.info("文件ids: {}", idsStr);
+
+        // 查询文件
+        List<FileVo> fileList = fileService.findByIds(idsStr.toString());
+
         ContentVo contentVo = null;
         ArrayList<ContentVo> res = new ArrayList<>();
         for (ContentEntity entity : list) {
             contentVo = new ContentVo();
             BeanUtils.copyProperties(entity, contentVo);
-            contentVo.setImages(fileService.findByIds(entity.getImgIds()));
-            contentVo.setVideos(fileService.findByIds(entity.getVideoIds()));
+            contentVo.setImages(getFileByIds(fileList, entity.getImgIds()));
+            contentVo.setVideos(getFileByIds(fileList, entity.getVideoIds()));
             res.add(contentVo);
         }
         return Result.success(res);
     }
 
+    /**
+     * 过滤文件
+     * @param metadata 元数据
+     * @param ids 文件ids
+     * @return
+     */
+    private List<FileVo> getFileByIds(List<FileVo> metadata, String ids){
+        if (StrUtil.isNotBlank(ids)){
+            String[] split = ids.split(",");
+            List<String> asList = Arrays.asList(split);
+            return metadata.stream().filter(p -> asList.contains(p.getId().toString())).collect(Collectors.toList());
+    }
+        return null;
+
+    }
+
     @Override
     public Result saveEntity(ContentDto param) {
         Long id = param.getId();

+ 67 - 0
gis_cms/src/main/java/com/gis/cms/service/impl/VillageServiceImpl.java

@@ -1,20 +1,27 @@
 package com.gis.cms.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gis.admin.entity.po.SysUserEntity;
 import com.gis.admin.service.SysUserService;
+import com.gis.cms.entity.po.VillageCountEntity;
 import com.gis.cms.entity.po.VillageEntity;
+import com.gis.cms.mapper.VillageCountMapper;
 import com.gis.cms.mapper.VillageMapper;
 import com.gis.cms.service.VillageService;
 import com.gis.common.base.service.IBaseService;
+import com.gis.common.util.RedisUtil;
 import com.gis.common.util.Result;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
+import java.util.HashMap;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Created by owen on 2022/5/19 0019 15:49
@@ -28,6 +35,15 @@ public class VillageServiceImpl extends ServiceImpl<VillageMapper, VillageEntity
 
     @Autowired
     SysUserService userService;
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Autowired
+    VillageCountMapper villageCountMapper;
+
+    /**数据统计key*/
+    static final String STATISTICS_KEY = "statistics";
     
     @Override
     public Result getList() {
@@ -49,6 +65,9 @@ public class VillageServiceImpl extends ServiceImpl<VillageMapper, VillageEntity
     @Override
     public Result addVisit(String villageId) {
         baseMapper.addVisit(villageId);
+        VillageCountEntity entity = new VillageCountEntity();
+        entity.setType("visit");
+        villageCountMapper.insert(entity);
         return Result.success();
     }
 
@@ -57,4 +76,52 @@ public class VillageServiceImpl extends ServiceImpl<VillageMapper, VillageEntity
         baseMapper.addStar(villageId);
         return Result.success();
     }
+
+    @Override
+    public Result addShare(String villageId) {
+        baseMapper.addShare(villageId);
+        return Result.success();
+    }
+
+    @Override
+    public Result getStatistics() {
+
+        if (redisUtil.hasKey(STATISTICS_KEY)){
+            log.info("统计接口走缓存");
+            Object cacheObject = redisUtil.getCacheObject(STATISTICS_KEY);
+            return Result.success(cacheObject);
+        }
+
+        List<VillageEntity> list = this.list();
+        int visitCount = 0; // 总访问量
+        int shareCount = 0; // 总分享量
+        int starCount = 0; // 总点赞量
+
+        for (VillageEntity entity : list) {
+            visitCount += entity.getVisit();
+            shareCount += entity.getShare();
+            starCount += entity.getStar();
+        }
+
+        HashMap<Object, Object> map = new HashMap<>();
+        map.put("visitCount", visitCount);
+        map.put("shareCount", shareCount);
+        map.put("starCount", starCount);
+        map.put("visitToday", getVisitToday());  // 今日访问量
+        map.put("village", list);
+
+        redisUtil.setCacheObject(STATISTICS_KEY, map, 5, TimeUnit.MINUTES);
+
+        return Result.success(map);
+    }
+
+    private Integer getVisitToday(){
+        LocalDate date = LocalDate.now();
+        log.info("日期: {}", date);
+        StringBuilder sql = new StringBuilder();
+        sql.append("select count(id) from tb_village_count where is_delete=0 and type='visit' ");
+        sql.append(StrUtil.format(" and DATE_FORMAT( create_time, '%Y%m%d' ) = DATE_FORMAT('{}' , '%Y%m%d' )", date));
+
+        return baseMapper.visitToday(sql.toString());
+    }
 }

+ 1 - 0
gis_common/src/main/java/com/gis/common/util/RedisUtil.java

@@ -162,6 +162,7 @@ public class RedisUtil {
         }
     }
 
+
     /**
      * 获得缓存的Map
      *