| | |
| | | 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.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; |
| | | |
| | | /** |
| | |
| | | @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; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |