Эх сурвалжийг харах

修改opcda自动报表报表数据生成策略,优化自动报表统计图数据生成策略

zhoupeng 1 жил өмнө
parent
commit
d3e8326e0e

+ 2 - 2
cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/entity/DataModel.java

@@ -93,13 +93,13 @@ public class DataModel implements Serializable {
     public static String valueReplace(DataModel dataModel, String value) {
         String operationRule1 = dataModel.getOperationRule();
         if (Blank.isNotEmpty(operationRule1)) {
-            if (operationRule1.equals(value)) {
+            if (operationRule1.toLowerCase().equals(value.toLowerCase())) {
                 return dataModel.getReplacingValue();
             }
         }
         String operationRuleTwo1 = dataModel.getOperationRuleTwo();
         if (Blank.isNotEmpty(operationRuleTwo1)) {
-            if (operationRuleTwo1.equals(value)) {
+            if (operationRuleTwo1.toLowerCase().equals(value.toLowerCase())) {
                 return dataModel.getReplacingValueTwo();
             }
         }

+ 4 - 0
cqcy-ei/cqcy-ei-common/src/main/java/com/example/opc_common/entity/TableTemplateChartItem.java

@@ -28,6 +28,10 @@ public class TableTemplateChartItem implements Serializable {
      */
     private String itemName;
     /**
+     * 虚拟字段,用于返回数据。项名称
+     */
+    private String itemReadName;
+    /**
      * 虚拟字段,用于返回数据。数据源配置id
      */
     private Integer dataSourceId;

+ 12 - 4
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/RawDataDao.java

@@ -49,8 +49,6 @@ public interface RawDataDao {
 
     List<String> getCursorYmdh(Integer itemGroupId, Integer dataSourceId, String itemName, String startBelongTime, String endBelongTime);
 
-    List<CursorRawData> getCursorYmdhGroup(Integer itemGroupId, Integer dataSourceId, List<TableTemplateTableItem> tableTemplateItemList, String startBelongTime, String endBelongTime);
-
     AttachRawData getAttachRawData(Integer itemGroupId, Integer dataSourceId, String itemName);
 
     Integer addAttachRawData(AttachRawData attachRawData);
@@ -67,8 +65,18 @@ public interface RawDataDao {
 
     List<RawData> getTableDataGroupByDay(Integer itemGroupId, Integer remainder, Integer dataSourceId, List<TableTemplateTableItem> tableTemplateItemList, String startBelongTime, String endBelongTime);
 
+    List<RawData> getTableChartDataGroupByDay(Integer itemGroupId, Integer remainder, Integer dataSourceId, List<TableTemplateChartItem> tableTemplateChartItemList, String startBelongTime, String endBelongTime);
+
+    List<CursorRawData> getTableCursorDataGroupByDay(Integer itemGroupId, Integer dataSourceId, List<TableTemplateTableItem> tableTemplateItemList, String startBelongTime, String endBelongTime);
+
+    List<CursorRawData> getTableChartCursorDataGroupByDay(Integer itemGroupId, Integer dataSourceId, List<TableTemplateChartItem> tableTemplateChartItemList, String startBelongTime, String endBelongTime);
+
     List<RawData> getTableDataGroup(Integer itemGroupId, Integer remainder, Integer dataSourceId, List<TableTemplateTableItem> tableTemplateItemList, String startBelongTime, String endBelongTime);
 
-    List<CursorRawData> getTableCursorDataGroup(Integer itemGroupId, Integer dataSourceId, List<TableTemplateTableItem> tableTemplateItemList);
+    List<RawData> getTableChartDataGroup(Integer itemGroupId, Integer remainder, Integer dataSourceId, List<TableTemplateChartItem> tableTemplateChartItemList, String startBelongTime, String endBelongTime);
+
+    List<CursorRawData> getTableCursorDataGroup(Integer itemGroupId, Integer dataSourceId, List<TableTemplateTableItem> tableTemplateItemList, String startBelongTime, String endBelongTime);
+
+    List<CursorRawData> getTableChartCursorDataGroup(Integer itemGroupId, Integer dataSourceId, List<TableTemplateChartItem> tableTemplateChartItemList, String startBelongTime, String endBelongTime);
 
-}
+    }

+ 227 - 174
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTableTask.java

@@ -796,88 +796,80 @@ public class ReportTableTask {
                 List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByGroup(tableTemplateId, itemGroupId, dataSourceId, bucketType);
                 List<RawData> rawDataList = new ArrayList<>();
                 List<CursorRawData> cursorRawDataList = new ArrayList<>();
-                List<CursorRawData> sqlCurrentYmdhList = new ArrayList<>();
                 //获取所有数据项的数据
                 if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
                         || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
                     String startBelongTime;
                     String endBelongTime;
 
-                    //从历史表中,查出历史数据
+                    //从历史表中,查出历史数据;从临时表中,查出所有临时数据
                     if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
                         startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
                         endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-//                        rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
                         rawDataList = rawDataDao.getTableDataGroupByDay(itemGroupId, remainder, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                        cursorRawDataList = rawDataDao.getTableCursorDataGroupByDay(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
                     } else {
                         startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
                         endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-//                        rawDataList = rawDataDao.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
                         rawDataList = rawDataDao.getTableDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                        cursorRawDataList = rawDataDao.getTableCursorDataGroup(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
                     }
-                    //从临时表中,查出所有临时数据
-                    cursorRawDataList = rawDataDao.getTableCursorDataGroup(itemGroupId, dataSourceId, tableTemplateItemList);
-                    //查询出所有数据时间归属
-                    sqlCurrentYmdhList = rawDataDao.getCursorYmdhGroup(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
                 } else {
                     throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
                 }
 
-                List<RawData> finalRawDataList = rawDataList;
-                List<CursorRawData> finalCursorRawDataList = cursorRawDataList;
-                List<CursorRawData> finalSqlCurrentYmdhList = sqlCurrentYmdhList;
-                tableTemplateItemList.forEach(t -> {
+                for (TableTemplateTableItem t : tableTemplateItemList) {
                     //循环得到每个数据项的历史数据和临时数据,归属时间
                     Integer itemGroupId1 = t.getItemGroupId();
                     Integer dataSourceId1 = t.getDataSourceId();
                     String itemReadName = t.getItemReadName();
                     List<RawData> currentRawDataList = new ArrayList<>();
                     List<CursorRawData> currentCursorRawDataList = new ArrayList<>();
-                    List<String> currentSqlYmdhList = new ArrayList<>();
-                    finalRawDataList.forEach(rawData -> {
+                    for (int i = 0; i < rawDataList.size(); i++) {
+                        RawData rawData = rawDataList.get(i);
                         //生成历史数据
                         if (rawData.getItemGroupId().equals(itemGroupId1)
                                 && rawData.getDataSourceId().equals(dataSourceId1)
                                 && rawData.getItemName().equals(itemReadName)) {
                             currentRawDataList.add(rawData);
+                            rawDataList.remove(i);
+                            i--;
                         }
-                    });
-                    finalCursorRawDataList.forEach(currentRawData -> {
+                    }
+                    for (int i = 0; i < cursorRawDataList.size(); i++) {
+                        CursorRawData cursorRawData = cursorRawDataList.get(i);
                         //生成临时数据
-                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
-                                && currentRawData.getDataSourceId().equals(dataSourceId1)
-                                && currentRawData.getItemName().equals(itemReadName)) {
-                            currentCursorRawDataList.add(currentRawData);
+                        if (cursorRawData.getItemGroupId().equals(itemGroupId1)
+                                && cursorRawData.getDataSourceId().equals(dataSourceId1)
+                                && cursorRawData.getItemName().equals(itemReadName)) {
+                            currentCursorRawDataList.add(cursorRawData);
+                            cursorRawDataList.remove(i);
+                            i--;
                         }
-                    });
-                    finalSqlCurrentYmdhList.forEach(currentRawData -> {
-                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
-                                && currentRawData.getDataSourceId().equals(dataSourceId1)
-                                && currentRawData.getItemName().equals(itemReadName)) {
-                            currentSqlYmdhList.add(currentRawData.getValueBelongTime());
+                    }
+                    //将所有数据组合成一个List<CursorRawData>
+                    currentCursorRawDataList.addAll(ReportTask.genRawChangeCursor(currentRawDataList));
+                    //对currentCursorRawDataList进行排序,使用dataValueTime排序
+                    Collections.sort(currentCursorRawDataList, new Comparator<CursorRawData>() {
+                        @Override
+                        public int compare(CursorRawData o1, CursorRawData o2) {
+                            return o1.getDataValueTime().compareTo(o2.getDataValueTime());
                         }
                     });
-                    //根据历史数据和临时数据,计算出此数据项在报表中应该展示的数据,map形式返回
-//                    Map<String, String> map = ReportTask.genAutoData(currentRawDataList, currentCursorRawDataList,
-//                            startTime, endTime, t.getValueTakingMode(), t.getBucketType(), t.getBucketValue());
-                    List<RawData> currentRawDataList1 = new ArrayList<>();
-                    if (Blank.isNotEmpty(currentSqlYmdhList)) {
-                        for (String sqlCurrentYmdh : currentSqlYmdhList) {
-                            currentRawDataList1 = ReportTask.genRawAddCursor(currentRawDataList, currentCursorRawDataList, itemGroupId, dataSourceId, sqlCurrentYmdh);
-                        }
-                    }
+
+                    //计算出数据项的值集合
                     Map<String, String> map = new HashMap<>();
                     Integer valueTakingMode = t.getValueTakingMode();
                     Integer bucketValue = t.getBucketValue();
-                    if (Blank.isNotEmpty(currentRawDataList1)) {
-                        String dataType = currentRawDataList1.get(0).getDataType();
+                    if (Blank.isNotEmpty(currentCursorRawDataList)) {
+                        String dataType = currentCursorRawDataList.get(0).getDataType();
                         if (dataType.equals("boolean")) {
-                            map = ReportTask.genBoolean(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                            map = ReportTask.genBoolean(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                         } else {
                             try {
-                                map = ReportTask.genBigDecimal(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                map = ReportTask.genBigDecimal(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                             } catch (Exception e) {
-                                map = ReportTask.genString(currentRawDataList1, startTime, endTime, bucketType, bucketValue);
+                                map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
                             }
                         }
                     }
@@ -894,7 +886,7 @@ public class ReportTableTask {
                     reportTableItemList.add(new ReportTableItem(
                             reportTableId, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
                     ));
-                });
+                }
             }
         }
 
@@ -909,67 +901,103 @@ public class ReportTableTask {
                 //查询相关联的模板统计图,以及统计图的数据项相关信息
                 Integer reportChartId = reportChart.getId();
                 Integer templateChartId = reportChart.getTemplateChartId();
+                //获取报表统计图的模板统计图
                 TableTemplateChart tableTemplateChart = reportTableDao.getTtcById(templateChartId);
                 Integer valueTakingMode = tableTemplateChart.getValueTakingMode();
                 Integer valueType = tableTemplateChart.getValueType();
                 Integer bucketType = tableTemplateChart.getBucketType();
                 Integer bucketValue = tableTemplateChart.getBucketValue();
                 boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                List<TableTemplateChartItem> tableTemplateChartItems = tableTemplateChart.getTableTemplateChartItemList();
+                //获取单个统计图的数据项信息,因为每个统计图的数据项配置一样,所以一起查询出来
+                List<TableTemplateChartItem> tableTemplateChartItemList = tableTemplateChart.getTableTemplateChartItemList();
                 List<ReportChartItem> reportChartItemList = new ArrayList<>();
-                if (Blank.isNotEmpty(tableTemplateChartItems)) {
-                    for (TableTemplateChartItem ttci : tableTemplateChartItems) {
-                        Integer itemGroupId = ttci.getItemGroupId();
-                        if (Blank.isEmpty(itemGroupId)) {
-                            continue;
+                if (Blank.isNotEmpty(tableTemplateChartItemList)) {
+                    TableTemplateChartItem tableTemplateChartItem = tableTemplateChartItemList.get(0);
+                    Integer itemGroupId = tableTemplateChartItem.getItemGroupId();
+                    Integer dataSourceId = tableTemplateChartItem.getDataSourceId();
+                    Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+                    List<RawData> rawDataList = new ArrayList<>();
+                    List<CursorRawData> cursorRawDataList = new ArrayList<>();
+                    if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
+                            || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
+                        String startBelongTime;
+                        String endBelongTime;
+
+                        //从历史表中,查出历史数据;从临时表中,查出所有临时数据
+                        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
+                            startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                            endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                            rawDataList = rawDataDao.getTableChartDataGroupByDay(itemGroupId, remainder, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                            cursorRawDataList = rawDataDao.getTableChartCursorDataGroupByDay(itemGroupId, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                        } else {
+                            startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                            endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                            rawDataList = rawDataDao.getTableChartDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                            cursorRawDataList = rawDataDao.getTableChartCursorDataGroup(itemGroupId, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
                         }
-                        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
-                        Integer itemId = ttci.getItemId();
-                        String itemName = ttci.getItemName();
-                        Integer dataSourceId = ttci.getDataSourceId();
-                        Map<String, String> map = new HashMap<>();
-                        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
-                                || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-                            String startBelongTime;
-                            String endBelongTime;
-                            List<RawData> rawDataList = new ArrayList<>();
-                            if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-                                startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-                                endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-                                rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
-                            } else {
-                                startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-                                endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-                                rawDataList = rawDataDao.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
+
+                        for (TableTemplateChartItem t : tableTemplateChartItemList) {
+                            Integer itemGroupId1 = t.getItemGroupId();
+                            Integer dataSourceId1 = t.getDataSourceId();
+                            Integer itemId = t.getItemId();
+                            String itemReadName = t.getItemReadName();
+                            List<RawData> currentRawDataList = new ArrayList<>();
+                            List<CursorRawData> currentCursorRawDataList = new ArrayList<>();
+                            for (int i = 0; i < rawDataList.size(); i++) {
+                                RawData rawData = rawDataList.get(i);
+                                //生成历史数据
+                                if (rawData.getItemGroupId().equals(itemGroupId1)
+                                        && rawData.getDataSourceId().equals(dataSourceId1)
+                                        && rawData.getItemName().equals(itemReadName)) {
+                                    currentRawDataList.add(rawData);
+                                    rawDataList.remove(i);
+                                    i--;
+                                }
                             }
-                            List<String> sqlCurrentYmdhList = rawDataDao.getCursorYmdh(itemGroupId, dataSourceId, itemName, startBelongTime, endBelongTime);
-                            if (Blank.isNotEmpty(sqlCurrentYmdhList)) {
-                                for (String sqlCurrentYmdh : sqlCurrentYmdhList) {
-                                    List<CursorRawData> cursorRawDataList = rawDataDao.getTableCursorData(itemGroupId, dataSourceId, itemName, sqlCurrentYmdh);
-                                    rawDataList = ReportTask.genRawAddCursor(rawDataList, cursorRawDataList, itemGroupId, dataSourceId, sqlCurrentYmdh);
+                            for (int i = 0; i < cursorRawDataList.size(); i++) {
+                                CursorRawData cursorRawData = cursorRawDataList.get(i);
+                                //生成临时数据
+                                if (cursorRawData.getItemGroupId().equals(itemGroupId1)
+                                        && cursorRawData.getDataSourceId().equals(dataSourceId1)
+                                        && cursorRawData.getItemName().equals(itemReadName)) {
+                                    currentCursorRawDataList.add(cursorRawData);
+                                    cursorRawDataList.remove(i);
+                                    i--;
                                 }
                             }
-                            if (Blank.isNotEmpty(rawDataList)) {
-                                String dataType = rawDataList.get(0).getDataType();
+                            //将所有数据组合成一个List<CursorRawData>
+                            currentCursorRawDataList.addAll(ReportTask.genRawChangeCursor(currentRawDataList));
+                            //对currentCursorRawDataList进行排序,使用dataValueTime排序
+                            Collections.sort(currentCursorRawDataList, new Comparator<CursorRawData>() {
+                                @Override
+                                public int compare(CursorRawData o1, CursorRawData o2) {
+                                    return o1.getDataValueTime().compareTo(o2.getDataValueTime());
+                                }
+                            });
+
+                            //计算出数据项的值集合
+                            Map<String, String> map = new HashMap<>();
+                            if (Blank.isNotEmpty(currentCursorRawDataList)) {
+                                String dataType = currentCursorRawDataList.get(0).getDataType();
                                 if (dataType.equals("boolean")) {
-                                    map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                    map = ReportTask.genBoolean(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                                 } else {
                                     try {
-                                        map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                        map = ReportTask.genBigDecimal(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                                     } catch (Exception e) {
-                                        map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
+                                        map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
                                     }
                                 }
                             }
-                        } else {
-                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
+                            String valueList = map.get(flage ? "valueList" : "orgValueList");
+                            String valueTimeList = map.get("valueTimeList");
+                            String valueIndexList = map.get("valueIndexList");
+                            reportChartItemList.add(new ReportChartItem(
+                                    reportChartId, itemId, valueList, valueTimeList, valueIndexList
+                            ));
                         }
-                        String valueList = map.get(flage ? "valueList" : "orgValueList");
-                        String valueTimeList = map.get("valueTimeList");
-                        String valueIndexList = map.get("valueIndexList");
-                        reportChartItemList.add(new ReportChartItem(
-                                reportChartId, itemId, valueList, valueTimeList, valueIndexList
-                        ));
+                    } else {
+                        throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
                     }
                 }
                 reportChart.setReportChartItemList(reportChartItemList);
@@ -1080,88 +1108,80 @@ public class ReportTableTask {
                 List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByGroup(tableTemplateId, itemGroupId, dataSourceId, bucketType);
                 List<RawData> rawDataList = new ArrayList<>();
                 List<CursorRawData> cursorRawDataList = new ArrayList<>();
-                List<CursorRawData> sqlCurrentYmdhList = new ArrayList<>();
                 //获取所有数据项的数据
                 if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
                         || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
                     String startBelongTime;
                     String endBelongTime;
 
-                    //从历史表中,查出历史数据
+                    //从历史表中,查出历史数据;从临时表中,查出所有临时数据
                     if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
                         startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
                         endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-//                        rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
                         rawDataList = rawDataDao.getTableDataGroupByDay(itemGroupId, remainder, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                        cursorRawDataList = rawDataDao.getTableCursorDataGroupByDay(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
                     } else {
                         startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
                         endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-//                        rawDataList = rawDataDao.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
                         rawDataList = rawDataDao.getTableDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                        cursorRawDataList = rawDataDao.getTableCursorDataGroup(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
                     }
-                    //从临时表中,查出所有临时数据
-                    cursorRawDataList = rawDataDao.getTableCursorDataGroup(itemGroupId, dataSourceId, tableTemplateItemList);
-                    //查询出所有数据时间归属
-                    sqlCurrentYmdhList = rawDataDao.getCursorYmdhGroup(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
                 } else {
                     throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
                 }
 
-                List<RawData> finalRawDataList = rawDataList;
-                List<CursorRawData> finalCursorRawDataList = cursorRawDataList;
-                List<CursorRawData> finalSqlCurrentYmdhList = sqlCurrentYmdhList;
-                tableTemplateItemList.forEach(t -> {
+                for (TableTemplateTableItem t : tableTemplateItemList) {
                     //循环得到每个数据项的历史数据和临时数据,归属时间
                     Integer itemGroupId1 = t.getItemGroupId();
                     Integer dataSourceId1 = t.getDataSourceId();
                     String itemReadName = t.getItemReadName();
                     List<RawData> currentRawDataList = new ArrayList<>();
                     List<CursorRawData> currentCursorRawDataList = new ArrayList<>();
-                    List<String> currentSqlYmdhList = new ArrayList<>();
-                    finalRawDataList.forEach(rawData -> {
+                    for (int i = 0; i < rawDataList.size(); i++) {
+                        RawData rawData = rawDataList.get(i);
                         //生成历史数据
                         if (rawData.getItemGroupId().equals(itemGroupId1)
                                 && rawData.getDataSourceId().equals(dataSourceId1)
                                 && rawData.getItemName().equals(itemReadName)) {
                             currentRawDataList.add(rawData);
+                            rawDataList.remove(i);
+                            i--;
                         }
-                    });
-                    finalCursorRawDataList.forEach(currentRawData -> {
+                    }
+                    for (int i = 0; i < cursorRawDataList.size(); i++) {
+                        CursorRawData cursorRawData = cursorRawDataList.get(i);
                         //生成临时数据
-                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
-                                && currentRawData.getDataSourceId().equals(dataSourceId1)
-                                && currentRawData.getItemName().equals(itemReadName)) {
-                            currentCursorRawDataList.add(currentRawData);
+                        if (cursorRawData.getItemGroupId().equals(itemGroupId1)
+                                && cursorRawData.getDataSourceId().equals(dataSourceId1)
+                                && cursorRawData.getItemName().equals(itemReadName)) {
+                            currentCursorRawDataList.add(cursorRawData);
+                            cursorRawDataList.remove(i);
+                            i--;
                         }
-                    });
-                    finalSqlCurrentYmdhList.forEach(currentRawData -> {
-                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
-                                && currentRawData.getDataSourceId().equals(dataSourceId1)
-                                && currentRawData.getItemName().equals(itemReadName)) {
-                            currentSqlYmdhList.add(currentRawData.getValueBelongTime());
+                    }
+                    //将所有数据组合成一个List<CursorRawData>
+                    currentCursorRawDataList.addAll(ReportTask.genRawChangeCursor(currentRawDataList));
+                    //对currentCursorRawDataList进行排序,使用dataValueTime排序
+                    Collections.sort(currentCursorRawDataList, new Comparator<CursorRawData>() {
+                        @Override
+                        public int compare(CursorRawData o1, CursorRawData o2) {
+                            return o1.getDataValueTime().compareTo(o2.getDataValueTime());
                         }
                     });
-                    //根据历史数据和临时数据,计算出此数据项在报表中应该展示的数据,map形式返回
-//                    Map<String, String> map = ReportTask.genAutoData(currentRawDataList, currentCursorRawDataList,
-//                            startTime, endTime, t.getValueTakingMode(), t.getBucketType(), t.getBucketValue());
-                    List<RawData> currentRawDataList1 = new ArrayList<>();
-                    if (Blank.isNotEmpty(currentSqlYmdhList)) {
-                        for (String sqlCurrentYmdh : currentSqlYmdhList) {
-                            currentRawDataList1 = ReportTask.genRawAddCursor(currentRawDataList, currentCursorRawDataList, itemGroupId, dataSourceId, sqlCurrentYmdh);
-                        }
-                    }
+
+                    //计算出数据项的值集合
                     Map<String, String> map = new HashMap<>();
                     Integer valueTakingMode = t.getValueTakingMode();
                     Integer bucketValue = t.getBucketValue();
-                    if (Blank.isNotEmpty(currentRawDataList1)) {
-                        String dataType = currentRawDataList1.get(0).getDataType();
+                    if (Blank.isNotEmpty(currentCursorRawDataList)) {
+                        String dataType = currentCursorRawDataList.get(0).getDataType();
                         if (dataType.equals("boolean")) {
-                            map = ReportTask.genBoolean(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                            map = ReportTask.genBoolean(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                         } else {
                             try {
-                                map = ReportTask.genBigDecimal(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                map = ReportTask.genBigDecimal(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                             } catch (Exception e) {
-                                map = ReportTask.genString(currentRawDataList1, startTime, endTime, bucketType, bucketValue);
+                                map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
                             }
                         }
                     }
@@ -1176,13 +1196,13 @@ public class ReportTableTask {
                     String standby = t.getStandby();
                     //将数据项的信息放到集合中
                     reportTableItemList.add(new ReportTableItem(
-                            id, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
+                            id, itemId, valueType, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
                     ));
-                });
+                }
             }
         }
         if (Blank.isNotEmpty(reportTableItemList)) {
-            reportTable.setReportTableItemList(reportTableItemList);
+            reportTableDao.addReportTableItemList(reportTableItemList);
         }
 
         if (Blank.isNotEmpty(tableTemplateChartList)) {
@@ -1199,66 +1219,99 @@ public class ReportTableTask {
                 reportTableDao.addReportChart(reportChart);
                 Integer reportChartId = reportChart.getId();
                 //获取模板统计图中的数据项信息
-                List<TableTemplateChartItem> ttciList = ttc.getTableTemplateChartItemList();
-                if (Blank.isNotEmpty(ttciList)) {
-                    List<ReportChartItem> reportChartItemList = new ArrayList<>();
-                    for (int i = 0; i < ttciList.size(); i++) {
-                        TableTemplateChartItem ttci = ttciList.get(i);
-                        Integer itemGroupId = ttci.getItemGroupId();
-                        if (Blank.isEmpty(itemGroupId)) {
-                            continue;
+                List<TableTemplateChartItem> tableTemplateChartItemList = ttc.getTableTemplateChartItemList();
+                List<ReportChartItem> reportChartItemList = new ArrayList<>();
+                if (Blank.isNotEmpty(tableTemplateChartItemList)) {
+                    TableTemplateChartItem tableTemplateChartItem = tableTemplateChartItemList.get(0);
+                    Integer itemGroupId = tableTemplateChartItem.getItemGroupId();
+                    Integer dataSourceId = tableTemplateChartItem.getDataSourceId();
+                    Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+                    List<RawData> rawDataList = new ArrayList<>();
+                    List<CursorRawData> cursorRawDataList = new ArrayList<>();
+                    if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
+                            || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
+                        String startBelongTime;
+                        String endBelongTime;
+
+                        //从历史表中,查出历史数据;从临时表中,查出所有临时数据
+                        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
+                            startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                            endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                            rawDataList = rawDataDao.getTableChartDataGroupByDay(itemGroupId, remainder, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                            cursorRawDataList = rawDataDao.getTableChartCursorDataGroupByDay(itemGroupId, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                        } else {
+                            startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                            endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                            rawDataList = rawDataDao.getTableChartDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                            cursorRawDataList = rawDataDao.getTableChartCursorDataGroup(itemGroupId, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
                         }
-                        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
-                        Integer itemId = ttci.getItemId();
-                        String itemName = ttci.getItemName();
-                        Integer dataSourceId = ttci.getDataSourceId();
-                        Map<String, String> map = new HashMap<>();
-                        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
-                                || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
-                            String startBelongTime;
-                            String endBelongTime;
-                            List<RawData> rawDataList = new ArrayList<>();
-                            if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
-                                startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-                                endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
-                                rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
-                            } else {
-                                startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-                                endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
-                                rawDataList = rawDataDao.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
+
+                        for (TableTemplateChartItem t : tableTemplateChartItemList) {
+                            Integer itemGroupId1 = t.getItemGroupId();
+                            Integer dataSourceId1 = t.getDataSourceId();
+                            Integer itemId = t.getItemId();
+                            String itemReadName = t.getItemReadName();
+                            List<RawData> currentRawDataList = new ArrayList<>();
+                            List<CursorRawData> currentCursorRawDataList = new ArrayList<>();
+                            for (int i = 0; i < rawDataList.size(); i++) {
+                                RawData rawData = rawDataList.get(i);
+                                //生成历史数据
+                                if (rawData.getItemGroupId().equals(itemGroupId1)
+                                        && rawData.getDataSourceId().equals(dataSourceId1)
+                                        && rawData.getItemName().equals(itemReadName)) {
+                                    currentRawDataList.add(rawData);
+                                    rawDataList.remove(i);
+                                    i--;
+                                }
                             }
-                            List<String> sqlCurrentYmdhList = rawDataDao.getCursorYmdh(itemGroupId, dataSourceId, itemName, startBelongTime, endBelongTime);
-                            if (Blank.isNotEmpty(sqlCurrentYmdhList)) {
-                                for (String sqlCurrentYmdh : sqlCurrentYmdhList) {
-                                    List<CursorRawData> cursorRawDataList = rawDataDao.getTableCursorData(itemGroupId, dataSourceId, itemName, sqlCurrentYmdh);
-                                    rawDataList = ReportTask.genRawAddCursor(rawDataList, cursorRawDataList, itemGroupId, dataSourceId, sqlCurrentYmdh);
+                            for (int i = 0; i < cursorRawDataList.size(); i++) {
+                                CursorRawData cursorRawData = cursorRawDataList.get(i);
+                                //生成临时数据
+                                if (cursorRawData.getItemGroupId().equals(itemGroupId1)
+                                        && cursorRawData.getDataSourceId().equals(dataSourceId1)
+                                        && cursorRawData.getItemName().equals(itemReadName)) {
+                                    currentCursorRawDataList.add(cursorRawData);
+                                    cursorRawDataList.remove(i);
+                                    i--;
                                 }
                             }
-                            if (Blank.isNotEmpty(rawDataList)) {
-                                String dataType = rawDataList.get(0).getDataType();
+                            //将所有数据组合成一个List<CursorRawData>
+                            currentCursorRawDataList.addAll(ReportTask.genRawChangeCursor(currentRawDataList));
+                            //对currentCursorRawDataList进行排序,使用dataValueTime排序
+                            Collections.sort(currentCursorRawDataList, new Comparator<CursorRawData>() {
+                                @Override
+                                public int compare(CursorRawData o1, CursorRawData o2) {
+                                    return o1.getDataValueTime().compareTo(o2.getDataValueTime());
+                                }
+                            });
+
+                            //计算出数据项的值集合
+                            Map<String, String> map = new HashMap<>();
+                            if (Blank.isNotEmpty(currentCursorRawDataList)) {
+                                String dataType = currentCursorRawDataList.get(0).getDataType();
                                 if (dataType.equals("boolean")) {
-                                    map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                    map = ReportTask.genBoolean(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                                 } else {
                                     try {
-                                        map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                        map = ReportTask.genBigDecimal(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                                     } catch (Exception e) {
-                                        map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
+                                        map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
                                     }
                                 }
                             }
-                        } else {
-                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
+                            String valueList = map.get(flage ? "valueList" : "orgValueList");
+                            String valueTimeList = map.get("valueTimeList");
+                            String valueIndexList = map.get("valueIndexList");
+                            reportChartItemList.add(new ReportChartItem(
+                                    reportChartId, itemId, valueList, valueTimeList, valueIndexList
+                            ));
                         }
-                        String valueList = map.get(flage ? "valueList" : "orgValueList");
-                        String valueTimeList = map.get("valueTimeList");
-                        String valueIndexList = map.get("valueIndexList");
-                        reportChartItemList.add(new ReportChartItem(
-                                reportChartId, itemId, valueList, valueTimeList, valueIndexList
-                        ));
-                    }
-                    //添加报表统计图相关的数据项
-                    if (Blank.isNotEmpty(reportChartItemList)) {
-                        reportTableDao.addReportChartItem(reportChartItemList);
+                        //添加报表统计图相关的数据项
+                        if (Blank.isNotEmpty(reportChartItemList)) {
+                            reportTableDao.addReportChartItem(reportChartItemList);
+                        }
+                    } else {
+                        throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
                     }
                 }
             }

+ 58 - 45
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTask.java

@@ -18,7 +18,7 @@ public class ReportTask {
     /**
      * 时段类型为天、时,计算boolean类型值调用的切面
      *
-     * @param rawDataList
+     * @param curRawDataList
      * @param startTime
      * @param endTime
      * @param valueTakingMode
@@ -26,7 +26,7 @@ public class ReportTask {
      * @param bucketValue
      * @return
      */
-    public static Map<String, String> genBoolean(List<RawData> rawDataList, Date startTime, Date endTime, Integer valueTakingMode, Integer bucketType, Integer bucketValue) {
+    public static Map<String, String> genBoolean(List<CursorRawData> curRawDataList, Date startTime, Date endTime, Integer valueTakingMode, Integer bucketType, Integer bucketValue) {
         String pattern = null;
         if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
             pattern = ConstantStr.TIME_DAY_STR;
@@ -37,15 +37,6 @@ public class ReportTask {
         } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
             pattern = ConstantStr.TIME_SECOND_STR;
         }
-        List<Boolean> orgRawList = new ArrayList<>();
-        List<Boolean> rawList = new ArrayList<>();
-        List<String> rawTimeList = new ArrayList<>();
-        for (int i = 0; i < rawDataList.size(); i++) {
-            RawData rawData = rawDataList.get(i);
-            orgRawList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getOrgDataValue(), Boolean[].class))));
-            rawList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getDataValue(), Boolean[].class))));
-            rawTimeList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getDataValueTime(), String[].class))));
-        }
         List<Boolean> orgValueList = new ArrayList<>();
         List<Boolean> valueList = new ArrayList<>();
         List<String> valueTimeList = new ArrayList<>();
@@ -61,12 +52,15 @@ public class ReportTask {
             } else {
                 endTimeTime = endTime.getTime();
             }
-            for (int j = 0; j < rawTimeList.size(); j++) {
-                long time = DateUtil.strYmdhmssChangeDate(rawTimeList.get(j)).getTime();
+            for (int j = 0; j < curRawDataList.size(); j++) {
+                CursorRawData cursorRawData = curRawDataList.get(j);
+                long time = DateUtil.strYmdhmssChangeDate(cursorRawData.getDataValueTime()).getTime();
                 if (startTimeTime <= time && time < endTimeTime) {
-                    orgList.add(orgRawList.get(j));
-                    list.add(rawList.get(j));
+                    orgList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), Boolean.class));
+                    list.add(JSON.parseObject(cursorRawData.getDataValue(), Boolean.class));
                 }
+                curRawDataList.remove(j);
+                j--;
                 if (time >= endTimeTime) {
                     break;
                 }
@@ -142,13 +136,13 @@ public class ReportTask {
     /**
      * 时段类型为天、时,计算BigDecimal类型值调用的切面
      *
-     * @param rawDataList
+     * @param curRawDataList
      * @param valueTakingMode
      * @param bucketType
      * @param bucketValue
      * @return
      */
-    public static Map<String, String> genBigDecimal(List<RawData> rawDataList, Date startTime, Date endTime, Integer valueTakingMode, Integer bucketType, Integer bucketValue) {
+    public static Map<String, String> genBigDecimal(List<CursorRawData> curRawDataList, Date startTime, Date endTime, Integer valueTakingMode, Integer bucketType, Integer bucketValue) {
         String pattern = null;
         if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
             pattern = ConstantStr.TIME_DAY_STR;
@@ -159,15 +153,6 @@ public class ReportTask {
         } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
             pattern = ConstantStr.TIME_SECOND_STR;
         }
-        List<BigDecimal> orgRawList = new ArrayList<>();
-        List<BigDecimal> RawList = new ArrayList<>();
-        List<String> rawTimeList = new ArrayList<>();
-        for (int i = 0; i < rawDataList.size(); i++) {
-            RawData rawData = rawDataList.get(i);
-            orgRawList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getOrgDataValue(), BigDecimal[].class))));
-            RawList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getDataValue(), BigDecimal[].class))));
-            rawTimeList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getDataValueTime(), String[].class))));
-        }
         List<BigDecimal> orgValueList = new ArrayList<>();
         List<BigDecimal> valueList = new ArrayList<>();
         List<String> valueTimeList = new ArrayList<>();
@@ -183,12 +168,15 @@ public class ReportTask {
             } else {
                 endTimeTime = endTime.getTime();
             }
-            for (int j = 0; j < rawTimeList.size(); j++) {
-                long time = DateUtil.strYmdhmssChangeDate(rawTimeList.get(j)).getTime();
+            for (int j = 0; j < curRawDataList.size(); j++) {
+                CursorRawData cursorRawData = curRawDataList.get(j);
+                long time = DateUtil.strYmdhmssChangeDate(cursorRawData.getDataValueTime()).getTime();
                 if (startTimeTime <= time && time < endTimeTime) {
-                    orgList.add(orgRawList.get(j));
-                    list.add(RawList.get(j));
+                    orgList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), BigDecimal.class));
+                    list.add(JSON.parseObject(cursorRawData.getDataValue(), BigDecimal.class));
                 }
+                curRawDataList.remove(j);
+                j--;
                 if (time >= endTimeTime) {
                     break;
                 }
@@ -243,12 +231,12 @@ public class ReportTask {
     /**
      * 时段类型为天、时,计算String类型值调用的切面
      *
-     * @param rawDataList
+     * @param curRawDataList
      * @param bucketValue
      * @param bucketType
      * @return
      */
-    public static Map<String, String> genString(List<RawData> rawDataList, Date startTime, Date endTime, Integer bucketType, Integer
+    public static Map<String, String> genString(List<CursorRawData> curRawDataList, Date startTime, Date endTime, Integer bucketType, Integer
             bucketValue) {
         String pattern = null;
         if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
@@ -260,15 +248,6 @@ public class ReportTask {
         } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
             pattern = ConstantStr.TIME_SECOND_STR;
         }
-        List<String> orgRawList = new ArrayList<>();
-        List<String> RawList = new ArrayList<>();
-        List<String> rawTimeList = new ArrayList<>();
-        for (int i = 0; i < rawDataList.size(); i++) {
-            RawData rawData = rawDataList.get(i);
-            orgRawList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getOrgDataValue(), String[].class))));
-            RawList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getDataValue(), String[].class))));
-            rawTimeList.addAll(new ArrayList<>(Arrays.asList(JSON.parseObject(rawData.getDataValueTime(), String[].class))));
-        }
         List<String> orgValueList = new ArrayList<>();
         List<String> valueList = new ArrayList<>();
         List<String> valueTimeList = new ArrayList<>();
@@ -284,12 +263,15 @@ public class ReportTask {
             } else {
                 endTimeTime = endTime.getTime();
             }
-            for (int j = 0; j < rawTimeList.size(); j++) {
-                long time = DateUtil.strYmdhmssChangeDate(rawTimeList.get(j)).getTime();
+            for (int j = 0; j < curRawDataList.size(); j++) {
+                CursorRawData cursorRawData = curRawDataList.get(j);
+                long time = DateUtil.strYmdhmssChangeDate(cursorRawData.getDataValueTime()).getTime();
                 if (startTimeTime <= time && time < endTimeTime) {
-                    orgList.add(orgRawList.get(j));
-                    list.add(RawList.get(j));
+                    orgList.add(JSON.parseObject(cursorRawData.getOrgDataValue(), String.class));
+                    list.add(JSON.parseObject(cursorRawData.getDataValue(), String.class));
                 }
+                curRawDataList.remove(j);
+                j--;
                 if (time >= endTimeTime) {
                     break;
                 }
@@ -891,4 +873,35 @@ public class ReportTask {
         return map;
     }
 
+    /**
+     * 将数据库组装的RawData拆分成一个List<CursorRawData>
+     *
+     * @param rawDataList
+     * @return
+     */
+    public static List<CursorRawData> genRawChangeCursor(List<RawData> rawDataList) {
+        List<CursorRawData> cursorRawDataList = new ArrayList<>();
+        if (Blank.isNotEmpty(rawDataList)) {
+            for (RawData rawData : rawDataList) {
+                Integer itemGroupId = rawData.getItemGroupId();
+                Integer dataSourceId = rawData.getDataSourceId();
+                String itemName = rawData.getItemName();
+                String dataType = rawData.getDataType();
+                String valueBelongTime = rawData.getValueBelongTime();
+                String[] orgDataValueList = JSON.parseObject(rawData.getOrgDataValue(), String[].class);
+                String[] dataValueList = JSON.parseObject(rawData.getDataValue(), String[].class);
+                String[] dataValueTimeList = JSON.parseObject(rawData.getDataValueTime(), String[].class);
+                Long[] dataIndexList = JSON.parseObject(rawData.getDataIndex(), Long[].class);
+                if (Blank.isNotEmpty(dataValueTimeList)) {
+                    for (int i = 0; i < dataValueTimeList.length; i++) {
+                        cursorRawDataList.add(
+                                new CursorRawData(itemGroupId, dataSourceId, itemName, dataType, orgDataValueList[i],
+                                        dataValueList[i], dataValueTimeList[i], dataIndexList[i], valueBelongTime, null)
+                        );
+                    }
+                }
+            }
+        }
+        return cursorRawDataList;
+    }
 }

+ 71 - 15
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/RawDataDao.xml

@@ -240,6 +240,20 @@
         ORDER BY value_belong_time
     </select>
 
+    <select id="getTableChartDataGroup" resultType="com.example.opc_common.entity.RawData">
+        select
+        <include refid="rawData"/>
+        from t_raw_data${remainder}
+        WHERE item_group_id = #{itemGroupId}
+        AND data_source_id = #{dataSourceId}
+        AND item_name IN
+        <foreach collection="tableTemplateChartItemList" item="tableTemplateChartItem" separator="," open="(" close=")">
+            #{tableTemplateChartItem.itemReadName}
+        </foreach>
+        AND value_belong_time BETWEEN #{startBelongTime} AND #{endBelongTime}
+        ORDER BY value_belong_time
+    </select>
+
     <select id="getTableDataByDay" resultType="com.example.opc_common.entity.RawData">
         select
         <include refid="rawData"/>
@@ -266,6 +280,48 @@
         ORDER BY value_belong_time
     </select>
 
+    <select id="getTableChartDataGroupByDay" resultType="com.example.opc_common.entity.RawData">
+        select
+        <include refid="rawData"/>
+        from t_raw_data${remainder}
+        WHERE item_group_id = #{itemGroupId}
+        AND data_source_id = #{dataSourceId}
+        AND item_name IN
+        <foreach collection="tableTemplateChartItemList" item="tableTemplateChartItem" separator="," open="(" close=")">
+            #{tableTemplateChartItem.itemReadName}
+        </foreach>
+        AND DATE_FORMAT(value_belong_time,'%Y-%m-%d') BETWEEN #{startBelongTime} AND #{endBelongTime}
+        ORDER BY value_belong_time
+    </select>
+
+    <select id="getTableCursorDataGroupByDay" resultType="com.example.opc_common.entity.CursorRawData">
+        select
+        <include refid="cursorRawData"/>
+        from t_raw_data
+        WHERE item_group_id = #{itemGroupId}
+        AND data_source_id = #{dataSourceId}
+        AND item_name IN
+        <foreach collection="tableTemplateItemList" item="tableTemplateItem" separator="," open="(" close=")">
+            #{tableTemplateItem.itemReadName}
+        </foreach>
+        AND DATE_FORMAT(value_belong_time,'%Y-%m-%d') BETWEEN #{startBelongTime} AND #{endBelongTime}
+        ORDER BY data_index
+    </select>
+
+    <select id="getTableChartCursorDataGroupByDay" resultType="com.example.opc_common.entity.CursorRawData">
+        select
+        <include refid="cursorRawData"/>
+        from t_raw_data
+        WHERE item_group_id = #{itemGroupId}
+        AND data_source_id = #{dataSourceId}
+        AND item_name IN
+        <foreach collection="tableTemplateChartItemList" item="tableTemplateChartItem" separator="," open="(" close=")">
+            #{tableTemplateChartItem.itemReadName}
+        </foreach>
+        AND DATE_FORMAT(value_belong_time,'%Y-%m-%d') BETWEEN #{startBelongTime} AND #{endBelongTime}
+        ORDER BY data_index
+    </select>
+
     <select id="getEventDataList" resultType="com.example.opc_common.entity.CursorRawData">
         <if test="indexList!= null and indexList.size() >0">
             select
@@ -304,6 +360,21 @@
         <foreach collection="tableTemplateItemList" item="tableTemplateItem" separator="," open="(" close=")">
             #{tableTemplateItem.itemReadName}
         </foreach>
+        AND value_belong_time BETWEEN #{startBelongTime} AND #{endBelongTime}
+        ORDER BY data_index
+    </select>
+
+    <select id="getTableChartCursorDataGroup" resultType="com.example.opc_common.entity.CursorRawData">
+        select
+        <include refid="cursorRawData"/>
+        from t_raw_data
+        WHERE item_group_id = #{itemGroupId}
+        AND data_source_id = #{dataSourceId}
+        AND item_name IN
+        <foreach collection="tableTemplateChartItemList" item="tableTemplateChartItem" separator="," open="(" close=")">
+            #{tableTemplateChartItem.itemReadName}
+        </foreach>
+        AND value_belong_time BETWEEN #{startBelongTime} AND #{endBelongTime}
         ORDER BY data_index
     </select>
 
@@ -322,21 +393,6 @@
         ORDER BY value_belong_time
     </select>
 
-    <select id="getCursorYmdhGroup" resultType="com.example.opc_common.entity.CursorRawData">
-        select #{itemGroupId} as item_group_id,#{dataSourceId} as data_source_id,item_name ,value_belong_time
-        from t_raw_data
-        WHERE item_group_id = #{itemGroupId}
-        AND data_source_id = #{dataSourceId}
-        AND item_name IN
-        <foreach collection="tableTemplateItemList" item="tableTemplateItem" separator="," open="(" close=")">
-            #{tableTemplateItem.itemReadName}
-        </foreach>
-        AND value_belong_time BETWEEN #{startBelongTime} AND #{endBelongTime}
-        GROUP BY item_name,value_belong_time
-        ORDER BY value_belong_time
-    </select>
-
-
     <select id="getAttachRawData" resultType="com.example.opc_common.entity.AttachRawData">
         select
         <include refid="attachRawData"/>

+ 8 - 6
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/ReportTableDao.xml

@@ -438,12 +438,12 @@
         where id = #{id}
     </select>
 
-<!--    <select id="getTableTemplateById" resultMap="allTableTemplate">-->
-<!--        select-->
-<!--        <include refid="tableTemplate"/>-->
-<!--        from t_table_template-->
-<!--        where id = #{id}-->
-<!--    </select>-->
+    <!--    <select id="getTableTemplateById" resultMap="allTableTemplate">-->
+    <!--        select-->
+    <!--        <include refid="tableTemplate"/>-->
+    <!--        from t_table_template-->
+    <!--        where id = #{id}-->
+    <!--    </select>-->
 
     <select id="getTableTemplateNoDataById" resultType="com.example.opc_common.entity.TableTemplate">
         select
@@ -930,6 +930,7 @@
             <id column="item_id" property="itemId"/>
             <id column="item_group_id" property="itemGroupId"/>
             <id column="item_name" property="itemName"/>
+            <id column="item_read_name" property="itemReadName"/>
             <id column="data_source_id" property="dataSourceId"/>
             <id column="item_type" property="itemType"/>
         </collection>
@@ -942,6 +943,7 @@
                tttci.item_id,
                ti.item_group_id,
                ti.item_name,
+               ti.item_read_name,
                ti.item_type,
                tig.data_source_id
         from t_table_template_chart_item tttci