|
|
@ -2,6 +2,7 @@ package com.epmet.service.evaluationindex.indexcoll.impl; |
|
|
|
|
|
|
|
import com.epmet.commons.dynamic.datasource.annotation.DataSource; |
|
|
|
import com.epmet.commons.tools.constant.NumConstant; |
|
|
|
import com.epmet.commons.tools.constant.StrConstant; |
|
|
|
import com.epmet.commons.tools.utils.ConvertUtils; |
|
|
|
import com.epmet.constant.DataSourceConstant; |
|
|
|
import com.epmet.constant.OrgTypeConstant; |
|
|
@ -23,16 +24,20 @@ import com.epmet.entity.evaluationindex.screen.ScreenCustomerAgencyEntity; |
|
|
|
import com.epmet.entity.evaluationindex.screen.ScreenCustomerDeptEntity; |
|
|
|
import com.epmet.eum.IndexCodeEnum; |
|
|
|
import com.epmet.service.evaluationindex.indexcoll.FactIndexCollectService; |
|
|
|
import com.google.common.cache.Cache; |
|
|
|
import com.google.common.cache.CacheBuilder; |
|
|
|
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.util.CollectionUtils; |
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
@ -43,6 +48,7 @@ import java.util.stream.Collectors; |
|
|
|
@Service |
|
|
|
@DataSource(DataSourceConstant.EVALUATION_INDEX) |
|
|
|
public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
Cache<String, String> allParentIds = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.HOURS).build(); |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private FactIndexPartyAblityCpcMonthlyDao factIndexPartyAblityCpcMonthlyDao; |
|
|
@ -219,6 +225,7 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
|
|
|
|
// 根据年,汇总今年各项得到,计算平均值后 插入年表 screen_index_data_yearly
|
|
|
|
this.insertIndexDataYear(monthId, customerId); |
|
|
|
allParentIds.invalidateAll(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@ -283,6 +290,7 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.GRID, gridScoreDTOS.get(i).getGridId(), |
|
|
|
gridScoreDTOS.get(i).getParentAgencyId(), gridScoreDTOS.get(i).getGridName(), monthlyDTO); |
|
|
|
monthlyDTO.setAllParentIds(gridScoreDTOS.get(i).getAllParentIds()); |
|
|
|
monthlyFormDTOList.add(monthlyDTO); |
|
|
|
} |
|
|
|
screenIndexDataMonthlyDao.batchInsertIndexDataMonthly(monthlyFormDTOList, customerId); |
|
|
@ -298,21 +306,26 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
* @Author zhangyong |
|
|
|
* @Date 14:17 2020-09-03 |
|
|
|
**/ |
|
|
|
private void insertIndexDataMonthlyByGridScore(String monthId, String customerId, List<FactIndexGridScoreDTO> gridScoreDTOS){ |
|
|
|
private void insertIndexDataMonthlyByGridScore(String monthId, String customerId, List<FactIndexGridScoreDTO> gridScoreDTOS) { |
|
|
|
List<IndexDataMonthlyFormDTO> monthlyFormDTOList = new ArrayList<>(); |
|
|
|
// 根据网格id进行分组,最后组装一条数据 一个网格 对应 4条数据
|
|
|
|
Map<String, List<FactIndexGridScoreDTO>> collect = gridScoreDTOS.stream().collect(Collectors.groupingBy(FactIndexGridScoreDTO::getGridId)); |
|
|
|
// 查询网格的 上级组织id 和 组织名称
|
|
|
|
List<ScreenCustomerGridDTO> parentGridList = screenCustomerGridDao.selectListGridInfo(customerId); |
|
|
|
for(Map.Entry<String,List<FactIndexGridScoreDTO>> gridScore : collect.entrySet()){ |
|
|
|
if (!CollectionUtils.isEmpty(parentGridList)) { |
|
|
|
parentGridList.forEach(o -> { |
|
|
|
allParentIds.put(o.getGridId(), o.getGridId()); |
|
|
|
}); |
|
|
|
} |
|
|
|
for (Map.Entry<String, List<FactIndexGridScoreDTO>> gridScore : collect.entrySet()) { |
|
|
|
IndexDataMonthlyFormDTO monthlyFormDTO = new IndexDataMonthlyFormDTO(); |
|
|
|
|
|
|
|
// 给4个指数 赋默认值
|
|
|
|
monthlyFormDTO = this.setIndexDefaultValueFor(monthlyFormDTO); |
|
|
|
for ( int i = 0; i < gridScore.getValue().size(); i++){ |
|
|
|
if (NumConstant.ONE_STR.equals(gridScore.getValue().get(i).getIsTotal())){ |
|
|
|
for (int i = 0; i < gridScore.getValue().size(); i++) { |
|
|
|
if (NumConstant.ONE_STR.equals(gridScore.getValue().get(i).getIsTotal())) { |
|
|
|
// 是总分
|
|
|
|
if (IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode().equals(gridScore.getValue().get(i).getIndexCode())){ |
|
|
|
if (IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode().equals(gridScore.getValue().get(i).getIndexCode())) { |
|
|
|
// 总指数 = 网格相关
|
|
|
|
monthlyFormDTO.setIndexTotal(gridScore.getValue().get(i).getScore()); |
|
|
|
} |
|
|
@ -339,6 +352,7 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyFormDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.GRID, gridScore.getKey(), |
|
|
|
parentAgencyId, gridName, monthlyFormDTO); |
|
|
|
monthlyFormDTO.setAllParentIds(allParentIds.getIfPresent(monthlyFormDTO.getOrgId())); |
|
|
|
monthlyFormDTOList.add(monthlyFormDTO); |
|
|
|
} |
|
|
|
if (monthlyFormDTOList.size() > NumConstant.ZERO){ |
|
|
@ -409,6 +423,7 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.AGENCY, communityScoreDTOS.get(i).getAgencyId(), |
|
|
|
communityScoreDTOS.get(i).getPid(), communityScoreDTOS.get(i).getAgencyName(), monthlyDTO); |
|
|
|
monthlyDTO.setAllParentIds(communityScoreDTOS.get(i).getPids()); |
|
|
|
monthlyFormDTOList.add(monthlyDTO); |
|
|
|
} |
|
|
|
screenIndexDataMonthlyDao.batchInsertIndexDataMonthly(monthlyFormDTOList, customerId); |
|
|
@ -424,20 +439,25 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
* @Author zhangyong |
|
|
|
* @Date 14:17 2020-09-03 |
|
|
|
**/ |
|
|
|
private void insertIndexDataMonthlyByCommunityScore(String monthId, String customerId, List<FactIndexCommunityScoreDTO> communityScoreDTOS){ |
|
|
|
private void insertIndexDataMonthlyByCommunityScore(String monthId, String customerId, List<FactIndexCommunityScoreDTO> communityScoreDTOS) { |
|
|
|
List<IndexDataMonthlyFormDTO> monthlyFormDTOList = new ArrayList<>(); |
|
|
|
// 根据组织id 进行分组,最后组装一条数据 一个组织id 对应 4条数据
|
|
|
|
Map<String, List<FactIndexCommunityScoreDTO>> collect = communityScoreDTOS.stream().collect(Collectors.groupingBy(FactIndexCommunityScoreDTO::getAgencyId)); |
|
|
|
// 根据客户id,查询区/街道 组织名称、id
|
|
|
|
List<ScreenCustomerAgencyEntity> parentAgencyList = screenCustomerAgencyDao.selectListAgencyInfo(customerId); |
|
|
|
for(Map.Entry<String,List<FactIndexCommunityScoreDTO>> communityScore : collect.entrySet()){ |
|
|
|
if (!CollectionUtils.isEmpty(parentAgencyList)) { |
|
|
|
parentAgencyList.forEach(o -> { |
|
|
|
allParentIds.put(o.getAgencyId(), o.getPids()); |
|
|
|
}); |
|
|
|
} |
|
|
|
for (Map.Entry<String, List<FactIndexCommunityScoreDTO>> communityScore : collect.entrySet()) { |
|
|
|
IndexDataMonthlyFormDTO monthlyFormDTO = new IndexDataMonthlyFormDTO(); |
|
|
|
// 给4个指数 赋默认值
|
|
|
|
monthlyFormDTO = this.setIndexDefaultValueFor(monthlyFormDTO); |
|
|
|
for ( int i = 0; i < communityScore.getValue().size(); i++){ |
|
|
|
if (NumConstant.ONE_STR.equals(communityScore.getValue().get(i).getIsTotal())){ |
|
|
|
for (int i = 0; i < communityScore.getValue().size(); i++) { |
|
|
|
if (NumConstant.ONE_STR.equals(communityScore.getValue().get(i).getIsTotal())) { |
|
|
|
// 是总分
|
|
|
|
if (IndexCodeEnum.SHE_QU_XIANG_GUAN.getCode().equals(communityScore.getValue().get(i).getIndexCode())){ |
|
|
|
if (IndexCodeEnum.SHE_QU_XIANG_GUAN.getCode().equals(communityScore.getValue().get(i).getIndexCode())) { |
|
|
|
// 总指数 = 社区相关
|
|
|
|
monthlyFormDTO.setIndexTotal(communityScore.getValue().get(i).getScore()); |
|
|
|
} |
|
|
@ -465,6 +485,7 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyFormDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.AGENCY, communityScore.getKey(), |
|
|
|
parentAgencyId, agencyName, monthlyFormDTO); |
|
|
|
monthlyFormDTO.setAllParentIds(allParentIds.getIfPresent(monthlyFormDTO.getOrgId())); |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyFormDTOList.add(monthlyFormDTO); |
|
|
|
} |
|
|
@ -497,7 +518,13 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
mismatchDeptList = screenCustomerDeptDao.selectListMismatchDeptInfo(customerId, null); |
|
|
|
} |
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(mismatchDeptList)){ |
|
|
|
if (!CollectionUtils.isEmpty(mismatchDeptList)) { |
|
|
|
mismatchDeptList.forEach(o -> { |
|
|
|
String pids = allParentIds.getIfPresent(o.getParentAgencyId()); |
|
|
|
if (!StringUtils.isEmpty(pids)) { |
|
|
|
allParentIds.put(o.getDeptId(), pids.concat(StrConstant.COLON).concat(o.getParentAgencyId())); |
|
|
|
} |
|
|
|
}); |
|
|
|
// 如果进行不匹配查询,查到了其他部门信息,一律赋默认值
|
|
|
|
this.insertIndexMonthlyByDeptDefaultScore(monthId, customerId, mismatchDeptList); |
|
|
|
} |
|
|
@ -534,6 +561,7 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.DEPARTMENT, deptScoreDTOS.get(i).getDeptId(), |
|
|
|
deptScoreDTOS.get(i).getParentAgencyId(), deptScoreDTOS.get(i).getDeptName(), monthlyDTO); |
|
|
|
monthlyDTO.setAllParentIds(allParentIds.getIfPresent(monthlyDTO.getOrgId())); |
|
|
|
monthlyFormDTOList.add(monthlyDTO); |
|
|
|
} |
|
|
|
screenIndexDataMonthlyDao.batchInsertIndexDataMonthly(monthlyFormDTOList, customerId); |
|
|
@ -579,12 +607,17 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
deptName = deptEntity.getDeptName(); |
|
|
|
} |
|
|
|
} |
|
|
|
if ("".equals(parentAgencyId)){ |
|
|
|
if ("".equals(parentAgencyId)) { |
|
|
|
throw new RuntimeException("在screen_customer_dept表中未查询到该客户下的父级信息:customerId =" + customerId + ", deptId = " + deptScore.getKey()); |
|
|
|
} |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyFormDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.DEPARTMENT, deptScore.getKey(), |
|
|
|
parentAgencyId, deptName, monthlyFormDTO); |
|
|
|
//部门表没有 allParentIds 所以直接获取 然后拼接
|
|
|
|
String ppIds = allParentIds.getIfPresent(monthlyFormDTO.getParentId()); |
|
|
|
if (!StringUtils.isEmpty(ppIds)) { |
|
|
|
monthlyFormDTO.setAllParentIds(ppIds.concat(StrConstant.COLON).concat(monthlyFormDTO.getParentId())); |
|
|
|
} |
|
|
|
monthlyFormDTOList.add(monthlyFormDTO); |
|
|
|
} |
|
|
|
if (monthlyFormDTOList.size() > NumConstant.ZERO){ |
|
|
@ -634,13 +667,18 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
* @Author zhangyong |
|
|
|
* @Date 14:17 2020-09-03 |
|
|
|
**/ |
|
|
|
private void insertIndexDataMonthlyByAgencyScore(String monthId, String customerId, List<AgencyScoreDTO> agencyScoreDTOS){ |
|
|
|
private void insertIndexDataMonthlyByAgencyScore(String monthId, String customerId, List<AgencyScoreDTO> agencyScoreDTOS) { |
|
|
|
List<IndexDataMonthlyFormDTO> monthlyFormDTOList = new ArrayList<>(); |
|
|
|
// 根据组织id(eg:社区或者街道id) 进行分组,最后组装一条数据 一个组织id 对应 4条数据
|
|
|
|
Map<String, List<AgencyScoreDTO>> collect = agencyScoreDTOS.stream().collect(Collectors.groupingBy(AgencyScoreDTO::getAgencyId)); |
|
|
|
List<ScreenCustomerAgencyEntity> parentAgencyList = screenCustomerAgencyDao.selectListAgencyInfo(customerId); |
|
|
|
int j = 0; |
|
|
|
for(Map.Entry<String,List<AgencyScoreDTO>> agencyScore : collect.entrySet()){ |
|
|
|
if (!CollectionUtils.isEmpty(parentAgencyList)) { |
|
|
|
parentAgencyList.forEach(o -> { |
|
|
|
allParentIds.put(o.getAgencyId(), o.getPids()); |
|
|
|
}); |
|
|
|
} |
|
|
|
for (Map.Entry<String, List<AgencyScoreDTO>> agencyScore : collect.entrySet()) { |
|
|
|
if (NumConstant.ZERO_STR.equals(agencyScore.getKey())) { |
|
|
|
log.warn("insertIndexDataMonthlyByAgencyScore agencyyId is 0"); |
|
|
|
continue; |
|
|
@ -669,12 +707,16 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService { |
|
|
|
agencyName = agencyScoreDTO.getAgencyName(); |
|
|
|
} |
|
|
|
} |
|
|
|
if ("".equals(agencyName)){ |
|
|
|
if ("".equals(agencyName)) { |
|
|
|
throw new RuntimeException("在screen_customer_agency表中未查询到该客户下的组织名称:customerId =" + customerId + ", agencyId = " + agencyScore.getKey()); |
|
|
|
} |
|
|
|
// 补充表中其他字段
|
|
|
|
monthlyFormDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.AGENCY, agencyScore.getKey(), |
|
|
|
parentAgencyId, agencyName, monthlyFormDTO); |
|
|
|
if ("S2-C1".equals(monthlyFormDTO.getOrgId())) { |
|
|
|
System.out.println("======" + allParentIds.getIfPresent(monthlyFormDTO.getOrgId())); |
|
|
|
} |
|
|
|
monthlyFormDTO.setAllParentIds(allParentIds.getIfPresent(monthlyFormDTO.getOrgId())); |
|
|
|
monthlyFormDTOList.add(monthlyFormDTO); |
|
|
|
} |
|
|
|
if (monthlyFormDTOList.size() > NumConstant.ZERO){ |
|
|
|