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/service/AnalysisService.java | 40 +----
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java | 190 ++++++++++++++++++++++++++-
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml | 69 +++++++++
dyh-service/dyh-mediate/src/main/java/cn/huge/module/ai/controller/domain/vo/AiRequestVo.java | 1
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/dto/CountRepeateDto.java | 15 ++
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/vo/CountRepeateVo.java | 58 ++++++++
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/AnalysisMapper.java | 7
7 files changed, 339 insertions(+), 41 deletions(-)
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/ai/controller/domain/vo/AiRequestVo.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/ai/controller/domain/vo/AiRequestVo.java
index a7ba869..e3d3dde 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/ai/controller/domain/vo/AiRequestVo.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/ai/controller/domain/vo/AiRequestVo.java
@@ -9,4 +9,5 @@
private String caseDes;
private String caseClaim;
private String caseId;
+
}
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());
+ }
}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/AnalysisMapper.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/AnalysisMapper.java
index a78f61d..a12cd5b 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/AnalysisMapper.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/AnalysisMapper.java
@@ -1,14 +1,12 @@
package cn.huge.module.analysis.dao.mapper;
-import cn.huge.module.cases.domain.dto.*;
+import cn.huge.module.analysis.domain.dto.CountRepeateDto;
+import cn.huge.module.analysis.domain.vo.CountRepeateVo;
import cn.huge.module.cases.domain.po.CaseInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Param;
-import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Repository;
import java.util.List;
-import java.util.Map;
/**
* @title: 纠纷信息主表持久层业务处理
@@ -21,6 +19,7 @@
@Repository
public interface AnalysisMapper extends BaseMapper<CaseInfo>{
+ List<CountRepeateDto> countRepeatedCases(CountRepeateVo countRepeateVo);
}
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 af7666f..20a82d1 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
@@ -199,4 +199,73 @@
<include refid="statisticsSuperviseAVG-wherePart"/>
</select>
+ <!-- 统计重复来访案件数量 -->
+ <select id="countRepeatedCases" resultType="cn.huge.module.analysis.domain.dto.CountRepeateDto" parameterType="cn.huge.module.analysis.domain.vo.CountRepeateVo">
+ WITH RepeatedPersons AS (
+ SELECT true_name, mobile, certi_no
+ FROM gzdyh_test.dyh_case_person
+ WHERE per_type = '15_020008-1'
+ AND per_class = '09_01001-1'
+ AND certi_type = '09_00015-1'
+ GROUP BY true_name, mobile, certi_no
+ HAVING COUNT(*) > 1
+ ),
+ MinCaseIds AS (
+ SELECT rp.true_name, rp.mobile, rp.certi_no, MIN(p.case_id) as min_case_id
+ FROM RepeatedPersons rp
+ JOIN gzdyh_test.dyh_case_person p ON rp.true_name = p.true_name AND rp.mobile = p.mobile AND rp.certi_no = p.certi_no
+ GROUP BY rp.true_name, rp.mobile, rp.certi_no
+ ),
+ FilteredCases AS (
+ SELECT p.case_id
+ FROM gzdyh_test.dyh_case_person p
+ JOIN RepeatedPersons rp ON p.true_name = rp.true_name AND p.mobile = rp.mobile AND p.certi_no = rp.certi_no
+ JOIN MinCaseIds mci ON rp.true_name = mci.true_name AND rp.mobile = mci.mobile AND rp.certi_no = mci.certi_no
+ WHERE p.case_id != mci.min_case_id
+ )
+ SELECT
+ <if test="groupByCaseType != null and groupByCaseType != ''">
+ case_type_first_name as groupByType,
+ </if>
+ <if test="groupByArea != null and groupByArea != ''">
+ area_name as groupByType,
+ </if>
+ <if test="groupByRoad != null and groupByRoad != ''">
+ road_name as groupByType,
+ </if>
+ <if test="groupByTime != null and groupByTime != '' and groupByTime == 'month'">
+ DATE_FORMAT(ci.create_time, '%Y-%m') as groupByType,
+ </if>
+ COUNT(DISTINCT fc.case_id) as repeatCount
+ FROM FilteredCases fc
+ JOIN gzdyh_test.dyh_case_info ci ON fc.case_id = ci.id
+ JOIN gzdyh_test.dyh_case_info_unfold cui ON ci.id = cui.id
+ JOIN gzdyh_test.dyh_ct_unit unit ON cui.mediate_unit_id = unit.id
+ WHERE 1=1
+ <if test="createTimeStart != null and createTimeStart != '' and createTimeEnd != null and createTimeEnd != ''">
+ AND ci.create_time BETWEEN #{createTimeStart} AND #{createTimeEnd}
+ </if>
+ <if test="queCity != null and queCity != ''">
+ AND unit.city = #{queCity}
+ </if>
+ <if test="queArea != null and queArea != ''">
+ AND unit.area = #{queArea}
+ </if>
+ <if test="queRoad != null and queRoad != ''">
+ AND unit.road = #{queRoad}
+ </if>
+ <if test="groupByCaseType != null and groupByCaseType != ''">
+ GROUP BY case_type_first_name
+ </if>
+ <if test="groupByArea != null and groupByArea != ''">
+ GROUP BY area_name
+ </if>
+ <if test="groupByRoad != null and groupByRoad != ''">
+ GROUP BY road_name
+ </if>
+ <if test="groupByTime != null and groupByTime != ''">
+ GROUP BY groupByType
+ </if>
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/dto/CountRepeateDto.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/dto/CountRepeateDto.java
new file mode 100644
index 0000000..ae123b8
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/dto/CountRepeateDto.java
@@ -0,0 +1,15 @@
+package cn.huge.module.analysis.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class CountRepeateDto {
+ /**
+ *聚合类型
+ */
+ private String groupByType;
+ /**
+ * 数量
+ */
+ private Integer repeatCount;
+}
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
new file mode 100644
index 0000000..28d6297
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/vo/CountRepeateVo.java
@@ -0,0 +1,58 @@
+package cn.huge.module.analysis.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+@Data
+public class CountRepeateVo {
+ /**
+ * 事项进度,1:来访登记,2:事件流转,3:办理反馈,4:结案审核,5:当事人评价,6:结案归档,7:不予受理
+ */
+ private Integer processStatus;
+
+ /**
+ * 创建时间区间
+ */
+ private String createTimeStart;
+ private String createTimeEnd;
+
+ /**
+ * 案件案由类型
+ */
+ private String caseType;
+
+ /**
+ * 归属地编码-市
+ */
+ private String queCity;
+
+ /**
+ * 归属地编码-区
+ */
+ private String queArea;
+
+ /**
+ * 归属地编码-街道
+ */
+ private String queRoad;
+
+ /**
+ * 查询时间聚合标记
+ */
+ private String groupByTime;
+
+ /**
+ * 查询案件类型聚合标记
+ */
+ private String groupByCaseType;
+
+ /**
+ * 查询归属地-区编码聚合标记
+ */
+ private String groupByArea;
+
+ /**
+ * 查询归属地-街道编码聚合标记
+ */
+ private String groupByRoad;
+}
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 0aaf9a6..4574636 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,45 +1,18 @@
package cn.huge.module.analysis.service;
-import cn.huge.base.common.exception.ServiceException;
-import cn.huge.base.common.utils.*;
import cn.huge.module.analysis.dao.mapper.AnalysisMapper;
+import cn.huge.module.analysis.domain.dto.CountRepeateDto;
+import cn.huge.module.analysis.domain.vo.CountRepeateVo;
import cn.huge.module.cases.dao.mapper.CaseInfoMapper;
-import cn.huge.module.cases.domain.dto.*;
-import cn.huge.module.cases.domain.po.CaseAgent;
import cn.huge.module.cases.domain.po.CaseInfo;
-import cn.huge.module.cases.domain.po.CaseInfoUnfold;
-import cn.huge.module.cases.domain.po.CasePerson;
-import cn.huge.module.cases.service.*;
-import cn.huge.module.client.api.impl.CustClientImpl;
-import cn.huge.module.client.api.impl.SysClientImpl;
import cn.huge.module.client.api.impl.UtilsClientImpl;
-import cn.huge.module.constant.BaseConsts;
-import cn.huge.module.cust.dto.CtUserDTO;
-import cn.huge.module.cust.dto.PaUserDTO;
-import cn.huge.module.draft.service.CasedraftInfoService;
-import cn.huge.module.mediate.constant.*;
-import cn.huge.module.mediate.dto.WechatBindCaseDTO;
-import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO;
-import cn.huge.module.sys.dto.QueAddrBaseDTO;
-import cn.huge.module.sys.dto.QueAreaDTO;
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.io.IOException;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.List;
/**
* @author wangwh
@@ -60,6 +33,13 @@
@Autowired
private UtilsClientImpl utilsClient;
+ @Autowired
+ private AnalysisMapper analysisMapper;
+
+ public List<CountRepeateDto> countRepeatedCases(CountRepeateVo countRepeateVo) {
+ return analysisMapper.countRepeatedCases(countRepeateVo);
+ }
+
--
Gitblit v1.8.0