yinzuomei 4 years ago
parent
commit
3956d3e5b8
  1. 1
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/constant/DataSourceConstant.java
  2. 18
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/customize/IcResiCategoryConfigDTO.java
  3. 32
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/IcUserCategoryAnalysisDailyFormDTO.java
  4. 12
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/OrgIcUserTotalDTO.java
  5. 26
      epmet-module/data-statistical/data-statistical-server/pom.xml
  6. 76
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/IcController.java
  7. 14
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/customize/IcResiCategoryStatsConfigDao.java
  8. 20
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactIcuserCategoryAnalysisDailyDao.java
  9. 9
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java
  10. 71
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/stats/FactIcuserCategoryAnalysisDailyEntity.java
  11. 22
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/customize/IcResiCategoryStatsConfigService.java
  12. 40
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/customize/impl/IcResiCategoryStatsConfigServiceImpl.java
  13. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenCustomerGridService.java
  14. 9
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenCustomerGridServiceImpl.java
  15. 20
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactIcuserCategoryAnalysisDailyService.java
  16. 153
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactIcuserCategoryAnalysisDailyServiceImpl.java
  17. 19
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java
  18. 75
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/impl/UserServiceImpl.java
  19. 5
      epmet-module/data-statistical/data-statistical-server/src/main/resources/bootstrap.yml
  20. 23
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/customize/IcResiCategoryStatsConfigDao.xml
  21. 13
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactIcuserCategoryAnalysisDailyDao.xml
  22. 51
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml

1
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/constant/DataSourceConstant.java

@ -15,4 +15,5 @@ public interface DataSourceConstant {
String PARTY_MEMBER = "partyMember"; String PARTY_MEMBER = "partyMember";
String EPMET_HEART="epmetHeart"; String EPMET_HEART="epmetHeart";
String EPMET_POINT = "epmetPoint"; String EPMET_POINT = "epmetPoint";
String OPER_CUSTOMIZE="operCustomize";
} }

18
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/customize/IcResiCategoryConfigDTO.java

@ -0,0 +1,18 @@
package com.epmet.dto.customize;
import lombok.Data;
import java.io.Serializable;
@Data
public class IcResiCategoryConfigDTO implements Serializable {
private String configId;
/**
* 列名
*/
private String columnName;
private String itemLabel;
}

32
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/form/IcUserCategoryAnalysisDailyFormDTO.java

@ -0,0 +1,32 @@
package com.epmet.dto.extract.form;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
/**
* 数字社区-人员类别分析按天计算入参
* 以下参数都可以为空
*/
@Data
public class IcUserCategoryAnalysisDailyFormDTO implements Serializable {
public interface AddUserInternalGroup {
}
private String customerId;
@Length(max = 8, message = "日期格式:yyyyMMdd", groups = AddUserInternalGroup.class)
private String dateId;
/**
* 开始时间
*/
@Length(max = 8, message = "开始日期日期格式:yyyyMMdd", groups = AddUserInternalGroup.class)
private String startDate;
/**
* 结束时间
*/
@Length(max = 8, message = "截止日期格式:yyyyMMdd", groups = AddUserInternalGroup.class)
private String endDate;
}

12
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/user/result/OrgIcUserTotalDTO.java

@ -0,0 +1,12 @@
package com.epmet.dto.user.result;
import lombok.Data;
import java.io.Serializable;
@Data
public class OrgIcUserTotalDTO implements Serializable {
private String orgId;
private Integer total;
private String columnName;
}

26
epmet-module/data-statistical/data-statistical-server/pom.xml

