Browse Source

zancun

dev_shibei_match
yinzuomei 4 years ago
parent
commit
5d60cec1cf
  1. 33
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/stats/user/result/UserStatisticalData.java
  2. 6
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/StatsUserController.java
  3. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java
  4. 47
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java

33
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/stats/user/result/UserStatisticalData.java

@ -17,25 +17,58 @@ import java.util.List;
public class UserStatisticalData implements Serializable { public class UserStatisticalData implements Serializable {
private static final long serialVersionUID = 7423427555123585566L; private static final long serialVersionUID = 7423427555123585566L;
/**
* 机关下(按日)参与用户数分析
*/
private List<FactParticipationUserAgencyDailyDTO> partiAgencyDailyList; private List<FactParticipationUserAgencyDailyDTO> partiAgencyDailyList;
/**
* 网格下(按日)参与用户数分析
*/
private List<FactParticipationUserGridDailyDTO> partiGridDailyList; private List<FactParticipationUserGridDailyDTO> partiGridDailyList;
/**
* 机关下(按月)参与用户数分析
*/
private List<FactParticipationUserAgencyMonthlyDTO> partiAgencyMonthlyList; private List<FactParticipationUserAgencyMonthlyDTO> partiAgencyMonthlyList;
/**
* 网格下()参与用户数分析
*/
private List<FactParticipationUserGridMonthlyDTO> partiGridMonthlyList; private List<FactParticipationUserGridMonthlyDTO> partiGridMonthlyList;
/**
* 机关(按日)注册用户数分析
*/
private List<FactRegUserAgencyDailyDTO> regAgencyDailyList; private List<FactRegUserAgencyDailyDTO> regAgencyDailyList;
/**
* 网格(按日)注册用户数分析
*/
private List<FactRegUserGridDailyDTO> regGridDailyList; private List<FactRegUserGridDailyDTO> regGridDailyList;
/**
* 机关(按月)注册用户数分析
*/
private List<FactRegUserAgencyMonthlyDTO> regAgencyMonthlyList; private List<FactRegUserAgencyMonthlyDTO> regAgencyMonthlyList;
/**
* 网格()注册用户数分析
*/
private List<FactRegUserGridMonthlyDTO> regGridMonthlyList; private List<FactRegUserGridMonthlyDTO> regGridMonthlyList;
/**
* 当前正在计算的客户id
*/
private String customerId; private String customerId;
/**
* yyyyMMdd
*/
private String dateId; private String dateId;
/**
* yyyyMM
*/
private String monthId; private String monthId;
} }

6
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/StatsUserController.java

