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 { @Autowired private CaseInfoMapper mapper; @Autowired private UtilsClientImpl utilsClient; @Autowired private AnalysisMapper analysisMapper; // 统计重复来访案件数量 public List countRepeatedCases(CountRepeateVo countRepeateVo) { return analysisMapper.countRepeatedCases(countRepeateVo); } public List 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 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 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 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; } }