@ -260,6 +260,13 @@
<datasource.druid.epmetPoint.username>epmet_point_user</datasource.druid.epmetPoint.username> <datasource.druid.epmetPoint.username>epmet_point_user</datasource.druid.epmetPoint.username>
<datasource.druid.epmetPoint.password>EpmEt-db-UsEr</datasource.druid.epmetPoint.password> <datasource.druid.epmetPoint.password>EpmEt-db-UsEr</datasource.druid.epmetPoint.password>
<!-- oper_customize-->
<datasource.druid.operCustomize.url>
<![CDATA[jdbc:mysql://192.168.1.140:3306/epmet_oper_customize?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai]]>
</datasource.druid.operCustomize.url>
<datasource.druid.operCustomize.username>epmet_oper_customize_user</datasource.druid.operCustomize.username>
<datasource.druid.operCustomize.password>EpmEt-db-UsEr</datasource.druid.operCustomize.password>
<!-- redis配置 --> <!-- redis配置 -->
<spring.redis.index>0</spring.redis.index> <spring.redis.index>0</spring.redis.index>
<spring.redis.host>192.168.1.140</spring.redis.host> <spring.redis.host>192.168.1.140</spring.redis.host>
@ -382,6 +389,13 @@
<datasource.druid.epmetPoint.username>epmet_point_user</datasource.druid.epmetPoint.username> <datasource.druid.epmetPoint.username>epmet_point_user</datasource.druid.epmetPoint.username>
<datasource.druid.epmetPoint.password>EpmEt-db-UsEr</datasource.druid.epmetPoint.password> <datasource.druid.epmetPoint.password>EpmEt-db-UsEr</datasource.druid.epmetPoint.password>
<!-- oper_customize-->
<datasource.druid.operCustomize.url>
<![CDATA[jdbc:mysql://192.168.1.140:3306/epmet_oper_customize?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai]]>
</datasource.druid.operCustomize.url>
<datasource.druid.operCustomize.username>epmet_oper_customize_user</datasource.druid.operCustomize.username>
<datasource.druid.operCustomize.password>EpmEt-db-UsEr</datasource.druid.operCustomize.password>
<!-- redis配置 --> <!-- redis配置 -->
<spring.redis.index>0</spring.redis.index> <spring.redis.index>0</spring.redis.index>
<spring.redis.host>192.168.1.140</spring.redis.host> <spring.redis.host>192.168.1.140</spring.redis.host>
@ -504,6 +518,12 @@
<datasource.druid.epmetPoint.username>epmet</datasource.druid.epmetPoint.username> <datasource.druid.epmetPoint.username>epmet</datasource.druid.epmetPoint.username>
<datasource.druid.epmetPoint.password>elink@833066</datasource.druid.epmetPoint.password> <datasource.druid.epmetPoint.password>elink@833066</datasource.druid.epmetPoint.password>
<datasource.druid.operCustomize.url>
<![CDATA[jdbc:mysql://rm-m5ef9t617j6o5eup7.mysql.rds.aliyuncs.com:3306/epmet_oper_customize?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai]]>
</datasource.druid.operCustomize.url>
<datasource.druid.operCustomize.username>epmet</datasource.druid.operCustomize.username>
<datasource.druid.operCustomize.password>elink@833066</datasource.druid.operCustomize.password>
<!-- redis配置 --> <!-- redis配置 -->
<spring.redis.index>0</spring.redis.index> <spring.redis.index>0</spring.redis.index>
<spring.redis.host>r-m5eoz5b6tkx09y6bpz.redis.rds.aliyuncs.com</spring.redis.host> <spring.redis.host>r-m5eoz5b6tkx09y6bpz.redis.rds.aliyuncs.com</spring.redis.host>
@ -622,6 +642,12 @@
<datasource.druid.epmetPoint.username>epmet_point_user</datasource.druid.epmetPoint.username> <datasource.druid.epmetPoint.username>epmet_point_user</datasource.druid.epmetPoint.username>
<datasource.druid.epmetPoint.password>EpmEt-db-UsEr</datasource.druid.epmetPoint.password> <datasource.druid.epmetPoint.password>EpmEt-db-UsEr</datasource.druid.epmetPoint.password>
<datasource.druid.operCustomize.url>
<![CDATA[jdbc:mysql://rm-m5e3vzs2637224wj9.mysql.rds.aliyuncs.com:3306/epmet_oper_customize?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai]]>
</datasource.druid.operCustomize.url>
<datasource.druid.operCustomize.username>epmet_oper_customize_user</datasource.druid.operCustomize.username>
<datasource.druid.operCustomize.password>EpmEt-db-UsEr</datasource.druid.operCustomize.password>
<!-- redis配置 --> <!-- redis配置 -->
<spring.redis.index>0</spring.redis.index> <spring.redis.index>0</spring.redis.index>
<spring.redis.host>r-m5ez3n1j0qc3ykq2ut.redis.rds.aliyuncs.com</spring.redis.host> <spring.redis.host>r-m5ez3n1j0qc3ykq2ut.redis.rds.aliyuncs.com</spring.redis.host>

76
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/IcController.java

@ -0,0 +1,76 @@
package com.epmet.controller;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.extract.form.IcUserCategoryAnalysisDailyFormDTO;
import com.epmet.service.stats.DimCustomerService;
import com.epmet.service.stats.FactIcuserCategoryAnalysisDailyService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 数字社区相关统计任务可以放这目前只有人员类别分析
* @Author yinzuomei
* @Date 2022/01/17
* @Version 1.0
*/
@RestController
@RequestMapping("ic")
public class IcController {
@Autowired
private FactIcuserCategoryAnalysisDailyService userCategoryAnalysisDailyService;
@Autowired
private DimCustomerService dimCustomerService;
/**
* 数字社区-基础信息-人员类别分析-每个类别的人员总数较上月迁入迁出人数
* 说明安调统计截止到当前dateId的党员总数+30迁入党员+之前的居民在本月内变更为党员身份的-10在本月丢失党员身份的人+迁出的人
* @return
*/
@PostMapping("/user/category-analysis-daily")
public Result statUserCategoryDaily(@RequestBody IcUserCategoryAnalysisDailyFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, IcUserCategoryAnalysisDailyFormDTO.AddUserInternalGroup.class);
List<String> customerIds = new ArrayList<>();
if (StringUtils.isNotBlank(formDTO.getCustomerId())) {
customerIds.add(formDTO.getCustomerId());
} else {
//未指定客户,则查询dim_customer表
customerIds = dimCustomerService.selectCustomerIdPage(NumConstant.ONE, NumConstant.ONE_THOUSAND);
}
if (CollectionUtils.isNotEmpty(customerIds)) {
customerIds.forEach(customerId -> {
if (StringUtils.isNotBlank(formDTO.getStartDate()) && StringUtils.isNotBlank(formDTO.getEndDate())) {
//[a,b]yyyyMMdd
List<String> daysBetween = DateUtils.getDaysBetween(formDTO.getStartDate(), formDTO.getEndDate());
daysBetween.forEach(dateId -> {
//计算网格维度的数据
userCategoryAnalysisDailyService.statUserCategoryGridDaily(customerId, dateId);
});
} else if (StringUtils.isNotBlank(formDTO.getDateId())) {
//计算网格维度的数据
userCategoryAnalysisDailyService.statUserCategoryGridDaily(customerId, formDTO.getDateId());
} else {
//计算网格维度的数据
//当前时间的前一天yyyyMMdd
String dateId = LocalDate.now().minusDays(NumConstant.ONE).toString().replace("-", "");
userCategoryAnalysisDailyService.statUserCategoryGridDaily(customerId, dateId);
}
});
}
return new Result();
}
}

14
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/customize/IcResiCategoryStatsConfigDao.java

@ -0,0 +1,14 @@
package com.epmet.dao.customize;
import com.epmet.dto.customize.IcResiCategoryConfigDTO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface IcResiCategoryStatsConfigDao {
List<IcResiCategoryConfigDTO> queryDataColumn(String customerId);
}

20
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/stats/FactIcuserCategoryAnalysisDailyDao.java

@ -0,0 +1,20 @@
package com.epmet.dao.stats;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.entity.stats.FactIcuserCategoryAnalysisDailyEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 人员类别分析
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-01-17
*/
@Mapper
public interface FactIcuserCategoryAnalysisDailyDao extends BaseDao<FactIcuserCategoryAnalysisDailyEntity> {
int limitDelete(@Param("customerId")String customerId,
@Param("dateId")String dateId,
@Param("orgType")String orgType);
}

9
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/user/UserDao.java

@ -269,5 +269,14 @@ public interface UserDao {
List<String> filterUserIds(@Param("userIds") List<String> userIds, @Param("roleKey") String roleKey); List<String> filterUserIds(@Param("userIds") List<String> userIds, @Param("roleKey") String roleKey);
List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(@Param("customerId") String customerId, @Param("dateId") String dateId); List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(@Param("customerId") String customerId, @Param("dateId") String dateId);
List<OrgIcUserTotalDTO> selectCountForGrid(@Param("customerId") String customerId,
@Param("columnName") String columnName);
OrgIcUserTotalDTO selectCountForAgency(@Param("customerId") String customerId,
@Param("columnName") String columnName,
@Param("agencyId") String agencyId);
List<OrgIcUserTotalDTO> selectGridIcUserCategoryTotal(@Param("customerId")String customerId, @Param("dateId")String dateId);
} }

71
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/stats/FactIcuserCategoryAnalysisDailyEntity.java

@ -0,0 +1,71 @@
package com.epmet.entity.stats;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 人员类别分析
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-01-17
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("fact_icuser_category_analysis_daily")
public class FactIcuserCategoryAnalysisDailyEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户id
*/
private String customerId;
/**
* 预警配置ID
*/
private String configId;
/**
* 当前数据是截止到XXX的yyyyMMdd
*/
private String dateId;
/**
* 网格id或者组织id
*/
private String orgId;
/**
* grid或者agency
*/
private String orgType;
/**
* orgid的上级
*/
private String pid;
/**
* orgid的所有上级
*/
private String pids;
/**
* 当前类别总人数
*/
private Integer total;
/**
* 较上月迁出
*/
private Integer qcIncr;
/**
* 较上月迁入
*/
private Integer qrIncr;
}

22
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/customize/IcResiCategoryStatsConfigService.java

@ -0,0 +1,22 @@
package com.epmet.service.customize;
import com.epmet.dto.customize.IcResiCategoryConfigDTO;
import java.util.List;
/**
* 居民类别配置表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-11-04
*/
public interface IcResiCategoryStatsConfigService {
/**
* 返回用于数据分析的列名+居民类别配置表的id
* @param customerId
* @return
*/
List<IcResiCategoryConfigDTO> queryDataColumn(String customerId);
}

40
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/customize/impl/IcResiCategoryStatsConfigServiceImpl.java

@ -0,0 +1,40 @@
package com.epmet.service.customize.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.constant.DataSourceConstant;
import com.epmet.dao.customize.IcResiCategoryStatsConfigDao;
import com.epmet.dto.customize.IcResiCategoryConfigDTO;
import com.epmet.service.customize.IcResiCategoryStatsConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 居民类别配置表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-11-04
*/
@Slf4j
@DataSource(DataSourceConstant.OPER_CUSTOMIZE)
@Service
public class IcResiCategoryStatsConfigServiceImpl implements IcResiCategoryStatsConfigService{
@Autowired
private IcResiCategoryStatsConfigDao baseDao;
/**
* 返回用于数据分析的列名+居民类别配置表的id
*
* @param customerId
* @return
*/
@Override
public List<IcResiCategoryConfigDTO> queryDataColumn(String customerId) {
return baseDao.queryDataColumn(customerId);
}
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenCustomerGridService.java

@ -19,6 +19,7 @@ package com.epmet.service.evaluationindex.screen;
import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.extract.form.*; import com.epmet.dto.extract.form.*;
import com.epmet.dto.extract.result.GridInfoResultDTO; import com.epmet.dto.extract.result.GridInfoResultDTO;
import com.epmet.dto.indexcollect.form.CustomerBizOrgFormDTO; import com.epmet.dto.indexcollect.form.CustomerBizOrgFormDTO;
@ -136,4 +137,6 @@ public interface ScreenCustomerGridService extends BaseService<ScreenCustomerGri
* @return * @return
*/ */
Date getLastSyncEndTime(); Date getLastSyncEndTime();
List<CustomerGridDTO> getByCustomerId(String customerId);
} }

9
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenCustomerGridServiceImpl.java

@ -29,6 +29,7 @@ import com.epmet.constant.DataSourceConstant;
import com.epmet.constant.OrgSourceTypeConstant; import com.epmet.constant.OrgSourceTypeConstant;
import com.epmet.dao.evaluationindex.screen.DimLastSyncRecordDao; import com.epmet.dao.evaluationindex.screen.DimLastSyncRecordDao;
import com.epmet.dao.evaluationindex.screen.ScreenCustomerGridDao; import com.epmet.dao.evaluationindex.screen.ScreenCustomerGridDao;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.extract.form.*; import com.epmet.dto.extract.form.*;
import com.epmet.dto.extract.result.GridInfoResultDTO; import com.epmet.dto.extract.result.GridInfoResultDTO;
import com.epmet.dto.indexcollect.form.CustomerBizOrgFormDTO; import com.epmet.dto.indexcollect.form.CustomerBizOrgFormDTO;
@ -290,4 +291,12 @@ public class ScreenCustomerGridServiceImpl extends BaseServiceImpl<ScreenCustome
public Date getLastSyncEndTime() { public Date getLastSyncEndTime() {
return dimLastSyncRecordDao.getDimLastSyncEndTime("grid"); return dimLastSyncRecordDao.getDimLastSyncEndTime("grid");
} }
@Override
public List<CustomerGridDTO> getByCustomerId(String customerId) {
LambdaQueryWrapper<ScreenCustomerGridEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ScreenCustomerGridEntity::getCustomerId, customerId);
List<ScreenCustomerGridEntity> list = baseDao.selectList(wrapper);
return ConvertUtils.sourceToTarget(list,CustomerGridDTO.class);
}
} }

20
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/FactIcuserCategoryAnalysisDailyService.java

@ -0,0 +1,20 @@
package com.epmet.service.stats;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.entity.stats.FactIcuserCategoryAnalysisDailyEntity;
/**
* 人员类别分析
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-01-17
*/
public interface FactIcuserCategoryAnalysisDailyService extends BaseService<FactIcuserCategoryAnalysisDailyEntity> {
/**
* 数字社区-基础信息-人员类别分析-每个类别的人员总数较上月迁入迁出人数
* 网格
* @param customerId
* @param dateId
*/
void statUserCategoryGridDaily(String customerId, String dateId);
}

153
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/stats/impl/FactIcuserCategoryAnalysisDailyServiceImpl.java

@ -0,0 +1,153 @@
package com.epmet.service.stats.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.constant.DataSourceConstant;
import com.epmet.dao.stats.FactIcuserCategoryAnalysisDailyDao;
import com.epmet.dto.CustomerGridDTO;
import com.epmet.dto.customize.IcResiCategoryConfigDTO;
import com.epmet.dto.user.result.OrgIcUserTotalDTO;
import com.epmet.entity.stats.FactIcuserCategoryAnalysisDailyEntity;
import com.epmet.service.customize.IcResiCategoryStatsConfigService;
import com.epmet.service.evaluationindex.screen.ScreenCustomerAgencyService;
import com.epmet.service.evaluationindex.screen.ScreenCustomerGridService;
import com.epmet.service.stats.FactIcuserCategoryAnalysisDailyService;
import com.epmet.service.user.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 人员类别分析
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-01-17
*/
@Service
@Slf4j
@DataSource(DataSourceConstant.STATS)
public class FactIcuserCategoryAnalysisDailyServiceImpl extends BaseServiceImpl<FactIcuserCategoryAnalysisDailyDao, FactIcuserCategoryAnalysisDailyEntity> implements FactIcuserCategoryAnalysisDailyService {
@Autowired
private IcResiCategoryStatsConfigService icResiCategoryStatsConfigService;
@Autowired
private ScreenCustomerAgencyService agencyService;
@Autowired
private ScreenCustomerGridService gridService;
@Autowired
private UserService userService;
/**
* 数字社区-基础信息-人员类别分析-每个类别的人员总数较上月迁入迁出人数
*
* @param customerId
* @param dateId
*/
@Override
public void statUserCategoryGridDaily(String customerId, String dateId) {
//查询出所有用语数据分析的类别column_name,没有则不计算
List<IcResiCategoryConfigDTO> columnList=icResiCategoryStatsConfigService.queryDataColumn(customerId);
if(CollectionUtils.isEmpty(columnList)){
return;
}
// //所有网格和组织查询出来
// List<CustomerAgencyDTO> agencyDTOList=agencyService.getByCustomerId(customerId);
List<CustomerGridDTO> gridDTOList=gridService.getByCustomerId(customerId);
//网格维度、组织维度初始好数据
List<FactIcuserCategoryAnalysisDailyEntity> initList=constructInitValue(customerId,dateId,gridDTOList,columnList);
if(CollectionUtils.isEmpty(initList)){
return;
}
// 批量插入数据
//删除旧数据
clearOldDatas(customerId,dateId,OrgTypeEnum.GRID.getCode());
}
private void clearOldDatas(String customerId, String dateId,String orgType) {
int deleteNum;
do {
//每次删除1000条
deleteNum = baseDao.limitDelete(customerId,dateId,orgType);
} while (deleteNum != NumConstant.ZERO);
}
/**
*
* @param customerId
* @param dateId yyyyMMdd
* @param gridDTOList 当前客户下所有的网格
* @param columnList 所有需要分析的类别对应的ic_resi_user的列名目前只有18类
* @return
*/
private List<FactIcuserCategoryAnalysisDailyEntity> constructInitValue(String customerId,String dateId, List<CustomerGridDTO> gridDTOList,List<IcResiCategoryConfigDTO> columnList) {
List<FactIcuserCategoryAnalysisDailyEntity> list=new ArrayList<>();
if(CollectionUtils.isEmpty(gridDTOList)){
//没有配置的类别,退出吧
return list;
}
//1、total
// 查询明细ic_user_change_detailed变更明细表,各个网格的各个分类的总人数
Map<String, List<OrgIcUserTotalDTO>> totalMapList=userService.calGridIcUserTotal(customerId,dateId);
String monthId=dateId.substring(NumConstant.ZERO,NumConstant.SIX);
String startDate=monthId.concat("01");
String endDate=dateId;
//2、迁入+30:eg:dateId:20211226, [20211201,20211226],类别sum值=1的
Map<String, List<OrgIcUserTotalDTO>> qrList=userService.calGridIcUserQr(customerId,dateId);
//3、迁出 -10 :eg:dateId:20211226, [20211201,20211226],类别sum值 !=1的
Map<String, List<OrgIcUserTotalDTO>> qrList=userService.calGridIcUserQr(customerId,dateId);
for(IcResiCategoryConfigDTO config:columnList){
gridDTOList.forEach(grid->{
FactIcuserCategoryAnalysisDailyEntity gridData=new FactIcuserCategoryAnalysisDailyEntity();
gridData.setCustomerId(customerId);
gridData.setConfigId(config.getConfigId());
gridData.setDateId(dateId);
gridData.setOrgId(grid.getId());
gridData.setOrgType(OrgTypeEnum.GRID.getCode());
gridData.setPid(StringUtils.isNotBlank(grid.getPid())?grid.getPid(): NumConstant.ZERO_STR);
gridData.setPids(grid.getPids());
boolean zeroFlag=true;
if(MapUtils.isNotEmpty(totalMapList)&&totalMapList.containsKey(grid.getId())){
//当前网格下,有的类别
List<OrgIcUserTotalDTO> crrentGrid=totalMapList.get(grid.getId());
if(CollectionUtils.isNotEmpty(crrentGrid)){
//各个类别对应的数
Map<String,Integer> categoryTotalMap=crrentGrid.stream().collect(Collectors.toMap(OrgIcUserTotalDTO::getColumnName, OrgIcUserTotalDTO::getTotal, (key1, key2) -> key2));
if(MapUtils.isNotEmpty(categoryTotalMap)&&categoryTotalMap.containsKey(config.getColumnName())){
zeroFlag=false;
gridData.setTotal(categoryTotalMap.get(config.getColumnName()));
}
}
}
if(zeroFlag){
gridData.setTotal(NumConstant.ZERO);
}
gridData.setQcIncr(NumConstant.ZERO);
gridData.setQrIncr(NumConstant.ZERO);
list.add(gridData);
});
}
return list;
}
public static void main(String[] args) {
String dateId="20211225";
System.out.println(dateId.substring(0,6));
}
}

19
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/user/UserService.java

@ -157,4 +157,23 @@ public interface UserService {
* @return * @return
*/ */
List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(String customerId, String dateId); List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(String customerId, String dateId);
Map<String,Integer> selectCountForGrid(String customerId, String columnName);
/**
*
* @param customerId
* @param columnName
* @param agencyIds
* @return
*/
Map<String, Integer> selectCountForGrid(String customerId, String columnName, List<String> agencyIds);
/**
*
* @param customerId
* @param dateId 截止到这一天的各个网格下每个分类的总人数
* @return
*/
Map<String, List<OrgIcUserTotalDTO>> calGridIcUserTotal(String customerId, String dateId);
} }

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

