Browse Source

Merge remote-tracking branch 'remotes/origin/dev'

dev_shibei_match
jianjun 4 years ago
parent
commit
9df1ac2098
  1. 70
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/KongCunCustomerEnvEnum.java
  2. 33
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/OrgLevelEnum.java
  3. 139
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java
  4. 38
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeAreaCodeNode.java
  5. 28
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeUtils.java
  6. 34
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/BaseDataFormDTO.java
  7. 38
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubTopicAndGroupFormDTO.java
  8. 38
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubUserTotalFormDTO.java
  9. 32
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/BaseStatsDataResultDTO.java
  10. 23
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubTopicAndGroupResultDTO.java
  11. 23
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubUserTotalResultDTO.java
  12. 20
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/TotalAndIncrResultDTO.java
  13. 26
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/WorkFactResultDTO.java
  14. 118
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java
  15. 70
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java
  16. 45
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/StatsStaffPatrolRecordDailyDao.java
  17. 125
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/StatsStaffPatrolRecordDailyEntity.java
  18. 31
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java
  19. 370
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
  20. 42
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/StatsStaffPatrolRecordDailyService.java
  21. 43
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/StatsStaffPatrolRecordDailyServiceImpl.java
  22. 12
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java
  23. 57
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml
  24. 17
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StatsStaffPatrolRecordDailyDao.xml
  25. 22
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/govOrg/OrgTreeFormDTO.java
  26. 18
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/govOrg/OrgTreeNode.java
  27. 15
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java
  28. 37
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenCustomerAgencyDao.java
  29. 12
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/AgencyService.java
  30. 126
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/AgencyServiceImpl.java
  31. 2
      epmet-module/data-report/data-report-server/src/main/resources/logback-spring.xml
  32. 17
      epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenCustomerAgencyDao.xml
  33. 1
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/IndexCalculateStreetServiceImpl.java
  34. 13
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/OrgTreeNode.java

70
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/KongCunCustomerEnvEnum.java

@ -1,70 +0,0 @@
package com.epmet.commons.tools.enums;
import com.epmet.commons.tools.utils.SpringContextUtils;
import org.springframework.core.env.Environment;
/**
* 系统环境变量枚举类
* dev|test|prod
*
* @author jianjun liu
* @date 2020-07-03 11:14
**/
public enum KongCunCustomerEnvEnum {
/**
* 环境变量枚举
*/
DEV("dev", "开发环境", "613cc61a6b8ce4c70d21bd413dac72cc"),
TEST("test", "体验环境", "b272625617e53620b2b3cbc65d1ecbbb"),
PROD("prod", "生产环境", "6f203e30de1a65aab7e69c058826cd80"),
UN_KNOWN("prod", "生产环境", "6f203e30de1a65aab7e69c058826cd80")
;
private String code;
private String name;
private String customerId;
KongCunCustomerEnvEnum(String code, String name, String customerId) {
this.code = code;
this.name = name;
this.customerId = customerId;
}
public static KongCunCustomerEnvEnum getEnum(String code) {
KongCunCustomerEnvEnum[] values = KongCunCustomerEnvEnum.values();
for (KongCunCustomerEnvEnum value : values) {
if (value.getCode().equals(code)) {
return value;
}
}
return KongCunCustomerEnvEnum.UN_KNOWN;
}
public static KongCunCustomerEnvEnum getCurrentEnv(){
try {
Environment environment = SpringContextUtils.getBean(Environment.class);
String[] activeProfiles = environment.getActiveProfiles();
if (activeProfiles.length > 0) {
return getEnum(activeProfiles[0]);
}
} catch (Exception e) {
e.printStackTrace();
}
return KongCunCustomerEnvEnum.UN_KNOWN;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
public String getCustomerId(){
return customerId;
}
}

33
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/OrgLevelEnum.java

@ -1,7 +1,9 @@
package com.epmet.commons.tools.enums;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import org.apache.commons.lang3.StringUtils;
/**
* 组织级别枚举类
@ -42,6 +44,37 @@ public enum OrgLevelEnum {
throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode());
}
/**
* desc: 获取下一等级的组织级别
*
* @param parentAgencyLevel
* @return java.lang.String
* @author LiuJanJun
* @date 2021/8/5 1:57 下午
* todo 加上数字 根据数据返回
*/
public static String getSubOrgLevel(String parentAgencyLevel) {
String level = StrConstant.EPMETY_STR;
if (StringUtils.isBlank(parentAgencyLevel)) {
return level;
}
OrgLevelEnum anEnum = OrgLevelEnum.getEnum(parentAgencyLevel);
switch (anEnum){
case PROVINCE:
return OrgLevelEnum.CITY.getCode();
case CITY:
return OrgLevelEnum.DISTRICT.getCode();
case DISTRICT:
return OrgLevelEnum.STREET.getCode();
case STREET:
return OrgLevelEnum.COMMUNITY.getCode();
case COMMUNITY:
return OrgLevelEnum.GRID.getCode();
default:
return level;
}
}

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

@ -425,6 +425,23 @@ public class DateUtils {
return DateUtils.format(date,DateUtils.DATE_PATTERN_YYYYMMDD);
}
/**
* @return java.lang.String
* @param beforDay
* @author yinzuomei
* @description 获取当前日期的前n天 返回yyyyMMdd
* @Date 2020/6/23 1:50
**/
public static String getBeforeNDay(String dateId,int beforDay){
Calendar c = Calendar.getInstance();
if (StringUtils.isNotBlank(dateId)){
c.setTime(DateUtils.parseDate(dateId,DateUtils.DATE_PATTERN_YYYYMMDD));
}
c.add(Calendar.DATE, - beforDay);
Date date = c.getTime();
return DateUtils.format(date,DateUtils.DATE_PATTERN_YYYYMMDD);
}
public static String getBeforeNDay(int beforDay,String format){
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, - beforDay);
@ -664,15 +681,6 @@ public class DateUtils {
return result;
}
public static void main(String[] args) {
Date today=new Date();
Date yesterDay=DateUtils.parse("2020-07-28 15:33:00","yyyy-MM-dd HH:mm:ss");
Date tomorrow=DateUtils.parse("2020-07-30 15:33:00","yyyy-MM-dd HH:mm:ss");
System.out.println(comparteDate(today,today));
System.out.println(comparteDate(yesterDay,today));
System.out.println(comparteDate(tomorrow,today));
}
public static String getYearId(String monthId) {
if (StringUtils.isNotBlank(monthId) && monthId.length() > 4) {
return monthId.substring(NumConstant.ZERO, NumConstant.FOUR);
@ -874,4 +882,117 @@ public class DateUtils {
return DateUtils.format(date,dateType);
}
/**
* 获取指定日期的 所在周的第一天和和最后一天
* @param dataStr
* @return
* @throws ParseException
*/
public static String getLastOfWeek(String dataStr) throws ParseException {
Calendar cal = Calendar.getInstance();
if (StringUtils.isNotBlank(dataStr)){
cal.setTime(new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).parse(dataStr));
}
int d = 0;
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
d = -6;
} else {
d = 2 - cal.get(Calendar.DAY_OF_WEEK);
}
cal.add(Calendar.DAY_OF_WEEK, d);
// 所在周开始日期
String data1 = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).format(cal.getTime());
cal.add(Calendar.DAY_OF_WEEK, 6);
// 所在周结束日期
String data2 = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).format(cal.getTime());
return data1 + "-" + data2;
}
/**
* 获取指定日期的 所在周的第一天和和最后一天
* @param dataStr
* @return
* @throws ParseException
*/
public static String getFirstOfWeek(String dataStr) throws ParseException {
Calendar cal = Calendar.getInstance();
if (StringUtils.isNotBlank(dataStr)){
cal.setTime(new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).parse(dataStr));
}
int d = 0;
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
d = -6;
} else {
d = 2 - cal.get(Calendar.DAY_OF_WEEK);
}
cal.add(Calendar.DAY_OF_WEEK, d);
// 所在周开始日期
String data1 = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).format(cal.getTime());
cal.add(Calendar.DAY_OF_WEEK, 6);
// 所在周结束日期
String data2 = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).format(cal.getTime());
return data1 + "-" + data2;
}
/**
* 获取本周的第一天
* @return String
* **/
public static String getWeekStart(String dateId){
Calendar cal=Calendar.getInstance();
if (StringUtils.isNotBlank(dateId)){
cal.setTime(DateUtils.parseDate(dateId,DateUtils.DATE_PATTERN_YYYYMMDD));
}
int d = 0;
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
d = -6;
} else {
d = 2 - cal.get(Calendar.DAY_OF_WEEK);
}
cal.add(Calendar.DAY_OF_WEEK, d);
Date time=cal.getTime();
return new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).format(time);
}
/**
* 获取本周的最后一天
* @return String
* **/
public static String getWeekEnd(String dateId){
Calendar cal=Calendar.getInstance();
if (StringUtils.isNotBlank(dateId)){
cal.setTime(DateUtils.parseDate(dateId,DateUtils.DATE_PATTERN_YYYYMMDD));
}
int d = 0;
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
d = -6;
} else {
d = 2 - cal.get(Calendar.DAY_OF_WEEK);
}
cal.add(Calendar.DAY_OF_WEEK, d);
cal.add(Calendar.DAY_OF_WEEK, 6);
Date time=cal.getTime();
return new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD).format(time);
}
public static void main(String[] args) throws ParseException {
String first = DateUtils.getFirstOfWeek("20210801");
System.out.println(first);
String fLastOfWeek = DateUtils.getLastOfWeek("20210801");
System.out.println(fLastOfWeek);
System.out.println(DateUtils.getWeekStart("20210801"));
System.out.println(DateUtils.getWeekEnd("20210801"));
Date dateIdDate = DateUtils.parse("20210801", DateUtils.DATE_PATTERN_YYYYMMDD);
String format = DateUtils.format(DateUtils.getMonthStart(dateIdDate), DateUtils.DATE_PATTERN_YYYYMMDD);
System.out.println(format);
format = DateUtils.format(DateUtils.getMonthEnd(dateIdDate), DateUtils.DATE_PATTERN_YYYYMMDD);
System.out.println(format);
}
}

