Browse Source

Merge remote-tracking branch 'origin/dev_data_stats' into dev_data_stats

master
wxz 5 years ago
parent
commit
44d305dbf5
  1. 109
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  2. 3
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/UserAnalysisConstant.java
  3. 20
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResDTO.java
  4. 6
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResultDTO.java
  5. 37
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/dao/user/UserAnalysisDao.java
  6. 129
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/user/impl/UserAnalysisServiceImpl.java
  7. 6
      epmet-module/data-report/data-report-server/src/main/resources/mapper/issue/IssueDao.xml
  8. 70
      epmet-module/data-report/data-report-server/src/main/resources/mapper/user/UserAnalysisDao.xml

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

@ -16,10 +16,7 @@ import org.joda.time.format.DateTimeFormatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* 日期处理工具类
@ -49,7 +46,7 @@ public class DateUtils {
public static final String MONTH_NAME_PATTERN = "yyyy年MM月";
public static final String DATE_PATTERN_YYYY = "yyyy";
public static final String DATE_PATTERN_YYYYMM = "yyyyMM";
public static final String DATE_PATTERN_YYYY_MM = "yyyy-MM";
public static final String WEEK_TYPE_ENGLISH = "english";
public static final String WEEK_TYPE_CHINESE = "chinese";
@ -367,15 +364,111 @@ public class DateUtils {
/**
* @return java.lang.String
* @param dateStr yyyyMMdd
* @param dateStr yyyyMMdd返回yyyy.MM.dd yyyyMM返回yyyy/MM
* @author yinzuomei
* @description 返回yyyy.MM.dd
* @Date 2020/6/22 18:38
**/
public static String getDatePointPattern(String dateStr){
public static String getxAxisDatePattern(String dateStr,String character){
if(StringUtils.isNotBlank(dateStr)&&dateStr.length()==8){
return String.valueOf(new StringBuffer(dateStr).insert(4,".").insert(7,"."));
return String.valueOf(new StringBuffer(dateStr).insert(4,character).insert(7,character));
}else if(StringUtils.isNotBlank(dateStr)&&dateStr.length()==6){
return String.valueOf(new StringBuffer(dateStr).insert(4,character));
}
return dateStr;
}
/**
* @return java.lang.String
* @param beforDay
* @author yinzuomei
* @description 获取当前日期的前n天 返回yyyyMMdd
* @Date 2020/6/23 1:50
**/
public static String getBeforeNDay(int beforDay){
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, - beforDay);
Date date = c.getTime();
return DateUtils.format(date,DateUtils.DATE_PATTERN_YYYYMMDD);
}
/**
* @return java.lang.String
* @param beforMonth
* @author yinzuomei
* @description 获取当前 月份的前n月 返回yyyyMM
* @Date 2020/6/23 1:50
**/
public static String getBeforeNMonth(int beforMonth){
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, - beforMonth);
Date date = c.getTime();
return DateUtils.format(date,DateUtils.DATE_PATTERN_YYYYMM);
}
/**
* @return java.util.List<java.lang.String> 返回yyyyMMdd
* @param startTime yyyyMMdd
* @param endTime yyyyMMdd
* @author yinzuomei
* @description 获取两个日期之间所有的日期集合包含开始结束
* @Date 2020/6/23 1:26
**/
public static List<String> getDaysBetween(String startTime, String endTime){
// 返回的日期集合
List<String> days = new ArrayList<String>();
try{
Date start = DateUtils.parse(startTime,DateUtils.DATE_PATTERN_YYYYMMDD);
Date end = DateUtils.parse(endTime,DateUtils.DATE_PATTERN_YYYYMMDD);
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
// 日期加1(包含结束)
tempEnd.add(Calendar.DATE, +1);
while (tempStart.before(tempEnd)) {
days.add(DateUtils.format(tempStart.getTime(),DateUtils.DATE_PATTERN_YYYYMMDD));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
}catch (Exception e){
e.printStackTrace();
}
return days;
}
/**
* @return java.util.List<java.lang.String>
* @param minDate yyyMM
* @param maxDate yyyyMM
* @author yinzuomei
* @description 计算两个月份中间所有的月份包含起始
* @Date 2020/6/23 2:10
**/
public static List<String> getMonthBetween(String minDate, String maxDate){
ArrayList<String> result = new ArrayList<String>();
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");//格式化为年月
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf.format(curr.getTime()));
curr.add(Calendar.MONTH, 1);
}
min = null;max = null;curr = null;
}catch(Exception e){
e.printStackTrace();
}
return result;
}
}

3
epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/UserAnalysisConstant.java

@ -34,4 +34,7 @@ public interface UserAnalysisConstant {
* 党员
*/
String PARTYMEMBER="党员";
String DAY_TYPE="day";
String MONTH_TYPE="month";
}