@ -1126,4 +1126,79 @@ public class UserServiceImpl implements UserService {
public List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(String customerId, String dateId) { public List<PatrolRoutineWorkResult> selectRoutineWorkListByDateId(String customerId, String dateId) {
return userDao.selectRoutineWorkListByDateId(customerId, dateId); return userDao.selectRoutineWorkListByDateId(customerId, dateId);
} }
/**
*
* @param customerId
* @param columnName
* @return 截止到目前每个网格内某个分类的总人数
*/
@Override
public Map<String, Integer> selectCountForGrid(String customerId, String columnName) {
Map<String, Integer> map = new HashMap<>();
List<OrgIcUserTotalDTO> list = userDao.selectCountForGrid(customerId, columnName);
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)) {
map = list.stream().collect(Collectors.toMap(OrgIcUserTotalDTO::getOrgId, OrgIcUserTotalDTO::getTotal));
}
return map;
}
/**
* @param customerId
* @param columnName
* @param agencyIds
* @return 截止到目前各个组织内某个分类的总人数
*/
@Override
public Map<String, Integer> selectCountForGrid(String customerId, String columnName, List<String> agencyIds) {
Map<String, Integer> map = new HashMap<>();
if (CollectionUtils.isEmpty(agencyIds)) {
return map;
}
List<OrgIcUserTotalDTO> list = new ArrayList<>();
for (String agencyId:agencyIds) {
OrgIcUserTotalDTO dto=new OrgIcUserTotalDTO();
dto.setOrgId(agencyId);
OrgIcUserTotalDTO totalDto=userDao.selectCountForAgency(customerId,columnName,agencyId);
dto.setTotal(null!=totalDto?totalDto.getTotal():NumConstant.ZERO);
list.add(dto);
}
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)) {
map = list.stream().collect(Collectors.toMap(OrgIcUserTotalDTO::getOrgId, OrgIcUserTotalDTO::getTotal));
}
return map;
}
/**
* @param customerId
* @param dateId 截止到这一天的各个网格下每个分类的总人数
* @return
*/
@Override
public Map<String, List<OrgIcUserTotalDTO>> calGridIcUserTotal(String customerId, String dateId) {
Map<String, List<OrgIcUserTotalDTO>> resultMap=new HashMap<>();
List<OrgIcUserTotalDTO> list=userDao.selectGridIcUserCategoryTotal(customerId,dateId);
if(CollectionUtils.isEmpty(list)){
return resultMap;
}
// list 数据
// gridId columnName total
// 1001 IS_DBH 1
// 1001 IS_PARTY 1
// 1002 IS_DBH 1
// 1002 IS_ENSURE_HOUSE 1
// 1003 IS_VETERANS 1
// 1004 IS_PARTY 1
for(OrgIcUserTotalDTO dto:list){
if(resultMap.containsKey(dto.getOrgId())){
resultMap.get(dto.getOrgId()).add(dto);
continue;
}
List<OrgIcUserTotalDTO> newList=new ArrayList<>();
newList.add(dto);
resultMap.put(dto.getOrgId(),newList);
}
return resultMap;
}
} }