38
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeAreaCodeNode.java

@ -0,0 +1,38 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.epmet.commons.tools.utils;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 树节点所有需要实现树节点的都需要继承该类
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Data
public class TreeAreaCodeNode<T> extends TreeStringNode<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String areaCode;
/**
* 上级ID
*/
private String parentAreaCode;
/**
* 子节点列表
*/
private List<T> children = new ArrayList<>();
}

28
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeUtils.java

@ -131,4 +131,32 @@ public class TreeUtils {
return result;
}
/**
* 构建树节点
*/
public static <T extends TreeAreaCodeNode> List<T> buildTreeByAreaCode(List<T> treeNodes) {
List<T> result = new ArrayList<>();
//list转map
Map<String, T> nodeMap = new LinkedHashMap<>(treeNodes.size());
for(T treeNode : treeNodes){
nodeMap.put(treeNode.getAreaCode(), treeNode);
}
for(T node : nodeMap.values()) {
T parent = nodeMap.get(node.getParentAreaCode());
if(parent != null && !(node.getAreaCode().equals(parent.getAreaCode()))){
if (parent.getChildren() == null){
parent.setChildren(new ArrayList());
}
parent.getChildren().add(node);
continue;
}
result.add(node);
}
return result;
}
}

34
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/BaseDataFormDTO.java

@ -0,0 +1,34 @@
package com.epmet.dataaggre.dto.datastats.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 基础参数实体类
* @Auth sun
*/
@Data
public class BaseDataFormDTO implements Serializable {
private static final long serialVersionUID = 6766797386944333123L;
/**
* 组织Id
*/
@NotBlank(message = "组织ID不能为空",groups = {BaseDataFormDTO.BaseData.class, AgencyIdAndLevel.class})
private String agencyId;
@NotBlank(message = "组织级别不能为空",groups = AgencyIdAndLevel.class)
private String agencyLevel;
private String type;
/**
* 日维度Id
*/
private String dateId;
private String startDateId;
private String endDateId;
public interface BaseData extends CustomerClientShowGroup{}
public interface AgencyIdAndLevel extends CustomerClientShowGroup{}
}

38
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubTopicAndGroupFormDTO.java

@ -0,0 +1,38 @@
package com.epmet.dataaggre.dto.datastats.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 对外接口-查询下级话题和小组数-接口入参
* @Auth sun
*/
@Data
public class SubTopicAndGroupFormDTO implements Serializable {
private static final long serialVersionUID = -3381286960911634231L;
/**
* 当前组织id从组织树取
*/
@NotBlank(message = "组织ID不能为空", groups = SubTopicAndGroupFormDTO.Agency.class)
private String agencyId;
/**
* 当前组织级别从组织树取
* 机关级别社区级community
* 街道:street,
* 区县级: district,
* 市级: city
* 省级:province
*/
@NotBlank(message = "组织级别不能为空", groups = SubTopicAndGroupFormDTO.Agency.class)
private String agencyLevel;
/**
* 日维度IdyyyyMMdd eg20210808默认前一天
*/
private String dateId;
public interface Agency extends CustomerClientShowGroup{}
}

38
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/SubUserTotalFormDTO.java

@ -0,0 +1,38 @@
package com.epmet.dataaggre.dto.datastats.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 对外接口-查询下级用户党员数-接口入参
* @Auth sun
*/
@Data
public class SubUserTotalFormDTO implements Serializable {
private static final long serialVersionUID = -3381286960911634231L;
/**
* 当前组织id从组织树取
*/
@NotBlank(message = "组织ID不能为空", groups = SubUserTotalFormDTO.Agency.class)
private String agencyId;
/**
* 当前组织级别从组织树取
* 机关级别社区级community
* 街道:street,
* 区县级: district,
* 市级: city
* 省级:province
*/
@NotBlank(message = "组织级别不能为空", groups = SubUserTotalFormDTO.Agency.class)
private String agencyLevel;
/**
* 日维度IdyyyyMMdd eg20210808默认前一天
*/
private String dateId;
public interface Agency extends CustomerClientShowGroup{}
}

32
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/BaseStatsDataResultDTO.java

@ -0,0 +1,32 @@
package com.epmet.dataaggre.dto.datastats.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 基础数据-组织各种数据汇总-接口返参
* @Auth sun
*/
@Data
public class BaseStatsDataResultDTO implements Serializable {
private static final long serialVersionUID = -771436069527114021L;
private Integer topicTotal;
private Integer topicIncr;
// private Integer topicToIssueTotal;
private Integer issueTotal;
private Integer issueIncr;
// private Integer issueToProjectTotal;
private Integer projectTotal;
private Integer projectIncr;
private Integer closedProjectTotal;
private Integer closedProjectIncr;
// private Integer patrolTotal;
// private Integer patrolTotalTime;
// private Integer orgId;
// private Integer orgName;
}

23
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubTopicAndGroupResultDTO.java

@ -0,0 +1,23 @@
package com.epmet.dataaggre.dto.datastats.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 对外接口-查询下级话题和小组数-接口返参
* @Auth sun
*/
@Data
public class SubTopicAndGroupResultDTO implements Serializable {
private static final long serialVersionUID = 466974582608407121L;
//组织或网格ID
private String orgId;
//组织或网格名称
private String orgName = "";
//话题总数
private Integer topicTotal = 0;
//小组总数
private Integer groupTotal = 0;
}

23
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/SubUserTotalResultDTO.java

@ -0,0 +1,23 @@
package com.epmet.dataaggre.dto.datastats.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 对外接口-查询下级用户党员数-接口返参
* @Auth sun
*/
@Data
public class SubUserTotalResultDTO implements Serializable {
private static final long serialVersionUID = 466974582608407121L;
//组织或网格ID
private String orgId;
//组织或网格名称
private String orgName = "";
//用户总数
private Integer userTotal = 0;
//党员总数
private Integer partyMemberTotal = 0;
}

20
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/TotalAndIncrResultDTO.java

@ -0,0 +1,20 @@
package com.epmet.dataaggre.dto.datastats.result;
import lombok.Data;
import java.io.Serializable;
/**
* @Description 总数及增量 返回结果
* @Auth sun
*/
@Data
public class TotalAndIncrResultDTO implements Serializable {
private static final long serialVersionUID = -6624315950853255235L;
private Integer total;
private Integer incr;
private Integer total2;
private Integer incr2;
}

26
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/WorkFactResultDTO.java

@ -0,0 +1,26 @@
package com.epmet.dataaggre.dto.datastats.result;
import lombok.Data;
import java.io.Serializable;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2021/8/5 4:51 下午
* @version: 1.0
*/
@Data
public class WorkFactResultDTO implements Serializable {
private static final long serialVersionUID = -8149310637601355664L;
private Integer topicToIssueTotal = 0;
private Integer issueToProjectTotal = 0;
private Integer closedProjectTotal = 0;
private Integer patrolTotal = 0;
private String patrolTotalTime = "0";
private String orgId;
private String orgName;
}

118
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java

@ -0,0 +1,118 @@
package com.epmet.dataaggre.controller.pub;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dataaggre.dto.datastats.form.BaseDataFormDTO;
import com.epmet.dataaggre.dto.datastats.result.BaseStatsDataResultDTO;
import com.epmet.dataaggre.dto.datastats.result.SubTopicAndGroupResultDTO;
import com.epmet.dataaggre.dto.datastats.result.SubUserTotalResultDTO;
import com.epmet.dataaggre.dto.datastats.result.WorkFactResultDTO;
import com.epmet.dataaggre.service.datastats.DataStatsService;
import lombok.extern.log4j.Log4j;
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 javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* 小程序相关配置可以放在这目前只放了footbar
*
* @author yinzuomei@elink-cn.com
* @date 2021/7/27 18:36
*/
@Log4j
@RestController
@RequestMapping("pub")
public class PubController {
@Autowired
private DataStatsService dataStatsService;
/**
* 查询 话题 议题 项目数
*
* @param formDTO
* @return com.epmet.dataaggre.dto.app.result.AppFootBarResultDTO
* @author yinzuomei
* @date 2021/7/27 18:59
*/
@PostMapping("baseDataAgg")
public Result<BaseStatsDataResultDTO> getBaseStatsData(@RequestBody BaseDataFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO,BaseDataFormDTO.BaseData.class);
BaseStatsDataResultDTO baseStatsData = dataStatsService.getBaseStatsData(formDTO);
return new Result<BaseStatsDataResultDTO>().ok(baseStatsData);
}
/**
* 查询下级工作实况
*
* @param formDTO
* @return com.epmet.dataaggre.dto.app.result.AppFootBarResultDTO
* @author yinzuomei
* @date 2021/7/27 18:59
*/
@PostMapping("subWorkFact")
public Result<List<WorkFactResultDTO>> getSubWorkFact(@RequestBody BaseDataFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO, BaseDataFormDTO.AgencyIdAndLevel.class);
List<WorkFactResultDTO> subWorkFact = dataStatsService.getSubWorkFact(formDTO);
return new Result<List<WorkFactResultDTO>>().ok(subWorkFact);
}
/**
* @Param formDTO
* @Description 对外接口--查询下级用户党员数
* @author sun
*/
@PostMapping("subUserTotal")
public Result<List<SubUserTotalResultDTO>> subUserTotal(@RequestBody BaseDataFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, BaseDataFormDTO.AgencyIdAndLevel.class);
List<SubUserTotalResultDTO> data = dataStatsService.subUserTotal(formDTO);
return new Result<List<SubUserTotalResultDTO>>().ok(data);
}
/**
* @Param formDTO
* @Description 对外接口--查询下级话题和小组数
* @author sun
*/
@PostMapping("subTopicAndGroup")
public Result<List<SubTopicAndGroupResultDTO>> subTopicAndGroup(@RequestBody BaseDataFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, BaseDataFormDTO.AgencyIdAndLevel.class);
List<SubTopicAndGroupResultDTO> data = dataStatsService.subTopicAndGroup(formDTO);
return new Result<List<SubTopicAndGroupResultDTO>>().ok(data);
}
/**
* 导出数据使用map接收
*
* @param map
* @param response
* @throws IOException
*/
@PostMapping("/exportExcel")
public void exportExcel(@RequestBody BaseDataFormDTO formDTO, HttpServletResponse response) throws IOException {
/* try {
Map<String, Object> mapData = new HashMap<>();
BaseStatsDataResultDTO baseStatsData = dataStatsService.getBaseStatsData(formDTO);
String templatePath = "excel/trace_temp.xlsx";
log.info("exportExcel templatePath:{}",templatePath);
mapData.put("dataType", baseStatsData);
start = System.currentTimeMillis();
Workbook workbook = ExcelExportUtil.exportExcel(new TemplateExportParams(templatePath, "数据汇总"), baseStatsData);
//header
response.setHeader("content-Type", "application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("继续追踪导出详情-".concat(DateUtils.formatDate()) + ".xlsx", "UTF-8"));
//加密
log.error("excelExport build wb cost:{}",System.currentTimeMillis()-start);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}*/
}
}

