From 411ebc9c06c2f987b4d8deb2a9a1496ab39b55ea Mon Sep 17 00:00:00 2001 From: huangh <hshgjzd5@163.com> Date: Mon, 28 Oct 2024 16:34:39 +0800 Subject: [PATCH] Merge branch 'faeture/gzdyh_countRepeated_20241025' into gzdyh_test --- 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 | 201 +++++++++++++++++++++++++++- dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml | 77 +++++++++++ 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, 358 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..97af59e 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,189 @@ @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{ + + 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); + }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..57d00e0 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,81 @@ <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 != ''"> + <if test="groupByTime == 'day'"> + DATE_FORMAT(ci.create_time, '%Y-%m-%d') as groupByType, + </if> + <if test="groupByTime == 'month'"> + DATE_FORMAT(ci.create_time, '%Y-%m') as groupByType, + </if> + <if test="groupByTime == 'year'"> + DATE_FORMAT(ci.create_time, '%Y') as groupByType, + </if> + </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