5
epmet-module/data-statistical/data-statistical-server/src/main/resources/bootstrap.yml

@ -188,6 +188,11 @@ dynamic:
url: @datasource.druid.epmetPoint.url@ url: @datasource.druid.epmetPoint.url@
username: @datasource.druid.epmetPoint.username@ username: @datasource.druid.epmetPoint.username@
password: @datasource.druid.epmetPoint.password@ password: @datasource.druid.epmetPoint.password@
operCustomize:
driver-class-name: com.mysql.cj.jdbc.Driver
url: @datasource.druid.operCustomize.url@
username: @datasource.druid.operCustomize.username@
password: @datasource.druid.operCustomize.password@
thread: thread:
# 线程池配置 # 线程池配置

23
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/customize/IcResiCategoryStatsConfigDao.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.customize.IcResiCategoryStatsConfigDao">
<select id="queryDataColumn" parameterType="java.lang.String" resultType="com.epmet.dto.customize.IcResiCategoryConfigDTO">
SELECT
m.COLUMN_NAME as columnName,
c.id as configId,
m.LABEL as itemLabel
FROM
ic_form_item m
INNER JOIN ic_resi_category_stats_config c ON ( m.CUSTOMER_ID = c.CUSTOMER_ID AND m.COLUMN_NAME = c.COLUMN_NAME AND c.DEL_FLAG = '0' )
WHERE
m.DEL_FLAG = '0'
AND m.DATA_ANALYSE = '1'
AND m.CUSTOMER_ID = #{customerId}
ORDER BY
m.SORT ASC
</select>
</mapper>

