fengyanjie@sagacloud.cn 4 rokov pred
rodič
commit
cf0a82364c

+ 24 - 0
dmp-report/src/main/java/com/persagy/dmp/report/feign/AlarmClient.java

@@ -0,0 +1,24 @@
+package com.persagy.dmp.report.feign;
+
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.report.model.AlarmRecordModel;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author: fengyanjie
+ * @date: 2020-11-25
+ * @verison: 1.0
+ */
+@FeignClient(name = "dmp-alarm")
+public interface AlarmClient {
+
+    @PostMapping("/alarm/record/query")
+    PagedResponse<AlarmRecordModel> query(@RequestParam(name = "projectId") String projectId,
+                                          @RequestParam(name = "groupCode") String groupCode,
+                                          @RequestParam(name = "userId") String userId,
+                                          @RequestBody JacksonCriteria criteria);
+}

+ 27 - 0
dmp-report/src/main/java/com/persagy/dmp/report/feign/RwdClient.java

@@ -0,0 +1,27 @@
+package com.persagy.dmp.report.feign;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.JacksonCriteria;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.rwd.model.ClassDefModel;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author: fengyanjie
+ * @date: 2020-11-25
+ * @verison: 1.0
+ */
+@FeignClient(name = "dmp-rwd")
+public interface RwdClient {
+
+    @PostMapping("/rwd/instance/object/query")
+    PagedResponse<ObjectNode> queryObject(@RequestParam(name = "projectId") String projectId,
+                                          @RequestParam(name = "groupCode") String groupCode,
+                                          @RequestBody JacksonCriteria criteria);
+
+    @PostMapping("/rwd/def/class/query")
+    PagedResponse<ClassDefModel> queryClass(@RequestParam(name = "groupCode") String groupCode, @RequestBody JacksonCriteria criteria);
+}

+ 62 - 0
dmp-report/src/main/java/com/persagy/dmp/report/model/AlarmRecordModel.java

@@ -0,0 +1,62 @@
+package com.persagy.dmp.report.model;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Setter
+@Getter
+public class AlarmRecordModel {
+
+	private String id;
+	private String itemCode;
+	private String projectId;
+	private String objId;
+	private String classCode;
+	private String level;
+	private String remark;
+	private String name;
+	private String category;
+	private Integer concern;
+	private Integer state;
+	private Date effectStartTime;
+	private Date effectEndTime;
+	/**
+	 * 报警性质
+	 */
+	private Integer nature;
+	/**
+	 * 处理方式
+	 */
+	private Integer treatMode;
+	/**
+	 * 处理状态
+	 */
+	private Integer treatState;
+	private String createUser;
+	private ObjectNode condition;
+	private ObjectNode triggerInfo;
+	private Date triggerTime;
+	private ObjectNode endInfo;
+	private Date endTime;
+	private Date createTime;
+	private String updateUser;
+	private Date updateTime;
+	private Integer valid;
+	private String groupCode;
+	private String orderId;
+	private String orderState;
+	private ObjectNode supplement;
+
+	/**
+	 * 忽略报警时间
+	 */
+	private Date ignoreTime;
+	/**
+	 * 报警处理完成时间
+	 */
+	private Date treatEndTime;
+
+}

+ 145 - 64
dmp-report/src/main/java/com/persagy/dmp/report/service/DataExecutorService.java

@@ -1,10 +1,17 @@
 package com.persagy.dmp.report.service;
 
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.common.criteria.JpaUtils;
+import com.persagy.common.date.DateUtils;
+import com.persagy.common.web.PagedResponse;
 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;
+import com.persagy.dmp.report.feign.AlarmClient;
+import com.persagy.dmp.report.feign.RwdClient;
+import com.persagy.dmp.report.model.AlarmRecordModel;
 import com.persagy.dmp.report.repository.ReportAlarmRecordRepository;
 import com.persagy.dmp.report.repository.ReportObjectRepository;
 import com.querydsl.core.types.dsl.BooleanExpression;