70
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java

@ -33,7 +33,7 @@ import java.util.List;
/**
* @Author sun
* @Description 数据统计服务
* @Description 数据统计服务
*/
@Mapper
public interface DataStatsDao {
@ -178,50 +178,54 @@ public interface DataStatsDao {
/**
* 查询组织党员先锋详情
* @author zhaoqifeng
* @date 2021/5/18 14:40
*
* @param agencyId
* @return com.epmet.dataaggre.dto.datastats.result.PartyMemberVanguardDetailResultDTO
* @author zhaoqifeng
* @date 2021/5/18 14:40
*/
PartyMemberVanguardDetailResultDTO selectAgencyVanguardDetail(@Param("agencyId") String agencyId);
/**
* 查询网格党员先锋详情
* @author zhaoqifeng
* @date 2021/5/18 14:40
*
* @param grid
* @return com.epmet.dataaggre.dto.datastats.result.PartyMemberVanguardDetailResultDTO
* @author zhaoqifeng
* @date 2021/5/18 14:40
*/
PartyMemberVanguardDetailResultDTO selectGridVanguardDetail(@Param("grid") String grid);
/**
* 查询组织党员先锋排行
* @author zhaoqifeng
* @date 2021/5/18 15:02
*
* @param agencyId
* @return java.util.List<com.epmet.dataaggre.dto.datastats.result.PartyMemberVanguardDetailResultDTO>
* @author zhaoqifeng
* @date 2021/5/18 15:02
*/
List<PartyMemberVanguardDetailResultDTO> selectAgencyVanguardRank(@Param("agencyId") String agencyId);
/**
* 查询网格党员先锋排行
* @author zhaoqifeng
* @date 2021/5/18 15:03
*
* @param agencyId
* @return java.util.List<com.epmet.dataaggre.dto.datastats.result.PartyMemberVanguardDetailResultDTO>
* @author zhaoqifeng
* @date 2021/5/18 15:03
*/
List<PartyMemberVanguardDetailResultDTO> selectGridVanguardRank(@Param("agencyId") String agencyId);
List<FactGroupActDailyDTO> branchConAnalysis(@Param("customerId")String customerId,
@Param("orgId")String orgId,
@Param("orgType")String orgType,
@Param("dateId")String dateId,
@Param("parentCode")String parentCode);
List<FactGroupActDailyDTO> branchConAnalysis(@Param("customerId") String customerId,
@Param("orgId") String orgId,
@Param("orgType") String orgType,
@Param("dateId") String dateId,
@Param("parentCode") String parentCode);
List<FactGroupActDailyDTO> querySubAnalysisByCode(@Param("customerId")String customerId,
@Param("pid")String pid,
@Param("dateId")String dateId,
@Param("categoryCode")String categoryCode);
List<FactGroupActDailyDTO> querySubAnalysisByCode(@Param("customerId") String customerId,
@Param("pid") String pid,
@Param("dateId") String dateId,
@Param("categoryCode") String categoryCode);
List<GroupActRankDetailDTO> selectGroupActRankDetail(@Param("customerId") String customerId,
@Param("dateId") String dateId,
@ -246,11 +250,35 @@ public interface DataStatsDao {
/**
* 根据组织Id查询事件治理指数
* @author zhaoqifeng
* @date 2021/6/25 15:08
*
* @param agencyIds
* @param dateId
* @return com.epmet.dataaggre.entity.datastats.FactAgencyGovernDailyEntity
* @author zhaoqifeng
* @date 2021/6/25 15:08
*/
List<FactAgencyGovernDailyEntity> getAgencyGovernDaily(@Param("agencyIds") List<String> agencyIds, @Param("dateId") String dateId);
}
/**
* desc: 根据组织Id和时间获取 话题总数及增量
*
* @param agencyList
* @param dateId
* @return com.epmet.dataaggre.dto.datastats.result.TotalAndIncrResultDTO
* @author LiuJanJun
* @date 2021/8/5 3:59 下午
*/
TotalAndIncrResultDTO getAgencySumTopic(@Param("agencyList") List<String> agencyList, @Param("dateId") String dateId);
TotalAndIncrResultDTO getAgencySumIssue(@Param("agencyList") List<String> agencyList, @Param("dateId") String dateId);
TotalAndIncrResultDTO getAgencySumProject(@Param("agencyList") List<String> agencyList, @Param("dateId") String dateId);
/**
* 获取话题相关总数
* @param agencyList
* @param dateId
* @return
*/
List<BaseStatsDataResultDTO> getSubSumAgencyTopic(@Param("agencyList") List<String> agencyList, @Param("dateId") String dateId);
}

45
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/StatsStaffPatrolRecordDailyDao.java

@ -0,0 +1,45 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dataaggre.dao.epmetuser;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 工作人员巡查统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-07
*/
@Mapper
public interface StatsStaffPatrolRecordDailyDao extends BaseDao<StatsStaffPatrolRecordDailyEntity> {
/**
* desc:获取巡查次数和时间
* @param agencyList
* @param startDateId
* @param endDateId
* @return
*/
List<StatsStaffPatrolRecordDailyEntity> getPatrolSumList(@Param("agencyList") List<String> agencyList, @Param("startDateId") String startDateId, @Param("endDateId") String endDateId);
}

125
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/epmetuser/StatsStaffPatrolRecordDailyEntity.java

@ -0,0 +1,125 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dataaggre.entity.epmetuser;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* []工作人员巡查记录统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-29
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("stats_staff_patrol_record_daily")
public class StatsStaffPatrolRecordDailyEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 来源类型 external:外部internal:内部
*/
private String sourceType;
/**
* 客户Id
*/
private String customerId;
/**
* 数据来源客户Id
*/
private String sourceCustomerId;
/**
* 统计日期 关联日期dim表
*/
private String dateId;
/**
* 周ID
*/
private String weekId;
/**
* 月ID
*/
private String monthId;
/**
* 季ID
*/
private String quarterId;
/**
* 年ID
*/
private String yearId;
/**
* 网格id
*/
private String gridId;
/**
* 工作人员所属组织id=网格所属的组织id
*/
private String agencyId;
/**
* 网格所有上级id
*/
private String gridPids;
/**
* 工作人员用户id
*/
private String staffId;
/**
* 巡查次数
*/
private Integer patrolTotal;
/**
* 巡查时长 单位
*/
private Integer totalTime;
/**
* 巡查期间直接立项项目数
*/
private Integer reportProjectCount;
/**
* 最新的巡查开始时间
*/
private Date latestPatrolTime;
/**
* 最新的巡查状态 正在巡查中patrolling结束end
*/
private String latestPatrolStatus;
}

31
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java

@ -7,7 +7,6 @@ import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO;
import com.epmet.dataaggre.dto.resigroup.ActCategoryDictDTO;
import com.epmet.dataaggre.dto.resigroup.result.GroupActRankDetailDTO;
import java.security.PrivateKey;
import java.util.List;
/**
@ -182,4 +181,34 @@ public interface DataStatsService {
* @date 2021.07.05 16:05
*/
GridMemberDataAnalysisResultDTO getGridMemberIssueProjectStats(String staffId);
/**
* desc:获取话题 议题 项目 关闭项目数
* @param formDTO
* @return
*/
BaseStatsDataResultDTO getBaseStatsData(BaseDataFormDTO formDTO);
/**
* 获取工作实况中的数
* @param formDTO
* @return
*/
List<WorkFactResultDTO> getSubWorkFact(BaseDataFormDTO formDTO);
/**
* @Param formDTO
* @Description 对外接口--查询下级用户党员数
* @author sun
* @param formDTO
*/
List<SubUserTotalResultDTO> subUserTotal(BaseDataFormDTO formDTO);
/**
* @Param formDTO
* @Description 对外接口--查询下级话题和小组数
* @author sun
* @param formDTO
*/
List<SubTopicAndGroupResultDTO> subTopicAndGroup(BaseDataFormDTO formDTO);
}

370
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java

