From aea9c2b6f824b79e0ffe8ed475f6218eed3b264c Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Tue, 23 Jun 2020 11:21:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=AE=AE=E9=A2=98=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/issue/IssueDao.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/issue/IssueDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/issue/IssueDao.xml index b9b83d0f2f..19e81a0cb5 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/issue/IssueDao.xml +++ b/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 @@ -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' From 3d806673d4740d3278a482d74ddc7bb7c8bc5a6d Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Tue, 23 Jun 2020 11:49:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=BB=84=E7=BB=87=E8=83=BD=E5=8A=9B-?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E7=94=A8=E6=88=B7=E5=A2=9E=E9=87=8F=E6=8A=98?= =?UTF-8?q?=E7=BA=BF=E5=9B=BE=E5=88=9D=E5=A7=8B=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/commons/tools/utils/DateUtils.java | 109 +++++++++++++-- .../epmet/constant/UserAnalysisConstant.java | 3 + .../dto/result/user/UserIncrTrendResDTO.java | 20 +++ .../result/user/UserIncrTrendResultDTO.java | 6 +- .../com/epmet/dao/user/UserAnalysisDao.java | 37 +++++ .../user/impl/UserAnalysisServiceImpl.java | 129 +++++++++++++++++- .../resources/mapper/user/UserAnalysisDao.xml | 70 ++++++++++ 7 files changed, 363 insertions(+), 11 deletions(-) create mode 100644 epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResDTO.java diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java index 482ddd52b3..532420581a 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java +++ b/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 返回yyyyMMdd + * @param startTime yyyyMMdd + * @param endTime yyyyMMdd + * @author yinzuomei + * @description 获取两个日期之间所有的日期集合,包含开始结束 + * @Date 2020/6/23 1:26 + **/ + public static List getDaysBetween(String startTime, String endTime){ + // 返回的日期集合 + List days = new ArrayList(); + 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 + * @param minDate yyyMM + * @param maxDate yyyyMM + * @author yinzuomei + * @description 计算两个月份中间所有的月份包含起始 + * @Date 2020/6/23 2:10 + **/ + public static List getMonthBetween(String minDate, String maxDate){ + ArrayList result = new ArrayList(); + 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; + } } diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/UserAnalysisConstant.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/UserAnalysisConstant.java index ffd096b2bd..f42d52fb72 100644 --- a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/constant/UserAnalysisConstant.java +++ b/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"; } diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResDTO.java new file mode 100644 index 0000000000..a7f4e87dc5 --- /dev/null +++ b/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; +} diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResultDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResultDTO.java index d36d7aba03..bfd9b17535 100644 --- a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/user/UserIncrTrendResultDTO.java +++ b/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; } diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/dao/user/UserAnalysisDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/dao/user/UserAnalysisDao.java index 2fd8c6b3c8..feba486e41 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/dao/user/UserAnalysisDao.java +++ b/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 selectRegSubGridRes(@Param("dateId")String dateId, @Param("agencyId") String agencyId); + + /** + * @return java.util.List + * @param myAgencyId + * @author yinzuomei + * @description + * @Date 2020/6/23 11:24 + **/ + List selectRegDayIncr(@Param("agencyId")String myAgencyId); + + /** + * @return java.util.List + * @param myAgencyId + * @author yinzuomei + * @description + * @Date 2020/6/23 11:24 + **/ + List selectRegMonthIncr(@Param("agencyId")String myAgencyId); + + /** + * @return java.util.List + * @param myAgencyId + * @author yinzuomei + * @description + * @Date 2020/6/23 11:24 + **/ + List selectParticipationUserDayIncr(@Param("agencyId")String myAgencyId); + + /** + * @return java.util.List + * @param myAgencyId + * @author yinzuomei + * @description + * @Date 2020/6/23 11:24 + **/ + List selectParticipationUserMonthIncr(@Param("agencyId") String myAgencyId); } diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/user/impl/UserAnalysisServiceImpl.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/user/impl/UserAnalysisServiceImpl.java index dbc4d20f2e..655b6febae 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/user/impl/UserAnalysisServiceImpl.java +++ b/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 incrTrend(UserIncrTrendFormDTO formDTO) { - return null; + //获取用户所属机关id + String myAgencyId = this.getMyAgency(); + List dimList = this.initUserIncrTrendResultDTO(formDTO.getType()); + if(CollectionUtils.isEmpty(dimList)){ + logger.error("横坐标初始失败"); + return new ArrayList<>(); + } + List 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 initUserIncrTrendResultDTO(String type) { + List list=new ArrayList<>(); + if(UserAnalysisConstant.DAY_TYPE.equals(type)){ + List 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 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 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)); + + }*/ + } diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/user/UserAnalysisDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/user/UserAnalysisDao.xml index f00dc28baf..408cf17e61 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/user/UserAnalysisDao.xml +++ b/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} + + + + + + + + + + \ No newline at end of file