20
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResDTO.java

@ -0,0 +1,20 @@
package com.epmet.dto.result.user;
import lombok.Data;
import java.io.Serializable;
/**
* 描述一下
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/23 9:13
*/
@Data
public class UserIncrTrendResDTO implements Serializable {
private static final long serialVersionUID = 290620373673325352L;
private Integer regIncr;
private Integer warmIncr;
private Integer partymemberIncr;
private String dateIdOrMonthId;
}

6
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResultDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.result.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.io.Serializable;
@ -13,7 +14,7 @@ import java.io.Serializable;
@Data
public class UserIncrTrendResultDTO implements Serializable {
/**
* 日期如果按日查询返回yyyy-MM-dd,如果按月返回yyyy-MM
* 日期如果按日查询返回yyyy/MM/dd,如果按月返回yyyy/MM
*/
private String date;
@ -27,4 +28,7 @@ public class UserIncrTrendResultDTO implements Serializable {
*/
private Integer value;
// yyyyMMdd yyyyMM
@JsonIgnore
private String dateOrMonthId;
}

37
epmet-module/data-report/data-report-server/src/main/java/com/epmet/dao/user/UserAnalysisDao.java

@ -3,6 +3,7 @@ package com.epmet.dao.user;
import com.epmet.dto.DimAgencyDTO;
import com.epmet.dto.DimGridDTO;
import com.epmet.dto.result.user.UserIncrTrendResDTO;
import com.epmet.dto.result.user.UserSubAgencyResDTO;
import com.epmet.dto.result.user.UserSubGridResDTO;
import com.epmet.dto.result.user.UserSummaryInfoResultDTO;
@ -95,4 +96,40 @@ public interface UserAnalysisDao {
* @Date 2020/6/23 0:18
**/
List<UserSubGridResDTO> selectRegSubGridRes(@Param("dateId")String dateId, @Param("agencyId") String agencyId);
/**
* @return java.util.List<com.epmet.dto.result.user.UserIncrTrendResDTO>
* @param myAgencyId
* @author yinzuomei
* @description
* @Date 2020/6/23 11:24
**/
List<UserIncrTrendResDTO> selectRegDayIncr(@Param("agencyId")String myAgencyId);
/**
* @return java.util.List<com.epmet.dto.result.user.UserIncrTrendResDTO>
* @param myAgencyId
* @author yinzuomei
* @description
* @Date 2020/6/23 11:24
**/
List<UserIncrTrendResDTO> selectRegMonthIncr(@Param("agencyId")String myAgencyId);
/**
* @return java.util.List<com.epmet.dto.result.user.UserIncrTrendResDTO>
* @param myAgencyId
* @author yinzuomei
* @description
* @Date 2020/6/23 11:24
**/
List<UserIncrTrendResDTO> selectParticipationUserDayIncr(@Param("agencyId")String myAgencyId);
/**
* @return java.util.List<com.epmet.dto.result.user.UserIncrTrendResDTO>
* @param myAgencyId
* @author yinzuomei
* @description
* @Date 2020/6/23 11:24
**/
List<UserIncrTrendResDTO> selectParticipationUserMonthIncr(@Param("agencyId") String myAgencyId);
}

129
epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/user/impl/UserAnalysisServiceImpl.java

@ -89,7 +89,7 @@ public class UserAnalysisServiceImpl implements UserAnalysisService {
userSummaryInfoResultDTO=userAnalysisDao.selectRegUserSummaryInfo(myAgencyId);
}
if(null!=userSummaryInfoResultDTO){
userSummaryInfoResultDTO.setCurrentDate(DateUtils.getDatePointPattern(userSummaryInfoResultDTO.getCurrentDate()));
userSummaryInfoResultDTO.setCurrentDate(DateUtils.getxAxisDatePattern(userSummaryInfoResultDTO.getCurrentDate(),"."));
//提取出工具类
userSummaryInfoResultDTO.setPartymemberProportion(userSummaryInfoResultDTO.getPartymemberProportionValue().stripTrailingZeros().toPlainString());
userSummaryInfoResultDTO.setWarmHeartedProportion(userSummaryInfoResultDTO.getWarmHeartedProportionValue().stripTrailingZeros().toPlainString());
@ -295,6 +295,131 @@ public class UserAnalysisServiceImpl implements UserAnalysisService {
**/
@Override
public List<UserIncrTrendResultDTO> incrTrend(UserIncrTrendFormDTO formDTO) {
return null;
//获取用户所属机关id
String myAgencyId = this.getMyAgency();
List<UserIncrTrendResultDTO> dimList = this.initUserIncrTrendResultDTO(formDTO.getType());
if(CollectionUtils.isEmpty(dimList)){
logger.error("横坐标初始失败");
return new ArrayList<>();
}
List<UserIncrTrendResDTO> list=new ArrayList<>();
if (UserAnalysisConstant.REG_FLAG.equals(formDTO.getRegOrPartiFlag()) && UserAnalysisConstant.DAY_TYPE.equals(formDTO.getType())) {
//注册用户数、日
list=userAnalysisDao.selectRegDayIncr(myAgencyId);
} else if (UserAnalysisConstant.REG_FLAG.equals(formDTO.getRegOrPartiFlag()) && UserAnalysisConstant.MONTH_TYPE.equals(formDTO.getType())) {
//注册用户数、月
list=userAnalysisDao.selectRegMonthIncr(myAgencyId);
} else if (UserAnalysisConstant.PARTI_FLAG.equals(formDTO.getRegOrPartiFlag()) && UserAnalysisConstant.DAY_TYPE.equals(formDTO.getType())) {
//参与用户数、日
list=userAnalysisDao.selectParticipationUserDayIncr(myAgencyId);
} else if (UserAnalysisConstant.PARTI_FLAG.equals(formDTO.getRegOrPartiFlag()) && UserAnalysisConstant.MONTH_TYPE.equals(formDTO.getType())) {
//参与用户数、月
list=userAnalysisDao.selectParticipationUserMonthIncr(myAgencyId);
} else {
logger.error("参数错误");
return new ArrayList<>();
}
for(UserIncrTrendResultDTO dim:dimList){
boolean flag=false;
for(UserIncrTrendResDTO userIncrTrendResDTO:list){
if(dim.getDateOrMonthId().equals(userIncrTrendResDTO.getDateIdOrMonthId())){
flag=true;
//居民、热心居民、党员总数,用于排序
switch(dim.getType()){
case UserAnalysisConstant.REGISTERED_RESI:
dim.setValue(userIncrTrendResDTO.getRegIncr());
break;
case UserAnalysisConstant.WARMHEARTED:
dim.setValue(userIncrTrendResDTO.getWarmIncr());
break;
case UserAnalysisConstant.PARTYMEMBER:
dim.setValue(userIncrTrendResDTO.getPartymemberIncr());
break;
default:
break;
}
}
}
if(!flag){
logger.error(String.format("机关id%s缺少记录dateOrMonthId=%s",myAgencyId,dim.getDateOrMonthId()));
}
}
return dimList;
}
private List<UserIncrTrendResultDTO> initUserIncrTrendResultDTO(String type) {
List<UserIncrTrendResultDTO> list=new ArrayList<>();
if(UserAnalysisConstant.DAY_TYPE.equals(type)){
List<String> dateIdList= DateUtils.getDaysBetween(DateUtils.getBeforeNDay(90),
DateUtils.getBeforeNDay(1));
for(String dateId:dateIdList){
String date=DateUtils.getxAxisDatePattern(dateId,"/");
//居民
UserIncrTrendResultDTO resi=new UserIncrTrendResultDTO();
resi.setDate(date);
resi.setType(UserAnalysisConstant.REGISTERED_RESI);
resi.setValue(NumConstant.ZERO);
resi.setDateOrMonthId(dateId);
//热心居民
UserIncrTrendResultDTO warm=new UserIncrTrendResultDTO();
warm.setDate(date);
warm.setType(UserAnalysisConstant.WARMHEARTED);
warm.setValue(NumConstant.ZERO);
warm.setDateOrMonthId(dateId);
//党员
UserIncrTrendResultDTO party=new UserIncrTrendResultDTO();
party.setDate(date);
party.setType(UserAnalysisConstant.PARTYMEMBER);
party.setValue(NumConstant.ZERO);
party.setDateOrMonthId(dateId);
list.add(resi);
list.add(warm);
list.add(party);
}
}else if(UserAnalysisConstant.MONTH_TYPE.equals(type)){
List<String> monthList= DateUtils.getMonthBetween(DateUtils.getBeforeNMonth(12),
DateUtils.getBeforeNMonth(1));
for(String monthId:monthList){
String date=DateUtils.getxAxisDatePattern(monthId,"/");
//居民
UserIncrTrendResultDTO resi=new UserIncrTrendResultDTO();
resi.setDate(date);
resi.setType(UserAnalysisConstant.REGISTERED_RESI);
resi.setValue(NumConstant.ZERO);
resi.setDateOrMonthId(monthId);
//热心居民
UserIncrTrendResultDTO warm=new UserIncrTrendResultDTO();
warm.setDate(date);
warm.setType(UserAnalysisConstant.WARMHEARTED);
warm.setValue(NumConstant.ZERO);
warm.setDateOrMonthId(monthId);
//党员
UserIncrTrendResultDTO party=new UserIncrTrendResultDTO();
party.setDate(date);
party.setType(UserAnalysisConstant.PARTYMEMBER);
party.setValue(NumConstant.ZERO);
party.setDateOrMonthId(monthId);
list.add(resi);
list.add(warm);
list.add(party);
}
}
return list;
}
/*public static void main(String[] args) {
// System.out.println("前一天"+DateUtils.getBeforeNDay(1));
// System.out.println("前90天"+DateUtils.getBeforeNDay(90));
List<String> list= DateUtils.getDaysBetween("201912","202005");
for(String m:list){
System.out.println(m);
}
// System.out.println(list.size());
System.out.println("上个月"+DateUtils.getBeforeNMonth(1));
System.out.println("前8个月"+DateUtils.getBeforeNMonth(8));
}*/
}

6
epmet-module/data-report/data-report-server/src/main/resources/mapper/issue/IssueDao.xml

@ -33,7 +33,7 @@
INNER JOIN
dim_agency da ON fiad.AGENCY_ID = da.ID
WHERE fiad.DEL_FLAG = '0'
AND PID = #{agencyId}
AND fiad.PID = #{agencyId}
GROUP BY AGENCY_ID
</select>
<!-- 获取机关下网格统计信息-->
@ -60,7 +60,7 @@
VOTING_INCR,
SHIFT_PROJECT_INCR,
CLOSED_INCR,
DATE_FORMAT(DATE_ID, '%Y/%m/%d')
DATE_FORMAT(DATE_ID, '%Y/%m/%d') AS DATE_NAME
FROM
fact_issue_agency_daily fiad
WHERE DEL_FLAG = '0'
@ -76,7 +76,7 @@
VOTING_INCR,
SHIFT_PROJECT_INCR,
CLOSED_INCR,
DATE_FORMAT(STR_TO_DATE(MONTH_ID,'%Y%m'), '%Y/%m') AS MONTH_ID
DATE_FORMAT(STR_TO_DATE(MONTH_ID,'%Y%m'), '%Y/%m') AS DATE_NAME
FROM
fact_issue_agency_monthly fiam
WHERE DEL_FLAG = '0'

70
epmet-module/data-report/data-report-server/src/main/resources/mapper/user/UserAnalysisDao.xml

@ -146,4 +146,74 @@
AND m.DATE_ID = #{dateId}
AND m.AGENCY_ID = #{agencyId}
</select>
<!-- -->
<select id="selectRegDayIncr" parameterType="java.lang.String"
resultType="com.epmet.dto.result.user.UserIncrTrendResDTO">
SELECT
m.DATE_ID as dateIdOrMonthId,
m.REG_INCR as regIncr,
m.PARTYMEMBER_INCR as partymemberIncr,
m.WARM_INCR as warmIncr
FROM
fact_reg_user_agency_daily m
WHERE
m.DEL_FLAG = '0'
AND m.AGENCY_ID =#{myAgencyId}
ORDER BY
m.DATE_ID DESC
LIMIT 90
</select>
<!-- -->
<select id="selectRegMonthIncr" parameterType="java.lang.String"
resultType="com.epmet.dto.result.user.UserIncrTrendResDTO">
SELECT
m.MONTH_ID as dateIdOrMonthId,
m.REG_INCR as regIncr,
m.PARTYMEMBER_INCR as partymemberIncr,
m.WARM_INCR as warmIncr
FROM
fact_reg_user_agency_monthly m
WHERE
m.DEL_FLAG = '0'
AND m.AGENCY_ID =#{myAgencyId}
ORDER BY
m.MONTH_ID DESC
LIMIT 12
</select>
<!-- -->
<select id="selectParticipationUserDayIncr" parameterType="java.lang.String"
resultType="com.epmet.dto.result.user.UserIncrTrendResDTO">
SELECT
m.DATE_ID as dateIdOrMonthId,
m.REG_INCR as regIncr,
m.PARTYMEMBER_INCR as partymemberIncr,
m.WARM_INCR as warmIncr
FROM
fact_participation_user_agency_daily m
WHERE
m.DEL_FLAG = '0'
AND m.AGENCY_ID =#{myAgencyId}
ORDER BY
m.DATE_ID DESC
LIMIT 90
</select>
<!-- -->
<select id="selectParticipationUserMonthIncr" parameterType="java.lang.String"
resultType="com.epmet.dto.result.user.UserIncrTrendResDTO">
SELECT
m.MONTH_ID as dateIdOrMonthId,
m.REG_INCR as regIncr,
m.PARTYMEMBER_INCR as partymemberIncr,
m.WARM_INCR as warmIncr
FROM
fact_participation_user_agency_monthly m
WHERE
m.DEL_FLAG = '0'
AND m.AGENCY_ID =#{myAgencyId}
ORDER BY
m.MONTH_ID DESC
LIMIT 12
</select>
</mapper>
Loading…
Cancel
Save