Browse Source

Merge remote-tracking branch 'origin/dev_public_join' into dev

dev_shibei_match
zxc 4 years ago
parent
commit
43f9ddedb3
  1. 16
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  2. 5
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AgencyFormDTO.java
  3. 24
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/UserJoinIndicatorGrowthRateResultDTO.java
  4. 57
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/GrassRootsGovernServiceImpl.java
  5. 8
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/utils/DateUtils.java
  6. 42
      epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenUserJoinDao.xml
  7. 20
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screencoll/form/UserJoinFormDTO.java
  8. 16
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/GovernConstant.java
  9. 21
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenUserJoinDao.java
  10. 20
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenUserJoinEntity.java
  11. 294
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java
  12. 13
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenUserJoinService.java
  13. 19
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenUserJoinServiceImpl.java
  14. 7
      epmet-module/data-statistical/data-statistical-server/src/main/resources/db/migration/V0.0.22__pulic_party.sql
  15. 25
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenUserJoinDao.xml

16
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java

@ -446,6 +446,22 @@ public class DateUtils {
return DateUtils.format(date,DateUtils.DATE_PATTERN_YYYYMM);
}
/**
* @Description 获取指定 月份的前n月 返回yyyyMM
* @Param beforeMonth
* @Param monthId
* @author zxc
* @date 2021/7/9 2:44 下午
*/
public static String getBeforeNMonthByMonth(int beforeMonth, String monthId){
StringBuilder builder = new StringBuilder(monthId);
builder.insert(NumConstant.FOUR,"-");
builder.insert(builder.length(),"-01");
LocalDate parse = LocalDate.parse(builder.toString());
LocalDate localDate = parse.minusMonths(beforeMonth);
return localDate.toString().replace("-","").substring(NumConstant.ZERO,NumConstant.SIX);
}
/**
* @return java.util.List<java.lang.String> 返回yyyyMMdd
* @param startTime yyyyMMdd

5
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/form/AgencyFormDTO.java

@ -21,4 +21,9 @@ public class AgencyFormDTO implements Serializable {
@NotBlank(message = "机关Id不能为空" , groups = CommonAgencyIdGroup.class)
private String agencyId;
/**
* 平阴县默认穿370124,跟随8个街道点击事件传入街道的areaCode
* */
private String areaCode;
}

24
epmet-module/data-report/data-report-client/src/main/java/com/epmet/evaluationindex/screen/dto/result/UserJoinIndicatorGrowthRateResultDTO.java

