From 3c8b8029a94666ce55e38d1f11c0d1bb0330afa5 Mon Sep 17 00:00:00 2001
From: huangh <hshgjzd5@163.com>
Date: Tue, 29 Oct 2024 14:59:11 +0800
Subject: [PATCH] fix:统计重复案件,添加本级数据处理,修改请求方式

---
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/service/AnalysisService.java          |   78 +++++++++++++++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java |  158 ++++---------------------------
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml     |   16 +++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/vo/CountRepeateVo.java         |   11 ++
 4 files changed, 126 insertions(+), 137 deletions(-)

diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java
index 97af59e..afa31d1 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java
@@ -19,6 +19,7 @@
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -51,7 +52,7 @@
      * @param
      * @return Object
      */
-    @GetMapping("/countRepeatedCasesByCaseType")
+    @PostMapping("/countRepeatedCasesByCaseType")
     public ReturnBO countRepeatedCasesByCaseType(@RequestBody CountRepeateVo countRepeateVo) {
         try{
             countRepeateVo.setGroupByCaseType("true");
@@ -69,28 +70,18 @@
      * @param
      * @return Object
      */
-    @GetMapping("/countRepeatedCasesByArea")
+    @PostMapping("/countRepeatedCasesByArea")
     public ReturnBO countRepeatedCasesByArea(@RequestBody CountRepeateVo countRepeateVo) {
         try{
+            countRepeateVo.setIsFinish("false");
+            List<CountRepeateDto> countRepeateDtoList = service.countRepeatedCasesByArea(countRepeateVo);
+            countRepeateVo.setIsFinish("true");
+            List<CountRepeateDto> countRepeateDtoListIsFinish = service.countRepeatedCasesByArea(countRepeateVo);
+            Map<String, List<CountRepeateDto>> collect = new HashMap<>();
+            collect.put("未办结",countRepeateDtoList);
+            collect.put("已办结",countRepeateDtoListIsFinish);
 
-            // 判断 countRepeateVo 的 queRoad 是否为空
-            // 如果 queRoad 和 queArea 都为空且 queCity 不为空,则设置 groupByArea 为 true 根据 区 聚合
-            if (StringUtil.isEmpty(countRepeateVo.getQueRoad()) &&
-                    StringUtil.isEmpty(countRepeateVo.getQueArea()) &&
-                    ! StringUtil.isEmpty(countRepeateVo.getQueCity())) {
-                countRepeateVo.setGroupByArea("true");
-            }
-            // 如果 queRoad 为空且 queCity 和 queArea 不为空,则设置 groupByRoad 为 true 根据 街道 聚合
-            else if (StringUtil.isEmpty(countRepeateVo.getQueRoad()) &&
-                    ! StringUtil.isEmpty(countRepeateVo.getQueArea()) &&
-                    ! StringUtil.isEmpty(countRepeateVo.getQueCity())) {
-                countRepeateVo.setGroupByRoad("true");
-            }
-            List<CountRepeateDto> countRepeateDtoList = service.countRepeatedCases(countRepeateVo);
-            if (countRepeateDtoList.size() == 1 && StringUtil.isEmpty(countRepeateDtoList.get(0).getGroupByType())) {
-                countRepeateDtoList.get(0).setGroupByType("本级");
-            }
-            return ReturnSucUtils.getRepInfo("请求成功",countRepeateDtoList);
+            return ReturnSucUtils.getRepInfo("请求成功",collect);
         }catch (Exception e){
             log.error("统计重复来访案件数量异常",e);
             return ReturnFailUtils.getRepInfo(e.getMessage());
@@ -98,132 +89,25 @@
     }
 
     /**
-     * 统计重复来访案件数量-根据案件类型分组
+     * 统计重复来访案件数量-根据时间分组
      * @url {ctx}/api/web/analysis/countRepeatedCasesByCaseType
      * @param
      * @return Object
      */
-    @GetMapping("/countRepeatedCasesByTime")
+    @PostMapping("/countRepeatedCasesByTime")
     public ReturnBO countRepeatedCasesByTime(@RequestBody CountRepeateVo countRepeateVo) {
         try{
-
-            DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            String dayTypeStr = "day";
-            String monthTypeStr = "month";
-            String yearTypeStr = "year";
-
-            LocalDate start = LocalDate.parse(countRepeateVo.getCreateTimeStart(), DATE_TIME_FORMATTER);
-            LocalDate end = LocalDate.parse(countRepeateVo.getCreateTimeEnd(), DATE_TIME_FORMATTER);
-
-            long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(start, end);
-            if (daysBetween < 15) {
-                countRepeateVo.setGroupByTime(dayTypeStr);
-            } else if ((daysBetween >= 15) && (daysBetween < 365)) {
-                countRepeateVo.setGroupByTime(monthTypeStr);
-            } else {
-                countRepeateVo.setGroupByTime(yearTypeStr);
-            }
-            List<CountRepeateDto> countRepeateDtoList = service.countRepeatedCases(countRepeateVo);
-            if (!countRepeateDtoList.isEmpty()){
-                String timeFormatter = "";
-                if (dayTypeStr.equals(countRepeateVo.getGroupByTime())){
-                    timeFormatter = "日";
-                }
-                else if (monthTypeStr.equals(countRepeateVo.getGroupByTime())) {
-                    timeFormatter = "月";
-                }
-                else if (yearTypeStr.equals(countRepeateVo.getGroupByTime())) {
-                    timeFormatter = "年";
-                }
-                for (CountRepeateDto countRepeateDto : countRepeateDtoList) {
-                    // 按 “-”切割字符串,获取最后一个元素
-                    String[] split = countRepeateDto.getGroupByType().split("-");
-                    String lastElement = split[split.length - 1];
-                    // 判断 lastElement 是否为小于 13 的数字,如果是,则将类型转换为int
-                    if (lastElement.matches("^\\d+$")) {
-                        lastElement = String.valueOf(Integer.parseInt(lastElement));
-                    }
-                    countRepeateDto.setGroupByType(lastElement + timeFormatter);
-                }
-
-            }
-            return ReturnSucUtils.getRepInfo("请求成功",countRepeateDtoList);
+            countRepeateVo.setIsFinish("false");
+            List<CountRepeateDto> countRepeateDtoList = service.countRepeatedCasesByTime(countRepeateVo);
+            countRepeateVo.setIsFinish("true");
+            List<CountRepeateDto> countRepeateDtoListIsFinish = service.countRepeatedCasesByTime(countRepeateVo);
+            Map<String, List<CountRepeateDto>> collect = new HashMap<>();
+            collect.put("未办结",countRepeateDtoList);
+            collect.put("已办结",countRepeateDtoListIsFinish);
+            return ReturnSucUtils.getRepInfo("请求成功",collect);
         }catch (Exception e){
             log.error("统计重复来访案件数量异常",e);
             return ReturnFailUtils.getRepInfo(e.getMessage());
         }
-    }
-
-    private List<String> getDaysList(LocalDate start, LocalDate end) {
-        List<String> days = new ArrayList<>();
-        while (!start.isAfter(end)) {
-            days.add(start.toString());
-            start = start.plusDays(1);
-        }
-        return days;
-    }
-
-    private List<String> getMonthsList(LocalDate start, LocalDate end) {
-        List<String> months = new ArrayList<>();
-        while (!start.isAfter(end)) {
-            String month = start.getMonth().name().substring(0, 3); // 例如 "JAN"
-            // 获取中文月份
-            switch (month) {
-                case "JAN":
-                    month = "一月";
-                    break;
-                case "FEB":
-                    month = "二月";
-                    break;
-                case "MAR":
-                    month = "三月";
-                    break;
-                case "APR":
-                    month = "四月";
-                    break;
-                case "MAY":
-                    month = "五月";
-                    break;
-                case "JUN":
-                    month = "六月";
-                    break;
-                case "JUL":
-                    month = "七月";
-                    break;
-                case "AUG":
-                    month = "八月";
-                    break;
-                case "SEP":
-                    month = "九月";
-                    break;
-                case "OCT":
-                    month = "十月";
-                    break;
-                case "NOV":
-                    month = "十一月";
-                    break;
-                case "DEC":
-                    month = "十二月";
-                    break;
-            }
-            if (!months.contains(month)) {
-                months.add(month);
-            }
-            start = start.plusMonths(1);
-        }
-        // return months.stream().map(m -> m + "月").collect(Collectors.toList());
-        return months;
-    }
-
-    private List<String> getYearsList(LocalDate start, LocalDate end) {
-        List<String> years = new ArrayList<>();
-        while (!start.isAfter(end)) {
-            String year = Integer.toString(start.getYear());
-            if (!years.contains(year)) {
-                years.add(year);
-            }
-            start = start.plusYears(1);
-        }
-        return years.stream().map(y -> y + "年").collect(Collectors.toList());
     }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml
index 57d00e0..1bbba00 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml
@@ -253,6 +253,12 @@
         <if test="createTimeStart != null and createTimeStart != '' and createTimeEnd != null and createTimeEnd != ''">
             AND ci.create_time BETWEEN #{createTimeStart} AND #{createTimeEnd}
         </if>
+        <if test="finishTimeStart != null and finishTimeStart != '' and finishTimeEnd != null and finishTimeEnd != ''">
+            AND cui.close_time BETWEEN #{finishTimeStart} AND #{finishTimeEnd}
+        </if>
+        <if test="caseType != null and caseType != ''">
+            AND CI."case_type" = #{caseType}
+        </if>
         <if test="queCity != null and queCity != ''">
             AND unit.city = #{queCity}
         </if>
@@ -262,13 +268,23 @@
         <if test="queRoad != null and queRoad != ''">
             AND unit.road = #{queRoad}
         </if>
+        <if test="isFinish != null and isFinish != ''">
+            <if test="isFinish == 'true'">
+                AND CI."process" == '6'
+            </if>
+            <if test="isFinish == 'false'">
+                AND CI."process" != '6'
+            </if>
+        </if>
         <if test="groupByCaseType != null and groupByCaseType != ''">
             GROUP BY case_type_first_name
         </if>
         <if test="groupByArea != null and groupByArea != ''">
+<!--            AND road_name is not NULL-->
             GROUP BY area_name
         </if>
         <if test="groupByRoad != null and groupByRoad != ''">
+<!--            AND road_name is not NULL-->
             GROUP BY road_name
         </if>
         <if test="groupByTime != null and groupByTime != ''">
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/vo/CountRepeateVo.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/vo/CountRepeateVo.java
index 28d6297..a4612b6 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/vo/CountRepeateVo.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/vo/CountRepeateVo.java
@@ -17,6 +17,12 @@
     private String createTimeEnd;
 
     /**
+     * 办结时间区间
+     */
+    private String finishTimeStart;
+    private String finishTimeEnd;
+
+    /**
      * 案件案由类型
      */
     private String caseType;
@@ -55,4 +61,9 @@
      * 查询归属地-街道编码聚合标记
      */
     private String groupByRoad;
+
+    /**
+     * 查询是否办结标记
+     */
+    private String isFinish;
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/service/AnalysisService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/service/AnalysisService.java
index 4574636..60a9851 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/service/AnalysisService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/service/AnalysisService.java
@@ -1,5 +1,8 @@
 package cn.huge.module.analysis.service;
 
+import cn.huge.base.common.bo.ReturnBO;
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
 import cn.huge.module.analysis.dao.mapper.AnalysisMapper;
 import cn.huge.module.analysis.domain.dto.CountRepeateDto;
 import cn.huge.module.analysis.domain.vo.CountRepeateVo;
@@ -7,11 +10,15 @@
 import cn.huge.module.cases.domain.po.CaseInfo;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import dm.jdbc.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 /**
@@ -36,10 +43,81 @@
     @Autowired
     private AnalysisMapper analysisMapper;
 
+    // 统计重复来访案件数量
     public List<CountRepeateDto> countRepeatedCases(CountRepeateVo countRepeateVo) {
         return analysisMapper.countRepeatedCases(countRepeateVo);
     }
 
+    public List<CountRepeateDto> countRepeatedCasesByTime(CountRepeateVo countRepeateVo){
+        DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String dayTypeStr = "day";
+        String monthTypeStr = "month";
+        String yearTypeStr = "year";
+
+        LocalDate start = LocalDate.parse(countRepeateVo.getCreateTimeStart(), DATE_TIME_FORMATTER);
+        LocalDate end = LocalDate.parse(countRepeateVo.getCreateTimeEnd(), DATE_TIME_FORMATTER);
+
+        long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(start, end);
+        if (daysBetween < 15) {
+            countRepeateVo.setGroupByTime(dayTypeStr);
+        } else if ((daysBetween >= 15) && (daysBetween < 365)) {
+            countRepeateVo.setGroupByTime(monthTypeStr);
+        } else {
+            countRepeateVo.setGroupByTime(yearTypeStr);
+        }
+        List<CountRepeateDto> countRepeateDtoList = this.countRepeatedCases(countRepeateVo);
+        if (!countRepeateDtoList.isEmpty()){
+            String timeFormatter = "";
+            if (dayTypeStr.equals(countRepeateVo.getGroupByTime())){
+                timeFormatter = "日";
+            }
+            else if (monthTypeStr.equals(countRepeateVo.getGroupByTime())) {
+                timeFormatter = "月";
+            }
+            else if (yearTypeStr.equals(countRepeateVo.getGroupByTime())) {
+                timeFormatter = "年";
+            }
+            for (CountRepeateDto countRepeateDto : countRepeateDtoList) {
+                // 按 “-”切割字符串,获取最后一个元素
+                String[] split = countRepeateDto.getGroupByType().split("-");
+                String lastElement = split[split.length - 1];
+                // 判断 lastElement 是否为小于 13 的数字,如果是,则将类型转换为int
+                if (lastElement.matches("^\\d+$")) {
+                    lastElement = String.valueOf(Integer.parseInt(lastElement));
+                }
+                countRepeateDto.setGroupByType(lastElement + timeFormatter);
+            }
+        }
+        return countRepeateDtoList;
+    }
+
+    public List<CountRepeateDto> countRepeatedCasesByArea(CountRepeateVo countRepeateVo) {
+
+
+        // 判断 countRepeateVo 的 queRoad 是否为空
+        // 如果 queRoad 和 queArea 都为空且 queCity 不为空,则设置 groupByArea 为 true 根据 区 聚合
+        if (StringUtil.isEmpty(countRepeateVo.getQueRoad()) &&
+                StringUtil.isEmpty(countRepeateVo.getQueArea()) &&
+                ! StringUtil.isEmpty(countRepeateVo.getQueCity())) {
+            countRepeateVo.setGroupByArea("true");
+        }
+        // 如果 queRoad 为空且 queCity 和 queArea 不为空,则设置 groupByRoad 为 true 根据 街道 聚合
+        else if (StringUtil.isEmpty(countRepeateVo.getQueRoad()) &&
+                ! StringUtil.isEmpty(countRepeateVo.getQueArea()) &&
+                ! StringUtil.isEmpty(countRepeateVo.getQueCity())) {
+            countRepeateVo.setGroupByRoad("true");
+        }
+
+
+        List<CountRepeateDto> countRepeateDtoList = this.countRepeatedCases(countRepeateVo);
+        // if (countRepeateDtoList.size() == 1 && StringUtil.isEmpty(countRepeateDtoList.get(0).getGroupByType())) {
+        if (StringUtil.isEmpty(countRepeateDtoList.get(0).getGroupByType())) {
+            countRepeateDtoList.get(0).setGroupByType("本级");
+        }
+        return countRepeateDtoList;
+
+    }
+
 
 
 

--
Gitblit v1.8.0