|
|
@ -1,17 +1,26 @@ |
|
|
|
package com.epmet.dataaggre.service.resigroup.impl; |
|
|
|
|
|
|
|
import com.epmet.commons.dynamic.datasource.annotation.DataSource; |
|
|
|
import com.epmet.commons.tools.constant.Constant; |
|
|
|
import com.epmet.commons.tools.constant.NumConstant; |
|
|
|
import com.epmet.commons.tools.utils.DateUtils; |
|
|
|
import com.epmet.dataaggre.constant.DataSourceConstant; |
|
|
|
import com.epmet.dataaggre.dao.resigroup.ResiGroupDao; |
|
|
|
import com.epmet.dataaggre.dao.resigroup.ResiTopicDao; |
|
|
|
import com.epmet.dataaggre.dto.datastats.FactGroupActDailyDTO; |
|
|
|
import com.epmet.dataaggre.dto.epmetuser.result.UserInfosResultDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.ResiGroupDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.ActCategoryDictDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.ResiTopicDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.form.BranchConAnalysisFormDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.form.CandidateListFormDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.result.CandidateListResultDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.form.GroupActCategoryQueryFormDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.form.SubAnalysisByCodeFormDTO; |
|
|
|
import com.epmet.dataaggre.dto.resigroup.result.*; |
|
|
|
import com.epmet.dataaggre.entity.resigroup.ResiGroupEntity; |
|
|
|
import com.epmet.dataaggre.redis.ResiGroupRedis; |
|
|
|
import com.epmet.dataaggre.service.datastats.DataStatsService; |
|
|
|
import com.epmet.dataaggre.service.epmetuser.EpmetUserService; |
|
|
|
import com.epmet.dataaggre.service.govorg.GovOrgService; |
|
|
|
import com.epmet.dataaggre.service.resigroup.ResiGroupService; |
|
|
|
import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
@ -22,6 +31,7 @@ import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
@ -40,6 +50,10 @@ public class ResiGroupServiceImpl implements ResiGroupService { |
|
|
|
private EpmetUserService epmetUserService; |
|
|
|
@Autowired |
|
|
|
private ResiGroupRedis resiGroupRedis; |
|
|
|
@Autowired |
|
|
|
private DataStatsService dataStatsService; |
|
|
|
@Autowired |
|
|
|
private GovOrgService govOrgService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<ResiTopicDTO> selectTopicInfoByIds(List<String> topicIds) { |
|
|
@ -92,4 +106,169 @@ public class ResiGroupServiceImpl implements ResiGroupService { |
|
|
|
showUsers.forEach(u -> result.stream().filter(r -> u.equals(r.getUserId())).forEach(r -> disResult.add(r))); |
|
|
|
return disResult; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 001、【支建+联建】统计分析 |
|
|
|
* |
|
|
|
* @param formDTO |
|
|
|
* @return Result<BranchConAnalysisResultDTO> |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public BranchConAnalysisResultDTO branchConAnalysis(BranchConAnalysisFormDTO formDTO) { |
|
|
|
List<ActCategoryDictDTO> categoryList = queryActCategoryDictList(formDTO.getCustomerId(), formDTO.getFirstCategoryCode()); |
|
|
|
if (CollectionUtils.isEmpty(categoryList)) { |
|
|
|
return new BranchConAnalysisResultDTO(); |
|
|
|
} |
|
|
|
String dateId = DateUtils.getBeforeNDay(NumConstant.ONE); |
|
|
|
List<FactGroupActDailyDTO> factGroupActDailyDTOList = dataStatsService.branchConAnalysis(formDTO.getCustomerId(), formDTO.getOrgId(), formDTO.getOrgType(), |
|
|
|
dateId, formDTO.getFirstCategoryCode()); |
|
|
|
/** |
|
|
|
* List -> Map |
|
|
|
* 需要注意的是: |
|
|
|
* toMap 如果集合对象有重复的key,会报错Duplicate key .... * apple1,apple12的id都为1。 |
|
|
|
* 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 |
|
|
|
*/ |
|
|
|
Map<String,FactGroupActDailyDTO> map = factGroupActDailyDTOList.stream().collect(Collectors.toMap(FactGroupActDailyDTO::getCategoryCode, a -> a,(k1,k2)->k1)); |
|
|
|
|
|
|
|
// 组织活动次数
|
|
|
|
int organizeTotal=0; |
|
|
|
// 参加活动人数
|
|
|
|
int participateUserTotal=0; |
|
|
|
List<BranchConAnalysisDetailDTO> dataList=new ArrayList<>(); |
|
|
|
|
|
|
|
for (ActCategoryDictDTO categoryDictDTO : categoryList) { |
|
|
|
|
|
|
|
BranchConAnalysisDetailDTO participateUserTotalObject=new BranchConAnalysisDetailDTO(); |
|
|
|
participateUserTotalObject.setName(categoryDictDTO.getCategoryName()); |
|
|
|
participateUserTotalObject.setType("参加人数"); |
|
|
|
participateUserTotalObject.setCategoryCode(categoryDictDTO.getCategoryCode()); |
|
|
|
|
|
|
|
BranchConAnalysisDetailDTO organizeTotalObject=new BranchConAnalysisDetailDTO(); |
|
|
|
organizeTotalObject.setName(categoryDictDTO.getCategoryName()); |
|
|
|
organizeTotalObject.setType("组织次数"); |
|
|
|
organizeTotalObject.setCategoryCode(categoryDictDTO.getCategoryCode()); |
|
|
|
|
|
|
|
|
|
|
|
/*DataCommonDTO avgParticipateUserTotalObject=new DataCommonDTO(); |
|
|
|
avgParticipateUserTotalObject.setName(categoryDictDTO.getCategoryName()); |
|
|
|
avgParticipateUserTotalObject.setType("平均参加人数");*/ |
|
|
|
|
|
|
|
if (map.containsKey(categoryDictDTO.getCategoryCode())) { |
|
|
|
|
|
|
|
participateUserTotalObject.setValue(map.get(categoryDictDTO.getCategoryCode()).getParticipateUserTotal()); |
|
|
|
organizeTotalObject.setValue(map.get(categoryDictDTO.getCategoryCode()).getOrganizeTotal()); |
|
|
|
// avgParticipateUserTotalObject.setValue(map.get(categoryDictDTO.getCategoryCode()).getAvgParticipateUserTotal());
|
|
|
|
participateUserTotalObject.setAvg(map.get(categoryDictDTO.getCategoryCode()).getAvgParticipateUserTotal()); |
|
|
|
organizeTotalObject.setAvg(map.get(categoryDictDTO.getCategoryCode()).getAvgParticipateUserTotal()); |
|
|
|
|
|
|
|
|
|
|
|
organizeTotal += map.get(categoryDictDTO.getCategoryCode()).getOrganizeTotal(); |
|
|
|
participateUserTotal += map.get(categoryDictDTO.getCategoryCode()).getParticipateUserTotal(); |
|
|
|
|
|
|
|
} else { |
|
|
|
participateUserTotalObject.setValue(NumConstant.ZERO); |
|
|
|
organizeTotalObject.setValue(NumConstant.ZERO); |
|
|
|
participateUserTotalObject.setAvg(NumConstant.ZERO); |
|
|
|
organizeTotalObject.setAvg(NumConstant.ZERO); |
|
|
|
// avgParticipateUserTotalObject.setValue(NumConstant.ZERO);
|
|
|
|
} |
|
|
|
dataList.add(participateUserTotalObject); |
|
|
|
dataList.add(organizeTotalObject); |
|
|
|
// dataList.add(avgParticipateUserTotalObject);
|
|
|
|
} |
|
|
|
BranchConAnalysisResultDTO resultDTO = new BranchConAnalysisResultDTO(); |
|
|
|
resultDTO.setOrganizeTotal(organizeTotal); |
|
|
|
resultDTO.setParticipateUserTotal(participateUserTotal); |
|
|
|
resultDTO.setDataList(dataList); |
|
|
|
return resultDTO; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<ActCategoryDictDTO> queryActCategoryDictList(String customerId, String firstCategoryCode) { |
|
|
|
List<ActCategoryDictDTO> categoryList=resiGroupDao.selectActCategoryDictDTOByPcode(customerId,firstCategoryCode); |
|
|
|
if(CollectionUtils.isEmpty(categoryList)){ |
|
|
|
categoryList=resiGroupDao.selectActCategoryDictDTOByPcode(Constant.DEFAULT_CUSTOMER,firstCategoryCode); |
|
|
|
} |
|
|
|
return categoryList; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 003、【支建+联建】下级组织折线图 |
|
|
|
* |
|
|
|
* @param formDTO |
|
|
|
* @return com.epmet.dataaggre.dto.resigroup.result.SubAnalysisByCodeResultDTO |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<SubAnalysisByCodeResultDTO> querySubAnalysisByCode(SubAnalysisByCodeFormDTO formDTO) { |
|
|
|
List<OrgInfoCommonDTO> orgInfoDTOList = govOrgService.queryNextOrgInfoDTO(formDTO.getCustomerId(), formDTO.getOrgId(), formDTO.getOrgType()); |
|
|
|
if (CollectionUtils.isEmpty(orgInfoDTOList)) { |
|
|
|
return new ArrayList<>(); |
|
|
|
} |
|
|
|
|
|
|
|
String dateId = DateUtils.getBeforeNDay(NumConstant.ONE); |
|
|
|
List<FactGroupActDailyDTO> factGroupActDailyDTOList = dataStatsService.querySubAnalysisByCode(formDTO.getCustomerId(), formDTO.getOrgId(), |
|
|
|
dateId, formDTO.getCategoryCode()); |
|
|
|
Map<String, FactGroupActDailyDTO> map = factGroupActDailyDTOList.stream().collect(Collectors.toMap(FactGroupActDailyDTO::getOrgId, a -> a, (k1, k2) -> k1)); |
|
|
|
List<SubAnalysisByCodeResultDTO> resultList = new ArrayList<>(); |
|
|
|
for (OrgInfoCommonDTO orgInfo : orgInfoDTOList) { |
|
|
|
|
|
|
|
SubAnalysisByCodeResultDTO participateUserTotalObject=new SubAnalysisByCodeResultDTO(); |
|
|
|
participateUserTotalObject.setName(orgInfo.getOrgName()); |
|
|
|
participateUserTotalObject.setType("参加人数"); |
|
|
|
participateUserTotalObject.setOrgId(orgInfo.getOrgId()); |
|
|
|
|
|
|
|
SubAnalysisByCodeResultDTO organizeTotalObject=new SubAnalysisByCodeResultDTO(); |
|
|
|
organizeTotalObject.setName(orgInfo.getOrgName()); |
|
|
|
organizeTotalObject.setType("组织次数"); |
|
|
|
organizeTotalObject.setOrgId(orgInfo.getOrgId()); |
|
|
|
|
|
|
|
|
|
|
|
SubAnalysisByCodeResultDTO avgParticipateUserTotalObject=new SubAnalysisByCodeResultDTO(); |
|
|
|
avgParticipateUserTotalObject.setName(orgInfo.getOrgName()); |
|
|
|
avgParticipateUserTotalObject.setType("平均参加人数"); |
|
|
|
avgParticipateUserTotalObject.setOrgId(orgInfo.getOrgId()); |
|
|
|
|
|
|
|
if (map.containsKey(orgInfo.getOrgId())) { |
|
|
|
participateUserTotalObject.setValue(map.get(orgInfo.getOrgId()).getParticipateUserTotal()); |
|
|
|
organizeTotalObject.setValue(map.get(orgInfo.getOrgId()).getOrganizeTotal()); |
|
|
|
avgParticipateUserTotalObject.setValue(map.get(orgInfo.getOrgId()).getAvgParticipateUserTotal()); |
|
|
|
} else { |
|
|
|
participateUserTotalObject.setValue(NumConstant.ZERO); |
|
|
|
organizeTotalObject.setValue(NumConstant.ZERO); |
|
|
|
avgParticipateUserTotalObject.setValue(NumConstant.ZERO); |
|
|
|
} |
|
|
|
resultList.add(participateUserTotalObject); |
|
|
|
resultList.add(organizeTotalObject); |
|
|
|
resultList.add(avgParticipateUserTotalObject); |
|
|
|
|
|
|
|
} |
|
|
|
return resultList; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 004、【支建+联建】排序方式下拉框 |
|
|
|
* |
|
|
|
* @param formDTO |
|
|
|
* @return com.epmet.dataaggre.dto.resigroup.result.RankCodeResultDTO |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public List<RankCodeResultDTO> queryRankCodeList(GroupActCategoryQueryFormDTO formDTO) { |
|
|
|
List<RankCodeResultDTO> resultList=new ArrayList<>(); |
|
|
|
RankCodeResultDTO defaultResult=new RankCodeResultDTO(); |
|
|
|
defaultResult.setRankCode("orgtotal"); |
|
|
|
defaultResult.setRankName("组织活动总次数"); |
|
|
|
resultList.add(defaultResult); |
|
|
|
List<ActCategoryDictDTO> categoryList=resiGroupDao.selectActCategoryDictDTOByPcode(formDTO.getCustomerId(),formDTO.getFirstCategoryCode()); |
|
|
|
if(CollectionUtils.isEmpty(categoryList)){ |
|
|
|
categoryList=resiGroupDao.selectActCategoryDictDTOByPcode(Constant.DEFAULT_CUSTOMER,formDTO.getFirstCategoryCode()); |
|
|
|
} |
|
|
|
categoryList.forEach(category->{ |
|
|
|
RankCodeResultDTO result=new RankCodeResultDTO(); |
|
|
|
result.setRankCode(category.getCategoryCode()); |
|
|
|
result.setRankName(category.getCategoryName().concat("-组织次数")); |
|
|
|
resultList.add(result); |
|
|
|
}); |
|
|
|
return resultList; |
|
|
|
} |
|
|
|
} |
|
|
|