Browse Source

zancun

master
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. 49
      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 {
private static final long serialVersionUID = 7423427555123585566L;
/**
* 机关下(按日)参与用户数分析
*/
private List<FactParticipationUserAgencyDailyDTO> partiAgencyDailyList;
/**
* 网格下(按日)参与用户数分析
*/
private List<FactParticipationUserGridDailyDTO> partiGridDailyList;
/**
* 机关下(按月)参与用户数分析
*/
private List<FactParticipationUserAgencyMonthlyDTO> partiAgencyMonthlyList;
/**
* 网格下()参与用户数分析
*/
private List<FactParticipationUserGridMonthlyDTO> partiGridMonthlyList;
/**
* 机关(按日)注册用户数分析
*/
private List<FactRegUserAgencyDailyDTO> regAgencyDailyList;
/**
* 网格(按日)注册用户数分析
*/
private List<FactRegUserGridDailyDTO> regGridDailyList;
/**
* 机关(按月)注册用户数分析
*/
private List<FactRegUserAgencyMonthlyDTO> regAgencyMonthlyList;
/**
* 网格()注册用户数分析
*/
private List<FactRegUserGridMonthlyDTO> regGridMonthlyList;
/**
* 当前正在计算的客户id
*/
private String customerId;
/**
* yyyyMMdd
*/
private String dateId;
/**
* yyyyMM
*/
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
private StatsUserService statsUserService;
/**
* @return com.epmet.commons.tools.utils.Result
* @param formDTO
* @description 工作端数据一期用户分析参与用户注册用户分析
* @Date 2021/3/26 13:27
**/
@RequestMapping("execute")
public Result execute(@RequestBody StatsFormDTO 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;
Date date = null;
if (StringUtils.isNotBlank(formDTO.getDate())) {
//如果指定了参数,转化为yyyy-MM-dd格式
date = DateUtils.stringToDate(formDTO.getDate(), DateUtils.DATE_PATTERN);
}
if (StringUtils.isNotBlank(formDTO.getCustomerId())) {
generate(formDTO.getCustomerId(), date);
} else {
do {
//每100个客户一组
customerIdList = dimCustomerService.selectCustomerIdPage(pageNo++, pageSize);
if (!CollectionUtils.isEmpty(customerIdList)) {
for (String customerId : customerIdList) {
@ -99,13 +101,14 @@ public class StatsUserServiceImpl implements StatsUserService {
calendar.set(Calendar.MINUTE, 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);
//3.初始化机关维度
List<AgencySubTreeDto> agencies = dimAgencyService.getAllAgency(customerId);
//List<AgencySubTreeDto> topAgencies = dimAgencyService.getTopAgency(customerId);
// log.info(JSON.toJSONString(timeDimension));
// log.info(JSON.toJSONString(agencies));
//4.计算机关统计数据、生成唯一性统计数据
try {
UserStatisticalData agencyData = userService.traverseAgencyUser(agencies, date, timeDimension);

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

Loading…
Cancel
Save