13
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/FactIcuserCategoryAnalysisDailyDao.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.stats.FactIcuserCategoryAnalysisDailyDao">
<delete id="limitDelete" parameterType="map">
delete from fact_icuser_category_analysis_daily
where CUSTOMER_ID = #{customerId}
and date_id=#{dateId}
and org_type=#{orgType}
limit 1000
</delete>
</mapper>

51
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/user/UserDao.xml

@ -1074,4 +1074,55 @@
</select> </select>
<select id="selectCountForGrid" parameterType="map" resultType="com.epmet.dto.user.result.OrgIcUserTotalDTO">
SELECT
m.grid_id as orgId
count(*) AS total,
#{columnName} as columnName
FROM
ic_resi_user m
WHERE
m.DEL_FLAG = '0'
AND m.CUSTOMER_ID = #{customerId}
AND concat('m.',${columnName}) = '1'
AND m.GRID_ID=#{gridId}
group by m.grid_id
</select>
<select id="selectCountForAgency" parameterType="map" resultType="com.epmet.dto.user.result.OrgIcUserTotalDTO">
SELECT
#{agencyId} as orgId,
count(*) AS total,
#{columnName} as columnName
FROM
ic_resi_user m
WHERE
m.DEL_FLAG = '0'
AND m.CUSTOMER_ID = #{customerId}
AND concat('m.',${columnName}) = '1'
AND ( m.AGENCY_ID = #{agencyId} OR M.PIDS LIKE CONCAT( '%', #{agencyId}, '%' ) )
</select>
<select id="selectGridIcUserCategoryTotal" parameterType="map" resultType="com.epmet.dto.user.result.OrgIcUserTotalDTO">
select
temp.orgId,
temp.FIELD_NAME as columnName,
count(distinct temp.IC_USER_ID) as total
from (
SELECT
d.GRID_ID as orgId,
d.IC_USER_ID,
d.FIELD_NAME,
sum(d.`VALUE`)as result
FROM
ic_user_change_detailed d
WHERE
d.DEL_FLAG = '0'
AND d.CUSTOMER_ID = #{customerId}
AND DATE_FORMAT( d.CREATED_TIME, '%Y%m%d' ) &lt;= #{dateId}
group by d.orgId,d.IC_USER_ID,d.FIELD_NAME
)temp
where temp.result=1
group by temp.orgId,temp.FIELD_NAME
</select>
</mapper> </mapper>

Loading…
Cancel
Save