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;
|
import cn.huge.module.cases.dao.mapper.CaseInfoMapper;
|
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;
|
|
/**
|
* @author wangwh
|
* @version 1.0.0
|
* @title: 纠纷信息主表业务逻辑处理
|
* @Description 纠纷信息主表业务逻辑处理
|
* @company hugeinfo
|
* @Time 2024-08-27 10:00:57
|
*/
|
@Slf4j
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class AnalysisService extends ServiceImpl<AnalysisMapper, CaseInfo> {
|
|
@Autowired
|
private CaseInfoMapper mapper;
|
|
@Autowired
|
private UtilsClientImpl utilsClient;
|
|
@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;
|
|
}
|
|
|
|
|
}
|