Sfoglia il codice sorgente

添加集团编码

fengyanjie@sagacloud.cn 4 anni fa
parent
commit
1c50979ffb

+ 1 - 1
dmp-report/pom.xml

@@ -3,8 +3,8 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>persagy-dmp</artifactId>
         <groupId>com.persagy</groupId>
+        <artifactId>dmp</artifactId>
         <version>4.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>

+ 4 - 2
dmp-report/src/main/java/com/persagy/dmp/report/entity/ReportAlarmRecord.java

@@ -17,6 +17,7 @@ public class ReportAlarmRecord extends BaseEntity {
     private Integer id;
     private String itemCode;
     private String projectId;
+    private String groupCode;
     private String category;
     private String classCode;
     private String level;
@@ -33,14 +34,15 @@ public class ReportAlarmRecord extends BaseEntity {
     @Enumerated(value = EnumType.STRING)
     private DateType dateType;
 
-    public ReportAlarmRecord(){
+    public ReportAlarmRecord() {
 
     }
 
-    public ReportAlarmRecord(ReportAlarmRecord record){
+    public ReportAlarmRecord(ReportAlarmRecord record) {
         this.setId(record.getId());
         this.setItemCode(record.getItemCode());
         this.setProjectId(record.getProjectId());
+        this.setGroupCode(record.getGroupCode());
         this.setCategory(record.getCategory());
         this.setClassCode(record.getClassCode());
         this.setLevel(record.getLevel());

+ 2 - 0
dmp-report/src/main/java/com/persagy/dmp/report/entity/ReportRwdObject.java

@@ -16,6 +16,7 @@ public class ReportRwdObject extends BaseEntity {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Integer id;
     private String projectId;
+    private String groupCode;
     private String objType;
     private String classCode;
     private String year;
@@ -36,6 +37,7 @@ public class ReportRwdObject extends BaseEntity {
     public ReportRwdObject(ReportRwdObject rwdObject) {
         this.id = rwdObject.id;
         this.projectId = rwdObject.projectId;
+        this.groupCode = rwdObject.groupCode;
         this.objType = rwdObject.objType;
         this.classCode = rwdObject.classCode;
         this.year = rwdObject.year;

+ 0 - 29
dmp-report/src/main/java/com/persagy/dmp/report/entity/alarm/AlarmItem.java

@@ -1,29 +0,0 @@
-package com.persagy.dmp.report.entity.alarm;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.hibernate.annotations.GenericGenerator;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-@Setter
-@Getter
-@Entity
-@Table(name = "alarm_item")
-public class AlarmItem {
-
-    @Id
-    @GeneratedValue(generator = "assignedId")
-    @GenericGenerator(name = "assignedId", strategy = "assigned")
-    private String id;
-    private String code;
-    private String name;
-    private String category;
-    private String level;
-    private Integer valid;
-    private String projectId;
-    private String groupCode;
-}

+ 0 - 32
dmp-report/src/main/java/com/persagy/dmp/report/entity/rwd/ClassDef.java

@@ -1,32 +0,0 @@
-package com.persagy.dmp.report.entity.rwd;
-
-import com.persagy.dmp.rwd.enums.ObjType;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.persistence.*;
-
-@Setter
-@Getter
-@Entity
-@Table(name = "rwd_def_class")
-@IdClass(GroupPK.class)
-public class ClassDef {
-
-    @Id
-    private String id;
-    @Id
-    private String groupCode;
-    private String code;
-    @Enumerated(value = EnumType.STRING)
-    private ObjType objType;
-    private String name;
-    private String aliasCode;
-    private String aliasName;
-    private String type;
-    private String projectId;
-    private String majorCode;
-    private String systemCode;
-    private String equipmentCode;
-    private String parentCode;
-}

+ 0 - 52
dmp-report/src/main/java/com/persagy/dmp/report/entity/rwd/GroupPK.java

@@ -1,52 +0,0 @@
-package com.persagy.dmp.report.entity.rwd;
-
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * @author: yaoll
- * @date: 2020-11-01
- * @verison: 1.0
- */
-@Embeddable
-public class GroupPK implements Serializable {
-
-	@Column
-	private String id;
-
-	@Column
-	private String groupCode;
-
-	public GroupPK() {
-	}
-
-	public GroupPK(String id, String groupCode) {
-		this.id = id;
-		this.groupCode = groupCode;
-	}
-
-	@Override
-	public boolean equals(Object o) {
-		if (this == o) {
-			return true;
-		};
-		if (o == null || getClass() != o.getClass()) {
-			return false;
-		};
-		GroupPK groupPK = (GroupPK) o;
-		return id.equals(groupPK.id) &&
-				groupCode.equals(groupPK.groupCode);
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(id, groupCode);
-	}
-
-	@Override
-	public String toString() {
-		return "GroupPK{id=\"" + id + "\", groupCode=\"" + groupCode + "\"}";
-	}
-}

+ 3 - 1
dmp-report/src/main/java/com/persagy/dmp/report/jms/executor/AlarmRecordCreateExecutor.java

@@ -41,6 +41,7 @@ public class AlarmRecordCreateExecutor implements MessageExecutor {
 
         String itemCode = MapUtils.getLong(obj, "itemCode") + "";
         String projectId = MapUtils.getString(obj, "projectId");
+        String groupCode = MapUtils.getString(obj, "groupCode");
         String category = MapUtils.getString(obj, "category");
         String classCode = MapUtils.getString(obj, "classCode");
         String level = MapUtils.getString(obj, "level");
@@ -53,7 +54,7 @@ public class AlarmRecordCreateExecutor implements MessageExecutor {
         String hour = DateUtils.format(createTime, "yyyyMMddHH");
 
         QReportAlarmRecord qt = QReportAlarmRecord.reportAlarmRecord;
-        BooleanExpression ex = qt.itemCode.eq(itemCode).and(qt.projectId.eq(projectId)).and(qt.category.eq(category))
+        BooleanExpression ex = qt.itemCode.eq(itemCode).and(qt.projectId.eq(projectId)).and(qt.groupCode.eq(groupCode)).and(qt.category.eq(category))
                 .and(qt.classCode.eq(classCode)).and(qt.level.eq(level)).and(qt.alarmState.eq(alarmState)).and(qt.createTime.like(year + "%"));
         Iterable<ReportAlarmRecord> all = reportAlarmRecordRepository.findAll(ex);
         List<ReportAlarmRecord> data = new ArrayList<>();
@@ -62,6 +63,7 @@ public class AlarmRecordCreateExecutor implements MessageExecutor {
             ReportAlarmRecord yearEntity = new ReportAlarmRecord();
             yearEntity.setItemCode(itemCode);
             yearEntity.setProjectId(projectId);
+            yearEntity.setGroupCode(groupCode);
             yearEntity.setCategory(category);
             yearEntity.setClassCode(classCode);
             yearEntity.setLevel(level);

+ 3 - 1
dmp-report/src/main/java/com/persagy/dmp/report/jms/executor/InstanceObjectCreateExecutor.java

@@ -34,6 +34,7 @@ public class InstanceObjectCreateExecutor implements MessageExecutor {
     @Override
     public void execute(Map<String, Object> message) {
         String projectId = MapUtils.getString(message, "projectId");
+        String groupCode = MapUtils.getString(message, "groupCode");
         String objType = MapUtils.getString(message, "str1");
         String classCode = MapUtils.getString(message, "str2");
         String sendTime = MapUtils.getString(message, "sendTime");
@@ -44,13 +45,14 @@ public class InstanceObjectCreateExecutor implements MessageExecutor {
         String hour = sendTime.substring(0, 10);
 
         QReportRwdObject qt = QReportRwdObject.reportRwdObject;
-        BooleanExpression ex = qt.projectId.eq(projectId).and(qt.objType.eq(objType)).and(qt.classCode.eq(classCode)).and(qt.createTime.like(year + "%"));
+        BooleanExpression ex = qt.projectId.eq(projectId).and(qt.groupCode.eq(groupCode)).and(qt.objType.eq(objType)).and(qt.classCode.eq(classCode)).and(qt.createTime.like(year + "%"));
         Iterable<ReportRwdObject> all = reportObjectRepository.findAll(ex);
         List<ReportRwdObject> data = new ArrayList<>();
         all.forEach(data::add);
         if (0 == data.size()) {
             ReportRwdObject yearEntity = new ReportRwdObject();
             yearEntity.setProjectId(projectId);
+            yearEntity.setGroupCode(groupCode);
             yearEntity.setObjType(objType);
             yearEntity.setClassCode(classCode);
             yearEntity.setYear(year);

+ 6 - 0
dmp-report/src/main/java/com/persagy/dmp/report/repository/ReportAlarmRecordRepository.java

@@ -2,8 +2,14 @@ package com.persagy.dmp.report.repository;
 
 import com.persagy.dmp.report.entity.ReportAlarmRecord;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.querydsl.QuerydslPredicateExecutor;
 
 public interface ReportAlarmRecordRepository extends JpaRepository<ReportAlarmRecord, Integer>, QuerydslPredicateExecutor<ReportAlarmRecord> {
+
+    @Modifying
+    @Query(value = "delete from report_alarm_record where date_Type = ?1 and create_time >= ?2 and create_time < ?3", nativeQuery = true)
+    void deleteDateType(String dateType, String start, String end);
 }
 

+ 7 - 0
dmp-report/src/main/java/com/persagy/dmp/report/repository/ReportObjectRepository.java

@@ -2,8 +2,15 @@ package com.persagy.dmp.report.repository;
 
 import com.persagy.dmp.report.entity.ReportRwdObject;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.querydsl.QuerydslPredicateExecutor;
 
 public interface ReportObjectRepository extends JpaRepository<ReportRwdObject, Integer>, QuerydslPredicateExecutor<ReportRwdObject> {
+
+    @Modifying
+    @Query(value = "delete from report_rwd_object where date_Type = ?1 and create_time >= ?2 and create_time < ?3", nativeQuery = true)
+    void deleteDateType(String dateType, String start, String end);
+
 }
 

+ 52 - 154
dmp-report/src/main/java/com/persagy/dmp/report/service/DataExecutorService.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.report.service;
 
 import com.persagy.common.criteria.JpaUtils;
+import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.report.common.json.JsonMapper;
 import com.persagy.dmp.report.entity.*;
 import com.persagy.dmp.report.enumeration.DateType;
@@ -12,7 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author fengyanjie
@@ -34,216 +38,110 @@ public class DataExecutorService {
 
     @Transactional
     public void reportRwdObject(DateType dateType, Date startTime, Date endTime) throws Exception {
+        String groupCode = DmpParameterStorage.getGroupCode();
+        String projectId = DmpParameterStorage.getProjectId();
         String tableName = "rwd_object";
         String sql = "";
         StringBuilder sqlBuilder = new StringBuilder();
-        sqlBuilder.append("        select project_id,obj_type,class_code,'" + dateType + "' as date_type,          \n");
+        sqlBuilder.append("        select project_id,group_code,obj_type,class_code,'" + dateType + "' as date_type,          \n");
         reportUtils.appendSql(sqlBuilder, dateType);
-        sqlBuilder.append("        count(0) rwd_object_num from " + tableName + "          \n");
+        sqlBuilder.append("        count(0) rwd_object_num from dmp_rwd." + tableName + "_" + groupCode + "_" + projectId + "          \n");
         sqlBuilder.append("        where create_time >= ? and create_time < ?          \n");
-        sqlBuilder.append("         group by project_id,obj_type,class_code,date_type,year,month,day,hour,season,date          \n");
+        sqlBuilder.append("          and project_id = ? and group_code = ?          \n");
+        sqlBuilder.append("         group by project_id,group_code,obj_type,class_code,date_type,year,month,day,hour,season,date          \n");
         sql = sqlBuilder.toString();
         //TODO 返回字段值为null报错
-        List<Map<String, Object>> list = jpaUtils.queryList(sql, startTime, endTime);
+        List<Map<String, Object>> list = jpaUtils.queryList(sql, startTime, endTime, projectId, groupCode);
         List<BaseEntity> data = new ArrayList<>();
-        List<Object> yearList = new ArrayList<>();
-        List<Object> monthList = new ArrayList<>();
-        List<Object> dayList = new ArrayList<>();
-        List<Object> hourList = new ArrayList<>();
-        List<Object> seasonList = new ArrayList<>();
-        List<Object> createTimeList = new ArrayList<>();
         list.forEach(item -> {
             ReportRwdObject reportRwdObject = new ReportRwdObject();
+            String year = MapUtils.getString(item, "year");
+            String month = MapUtils.getString(item, "month");
+            String day = MapUtils.getString(item, "day");
+            String hour = MapUtils.getString(item, "hour");
+            String season = MapUtils.getString(item, "season");
+            reportRwdObject.setYear(year.equals("null") ? null : year);
+            reportRwdObject.setDay(day.equals("null") ? null : day);
+            reportRwdObject.setMonth(month.equals("null") ? null : month);
+            reportRwdObject.setHour(hour.equals("null") ? null : hour);
+            reportRwdObject.setSeason(season.equals("null") ? null : season);
             reportRwdObject.setProjectId(MapUtils.getString(item, "project_id"));
+            reportRwdObject.setGroupCode(MapUtils.getString(item, "group_code"));
             reportRwdObject.setObjType(MapUtils.getString(item, "obj_type"));
             reportRwdObject.setClassCode(MapUtils.getString(item, "class_code"));
-            if (!MapUtils.getString(item, "year").equals("null")) {
-                String year = MapUtils.getString(item, "year");
-                if (!yearList.contains(year)) {
-                    yearList.add(year);
-                }
-                reportRwdObject.setYear(year);
-            }
-            if (!MapUtils.getString(item, "day").equals("null")) {
-                String day = MapUtils.getString(item, "day");
-                if (!dayList.contains(day)) {
-                    dayList.add(day);
-                }
-                reportRwdObject.setYear(day);
-            }
-            if (!MapUtils.getString(item, "month").equals("null")) {
-                String month = MapUtils.getString(item, "month");
-                if (!monthList.contains(month)) {
-                    monthList.add(month);
-                }
-                reportRwdObject.setYear(month);
-            }
-            if (!MapUtils.getString(item, "hour").equals("null")) {
-                String hour = MapUtils.getString(item, "hour");
-                if (!hourList.contains(hour)) {
-                    hourList.add(hour);
-                }
-                reportRwdObject.setHour(hour);
-            }
-            if (!MapUtils.getString(item, "season").equals("null")) {
-                String season = MapUtils.getString(item, "season");
-                if (!seasonList.contains(season)) {
-                    seasonList.add(season);
-                }
-                reportRwdObject.setSeason(season);
-            }
-            String date = MapUtils.getString(item, "date");
-            if (!createTimeList.contains(date)) {
-                createTimeList.add(date);
-            }
-            reportRwdObject.setCreateTime(date);
+            reportRwdObject.setCreateTime(MapUtils.getString(item, "date"));
             reportRwdObject.setRwdObjectNum(MapUtils.getLong(item, "rwd_object_num"));
             reportRwdObject.setDateType(DateType.valueOf(MapUtils.getString(item, "date_type")));
             data.add(reportRwdObject);
         });
         ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
         List<Object> tableGroup = JsonMapper.json2List(JsonMapper.toSimpleJson(reportConfig.getTableGroup()));
-        List<ReportConfigGroup> groupList = reportUtils.getGroupList(tableGroup);
-
-        List<Object[]> year = new ArrayList<>();
-        yearList.forEach(item->year.add(new Object[]{item}));
-        List<Object[]> month = new ArrayList<>();
-        monthList.forEach(item->month.add(new Object[]{item}));
-        List<Object[]> day = new ArrayList<>();
-        dayList.forEach(item->day.add(new Object[]{item}));
-        List<Object[]> hour = new ArrayList<>();
-        hourList.forEach(item->hour.add(new Object[]{item}));
-        List<Object[]> season = new ArrayList<>();
-        seasonList.forEach(item->season.add(new Object[]{item}));
-        List<Object[]> createTime = new ArrayList<>();
-        createTimeList.forEach(item->createTime.add(new Object[]{item}));
-        groupList.add(new ReportConfigGroup("year", year));
-        groupList.add(new ReportConfigGroup("month", month));
-        groupList.add(new ReportConfigGroup("day", day));
-        groupList.add(new ReportConfigGroup("hour", hour));
-        groupList.add(new ReportConfigGroup("season", season));
-        groupList.add(new ReportConfigGroup("create_time", createTime));
-        groupList.add(new ReportConfigGroup("date_type", Collections.singletonList(new Object[]{dateType})));
+        List<ReportConfigGroup> groupList = reportUtils.getGroupList(tableGroup, dateType, startTime, endTime);
         List<BaseEntity> resultList = reportUtils.initData(0, groupList, ReportRwdObject.class, new ArrayList<>());
-        reportUtils.addList(data, resultList, reportConfig.getCalculatedColumns());
+        List<BaseEntity> result = reportUtils.addList(data, resultList, reportConfig.getCalculatedColumns());
 
         Map<String, String> map = reportUtils.getDate(dateType, startTime, endTime);
         String start = map.get("start");
         String end = map.get("end");
-        QReportRwdObject qt = QReportRwdObject.reportRwdObject;
-        Iterable<ReportRwdObject> all = reportObjectRepository.findAll(qt.dateType.eq(dateType).and(qt.createTime.goe(start)).and(qt.createTime.lt(end)));
-        reportObjectRepository.deleteAll(all);
+        reportObjectRepository.deleteDateType(dateType.name(), start, end);
         List<ReportRwdObject> save = new ArrayList<>();
-        data.forEach(item -> save.add((ReportRwdObject) item));
+        result.forEach(item -> save.add((ReportRwdObject) item));
         reportObjectRepository.saveAll(save);
     }
 
     @Transactional
     public void reportAlarmRecord(DateType dateType, Date startTime, Date endTime) throws Exception {
+        String groupCode = DmpParameterStorage.getGroupCode();
+        String projectId = DmpParameterStorage.getProjectId();
         String tableName = "alarm_record";
         String sql = "";
         StringBuilder sqlBuilder = new StringBuilder();
-        sqlBuilder.append("        select item_code,project_id,category,class_code,level,state,'" + dateType + "' as date_type,          \n");
+        sqlBuilder.append("        select item_code,project_id,group_code,category,class_code,level,state,'" + dateType + "' as date_type,          \n");
         reportUtils.appendSql(sqlBuilder, dateType);
-        sqlBuilder.append("        count(0) alarm_record_num from " + tableName + "          \n");
+        sqlBuilder.append("        count(0) alarm_record_num from dmp_alarm." + tableName + "           \n");
         sqlBuilder.append("        where create_time >= ? and create_time < ?          \n");
-        sqlBuilder.append("         group by item_code,project_id,category,class_code,level,state,date_type,year,month,day,hour,season,date          \n");
+        sqlBuilder.append("          and project_id = ? and group_code = ?          \n");
+        sqlBuilder.append("         group by item_code,project_id,group_code,category,class_code,level,state,date_type,year,month,day,hour,season,date          \n");
         sql = sqlBuilder.toString();
 
-        List<Map<String, Object>> list = jpaUtils.queryList(sql, startTime, endTime);
+        List<Map<String, Object>> list = jpaUtils.queryList(sql, startTime, endTime, projectId, groupCode);
         List<BaseEntity> data = new ArrayList<>();
-        List<Object> yearList = new ArrayList<>();
-        List<Object> monthList = new ArrayList<>();
-        List<Object> dayList = new ArrayList<>();
-        List<Object> hourList = new ArrayList<>();
-        List<Object> seasonList = new ArrayList<>();
-        List<Object> createTimeList = new ArrayList<>();
         list.forEach(item -> {
             ReportAlarmRecord reportAlarmRecord = new ReportAlarmRecord();
+            String year = MapUtils.getString(item, "year");
+            String month = MapUtils.getString(item, "month");
+            String day = MapUtils.getString(item, "day");
+            String hour = MapUtils.getString(item, "hour");
+            String season = MapUtils.getString(item, "season");
+            reportAlarmRecord.setYear(year.equals("null") ? null : year);
+            reportAlarmRecord.setDay(day.equals("null") ? null : day);
+            reportAlarmRecord.setMonth(month.equals("null") ? null : month);
+            reportAlarmRecord.setHour(hour.equals("null") ? null : hour);
+            reportAlarmRecord.setSeason(season.equals("null") ? null : season);
             reportAlarmRecord.setItemCode(MapUtils.getString(item, "item_code"));
             reportAlarmRecord.setProjectId(MapUtils.getString(item, "project_id"));
+            reportAlarmRecord.setGroupCode(MapUtils.getString(item, "group_code"));
             reportAlarmRecord.setCategory(MapUtils.getString(item, "category"));
             reportAlarmRecord.setClassCode(MapUtils.getString(item, "class_code"));
             reportAlarmRecord.setLevel(MapUtils.getString(item, "level"));
             reportAlarmRecord.setAlarmState(MapUtils.getString(item, "state"));
-
-            if (!MapUtils.getString(item, "year").equals("null")) {
-                String year = MapUtils.getString(item, "year");
-                if (!yearList.contains(year)) {
-                    yearList.add(year);
-                }
-                reportAlarmRecord.setYear(year);
-            }
-            if (!MapUtils.getString(item, "day").equals("null")) {
-                String day = MapUtils.getString(item, "day");
-                if (!dayList.contains(day)) {
-                    dayList.add(day);
-                }
-                reportAlarmRecord.setYear(day);
-            }
-            if (!MapUtils.getString(item, "month").equals("null")) {
-                String month = MapUtils.getString(item, "month");
-                if (!monthList.contains(month)) {
-                    monthList.add(month);
-                }
-                reportAlarmRecord.setYear(month);
-            }
-            if (!MapUtils.getString(item, "hour").equals("null")) {
-                String hour = MapUtils.getString(item, "hour");
-                if (!hourList.contains(hour)) {
-                    hourList.add(hour);
-                }
-                reportAlarmRecord.setHour(hour);
-            }
-            if (!MapUtils.getString(item, "season").equals("null")) {
-                String season = MapUtils.getString(item, "season");
-                if (!seasonList.contains(season)) {
-                    seasonList.add(season);
-                }
-                reportAlarmRecord.setSeason(season);
-            }
-            String date = MapUtils.getString(item, "date");
-            if (!createTimeList.contains(date)) {
-                createTimeList.add(date);
-            }
-            reportAlarmRecord.setCreateTime(date);
+            reportAlarmRecord.setCreateTime(MapUtils.getString(item, "date"));
             reportAlarmRecord.setAlarmRecordNum(MapUtils.getLong(item, "alarm_record_num"));
             reportAlarmRecord.setDateType(DateType.valueOf(MapUtils.getString(item, "date_type")));
             data.add(reportAlarmRecord);
         });
         ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
         List<Object> tableGroup = JsonMapper.json2List(JsonMapper.toSimpleJson(reportConfig.getTableGroup()));
-        List<ReportConfigGroup> groupList = reportUtils.getGroupList(tableGroup);
-
-        List<Object[]> year = new ArrayList<>();
-        yearList.forEach(item->year.add(new Object[]{item}));
-        List<Object[]> month = new ArrayList<>();
-        monthList.forEach(item->month.add(new Object[]{item}));
-        List<Object[]> day = new ArrayList<>();
-        dayList.forEach(item->day.add(new Object[]{item}));
-        List<Object[]> hour = new ArrayList<>();
-        hourList.forEach(item->hour.add(new Object[]{item}));
-        List<Object[]> season = new ArrayList<>();
-        seasonList.forEach(item->season.add(new Object[]{item}));
-        List<Object[]> createTime = new ArrayList<>();
-        createTimeList.forEach(item->createTime.add(new Object[]{item}));
-        groupList.add(new ReportConfigGroup("year", year));
-        groupList.add(new ReportConfigGroup("month", month));
-        groupList.add(new ReportConfigGroup("day", day));
-        groupList.add(new ReportConfigGroup("hour", hour));
-        groupList.add(new ReportConfigGroup("season", season));
-        groupList.add(new ReportConfigGroup("create_time", createTime));
-        groupList.add(new ReportConfigGroup("date_type", Collections.singletonList(new Object[]{dateType})));
+        List<ReportConfigGroup> groupList = reportUtils.getGroupList(tableGroup, dateType, startTime, endTime);
         List<BaseEntity> resultList = reportUtils.initData(0, groupList, ReportAlarmRecord.class, new ArrayList<>());
-        reportUtils.addList(data, resultList, reportConfig.getCalculatedColumns());
+        List<BaseEntity> result = reportUtils.addList(data, resultList, reportConfig.getCalculatedColumns());
+
         Map<String, String> map = reportUtils.getDate(dateType, startTime, endTime);
         String start = map.get("start");
         String end = map.get("end");
-        QReportAlarmRecord qt = QReportAlarmRecord.reportAlarmRecord;
-        Iterable<ReportAlarmRecord> all = reportAlarmRecordRepository.findAll(qt.dateType.eq(dateType).and(qt.createTime.goe(start)).and(qt.createTime.lt(end)));
-        reportAlarmRecordRepository.deleteAll(all);
+        reportAlarmRecordRepository.deleteDateType(dateType.name(), start, end);
         List<ReportAlarmRecord> save = new ArrayList<>();
-        data.forEach(item -> save.add((ReportAlarmRecord) item));
+        result.forEach(item -> save.add((ReportAlarmRecord) item));
         reportAlarmRecordRepository.saveAll(save);
     }
 }

+ 2 - 0
dmp-report/src/main/java/com/persagy/dmp/report/service/ReportAlarmRecordService.java

@@ -29,6 +29,7 @@ public class ReportAlarmRecordService implements BaseService {
         exps.addAll(CriteriaUtils.parse(qt.id, criteria.get("id")));
         exps.addAll(CriteriaUtils.parse(qt.itemCode, criteria.get("itemCode")));
         exps.addAll(CriteriaUtils.parse(qt.projectId, criteria.get("projectId")));
+        exps.addAll(CriteriaUtils.parse(qt.groupCode, criteria.get("groupCode")));
         exps.addAll(CriteriaUtils.parse(qt.category, criteria.get("category")));
         exps.addAll(CriteriaUtils.parse(qt.classCode, criteria.get("classCode")));
         exps.addAll(CriteriaUtils.parse(qt.level, criteria.get("level")));
@@ -48,6 +49,7 @@ public class ReportAlarmRecordService implements BaseService {
             entity.setId(item.get(qt.id));
             entity.setItemCode(item.get(qt.itemCode));
             entity.setProjectId(item.get(qt.projectId));
+            entity.setGroupCode(item.get(qt.groupCode));
             entity.setCategory(item.get(qt.category));
             entity.setClassCode(item.get(qt.classCode));
             entity.setLevel(item.get(qt.level));

+ 2 - 0
dmp-report/src/main/java/com/persagy/dmp/report/service/ReportRwdObjectService.java

@@ -28,6 +28,7 @@ public class ReportRwdObjectService implements BaseService {
         QReportRwdObject qt = QReportRwdObject.reportRwdObject;
         exps.addAll(CriteriaUtils.parse(qt.id, criteria.get("id")));
         exps.addAll(CriteriaUtils.parse(qt.projectId, criteria.get("projectId")));
+        exps.addAll(CriteriaUtils.parse(qt.groupCode, criteria.get("groupCode")));
         exps.addAll(CriteriaUtils.parse(qt.objType, criteria.get("objType")));
         exps.addAll(CriteriaUtils.parse(qt.classCode, criteria.get("classCode")));
         exps.addAll(CriteriaUtils.parse(qt.createTime, criteria.get("createTime")));
@@ -44,6 +45,7 @@ public class ReportRwdObjectService implements BaseService {
             ReportRwdObject entity = new ReportRwdObject();
             entity.setId(item.get(qt.id));
             entity.setProjectId(item.get(qt.projectId));
+            entity.setGroupCode(item.get(qt.groupCode));
             entity.setObjType(item.get(qt.objType));
             entity.setClassCode(item.get(qt.classCode));
             entity.setYear(item.get(qt.year));

+ 177 - 56
dmp-report/src/main/java/com/persagy/dmp/report/service/ReportUtils.java

@@ -1,13 +1,13 @@
 package com.persagy.dmp.report.service;
 
 import com.persagy.common.date.DateUtils;
+import com.persagy.dmp.config.DmpParameterStorage;
 import com.persagy.dmp.report.common.criteria.JacksonCriteria;
 import com.persagy.dmp.report.entity.*;
 import com.persagy.dmp.report.enumeration.DateType;
 import com.persagy.dmp.report.repository.ReportConfigGroupRepository;
 import com.persagy.dmp.report.repository.ReportConfigRepository;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
@@ -18,6 +18,8 @@ import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * @author fengyanjie
@@ -79,13 +81,8 @@ public class ReportUtils {
             BaseEntity result = clazz.getDeclaredConstructor().newInstance();
             for (int i = 0; i < conlumnNameList.length; i++) {
                 String conlumnName = conlumnNameList[i];
-                String methodName = under2camel(conlumnName);
                 Object value = valueList[i];
-                Method method = BeanUtils.findMethod(clazz, "set" + methodName, value.getClass());
-                if (null == method) {
-                    throw new Exception("set" + methodName + " 方法不存在。");
-                }
-                method.invoke(result, value);
+                setValue(value, conlumnName, clazz, result);
             }
             resultList.add(result);
         } else {
@@ -94,13 +91,8 @@ public class ReportUtils {
                 BaseEntity result = (BaseEntity) constructor.newInstance(baseEntity);
                 for (int i = 0; i < conlumnNameList.length; i++) {
                     String conlumnName = conlumnNameList[i];
-                    String methodName = under2camel(conlumnName);
                     Object value = valueList[i];
-                    Method method = BeanUtils.findMethod(clazz, "set" + methodName, value.getClass());
-                    if (null == method) {
-                        throw new Exception("set" + methodName + " 方法不存在。");
-                    }
-                    method.invoke(result, value);
+                    setValue(value, conlumnName, clazz, result);
                 }
                 resultList.add(result);
             }
@@ -109,6 +101,50 @@ public class ReportUtils {
         initData(nextIndex, groupValueList, conlumnNameList, clazz, resultList, list);
     }
 
+    private void setValue(Object value, String conlumnName, Class clazz, BaseEntity result) throws Exception {
+        String val = value.toString();
+        if (conlumnName.equals("year")) {
+            Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
+            dateMethod.invoke(result, val);
+        } else if (conlumnName.equals("month")) {
+            Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
+            dateMethod.invoke(result, val);
+            dateMethod = BeanUtils.findMethod(clazz, "setYear", value.getClass());
+            dateMethod.invoke(result, val.substring(0, 4));
+            value = val.substring(4, 6);
+        } else if (conlumnName.equals("day")) {
+            Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
+            dateMethod.invoke(result, val);
+            dateMethod = BeanUtils.findMethod(clazz, "setYear", value.getClass());
+            dateMethod.invoke(result, val.substring(0, 4));
+            dateMethod = BeanUtils.findMethod(clazz, "setMonth", value.getClass());
+            dateMethod.invoke(result, val.substring(4, 6));
+            value = val.substring(6, 8);
+        } else if (conlumnName.equals("hour")) {
+            Method dateMethod = BeanUtils.findMethod(clazz, "setCreateTime", value.getClass());
+            dateMethod.invoke(result, val);
+            dateMethod = BeanUtils.findMethod(clazz, "setYear", value.getClass());
+            dateMethod.invoke(result, val.substring(0, 4));
+            dateMethod = BeanUtils.findMethod(clazz, "setMonth", value.getClass());
+            dateMethod.invoke(result, val.substring(4, 6));
+            dateMethod = BeanUtils.findMethod(clazz, "setDay", value.getClass());
+            dateMethod.invoke(result, val.substring(6, 8));
+            value = val.substring(8, 10);
+        }
+        String methodName = under2camel(conlumnName);
+        Method method = BeanUtils.findMethod(clazz, "set" + methodName, value.getClass());
+        if (null == method) {
+            throw new Exception("set" + methodName + " 方法不存在。");
+        }
+        method.invoke(result, value);
+    }
+
+    private String concat(TreeSet<String> set) {
+        StringBuilder buff = new StringBuilder();
+        set.forEach(str -> buff.append(str).append("|"));
+        return buff.toString();
+    }
+
     /**
      * 添加不重复的统计数据
      *
@@ -116,61 +152,88 @@ public class ReportUtils {
      * @param resultList        总维度统计数据
      * @param calculatedColumns 计算列
      */
-    public void addList(List<BaseEntity> list, List<BaseEntity> resultList, List<JacksonCriteria.Calculated> calculatedColumns) throws InvocationTargetException, IllegalAccessException {
-        for (BaseEntity entity : resultList) {
-            boolean isNotRepeat = true;
-            for (BaseEntity data : list) {
-                int equalsField = 0;
-                Field[] fields = data.getClass().getDeclaredFields();
-                for (Field field : fields) {
-                    boolean isContinue = false;
-                    String columnName = field.getName();
-                    for (JacksonCriteria.Calculated calculatedColumn : calculatedColumns) {
-                        if (calculatedColumn.getColumn().equals(columnName)) {
-                            isContinue = true;
-                            break;
+    public List<BaseEntity> addList(List<BaseEntity> list, List<BaseEntity> resultList, List<JacksonCriteria.Calculated> calculatedColumns) throws InvocationTargetException, IllegalAccessException {
+        log.info("begin time:{}  list.size:{} resultList.size:{} calculatedColumns.size:{}", DateUtils.format(new Date()), list.size(), resultList.size(), calculatedColumns.size());
+        String groupCode = DmpParameterStorage.getGroupCode();
+        String projectId = DmpParameterStorage.getProjectId();
+        Set<String> columnNameList = new HashSet<>();
+        calculatedColumns.forEach(item -> columnNameList.add(item.getColumn()));
+
+        Map<String, BaseEntity> maps = resultList.stream().collect(Collectors.toMap(entity -> {
+            TreeSet<String> treeSet = new TreeSet<>();
+            Field[] fields = entity.getClass().getDeclaredFields();
+            for (Field field : fields) {
+                String columnName = field.getName();
+                String methodName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
+                try {
+                    //处理计算字段
+                    if (columnNameList.contains(columnName)) {
+                        Method method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Integer.class);
+                        Object val = 0;
+                        if (null == method) {
+                            method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Double.class);
+                            val = 0.0D;
                         }
-                    }
-                    if (isContinue) {
+                        if (null == method) {
+                            method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Long.class);
+                            val = 0L;
+                        }
+                        method.invoke(entity, val);
                         continue;
                     }
-                    String methodName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
-                    Method dataMethod = BeanUtils.findMethod(data.getClass(), "get" + methodName);
-                    Method entityMethod = BeanUtils.findMethod(entity.getClass(), "get" + methodName);
-                    if (ObjectUtils.equals(dataMethod.invoke(data), entityMethod.invoke(entity))) {
-                        equalsField++;
+                    //拼接key
+                    Method method = null;
+                    Object value = null;
+                    if ("ProjectId".equals(methodName)) {
+                        method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, String.class);
+                        method.invoke(entity, projectId);
+                        value = projectId;
+                    } else if ("GroupCode".equals(methodName)) {
+                        method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, String.class);
+                        method.invoke(entity, groupCode);
+                        value = groupCode;
+                    } else {
+                        method = BeanUtils.findMethod(entity.getClass(), "get" + methodName);
+                        value = method.invoke(entity);
                     }
-                }
-                //跳过值相同的对象
-                if (equalsField == (fields.length - calculatedColumns.size())) {
-                    isNotRepeat = false;
-                    break;
+                    treeSet.add(columnName + "=" + value);
+                } catch (IllegalAccessException | InvocationTargetException e) {
+                    e.printStackTrace();
                 }
             }
-            if (isNotRepeat) {
-                for (JacksonCriteria.Calculated calculatedColumn : calculatedColumns) {
-                    String methodName = calculatedColumn.getColumn().substring(0, 1).toUpperCase() + calculatedColumn.getColumn().substring(1);
-                    Method method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Integer.class);
-                    Object val = 0;
-                    if (null == method) {
-                        method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Double.class);
-                        val = 0.0D;
-                    }
-                    if (null == method) {
-                        method = BeanUtils.findMethod(entity.getClass(), "set" + methodName, Long.class);
-                        val = 0L;
-                    }
-                    method.invoke(entity, val);
+            String key = concat(treeSet);
+            return key;
+        }, Function.identity()));
+
+        for (BaseEntity data : list) {
+            TreeSet<String> treeSet = new TreeSet<>();
+            Field[] fields = data.getClass().getDeclaredFields();
+            for (Field field : fields) {
+                String columnName = field.getName();
+                if (columnNameList.contains(columnName)) {
+                    continue;
                 }
-                list.add(entity);
+                String methodName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
+                Method dataMethod = BeanUtils.findMethod(data.getClass(), "get" + methodName);
+                Object invoke = dataMethod.invoke(data);
+                treeSet.add(columnName + "=" + invoke);
+            }
+            String key = concat(treeSet);
+            BaseEntity entity = maps.get(key);
+            if (null != entity) {
+                maps.put(key, data);
             }
         }
+
+        List<BaseEntity> result = new ArrayList<>(maps.values());
+        log.info("end time:{}  list.size:{} resultList.size:{} calculatedColumns.size:{}", DateUtils.format(new Date()), list.size(), resultList.size(), calculatedColumns.size());
+        return result;
     }
 
     /**
      * 获取所有的统计维度
      */
-    public List<ReportConfigGroup> getGroupList(List<Object> groupList) throws Exception {
+    public List<ReportConfigGroup> getGroupList(List<Object> groupList, DateType dateType, Date startTime, Date endTime) throws Exception {
         List<ReportConfigGroup> result = new ArrayList<>();
         List<String> conlumnNameList = new ArrayList<>();
         for (Object obj : groupList) {
@@ -201,10 +264,46 @@ public class ReportUtils {
             }
             result.add(reportConfigGroup);
         }
+        addDateType(result, dateType, startTime, endTime);
+        result.add(new ReportConfigGroup("date_type", Collections.singletonList(new Object[]{dateType})));
         return result;
     }
 
     /**
+     * 根据日期类型 返回时间范围内的所有日期
+     */
+    private void addDateType(List<ReportConfigGroup> groupList, DateType dateType, Date startTime, Date endTime) {
+        List<Object[]> year = new ArrayList<>();
+        List<Object[]> month = new ArrayList<>();
+        List<Object[]> day = new ArrayList<>();
+        List<Object[]> hour = new ArrayList<>();
+
+        if (DateType.YEAR == dateType) {
+            Set<String> yearList = getDateList(startTime, endTime, DateUtils.PATTERN_yyyy, Calendar.YEAR);
+            yearList.forEach(item -> year.add(new Object[]{item}));
+        }
+        if (DateType.MONTH == dateType) {
+            Set<String> monthList = getDateList(startTime, endTime, DateUtils.PATTERN_yyyyMM, Calendar.MONTH);
+            monthList.forEach(item -> month.add(new Object[]{item}));
+        }
+        if (DateType.DAY == dateType) {
+            Set<String> dayList = getDateList(startTime, endTime, DateUtils.PATTERN_yyyyMMdd, Calendar.DAY_OF_YEAR);
+            dayList.forEach(item -> day.add(new Object[]{item}));
+        }
+        if (DateType.HOUR == dateType) {
+            Set<String> hourList = getDateList(startTime, endTime, "yyyyMMddHH", Calendar.HOUR_OF_DAY);
+            hourList.forEach(item -> hour.add(new Object[]{item}));
+        }
+        if (DateType.SEASON == dateType) {
+            //TODO
+        }
+        groupList.add(new ReportConfigGroup("year", year));
+        groupList.add(new ReportConfigGroup("month", month));
+        groupList.add(new ReportConfigGroup("day", day));
+        groupList.add(new ReportConfigGroup("hour", hour));
+    }
+
+    /**
      * 查询报表配置信息
      */
     public ReportConfig queryReportConfig(String tableName) {
@@ -267,8 +366,8 @@ public class ReportUtils {
             end = DateUtils.format(endTime, DateUtils.PATTERN_yyyyMMdd);
         }
         if (DateType.HOUR == dateType) {
-            start = DateUtils.format(startTime, "yyyyMMddhh");
-            end = DateUtils.format(endTime, "yyyyMMddhh");
+            start = DateUtils.format(startTime, "yyyyMMddHH");
+            end = DateUtils.format(endTime, "yyyyMMddHH");
         }
         if (DateType.SEASON == dateType) {
             start = DateUtils.format(startTime, DateUtils.PATTERN_yyyyMM);
@@ -280,6 +379,28 @@ public class ReportUtils {
     }
 
     /**
+     * 获取两个日期之间的所有月份
+     *
+     * @param start 开始日期 yyyyMM
+     * @param end   结束日期 yyyyMM
+     * @return 月份集合 {“yyyyMM”}
+     */
+    private Set<String> getDateList(Date start, Date end, String pattern, Integer field) {
+        Set<String> result = new HashSet<>();
+        Calendar tempStart = Calendar.getInstance();
+        tempStart.setTime(start);
+        tempStart.add(field, 1);
+        Calendar tempEnd = Calendar.getInstance();
+        tempEnd.setTime(end);
+        result.add(DateUtils.format(start, pattern));
+        while (tempStart.before(tempEnd)) {
+            result.add(DateUtils.format(tempStart.getTime(), pattern));
+            tempStart.add(field, 1);
+        }
+        return result;
+    }
+
+    /**
      * 下划线命名转驼峰命名
      */
     public String under2camel(String s) {

+ 20 - 17
dmp-report/src/main/java/com/persagy/dmp/report/service/TestService.java

@@ -1,15 +1,15 @@
 package com.persagy.dmp.report.service;
 
-import com.persagy.dmp.report.entity.alarm.QAlarmItem;
-import com.persagy.dmp.report.entity.rwd.QClassDef;
-import com.querydsl.core.Tuple;
+import com.persagy.common.criteria.JpaUtils;
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author fengyanjie
@@ -19,34 +19,37 @@ import java.util.List;
 public class TestService {
 
     @Autowired
+    private JpaUtils jpaUtils;
+
+    @Autowired
     JPAQueryFactory queryFactory;
 
     public List<Object[]> itemCode() {
         List<Object[]> result = new ArrayList<>();
-        QAlarmItem qt = QAlarmItem.alarmItem;
-        List<String> fetch = queryFactory.selectDistinct(qt.code).from(qt).where(qt.valid.eq(1)).fetch();
-        fetch.forEach(item -> {
-            result.add(new String[]{item});
-        });
+        String sql = "select distinct code from dmp_alarm.alarm_item where valid = 1";
+        List<Map<String, Object>> list = jpaUtils.queryList(sql);
+        for (Map<String, Object> map : list) {
+            result.add(new String[]{MapUtils.getString(map, "code")});
+        }
         return result;
     }
 
     public List<Object[]> category() {
         List<Object[]> result = new ArrayList<>();
-        QAlarmItem qt = QAlarmItem.alarmItem;
-        List<String> fetch = queryFactory.selectDistinct(qt.category).from(qt).where(qt.valid.eq(1)).fetch();
-        fetch.forEach(item -> {
-            result.add(new String[]{item});
-        });
+        String sql = "select distinct category from dmp_alarm.alarm_item where valid = 1";
+        List<Map<String, Object>> list = jpaUtils.queryList(sql);
+        for (Map<String, Object> map : list) {
+            result.add(new String[]{MapUtils.getString(map, "category")});
+        }
         return result;
     }
 
     public List<Object[]> classCodeObjType() {
         List<Object[]> result = new ArrayList<>();
-        QClassDef qt = QClassDef.classDef;
-        List<Tuple> fetch = queryFactory.selectDistinct(qt.code, qt.objType).from(qt).fetch();
-        for (Tuple tuple : fetch) {
-            result.add(new String[]{tuple.get(qt.code), tuple.get(qt.objType).name()});
+        String sql = "select distinct code,obj_type from dmp_rwd.rwd_def_class";
+        List<Map<String, Object>> list = jpaUtils.queryList(sql);
+        for (Map<String, Object> map : list) {
+            result.add(new String[]{MapUtils.getString(map, "code"), MapUtils.getString(map, "obj_type")});
         }
         return result;
     }

+ 7 - 8
dmp-report/src/test/java/com/persagy/dmp.report/test.java

@@ -7,7 +7,6 @@ import com.persagy.dmp.report.common.json.JsonMapper;
 import com.persagy.dmp.report.entity.BaseEntity;
 import com.persagy.dmp.report.entity.ReportAlarmRecord;
 import com.persagy.dmp.report.entity.ReportConfigGroup;
-import com.persagy.dmp.report.entity.alarm.QAlarmItem;
 import com.persagy.dmp.report.enumeration.DateType;
 import com.persagy.dmp.report.service.DataExecutorService;
 import com.persagy.dmp.report.service.ReportUtils;
@@ -38,12 +37,12 @@ public class test {
     @Autowired
     ReportUtils reportUtils;
 
-    @Test
-    public void test1() {
-        QAlarmItem qt = QAlarmItem.alarmItem;
-        List<String> fetch = queryFactory.selectDistinct(qt.code).from(qt).where(qt.valid.eq(1)).fetch();
-        fetch.forEach(item -> System.out.println(item));
-    }
+//    @Test
+//    public void test1() {
+//        QAlarmItem qt = QAlarmItem.alarmItem;
+//        List<String> fetch = queryFactory.selectDistinct(qt.code).from(qt).where(qt.valid.eq(1)).fetch();
+//        fetch.forEach(item -> System.out.println(item));
+//    }
 
     @Test
     public void test2() throws Exception {
@@ -98,7 +97,7 @@ public class test {
         System.err.println(JacksonMapper.toFormatJson(reportConfigGroupList));
         List<BaseEntity> resultList = new ArrayList<>();
         reportUtils.initData(0, reportConfigGroupList, ReportAlarmRecord.class, resultList);
-        reportUtils.addList(list,resultList,calculatedColumns);
+        reportUtils.addList(list, resultList, calculatedColumns);
 
         System.err.println(JacksonMapper.toFormatJson(list));
     }