@ -1,8 +1,8 @@
package com.epmet.dataaggre.service.datastats.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.OrgLevelEnum;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.constant.OrgConstant;
@ -11,20 +11,20 @@ import com.epmet.dataaggre.dao.datastats.FactGridMemberStatisticsDailyDao;
import com.epmet.dataaggre.dto.datastats.FactGroupActDailyDTO;
import com.epmet.dataaggre.dto.datastats.form.*;
import com.epmet.dataaggre.dto.datastats.result.*;
import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO;
import com.epmet.dataaggre.dto.evaluationindex.ScreenCustomerAgencyDTO;
import com.epmet.dataaggre.dto.evaluationindex.ScreenCustomerGridDTO;
import com.epmet.dataaggre.dto.evaluationindex.ScreenGovernRankDataDailyDTO;
import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO;
import com.epmet.dataaggre.dto.resigroup.ActCategoryDictDTO;
import com.epmet.dataaggre.dto.resigroup.result.GroupActRankDetailDTO;
import com.epmet.dataaggre.entity.datastats.DimAgencyEntity;
import com.epmet.dataaggre.entity.datastats.DimGridEntity;
import com.epmet.dataaggre.entity.datastats.FactGridMemberStatisticsDailyEntity;
import com.epmet.dataaggre.entity.datastats.FactAgencyGovernDailyEntity;
import com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity;
import com.epmet.dataaggre.service.datastats.DataStatsService;
import com.epmet.dataaggre.service.epmetuser.StatsStaffPatrolRecordDailyService;
import com.epmet.dataaggre.service.evaluationindex.EvaluationIndexService;
import com.github.pagehelper.PageHelper;
import com.epmet.dataaggre.service.opercrm.CustomerRelation;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -57,6 +57,8 @@ public class DataStatsServiceImpl implements DataStatsService {
@Autowired
private FactGridMemberStatisticsDailyDao factGridMemberStatisticsDailyDao;
@Autowired
private StatsStaffPatrolRecordDailyService statsStaffPatrolRecordDailyService;
/**
@ -1428,6 +1430,194 @@ public class DataStatsServiceImpl implements DataStatsService {
public GridMemberDataAnalysisResultDTO getGridMemberIssueProjectStats(String staffId) {
return factGridMemberStatisticsDailyDao.getGridMemberIssueProjectStats( staffId);
}
@Override
public BaseStatsDataResultDTO getBaseStatsData(BaseDataFormDTO formDTO) {
//入参有日期的则按具体时间执行,没有的则按当前时间前一天执行
if (StringUtils.isBlank(formDTO.getDateId())) {
Date yesterday = DateUtils.addDateDays(new Date(), -1);
SimpleDateFormat format = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD);
formDTO.setDateId(format.format(yesterday));
}
BaseStatsDataResultDTO result = new BaseStatsDataResultDTO();
result.setTopicTotal(0);
result.setTopicIncr(0);
result.setIssueTotal(0);
result.setIssueIncr(0);
result.setProjectTotal(0);
result.setProjectIncr(0);
result.setClosedProjectTotal(0);
result.setClosedProjectIncr(0);
//0.根据组织Id查询是否存在子客户,存在的按areaCode查询当前客户之外的客户组织列表
List<String> agencyList = indexService.getAgencyIdsByAgencyId(formDTO.getAgencyId());
agencyList.add(formDTO.getAgencyId());
TotalAndIncrResultDTO sum = dataStatsDao.getAgencySumTopic(agencyList, formDTO.getDateId());
if (sum == null){
return result;
}
result.setTopicIncr(sum.getIncr());
result.setTopicTotal(sum.getTotal());
sum = dataStatsDao.getAgencySumIssue(agencyList,formDTO.getDateId());
result.setIssueIncr(sum.getIncr());
result.setIssueTotal(sum.getTotal());
sum = dataStatsDao.getAgencySumProject(agencyList,formDTO.getDateId());
result.setProjectIncr(sum.getIncr());
result.setProjectTotal(sum.getTotal());
result.setClosedProjectIncr(sum.getIncr2());
result.setClosedProjectTotal(sum.getTotal2());
return result;
}
@Override
public List<WorkFactResultDTO> getSubWorkFact(BaseDataFormDTO formDTO) {
//入参有日期的则按具体时间执行,没有的则按当前时间前一天执行
if (StringUtils.isBlank(formDTO.getType())){
formDTO.setType("yesterday");
}
Date yesterday = DateUtils.addDateDays(new Date(), -1);
if (StringUtils.isBlank(formDTO.getDateId())) {
SimpleDateFormat format = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD);
formDTO.setDateId(format.format(yesterday));
}
String startDate = null;
String endDate = null;
Date dateIdDate = DateUtils.parse(formDTO.getDateId(), DateUtils.DATE_PATTERN_YYYYMMDD);
boolean isYesterday = DateUtils.getBeforeNDay(1,DateUtils.DATE_PATTERN_YYYYMMDD).equals(formDTO.getDateId());
switch (formDTO.getType()){
case "yesterday":
startDate = DateUtils.getBeforeNDay(formDTO.getDateId(),1);
endDate = formDTO.getDateId();
break;
case "thisWeek":
startDate = DateUtils.getWeekStart(formDTO.getDateId());
startDate = DateUtils.getBeforeNDay(startDate,1);
DateUtils.format(DateUtils.addDateDays(yesterday, -1),DateUtils.DATE_PATTERN_YYYYMMDD);
if (!isYesterday){
endDate = DateUtils.getWeekEnd(formDTO.getDateId());
}
break;
case "thisMonth":
startDate = DateUtils.format(DateUtils.getMonthStart(dateIdDate),DateUtils.DATE_PATTERN_YYYYMMDD);
startDate = DateUtils.getBeforeNDay(startDate,1);
if (!isYesterday) {
endDate = DateUtils.format(DateUtils.getMonthEnd(dateIdDate), DateUtils.DATE_PATTERN_YYYYMMDD);
}
break;
default:
log.warn("===========");
}
formDTO.setStartDateId(startDate);
formDTO.setEndDateId(endDate);
List<WorkFactResultDTO> result = new ArrayList<>();
//如果是社区 则下级是网格 查询网格的数据
if (OrgLevelEnum.COMMUNITY.getCode().equals(formDTO.getAgencyLevel())){
//0.根据组织Id查询是否存在子客户,存在的按areaCode查询当前客户之外的客户组织列表
List<ScreenCustomerGridDTO> subAgencyList = indexService.getSubGridList(formDTO.getAgencyId());
if (subAgencyList.size() < NumConstant.ONE) {
return null;
}
List<String> gridIdList = subAgencyList.stream().map(ScreenCustomerGridDTO::getGridId).collect(Collectors.toList());
//查询组织的话题转议题数据
List<SubGridFormDTO.Topic> toIssueStart = dataStatsDao.getSubGridTopicShiftIssue(gridIdList, formDTO.getStartDateId());
List<SubGridFormDTO.Topic> toIssueEnd = dataStatsDao.getSubGridTopicShiftIssue(gridIdList, formDTO.getEndDateId());
Map<String, Integer> toIssueStartMap = toIssueStart.stream().collect(Collectors.toMap(SubGridFormDTO.Topic::getGridId, SubGridFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
Map<String, Integer> toIssueEndMap = toIssueEnd.stream().collect(Collectors.toMap(SubGridFormDTO.Topic::getGridId, SubGridFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
//查询组织的议题转项目数据
List<SubGridIssueResultDTO> toProjectStart = dataStatsDao.getSubGridIssue(gridIdList, formDTO.getStartDateId());
List<SubGridIssueResultDTO> toProjectEnd = dataStatsDao.getSubGridIssue(gridIdList, formDTO.getEndDateId());
Map<String, Integer> toProjectStartMap = toProjectStart.stream().collect(Collectors.toMap(SubGridIssueResultDTO::getGridId, SubGridIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
Map<String, Integer> toProjectEndMap = toProjectEnd.stream().collect(Collectors.toMap(SubGridIssueResultDTO::getGridId, SubGridIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
//查询组织已关闭的项目数据
List<SubGridProjectResultDTO> closeProjectStart = dataStatsDao.getSubGridProject(gridIdList, formDTO.getStartDateId());
List<SubGridProjectResultDTO> closeProjectEnd = dataStatsDao.getSubGridProject(gridIdList, formDTO.getEndDateId());
Map<String, Integer> closeProjectStartMap = closeProjectStart.stream().collect(Collectors.toMap(SubGridProjectResultDTO::getGridId, SubGridProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
Map<String, Integer> closeProjectEndMap = closeProjectEnd.stream().collect(Collectors.toMap(SubGridProjectResultDTO::getGridId, SubGridProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
//巡查次数和时间
List<StatsStaffPatrolRecordDailyEntity> patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(gridIdList,formDTO.getStartDateId(),formDTO.getEndDateId());
Map<String, StatsStaffPatrolRecordDailyEntity> patrolListMap = patrolList.stream().collect(Collectors.toMap(StatsStaffPatrolRecordDailyEntity::getAgencyId, o -> o, (o1, o2) -> o1));
subAgencyList.forEach(agency->{
String gridId = agency.getGridId();
WorkFactResultDTO resultDTO = new WorkFactResultDTO();
resultDTO.setOrgId(gridId);
resultDTO.setOrgName(agency.getGridName());
resultDTO.setTopicToIssueTotal(getTotal(toIssueStartMap,toIssueEndMap,gridId));
resultDTO.setIssueToProjectTotal(getTotal(toProjectStartMap,toProjectEndMap,gridId));
resultDTO.setClosedProjectTotal(getTotal(closeProjectStartMap,closeProjectEndMap,gridId));
StatsStaffPatrolRecordDailyEntity patrolRecordDTO = patrolListMap.get(gridId);
if (patrolRecordDTO != null){
resultDTO.setPatrolTotal(patrolRecordDTO.getPatrolTotal());
Integer totalTime = patrolRecordDTO.getTotalTime();
int minutes = totalTime / 60;
String totalTimeDesc = minutes / 60 + "小时"+ minutes % 60 + "分";
resultDTO.setPatrolTotalTime(totalTimeDesc);
}
result.add(resultDTO);
});
}else {
//0.根据组织Id查询是否存在子客户,存在的按areaCode查询当前客户之外的客户组织列表
List<ScreenCustomerAgencyDTO> subAgencyList = indexService.getSubAgencyListByAgency(formDTO.getAgencyId());
if (subAgencyList.size() < NumConstant.ONE) {
return null;
}
List<String> agencyList = subAgencyList.stream().map(ScreenCustomerAgencyDTO::getAgencyId).collect(Collectors.toList());
//查询组织的话题转议题数据
List<SubAgencyFormDTO.Topic> toIssueStart = dataStatsDao.getSubAgencyTopicShiftIssue(agencyList, formDTO.getStartDateId());
List<SubAgencyFormDTO.Topic> toIssueEnd = dataStatsDao.getSubAgencyTopicShiftIssue(agencyList, formDTO.getEndDateId());
Map<String, Integer> toIssueStartMap = toIssueStart.stream().collect(Collectors.toMap(SubAgencyFormDTO.Topic::getAgencyId, SubAgencyFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
Map<String, Integer> toIssueEndMap = toIssueEnd.stream().collect(Collectors.toMap(SubAgencyFormDTO.Topic::getAgencyId, SubAgencyFormDTO.Topic::getShiftedIssueTotal, (o1, o2) -> o1));
//查询组织的议题转项目数据
List<SubAgencyIssueResultDTO> toProjectStart = dataStatsDao.getSubAgencyIssue(agencyList, formDTO.getStartDateId());
List<SubAgencyIssueResultDTO> toProjectEnd = dataStatsDao.getSubAgencyIssue(agencyList, formDTO.getEndDateId());
Map<String, Integer> toProjectStartMap = toProjectStart.stream().collect(Collectors.toMap(SubAgencyIssueResultDTO::getAgencyId, SubAgencyIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
Map<String, Integer> toProjectEndMap = toProjectEnd.stream().collect(Collectors.toMap(SubAgencyIssueResultDTO::getAgencyId, SubAgencyIssueResultDTO::getShiftProjectTotal, (o1, o2) -> o1));
//查询组织已关闭的项目数据
List<SubAgencyProjectResultDTO> closeProjectStart = dataStatsDao.getSubAgencyProject(agencyList, formDTO.getStartDateId());
List<SubAgencyProjectResultDTO> closeProjectEnd = dataStatsDao.getSubAgencyProject(agencyList, formDTO.getEndDateId());
Map<String, Integer> closeProjectStartMap = closeProjectStart.stream().collect(Collectors.toMap(SubAgencyProjectResultDTO::getAgencyId, SubAgencyProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
Map<String, Integer> closeProjectEndMap = closeProjectEnd.stream().collect(Collectors.toMap(SubAgencyProjectResultDTO::getAgencyId, SubAgencyProjectResultDTO::getClosedProjectTotal, (o1, o2) -> o1));
//巡查次数和时间
List<StatsStaffPatrolRecordDailyEntity> patrolList = statsStaffPatrolRecordDailyService.getPatrolSumList(agencyList,formDTO.getStartDateId(),formDTO.getEndDateId());
Map<String, StatsStaffPatrolRecordDailyEntity> patrolListMap = patrolList.stream().collect(Collectors.toMap(StatsStaffPatrolRecordDailyEntity::getAgencyId, o -> o, (o1, o2) -> o1));
subAgencyList.forEach(agency->{
String agencyId = agency.getAgencyId();
WorkFactResultDTO resultDTO = new WorkFactResultDTO();
resultDTO.setOrgId(agencyId);
resultDTO.setOrgName(agency.getAgencyName());
resultDTO.setTopicToIssueTotal(getTotal(toIssueStartMap,toIssueEndMap,agencyId));
resultDTO.setIssueToProjectTotal(getTotal(toProjectStartMap,toProjectEndMap,agencyId));
resultDTO.setClosedProjectTotal(getTotal(closeProjectStartMap,closeProjectEndMap,agencyId));
StatsStaffPatrolRecordDailyEntity patrolRecordDTO = patrolListMap.get(agencyId);
if (patrolRecordDTO != null){
resultDTO.setPatrolTotal(patrolRecordDTO.getPatrolTotal());
Integer totalTime = patrolRecordDTO.getTotalTime();
int minutes = totalTime / 60;
String totalTimeDesc = minutes / 60 + "小时"+ minutes % 60 + "分";
resultDTO.setPatrolTotalTime(totalTimeDesc);
}
result.add(resultDTO);
});
}
List<WorkFactResultDTO> newResult = result.stream().sorted(Comparator.comparing(o -> o.getTopicToIssueTotal() + o.getIssueToProjectTotal() + o.getClosedProjectTotal() + o.getPatrolTotal())).collect(Collectors.toList());
return newResult;
}
private Integer getTotal(Map<String,Integer> startMap, Map<String,Integer> endMap,String agencyId){
Integer total1 = startMap.getOrDefault(agencyId,NumConstant.ZERO);
Integer total2 = endMap.getOrDefault(agencyId,NumConstant.ZERO);
if (total1.equals(total2)){
log.warn("===========相等,total:{}",total1);
}
return Math.max(total2-total1,0);
}
private String getPercentage(Integer countInt, Integer totalInt) {
if (NumConstant.ZERO == totalInt) {
return "0%";
@ -1439,4 +1629,172 @@ public class DataStatsServiceImpl implements DataStatsService {
return ratio.toString().concat("%");
}
/**
* @Param formDTO
* @Description 对外接口--查询下级用户党员数
* @author sun
* @param formDTO
*/
@Override
public List<SubUserTotalResultDTO> subUserTotal(BaseDataFormDTO formDTO) {
List<SubUserTotalResultDTO> resultList = new ArrayList<>();
//1.入参有日期的则按具体时间执行,没有的则按当前时间前一天执行
if (StringUtils.isBlank(formDTO.getDateId())) {
Date yesterday = DateUtils.addDateDays(new Date(), -1);
SimpleDateFormat format = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD);
formDTO.setDateId(format.format(yesterday));
}
//根据组织级别判断查询直属下级组织或网格数据
//2.直属网格
if ("community".equals(formDTO.getAgencyLevel())) {
//2-1.查询组织直属网格列表【网格维度】
List<ScreenCustomerGridDTO> gridList = indexService.getSubGridList(formDTO.getAgencyId());
if (gridList.size() < NumConstant.ONE) {
return resultList;
}
List<String> gridIds = gridList.stream().map(ScreenCustomerGridDTO::getGridId).collect(Collectors.toList());
//2-2.查询网格下用户、党员日统计数据,按用户总数降序
List<SubGridUserResultDTO> list = dataStatsDao.getSubGridUser(gridIds, formDTO.getDateId());
//2-3.封装数据
gridList.forEach(gr -> {
SubUserTotalResultDTO dto = new SubUserTotalResultDTO();
dto.setOrgId(gr.getGridId());
dto.setOrgName(gr.getGridName());
list.forEach(re -> {
if (gr.getGridId().equals(re.getGridId())) {
dto.setUserTotal(re.getUserTotal());
dto.setPartyMemberTotal(re.getPartyMemberTotal());
}
});
resultList.add(dto);
});
} else {
//3.直属组织
//3-1.查询直属下级组织列表,有子客户的按areaCode查没有的按agencyId查
List<ScreenCustomerAgencyDTO> subAgencyList = indexService.getSubAgencyListByAgency(formDTO.getAgencyId());
if (subAgencyList.size() < NumConstant.ONE) {
return resultList;
}
List<String> agencyIds = subAgencyList.stream().map(ScreenCustomerAgencyDTO::getAgencyId).collect(Collectors.toList());
//3-2.查询组织下用户、党员日统计数据,按用户总数降序
List<SubAgencyUserResultDTO> list = dataStatsDao.getSubAgencyUser(agencyIds, formDTO.getDateId());
//3-3.封装数据
subAgencyList.forEach(sub -> {
SubUserTotalResultDTO dto = new SubUserTotalResultDTO();
dto.setOrgId(sub.getAgencyId());
dto.setOrgName(sub.getAgencyName());
list.forEach(u -> {
if (sub.getAgencyId().equals(u.getAgencyId())) {
dto.setUserTotal(u.getUserTotal());
dto.setPartyMemberTotal(u.getPartyMemberTotal());
}
});
resultList.add(dto);
});
}
//4.按用户数降序排序并返回
Collections.sort(resultList, new Comparator<SubUserTotalResultDTO>() {
@Override
public int compare(SubUserTotalResultDTO o1, SubUserTotalResultDTO o2) {
//降序
return o2.getUserTotal().compareTo(o1.getUserTotal());
}
});
return resultList;
}
/**
* @Param formDTO
* @Description 对外接口--查询下级话题和小组数
* @author sun
* @param formDTO
*/
@Override
public List<SubTopicAndGroupResultDTO> subTopicAndGroup(BaseDataFormDTO formDTO) {
List<SubTopicAndGroupResultDTO> resultList = new ArrayList<>();
//1.入参有日期的则按具体时间执行,没有的则按当前时间前一天执行
if (StringUtils.isBlank(formDTO.getDateId())) {
Date yesterday = DateUtils.addDateDays(new Date(), -1);
SimpleDateFormat format = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD);
formDTO.setDateId(format.format(yesterday));
}
//根据组织级别判断查询直属下级组织或网格数据
//2.直属网格
if ("community".equals(formDTO.getAgencyLevel())) {
//2-1.查询组织直属网格列表【网格维度】
List<ScreenCustomerGridDTO> gridList = indexService.getSubGridList(formDTO.getAgencyId());
if (gridList.size() < NumConstant.ONE) {
return resultList;
}
List<String> gridIds = gridList.stream().map(ScreenCustomerGridDTO::getGridId).collect(Collectors.toList());
//2-2.查询网格下热议中话题日统计数据
List<SubGridFormDTO.Topic> hotdiscuss = dataStatsDao.getSubGridTopicHotDiscuss(gridIds, formDTO.getDateId());
//2-2.查询网格层级小组日统计数据
List<SubGridGroupResultDTO> list = dataStatsDao.getSubGridGroup(gridIds, formDTO.getDateId());
//2-3.封装数据
gridList.forEach(gr -> {
SubTopicAndGroupResultDTO resultDTO = new SubTopicAndGroupResultDTO();
resultDTO.setOrgId(gr.getGridId());
resultDTO.setOrgName(gr.getGridName());
hotdiscuss.forEach(t -> {
if (t.getGridId().equals(gr.getGridId())) {
resultDTO.setTopicTotal(t.getTopicTotal());
}
});
list.forEach(l -> {
if (l.getGridId().equals(gr.getGridId())) {
resultDTO.setGroupTotal(l.getGroupTotal());
}
});
resultList.add(resultDTO);
});
} else {
//3.直属组织
//3-1.查询直属下级组织列表,有子客户的按areaCode查没有的按agencyId查
List<ScreenCustomerAgencyDTO> subAgencyList = indexService.getSubAgencyListByAgency(formDTO.getAgencyId());
if (subAgencyList.size() < NumConstant.ONE) {
return resultList;
}
List<String> agencyIds = subAgencyList.stream().map(ScreenCustomerAgencyDTO::getAgencyId).collect(Collectors.toList());
//3-2.查询组织下热议中话题日统计数据
List<SubAgencyFormDTO.Topic> hotdiscuss = dataStatsDao.getSubAgencyTopicHotDiscuss(agencyIds, formDTO.getDateId());
//3-3.查询直属下级组织小组日统计数据
List<SubAgencyGroupResultDTO> list = dataStatsDao.getSubAgencyGroup(agencyIds, formDTO.getDateId());
//3-4.封装数据
subAgencyList.forEach(sub -> {
SubTopicAndGroupResultDTO resultDTO = new SubTopicAndGroupResultDTO();
resultDTO.setOrgId(sub.getAgencyId());
resultDTO.setOrgName(sub.getAgencyName());
hotdiscuss.forEach(t -> {
if (t.getAgencyId().equals(sub.getAgencyId())) {
resultDTO.setTopicTotal(t.getTopicTotal());
}
});
list.forEach(u -> {
if (sub.getAgencyId().equals(u.getAgencyId())) {
resultDTO.setGroupTotal(u.getGroupTotal());
}
});
resultList.add(resultDTO);
});
}
//4.按用户数降序排序并返回
Collections.sort(resultList, new Comparator<SubTopicAndGroupResultDTO>() {
@Override
public int compare(SubTopicAndGroupResultDTO o1, SubTopicAndGroupResultDTO o2) {
//降序
return o2.getTopicTotal().compareTo(o1.getTopicTotal());
}
});
return resultList;
}
}

