|
|
@ -921,4 +921,333 @@ public class TopicServiceImpl implements TopicService { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description 根据话题状态的维度自动匹配、分析数据 |
|
|
|
* @param |
|
|
|
* @return |
|
|
|
* @author wangc |
|
|
|
* @date 2020.06.30 17:04 |
|
|
|
**/ |
|
|
|
void analyzeTopicGroupByIssueStatus(Map<String, Set<String>> subGridOfAgency, List<AgencySubTreeDto> agencies, Map<String,List<ResiGroupTopicResultDTO>> gridGroupMap, Map<String,List<ResiTopicOperationResultDTO>> topicOperationMap, Date targetDate, TopicStatisticalData dataPacket, List<DimTopicStatusDTO> statusDimension, DimIdGenerator.DimIdBean timeDimension){ |
|
|
|
//Boolean isMonthEnd = false;
|
|
|
|
Calendar calendar = Calendar.getInstance(); |
|
|
|
calendar.setTime(new Date()); |
|
|
|
//前一天零点
|
|
|
|
calendar.add(Calendar.DATE, NumConstant.ONE_NEG); |
|
|
|
calendar.set(Calendar.HOUR_OF_DAY, NumConstant.ZERO); |
|
|
|
calendar.set(Calendar.MINUTE, NumConstant.ZERO); |
|
|
|
calendar.set(Calendar.SECOND, NumConstant.ZERO); |
|
|
|
Date targetDateCheck = null == targetDate ? calendar.getTime() : targetDate; |
|
|
|
|
|
|
|
calendar.setTime(targetDateCheck); |
|
|
|
//如果目标日期是当月的最后一天
|
|
|
|
//if(calendar.get(Calendar.DATE) == calendar.getActualMaximum(Calendar.DAY_OF_MONTH)){
|
|
|
|
//求出这个月的第一天
|
|
|
|
calendar.setTime(new Date()); |
|
|
|
calendar.set(Calendar.DAY_OF_MONTH, NumConstant.ONE); |
|
|
|
calendar.set(Calendar.HOUR_OF_DAY, NumConstant.ZERO); |
|
|
|
calendar.set(Calendar.MINUTE, NumConstant.ZERO); |
|
|
|
calendar.set(Calendar.SECOND, NumConstant.ZERO); |
|
|
|
|
|
|
|
// isMonthEnd = true;
|
|
|
|
//}
|
|
|
|
|
|
|
|
//计算百分比使用,保留小数点后两位
|
|
|
|
NumberFormat numberFormat = NumberFormat.getInstance(); |
|
|
|
numberFormat.setMaximumFractionDigits(NumConstant.SIX); |
|
|
|
|
|
|
|
Map<String,DimTopicStatusDTO> statusMap = new HashMap<>(); |
|
|
|
statusDimension.forEach(status -> statusMap.put(status.getId(),status)); |
|
|
|
Map<String,AgencySubTreeDto> agencyMap = new HashMap<>(); |
|
|
|
agencies.forEach(agency -> {agencyMap.put(agency.getAgencyId(),agency);}); |
|
|
|
|
|
|
|
|
|
|
|
List<ResiGroupTopicResultDTO> groupList = new LinkedList<>(); |
|
|
|
for(Map.Entry<String,List<ResiGroupTopicResultDTO>> entry : gridGroupMap.entrySet()){ |
|
|
|
if(null != entry.getValue() && entry.getValue().size() > NumConstant.ZERO) |
|
|
|
groupList.addAll(entry.getValue()); |
|
|
|
} |
|
|
|
|
|
|
|
//key -> groupId
|
|
|
|
Map<String,GroupTopicData> groupTopicData = traverseGroupTopic(groupList,topicOperationMap); |
|
|
|
Map<String,Boolean> gridDistinct = new HashMap<>(); |
|
|
|
agencies.forEach(agency -> { |
|
|
|
if(null != agency.getGridIds() && agency.getGridIds().size() > NumConstant.ZERO){ |
|
|
|
agency.getGridIds().forEach(grid -> { |
|
|
|
gridDistinct.put(grid,false); |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
for(Map.Entry<String,Set<String>> entry : subGridOfAgency.entrySet()){ |
|
|
|
|
|
|
|
FactTopicIssueAgencyDailyDTO issueAgencyD = new FactTopicIssueAgencyDailyDTO(); |
|
|
|
FactTopicTotalAgencyDailyDTO totalAgencyD = new FactTopicTotalAgencyDailyDTO(); |
|
|
|
|
|
|
|
//initAgencyDailyDTO(entry.getKey(),agencyMap.get(entry.getKey()).getPid(),agencyMap.get(entry.getKey()).getCustomerId(),timeDimension,statusMap,issueAgencyD,totalAgencyD);
|
|
|
|
|
|
|
|
|
|
|
|
statusMap.forEach((k,v) -> { |
|
|
|
//无状态标识
|
|
|
|
boolean noStatusFlag = false; |
|
|
|
if(StringUtils.equals(k,"discussing")){ |
|
|
|
noStatusFlag = true; |
|
|
|
} |
|
|
|
final boolean noStatusFlagFinal = noStatusFlag; |
|
|
|
|
|
|
|
//k:状态的key
|
|
|
|
//对应状态key的一条话题-状态记录
|
|
|
|
FactTopicStatusAgencyDailyDTO topicAgencyD = new FactTopicStatusAgencyDailyDTO(); |
|
|
|
topicAgencyD.setTopicStatusId(k); |
|
|
|
//initAgencyDailyDTO
|
|
|
|
|
|
|
|
if(null != entry.getValue() && entry.getValue().size() > NumConstant.ZERO){ |
|
|
|
entry.getValue().forEach(gridId -> { |
|
|
|
|
|
|
|
|
|
|
|
FactTopicStatusGridDailyDTO topicGridD = new FactTopicStatusGridDailyDTO(); |
|
|
|
|
|
|
|
topicGridD.setTopicStatusId(k); |
|
|
|
|
|
|
|
FactTopicIssueGridDailyDTO issueGridD = new FactTopicIssueGridDailyDTO(); |
|
|
|
FactTopicTotalGridDailyDTO totalGirdD = new FactTopicTotalGridDailyDTO(); |
|
|
|
|
|
|
|
//init
|
|
|
|
//if(noStatusFlagFinal){
|
|
|
|
//initGridDailyDTO(entry.getKey(),gridId,agencyMap.get(entry.getKey()).getCustomerId(),timeDimension,statusMap,issueGridD,totalGirdD,topicGridD_discussing);
|
|
|
|
//}else{
|
|
|
|
//initGridDailyDTO(entry.getKey(),gridId,agencyMap.get(entry.getKey()).getCustomerId(),timeDimension,statusMap,topicGridD_discussing);
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
List<ResiGroupTopicResultDTO> groups = gridGroupMap.get(gridId); |
|
|
|
if(null != groups && groups.size() > NumConstant.ZERO) { |
|
|
|
groups.forEach(group -> { |
|
|
|
if (null != group && StringUtils.isNotBlank(group.getGroupId())) { |
|
|
|
|
|
|
|
if(noStatusFlagFinal) { |
|
|
|
issueAgencyD.setIssueIncr(issueAgencyD.getIssueIncr() + groupTopicData.get(group.getGroupId()).getIssueIncr()); |
|
|
|
issueAgencyD.setIssueTotal(issueAgencyD.getIssueTotal() + groupTopicData.get(group.getGroupId()).getIssueTotal()); |
|
|
|
totalAgencyD.setIssueTotalCount(issueAgencyD.getIssueTotal()); |
|
|
|
totalAgencyD.setHiddenTotalCount(totalAgencyD.getHiddenTotalCount() + groupTopicData.get(group.getGroupId()).getHiddenTotal()); |
|
|
|
totalAgencyD.setTopicIncr(totalAgencyD.getTopicIncr() + groupTopicData.get(group.getGroupId()).getTopicIncr()); |
|
|
|
totalAgencyD.setTopicTotal(totalAgencyD.getTopicTotal() + groupTopicData.get(group.getGroupId()).getTotal()); |
|
|
|
issueGridD.setIssueIncr(issueGridD.getIssueIncr() + groupTopicData.get(group.getGroupId()).getIssueIncr()); |
|
|
|
issueGridD.setIssueTotal(issueGridD.getIssueTotal() + groupTopicData.get(group.getGroupId()).getIssueTotal()); |
|
|
|
totalGirdD.setIssueTotalCount(issueGridD.getIssueTotal()); |
|
|
|
totalGirdD.setHiddenTotalCount(totalGirdD.getHiddenTotalCount() + groupTopicData.get(group.getGroupId()).getHiddenTotal()); |
|
|
|
totalGirdD.setTopicIncr(totalGirdD.getTopicIncr() + groupTopicData.get(group.getGroupId()).getTopicIncr()); |
|
|
|
totalGirdD.setTopicTotal(totalGirdD.getTopicTotal() + groupTopicData.get(group.getGroupId()).getTotal()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GroupTopicData data = groupTopicData.get(group.getGroupId()); |
|
|
|
if (null != data) { |
|
|
|
|
|
|
|
//根据当前的话题状态key,去data中取相应的数据
|
|
|
|
switch(k){ |
|
|
|
case "discussing": |
|
|
|
|
|
|
|
topicAgencyD.setTopicCount(topicAgencyD.getTopicCount() + data.getDiscussingTotal()); |
|
|
|
topicAgencyD.setTopicIncrement(topicAgencyD.getTopicIncrement() + data.getDiscussingIncr()); |
|
|
|
|
|
|
|
topicGridD.setTopicCount(topicGridD.getTopicCount() + data.getDiscussingTotal()); |
|
|
|
topicGridD.setTopicIncrement(topicGridD.getTopicIncrement() + data.getDiscussingIncr()); |
|
|
|
break; |
|
|
|
case "hidden": |
|
|
|
|
|
|
|
topicAgencyD.setTopicCount(topicAgencyD.getTopicCount() + data.getHiddenTotal()); |
|
|
|
topicAgencyD.setTopicIncrement(topicAgencyD.getTopicIncrement() + data.getHiddenIncr()); |
|
|
|
|
|
|
|
topicGridD.setTopicCount(topicGridD.getTopicCount() + data.getHiddenTotal()); |
|
|
|
topicGridD.setTopicIncrement(topicGridD.getTopicIncrement() + data.getHiddenIncr()); |
|
|
|
break; |
|
|
|
case "closed": |
|
|
|
|
|
|
|
topicAgencyD.setTopicCount(topicAgencyD.getTopicCount() + data.getClosedTotal()); |
|
|
|
topicAgencyD.setTopicIncrement(topicAgencyD.getTopicIncrement() + data.getClosedIncr()); |
|
|
|
|
|
|
|
topicGridD.setTopicCount(topicGridD.getTopicCount() + data.getClosedTotal()); |
|
|
|
topicGridD.setTopicIncrement(topicGridD.getTopicIncrement() + data.getClosedIncr()); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
//网格-百分比
|
|
|
|
//setGridTopicProportion(numberFormat, topicGridD, totalGirdD);
|
|
|
|
|
|
|
|
if(!gridDistinct.get(gridId)) { |
|
|
|
|
|
|
|
//setGridDailyDataPacket(dataPacket, issueGridD, totalGirdD, topicGridD_discussing, topicGridD_hidden, topicGridD_closed);
|
|
|
|
/* |
|
|
|
if(noStatusFlagFinal){ |
|
|
|
set :: issueGridD | totalGridD | topicGridD |
|
|
|
}else{ |
|
|
|
set :: topicGridD |
|
|
|
} |
|
|
|
*/ |
|
|
|
gridDistinct.put(gridId,true); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
//机关-百分比
|
|
|
|
//setAgencyTopicProportion(numberFormat,topicAgencyD,totalAgencyD);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//setAgencyDailyDataPacket(dataPacket,issueAgencyD,totalAgencyD,topicAgencyD_discussing,topicAgencyD_hidden,topicAgencyD_closed);
|
|
|
|
/* |
|
|
|
if(noStatusFlagFinal){ |
|
|
|
set :: issueAgencyD | totalAgencyD | topicAgencyD |
|
|
|
}else{ |
|
|
|
set :: topicAgencyD |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
gridDistinct.forEach((k,v) -> { |
|
|
|
gridDistinct.put(k,false); |
|
|
|
}); |
|
|
|
|
|
|
|
List<ResiGroupTopicResultDTO> topicsBetweenTimeRange = topicDao.selectGroupOrderByGridBetweenTimeRange(calendar.getTime(),targetDate,dataPacket.getCustomerId()); |
|
|
|
//key : gridId
|
|
|
|
Map<String,List<ResiGroupTopicResultDTO>> GridGroupMapBetweenTimeRange = |
|
|
|
topicsBetweenTimeRange.stream().collect(Collectors.groupingBy(ResiGroupTopicResultDTO::getGridId)); |
|
|
|
List<ResiGroupTopicResultDTO> groupListBetweenTimeRange = new LinkedList<>(); |
|
|
|
|
|
|
|
for(Map.Entry<String,List<ResiGroupTopicResultDTO>> entryBetweenTimeRange : GridGroupMapBetweenTimeRange.entrySet()){ |
|
|
|
if(null != entryBetweenTimeRange.getValue() && entryBetweenTimeRange.getValue().size() > NumConstant.ZERO) |
|
|
|
groupListBetweenTimeRange.addAll(entryBetweenTimeRange.getValue()); |
|
|
|
} |
|
|
|
List<ResiTopicOperationResultDTO> operationsBetweenTimeRange = |
|
|
|
topicDao.selectTopicOperationRecordBetweenTimeRange(calendar.getTime(),targetDate); |
|
|
|
|
|
|
|
//key: topicId
|
|
|
|
Map<String,List<ResiTopicOperationResultDTO>> topicOperationMapBetweenTimeRange = |
|
|
|
operationsBetweenTimeRange.stream().collect(Collectors.groupingBy(ResiTopicOperationResultDTO::getTopicId)); |
|
|
|
//key: groupId
|
|
|
|
Map<String,GroupTopicData> groupTopicDataBetweenTimeRange = traverseGroupTopic(groupListBetweenTimeRange,topicOperationMapBetweenTimeRange); |
|
|
|
|
|
|
|
for(Map.Entry<String,Set<String>> entry : subGridOfAgency.entrySet()){ |
|
|
|
|
|
|
|
FactTopicIssueAgencyMonthlyDTO issueAgencyM = new FactTopicIssueAgencyMonthlyDTO(); |
|
|
|
|
|
|
|
|
|
|
|
//initAgencyMonthlyDTO(entry.getKey(),agencyMap.get(entry.getKey()).getPid(),agencyMap.get(entry.getKey()).getCustomerId(),timeDimension,statusMap,issueAgencyM);
|
|
|
|
|
|
|
|
|
|
|
|
statusMap.forEach((k,v) -> { |
|
|
|
boolean noStatusFlag = false; |
|
|
|
if(StringUtils.equals(k,"discussing")){ |
|
|
|
noStatusFlag = true; |
|
|
|
} |
|
|
|
final boolean noStatusFlagFinal = noStatusFlag; |
|
|
|
|
|
|
|
FactTopicStatusAgencyMonthlyDTO topicAgencyM = new FactTopicStatusAgencyMonthlyDTO(); |
|
|
|
topicAgencyM.setTopicStatusId(k); |
|
|
|
|
|
|
|
if(null != entry.getValue() && entry.getValue().size() > NumConstant.ZERO){ |
|
|
|
entry.getValue().forEach(gridId -> { |
|
|
|
|
|
|
|
|
|
|
|
FactTopicIssueGridMonthlyDTO issueGridM = new FactTopicIssueGridMonthlyDTO(); |
|
|
|
initGridMonthlyDTO(entry.getKey(),gridId,agencyMap.get(entry.getKey()).getCustomerId(),timeDimension,issueGridM); |
|
|
|
|
|
|
|
|
|
|
|
List<ResiGroupTopicResultDTO> groups = gridGroupMap.get(gridId); |
|
|
|
if(null != groups) { |
|
|
|
groups.forEach(group -> { |
|
|
|
if (null != group && StringUtils.isNotBlank(group.getGroupId())) { |
|
|
|
|
|
|
|
if(noStatusFlagFinal) { |
|
|
|
|
|
|
|
issueAgencyM.setIssueIncr(issueAgencyM.getIssueIncr() + groupTopicDataBetweenTimeRange.get(group.getGroupId()).getIssueIncr()); |
|
|
|
issueAgencyM.setIssueTotal(issueAgencyM.getIssueTotal() + groupTopicDataBetweenTimeRange.get(group.getGroupId()).getIssueTotal()); |
|
|
|
issueGridM.setIssueIncr(issueGridM.getIssueIncr() + groupTopicDataBetweenTimeRange.get(group.getGroupId()).getIssueIncr()); |
|
|
|
issueGridM.setIssueTotal(issueGridM.getIssueTotal() + groupTopicDataBetweenTimeRange.get(group.getGroupId()).getIssueTotal()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
GroupTopicData data = groupTopicDataBetweenTimeRange.get(group.getGroupId()); |
|
|
|
if (null != data) { |
|
|
|
|
|
|
|
switch(k){ |
|
|
|
case "discussing": |
|
|
|
|
|
|
|
topicAgencyM.setTopicCount(topicAgencyM.getTopicCount() + data.getDiscussingTotal()); |
|
|
|
topicAgencyM.setTopicIncr(topicAgencyM.getTopicIncr() + data.getDiscussingIncr()); |
|
|
|
break; |
|
|
|
case "hidden": |
|
|
|
|
|
|
|
topicAgencyM.setTopicCount(topicAgencyM.getTopicCount() + data.getHiddenTotal()); |
|
|
|
topicAgencyM.setTopicIncr(topicAgencyM.getTopicIncr() + data.getHiddenIncr()); |
|
|
|
break; |
|
|
|
case "closed": |
|
|
|
|
|
|
|
topicAgencyM.setTopicCount(topicAgencyM.getTopicCount() + data.getClosedTotal()); |
|
|
|
topicAgencyM.setTopicIncr(topicAgencyM.getTopicIncr() + data.getClosedIncr()); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
if(!gridDistinct.get(gridId)) { |
|
|
|
|
|
|
|
setGridMonthlyDataPacket(dataPacket, issueGridM); |
|
|
|
} |
|
|
|
|
|
|
|
gridDistinct.put(gridId,true); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//机关-百分比
|
|
|
|
//Integer topicTotal = dataPacket.getTotalAgencyDailyList().stream().filter( obj -> StringUtils.equals(obj.getAgencyId(),entry.getKey())).findFirst().get().getTopicTotal();
|
|
|
|
//setAgencyTopicMonthlyProportion(numberFormat,topicAgencyM,topicTotal);
|
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
if(noStatusFlagFinal){ |
|
|
|
set :: issueAgencyM | topicAgencyM |
|
|
|
}else{ |
|
|
|
set topicAgencyM |
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|