@ -8,7 +8,7 @@ import java.math.BigDecimal;
/**
* @Description 用户参与各项指标以及增长查询结果dto
* @ClassName UserJoinIndicatorGrowthRateResultDTO
* @Auth wangc
* @author wangc
* @Date 2020-08-21 16:07
*/
@Data
@ -16,25 +16,33 @@ public class UserJoinIndicatorGrowthRateResultDTO implements Serializable {
private static final long serialVersionUID = -8830240350298414599L;
private String id;
/**
* 总参与数
* */
private Integer total;
/**
* 总参与数月增长
* */
private BigDecimal monthIncr;
/**
* incr上升, decr下降
* 总参与数incr上升, decr下降
* */
private String monthTrend;
/**
* 人均议题
* */
private BigDecimal averageIssue;
/**
* 较上月百分比
* 人均议题较上月百分比
* */
private BigDecimal issueCompareLatestMonth;
/**
* 较上月趋势incr上升decr下降
* 人均议题较上月趋势incr上升decr下降
* */
private String issueCompareLatestTrend;
@ -43,7 +51,13 @@ public class UserJoinIndicatorGrowthRateResultDTO implements Serializable {
*/
private BigDecimal averageJoin;
/**
* 平均参与度: 较上月百分比
*/
private BigDecimal joinCompareLatestMonth;
/**
* 平均参与度较上月趋势incr上升decr下降
*/
private String joinCompareLatestTrend;
}

57
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/GrassRootsGovernServiceImpl.java

@ -133,30 +133,57 @@ public class GrassRootsGovernServiceImpl implements GrassRootsGovernService {
* @author wangc
* @date 2020.08.20 14:37
**/
@DataSource(value = DataSourceConstant.EVALUATION_INDEX,datasourceNameFromArg = true)
@DataSource(value = DataSourceConstant.EVALUATION_INDEX, datasourceNameFromArg = true)
@Override
public PublicPartiProfileResultDTO publicPartiProfile(AgencyFormDTO param) {
ScreenCustomerAgencyDTO agencyInfo = agencyInfo(param.getAgencyId());
Result<List<String>> crmResp = crmClient.getAllSubCustomerIds(agencyInfo.getCustomerId());
List<String> subCustomers;
if(null == crmResp || !crmResp.success()|| org.apache.commons.collections4.CollectionUtils.isEmpty(crmResp.getData())) {subCustomers = null ;}
else {subCustomers = crmResp.getData();}
String monthId = dateUtils.getPreviousMonthId(NumConstant.ONE);
UserJoinIndicatorGrowthRateResultDTO latest = new UserJoinIndicatorGrowthRateResultDTO();
if (StringUtils.isNotBlank(param.getAreaCode()) && "370124".equals(param.getAreaCode())) {
latest= screenUserJoinDao.selectUserJoinDataByAreaCode(param.getAreaCode(), monthId);
if (null == latest) {
log.warn(String.format("平阴县查询screen_user_join表为空,monthId:%s", monthId));
return new PublicPartiProfileResultDTO();
}
UserJoinIndicatorGrowthRateResultDTO beforeTwoMonth = screenUserJoinDao.selectUserJoinDataByAreaCode(param.getAreaCode(), dateUtils.getPreviousMonthId(NumConstant.TWO));
if (null == beforeTwoMonth) {
log.warn(String.format("平阴县查询screen_user_join表为空,monthId:%s",dateUtils.getPreviousMonthId(NumConstant.TWO)));
}else{
//举例,today is 20210707 , latest是06月份的数据,beforeTwoMonth是05月份的数据
String monthId = dateUtils.getCurrentMonthId();
UserJoinIndicatorGrowthRateResultDTO latest = CollectionUtils.isEmpty(subCustomers) ||StringUtils.isBlank(agencyInfo.getAreaCode())?
screenUserJoinDao.selectUserJoinData(param.getAgencyId(), monthId) :
screenUserJoinDao.selectUserJoinDataByAreaCode(agencyInfo.getAreaCode(),monthId);
// 总参与数6月份比5月份增加了?
int incrTotal = latest.getTotal() - beforeTwoMonth.getTotal();
// 总参与数月增长:增加的占5月份的占比???
BigDecimal monthIncr = BigDecimal.valueOf(incrTotal / beforeTwoMonth.getTotal());
latest.setMonthIncr(monthIncr);
latest.setMonthTrend(monthIncr.compareTo(BigDecimal.ZERO) > 0 ? "incr" : "decr");
//人均议题数6月份比五月份增加了?
BigDecimal issueIncrTotal = latest.getAverageIssue().subtract(beforeTwoMonth.getAverageIssue());
//人均议题数月增长:增加的占5月份的占比???
BigDecimal issueCompareLatestMonth = issueIncrTotal.divide(beforeTwoMonth.getAverageIssue());
latest.setIssueCompareLatestMonth(issueCompareLatestMonth);
latest.setIssueCompareLatestTrend(issueCompareLatestMonth.compareTo(BigDecimal.ZERO) > 0 ? "incr" : "decr");
// 平均参与度6月份比5月份增加了?
BigDecimal incrJoinCompareLatestMonth=latest.getJoinCompareLatestMonth().subtract(beforeTwoMonth.getJoinCompareLatestMonth());
//平均参与度月增长:增加的占5月份的占比???
BigDecimal joinCompareLatestMonth=incrJoinCompareLatestMonth.divide(beforeTwoMonth.getJoinCompareLatestMonth());
latest.setJoinCompareLatestMonth(joinCompareLatestMonth);
latest.setJoinCompareLatestTrend(joinCompareLatestMonth.compareTo(BigDecimal.ZERO) > 0 ? "incr" : "decr");
}
} else {
latest = screenUserJoinDao.selectUserJoinData(param.getAgencyId(), monthId);
//保证获取公众参与概率数据的最大可能性
int time = NumConstant.TWELVE;
while ((null == latest || latest.getId() == null) && time > NumConstant.ONE) {
time--;
monthId = dateUtils.getPreviousMonthIdByDest(null, monthId);
latest = CollectionUtils.isEmpty(subCustomers)||StringUtils.isBlank(agencyInfo.getAreaCode()) ?
screenUserJoinDao.selectUserJoinData(param.getAgencyId(), monthId) :
screenUserJoinDao.selectUserJoinDataByAreaCode(agencyInfo.getAreaCode(),monthId);
latest = screenUserJoinDao.selectUserJoinData(param.getAgencyId(), monthId);
}
}
if (null == latest) {
return new PublicPartiProfileResultDTO();
}
if (null == latest) return new PublicPartiProfileResultDTO();
PublicPartiProfileResultDTO result = ConvertUtils.sourceToTarget(latest, PublicPartiProfileResultDTO.class);
result.setMonthIncr(convertPercentStr(latest.getMonthIncr(), NumConstant.ZERO));
result.setJoinCompareLatestMonth(convertPercentStr(latest.getJoinCompareLatestMonth().abs(), NumConstant.ZERO));

8
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/utils/DateUtils.java

@ -107,17 +107,17 @@ public class DateUtils {
}
/**
* @Description 得到上个月的monthId
* @param
* @Description 前n个月
* @param beforeMonthNum
* @return
* @author wangc
* @date 2020.08.20 10:19
**/
public String getPreviousMonthId(){
public String getPreviousMonthId(int beforeMonthNum){
SimpleDateFormat format = new SimpleDateFormat("yyyyMM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date()); // 设置为当前时间
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); // 设置为上一个月
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - beforeMonthNum); // 设置为上一个月
return format.format(calendar.getTime());
}

42
epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenUserJoinDao.xml

@ -28,36 +28,22 @@
<!-- 根据地区码查询用户参与数据 -->
<select id="selectUserJoinDataByAreaCode" resultType="com.epmet.evaluationindex.screen.dto.result.UserJoinIndicatorGrowthRateResultDTO">
SELECT
scj.ID,
IFNULL(avg( scj.JOIN_TOTAL ),0) AS total,
IFNULL(ROUND( avg( scj.AVG_JOIN ), 1 ),0) AS averageJoin,
IFNULL(avg( scj.JOIN_TOTAL_UP_RATE ),0) AS monthIncr,
(case when IFNULL(avg( scj.JOIN_TOTAL_UP_RATE ),0) &gt;0 then 'incr'
when IFNULL(avg( scj.JOIN_TOTAL_UP_RATE ),0) &lt; 0 then 'decr'
else 'eq'
end )as monthTrend,
ROUND( IFNULL(avg( scj.AVG_ISSUE ),0), 1 ) AS averageIssue,
IFNULL(avg( scj.AVG_ISSUE_UP_RATE ),0) AS issueCompareLatestMonth,
(
case when IFNULL(avg( scj.AVG_ISSUE_UP_RATE ),0) &gt; 0 then 'incr'
when IFNULL(avg( scj.AVG_ISSUE_UP_RATE ),0) &lt; 0 then 'decr'
else 'eq'
end
)as issueCompareLatestTrend,
IFNULL(avg( scj.AGVG_JOIN_UP_RATE) ,0) AS joinCompareLatestMonth,
(
case when IFNULL(avg( scj.AGVG_JOIN_UP_RATE ),0) &gt; 0 then 'incr'
when IFNULL(avg( scj.AGVG_JOIN_UP_RATE ),0) &lt; 0 then 'decr'
else 'eq'
end
)as joinCompareLatestTrend
ifnull(sum(suj.JOIN_TOTAL),0) as total,
0 as monthIncr,
''as monthTrend,
round(IFNULL(sum(suj.avg_issue_fz)/sum(suj.avg_issue_fm),0)) as averageIssue,
0 as issueCompareLatestMonth,
'' as issueCompareLatestTrend,
round(ifnull(sum(suj.avg_join_fz)/sum(suj.avg_join_fm),0))as averageJoin,
0 as joinCompareLatestMonth,
'' as joinCompareLatestTrend
FROM
screen_user_join scj
LEFT JOIN screen_customer_agency agency ON scj.org_id = agency.agency_id
screen_user_join suj
INNER JOIN screen_customer_agency sca ON ( suj.ORG_ID = sca.AGENCY_ID AND sca.DEL_FLAG = '0' )
WHERE
scj.DEL_FLAG = '0'
AND scj.MONTH_ID = #{monthId}
AND agency.PARENT_AREA_CODE =#{areaCode}
suj.ORG_TYPE = 'agency'
AND sca.PARENT_AREA_CODE = #{areaCode}
AND suj.MONTH_ID = #{monthId}
</select>

20
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screencoll/form/UserJoinFormDTO.java

@ -50,6 +50,16 @@ public class UserJoinFormDTO implements Serializable {
*/
private BigDecimal avgIssue;
/**
* 人均议题分子
*/
private Integer avgIssueFz;
/**
* 人均议题分母
*/
private Integer avgIssueFm;
/**
* 总的参与次数
*/
@ -59,4 +69,14 @@ public class UserJoinFormDTO implements Serializable {
* 平均参与度
*/
private BigDecimal avgJoin;
/**
* 平均参与度分子
*/
private Integer avgJoinFz;
/**
* 平均参与度分母
*/
private Integer avgJoinFm;
}

16
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/constant/GovernConstant.java

@ -0,0 +1,16 @@
package com.epmet.constant;
/**
* @Author zxc
* @DateTime 2021/7/9 3:24 下午
* @DESC
*/
public interface GovernConstant {
/**
* 增长incr下降decr 相等 eq
*/
String INCR = "incr";
String DECR = "decr";
String EQ = "eq";
}

21
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenUserJoinDao.java

@ -62,6 +62,17 @@ public interface ScreenUserJoinDao extends BaseDao<ScreenUserJoinEntity> {
Integer deleteUserJoin(@Param("customerId") String customerId,
@Param("monthId") String monthId);
/**
* @Description 根据类别删除
* @Param customerId
* @Param monthId
* @Param delFlag
* @author zxc
* @date 2021/7/9 2:21 下午
*/
Integer deleteUserJoinByCategory(@Param("customerId") String customerId,@Param("monthId") String monthId,
@Param("delFlag") String delFlag);
/**
* 11基层治理-公众参与
* 2) 在批量新增
@ -72,4 +83,14 @@ public interface ScreenUserJoinDao extends BaseDao<ScreenUserJoinEntity> {
* @Date 10:52 2020-08-18
**/
void batchInsertUserJoin(@Param("list") List<ScreenUserJoinEntity> list, @Param("customerId")String customerId);
/**
* @Description 根据月份查询screenUserJoin
* @Param customerId
* @Param monthId
* @Param flag agency grid
* @author zxc
* @date 2021/7/9 3:13 下午
*/
List<ScreenUserJoinEntity> selectScreenUserJoin(@Param("customerId")String customerId, @Param("monthId")String monthId, @Param("flag")String flag);
}

20
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenUserJoinEntity.java

@ -92,6 +92,16 @@ public class ScreenUserJoinEntity extends BaseEpmetEntity {
*/
private BigDecimal avgIssue;
/**
* 人均议题分子
*/
private Integer avgIssueFz;
/**
* 人均议题分母
*/
private Integer avgIssueFm;
/**
* 人均议题较上月增长率(采集的时候后台自己计算)
*/
@ -107,6 +117,16 @@ public class ScreenUserJoinEntity extends BaseEpmetEntity {
*/
private BigDecimal avgJoin;
/**
* 平均参与度分子
*/
private Integer avgJoinFz;
/**
* 平均参与度分母
*/
private Integer avgJoinFm;
/**
* 平均参与度较上月增长率(采集的时候后台自己计算)
*/

294
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.constant.GovernConstant;
import com.epmet.constant.OrgTypeConstant;
import com.epmet.constant.ProjectConstant;
import com.epmet.dto.extract.form.ExtractScreenFormDTO;
@ -76,6 +77,14 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
* <p>
* 不考虑市北人均议题统计周期内议题总数/发过议题的人数 参与度各个行为(表决)的总数/发生行为的人数
*
*
* ================================================================================================================
* ================================================================================================================
* 2021-07-09 新注释
* 公众参与里的指标含义说明
* 总参与议题参与的次数比如 表决 等行为产品只有表决行为其他三个街道 包含评论数点赞数点踩数
* 人均议题议题总数/组织内的总人数项目绑定网格的总用户数产品组织内的小组成员数去重
* 平均参与度议题参与的总人数每个议题参与人数的和/应参与人数项目组织内的人数不去重产品组织内的小组成员数去重* 议题个数
* @return java.lang.Boolean
* @author LiuJanJun
* @date 2020/9/25 10:24 上午
@ -86,9 +95,9 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
log.warn("extractTotalDataMonthly param is error,param:{}", JSON.toJSONString(formDTO));
return false;
}
extractGridUserJoin(formDTO);
extractAgencyUserJoin(formDTO);
return null;
gridUserJoinCal(formDTO);
agencyUserJoinCal(formDTO);
return true;
}
private void extractGridUserJoin(ExtractScreenFormDTO formDTO) {
@ -178,7 +187,7 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
entity.setAvgJoin(bigDecimal.divide(votedByIssueCount, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(NumConstant.ONE_HUNDRED)));
}
}
screenUserJoinService.deleteAndInsertBatch(formDTO, new ArrayList<>(insertMap.values()));
screenUserJoinService.deleteAndInsertBatch(formDTO, new ArrayList<>(insertMap.values()),OrgTypeConstant.GRID);
}
private void extractAgencyUserJoin(ExtractScreenFormDTO formDTO) {
@ -219,7 +228,7 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
List<IssueVoteUserCountResultDTO> voteCountList = factOriginIssueLogDailyService.getVoteCount(formDTO.getCustomerId(), formDTO.getMonthId(), ProjectConstant.AGENCY_ID);
Map<String, Integer> orgMemberCount = new HashMap<>();
if (!CollectionUtils.isEmpty(issueTotal)) {
//获取每个网格的应表决人数
//获取每个网格的应表决人数 (组成员数去重)
List<GridGroupUserCountResultDTO> memberCountList = factOriginGroupMainDailyService.selectDistinctGroupMemberCount(formDTO.getCustomerId(), ProjectConstant.AGENCY_ID);
if (CollectionUtils.isEmpty(memberCountList)) {
log.warn("抽取【公众参与-人均议题】,获取应表决人数为空,customerId:{}", formDTO.getCustomerId());
@ -253,12 +262,7 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
}
});
}
screenUserJoinService.deleteAndInsertBatch(formDTO, new ArrayList<>(insertMap.values()));
}
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal(0);
bigDecimal = bigDecimal.add(new BigDecimal(0 / (1 * 1.0)));
screenUserJoinService.deleteAndInsertBatch(formDTO, new ArrayList<>(insertMap.values()),OrgTypeConstant.GRID);
}
private void buildUserJoinEntity(ExtractScreenFormDTO formDTO, Object org, Map<String, ScreenUserJoinEntity> result) {
@ -274,7 +278,7 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
} else if (org instanceof DimAgencyEntity) {
DimAgencyEntity agency = (DimAgencyEntity) org;
entity.setCustomerId(agency.getCustomerId());
entity.setOrgType(agency.getLevel());
entity.setOrgType(OrgTypeConstant.AGENCY);
entity.setOrgId(agency.getId());
entity.setParentId(agency.getPid());
entity.setOrgName(agency.getAgencyName());
@ -289,6 +293,10 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
entity.setAvgJoin(new BigDecimal(0));
entity.setAgvgJoinUpRate(new BigDecimal("0"));
entity.setAgvgJoinUpFlag("");
entity.setAvgIssueFz(NumConstant.ZERO);
entity.setAvgIssueFm(NumConstant.ZERO);
entity.setAvgJoinFz(NumConstant.ZERO);
entity.setAvgJoinFm(NumConstant.ZERO);
result.put(entity.getOrgId(), entity);
}
@ -304,4 +312,266 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
public Boolean extractPerTotalDataDaily(ExtractScreenFormDTO formDTO) {
return null;
}
/**
* @Description 基层治理-公众参与网格-
* @Param formDTO
* @author zxc
* @date 2021/7/9 9:20 上午
*/
public void gridUserJoinCal(ExtractScreenFormDTO formDTO){
// 查询客户下所有网格
List<DimGridEntity> orgList = dimGridService.getGridListByCustomerId(formDTO.getCustomerId());
if (CollectionUtils.isEmpty(orgList)) {
log.warn("抽取【公众参与-人均议题】,获取组织数据失败,customerId:{}", formDTO.getCustomerId());
return;
}
//构建组织数据
Map<String, ScreenUserJoinEntity> insertMap = new HashMap<>(16);
orgList.forEach(org -> buildUserJoinEntity(formDTO, org, insertMap));
//获取议题月份增量
List<FactIssueGridMonthlyEntity> issueTotal = factIssueGridMonthlyService.getIssueIncCountAndTotalByMonthId(formDTO.getCustomerId(), formDTO.getMonthId());
if (CollectionUtils.isEmpty(issueTotal)) {
return;
}
// 查询 注册居民本月增量 党员认证本月增量 截止本月底居民总数
List<GridUserCountResultDTO> userCountList = factRegUserGridMonthlyService.selectGridUserCount(formDTO.getCustomerId(), formDTO.getMonthId());
if (CollectionUtils.isEmpty(userCountList)) {
return;
}
// list 转 map 以orgId为key
Map<String, GridUserCountResultDTO> userCountMap = userCountList.stream().collect(Collectors.toMap(GridUserCountResultDTO::getOrgId, o -> o));
for (FactIssueGridMonthlyEntity issue : issueTotal) {
String gridId = issue.getGridId();
ScreenUserJoinEntity entity = insertMap.get(gridId);
if (entity == null) {
continue;
}
// 议题本月增长
entity.setJoinTotal(issue.getIssueIncr());
// 网格下 注册居民本月增量,党员认证本月增量,截止本月底居民总数
GridUserCountResultDTO user = userCountMap.get(gridId);
if (user == null) {
continue;
}
// 议题总数/组织内的总人数(项目:绑定网格的总用户数,产品:组织内的小组成员数去重)
log.debug("issue:{}", JSON.toJSONString(issue));
log.debug("user:{}", JSON.toJSONString(user));
if (!user.getRegTotal().equals(0)) {
BigDecimal avgIssueCount = new BigDecimal(issue.getIssueIncr()).divide(new BigDecimal(user.getRegTotal()),NumConstant.FOUR, BigDecimal.ROUND_HALF_UP);
entity.setAvgIssueFz(issue.getIssueIncr());
entity.setAvgIssueFm(user.getRegTotal());
// 人均议题
entity.setAvgIssue(avgIssueCount);
}
}
//获取该月 表决的人数
List<IssueVoteUserCountResultDTO> voteCountList = factOriginIssueLogDailyService.getVoteCount(formDTO.getCustomerId(), formDTO.getMonthId(), ProjectConstant.GRID_ID);
Map<String, Integer> gridMemberCount = new HashMap<>(16);
// 议题月份增量不为空
if (!CollectionUtils.isEmpty(issueTotal)) {
//获取每个网格的应表决人数
List<GridGroupUserCountResultDTO> memberCountList = factOriginGroupMainDailyService.selectDistinctGroupMemberCount(formDTO.getCustomerId(), ProjectConstant.GRID_ID);
if (CollectionUtils.isEmpty(memberCountList)) {
return;
}
// 网格下的组员
gridMemberCount = memberCountList.stream().collect(Collectors.toMap(GridGroupUserCountResultDTO::getOrgId, o -> o.getMemberCount()));
}
/**
* 平均参与度议题参与的总人数每个议题参与人数的和/应参与人数项目网格内的人数不去重产品组织内的小组成员数去重* 议题个数
*/
// 根据网格ID分组
Map<String, List<IssueVoteUserCountResultDTO>> voteMap = voteCountList.stream().collect(Collectors.groupingBy(IssueVoteUserCountResultDTO::getOrgId));
//遍历实际参与人数
for (Map.Entry<String, List<IssueVoteUserCountResultDTO>> entry : voteMap.entrySet()) {
String gridId = entry.getKey();
ScreenUserJoinEntity entity = insertMap.get(gridId);
if (entity == null) {
continue;
}
List<IssueVoteUserCountResultDTO> issueList = entry.getValue();
BigDecimal realJoinCount = new BigDecimal(0);
// 网格下 议题个数
BigDecimal votedByIssueCount = new BigDecimal(issueList.get(0).getIssueCount());
// 网格下 组员人数
Integer memberCount = gridMemberCount.get(gridId);
for (IssueVoteUserCountResultDTO vote : issueList) {
// 每个议题参与人数求和
realJoinCount = realJoinCount.add(new BigDecimal(vote.getVoteCount()));
}
if (votedByIssueCount.intValue() != NumConstant.ZERO) {
// 平均参与度 = 议题参与的总人数 / (应参与人数 * 议题个数)
BigDecimal avgFz = votedByIssueCount.multiply(new BigDecimal(memberCount));
entity.setAvgJoinFz(Integer.valueOf(avgFz.toString()));
entity.setAvgJoinFm(Integer.valueOf(realJoinCount.toString()));
entity.setAvgJoin(realJoinCount.divide(avgFz, NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
}
}
ArrayList<ScreenUserJoinEntity> dispose = dispose(formDTO, insertMap, OrgTypeConstant.GRID);
screenUserJoinService.deleteAndInsertBatch(formDTO, dispose,OrgTypeConstant.GRID);
}
/**
* @Description 基层治理-公众参与组织-
* @Param formDTO
* @author zxc
* @date 2021/7/9 9:20 上午
*/
public void agencyUserJoinCal(ExtractScreenFormDTO formDTO){
// 查询客户下的所有组织
List<DimAgencyEntity> agencyList = dimAgencyService.getAgencyListByCustomerId(formDTO.getCustomerId());
if (CollectionUtils.isEmpty(agencyList)) {
log.warn("抽取【公众参与-人均议题】,获取组织数据失败,customerId:{}", formDTO.getCustomerId());
return;
}
//构建组织数据
Map<String, ScreenUserJoinEntity> insertMap = new HashMap<>(16);
agencyList.forEach(org -> buildUserJoinEntity(formDTO, org, insertMap));
// 查询组织下 议题月增长,截止本月议题总数
List<FactIssueAgencyMonthlyEntity> issueTotal = factIssueAgencyMonthlyService.getIssueIncCountAndTotalByMonthId(formDTO.getCustomerId(), formDTO.getMonthId());
// 查询 注册居民本月增量 党员认证本月增量 截止本月底居民总数
List<GridUserCountResultDTO> userCountList = factRegUserAgencyMonthlyService.selectAgencyUserCount(formDTO.getCustomerId(), formDTO.getMonthId());
// 以agencyId为key
Map<String, GridUserCountResultDTO> userCountMap = userCountList.stream().collect(Collectors.toMap(GridUserCountResultDTO::getOrgId, o -> o));
Set<String> agencyIdSet = new HashSet<>();
if (!CollectionUtils.isEmpty(issueTotal)) {
issueTotal.forEach(issue -> {
String agencyId = issue.getAgencyId();
agencyIdSet.add(agencyId);
ScreenUserJoinEntity entity = insertMap.get(agencyId);
if (entity == null){
return;
}
entity.setJoinTotal(issue.getIssueIncr());
GridUserCountResultDTO user = userCountMap.get(agencyId);
// 人均议题:议题总数/组织内的总人数(项目:绑定网格的总用户数,产品:组织内的小组成员数去重)
if (!user.getRegTotal().equals(NumConstant.ZERO)) {
BigDecimal avgIssueCount = new BigDecimal(issue.getIssueIncr()).divide(new BigDecimal(user.getRegTotal()), NumConstant.FOUR, BigDecimal.ROUND_HALF_UP);
entity.setAvgIssueFz(issue.getIssueIncr());
entity.setAvgIssueFm(user.getRegTotal());
entity.setAvgIssue(avgIssueCount);
}
});
List<List<String>> partition = ListUtils.partition(new ArrayList<>(agencyIdSet), NumConstant.THIRTY);
partition.forEach(list -> {
//获取该月 表决的人数
List<IssueVoteUserCountResultDTO> voteCountList = factOriginIssueLogDailyService.getVoteCount(formDTO.getCustomerId(), formDTO.getMonthId(), ProjectConstant.AGENCY_ID);
Map<String, Integer> orgMemberCount = new HashMap<>(16);
if (!CollectionUtils.isEmpty(issueTotal)) {
//获取每个组织的应表决人数
List<GridGroupUserCountResultDTO> memberCountList = factOriginGroupMainDailyService.selectDistinctGroupMemberCount(formDTO.getCustomerId(), ProjectConstant.AGENCY_ID);
if (CollectionUtils.isEmpty(memberCountList)) {
log.warn("抽取【公众参与-人均议题】,获取应表决人数为空,customerId:{}", formDTO.getCustomerId());
return;
}
// (k,v) = (agencyId,组织下的人)
orgMemberCount = memberCountList.stream().collect(Collectors.toMap(GridGroupUserCountResultDTO::getOrgId, o -> o.getMemberCount()));
}
// 平均参与度:议题参与的总人数(每个议题参与人数的和)/(应参与人数(项目:组织内的人数不去重;产品:组织内的小组成员数去重)* 议题个数)
// 根据组织ID分组
Map<String, List<IssueVoteUserCountResultDTO>> voteMap = voteCountList.stream().collect(Collectors.groupingBy(IssueVoteUserCountResultDTO::getOrgId));
for (Map.Entry<String, List<IssueVoteUserCountResultDTO>> entry : voteMap.entrySet()) {
String orgId = entry.getKey();
ScreenUserJoinEntity entity = insertMap.get(orgId);
List<IssueVoteUserCountResultDTO> issueList = entry.getValue();
// 实际参与人数
BigDecimal realJoinCount = new BigDecimal(NumConstant.ZERO);
// 组织下 的议题数
BigDecimal votedByIssueCount = new BigDecimal(issueList.get(NumConstant.ZERO).getIssueCount());
// 组织下应参与人数
Integer memberCount = orgMemberCount.get(orgId);
for (IssueVoteUserCountResultDTO vote : issueList) {
realJoinCount = realJoinCount.add(new BigDecimal(vote.getVoteCount()));
}
if (votedByIssueCount.intValue() != 0) {
// 平均参与度 = 议题参与的总人数 / (应参与人数 * 议题个数)
BigDecimal avgFz = votedByIssueCount.multiply(new BigDecimal(memberCount));
entity.setAvgJoin(realJoinCount.divide(votedByIssueCount, NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
entity.setAvgJoinFz(Integer.valueOf(realJoinCount.toString()));
entity.setAvgJoinFm(Integer.valueOf(avgFz.toString()));
}
}
});
}
ArrayList<ScreenUserJoinEntity> dispose = dispose(formDTO, insertMap, OrgTypeConstant.AGENCY);
screenUserJoinService.deleteAndInsertBatch(formDTO, dispose,OrgTypeConstant.AGENCY);
}
public ArrayList<ScreenUserJoinEntity> dispose(ExtractScreenFormDTO formDTO,Map<String, ScreenUserJoinEntity> insertMap,String flag) {
String beforeNMonthByMonth = DateUtils.getBeforeNMonthByMonth(NumConstant.ONE, formDTO.getMonthId());
List<ScreenUserJoinEntity> screenUserJoinEntities = screenUserJoinService.selectScreenUserJoin(formDTO.getCustomerId(), beforeNMonthByMonth, flag);
ArrayList<ScreenUserJoinEntity> insertList = new ArrayList<>(insertMap.values());
if (CollectionUtils.isEmpty(screenUserJoinEntities)) {
insertList.forEach(l -> {
// 总的参与次数较上月增长率
if (l.getJoinTotal().equals(NumConstant.ZERO)) {
l.setJoinTotalUpFlag(GovernConstant.EQ);
l.setJoinTotalUpRate(NumConstant.ZERO_DECIMAL);
} else if (l.getJoinTotal() > NumConstant.ZERO) {
l.setJoinTotalUpFlag(GovernConstant.INCR);
l.setJoinTotalUpRate(NumConstant.ONE_HUNDRED_DECIMAL);
}
// 人均议题较上月增长率
if (l.getAvgIssue().equals(NumConstant.ZERO_DECIMAL)) {
l.setAvgIssueUpFlag(GovernConstant.EQ);
l.setAvgIssueUpRate(NumConstant.ZERO_DECIMAL);
} else {
l.setAvgIssueUpFlag(GovernConstant.INCR);
l.setAvgIssueUpRate(NumConstant.ONE_HUNDRED_DECIMAL);
}
// 平均参与度较上月增长率
if (l.getAvgJoin().equals(NumConstant.ZERO_DECIMAL)) {
l.setAgvgJoinUpFlag(GovernConstant.EQ);
l.setAgvgJoinUpRate(NumConstant.ZERO_DECIMAL);
} else {
l.setAgvgJoinUpFlag(GovernConstant.INCR);
l.setAgvgJoinUpRate(NumConstant.ONE_HUNDRED_DECIMAL);
}
});
} else {
insertList.forEach(l -> {
screenUserJoinEntities.forEach(s -> {
if (l.getOrgId().equals(s.getOrgId())) {
// 总的参与次数较上月增长率
if (l.getJoinTotal() > s.getJoinTotal()) {
l.setJoinTotalUpFlag(GovernConstant.INCR);
l.setJoinTotalUpRate(new BigDecimal(((l.getJoinTotal() - s.getJoinTotal()) / s.getJoinTotal()) * NumConstant.ONE_HUNDRED).setScale(NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
} else if (l.getJoinTotal() < s.getJoinTotal()) {
l.setJoinTotalUpFlag(GovernConstant.DECR);
l.setJoinTotalUpRate(new BigDecimal(((l.getJoinTotal() - s.getJoinTotal()) / s.getJoinTotal()) * NumConstant.ONE_HUNDRED).setScale(NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
} else {
l.setJoinTotalUpFlag(GovernConstant.EQ);
l.setJoinTotalUpRate(NumConstant.ZERO_DECIMAL);
}
// 人均议题较上月增长率
Integer re = l.getAvgIssue().compareTo(s.getAvgIssue());
if (re.equals(NumConstant.ONE)) {
l.setAvgIssueUpFlag(GovernConstant.INCR);
l.setAvgIssueUpRate(l.getAvgIssue().subtract(s.getAvgIssue()).divide(s.getAvgIssue()).multiply(NumConstant.ONE_HUNDRED_DECIMAL).setScale(NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
} else if (re.equals(NumConstant.ONE_NEG)) {
l.setAvgIssueUpFlag(GovernConstant.DECR);
l.setAvgIssueUpRate(l.getAvgIssue().subtract(s.getAvgIssue()).divide(s.getAvgIssue()).multiply(NumConstant.ONE_HUNDRED_DECIMAL).setScale(NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
} else {
l.setAvgIssueUpFlag(GovernConstant.EQ);
l.setAvgIssueUpRate(NumConstant.ZERO_DECIMAL);
}
// 平均参与度较上月增长率
Integer avgJoinRe = l.getAvgJoin().compareTo(s.getAvgJoin());
if (avgJoinRe.equals(NumConstant.ONE)) {
l.setAgvgJoinUpFlag(GovernConstant.INCR);
l.setAgvgJoinUpRate(l.getAvgJoin().subtract(s.getAvgJoin()).divide(s.getAvgJoin()).multiply(NumConstant.ONE_HUNDRED_DECIMAL).setScale(NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
} else if (avgJoinRe.equals(NumConstant.ONE_NEG)) {
l.setAvgIssueUpFlag(GovernConstant.DECR);
l.setAgvgJoinUpRate(l.getAvgJoin().subtract(s.getAvgJoin()).divide(s.getAvgJoin()).multiply(NumConstant.ONE_HUNDRED_DECIMAL).setScale(NumConstant.FOUR, BigDecimal.ROUND_HALF_UP));
} else {
l.setAvgIssueUpFlag(GovernConstant.EQ);
l.setAgvgJoinUpRate(NumConstant.ZERO_DECIMAL);
}
}
});
});
}
return insertList;
}
}

13
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenUserJoinService.java

@ -36,9 +36,20 @@ public interface ScreenUserJoinService extends BaseService<ScreenUserJoinEntity>
*
* @param formDTO
* @param list
* @param delFlag 删除标志 agency,grid
* @return java.lang.Boolean
* @author LiuJanJun
* @date 2020/9/27 4:40 下午
*/
Boolean deleteAndInsertBatch(ExtractScreenFormDTO formDTO, List<ScreenUserJoinEntity> list);
Boolean deleteAndInsertBatch(ExtractScreenFormDTO formDTO, List<ScreenUserJoinEntity> list,String delFlag);
/**
* @Description 根据月份查询screenUserJoin
* @Param customerId
* @Param monthId
* @Param flag agency grid
* @author zxc
* @date 2021/7/9 3:13 下午
*/
List<ScreenUserJoinEntity> selectScreenUserJoin(String customerId,String monthId,String flag);
}

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

@ -48,20 +48,20 @@ import java.util.List;
*/
@Slf4j
@Service
@DataSource(value = DataSourceConstant.EVALUATION_INDEX, datasourceNameFromArg = true)
public class ScreenUserJoinServiceImpl extends BaseServiceImpl<ScreenUserJoinDao, ScreenUserJoinEntity> implements ScreenUserJoinService {
@Override
@DataSource(value = DataSourceConstant.EVALUATION_INDEX, datasourceNameFromArg = true)
@Transactional(rollbackFor = Exception.class)
public Boolean deleteAndInsertBatch(ExtractScreenFormDTO formDTO, List<ScreenUserJoinEntity> list) {
public Boolean deleteAndInsertBatch(ExtractScreenFormDTO formDTO, List<ScreenUserJoinEntity> list, String delFlag) {
if (formDTO == null || StringUtils.isBlank(formDTO.getCustomerId()) || StringUtils.isBlank(formDTO.getMonthId()) || CollectionUtils.isEmpty(list)) {
log.error("deleteAndInsertBatch param is error");
return false;
}
int deleteNum;
do {
deleteNum = baseDao.deleteUserJoin(formDTO.getCustomerId(), formDTO.getMonthId());
deleteNum = baseDao.deleteUserJoinByCategory(formDTO.getCustomerId(), formDTO.getMonthId(),delFlag);
} while (deleteNum != NumConstant.ZERO);
@ -124,6 +124,19 @@ public class ScreenUserJoinServiceImpl extends BaseServiceImpl<ScreenUserJoinDao
return true;
}
/**
* @Description 根据月份查询screenUserJoin
* @Param customerId
* @Param monthId
* @Param flag agency grid
* @author zxc
* @date 2021/7/9 3:13 下午
*/
@Override
public List<ScreenUserJoinEntity> selectScreenUserJoin(String customerId, String monthId, String flag) {
return baseDao.selectScreenUserJoin(customerId, monthId, flag);
}
/**
* 计算 本月数值 相较于 上月数值的增长率

7
epmet-module/data-statistical/data-statistical-server/src/main/resources/db/migration/V0.0.22__pulic_party.sql

@ -0,0 +1,7 @@
ALTER TABLE `epmet_evaluation_index`.`screen_user_join`
ADD COLUMN `AVG_ISSUE_FZ` int(11) NULL DEFAULT 0 COMMENT '人均议题分子' AFTER `AVG_ISSUE`,
ADD COLUMN `AVG_ISSUE_FM` int(11) NULL DEFAULT 0 COMMENT '人均议题分母' AFTER `AVG_ISSUE_FZ`,
ADD COLUMN `AVG_JOIN_FZ` int(11) NULL DEFAULT 0 COMMENT '平均参与度分子' AFTER `AVG_JOIN`,
ADD COLUMN `AVG_JOIN_FM` int(11) NULL DEFAULT 0 COMMENT '平均参与度分母' AFTER `AVG_JOIN_FZ`,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`ID`) USING BTREE;

25
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenUserJoinDao.xml

@ -26,6 +26,13 @@
limit 1000;
</delete>
<!-- 根据类别删除 -->
<delete id="deleteUserJoinByCategory">
delete from screen_user_join
where CUSTOMER_ID = #{customerId} AND MONTH_ID = #{monthId} AND ORG_TYPE = #{delFlag}
limit 1000
</delete>
<insert id="batchInsertUserJoin" parameterType="map">
insert into screen_user_join
(
@ -41,9 +48,13 @@
JOIN_TOTAL_UP_RATE,
JOIN_TOTAL_UP_FLAG,
AVG_ISSUE,
AVG_ISSUE_FZ,
AVG_ISSUE_FM,
AVG_ISSUE_UP_RATE,
AVG_ISSUE_UP_FLAG,
AVG_JOIN,
AVG_JOIN_FZ,
AVG_JOIN_FM,
AGVG_JOIN_UP_RATE,
AGVG_JOIN_UP_FLAG,
DEL_FLAG,
@ -69,10 +80,14 @@
#{item.joinTotalUpFlag},
#{item.avgIssue},
#{item.avgIssueFz},
#{item.avgIssueFm},
#{item.avgIssueUpRate},
#{item.avgIssueUpFlag},
#{item.avgJoin},
#{item.avgIssueFz},
#{item.avgIssueFm},
#{item.agvgJoinUpRate},
#{item.agvgJoinUpFlag},
0,
@ -85,4 +100,14 @@
</foreach>
</insert>
<!-- 根据月份查询screenUserJoin -->
<select id="selectScreenUserJoin" resultType="com.epmet.entity.evaluationindex.screen.ScreenUserJoinEntity">
SELECT * FROM screen_user_join
WHERE DEL_FLAG = '0'
AND CUSTOMER_ID = #{customerId}
AND ORG_TYPE = #{flag}
AND MONTH_ID = #{monthId}
</select>
</mapper>

Loading…
Cancel
Save