|
|
@ -7,11 +7,15 @@ import com.epmet.commons.tools.utils.ConvertUtils; |
|
|
|
import com.epmet.commons.tools.utils.DateUtils; |
|
|
|
import com.epmet.constant.OrgTypeConstant; |
|
|
|
import com.epmet.dto.extract.form.ExtractScreenFormDTO; |
|
|
|
import com.epmet.dto.extract.result.GridGroupUserCountResultDTO; |
|
|
|
import com.epmet.dto.extract.result.GridUserCountResultDTO; |
|
|
|
import com.epmet.dto.extract.result.IssueVoteUserCountResultDTO; |
|
|
|
import com.epmet.entity.evaluationindex.screen.ScreenUserJoinEntity; |
|
|
|
import com.epmet.entity.stats.DimAgencyEntity; |
|
|
|
import com.epmet.entity.stats.DimGridEntity; |
|
|
|
import com.epmet.entity.stats.FactIssueGridMonthlyEntity; |
|
|
|
import com.epmet.service.evaluationindex.extract.todata.FactOriginGroupMainDailyService; |
|
|
|
import com.epmet.service.evaluationindex.extract.todata.FactOriginIssueLogDailyService; |
|
|
|
import com.epmet.service.evaluationindex.extract.toscreen.PublicPartExtractService; |
|
|
|
import com.epmet.service.stats.DimAgencyService; |
|
|
|
import com.epmet.service.stats.DimGridService; |
|
|
@ -48,6 +52,10 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService { |
|
|
|
private FactIssueGridMonthlyService factIssueGridMonthlyService; |
|
|
|
@Autowired |
|
|
|
private FactRegUserGridMonthlyService factRegUserGridMonthlyService; |
|
|
|
@Autowired |
|
|
|
private FactOriginIssueLogDailyService factOriginIssueLogDailyService; |
|
|
|
@Autowired |
|
|
|
private FactOriginGroupMainDailyService factOriginGroupMainDailyService; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
@ -55,7 +63,10 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService { |
|
|
|
* target:screen_user_join |
|
|
|
* 总参与:统计周期内议题表决(虽然可以评价 但是只有表决的人可以评价 所以按表决人数算)的人数 |
|
|
|
* 百人人均议题:统计周期内总的议题数/(注册用户数/100) |
|
|
|
* 百人平均参与度:每个议题的实际参与数/应参与数 的平均值:(每个议题的实际参与数/应参与数)的和)/被表决的议题数 |
|
|
|
* 百人平均参与度:每个议题的实际参与数/应参与数 的平均值:(每个议题的实际参与数/应参与数)的和)/被表决的议题数 来源 获取issue_vote_statistical_daily中 monthId的数据 |
|
|
|
* <p> |
|
|
|
* <p> |
|
|
|
* <p> |
|
|
|
* 不考虑市北:人均议题:统计周期内议题总数/发过议题的人数 参与度:各个行为(表决)的总数/发生行为的人数 |
|
|
|
* |
|
|
|
* @return java.lang.Boolean |
|
|
@ -101,16 +112,42 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService { |
|
|
|
GridUserCountResultDTO user = userCountMap.get(gridId); |
|
|
|
//百人人均议题:统计周期内总的议题数/(注册用户数/100)
|
|
|
|
BigDecimal avgIssueCount = new BigDecimal(issue.getIssueIncr()).divide(new BigDecimal(user.getUserCount()).divide(new BigDecimal(NumConstant.ONE_HUNDRED))); |
|
|
|
// 需要修改字段类型
|
|
|
|
entity.setAvgIssue(avgIssueCount); |
|
|
|
|
|
|
|
//百人平均参与度:每个议题的实际参与数/应参与数 的平均值:(每个议题的实际参与数/应参与数)的和)/被表决的议题数
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
entity.setAvgJoin(new BigDecimal(0)); |
|
|
|
}); |
|
|
|
//获取该月 表决的人数
|
|
|
|
List<IssueVoteUserCountResultDTO> voteCountList = factOriginIssueLogDailyService.getVoteCount(formDTO.getCustomerId(), formDTO.getMonthId()); |
|
|
|
Map<String, Integer> gridMemberCount = new HashMap<>(); |
|
|
|
if (!CollectionUtils.isEmpty(issueTotal)) { |
|
|
|
//获取每个网格的应表决人数
|
|
|
|
List<GridGroupUserCountResultDTO> memberCountList = factOriginGroupMainDailyService.selectDistinctGroupMemberCount(formDTO.getCustomerId()); |
|
|
|
if (CollectionUtils.isEmpty(memberCountList)) { |
|
|
|
log.error("抽取【公众参与-人均议题】,获取应表决人数为空"); |
|
|
|
return; |
|
|
|
} |
|
|
|
gridMemberCount = memberCountList.stream().collect(Collectors.toMap(GridGroupUserCountResultDTO::getGridId, o -> o.getMemberCount())); |
|
|
|
} |
|
|
|
|
|
|
|
//百人平均参与度:每个议题的实际参与数/应参与数 的平均值:(每个议题的实际参与数/应参与数)的和)/被表决的议题数
|
|
|
|
|
|
|
|
//遍历实际参与人数
|
|
|
|
Map<String, List<IssueVoteUserCountResultDTO>> voteMap = voteCountList.stream().collect(Collectors.groupingBy(IssueVoteUserCountResultDTO::getGridId)); |
|
|
|
for (Map.Entry<String, List<IssueVoteUserCountResultDTO>> entry : voteMap.entrySet()) { |
|
|
|
String gridId = entry.getKey(); |
|
|
|
ScreenUserJoinEntity entity = insertMap.get(gridId); |
|
|
|
List<IssueVoteUserCountResultDTO> issueList = entry.getValue(); |
|
|
|
BigDecimal bigDecimal = new BigDecimal(0); |
|
|
|
BigDecimal votedByIssueCount = new BigDecimal(issueList.get(0).getIssueCount()); |
|
|
|
for (IssueVoteUserCountResultDTO vote : issueList) { |
|
|
|
Integer memberCount = gridMemberCount.get(gridId); |
|
|
|
if (memberCount == null) { |
|
|
|
memberCount = 0; |
|
|
|
} |
|
|
|
bigDecimal = bigDecimal.add(new BigDecimal(vote.getVoteCount() / memberCount)); |
|
|
|
} |
|
|
|
entity.setAvgJoin(bigDecimal.divide(votedByIssueCount).multiply(new BigDecimal(NumConstant.ONE_HUNDRED))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void extractAgencyUserJoin(ExtractScreenFormDTO formDTO) { |
|
|
|