From 53201e714765174b2cbe4a19421b490d7ae2d56a Mon Sep 17 00:00:00 2001
From: huangh <hshgjzd5@163.com>
Date: Mon, 28 Oct 2024 15:07:37 +0800
Subject: [PATCH] feat:重复来访接口开发-接口开发完成-待测试

---
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java |  190 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 183 insertions(+), 7 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 865f8f4..2507e44 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
@@ -1,21 +1,27 @@
 package cn.huge.module.analysis.controller;
 
+import cn.huge.base.common.bo.ReturnBO;
 import cn.huge.base.common.utils.ReturnFailUtils;
 import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.base.config.CurrentUser;
+import cn.huge.module.analysis.domain.dto.CountRepeateDto;
+import cn.huge.module.analysis.domain.vo.CountRepeateVo;
 import cn.huge.module.analysis.service.AnalysisService;
-import cn.huge.module.cases.domain.po.CaseInfo;
-import cn.huge.module.cases.service.CaseInfoService;
-import com.google.common.collect.Maps;
+import cn.huge.module.client.api.impl.CustClientImpl;
+import cn.huge.module.cust.dto.CtUnitDTO;
+import cn.huge.module.cust.dto.CtUserDTO;
+import dm.jdbc.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @title: 纠纷信息主表接口api-web端
@@ -35,8 +41,178 @@
 
     @Autowired
     private AnalysisService service;
+    @Autowired
+    private CustClientImpl custClient;
 
 
+    /**
+     * 统计重复来访案件数量-根据案件类型分组
+     * @url {ctx}/api/web/analysis/countRepeatedCasesByCaseType
+     * @param
+     * @return Object
+     */
+    @GetMapping("/countRepeatedCasesByCaseType")
+    public ReturnBO countRepeatedCasesByCaseType(@RequestBody CountRepeateVo countRepeateVo) {
+        try{
+            countRepeateVo.setGroupByCaseType("true");
+            List<CountRepeateDto> countRepeateDtoList = service.countRepeatedCases(countRepeateVo);
+            return ReturnSucUtils.getRepInfo("请求成功",countRepeateDtoList);
+        }catch (Exception e){
+            log.error("统计重复来访案件数量异常",e);
+            return ReturnFailUtils.getRepInfo(e.getMessage());
+        }
+    }
 
+    /**
+     * 统计重复来访案件数量-根据地区分组
+     * @url {ctx}/api/web/analysis/countRepeatedCasesByArea
+     * @param
+     * @return Object
+     */
+    @GetMapping("/countRepeatedCasesByArea")
+    public ReturnBO countRepeatedCasesByArea(@RequestBody CountRepeateVo countRepeateVo) {
+        try{
 
+            // 判断 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);
+        }catch (Exception e){
+            log.error("统计重复来访案件数量异常",e);
+            return ReturnFailUtils.getRepInfo(e.getMessage());
+        }
+    }
+
+    /**
+     * 统计重复来访案件数量-根据案件类型分组
+     * @url {ctx}/api/web/analysis/countRepeatedCasesByCaseType
+     * @param
+     * @return Object
+     */
+    @GetMapping("/countRepeatedCasesByTime")
+    public ReturnBO countRepeatedCasesByTime(@RequestBody CountRepeateVo countRepeateVo) {
+        try{
+            // countRepeateVo.setGroupByCaseType("true");
+            // List<CountRepeateDto> countRepeateDtoList = service.countRepeatedCases(countRepeateVo);
+            // return ReturnSucUtils.getRepInfo("请求成功",countRepeateDtoList);
+
+            DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            // 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) {
+            //     return Map.of("days", getDaysList(start, end));
+            // } else if ((daysBetween >= 15) && (daysBetween < 365)) {
+            //     return Map.of("months", getMonthsList(start, end));
+            // } else {
+            //     return Map.of("years", getYearsList(start, end));
+            // }
+
+            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("day");
+            } else if ((daysBetween >= 15) && (daysBetween < 365)) {
+                countRepeateVo.setGroupByTime("month");
+            } else {
+                countRepeateVo.setGroupByTime("year");
+            }
+            List<CountRepeateDto> countRepeateDtoList = service.countRepeatedCases(countRepeateVo);
+            return ReturnSucUtils.getRepInfo("请求成功",countRepeateDtoList);
+        }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());
+    }
 }

--
Gitblit v1.8.0