@ -21,6 +21,12 @@ public class StatsUserController {
@Autowired @Autowired
private StatsUserService statsUserService; private StatsUserService statsUserService;
/**
* @return com.epmet.commons.tools.utils.Result
* @param formDTO
* @description 工作端数据一期用户分析参与用户注册用户分析
* @Date 2021/3/26 13:27
**/
@RequestMapping("execute") @RequestMapping("execute")
public Result execute(@RequestBody StatsFormDTO formDTO) { public Result execute(@RequestBody StatsFormDTO formDTO) {
statsUserService.partition(formDTO); statsUserService.partition(formDTO);

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/impl/StatsUserServiceImpl.java

@ -63,12 +63,14 @@ public class StatsUserServiceImpl implements StatsUserService {
List<String> customerIdList = null; List<String> customerIdList = null;
Date date = null; Date date = null;
if (StringUtils.isNotBlank(formDTO.getDate())) { if (StringUtils.isNotBlank(formDTO.getDate())) {
//如果指定了参数,转化为yyyy-MM-dd格式
date = DateUtils.stringToDate(formDTO.getDate(), DateUtils.DATE_PATTERN); date = DateUtils.stringToDate(formDTO.getDate(), DateUtils.DATE_PATTERN);
} }
if (StringUtils.isNotBlank(formDTO.getCustomerId())) { if (StringUtils.isNotBlank(formDTO.getCustomerId())) {
generate(formDTO.getCustomerId(), date); generate(formDTO.getCustomerId(), date);
} else { } else {
do { do {
//每100个客户一组
customerIdList = dimCustomerService.selectCustomerIdPage(pageNo++, pageSize); customerIdList = dimCustomerService.selectCustomerIdPage(pageNo++, pageSize);
if (!CollectionUtils.isEmpty(customerIdList)) { if (!CollectionUtils.isEmpty(customerIdList)) {
for (String customerId : customerIdList) { for (String customerId : customerIdList) {
@ -99,13 +101,14 @@ public class StatsUserServiceImpl implements StatsUserService {
calendar.set(Calendar.MINUTE, NumConstant.ZERO); calendar.set(Calendar.MINUTE, NumConstant.ZERO);
calendar.set(Calendar.SECOND, NumConstant.ZERO); calendar.set(Calendar.SECOND, NumConstant.ZERO);
//2.初始化时间维度 //2.初始化时间维度{"dateId":"20210325","monthId":"202103","quarterId":"2021Q1","weekId":"2021W13","yearId":"2021"}
DimIdGenerator.DimIdBean timeDimension = DimIdGenerator.getDimIdBean(null == date ? calendar.getTime() : date); DimIdGenerator.DimIdBean timeDimension = DimIdGenerator.getDimIdBean(null == date ? calendar.getTime() : date);
//3.初始化机关维度 //3.初始化机关维度
List<AgencySubTreeDto> agencies = dimAgencyService.getAllAgency(customerId); List<AgencySubTreeDto> agencies = dimAgencyService.getAllAgency(customerId);
//List<AgencySubTreeDto> topAgencies = dimAgencyService.getTopAgency(customerId); //List<AgencySubTreeDto> topAgencies = dimAgencyService.getTopAgency(customerId);
// log.info(JSON.toJSONString(timeDimension));
// log.info(JSON.toJSONString(agencies));
//4.计算机关统计数据、生成唯一性统计数据 //4.计算机关统计数据、生成唯一性统计数据
try { try {
UserStatisticalData agencyData = userService.traverseAgencyUser(agencies, date, timeDimension); UserStatisticalData agencyData = userService.traverseAgencyUser(agencies, date, timeDimension);

47
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java

@ -62,8 +62,8 @@ public class UserServiceImpl implements UserService {
dataPacket.setDateId(timeDimension.getDateId()); dataPacket.setDateId(timeDimension.getDateId());
dataPacket.setMonthId(timeDimension.getMonthId()); dataPacket.setMonthId(timeDimension.getMonthId());
//自上向下检索 //自上向下检索
Map<String, List<AgencySubTreeDto>> agencyMap = agencies.stream().collect(Collectors.groupingBy(AgencySubTreeDto::getAgencyId)); Map<String, List<AgencySubTreeDto>> agencyMap = agencies.stream().collect(Collectors.groupingBy(AgencySubTreeDto::getAgencyId));
//subGridOfAgency key:agencyId ,value:当前组织下的所有网格(即直属网格+下级组织下的所有网格)
Map<String,Set<String>> subGridOfAgency = new HashMap<>(); Map<String,Set<String>> subGridOfAgency = new HashMap<>();
agencies.forEach(agency -> { agencies.forEach(agency -> {
initAgencyGridMap(agency.getAgencyId(),agency,subGridOfAgency); initAgencyGridMap(agency.getAgencyId(),agency,subGridOfAgency);
@ -71,12 +71,13 @@ public class UserServiceImpl implements UserService {
//对每一个机关进行数据统计 //对每一个机关进行数据统计
if(subGridOfAgency.size() > NumConstant.ZERO){ if(subGridOfAgency.size() > NumConstant.ZERO){
subGridOfAgency.forEach((k,v) -> { //如果当前客户存在组织
subGridOfAgency.forEach((agencyId,subGridIds) -> {
queryUserData(ModuleConstant.DIM_SUB_AGENCY, queryUserData(ModuleConstant.DIM_SUB_AGENCY,
k, agencyId,
(null == agencyMap.get(k) || agencyMap.get(k).isEmpty()) ? NumConstant.ZERO_STR : agencyMap.get(k).get(NumConstant.ZERO).getPid(), // (null == agencyMap.get(agencyId) || agencyMap.get(agencyId).isEmpty()) ? NumConstant.ZERO_STR : agencyMap.get(agencyId).get(NumConstant.ZERO).getPid(),
(null == agencyMap.get(k) || agencyMap.get(k).isEmpty()) ? null : agencyMap.get(k).get(NumConstant.ZERO).getCustomerId(), (null == agencyMap.get(agencyId) || agencyMap.get(agencyId).isEmpty()) ? null : agencyMap.get(agencyId).get(NumConstant.ZERO).getCustomerId(),
v, subGridIds,
targetDate, targetDate,
dataPacket, dataPacket,
timeDimension); timeDimension);
@ -111,7 +112,7 @@ public class UserServiceImpl implements UserService {
if(null != v && v.size() > NumConstant.ZERO){ if(null != v && v.size() > NumConstant.ZERO){
queryUserData(ModuleConstant.DIM_BELONGING_GRID, queryUserData(ModuleConstant.DIM_BELONGING_GRID,
k, k,
v.get(NumConstant.ZERO).getPid(), // v.get(NumConstant.ZERO).getPid(),
v.get(NumConstant.ZERO).getCustomerId(), v.get(NumConstant.ZERO).getCustomerId(),
new HashSet<>(v.get(NumConstant.ZERO).getGridIds()), new HashSet<>(v.get(NumConstant.ZERO).getGridIds()),
targetDate, targetDate,
@ -181,22 +182,22 @@ public class UserServiceImpl implements UserService {
/** /**
* @Description 初始化机关-所有下级网格Map * @Description 初始化机关-所有下级网格Map
* @param pid - 固定一个机关Id * @param agencyId - 当前组织id
* @param agency - AgencySubTreeDto * @param agency - AgencySubTreeDto
* @param subGridOfAgency - Map<String,Set<String>> * @param subGridOfAgency - Map<String,Set<String>>
* @return * @return
* @author wangc * @author wangc
* @date 2020.06.18 15:54 * @date 2020.06.18 15:54
**/ **/
void initAgencyGridMap(String pid, AgencySubTreeDto agency, Map<String,Set<String>> subGridOfAgency){ void initAgencyGridMap(String agencyId, AgencySubTreeDto agency, Map<String,Set<String>> subGridOfAgency){
//向map中放入数据 //向map中放入数据
if(subGridOfAgency.containsKey(pid)){ if(subGridOfAgency.containsKey(agencyId)){
//包含key //包含key
Set<String> grids = subGridOfAgency.get(pid); Set<String> grids = subGridOfAgency.get(agencyId);
if(null == grids){ if(null == grids){
grids = new HashSet<>(); grids = new HashSet<>();
subGridOfAgency.put(pid,grids); subGridOfAgency.put(agencyId,grids);
} }
if(null != agency.getGridIds() && agency.getGridIds().size() > NumConstant.ZERO){ if(null != agency.getGridIds() && agency.getGridIds().size() > NumConstant.ZERO){
grids.addAll(agency.getGridIds()); grids.addAll(agency.getGridIds());
@ -204,18 +205,20 @@ public class UserServiceImpl implements UserService {
}else{ }else{
//不包含key //不包含key
Set<String> grids = new HashSet<>(agency.getGridIds()); Set<String> grids = new HashSet<>(agency.getGridIds());
subGridOfAgency.put(pid,grids); subGridOfAgency.put(agencyId,grids);
} }
//外层是从顶级组织向下循环,所以循环到社区时跳出
//定义递归出口 //定义递归出口
if(StringUtils.equals(ModuleConstant.AGENCY_LEVEL_COMMUNITY,agency.getLevel()) || null == agency.getSubAgencies() || agency.getSubAgencies().size() == NumConstant.ZERO){ if (StringUtils.equals(ModuleConstant.AGENCY_LEVEL_COMMUNITY, agency.getLevel())
|| null == agency.getSubAgencies()
|| agency.getSubAgencies().size() == NumConstant.ZERO) {
return; return;
} }
//定义递归入口 //定义递归入口
agency.getSubAgencies().forEach(obj -> { agency.getSubAgencies().forEach(obj -> {
initAgencyGridMap(pid,obj,subGridOfAgency); initAgencyGridMap(agencyId,obj,subGridOfAgency);
}); });
} }
@ -223,7 +226,7 @@ public class UserServiceImpl implements UserService {
* @Description 执行查询用户数据统计的逻辑 * @Description 执行查询用户数据统计的逻辑
* @param relation - agency(下级机关加网格) | grid(直属网格) * @param relation - agency(下级机关加网格) | grid(直属网格)
* @param agencyId * @param agencyId
* @param pid * @param //pid 当前agency的父级组织id
* @param customerId * @param customerId
* @param gridIds - 机关下所有网格集合/机关下直属网格集合 * @param gridIds - 机关下所有网格集合/机关下直属网格集合
* @param targetDate * @param targetDate
@ -233,10 +236,12 @@ public class UserServiceImpl implements UserService {
* @author wangc * @author wangc
* @date 2020.06.19 10:01 * @date 2020.06.19 10:01
**/ **/
void queryUserData(String relation, String agencyId, String pid, String customerId, Set<String> gridIds, Date targetDate, UserStatisticalData dataPacket, DimIdGenerator.DimIdBean timeDimension){ void queryUserData(String relation, String agencyId,
// String pid,
if(StringUtils.isBlank(pid)) String customerId, Set<String> gridIds, Date targetDate, UserStatisticalData dataPacket, DimIdGenerator.DimIdBean timeDimension){
pid = NumConstant.ZERO_STR; //pid没用到还传过来干啥-- 注释掉
// if(StringUtils.isBlank(pid))
// pid = NumConstant.ZERO_STR;
dataPacket.setCustomerId(customerId); dataPacket.setCustomerId(customerId);

Loading…
Cancel
Save