@@ -18,6 +25,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author fengyanjie
@@ -35,44 +43,64 @@ public class DataExecutorService {
     private ReportUtils reportUtils;
 
     @Autowired
-    private JpaUtils jpaUtils;
+    private RwdClient rwdClient;
+
+    @Autowired
+    private AlarmClient alarmClient;
+
+    @Autowired
+    private GroupColumnService groupColumnService;
+
 
     @Transactional
     public void reportRwdObject(DateType dateType, Date startTime, Date endTime) throws Exception {
+        String tableName = "rwd_object";
         String groupCode = DmpParameterStorage.getGroupCode();
         String projectId = DmpParameterStorage.getProjectId();
-        String tableName = "rwd_object";
-        String sql = "";
-        StringBuilder sqlBuilder = new StringBuilder();
-        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 dmp_rwd." + tableName + "_" + groupCode.toLowerCase() + "_" + projectId.toLowerCase() + "          \n");
-        sqlBuilder.append("        where create_time >= ? and create_time < ?          \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, projectId, groupCode);
+        List<Object[]> classCodeObjType = groupColumnService.classCodeObjType();
+        if (null == classCodeObjType) {
+            return;
+        }
+        List<ObjectNode> objectList = new ArrayList<>();
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("createTime").gte(startTime).lt(endTime);
+        criteria.add("valid", 1);
+        for (Object[] item : classCodeObjType) {
+            criteria.add("classCode", item[0].toString());
+            criteria.add("objType", item[1].toString());
+            PagedResponse<ObjectNode> objectResponse = rwdClient.queryObject(projectId, groupCode, criteria);
+            objectList.addAll(objectResponse.getData());
+        }
+        //projectId#groupCode#objType#classCode#dateType#year#month#day#hour#season#date
+        Map<String, Long> objectMap = objectList.stream().collect(
+                Collectors.groupingBy(item -> {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append(JsonMapper.getString(item, "projectId")).append("#");
+                    sb.append(groupCode).append("#");
+                    sb.append(JsonMapper.getString(item, "objType")).append("#");
+                    sb.append(JsonMapper.getString(item, "classCode")).append("#");
+                    sb.append(dateType).append("#");
+                    Date createTime = new Date(Long.parseLong(JsonMapper.getString(item, "createTime")));
+                    appendDate(sb, dateType, createTime);
+                    return sb.toString();
+                }, Collectors.counting()));
+
         List<BaseEntity> data = new ArrayList<>();
-        list.forEach(item -> {
+        objectMap.entrySet().forEach(item -> {
+            String[] keyArray = item.getKey().split("#");
             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"));
-            reportRwdObject.setCreateTime(MapUtils.getString(item, "date"));
-            reportRwdObject.setRwdObjectNum(MapUtils.getLong(item, "rwd_object_num"));
-            reportRwdObject.setDateType(DateType.valueOf(MapUtils.getString(item, "date_type")));
+            reportRwdObject.setProjectId(keyArray[0]);
+            reportRwdObject.setGroupCode(keyArray[1]);
+            reportRwdObject.setObjType(keyArray[2]);
+            reportRwdObject.setClassCode(keyArray[3]);
+            reportRwdObject.setDateType(DateType.valueOf(keyArray[4]));
+            reportRwdObject.setYear("".equals(keyArray[5]) ? null : keyArray[5]);
+            reportRwdObject.setMonth("".equals(keyArray[6]) ? null : keyArray[6]);
+            reportRwdObject.setDay("".equals(keyArray[7]) ? null : keyArray[7]);
+            reportRwdObject.setHour("".equals(keyArray[8]) ? null : keyArray[8]);
+            reportRwdObject.setSeason("".equals(keyArray[9]) ? null : keyArray[9]);
+            reportRwdObject.setCreateTime("".equals(keyArray[10]) ? null : keyArray[10]);
+            reportRwdObject.setRwdObjectNum(item.getValue());
             data.add(reportRwdObject);
         });
         ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
@@ -96,43 +124,54 @@ public class DataExecutorService {
 
     @Transactional
     public void reportAlarmRecord(DateType dateType, Date startTime, Date endTime) throws Exception {
+        String tableName = "alarm_record";
         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,group_code,category,class_code,level,state,'" + dateType + "' as date_type,          \n");
-        reportUtils.appendSql(sqlBuilder, dateType);
-        sqlBuilder.append("        count(0) alarm_record_num from dmp_alarm." + tableName + "           \n");
-        sqlBuilder.append("        where create_time >= ? and create_time < ?          \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, projectId, groupCode);
+        JacksonCriteria criteria = JacksonCriteria.newInstance();
+        criteria.add("createTime").gte(startTime).lt(endTime);
+        criteria.add("valid", 1);
+        PagedResponse<AlarmRecordModel> alarmRecordResponse = alarmClient.query(projectId, groupCode, "system", criteria);
+
+        if (!alarmRecordResponse.success()) {
+            return;
+        }
+        List<AlarmRecordModel> alarmRecordList = alarmRecordResponse.getData();
+
+        //projectId#groupCode#itemCode#category#classCode#level#state#dateType#year#month#day#hour#season#date
+        Map<String, Long> alarmRecordMap = alarmRecordList.stream().collect(
+                Collectors.groupingBy(item -> {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append(item.getProjectId()).append("#");
+                    sb.append(groupCode).append("#");
+                    sb.append(item.getItemCode()).append("#");
+                    sb.append(item.getCategory()).append("#");
+                    sb.append(item.getClassCode()).append("#");
+                    sb.append(item.getLevel()).append("#");
+                    sb.append(item.getState()).append("#");
+                    sb.append(dateType).append("#");
+                    Date createTime = item.getCreateTime();
+                    appendDate(sb, dateType, createTime);
+                    return sb.toString();
+                }, Collectors.counting()));
         List<BaseEntity> data = new ArrayList<>();
-        list.forEach(item -> {
+        alarmRecordMap.entrySet().forEach(item -> {
+            String[] keyArray = item.getKey().split("#");
             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"));
-            reportAlarmRecord.setCreateTime(MapUtils.getString(item, "date"));
-            reportAlarmRecord.setAlarmRecordNum(MapUtils.getLong(item, "alarm_record_num"));
-            reportAlarmRecord.setDateType(DateType.valueOf(MapUtils.getString(item, "date_type")));
+            reportAlarmRecord.setProjectId(keyArray[0]);
+            reportAlarmRecord.setGroupCode(keyArray[1]);
+            reportAlarmRecord.setItemCode(keyArray[2]);
+            reportAlarmRecord.setCategory(keyArray[3]);
+            reportAlarmRecord.setClassCode(keyArray[4]);
+            reportAlarmRecord.setLevel(keyArray[5]);
+            reportAlarmRecord.setAlarmState(keyArray[6]);
+            reportAlarmRecord.setDateType(DateType.valueOf(keyArray[4]));
+            reportAlarmRecord.setYear("".equals(keyArray[5]) ? null : keyArray[5]);
+            reportAlarmRecord.setMonth("".equals(keyArray[6]) ? null : keyArray[6]);
+            reportAlarmRecord.setDay("".equals(keyArray[7]) ? null : keyArray[7]);
+            reportAlarmRecord.setHour("".equals(keyArray[8]) ? null : keyArray[8]);
+            reportAlarmRecord.setSeason("".equals(keyArray[9]) ? null : keyArray[9]);
+            reportAlarmRecord.setCreateTime("".equals(keyArray[10]) ? null : keyArray[10]);
+            reportAlarmRecord.setAlarmRecordNum(item.getValue());
             data.add(reportAlarmRecord);
         });
         ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
@@ -153,4 +192,46 @@ public class DataExecutorService {
         result.forEach(item -> save.add((ReportAlarmRecord) item));
         reportAlarmRecordRepository.saveAll(save);
     }
+
+    private void appendDate(StringBuilder sb, DateType dateType, Date createTime) {
+        String year = DateUtils.format(createTime, DateUtils.PATTERN_yyyy);
+        String month = DateUtils.format(createTime, DateUtils.PATTERN_MM);
+        String day = DateUtils.format(createTime, "dd");
+        String hour = DateUtils.format(createTime, "HH");
+        if (DateType.YEAR == dateType) {
+            sb.append(year).append("#");//year
+            sb.append("#");//month
+            sb.append("#");//day
+            sb.append("#");//hour
+            sb.append("#");//season
+            sb.append(year);//date
+        }
+        if (DateType.MONTH == dateType) {
+            sb.append(year).append("#");//year
+            sb.append(month).append("#");//month
+            sb.append("#");//day
+            sb.append("#");//hour
+            sb.append("#");//season
+            sb.append(year + month).append("#");//date
+        }
+        if (DateType.DAY == dateType) {
+            sb.append(year).append("#");//year
+            sb.append(month).append("#");//month
+            sb.append(day).append("#");//day
+            sb.append("#");//hour
+            sb.append("#");//season
+            sb.append(year + month + day);//date
+        }
+        if (DateType.HOUR == dateType) {
+            sb.append(year).append("#");//year
+            sb.append(month).append("#");//month
+            sb.append(day).append("#");//day
+            sb.append(hour).append("#");//hour
+            sb.append("#");//season
+            sb.append(year + month + day + hour);//date
+        }
+        if (DateType.SEASON == dateType) {
+            //TODO
+        }
+    }
 }

+ 19 - 8
dmp-report/src/main/java/com/persagy/dmp/report/service/TestService.java

@@ -1,22 +1,25 @@
 package com.persagy.dmp.report.service;
 
+import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.common.criteria.JpaUtils;
+import com.persagy.common.web.PagedResponse;
+import com.persagy.dmp.report.feign.RwdClient;
+import com.persagy.dmp.rwd.model.ClassDefModel;
 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;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author fengyanjie
  */
 @Slf4j
 @Service
-public class TestService {
+public class GroupColumnService {
 
     @Autowired
     private JpaUtils jpaUtils;
@@ -24,6 +27,9 @@ public class TestService {
     @Autowired
     JPAQueryFactory queryFactory;
 
+    @Autowired
+    private RwdClient rwdClient;
+
     public List<Object[]> itemCode() {
         List<Object[]> result = new ArrayList<>();
         String sql = "select distinct code from dmp_alarm.alarm_item where valid = 1";
@@ -45,11 +51,16 @@ public class TestService {
     }
 
     public List<Object[]> classCodeObjType() {
+        PagedResponse<ClassDefModel> classResponse = rwdClient.queryClass(null, JacksonCriteria.newInstance());
+        if (!classResponse.success()) {
+            return null;
+        }
+        List<ClassDefModel> data = classResponse.getData();
+        List<ClassDefModel> list = data.stream().collect(Collectors.collectingAndThen(
+                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(item -> item.getCode() + "#" + item.getObjType()))), ArrayList::new));
         List<Object[]> result = new ArrayList<>();
-        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")});
+        for (ClassDefModel model : list) {
+            result.add(new String[]{model.getCode(), model.getObjType().name()});
         }
         return result;
     }