package cn.huge.module.analysis.service;
|
|
import cn.huge.base.common.exception.ServiceException;
|
import cn.huge.base.common.utils.ObjectUtils;
|
import cn.huge.module.analysis.dao.mapper.AnalysisMapper;
|
import cn.huge.module.analysis.domain.dto.*;
|
import cn.huge.module.analysis.domain.dto.CountRepeateDto;
|
import cn.huge.module.analysis.domain.vo.CountRepeateVo;
|
import cn.huge.module.cases.domain.dto.CasePageDTO;
|
import cn.huge.module.cases.domain.po.CaseInfo;
|
import cn.huge.module.client.api.impl.CustClientImpl;
|
import cn.huge.module.cust.dto.CtUnitDTO;
|
import cn.huge.module.cust.dto.CtUserDTO;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import dm.jdbc.util.StringUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.flowable.common.engine.impl.util.CollectionUtil;
|
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.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import java.text.DecimalFormat;
|
import java.util.*;
|
import java.time.LocalDate;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
|
/**
|
* @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 AnalysisMapper mapper;
|
|
@Autowired
|
private CustClientImpl custClient;
|
|
/**
|
* 统计重复来访案件数量
|
* <p>
|
* 此方法用于计算在特定条件下重复来访的案件数量它接收一个 CountRepeateVo 对象作为参数,
|
* 该对象包含了查询条件,如时间范围、案件类型等信息通过调用 analysisMapper 中的
|
* countRepeatedCases 方法,传递这些查询条件,从而获取重复来访案件的统计结果
|
*
|
* @param countRepeateVo 包含查询条件的 CountRepeateVo 对象,用于指定统计的范围和条件
|
* @return 返回一个 CountRepeateDto 对象列表,每个对象代表一组符合查询条件的重复来访案件及其数量
|
*/
|
public List<CountRepeateDto> countRepeatedCases(CountRepeateVo countRepeateVo) {
|
return mapper.countRepeatedCases(countRepeateVo);
|
}
|
|
/**
|
* 根据时间统计重复案件的数量
|
* 该方法根据提供的查询条件(创建时间或关闭时间),计算在指定时间范围内重复出现的案件数量
|
* 并根据时间范围的长度(天、月、年)对结果进行分组
|
*
|
* @param countRepeateVo 包含查询条件的CountRepeateVo对象,用于指定时间范围
|
* @return 返回一个CountRepeateDto对象列表,每个对象代表在指定时间范围内按天、月或年分组的重复案件数量
|
*/
|
public List<CountRepeateDto> countRepeatedCasesByTime(CountRepeateVo countRepeateVo) {
|
// 定义日期时间格式器,用于解析输入的日期时间字符串
|
DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
// DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
// 定义时间类型字符串常量,用于后续根据时间范围设置查询条件
|
String dayTypeStr = "day";
|
String monthTypeStr = "month";
|
String yearTypeStr = "year";
|
|
LocalDate start;
|
LocalDate end;
|
|
// 检查是否提供了结案时间范围,如果没有,则使用登记时间范围
|
if ((StringUtil.isEmpty(countRepeateVo.getCloseStart())) && (StringUtil.isEmpty(countRepeateVo.getCloseEnd()))) {
|
// 判断 countRepeateVo.getCreateStart() 和 countRepeateVo.getCreateEnd() 长度是否和10
|
// 如果长度为10,表示只有日期没有时间,需要添加时间
|
if (countRepeateVo.getCreateStart().length() <= 10) {
|
countRepeateVo.setCreateStart(countRepeateVo.getCreateStart() + " 00:00:00");
|
countRepeateVo.setCreateEnd(countRepeateVo.getCreateEnd() + " 23:59:59");
|
}
|
// 解析开始和结束日期时间
|
start = LocalDate.parse(countRepeateVo.getCreateStart(), DATE_TIME_FORMATTER);
|
end = LocalDate.parse(countRepeateVo.getCreateEnd(), DATE_TIME_FORMATTER);
|
} else {
|
// 如果提供了结案时间范围,进行类似的处理
|
if (countRepeateVo.getCloseStart().length() <= 10) {
|
countRepeateVo.setCloseStart(countRepeateVo.getCloseStart() + " 00:00:00");
|
countRepeateVo.setCloseEnd(countRepeateVo.getCloseEnd() + " 23:59:59");
|
}
|
start = LocalDate.parse(countRepeateVo.getCloseStart(), DATE_TIME_FORMATTER);
|
end = LocalDate.parse(countRepeateVo.getCloseEnd(), 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];
|
// 设置格式化后的分组类型
|
countRepeateDto.setGroupByType(lastElement + timeFormatter);
|
}
|
}
|
// 返回结果列表
|
return countRepeateDtoList;
|
}
|
|
/**
|
* 根据地区统计重复案件的数量
|
* 此方法根据输入的查询条件(包括街道、区域和城市编码),决定统计时是按区域还是按街道聚合
|
* 然后调用 countRepeatedCases 方法进行统计,并根据结果调整分组类型描述
|
*
|
* @param countRepeateVo 包含查询条件的对象,用于指定统计范围
|
* @return 返回一个包含统计结果的列表
|
*/
|
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 为空且 queArea 不为空,则设置 groupByRoad 为 true 根据 街道 聚合
|
else if (StringUtil.isEmpty(countRepeateVo.getQueRoad()) &&
|
!StringUtil.isEmpty(countRepeateVo.getQueArea())) {
|
countRepeateVo.setGroupByRoad("true");
|
}
|
|
// 调用 countRepeatedCases 方法进行统计
|
List<CountRepeateDto> countRepeateDtoList = this.countRepeatedCases(countRepeateVo);
|
// 检查统计结果的第一个元素的 groupByType 是否为空,如果为空则设置为 "本级"
|
if (StringUtil.isEmpty(countRepeateDtoList.get(0).getGroupByType())) {
|
countRepeateDtoList.get(0).setGroupByType("本级");
|
}
|
// 返回统计结果列表
|
return countRepeateDtoList;
|
|
}
|
|
/**
|
* 效能分析-平均时长
|
*
|
* @param terms 条件
|
*/
|
public AvgDurationDTO AvgDuration(Map<String, Object> terms, CtUserDTO loginUser, CtUnitDTO ctUnitDTO) {
|
try {
|
//拷贝一个条件,避免影响原参数
|
Map<String, Object> minimumPermissionsTerms = new HashMap<>(terms);
|
AvgDurationDTO avgDurationDTO = new AvgDurationDTO();
|
AvgDurationDTO avgDurationDTO1 = mapper.statisticsAVG(minimumPermissionsTerms);
|
AvgDurationDTO avgDurationDTO2 = mapper.statisticsApplyAVG(minimumPermissionsTerms);
|
AvgDurationDTO avgDurationDTO3 = mapper.statisticsSuperviseAVG(minimumPermissionsTerms);
|
//合并结果
|
if (ObjectUtils.isNotEmpty(avgDurationDTO1)) {
|
avgDurationDTO.setFp(avgDurationDTO1.getFp());
|
avgDurationDTO.setSl(avgDurationDTO1.getSl());
|
avgDurationDTO.setBlz(avgDurationDTO1.getBlz());
|
}
|
if (ObjectUtils.isNotEmpty(avgDurationDTO2)) {
|
avgDurationDTO.setSp(avgDurationDTO2.getSp());
|
}
|
if (ObjectUtils.isNotEmpty(avgDurationDTO3)) {
|
avgDurationDTO.setDb(avgDurationDTO3.getDb());
|
}
|
if (!terms.containsKey("queCity")) {
|
Map<String, Object> AVGTerms = new HashMap<>(terms);
|
if (terms.containsKey("queVillage")) {
|
AVGTerms.remove("queVillage");
|
AVGTerms.put("queRoad", ctUnitDTO.getRoad());
|
} else if (terms.containsKey("queRoad")) {
|
AVGTerms.remove("queRoad");
|
AVGTerms.put("queArea", ctUnitDTO.getArea());
|
} else if (terms.containsKey("queArea")) {
|
AVGTerms.remove("queArea");
|
AVGTerms.put("queCity", ctUnitDTO.getCity());
|
}
|
|
|
//查询平均值
|
AvgDurationDTO avgDurationDTOpjz1 = mapper.statisticsAVG(AVGTerms);
|
AvgDurationDTO avgDurationDTOpjz2 = mapper.statisticsApplyAVG(AVGTerms);
|
AvgDurationDTO avgDurationDTOpjz3 = mapper.statisticsSuperviseAVG(AVGTerms);
|
//计算、封装平均值
|
if (ObjectUtils.isNotEmpty(avgDurationDTO)) {
|
if (ObjectUtils.isNotEmpty(avgDurationDTOpjz1)) {
|
double fp = avgDurationDTO.getFp();
|
double fppjz = avgDurationDTOpjz1.getFp();
|
if (fppjz != 0.0) {
|
double pfPercentage = ((fp - fppjz) / fppjz) * 100;
|
avgDurationDTO.setFppjz(pfPercentage);
|
} else {
|
if (fp != 0.0) {
|
avgDurationDTO.setFppjz(100.0);
|
} else {
|
avgDurationDTO.setFppjz(0.0);
|
}
|
}
|
|
double sl = avgDurationDTO.getSl();
|
double slpjz = avgDurationDTOpjz1.getSl();
|
if (slpjz != 0.0) {
|
double slPercentage = ((sl - slpjz) / slpjz) * 100;
|
avgDurationDTO.setSlpjz(slPercentage);
|
} else {
|
if (sl != 0.0) {
|
avgDurationDTO.setSlpjz(100.0);
|
} else {
|
avgDurationDTO.setSlpjz(0.0);
|
}
|
}
|
|
double blz = avgDurationDTO.getBlz();
|
double blzpjz = avgDurationDTOpjz1.getBlz();
|
if (blzpjz != 0.0) {
|
double blzPercentage = ((blz - blzpjz) / blzpjz) * 100;
|
avgDurationDTO.setBlzpjz(blzPercentage);
|
} else {
|
if (blz != 0.0) {
|
avgDurationDTO.setBlzpjz(100.0);
|
} else {
|
avgDurationDTO.setBlzpjz(0.0);
|
}
|
}
|
}
|
if (ObjectUtils.isNotEmpty(avgDurationDTOpjz2)) {
|
double sp = avgDurationDTO.getSp();
|
double sppjz = avgDurationDTOpjz2.getSp();
|
if (sppjz != 0.0) {
|
double spPercentage = ((sp - sppjz) / sppjz) * 100;
|
avgDurationDTO.setSppjz(spPercentage);
|
} else {
|
if (sp != 0.0) {
|
avgDurationDTO.setSppjz(100.0);
|
} else {
|
avgDurationDTO.setSppjz(0.0);
|
}
|
}
|
}
|
if (ObjectUtils.isNotEmpty(avgDurationDTOpjz3)) {
|
double db = avgDurationDTO.getDb();
|
double dbpjz = avgDurationDTOpjz3.getDb();
|
if (dbpjz != 0.0) {
|
double dbPercentage = ((db - dbpjz) / dbpjz) * 100;
|
avgDurationDTO.setDbpjz(dbPercentage);
|
} else {
|
if (db != 0.0) {
|
avgDurationDTO.setDbpjz(100.0);
|
} else {
|
avgDurationDTO.setDbpjz(0.0);
|
}
|
|
}
|
}
|
}
|
}
|
//小数点取后两位
|
DecimalFormat df = new DecimalFormat("#.00");
|
avgDurationDTO.setFp(Double.parseDouble(df.format(avgDurationDTO.getFp())));
|
avgDurationDTO.setFppjz(Double.parseDouble(df.format(avgDurationDTO.getFppjz())));
|
avgDurationDTO.setSl(Double.parseDouble(df.format(avgDurationDTO.getSl())));
|
avgDurationDTO.setSlpjz(Double.parseDouble(df.format(avgDurationDTO.getSlpjz())));
|
avgDurationDTO.setBlz(Double.parseDouble(df.format(avgDurationDTO.getBlz())));
|
avgDurationDTO.setBlzpjz(Double.parseDouble(df.format(avgDurationDTO.getBlzpjz())));
|
avgDurationDTO.setSp(Double.parseDouble(df.format(avgDurationDTO.getSp())));
|
avgDurationDTO.setSppjz(Double.parseDouble(df.format(avgDurationDTO.getSppjz())));
|
avgDurationDTO.setDb(Double.parseDouble(df.format(avgDurationDTO.getDb())));
|
avgDurationDTO.setDbpjz(Double.parseDouble(df.format(avgDurationDTO.getDbpjz())));
|
return avgDurationDTO;
|
} catch (Exception e) {
|
log.error("[AnalysisService.AvgDuration]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.AvgDuration", e);
|
}
|
}
|
|
/**
|
* 效能分析-平均时长-分组列表
|
*
|
* @param terms 条件
|
*/
|
public AvgDurationAllDTO AvgDurationGroup(Map<String, Object> terms, int sortType, int sortColmn) {
|
try {
|
//获取所有下属组织
|
List<String> regionList = mapper.listRegion(terms);
|
regionList.add(0, "本级");
|
AvgDurationAllDTO avgDurationAllDTO = new AvgDurationAllDTO();
|
//查出各地区数据
|
List<AvgDurationGroupDTO> avgDurationGroupDTOList = mapper.statisticsGroupAVG(terms);
|
List<AvgDurationGroupDTO> avgDurationGroupDTOList1 = mapper.statisticsApplyGroup(terms);
|
List<AvgDurationGroupDTO> avgDurationGroupDTOList2 = mapper.statisticsSuperviseGroup(terms);
|
//把审批和督办的数据组装到总数据中
|
List<AvgDurationGroupDTO> avgDurationGroupDTOListOld = new ArrayList<>();
|
for (String region : regionList) {
|
boolean flag = false;
|
AvgDurationGroupDTO avgDurationGroupDTOOld = new AvgDurationGroupDTO();
|
avgDurationGroupDTOOld.setGroupName(region);
|
for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOList) {
|
if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO.getGroupName())) {
|
flag = true;
|
avgDurationGroupDTOOld.setSl(avgDurationGroupDTO.getSl());
|
avgDurationGroupDTOOld.setSls(avgDurationGroupDTO.getSls());
|
avgDurationGroupDTOOld.setFp(avgDurationGroupDTO.getFp());
|
avgDurationGroupDTOOld.setFps(avgDurationGroupDTO.getFps());
|
avgDurationGroupDTOOld.setBlz(avgDurationGroupDTO.getBlz());
|
avgDurationGroupDTOOld.setBls(avgDurationGroupDTO.getBls());
|
}
|
}
|
for (AvgDurationGroupDTO avgDurationGroupDTO1 : avgDurationGroupDTOList1) {
|
if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO1.getGroupName())) {
|
flag = true;
|
avgDurationGroupDTOOld.setSp(avgDurationGroupDTO1.getSp());
|
avgDurationGroupDTOOld.setSps(avgDurationGroupDTO1.getSps());
|
}
|
}
|
for (AvgDurationGroupDTO avgDurationGroupDTO2 : avgDurationGroupDTOList2) {
|
if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO2.getGroupName())) {
|
flag = true;
|
avgDurationGroupDTOOld.setDb(avgDurationGroupDTO2.getDb());
|
avgDurationGroupDTOOld.setHfs(avgDurationGroupDTO2.getHfs());
|
}
|
}
|
if (flag) {
|
avgDurationGroupDTOListOld.add(avgDurationGroupDTOOld);
|
}
|
}
|
|
//设置平均值对象
|
AvgDurationGroupDTO avgDurationGroupDTOAll = new AvgDurationGroupDTO();
|
avgDurationGroupDTOAll.setGroupName("平均值");
|
//设置小数点取后两位方法
|
DecimalFormat df = new DecimalFormat("#.00");
|
//生成不参与计算的下属组织数据,
|
List<AvgDurationGroupDTO> avgDurationGroupDTOListNew = new ArrayList<>();
|
int fpsSize = 0;
|
int slsSize = 0;
|
int blsSize = 0;
|
int spsSize = 0;
|
int hfsSize = 0;
|
if (0 == sortColmn || 0 == sortType) {
|
for (String region : regionList) {
|
AvgDurationGroupDTO avgDurationGroupDTONew = new AvgDurationGroupDTO();
|
for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOListOld) {
|
if (region.equals(avgDurationGroupDTO.getGroupName())) {
|
if (0 != avgDurationGroupDTO.getFps()) {
|
fpsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getSls()) {
|
slsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getBls()) {
|
blsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getSps()) {
|
spsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getHfs()) {
|
hfsSize += 1;
|
}
|
|
//设置小数点取后两位
|
avgDurationGroupDTO.setFp(Double.parseDouble(df.format(avgDurationGroupDTO.getFp())));
|
avgDurationGroupDTO.setSl(Double.parseDouble(df.format(avgDurationGroupDTO.getSl())));
|
avgDurationGroupDTO.setBlz(Double.parseDouble(df.format(avgDurationGroupDTO.getBlz())));
|
avgDurationGroupDTO.setSp(Double.parseDouble(df.format(avgDurationGroupDTO.getSp())));
|
avgDurationGroupDTO.setDb(Double.parseDouble(df.format(avgDurationGroupDTO.getDb())));
|
BeanUtils.copyProperties(avgDurationGroupDTO, avgDurationGroupDTONew);
|
//累加各项数据
|
avgDurationGroupDTOAll.setFp(avgDurationGroupDTOAll.getFp() + avgDurationGroupDTO.getFp() * avgDurationGroupDTO.getFps());
|
avgDurationGroupDTOAll.setFps(avgDurationGroupDTOAll.getFps() + avgDurationGroupDTO.getFps());
|
avgDurationGroupDTOAll.setSl(avgDurationGroupDTOAll.getSl() + avgDurationGroupDTO.getSl() * avgDurationGroupDTO.getSls());
|
avgDurationGroupDTOAll.setSls(avgDurationGroupDTOAll.getSls() + avgDurationGroupDTO.getSls());
|
avgDurationGroupDTOAll.setBlz(avgDurationGroupDTOAll.getBlz() + avgDurationGroupDTO.getBlz() * avgDurationGroupDTO.getBls());
|
avgDurationGroupDTOAll.setBls(avgDurationGroupDTOAll.getBls() + avgDurationGroupDTO.getBls());
|
avgDurationGroupDTOAll.setSp(avgDurationGroupDTOAll.getSp() + avgDurationGroupDTO.getSp() * avgDurationGroupDTO.getSps());
|
avgDurationGroupDTOAll.setSps(avgDurationGroupDTOAll.getSps() + avgDurationGroupDTO.getSps());
|
avgDurationGroupDTOAll.setDb(avgDurationGroupDTOAll.getDb() + avgDurationGroupDTO.getDb() * avgDurationGroupDTO.getHfs());
|
avgDurationGroupDTOAll.setHfs(avgDurationGroupDTOAll.getHfs() + avgDurationGroupDTO.getHfs());
|
}
|
}
|
avgDurationGroupDTONew.setGroupName(region);
|
avgDurationGroupDTOListNew.add(avgDurationGroupDTONew);
|
}
|
} else {
|
List<AvgDurationGroupDTO> satisfiedList = new ArrayList<>();
|
List<AvgDurationGroupDTO> notSatisfiedList = new ArrayList<>();
|
//根据排序条件把数量为0的和不为0的数据分开,将不为0的数据排序
|
if (1 == sortColmn) {
|
for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) {
|
if (0 != avgDurationAllDTO1.getFps()) {
|
satisfiedList.add(avgDurationAllDTO1);
|
} else {
|
notSatisfiedList.add(avgDurationAllDTO1);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getFp));
|
} else {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getFp).reversed());
|
}
|
} else if (2 == sortColmn) {
|
for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) {
|
if (0 != avgDurationAllDTO1.getSls()) {
|
satisfiedList.add(avgDurationAllDTO1);
|
} else {
|
notSatisfiedList.add(avgDurationAllDTO1);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSl));
|
} else {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSl).reversed());
|
}
|
} else if (3 == sortColmn) {
|
for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) {
|
if (0 != avgDurationAllDTO1.getBls()) {
|
satisfiedList.add(avgDurationAllDTO1);
|
} else {
|
notSatisfiedList.add(avgDurationAllDTO1);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getBlz));
|
} else {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getBlz).reversed());
|
}
|
} else if (4 == sortColmn) {
|
for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) {
|
if (0 != avgDurationAllDTO1.getSls()) {
|
satisfiedList.add(avgDurationAllDTO1);
|
} else {
|
notSatisfiedList.add(avgDurationAllDTO1);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSp));
|
} else {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSp).reversed());
|
}
|
} else if (5 == sortColmn) {
|
for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) {
|
if (0 != avgDurationAllDTO1.getHfs()) {
|
satisfiedList.add(avgDurationAllDTO1);
|
} else {
|
notSatisfiedList.add(avgDurationAllDTO1);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getDb));
|
} else {
|
satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getDb).reversed());
|
}
|
}
|
//清除列表数据,把不为0的数据先放入集合中,再将为0的数据放入集合中
|
avgDurationGroupDTOListOld.clear();
|
avgDurationGroupDTOListOld.addAll(satisfiedList);
|
avgDurationGroupDTOListOld.addAll(notSatisfiedList);
|
for (String region : regionList) {
|
boolean flag = true;
|
AvgDurationGroupDTO avgDurationGroupDTONew = new AvgDurationGroupDTO();
|
for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOListOld) {
|
if (region.equals(avgDurationGroupDTO.getGroupName())) {
|
if (0 != avgDurationGroupDTO.getFps()) {
|
fpsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getSls()) {
|
slsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getBls()) {
|
blsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getSps()) {
|
spsSize += 1;
|
}
|
if (0 != avgDurationGroupDTO.getHfs()) {
|
hfsSize += 1;
|
}
|
flag = false;
|
//设置小数点取后两位
|
avgDurationGroupDTO.setFp(Double.parseDouble(df.format(avgDurationGroupDTO.getFp())));
|
avgDurationGroupDTO.setSl(Double.parseDouble(df.format(avgDurationGroupDTO.getSl())));
|
avgDurationGroupDTO.setBlz(Double.parseDouble(df.format(avgDurationGroupDTO.getBlz())));
|
avgDurationGroupDTO.setSp(Double.parseDouble(df.format(avgDurationGroupDTO.getSp())));
|
avgDurationGroupDTO.setDb(Double.parseDouble(df.format(avgDurationGroupDTO.getDb())));
|
|
//累加各项数据
|
avgDurationGroupDTOAll.setFp(avgDurationGroupDTOAll.getFp() + avgDurationGroupDTO.getFp() * avgDurationGroupDTO.getFps());
|
avgDurationGroupDTOAll.setFps(avgDurationGroupDTOAll.getFps() + avgDurationGroupDTO.getFps());
|
avgDurationGroupDTOAll.setSl(avgDurationGroupDTOAll.getSl() + avgDurationGroupDTO.getSl() * avgDurationGroupDTO.getSls());
|
avgDurationGroupDTOAll.setSls(avgDurationGroupDTOAll.getSls() + avgDurationGroupDTO.getSls());
|
avgDurationGroupDTOAll.setBlz(avgDurationGroupDTOAll.getBlz() + avgDurationGroupDTO.getBlz() * avgDurationGroupDTO.getBls());
|
avgDurationGroupDTOAll.setBls(avgDurationGroupDTOAll.getBls() + avgDurationGroupDTO.getBls());
|
avgDurationGroupDTOAll.setSp(avgDurationGroupDTOAll.getSp() + avgDurationGroupDTO.getSp() * avgDurationGroupDTO.getSps());
|
avgDurationGroupDTOAll.setSps(avgDurationGroupDTOAll.getSps() + avgDurationGroupDTO.getSps());
|
avgDurationGroupDTOAll.setDb(avgDurationGroupDTOAll.getDb() + avgDurationGroupDTO.getDb() * avgDurationGroupDTO.getHfs());
|
avgDurationGroupDTOAll.setHfs(avgDurationGroupDTOAll.getHfs() + avgDurationGroupDTO.getHfs());
|
}
|
}
|
if (flag) {
|
avgDurationGroupDTONew.setGroupName(region);
|
avgDurationGroupDTOListNew.add(avgDurationGroupDTONew);
|
}
|
}
|
avgDurationGroupDTOListNew.addAll(0, avgDurationGroupDTOListOld);
|
}
|
|
|
//计算平均值
|
if (0 == avgDurationGroupDTOAll.getFps() || 0.0 == avgDurationGroupDTOAll.getFp()) {
|
avgDurationGroupDTOAll.setFp(0.0);
|
} else {
|
avgDurationGroupDTOAll.setFp(Double.parseDouble(df.format(avgDurationGroupDTOAll.getFp() / avgDurationGroupDTOAll.getFps())));
|
}
|
if (0 != fpsSize && 0 != avgDurationGroupDTOAll.getFps()) {
|
avgDurationGroupDTOAll.setFps(Double.parseDouble(df.format(avgDurationGroupDTOAll.getFps() / fpsSize)));
|
} else {
|
avgDurationGroupDTOAll.setFps(0.0);
|
}
|
|
if (0 == avgDurationGroupDTOAll.getSls() || 0.0 == avgDurationGroupDTOAll.getSl()) {
|
avgDurationGroupDTOAll.setSl(0.0);
|
} else {
|
avgDurationGroupDTOAll.setSl(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSl() / avgDurationGroupDTOAll.getSls())));
|
}
|
if (0 != slsSize && 0 != avgDurationGroupDTOAll.getSls()) {
|
avgDurationGroupDTOAll.setSls(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSls() / slsSize)));
|
} else {
|
avgDurationGroupDTOAll.setSls(0.0);
|
}
|
|
if (0 == avgDurationGroupDTOAll.getBls() || 0.0 == avgDurationGroupDTOAll.getBlz()) {
|
avgDurationGroupDTOAll.setBlz(0.0);
|
} else {
|
avgDurationGroupDTOAll.setBlz(Double.parseDouble(df.format(avgDurationGroupDTOAll.getBlz() / avgDurationGroupDTOAll.getBls())));
|
}
|
if (0 != blsSize && 0 != avgDurationGroupDTOAll.getBls()) {
|
avgDurationGroupDTOAll.setBls(Double.parseDouble(df.format(avgDurationGroupDTOAll.getBls() / blsSize)));
|
} else {
|
avgDurationGroupDTOAll.setBls(0.0);
|
}
|
|
if (0 == avgDurationGroupDTOAll.getSps() || 0.0 == avgDurationGroupDTOAll.getSp()) {
|
avgDurationGroupDTOAll.setSp(0.0);
|
} else {
|
avgDurationGroupDTOAll.setSp(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSp() / avgDurationGroupDTOAll.getSps())));
|
}
|
if (0 != spsSize && 0 != avgDurationGroupDTOAll.getSps()) {
|
avgDurationGroupDTOAll.setSps(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSps() / spsSize)));
|
} else {
|
avgDurationGroupDTOAll.setSps(0.0);
|
}
|
|
if (0 == avgDurationGroupDTOAll.getHfs() || 0.0 == avgDurationGroupDTOAll.getDb()) {
|
avgDurationGroupDTOAll.setDb(0.0);
|
} else {
|
avgDurationGroupDTOAll.setDb(Double.parseDouble(df.format(avgDurationGroupDTOAll.getDb() / avgDurationGroupDTOAll.getHfs())));
|
}
|
if (0 != hfsSize && 0 != avgDurationGroupDTOAll.getHfs()) {
|
avgDurationGroupDTOAll.setHfs(Double.parseDouble(df.format(avgDurationGroupDTOAll.getHfs() / hfsSize)));
|
} else {
|
avgDurationGroupDTOAll.setHfs(0.0);
|
}
|
|
avgDurationAllDTO.setAvgDurationDTO(avgDurationGroupDTOAll);
|
avgDurationAllDTO.setAvgDurationGroupDTOList(avgDurationGroupDTOListNew);
|
return avgDurationAllDTO;
|
} catch (Exception e) {
|
log.error("[AnalysisService.AvgDuration]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.AvgDuration", e);
|
}
|
}
|
|
/**
|
* 效能分析-平均时长-分组列表
|
*
|
* @param terms 条件
|
*/
|
public AvgDurationAllDTO AvgDurationChartsGroup(Map<String, Object> terms) {
|
try {
|
//获取所有下属组织
|
List<String> regionList = mapper.listRegion(terms);
|
regionList.add(0, "本级");
|
AvgDurationAllDTO avgDurationAllDTO = new AvgDurationAllDTO();
|
//查出各地区数据
|
List<AvgDurationGroupDTO> avgDurationGroupDTOList = mapper.statisticsGroupAVG(terms);
|
List<AvgDurationGroupDTO> avgDurationGroupDTOList1 = mapper.statisticsApplyGroup(terms);
|
List<AvgDurationGroupDTO> avgDurationGroupDTOList2 = mapper.statisticsSuperviseGroup(terms);
|
//把审批和督办的数据组装到总数据中
|
List<AvgDurationGroupDTO> avgDurationGroupDTOListOld = new ArrayList<>();
|
for (String region : regionList) {
|
boolean flag = false;
|
AvgDurationGroupDTO avgDurationGroupDTOOld = new AvgDurationGroupDTO();
|
avgDurationGroupDTOOld.setGroupName(region);
|
for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOList) {
|
if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO.getGroupName())) {
|
flag = true;
|
avgDurationGroupDTOOld.setSl(avgDurationGroupDTO.getSl());
|
avgDurationGroupDTOOld.setSls(avgDurationGroupDTO.getSls());
|
avgDurationGroupDTOOld.setFp(avgDurationGroupDTO.getFp());
|
avgDurationGroupDTOOld.setFps(avgDurationGroupDTO.getFps());
|
avgDurationGroupDTOOld.setBlz(avgDurationGroupDTO.getBlz());
|
avgDurationGroupDTOOld.setBls(avgDurationGroupDTO.getBls());
|
}
|
}
|
for (AvgDurationGroupDTO avgDurationGroupDTO1 : avgDurationGroupDTOList1) {
|
if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO1.getGroupName())) {
|
flag = true;
|
avgDurationGroupDTOOld.setSp(avgDurationGroupDTO1.getSp());
|
avgDurationGroupDTOOld.setSps(avgDurationGroupDTO1.getSps());
|
}
|
}
|
for (AvgDurationGroupDTO avgDurationGroupDTO2 : avgDurationGroupDTOList2) {
|
if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO2.getGroupName())) {
|
flag = true;
|
avgDurationGroupDTOOld.setDb(avgDurationGroupDTO2.getDb());
|
avgDurationGroupDTOOld.setHfs(avgDurationGroupDTO2.getHfs());
|
}
|
}
|
if (flag) {
|
avgDurationGroupDTOListOld.add(avgDurationGroupDTOOld);
|
}
|
}
|
|
//设置小数点取后两位方法
|
DecimalFormat df = new DecimalFormat("#.00");
|
|
//生成不参与计算的下属组织数据
|
List<AvgDurationGroupDTO> avgDurationGroupDTOListNew = new ArrayList<>();
|
for (String region : regionList) {
|
AvgDurationGroupDTO avgDurationGroupDTONew = new AvgDurationGroupDTO();
|
for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOListOld) {
|
if (region.equals(avgDurationGroupDTO.getGroupName())) {
|
avgDurationGroupDTONew.setFps(avgDurationGroupDTO.getFps());
|
avgDurationGroupDTONew.setSls(avgDurationGroupDTO.getSls());
|
avgDurationGroupDTONew.setBls(avgDurationGroupDTO.getBls());
|
avgDurationGroupDTONew.setSps(avgDurationGroupDTO.getSps());
|
avgDurationGroupDTONew.setHfs(avgDurationGroupDTO.getHfs());
|
//设置小数点取后两位
|
avgDurationGroupDTONew.setFp(Double.parseDouble(df.format(avgDurationGroupDTO.getFp())));
|
avgDurationGroupDTONew.setSl(Double.parseDouble(df.format(avgDurationGroupDTO.getSl())));
|
avgDurationGroupDTONew.setBlz(Double.parseDouble(df.format(avgDurationGroupDTO.getBlz())));
|
avgDurationGroupDTONew.setSp(Double.parseDouble(df.format(avgDurationGroupDTO.getSp())));
|
avgDurationGroupDTONew.setDb(Double.parseDouble(df.format(avgDurationGroupDTO.getDb())));
|
}
|
}
|
avgDurationGroupDTONew.setGroupName(region);
|
avgDurationGroupDTOListNew.add(avgDurationGroupDTONew);
|
|
}
|
|
avgDurationAllDTO.setAvgDurationGroupDTOList(avgDurationGroupDTOListNew);
|
return avgDurationAllDTO;
|
} catch (Exception e) {
|
log.error("[AnalysisService.AvgDuration]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.AvgDuration", e);
|
}
|
}
|
|
/**
|
* 效能分析-超时任务
|
*
|
* @param terms 条件
|
*/
|
public StatisticsGroupDTO TimeoutTask(Map<String, Object> terms, CtUnitDTO ctUnitDTO) {
|
try {
|
StatisticsGroupDTO statisticsGroupDTO = mapper.statisticsQuantity(terms);
|
StatisticsGroupDTO statisticsGroupDTO1 = mapper.statisticsSuperviseQuantity(terms);
|
statisticsGroupDTO.setDbcs(statisticsGroupDTO1.getDbcs());
|
|
return statisticsGroupDTO;
|
} catch (Exception e) {
|
log.error("[AnalysisService.TimeoutTask]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.TimeoutTask", e);
|
}
|
}
|
|
/**
|
* 效能分析-超时任务
|
*
|
* @param terms 条件
|
*/
|
public List<TimeOutTaskGroupDTO> listTimeOutTaskGroup(Map<String, Object> terms, CtUnitDTO ctUnitDTO, int queryType) {
|
try {
|
List<TimeOutTaskGroupDTO> timeOutTaskGroupDTOList = new ArrayList<>();
|
if (1 == queryType) {
|
timeOutTaskGroupDTOList = mapper.countFPQuantityGroup(terms);
|
} else if (2 == queryType) {
|
timeOutTaskGroupDTOList = mapper.countSLQuantityGroup(terms);
|
} else if (3 == queryType) {
|
timeOutTaskGroupDTOList = mapper.countDBQuantityGroup(terms);
|
} else if (4 == queryType) {
|
timeOutTaskGroupDTOList = mapper.countAllQuantityGroup(terms);
|
}
|
|
List<String> regionList = mapper.listRegion(terms);
|
regionList.add(0, "本级");
|
List<TimeOutTaskGroupDTO> timeOutTaskGroupDTOListAll = new ArrayList<>();
|
for (String region : regionList) {
|
TimeOutTaskGroupDTO timeOutTaskGroupDTO1 = new TimeOutTaskGroupDTO();
|
for (TimeOutTaskGroupDTO timeOutTaskGroupDTO : timeOutTaskGroupDTOList) {
|
if (region.equals(timeOutTaskGroupDTO.getGroupName())) {
|
timeOutTaskGroupDTO1.setQuantity(timeOutTaskGroupDTO.getQuantity());
|
}
|
}
|
timeOutTaskGroupDTO1.setGroupName(region);
|
timeOutTaskGroupDTOListAll.add(timeOutTaskGroupDTO1);
|
}
|
return timeOutTaskGroupDTOListAll;
|
} catch (Exception e) {
|
log.error("[AnalysisService.listTimeOutTaskGroup]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.listTimeOutTaskGroup", e);
|
}
|
}
|
|
/**
|
* 首页-效能分析超时任务统计
|
*
|
* @param ctUnitDTO 登录账号组织信息
|
*/
|
public int homeTimeoutTask(CtUnitDTO ctUnitDTO) {
|
try {
|
Map<String, Object> terms = new HashMap<>();
|
if (ctUnitDTO.getUnitType() == 101 || ctUnitDTO.getUnitType() == 103) {
|
//根据组织级别来往terms中传入最大的查询范围
|
if (!terms.containsKey("city") || !terms.containsKey("area") || !terms.containsKey("road") || !terms.containsKey("village")) {
|
terms.put("unitGrade", ctUnitDTO.getUnitGrade());
|
switch (ctUnitDTO.getUnitGrade()) {
|
case 1:
|
terms.put("queCity", ctUnitDTO.getCity());
|
break;
|
case 2:
|
terms.put("queArea", ctUnitDTO.getArea());
|
break;
|
case 3:
|
terms.put("queRoad", ctUnitDTO.getRoad());
|
break;
|
case 4:
|
terms.put("queRoad", ctUnitDTO.getVillage());
|
break;
|
}
|
}
|
|
} else {
|
List<String> unitIdList = new ArrayList<>();
|
String unitIds = new String();
|
//当该组织不为综治中心和村居时只查自己及下属组织
|
unitIdList = this.getAllParentUnit(ctUnitDTO.getId());
|
unitIds = unitIdList.stream().map(String::valueOf).collect(Collectors.joining("','"));
|
if (StringUtils.isNotBlank(unitIds)) {
|
unitIds = "'" + unitIds + "'";
|
}
|
|
terms.put("unitIds", unitIds);
|
}
|
// 获取当前日期
|
LocalDate currentDate = LocalDate.now();
|
// 获取当前月份的起始时间(当月1日)
|
LocalDate startOfMonth = currentDate.withDayOfMonth(1);
|
// 获取当前月份的结束时间(当月最后一天)
|
LocalDate endOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth());
|
// 格式化日期为合适的字符串格式,方便用于SQL语句中(这里以常见的 yyyy-MM-dd 为例)
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
String startDateStr = startOfMonth.format(formatter);
|
String endDateStr = endOfMonth.format(formatter);
|
terms.put("createStart", startDateStr);
|
terms.put("createEnd", endDateStr);
|
|
int fpcsTotal = 0;
|
int slcsTotal = 0;
|
int dbcsTotal = 0;
|
StatisticsGroupDTO statisticsGroupDTOList1 = mapper.homeStatisticsQuantity(terms);
|
StatisticsGroupDTO statisticsGroupDTOList2 = mapper.homeStatisticsSuperviseQuantity(terms);
|
if (ObjectUtils.isNotEmpty(statisticsGroupDTOList1)) {
|
fpcsTotal = statisticsGroupDTOList1.getFpcs();
|
slcsTotal = statisticsGroupDTOList1.getSlcs();
|
}
|
if (ObjectUtils.isNotEmpty(statisticsGroupDTOList2)) {
|
dbcsTotal = statisticsGroupDTOList2.getDbcs();
|
}
|
|
return fpcsTotal + slcsTotal + dbcsTotal;
|
} catch (Exception e) {
|
log.error("[AnalysisService.TimeoutTask]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.TimeoutTask", e);
|
}
|
}
|
|
/**
|
* 分页查询分派超时案件
|
*
|
* @param page 分页对象
|
* @param terms 条件
|
* @return Page
|
*/
|
public Page<TimeoutTaskInfoDTO> pageFPQuantity(PageRequest page, Map<String, Object> terms) {
|
try {
|
long total = mapper.countFPQuantity(terms);
|
List<TimeoutTaskInfoDTO> timeoutTaskInfoDTOList = mapper.listFPQuantity(page, terms);
|
return new PageImpl<TimeoutTaskInfoDTO>(timeoutTaskInfoDTOList, page, total);
|
} catch (Exception e) {
|
log.error("[AnalysisService.pageFPQuantity]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.pageFPQuantity", e);
|
}
|
}
|
|
/**
|
* 分页查询受理超时案件
|
*
|
* @param page 分页对象
|
* @param terms 条件
|
* @return Page
|
*/
|
public Page<TimeoutTaskInfoDTO> pageSLQuantity(PageRequest page, Map<String, Object> terms) {
|
try {
|
long total = mapper.countSLQuantity(terms);
|
List<TimeoutTaskInfoDTO> timeoutTaskInfoDTOList = mapper.listSLQuantity(page, terms);
|
return new PageImpl<TimeoutTaskInfoDTO>(timeoutTaskInfoDTOList, page, total);
|
} catch (Exception e) {
|
log.error("[AnalysisService.pageSLQuantity]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.pageSLQuantity", e);
|
}
|
}
|
|
/**
|
* 分页查询分派超时案件
|
*
|
* @param page 分页对象
|
* @param terms 条件
|
* @return Page
|
*/
|
public Page<TimeoutTaskInfoDTO> pageDBQuantity(PageRequest page, Map<String, Object> terms) {
|
try {
|
long total = mapper.countDBQuantity(terms);
|
List<TimeoutTaskInfoDTO> timeoutTaskInfoDTOList = mapper.listDBQuantity(page, terms);
|
return new PageImpl<TimeoutTaskInfoDTO>(timeoutTaskInfoDTOList, page, total);
|
} catch (Exception e) {
|
log.error("[AnalysisService.pageDBQuantity]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.pageDBQuantity", e);
|
}
|
}
|
|
/**
|
* 分页查询全部超时案件
|
*
|
* @param page 分页对象
|
* @param terms 条件
|
* @return Page
|
*/
|
public Page<TimeoutTaskInfoDTO> pageAllQuantity(PageRequest page, Map<String, Object> terms) {
|
try {
|
long total = mapper.countAllQuantity(terms);
|
List<TimeoutTaskInfoDTO> timeoutTaskInfoDTOList = mapper.listAllQuantity(page, terms);
|
return new PageImpl<TimeoutTaskInfoDTO>(timeoutTaskInfoDTOList, page, total);
|
} catch (Exception e) {
|
log.error("[AnalysisService.pageAllQuantity]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.pageDBQuantity", e);
|
}
|
}
|
|
/**
|
* 分组任务流转统计
|
*
|
* @param terms 条件
|
* @return Page
|
*/
|
public StatisticsCirculationAllDTO statisticsCirculation(Map<String, Object> terms, int sortType, int sortColmn) {
|
try {
|
StatisticsCirculationAllDTO statisticsCirculationAllDTO = new StatisticsCirculationAllDTO();
|
List<StatisticsCirculationDTO> statisticsCirculationDTONewList = new ArrayList<>();
|
//小数点取后两位
|
DecimalFormat df = new DecimalFormat("#.00");
|
List<StatisticsCirculationDTO> statisticsCirculationDTOList = mapper.statisticsCirculation(terms);
|
List<String> regionList = mapper.listRegion(terms);
|
regionList.add(0, "本级");
|
if (0 == sortColmn || 0 == sortType) {
|
for (String region : regionList) {
|
StatisticsCirculationDTO statisticsCirculationDTONew = new StatisticsCirculationDTO();
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (region.equals(statisticsCirculationDTO.getGroupName())) {
|
double zxsl = Double.valueOf(statisticsCirculationDTO.getZxsl());
|
double bysl = Double.valueOf(statisticsCirculationDTO.getBysl());
|
double lzsl = Double.valueOf(statisticsCirculationDTO.getLzsl());
|
double zdj = Double.valueOf(statisticsCirculationDTO.getZdj());
|
double lzz = zdj - zxsl - bysl - lzsl;
|
double lzl = (lzz + lzsl) / zdj * 100;
|
statisticsCirculationDTO.setLzl(Double.parseDouble(df.format(lzl)));
|
statisticsCirculationDTO.setLzz((int) lzz);
|
BeanUtils.copyProperties(statisticsCirculationDTO, statisticsCirculationDTONew);
|
}
|
}
|
statisticsCirculationDTONew.setGroupName(region);
|
statisticsCirculationDTONewList.add(statisticsCirculationDTONew);
|
}
|
} else {
|
for (String region : regionList) {
|
boolean flag = true;
|
StatisticsCirculationDTO statisticsCirculationDTONew = new StatisticsCirculationDTO();
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (region.equals(statisticsCirculationDTO.getGroupName())) {
|
flag = false;
|
|
BeanUtils.copyProperties(statisticsCirculationDTO, statisticsCirculationDTONew);
|
double zxsl = Double.valueOf(statisticsCirculationDTO.getZxsl());
|
double bysl = Double.valueOf(statisticsCirculationDTO.getBysl());
|
double lzsl = Double.valueOf(statisticsCirculationDTO.getLzsl());
|
double zdj = Double.valueOf(statisticsCirculationDTO.getZdj());
|
double lzz = zdj - zxsl - bysl - lzsl;
|
double lzl = (lzz + lzsl) / zdj * 100;
|
statisticsCirculationDTO.setLzl(Double.parseDouble(df.format(lzl)));
|
statisticsCirculationDTO.setLzz((int) lzz);
|
}
|
}
|
if (flag) {
|
statisticsCirculationDTONew.setGroupName(region);
|
statisticsCirculationDTONewList.add(statisticsCirculationDTONew);
|
}
|
}
|
|
List<StatisticsCirculationDTO> satisfiedList = new ArrayList<>();
|
List<StatisticsCirculationDTO> notSatisfiedList = new ArrayList<>();
|
|
//排序
|
if (1 == sortColmn) {
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (0 != statisticsCirculationDTO.getLzl()) {
|
satisfiedList.add(statisticsCirculationDTO);
|
} else {
|
notSatisfiedList.add(statisticsCirculationDTO);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzl));
|
} else {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzl).reversed());
|
}
|
} else if (2 == sortColmn) {
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (0 != statisticsCirculationDTO.getZdj()) {
|
satisfiedList.add(statisticsCirculationDTO);
|
} else {
|
notSatisfiedList.add(statisticsCirculationDTO);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZdj));
|
} else {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZdj).reversed());
|
}
|
} else if (3 == sortColmn) {
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (0 != statisticsCirculationDTO.getZxsl()) {
|
satisfiedList.add(statisticsCirculationDTO);
|
} else {
|
notSatisfiedList.add(statisticsCirculationDTO);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZxsl));
|
} else {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZxsl).reversed());
|
}
|
} else if (4 == sortColmn) {
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (0 != statisticsCirculationDTO.getLzsl()) {
|
satisfiedList.add(statisticsCirculationDTO);
|
} else {
|
notSatisfiedList.add(statisticsCirculationDTO);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzsl));
|
} else {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzsl).reversed());
|
}
|
} else if (5 == sortColmn) {
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (0 != statisticsCirculationDTO.getLzz()) {
|
satisfiedList.add(statisticsCirculationDTO);
|
} else {
|
notSatisfiedList.add(statisticsCirculationDTO);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzz));
|
} else {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzz).reversed());
|
}
|
} else if (6 == sortColmn) {
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (0 != statisticsCirculationDTO.getBysl()) {
|
satisfiedList.add(statisticsCirculationDTO);
|
} else {
|
notSatisfiedList.add(statisticsCirculationDTO);
|
}
|
}
|
if (1 == sortType) {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getBysl));
|
} else {
|
satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getBysl).reversed());
|
}
|
}
|
statisticsCirculationDTOList.clear();
|
statisticsCirculationDTOList.addAll(satisfiedList);
|
statisticsCirculationDTOList.addAll(notSatisfiedList);
|
statisticsCirculationDTONewList.addAll(0, statisticsCirculationDTOList);
|
}
|
StatisticsCirculationDTO statisticsCirculationDTOTolal = new StatisticsCirculationDTO();
|
//计算平均值
|
int lzzTotal = 0;
|
int zdjTotal = 0;
|
int zxslTotal = 0;
|
int lzslTotal = 0;
|
int byslTotal = 0;
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
lzzTotal += statisticsCirculationDTO.getLzz();
|
zdjTotal += statisticsCirculationDTO.getZdj();
|
zxslTotal += statisticsCirculationDTO.getZxsl();
|
lzslTotal += statisticsCirculationDTO.getLzsl();
|
byslTotal += statisticsCirculationDTO.getBysl();
|
}
|
StatisticsCirculationDTO statisticsCirculationDTOAVG = new StatisticsCirculationDTO();
|
statisticsCirculationDTOAVG.setGroupName("平均值");
|
double lzlAVG = 0;
|
if (!CollectionUtils.isEmpty(statisticsCirculationDTOList)) {
|
//添加平均值
|
double statisticsCirculationDTOListSize = 0.0;
|
if (0 != (lzzTotal + lzslTotal) && 0 != zdjTotal) {
|
lzlAVG = (Double.valueOf(lzzTotal) + Double.valueOf(lzslTotal)) / Double.valueOf(zdjTotal) * 100;
|
}
|
statisticsCirculationDTOListSize = statisticsCirculationDTOList.size();
|
statisticsCirculationDTOAVG.setLzl(Double.parseDouble(df.format(lzlAVG)));
|
statisticsCirculationDTOAVG.setLzz(Double.parseDouble(df.format(lzzTotal / statisticsCirculationDTOListSize)));
|
statisticsCirculationDTOAVG.setZdj(Double.parseDouble(df.format(zdjTotal / statisticsCirculationDTOListSize)));
|
statisticsCirculationDTOAVG.setZxsl(Double.parseDouble(df.format(zxslTotal / statisticsCirculationDTOListSize)));
|
statisticsCirculationDTOAVG.setLzsl(Double.parseDouble(df.format(lzslTotal / statisticsCirculationDTOListSize)));
|
statisticsCirculationDTOAVG.setBysl(Double.parseDouble(df.format(byslTotal / statisticsCirculationDTOListSize)));
|
//添加合计
|
statisticsCirculationDTOTolal.setGroupName("合计");
|
statisticsCirculationDTOTolal.setZdj(zdjTotal);
|
statisticsCirculationDTOTolal.setZxsl(zxslTotal);
|
statisticsCirculationDTOTolal.setLzsl(lzslTotal);
|
statisticsCirculationDTOTolal.setBysl(byslTotal);
|
statisticsCirculationDTOTolal.setLzz(lzzTotal);
|
statisticsCirculationDTOTolal.setLzl(Double.parseDouble(df.format(lzlAVG)));
|
}
|
statisticsCirculationAllDTO.setStatisticsCirculationDTOList(statisticsCirculationDTONewList);
|
List<StatisticsCirculationDTO> statisticsCirculationDTOMain = new ArrayList<>();
|
statisticsCirculationDTOMain.add(statisticsCirculationDTOAVG);
|
statisticsCirculationDTOMain.add(statisticsCirculationDTOTolal);
|
statisticsCirculationAllDTO.setStatisticsCirculationDTO(statisticsCirculationDTOMain);
|
|
//格式化成string类型
|
return statisticsCirculationAllDTO;
|
} catch (Exception e) {
|
log.error("[AnalysisService.statisticsCirculation]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.statisticsCirculation", e);
|
}
|
}
|
|
/**
|
* 分组任务流转统计
|
*
|
* @param terms 条件
|
* @return Page
|
*/
|
public List<StatisticsCirculationDTO> statisticsCirculationCharts(Map<String, Object> terms) {
|
try {
|
List<StatisticsCirculationDTO> statisticsCirculationDTONewList = new ArrayList<>();
|
//小数点取后两位
|
DecimalFormat df = new DecimalFormat("#.00");
|
List<StatisticsCirculationDTO> statisticsCirculationDTOList = mapper.statisticsCirculation(terms);
|
List<String> regionList = mapper.listRegion(terms);
|
regionList.add(0, "本级");
|
|
for (String region : regionList) {
|
StatisticsCirculationDTO statisticsCirculationDTONew = new StatisticsCirculationDTO();
|
for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) {
|
if (region.equals(statisticsCirculationDTO.getGroupName())) {
|
double zxsl = Double.valueOf(statisticsCirculationDTO.getZxsl());
|
double bysl = Double.valueOf(statisticsCirculationDTO.getBysl());
|
double lzsl = Double.valueOf(statisticsCirculationDTO.getLzsl());
|
double zdj = Double.valueOf(statisticsCirculationDTO.getZdj());
|
double lzz = zdj - zxsl - bysl - lzsl;
|
double lzl = (lzz + lzsl) / zdj * 100;
|
statisticsCirculationDTO.setLzl(Double.parseDouble(df.format(lzl)));
|
statisticsCirculationDTO.setLzz((int) lzz);
|
BeanUtils.copyProperties(statisticsCirculationDTO, statisticsCirculationDTONew);
|
}
|
}
|
statisticsCirculationDTONew.setGroupName(region);
|
statisticsCirculationDTONewList.add(statisticsCirculationDTONew);
|
}
|
|
return statisticsCirculationDTONewList;
|
} catch (Exception e) {
|
log.error("[AnalysisService.statisticsCirculationCharts]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.statisticsCirculationCharts", e);
|
}
|
}
|
|
/**
|
* 分页查询分派超时案件
|
*
|
* @param unitId 组织编号
|
* @return Page
|
*/
|
public List<String> getAllParentUnit(String unitId) {
|
try {
|
return mapper.getAllParentUnit(unitId);
|
} catch (Exception e) {
|
log.error("[AnalysisService.getAllParentUnit]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.getAllParentUnit", e);
|
}
|
}
|
|
/**
|
* 解纷态势-分组查询扬言极端数量
|
*
|
* @param terms 条件
|
* @param ctUnitDTO 单位信息
|
*/
|
public List<LevelGroupYYJDDTO> statisticsYYJDQuantity(Map<String, Object> terms, CtUnitDTO ctUnitDTO) {
|
try {
|
if (terms.containsKey("village")) {
|
terms.put("queVillage", terms.get("village"));
|
terms.remove("village");
|
} else if (terms.containsKey("road")) {
|
terms.put("queRoad", terms.get("road"));
|
terms.remove("road");
|
} else if (terms.containsKey("area")) {
|
terms.put("queArea", terms.get("area"));
|
terms.remove("area");
|
} else if (terms.containsKey("city")) {
|
terms.put("queCity", terms.get("city"));
|
terms.remove("city");
|
} else if (terms.containsKey("prov")) {
|
terms.put("queProv", terms.get("prov"));
|
terms.remove("prov");
|
} else {
|
terms.put("queProv", terms.get("prov"));
|
}
|
String zzzxunitId = mapper.getZZZXUnitId(terms);
|
|
List<LevelGroupYYJDDTO> statisticsYYJDQuantity = mapper.statisticsYYJDQuantity(terms);
|
//查出下级单位
|
List<LevelGroupYYJDDTO> allLevelGroupYYJDDTOList = mapper.listSubordinateTerritory1(terms);
|
|
//把查询数放到完整的数组里(本级的最后再处理)
|
terms.remove("queVillage");
|
terms.remove("queRoad");
|
terms.remove("queArea");
|
terms.remove("queCity");
|
terms.remove("queProv");
|
Map<String, Object> terms1 = new HashMap<>();
|
terms1.putAll(terms);
|
for (LevelGroupYYJDDTO a : allLevelGroupYYJDDTOList) {
|
for (LevelGroupYYJDDTO b : statisticsYYJDQuantity) {
|
if (a.getName().equals(b.getName())) {
|
terms1.put(b.getRegion(), b.getCode());
|
String caseTypes = this.getCaseTypeByRegion(terms1);
|
a.setName(b.getName());
|
a.setTotal(b.getTotal());
|
a.setCode(b.getCode());
|
a.setCommonType(caseTypes);
|
a.setRegion(b.getRegion());
|
}
|
}
|
}
|
//先排序其他单位
|
if (terms.containsKey("sortType")) {
|
if (terms.get("sortType").equals("1")) {
|
allLevelGroupYYJDDTOList.sort(Comparator.comparing(LevelGroupYYJDDTO::getTotal));
|
} else {
|
allLevelGroupYYJDDTOList.sort(Comparator.comparing(LevelGroupYYJDDTO::getTotal).reversed());
|
}
|
} else {
|
allLevelGroupYYJDDTOList.sort(Comparator.comparing(LevelGroupYYJDDTO::getTotal).reversed());
|
}
|
//最后再把本级放在第一位
|
LevelGroupYYJDDTO levelGroupYYJDDTO = new LevelGroupYYJDDTO();
|
levelGroupYYJDDTO.setName("本级");
|
levelGroupYYJDDTO.setCode(zzzxunitId);
|
levelGroupYYJDDTO.setRegion("unitId");
|
for (LevelGroupYYJDDTO c : statisticsYYJDQuantity) {
|
if (c.getName().equals(levelGroupYYJDDTO.getName())) {
|
Map<String, Object> terms2 = new HashMap<>();
|
terms2.putAll(terms);
|
List<String> unitIdList = mapper.getAllDeptParentUnit(zzzxunitId);
|
String unitIds = unitIdList.stream().map(String::valueOf).collect(Collectors.joining("','"));
|
unitIds = "'" + unitIds + "'";
|
terms2.put("unitId", unitIds);
|
|
String caseTypes = this.getCaseTypeByRegion(terms2);
|
levelGroupYYJDDTO.setName(c.getName());
|
levelGroupYYJDDTO.setTotal(c.getTotal());
|
levelGroupYYJDDTO.setCommonType(caseTypes);
|
}
|
}
|
//村居级别时,根据村居组织编号判断是否一致,一致时即为本级
|
boolean isOk = true;
|
if (103 == ctUnitDTO.getUnitType() && StringUtils.isNotBlank(ctUnitDTO.getVillage())) {
|
for (LevelGroupYYJDDTO d : allLevelGroupYYJDDTOList) {
|
if (d.getCode().equals(ctUnitDTO.getVillage())) {
|
isOk = false;
|
d.setName("本级");
|
}
|
}
|
}
|
if (isOk) {
|
allLevelGroupYYJDDTOList.add(0, levelGroupYYJDDTO);
|
}
|
|
|
return allLevelGroupYYJDDTOList;
|
} catch (Exception e) {
|
log.error("[AnalysisService.statisticsYYJDQuantity]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.statisticsYYJDQuantity", e);
|
}
|
}
|
|
/**
|
* 分页查询分派超时案件
|
*
|
* @param terms 组织编号
|
* @return string
|
*/
|
public String getCaseTypeByRegion(Map<String, Object> terms) {
|
try {
|
List<String> caseTypeList = mapper.listCaseTypeByRegion(terms);
|
String caseTypes = new String();
|
caseTypes = caseTypeList.stream().collect(Collectors.joining("、"));
|
return caseTypes;
|
} catch (Exception e) {
|
log.error("[AnalysisService.getCaseTypeByRegion]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.getCaseTypeByRegion", e);
|
}
|
}
|
|
/**
|
* 获取所有下属组织包括自己(除村居外)
|
*
|
* @param unitId 组织编号
|
*/
|
public List<String> getAllDeptParentUnit(String unitId) {
|
try {
|
List<String> unitIdList = mapper.getAllDeptParentUnit(unitId);
|
return unitIdList;
|
} catch (Exception e) {
|
log.error("[AnalysisService.getAllDeptParentUnit]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.getAllDeptParentUnit", e);
|
}
|
}
|
|
/**
|
* 查询流转情况列表
|
*
|
* @param page 组织编号
|
*/
|
public Page<CasePageDTO> listStatisticsCirculation(Map<String, Object> terms, PageRequest page) {
|
try {
|
long total = mapper.countStatisticsCirculation(terms);
|
List<CasePageDTO> content = mapper.listStatisticsCirculation(page, terms);
|
for (CasePageDTO casePageDTO : content) {
|
StringBuffer sb = new StringBuffer();
|
if (ObjectUtils.isNotEmpty(casePageDTO.getQueAreaName())) {
|
sb.append("/");
|
sb.append(casePageDTO.getQueAreaName());
|
}
|
if (ObjectUtils.isNotEmpty(casePageDTO.getQueRoadName())) {
|
sb.append("/");
|
sb.append(casePageDTO.getQueRoadName());
|
}
|
if (ObjectUtils.isNotEmpty(casePageDTO.getQueVillageName())) {
|
sb.append("/");
|
sb.append(casePageDTO.getQueVillageName());
|
}
|
if (ObjectUtils.isEmpty(sb)) {
|
sb.append("/");
|
sb.append(casePageDTO.getQueCityName());
|
}
|
if (sb.length() > 1) {
|
casePageDTO.setAreaName(sb.substring(1, sb.length()));
|
}
|
}
|
return new PageImpl<CasePageDTO>(content, page, total);
|
} catch (Exception e) {
|
log.error("[AnalysisService.listStatisticsCirculation]调用失败,异常信息:" + e, e);
|
throw new ServiceException("AnalysisService.listStatisticsCirculation", e);
|
}
|
}
|
}
|