Przeglądaj źródła

1.在线论坛的统计,根据日期统计

jasonk5949 7 miesięcy temu
rodzic
commit
55289345b0

+ 3 - 3
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/controller/ForumPostInfoController.java

@@ -175,9 +175,9 @@ public class ForumPostInfoController {
     /**
      * 查询所有发帖数和回帖数
      */
-    @GetMapping("/forum/postinfo/getCount")
-    public CommonResult<JSONObject> getCount() {
-        return forumPostInfoService.getCount();
+    @PostMapping("/forum/postinfo/getCount")
+    public CommonResult<JSONObject> getCount(@RequestBody JSONObject json) {
+        return forumPostInfoService.getCount(json);
     }
 
 

+ 1 - 1
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/ForumPostInfoService.java

@@ -111,5 +111,5 @@ public interface ForumPostInfoService extends IService<ForumPostInfo> {
     /**
      * 查询所有发帖数和回帖数
      */
-    CommonResult<JSONObject> getCount();
+    CommonResult<JSONObject> getCount(JSONObject json);
 }

+ 81 - 16
snowy-plugin/snowy-plugin-forum/snowy-plugin-forum-func/src/main/java/vip/xiaonuo/forum/modular/postinfo/service/impl/ForumPostInfoServiceImpl.java

@@ -16,7 +16,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -27,7 +27,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
 import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
-import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.common.pojo.CommonResult;
@@ -42,7 +41,6 @@ import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoIdParam;
 import vip.xiaonuo.forum.modular.postinfo.param.ForumPostInfoPageParam;
 import vip.xiaonuo.forum.modular.postinfo.service.ForumPostInfoService;
 import vip.xiaonuo.forum.modular.postlike.entity.ForumPostLike;
-import vip.xiaonuo.forum.modular.postlike.mapper.ForumPostLikeMapper;
 import vip.xiaonuo.forum.modular.postlike.service.ForumPostLikeService;
 import vip.xiaonuo.forum.modular.postreply.entity.ForumPostReply;
 import vip.xiaonuo.forum.modular.postreply.param.ForumPostReplyPageParam;
@@ -58,6 +56,9 @@ import vip.xiaonuo.forum.modular.supportenv.mapper.ForumSupportEnvMapper;
 import vip.xiaonuo.sys.api.SysUserApi;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -540,19 +541,83 @@ public class ForumPostInfoServiceImpl extends ServiceImpl<ForumPostInfoMapper, F
     }
 
     @Override
-    public CommonResult<com.alibaba.fastjson.JSONObject> getCount() {
-        // 查询帖子未关闭的总数量
-        QueryWrapper<ForumPostInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ForumPostInfo::getPostStatus, 0);
-        long count = this.count(queryWrapper);
-        // 查询所有回复数量
-        QueryWrapper<ForumPostReply> queryWrapper1 = new QueryWrapper<>();
-        long replyCount = forumPostReplyService.count(queryWrapper1);
-        // 封装返回参数
-        com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
-        jsonObject.put("postCount", count);
-        jsonObject.put("replyCount", replyCount);
-        return CommonResult.data(jsonObject);
+    public CommonResult<com.alibaba.fastjson.JSONObject> getCount(com.alibaba.fastjson.JSONObject json) {
+        com.alibaba.fastjson.JSONObject result = new com.alibaba.fastjson.JSONObject();
+        // 取出查询条件,起始时间和结束时间
+        String startTime = json.getString("startTime");
+        String endTime = json.getString("endTime");
+        // 如果没有默认查询所有总共的
+        if (StringUtils.isBlank(startTime) && StringUtils.isBlank(endTime)) {
+            // 查询帖子未关闭的总数量
+            QueryWrapper<ForumPostInfo> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ForumPostInfo::getPostStatus, 0);
+            long count = this.count(queryWrapper);
+            // 查询所有回复数量
+            QueryWrapper<ForumPostReply> queryWrapper1 = new QueryWrapper<>();
+            long replyCount = forumPostReplyService.count(queryWrapper1);
+            // 封装返回参数,查询总数
+            result.put("type", 0);
+            result.put("postCount", count);
+            result.put("replyCount", replyCount);
+            return CommonResult.data(result);
+        } else {
+            JSONArray jsonArray = new JSONArray();
+            // 取出开始日期到结束日期的每一天日期
+            List<String> dateList = getDatesBetween(startTime, endTime);
+            for (String date : dateList) {
+                // 查询帖子未关闭的总数量
+                QueryWrapper<ForumPostInfo> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().eq(ForumPostInfo::getPostStatus, 0).apply("TO_CHAR(create_time, 'YYYY-MM-DD') = {0}", date);
+                long count = this.count(queryWrapper);
+                // 查询所有回复数量
+                QueryWrapper<ForumPostReply> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.lambda().apply("TO_CHAR(create_time, 'YYYY-MM-DD') = {0}", date);
+                long replyCount = forumPostReplyService.count(queryWrapper1);
+                // 封装返回参数
+                com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
+                jsonObject.put("date", date);
+                jsonObject.put("postCount", count);
+                jsonObject.put("replyCount", replyCount);
+                jsonArray.add(jsonObject);
+            }
+            // 封装返回参数,按日期查询
+            result.put("type", 1);
+            result.put("data", jsonArray);
+            return CommonResult.data(result);
+        }
+    }
+
+
+    public static List<String> getDatesBetween(String startDateStr, String endDateStr) {
+        // 定义日期格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+        try {
+            // 解析字符串为日期对象
+            LocalDate startDate = LocalDate.parse(startDateStr, formatter);
+            LocalDate endDate = LocalDate.parse(endDateStr, formatter);
+
+            // 确保开始日期不晚于结束日期
+            if (startDate.isAfter(endDate)) {
+                LocalDate temp = startDate;
+                startDate = endDate;
+                endDate = temp;
+            }
+
+            // 生成日期列表
+            List<String> dateList = new ArrayList<>();
+            LocalDate currentDate = startDate;
+
+            while (!currentDate.isAfter(endDate)) {
+                dateList.add(currentDate.format(formatter));
+                currentDate = currentDate.plusDays(1);
+            }
+
+            return dateList;
+
+        } catch (DateTimeParseException e) {
+            throw new IllegalArgumentException("日期格式错误,请使用 yyyy-MM-dd 格式");
+        }
     }
 
 }