|
@@ -1,10 +1,17 @@
|
|
package com.persagy.dmp.report.service;
|
|
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.criteria.JpaUtils;
|
|
|
|
+import com.persagy.common.date.DateUtils;
|
|
|
|
+import com.persagy.common.web.PagedResponse;
|
|
import com.persagy.dmp.config.DmpParameterStorage;
|
|
import com.persagy.dmp.config.DmpParameterStorage;
|
|
import com.persagy.dmp.report.common.json.JsonMapper;
|
|
import com.persagy.dmp.report.common.json.JsonMapper;
|
|
import com.persagy.dmp.report.entity.*;
|
|
import com.persagy.dmp.report.entity.*;
|
|
import com.persagy.dmp.report.enumeration.DateType;
|
|
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.ReportAlarmRecordRepository;
|
|
import com.persagy.dmp.report.repository.ReportObjectRepository;
|
|
import com.persagy.dmp.report.repository.ReportObjectRepository;
|
|
import com.querydsl.core.types.dsl.BooleanExpression;
|
|
import com.querydsl.core.types.dsl.BooleanExpression;
|
|
@@ -18,6 +25,7 @@ import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author fengyanjie
|
|
* @author fengyanjie
|
|
@@ -35,44 +43,64 @@ public class DataExecutorService {
|
|
private ReportUtils reportUtils;
|
|
private ReportUtils reportUtils;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- private JpaUtils jpaUtils;
|
|
|
|
|
|
+ private RwdClient rwdClient;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private AlarmClient alarmClient;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private GroupColumnService groupColumnService;
|
|
|
|
+
|
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
public void reportRwdObject(DateType dateType, Date startTime, Date endTime) throws Exception {
|
|
public void reportRwdObject(DateType dateType, Date startTime, Date endTime) throws Exception {
|
|
|
|
+ String tableName = "rwd_object";
|
|
String groupCode = DmpParameterStorage.getGroupCode();
|
|
String groupCode = DmpParameterStorage.getGroupCode();
|
|
String projectId = DmpParameterStorage.getProjectId();
|
|
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<BaseEntity> data = new ArrayList<>();
|
|
- list.forEach(item -> {
|
|
|
|
|
|
+ objectMap.entrySet().forEach(item -> {
|
|
|
|
+ String[] keyArray = item.getKey().split("#");
|
|
ReportRwdObject reportRwdObject = new ReportRwdObject();
|
|
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);
|
|
data.add(reportRwdObject);
|
|
});
|
|
});
|
|
ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
|
|
ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
|
|
@@ -96,43 +124,54 @@ public class DataExecutorService {
|
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
public void reportAlarmRecord(DateType dateType, Date startTime, Date endTime) throws Exception {
|
|
public void reportAlarmRecord(DateType dateType, Date startTime, Date endTime) throws Exception {
|
|
|
|
+ String tableName = "alarm_record";
|
|
String groupCode = DmpParameterStorage.getGroupCode();
|
|
String groupCode = DmpParameterStorage.getGroupCode();
|
|
String projectId = DmpParameterStorage.getProjectId();
|
|
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<BaseEntity> data = new ArrayList<>();
|
|
- list.forEach(item -> {
|
|
|
|
|
|
+ alarmRecordMap.entrySet().forEach(item -> {
|
|
|
|
+ String[] keyArray = item.getKey().split("#");
|
|
ReportAlarmRecord reportAlarmRecord = new ReportAlarmRecord();
|
|
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);
|
|
data.add(reportAlarmRecord);
|
|
});
|
|
});
|
|
ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
|
|
ReportConfig reportConfig = reportUtils.queryReportConfig(tableName);
|
|
@@ -153,4 +192,46 @@ public class DataExecutorService {
|
|
result.forEach(item -> save.add((ReportAlarmRecord) item));
|
|
result.forEach(item -> save.add((ReportAlarmRecord) item));
|
|
reportAlarmRecordRepository.saveAll(save);
|
|
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
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|