42
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/StatsStaffPatrolRecordDailyService.java

@ -0,0 +1,42 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dataaggre.service.epmetuser;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity;
import java.util.List;
/**
* 工作人员巡查主记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-06-07
*/
public interface StatsStaffPatrolRecordDailyService extends BaseService<StatsStaffPatrolRecordDailyEntity> {
/**
* desc:获取组织或网格的 时间段内的总次数等
* @param agencyList
* @param startDateId
* @param endDateId
* @return
*/
List<StatsStaffPatrolRecordDailyEntity> getPatrolSumList(List<String> agencyList, String startDateId, String endDateId);
}

43
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/StatsStaffPatrolRecordDailyServiceImpl.java

@ -0,0 +1,43 @@
package com.epmet.dataaggre.service.epmetuser.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.dao.epmetuser.StatsStaffPatrolRecordDailyDao;
import com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity;
import com.epmet.dataaggre.service.epmetuser.StatsStaffPatrolRecordDailyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2021/8/6 11:06 上午
* @version: 1.0
*/
@DataSource(DataSourceConstant.EPMET_USER)
@Slf4j
@Service
public class StatsStaffPatrolRecordDailyServiceImpl extends BaseServiceImpl<StatsStaffPatrolRecordDailyDao, StatsStaffPatrolRecordDailyEntity> implements StatsStaffPatrolRecordDailyService {
/**
* desc:获取组织或网格的 时间段内的总次数等
*
* @param agencyList
* @param startDateId
* @param endDateId
* @return
*/
@Override
public List<StatsStaffPatrolRecordDailyEntity> getPatrolSumList(List<String> agencyList, String startDateId, String endDateId) {
/* LambdaQueryWrapper<StatsStaffPatrolRecordDailyEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StatsStaffPatrolRecordDailyEntity::getDelFlag, NumConstant.ZERO_STR)
.between(StatsStaffPatrolRecordDailyEntity::getDateId, startDateId,endDateId)
.in(StatsStaffPatrolRecordDailyEntity::getAgencyId, agencyList)
;*/
return baseDao.getPatrolSumList(agencyList,startDateId,endDateId);
}
}

12
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java

@ -1,9 +1,8 @@
package com.epmet.dataaggre.service.evaluationindex.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.dao.datastats.DataStatsDao;
import com.epmet.dataaggre.dao.evaluationindex.EvaluationIndexDao;
import com.epmet.dataaggre.dto.datastats.form.GovrnRatioFormDTO;
import com.epmet.dataaggre.dto.datastats.result.GovrnRatioResultDTO;
@ -14,13 +13,10 @@ import com.epmet.dataaggre.service.evaluationindex.EvaluationIndexService;
import com.epmet.dataaggre.service.opercrm.CustomerRelation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@ -114,6 +110,9 @@ public class EvaluationIndexServiceImpl implements EvaluationIndexService {
public List<String> getAgencyIdsByAgencyId(String agencyId) {
//1.查询agencyId对应组织信息
ScreenCustomerAgencyDTO dto = evaluationIndexDao.getByAgencyId(agencyId);
if (dto == null){
return new ArrayList<>();
}
//2.判断客户是否存在子客户
List<String> list = customerRelation.haveSubCustomer(dto.getCustomerId());
if (!CollectionUtils.isNotEmpty(list)) {
@ -131,6 +130,9 @@ public class EvaluationIndexServiceImpl implements EvaluationIndexService {
public List<ScreenCustomerAgencyDTO> getSubAgencyListByAgency(String agencyId) {
//1.查询agencyId对应组织信息
ScreenCustomerAgencyDTO dto = evaluationIndexDao.getByAgencyId(agencyId);
if (dto == null){
throw new RenException("组织信息不存在!");
}
//2.判断客户是否存在子客户
List<String> list = customerRelation.haveSubCustomer(dto.getCustomerId());
if (!CollectionUtils.isNotEmpty(list)) {

57
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml

@ -685,5 +685,62 @@
AGENCY_ID = #{agencyId}
</foreach>
</select>
<select id="getAgencySumTopic" resultType="com.epmet.dataaggre.dto.datastats.result.TotalAndIncrResultDTO">
SELECT
sum(topic_count) AS total,
sum(TOPIC_INCREMENT) AS incr
FROM
fact_topic_status_agency_daily
WHERE
del_flag = '0'
AND topic_status_id in('discussing','closed','hidden')<!-- 讨论中(热议中!=讨论中)、已处理、已屏蔽 -->
AND date_id = #{dateId}
<foreach item="agencyId" collection="agencyList" open="AND (" separator="or" close=")" index="">
agency_id = #{agencyId}
</foreach>
</select>
<select id="getAgencySumIssue" resultType="com.epmet.dataaggre.dto.datastats.result.TotalAndIncrResultDTO">
SELECT
sum(ISSUE_TOTAL) AS total,
sum(ISSUE_INCR) AS incr
FROM
fact_issue_agency_daily
WHERE
del_flag = '0'
AND date_id = #{dateId}
<foreach item="agencyId" collection="agencyList" open="AND (" separator="or" close=")" index="">
agency_id = #{agencyId}
</foreach>
</select>
<select id="getAgencySumProject" resultType="com.epmet.dataaggre.dto.datastats.result.TotalAndIncrResultDTO">
SELECT
IFNULL(project_total, 0) AS total,
IFNULL(PROJECT_INCR, 0) AS incr,
IFNULL(CLOSED_TOTAL, 0) AS total2,
IFNULL(CLOSED_INCR, 0) AS incr2
FROM
fact_agency_project_daily
WHERE
del_flag = '0'
AND date_id = #{dateId}
<foreach item="agencyId" collection="agencyList" open="AND (" separator="or" close=")" index="">
agency_id = #{agencyId}
</foreach>
</select>
<select id="getSubSumAgencyTopic" resultType="com.epmet.dataaggre.dto.datastats.result.BaseStatsDataResultDTO">
SELECT
agency_id AS agencyId,
topic_count AS topicCount,
topic_status_id AS topicStatus
FROM
fact_topic_status_agency_daily
WHERE
del_flag = '0'
AND topic_status_id in('discussing','closed','hidden')<!-- 讨论中(热议中!=讨论中)、已处理、已屏蔽 -->
AND date_id = #{dateId}
<foreach item="agencyId" collection="agencyIds" open="AND (" separator="or" close=")" index="">
agency_id = #{agencyId}
</foreach>
</select>
</mapper>

17
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/StatsStaffPatrolRecordDailyDao.xml

@ -0,0 +1,17 @@
<?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.dataaggre.dao.epmetuser.StatsStaffPatrolRecordDailyDao">
<select id="getPatrolSumList" resultType="com.epmet.dataaggre.entity.epmetuser.StatsStaffPatrolRecordDailyEntity">
SELECT
agency_id,
sum(patrol_total) patrolTotal,
sum(TOTAL_TIME) totalTime
FROM stats_staff_patrol_record_daily
WHERE del_flag = '0'
AND date_id BETWEEN #{startDateId} and #{endDateId}
<foreach item="agencyId" collection="agencyList" open="AND (" separator="or" close=")" index="">
agency_id = #{agencyId}
</foreach>
GROUP BY customer_id,agency_id
</select>
</mapper>

22
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/govOrg/OrgTreeFormDTO.java

@ -0,0 +1,22 @@
package com.epmet.dto.form.govOrg;
import lombok.Data;
import java.io.Serializable;
/**
* 各机关注册用户数入参DTO
*
* @author yinzuomei@elink-cn.com
* @date 2020/6/22 12:47
*/
@Data
public class OrgTreeFormDTO implements Serializable {
private static final long serialVersionUID = 6649155066499141632L;
private String mobile;
private String customerId;
}

18
epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/govOrg/OrgTreeNode.java

@ -0,0 +1,18 @@
package com.epmet.dto.result.govOrg;
import com.epmet.commons.tools.utils.TreeAreaCodeNode;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class OrgTreeNode extends TreeAreaCodeNode<OrgTreeNode> {
private String id;
private String pid;
private String orgId;
private String orgName;
private String level;
private List<OrgTreeNode> children=new ArrayList<>();
}

15
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java

@ -8,9 +8,11 @@ import com.epmet.datareport.service.evaluationindex.screen.AgencyService;
import com.epmet.dto.form.AddAreaCodeDictFormDTO;
import com.epmet.dto.form.AgencyDetailMulticFormDTO;
import com.epmet.dto.form.AreaCodeDictFormDTO;
import com.epmet.dto.form.govOrg.OrgTreeFormDTO;
import com.epmet.dto.result.AgencyDetailMulticResultDTO;
import com.epmet.dto.result.AreaCodeDictResultDTO;
import com.epmet.dto.result.commonservice.AddAreaCodeDictResultDTO;
import com.epmet.dto.result.govOrg.OrgTreeNode;
import com.epmet.dto.result.plugins.AgencyNodeDTO;
import com.epmet.evaluationindex.screen.dto.form.CompartmentByBizTypeFormDTO;
import com.epmet.evaluationindex.screen.dto.form.CompartmentFormDTO;
@ -129,4 +131,17 @@ public class AgencyController {
ValidatorUtils.validateEntity(formDTO, AgencyDetailMulticFormDTO.AddUserInternalGroup.class);
return new Result<AgencyDetailMulticResultDTO>().ok(agencyService.queryAgencyDetailMultiC(formDTO));
}
/**
* desc: 获取组织树 含所有直线上级 但不含部门和网格 目前
*
* @param formDTO
* @return com.epmet.commons.tools.utils.Result<com.epmet.dto.result.plugins.AgencyNodeDTO>
* @author LiuJanJun
* @date 2021/8/3 5:17 下午
*/
@PostMapping("getStaffAgencyTree")
public Result<OrgTreeNode> getStaffAgencyTree(@RequestBody OrgTreeFormDTO formDTO) {
return new Result<OrgTreeNode>().ok(agencyService.getStaffAgencyTree(formDTO));
}
}

37
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenCustomerAgencyDao.java

@ -114,7 +114,7 @@ public interface ScreenCustomerAgencyDao {
CompartmentResultDTO getAgencyInfoByAegncyId(@Param("agencyId") String agencyId);
/**
* @Description 查询组织的下级组织ID
* @Description 查询组织的下级组织ID
* @Param agencyId
* @author zxc
* @date 2020/10/28 10:33 上午
@ -134,7 +134,7 @@ public interface ScreenCustomerAgencyDao {
* @description 根据areaCode查询组织机构
* @Date 2021/2/4 21:51
**/
List<AgencyNodeDTO> queryStaffAgencyTree(@Param("areaCode")String areaCode);
List<AgencyNodeDTO> queryStaffAgencyTree(@Param("areaCode") String areaCode);
/**
* @param areaCode
@ -143,7 +143,7 @@ public interface ScreenCustomerAgencyDao {
* @description 查找组织下的部门
* @Date 2021/2/4 21:51
**/
List<DeptNodeDTO> selectDeptList(@Param("areaCode") String areaCode,@Param("agencyId") String agencyId);
List<DeptNodeDTO> selectDeptList(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId);
/**
* @param areaCode
@ -152,27 +152,27 @@ public interface ScreenCustomerAgencyDao {
* @description 查找组织下的网格
* @Date 2021/2/4 21:52
**/
List<GridNodeDTO> selectGridList(@Param("areaCode") String areaCode,@Param("agencyId") String agencyId);
List<GridNodeDTO> selectGridList(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId);
/**
* @return java.util.List<java.lang.String>
* @param areaCode
* @param agencyId
* @return java.util.List<java.lang.String>
* @author yinzuomei
* @description 下一级组织+直属网格
* @Date 2021/5/10 14:02
**/
List<String> getNextAgencyIds(@Param("areaCode")String areaCode,@Param("agencyId")String agencyId);
List<String> getNextAgencyIds(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId);
List<ScreenCustomerAgencyCommonDTO> selectSubAgencyIds(@Param("areaCode")String areaCode, @Param("agencyId")String agencyId);
List<ScreenCustomerAgencyCommonDTO> selectSubAgencyIds(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId);
/**
* @Description 根据agencyId查询网格
* @Description 根据agencyId查询网格
* @Param agencyId
* @author zxc
* @date 2021/6/8 1:27 下午
*/
List<GridManagerListResultDTO> selectGrid(@Param("agencyId")String agencyId,@Param("areaCode")String areaCode);
List<GridManagerListResultDTO> selectGrid(@Param("agencyId") String agencyId, @Param("areaCode") String areaCode);
/**
* 查询当前组织的下一级组织可根据areaCode查询也可根据pid查询
@ -190,13 +190,13 @@ public interface ScreenCustomerAgencyDao {
* @param parentAgencyId
* @return java.util.List<com.epmet.dto.result.ScreenCustomerAgencyDTO>
*/
List<ScreenCustomerGridDTO> selectGridDTOList(@Param("areaCode") String areaCode, @Param("parentAgencyId") String parentAgencyId,@Param("allCustomerIds") List<String> allCustomerIds);
List<ScreenCustomerGridDTO> selectGridDTOList(@Param("areaCode") String areaCode, @Param("parentAgencyId") String parentAgencyId, @Param("allCustomerIds") List<String> allCustomerIds);
List<ParentListResultDTO> selectPAgencyById(@Param("listStr")List<String> pidList);
List<ParentListResultDTO> selectPAgencyById(@Param("listStr") List<String> pidList);
/**
* @return com.epmet.dto.result.ScreenCustomerAgencyDTO
* @param customerId
* @return com.epmet.dto.result.ScreenCustomerAgencyDTO
* @author yinzuomei
* @description 根据客户id返回当前客户下的跟组织信息
* @Date 2021/6/24 17:43
@ -204,4 +204,15 @@ public interface ScreenCustomerAgencyDao {
ScreenCustomerAgencyDTO selectCustomerRootAgency(String customerId);
ScreenCustomerAgencyDTO selectByAreaCode(String areaCode);
}
/**
* desc: 根据pids 或者 areaCode 获取所有下级组织
*
* @param pids
* @param areaCode
* @return java.util.List<com.epmet.dto.result.ScreenCustomerAgencyDTO>
* @author LiuJanJun
* @date 2021/8/5 11:01 上午
*/
List<ScreenCustomerAgencyDTO> selectAllSubAgencyList(@Param("pids") String pids, @Param("areaCode") String areaCode);
}

12
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/AgencyService.java

@ -5,10 +5,12 @@ import com.epmet.dto.ScreenCustomerGridDTO;
import com.epmet.dto.form.AddAreaCodeDictFormDTO;
import com.epmet.dto.form.AgencyDetailMulticFormDTO;
import com.epmet.dto.form.AreaCodeDictFormDTO;
import com.epmet.dto.form.govOrg.OrgTreeFormDTO;
import com.epmet.dto.result.AgencyDetailMulticResultDTO;
import com.epmet.dto.result.AreaCodeDictResultDTO;
import com.epmet.dto.result.ScreenCustomerAgencyDTO;
import com.epmet.dto.result.commonservice.AddAreaCodeDictResultDTO;
import com.epmet.dto.result.govOrg.OrgTreeNode;
import com.epmet.dto.result.plugins.AgencyNodeDTO;
import com.epmet.evaluationindex.screen.dto.form.CompartmentByBizTypeFormDTO;
import com.epmet.evaluationindex.screen.dto.form.CompartmentFormDTO;
@ -104,4 +106,14 @@ public interface AgencyService {
* @return com.epmet.dto.result.AgencyDetailMulticResultDTO
*/
AgencyDetailMulticResultDTO queryAgencyDetailMultiC(AgencyDetailMulticFormDTO formDTO);
/**
* desc: 获取工作人员组织树 含所有直线上级组织 不含网格及部门
*
* @param mobile
* @return com.epmet.dto.result.plugins.AgencyNodeDTO
* @author LiuJanJun
* @date 2021/8/3 5:03 下午
*/
OrgTreeNode getStaffAgencyTree(OrgTreeFormDTO mobile);
}

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

@ -2,28 +2,35 @@ package com.epmet.datareport.service.evaluationindex.screen.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.enums.OrgLevelEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.AgencyTreeUtils;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.TreeUtils;
import com.epmet.constant.DataSourceConstant;
import com.epmet.datareport.dao.evaluationindex.screen.ScreenCustomerAgencyDao;
import com.epmet.datareport.dao.evaluationindex.screen.ScreenCustomerGridDao;
import com.epmet.datareport.redis.DataReportRedis;
import com.epmet.datareport.service.evaluationindex.screen.AgencyService;
import com.epmet.dto.AgencyInfoDTO;
import com.epmet.dto.CustomerAgencyDTO;
import com.epmet.dto.CustomerStaffDTO;
import com.epmet.dto.ScreenCustomerGridDTO;
import com.epmet.dto.form.AddAreaCodeDictFormDTO;
import com.epmet.dto.form.AgencyDetailMulticFormDTO;
import com.epmet.dto.form.AreaCodeDictFormDTO;
import com.epmet.dto.form.CustomerStaffFormDTO;
import com.epmet.dto.form.govOrg.OrgTreeFormDTO;
import com.epmet.dto.result.AgencyDetailMulticResultDTO;
import com.epmet.dto.result.AreaCodeDictResultDTO;
import com.epmet.dto.result.ParentListResultDTO;
import com.epmet.dto.result.ScreenCustomerAgencyDTO;
import com.epmet.dto.result.commonservice.AddAreaCodeDictResultDTO;
import com.epmet.dto.result.govOrg.OrgTreeNode;
import com.epmet.dto.result.plugins.AgencyNodeDTO;
import com.epmet.evaluationindex.screen.constant.ScreenConstant;
import com.epmet.evaluationindex.screen.dto.form.CompartmentByBizTypeFormDTO;
@ -33,6 +40,7 @@ import com.epmet.evaluationindex.screen.dto.result.AgencyDistributionResultDTO;
import com.epmet.evaluationindex.screen.dto.result.CompartmentResultDTO;
import com.epmet.evaluationindex.screen.dto.result.TreeResultDTO;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.feign.GovOrgOpenFeignClient;
import com.epmet.feign.OperCrmOpenFeignClient;
import lombok.extern.slf4j.Slf4j;
@ -42,10 +50,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.*;
/**
* 组织相关api
@ -70,6 +75,8 @@ public class AgencyServiceImpl implements AgencyService {
private OperCrmOpenFeignClient operCrmOpenFeignClient;
@Autowired
private DataReportRedis dataReportRedis;
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
/**
* @Description 1组织机构树
@ -438,7 +445,7 @@ public class AgencyServiceImpl implements AgencyService {
log.info("多客户版本parentList、level要重新赋值;agencysResultDTO.getParentAreaCode()="+agencysResultDTO.getParentAreaCode());
ScreenCustomerAgencyDTO parentAgency=screenCustomerAgencyDao.selectByAreaCode(agencysResultDTO.getParentAreaCode());
if (null != parentAgency) {
agencysResultDTO.setLevel(getAgencyLevelMultiC(parentAgency));
agencysResultDTO.setLevel(OrgLevelEnum.getSubOrgLevel(parentAgency.getLevel()));
List<ParentListResultDTO> temp = getParentListMultic(parentList, parentAgency, formDTO.getCustomerId(), agencysResultDTO.getRootAgencyId());
agencysResultDTO.setParentList(temp);
}
@ -468,6 +475,97 @@ public class AgencyServiceImpl implements AgencyService {
return agencysResultDTO;
}
@Override
public OrgTreeNode getStaffAgencyTree(OrgTreeFormDTO formDTO) {
//获取工作人员信息
CustomerStaffFormDTO staffParam = new CustomerStaffFormDTO();
staffParam.setMobile(formDTO.getMobile());
staffParam.setCustomerId(formDTO.getCustomerId());
Result<CustomerStaffDTO> staffInfoResult = userOpenFeignClient.getCustomerStaffInfo(staffParam);
if (!staffInfoResult.success()){
throw new RenException(staffInfoResult.getCode(),staffInfoResult.getInternalMsg());
}
//获取工作人员组织信息
Result<CustomerAgencyDTO> agencyByStaff = govOrgOpenFeignClient.getAgencyByStaff(staffInfoResult.getData().getUserId());
if (!agencyByStaff.success() || agencyByStaff.getData()== null || StringUtils.isBlank(agencyByStaff.getData().getId()) ){
throw new RenException(staffInfoResult.getCode(),staffInfoResult.getMsg());
}
CustomerAgencyDTO staffAgencyDTO = agencyByStaff.getData();
log.debug("getStaffAgencyTree查询当前工作人员组织信息为:{}",JSON.toJSONString(staffAgencyDTO));
//4、如果当前客户不存在子客户则areaCode置为空
Result<List<String>> crmRes=operCrmOpenFeignClient.getAllSubCustomerIds(formDTO.getCustomerId());
if (!crmRes.success()){
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
}
List<OrgTreeNode> nodes = new ArrayList<>();
ScreenCustomerAgencyDTO parentAgencyDTO = null;
List<OrgTreeNode> nodeList = new ArrayList<>();
//单客户
if (CollectionUtils.isEmpty(crmRes.getData())){
String parentId = staffAgencyDTO.getPid();
do {
parentAgencyDTO = screenCustomerAgencyDao.selectByAgencyId(parentId);
if (parentAgencyDTO == null){
break;
}
convertOrgTreeNode(nodeList, parentAgencyDTO);
if (parentAgencyDTO.getPid() == null || NumConstant.ZERO_STR.equals(parentAgencyDTO.getPid())){
break;
}
parentId = parentAgencyDTO.getAreaCode();
} while (true);
//多客户 获取所有下级
List<ScreenCustomerAgencyDTO> agencyNodeDTOS = screenCustomerAgencyDao.selectAllSubAgencyList(staffAgencyDTO.getPids(),null);
agencyNodeDTOS.forEach(agency->convertOrgTreeNode(nodeList, agency));
nodes = TreeUtils.buildTreeByAreaCode(nodeList);
}else {
String parentAreaCode = staffAgencyDTO.getParentAreaCode();
//多客户 获取所有直线上级
do {
parentAgencyDTO = screenCustomerAgencyDao.selectByAreaCode(parentAreaCode);
if (parentAgencyDTO == null){
break;
}
convertOrgTreeNode(nodeList, parentAgencyDTO);
if (parentAgencyDTO.getPid() == null || NumConstant.ZERO_STR.equals(parentAgencyDTO.getPid())){
break;
}
parentAreaCode = parentAgencyDTO.getAreaCode();
} while (true);
log.debug("getStaffAgencyTree查询所有上级为:{}",JSON.toJSONString(nodeList));
//多客户 获取所有下级
List<ScreenCustomerAgencyDTO> agencyNodeDTOS = screenCustomerAgencyDao.selectAllSubAgencyList(null,staffAgencyDTO.getAreaCode());
//孔村降级处理 且移除掉 党总支级别
String KONG_CUN_AGENCY_ID = "1234085031077498881";
Iterator<ScreenCustomerAgencyDTO> iterator = agencyNodeDTOS.iterator();
while (iterator.hasNext()){
ScreenCustomerAgencyDTO e = iterator.next();
if (e.getPids().contains(KONG_CUN_AGENCY_ID)){
if (OrgLevelEnum.STREET.getCode().equals(e.getLevel())){
iterator.remove();
}
if (KONG_CUN_AGENCY_ID.equals(e.getAgencyId())){
e.setLevel(OrgLevelEnum.getSubOrgLevel(e.getLevel()));
}
}
convertOrgTreeNode(nodeList, e);
}
nodes = TreeUtils.buildTreeByAreaCode(nodeList);
}
log.debug("getStaffAgencyTree查询所有上级树结构为:{}",JSON.toJSONString(nodes));
//只有一个根节点的树 所以返回一个
return nodes.get(0);
}
private void convertOrgTreeNode(List<OrgTreeNode> nodeList, ScreenCustomerAgencyDTO currentAgency) {
OrgTreeNode orgTreeNode = ConvertUtils.sourceToTarget(currentAgency, OrgTreeNode.class);
orgTreeNode.setOrgId(currentAgency.getAgencyId());
orgTreeNode.setOrgName(currentAgency.getAgencyName());
nodeList.add(orgTreeNode);
}
private List<ParentListResultDTO> getParentListMultic(List<ParentListResultDTO> resList, ScreenCustomerAgencyDTO firstParent, String currentUserCustomerId, String rootAgencyId) {
ParentListResultDTO resultDTO = new ParentListResultDTO();
resultDTO.setId(firstParent.getAgencyId());
@ -491,20 +589,4 @@ public class AgencyServiceImpl implements AgencyService {
}
}
}
private String getAgencyLevelMultiC(ScreenCustomerAgencyDTO parentAgency) {
String level=StrConstant.EPMETY_STR;
if(null!=parentAgency){
if(Constant.PROVINCE.equals(parentAgency.getLevel())){
return Constant.CITY;
}else if(Constant.CITY.equals(parentAgency.getLevel())){
return Constant.DISTRICT;
}else if(Constant.DISTRICT.equals(parentAgency.getLevel())){
return Constant.STREET;
}else if(Constant.STREET.equals(parentAgency.getLevel())){
return Constant.COMMUNITY;
}
}
return level;
}
}

2
epmet-module/data-report/data-report-server/src/main/resources/logback-spring.xml

@ -142,7 +142,7 @@
<springProfile name="dev,test,local">
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="INFO"/>
<logger name="com.epmet.datareport.dao" level="DEBUG"/>
<logger name="com.epmet.datareport" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>

17
epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenCustomerAgencyDao.xml

@ -433,4 +433,21 @@
AND sca.AREA_CODE = #{areaCode}
limit 1
</select>
<select id="selectAllSubAgencyList" resultType="com.epmet.dto.result.ScreenCustomerAgencyDTO">
SELECT
sca.*
FROM
screen_customer_agency sca
WHERE
sca.DEL_FLAG = '0'
<if test="pids != null and pids != ''">
AND sca.pids like CONCAT(#{pids},'%')
</if>
<if test="areaCode != null and areaCode != ''">
AND sca.AREA_CODE like CONCAT(#{areaCode},'%')
AND sca.PARENT_AREA_CODE != ''
AND sca.PARENT_AREA_CODE IS NOT NULL
</if>
</select>
</mapper>

1
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcal/impl/IndexCalculateStreetServiceImpl.java

@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSON;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.enums.KongCunCustomerEnvEnum;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;

13
epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/OrgTreeNode.java

@ -1,13 +0,0 @@
package com.epmet.dto;
import lombok.Data;
import java.util.List;
@Data
public class OrgTreeNode {
private String orgId;
private String orgName;
private String orgType;
private List<OrgTreeNode> subOrgs;
}
Loading…
Cancel
Save