浏览代码

完成自动报表,获取最新的数据接口,并对接上通过id获取报表
完成自动报表定时器任务的修改,定时器执行,将报表的表格数据、统计图数据生成
修改启动、停止自动报表的接口,增加新的验证条件
完成报表模板接口的删除验证

zhoupeng 1 年之前
父节点
当前提交
876ddb5fc3

+ 6 - 1
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/ReportChart.java

@@ -19,6 +19,10 @@ public class ReportChart implements Serializable {
      */
     private Integer reportTableId;
     /**
+     * 模板统计图id
+     */
+    private Integer templateChartId;
+    /**
      * 统计图类型,line折线图,bar柱状图,pie饼状图
      */
     private String chartType;
@@ -42,8 +46,9 @@ public class ReportChart implements Serializable {
 
     }
 
-    public ReportChart(Integer reportTableId, String chartType, String chartName, Integer valueType, String standby) {
+    public ReportChart(Integer reportTableId, Integer templateChartId, String chartType, String chartName, Integer valueType, String standby) {
         this.reportTableId = reportTableId;
+        this.templateChartId = templateChartId;
         this.chartType = chartType;
         this.chartName = chartName;
         this.valueType = valueType;

+ 2 - 0
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/TableTemplateChartItem.java

@@ -31,4 +31,6 @@ public class TableTemplateChartItem implements Serializable {
      * 虚拟字段,用于返回数据。数据源配置id
      */
     private Integer dataSourceId;
+    //虚拟字段,用于返回属性类型
+    private Integer itemType;
 }

+ 2 - 0
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/TableTemplateTableItem.java

@@ -20,6 +20,8 @@ public class TableTemplateTableItem implements Serializable {
     private String itemName;
     //虚拟字段,用于返回数据。数据源配置id
     private Integer dataSourceId;
+    //虚拟字段,用于返回属性类型
+    private Integer itemType;
     //占位符名字(必填)
     private String placeHolder;
     //横坐标,x轴(必填)

+ 2 - 2
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/controller/ReportTableController.java

@@ -199,8 +199,8 @@ public class ReportTableController {
     @PostMapping("/runAutoTableById")
     @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
     public Result runAutoTableById(@RequestBody ReportTable reportTable) {
-        if (Blank.isEmpty(reportTable, reportTable.getId(), reportTable.getStartTime(), reportTable.getEndTime(), reportTable.getCron(), reportTable.getRunState())) {
-            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始、结束时间、定时器表达式、启停状态不能为空");
+        if (Blank.isEmpty(reportTable, reportTable.getId(), reportTable.getRunState())) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "id,启停状态不能为空");
         }
         return reportTableService.runAutoTableById(reportTable);
     }

+ 7 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dao/ReportTableDao.java

@@ -81,7 +81,7 @@ public interface ReportTableDao {
     Integer addTableTemplateItem(List<TableTemplateTableItem> tableTemplateTableItemList);
 
     //根据报表模板id,获取报表模板表格数据项的详细信息
-    List<TableTemplateTableItem> getTtiByTemplateId(Integer tableTemplateId);
+    List<TableTemplateTableItem> getTttiByTemplateId(Integer tableTemplateId);
 
     //删除报表模板表格数据关联的数据项信息
     Integer delTtiByTtId(Integer tableTemplateId);
@@ -142,4 +142,10 @@ public interface ReportTableDao {
 
     //通过报表id,删除报表相应的统计图
     Integer delRcByRtId(Integer reportTableId);
+
+    //通过模板统计图id,获取模板统计图相应的数据项信息
+    List<TableTemplateChartItem> getTtciByTtcId(Integer tableTemplateChartId);
+
+    //通过id获取本身的统计图信息,以及统计图的数据项信息
+    TableTemplateChart getTtcById(Integer id);
 }

+ 51 - 109
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java

@@ -187,7 +187,7 @@ public class ReportTableServiceImpl implements ReportTableService {
     @Override
     public Result getTableTemplateById(Integer id) {
         TableTemplate tableTemplate = reportTableDao.getTableTemplateById(id);
-        List<TableTemplateTableItem> tableItemList = reportTableDao.getTtiByTemplateId(id);
+        List<TableTemplateTableItem> tableItemList = reportTableDao.getTttiByTemplateId(id);
         tableTemplate.setTableTemplateItemList(tableItemList);
         List<TableTemplateChart> tableTemplateChartList = reportTableDao.getTtcByTemplateId(id);
         tableTemplate.setTableTemplateChartList(tableTemplateChartList);
@@ -200,6 +200,13 @@ public class ReportTableServiceImpl implements ReportTableService {
             return Result.no(ResultEnum.SERVER_ERROR.getRespCode(), "删除报表模板失败");
         }
         reportTableDao.delTtiByTtId(id);
+        List<TableTemplateChart> tableTemplateCharts = reportTableDao.getTtcByTemplateId(id);
+        if (Blank.isNotEmpty(tableTemplateCharts)) {
+            for (TableTemplateChart ttc : tableTemplateCharts) {
+                reportTableDao.delTtciByTtcId(ttc.getId());
+            }
+            reportTableDao.delTtcByTtId(id);
+        }
         reportTableDao.delTableTemplateLogByTtId(id);
         return Result.ok("删除报表模板成功");
     }
@@ -227,105 +234,12 @@ public class ReportTableServiceImpl implements ReportTableService {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表类型不存在");
         }
         if (reportTableType.equals(ConstantStr.MANUAL_REPORT)) {
-            return reportTableTask.manualReportReal(reportTable);
-        } else if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT) || reportTableType.equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
-            if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT)) {
-                Integer tableTemplateId = reportTable.getTableTemplateId();
-                if (Blank.isEmpty(tableTemplateId)) {
-                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "模板不存在");
-                }
-                TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
-                if (Blank.isEmpty(tableTemplate)) {
-                    return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "模板不存在");
-                }
-                List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTtiByTemplateId(tableTemplateId);
-                String cron = reportTable.getCron();
-                Date startTime = CronUtil.mappingTime(cron, reportTable.getStartTime());
-                Date endTime = CronUtil.mappingTime(cron, reportTable.getEndTime());
-                List<ReportTableItem> reportTableItemList = new ArrayList<>();
-                if (Blank.isNotEmpty(tableTemplateItemList)) {
-                    for (TableTemplateTableItem t : tableTemplateItemList) {
-                        Integer itemGroupId = t.getItemGroupId();
-                        if (Blank.isEmpty(itemGroupId)) {
-                            continue;
-                        }
-                        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
-                        Integer itemId = t.getItemId();
-                        Integer xaxis = t.getXaxis();
-                        Integer yaxis = t.getYaxis();
-                        String standby = t.getStandby();
-                        String itemName = t.getItemName();
-                        Integer dataSourceId = t.getDataSourceId();
-                        Integer valueTakingMode = t.getValueTakingMode();
-                        Integer valueType = t.getValueType();
-                        Integer bucketType = t.getBucketType();
-                        Integer bucketValue = t.getBucketValue();
-                        boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                        Item item = itemGroupDao.getItemById(itemId);
-                        if (Blank.isEmpty(item)) {
-                            continue;
-                        }
-                        Integer itemType = item.getItemType();
-                        if (itemType.equals(ConstantStr.ATTACH_ATTRIBUTES)) {
-                            AttachRawData attachRawData = rawDataDao.getAttachRawData(itemGroupId, dataSourceId, itemName);
-                            reportTableItemList.add(new ReportTableItem(
-                                    id, itemId, valueType, xaxis, yaxis, standby, flage ? attachRawData.getDataValue() : attachRawData.getOrgDataValue(), attachRawData.getDataValueTime(), null
-                            ));
-                            continue;
-                        }
-                        String valueList = null;
-                        String valueTimeList = null;
-                        String valueIndexList = null;
-                        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);
-                            }
-                            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);
-                                }
-                            }
-                            if (Blank.isNotEmpty(rawDataList)) {
-                                String dataType = rawDataList.get(0).getDataType();
-                                if (dataType.equals("boolean")) {
-                                    map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
-                                } else {
-                                    try {
-                                        map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
-                                    } catch (Exception e) {
-                                        map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
-                                    }
-                                }
-                            }
-                        } else {
-                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
-                        }
-                        valueList = map.get(flage ? "valueList" : "orgValueList");
-                        valueTimeList = map.get("valueTimeList");
-                        valueIndexList = map.get("valueIndexList");
-                        reportTableItemList.add(new ReportTableItem(
-                                id, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
-                        ));
-                    }
-                }
-                reportTable.setReportTableItemList(reportTableItemList);
-            }
-            if (reportTableType.equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
-                Integer chTableId = reportTableDao.getEventChTableId(id);
-                reportTable.setReportTableItemList(reportTableDao.getTableItemListById(chTableId));
-            }
+            return reportTableTask.getManualReport(reportTable);
+        } else if (reportTableType.equals(ConstantStr.AUTOMATIC_REPORT)) {
+            return reportTableTask.getAutoReport(reportTable);
+        } else if (reportTableType.equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
+            Integer chTableId = reportTableDao.getEventChTableId(id);
+            reportTable.setReportTableItemList(reportTableDao.getTableItemListById(chTableId));
         } else {
             reportTable.setReportTableItemList(reportTableDao.getTableItemListById(id));
         }
@@ -348,7 +262,7 @@ public class ReportTableServiceImpl implements ReportTableService {
         }
         if (reportTableType.equals(ConstantStr.EVENT_DRIVEN_REPORT)) {
             Integer tableTemplateId = reportTable.getTableTemplateId();
-            List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTtiByTemplateId(tableTemplateId);
+            List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByTemplateId(tableTemplateId);
             if (Blank.isNotEmpty(tableTemplateItemList)) {
                 TableTemplateTableItem tableTemplateItem = tableTemplateItemList.get(0);
                 ItemGroup itemGroup = itemGroupDao.getItemGroupById(tableTemplateItem.getItemGroupId());
@@ -368,6 +282,13 @@ public class ReportTableServiceImpl implements ReportTableService {
         }
         reportTableDao.delAutoChLog(id);
         reportTableDao.delRtiByRtId(id);
+        List<ReportChart> reportChartList = reportTableDao.getReportChartList(id);
+        if (Blank.isNotEmpty(reportChartList)) {
+            for (ReportChart reportChart : reportChartList) {
+                reportTableDao.delRciByRcId(reportChart.getId());
+            }
+            reportTableDao.delRcByRtId(id);
+        }
         reportTableDao.delTableUserGroup(id);
         return Result.ok("删除报表成功");
     }
@@ -435,38 +356,59 @@ public class ReportTableServiceImpl implements ReportTableService {
     public synchronized Result runAutoTableById(ReportTable reportTable) {
         Integer reportTableId = reportTable.getId();
         Integer runState = reportTable.getRunState();
-        String cron = reportTable.getCron();
+
         ReportTable oldReportTable = reportTableDao.getReportTableById(reportTableId);
         if (Blank.isEmpty(oldReportTable)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表不存在,请刷新后再试");
         }
         String cronId = oldReportTable.getCronId();
-        if (Blank.isEmpty(cronId)) {
-            cronId = UUID.randomUUID().toString().replace("-", "");
-        }
         if (runState.equals(ConstantStr.START_UP)) {
+            Date startTime = reportTable.getStartTime();
+            Date endTime = reportTable.getEndTime();
+            String cron = reportTable.getCron();
+            if (Blank.isEmpty(startTime, endTime, cron)) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始、结束时间、定时器表达式不能为空");
+            }
             if (Blank.isEmpty(oldReportTable.getReportTableType())) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "未知报表类型,请刷新重试");
             }
             if (Blank.isEmpty(cron)) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "自动报表的定时任务配置不正确,请重新配置");
             }
-            if (Blank.isEmpty(oldReportTable.getRunState())) {
+            Integer oldRunState = oldReportTable.getRunState();
+            if (Blank.isEmpty(oldRunState)) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "未知报表运行状态,请刷新重试");
             }
-            if (runState.equals(ConstantStr.START_UP)) {
+            if (oldRunState.equals(ConstantStr.START_UP)) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于启动状态");
             }
-            SchedulingRunnable task = new SchedulingRunnable(ReportTableTask.class, "genAutoTableData", new Object[]{oldReportTable});
+            if (Blank.isEmpty(cronId)) {
+                cronId = UUID.randomUUID().toString().replace("-", "");
+            }
+            Date startTimeBefore = CronUtil.getTimeBefore(cron, startTime);
+            Date startTimeAfter = CronUtil.getTimeAfter(cron, startTime);
+            Date endTimeBefore = CronUtil.getTimeBefore(cron, endTime);
+            Date endTimeAfter = CronUtil.getTimeAfter(cron, endTime);
+            if (startTimeBefore.getTime() != endTimeBefore.getTime()) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始时间和结束时间必须在cron一个周期中");
+            }
+            if (startTimeAfter.getTime() != endTimeAfter.getTime()) {
+                return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "开始时间和结束时间必须在cron一个周期中");
+            }
             //新增定时器任务
             reportTableDao.runAutoTableById(reportTable);
+            ReportTable reportTable1 = reportTableDao.getReportTableById(reportTableId);
+            SchedulingRunnable task = new SchedulingRunnable(ReportTableTask.class, "genAutoTableData", new Object[]{reportTable1});
             cronTaskRegister.addCronTask(task, cronId, reportTable.getCron());
             return Result.ok("启动成功");
         } else if (runState.equals(ConstantStr.STOP_IT)) {
+            if (Blank.isEmpty(cronId)) {
+                throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "定时器主键丢失,停止失败");
+            }
             if (Blank.isEmpty(reportTable.getRunState())) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "未知报表运行状态,请刷新重试");
             }
-            if (reportTable.getRunState().equals(ConstantStr.STOP_IT)) {
+            if (oldReportTable.getRunState().equals(ConstantStr.STOP_IT)) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于停止状态");
             }
             reportTableDao.stopAutoTableById(reportTableId, runState);

+ 2 - 6
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcAsyncTask.java

@@ -101,7 +101,7 @@ public class OpcAsyncTask {
                         TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
                         Integer eventNum = tableTemplate.getEventNum();
                         Integer chTableId = reportTableDao.getEventChTableId(tableId);
-                        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTtiByTemplateId(tableTemplateId);
+                        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByTemplateId(tableTemplateId);
                         if (Blank.isEmpty(chTableId)) {
                             //如果没有子报表,则新增报表,则只需要生成新报表,并向新报表添加数据即可
                             //如果模板设置的数量大于等于当前拿数据的数量,则只需要添加一张新报表存储数据即可
@@ -123,12 +123,8 @@ public class OpcAsyncTask {
                                 for (TableTemplateTableItem t : tableTemplateItemList) {
                                     Integer itemId = t.getItemId();
                                     Integer valueType = t.getValueType();
+                                    Integer itemType = t.getItemType();
                                     Boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                                    Item item = itemGroupDao.getItemById(itemId);
-                                    if (Blank.isEmpty(item)) {
-                                        continue;
-                                    }
-                                    Integer itemType = item.getItemType();
                                     if (itemType.equals(ConstantStr.ATTACH_ATTRIBUTES)) {
                                         continue;
                                     }

+ 292 - 12
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/ReportTableTask.java

@@ -109,7 +109,7 @@ public class ReportTableTask {
                 reportTableDao.addTableTemplateChart(ttc);
                 //根据模板中的统计图生成相应的报表统计图,并添加
                 ReportChart reportChart = new ReportChart(
-                        reportTableId, ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
+                        reportTableId, ttc.getId(), ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
                 );
                 reportTableDao.addReportChart(reportChart);
                 Integer reportChartId = reportChart.getId();
@@ -213,7 +213,7 @@ public class ReportTableTask {
                 reportTableDao.addTableTemplateChart(ttc);
                 //根据模板中的统计图生成相应的报表统计图,并添加
                 ReportChart reportChart = new ReportChart(
-                        reportTableId, ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
+                        reportTableId, ttc.getId(), ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
                 );
                 reportTableDao.addReportChart(reportChart);
                 Integer reportChartId = reportChart.getId();
@@ -282,7 +282,7 @@ public class ReportTableTask {
                 reportTableDao.addTableTemplateChart(ttc);
                 //根据模板中的统计图生成相应的报表统计图,并添加
                 ReportChart reportChart = new ReportChart(
-                        reportTableId, ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
+                        reportTableId, ttc.getId(), ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
                 );
                 reportTableDao.addReportChart(reportChart);
                 //获取模板统计图中的数据项信息
@@ -359,7 +359,7 @@ public class ReportTableTask {
                 reportTableDao.addTableTemplateChart(ttc);
                 //根据模板中的统计图生成相应的报表统计图,并添加
                 ReportChart reportChart = new ReportChart(
-                        reportTableId, ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
+                        reportTableId, ttc.getId(), ttc.getChartType(), ttc.getChartName(), ttc.getValueType(), ttc.getStandby()
                 );
                 reportTableDao.addReportChart(reportChart);
                 //获取模板统计图中的数据项信息
@@ -449,7 +449,7 @@ public class ReportTableTask {
      * @param reportTable
      * @return
      */
-    public Result manualReportReal(ReportTable reportTable) {
+    public Result getManualReport(ReportTable reportTable) {
         Integer reportTableId = reportTable.getId();
         //获取手动报表相关的表格数据项信息
         List<ReportTableItem> reportTableItemList = reportTableDao.getTableItemListById(reportTableId);
@@ -539,6 +539,196 @@ public class ReportTableTask {
     }
 
     /**
+     * 获取自动报表最新的一轮数据
+     *
+     * @param reportTable
+     * @return
+     */
+    public Result getAutoReport(ReportTable reportTable) {
+        Integer reportTableId = reportTable.getId();
+        Integer tableTemplateId = reportTable.getTableTemplateId();
+        if (Blank.isEmpty(tableTemplateId)) {
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "模板不存在");
+        }
+        TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
+        if (Blank.isEmpty(tableTemplate)) {
+            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "模板不存在");
+        }
+        String cron = reportTable.getCron();
+        Date startTime = CronUtil.mappingTime(cron, reportTable.getStartTime());
+        Date endTime = CronUtil.mappingTime(cron, reportTable.getEndTime());
+        //获取此报表管理的报表模板,所关联的表格数据项
+        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByTemplateId(tableTemplateId);
+        List<ReportTableItem> reportTableItemList = new ArrayList<>();
+        if (Blank.isNotEmpty(tableTemplateItemList)) {
+            //根据模板配置的取值条件,获取表格数据项的数据,并存到报表的数据项信息里面
+            for (TableTemplateTableItem t : tableTemplateItemList) {
+                Integer itemGroupId = t.getItemGroupId();
+                if (Blank.isEmpty(itemGroupId)) {
+                    continue;
+                }
+                Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+                Integer itemId = t.getItemId();
+                Integer xaxis = t.getXaxis();
+                Integer yaxis = t.getYaxis();
+                String standby = t.getStandby();
+                String itemName = t.getItemName();
+                Integer dataSourceId = t.getDataSourceId();
+                Integer itemType = t.getItemType();
+                Integer valueTakingMode = t.getValueTakingMode();
+                Integer valueType = t.getValueType();
+                Integer bucketType = t.getBucketType();
+                Integer bucketValue = t.getBucketValue();
+                boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
+                if (itemType.equals(ConstantStr.ATTACH_ATTRIBUTES)) {
+                    AttachRawData attachRawData = rawDataDao.getAttachRawData(itemGroupId, dataSourceId, itemName);
+                    reportTableItemList.add(new ReportTableItem(
+                            reportTableId, itemId, valueType, xaxis, yaxis, standby,
+                            flage ? attachRawData.getDataValue() : attachRawData.getOrgDataValue(), attachRawData.getDataValueTime(), null
+                    ));
+                    continue;
+                }
+                String valueList = null;
+                String valueTimeList = null;
+                String valueIndexList = null;
+                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);
+                    }
+                    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);
+                        }
+                    }
+                    if (Blank.isNotEmpty(rawDataList)) {
+                        String dataType = rawDataList.get(0).getDataType();
+                        if (dataType.equals("boolean")) {
+                            map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                        } else {
+                            try {
+                                map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                            } catch (Exception e) {
+                                map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
+                            }
+                        }
+                    }
+                } else {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
+                }
+                valueList = map.get(flage ? "valueList" : "orgValueList");
+                valueTimeList = map.get("valueTimeList");
+                valueIndexList = map.get("valueIndexList");
+                reportTableItemList.add(new ReportTableItem(
+                        reportTableId, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
+                ));
+            }
+        }
+        if (Blank.isNotEmpty(reportTableItemList)) {
+            reportTable.setReportTableItemList(reportTableItemList);
+        }
+
+        //获取报表的统计图信息
+        List<ReportChart> reportChartList = reportTableDao.getReportChartList(reportTableId);
+        if (Blank.isNotEmpty(reportChartList)) {
+            for (ReportChart reportChart : reportChartList) {
+                //查询相关联的模板统计图,以及统计图的数据项相关信息
+                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<ReportChartItem> reportChartItemList = new ArrayList<>();
+                if (Blank.isNotEmpty(tableTemplateChartItems)) {
+                    for (TableTemplateChartItem ttci : tableTemplateChartItems) {
+                        Integer itemGroupId = ttci.getItemGroupId();
+                        if (Blank.isEmpty(itemGroupId)) {
+                            continue;
+                        }
+                        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+                        Integer itemId = ttci.getItemId();
+                        String itemName = ttci.getItemName();
+                        Integer dataSourceId = ttci.getDataSourceId();
+                        Integer itemType = ttci.getItemType();
+                        if (itemType.equals(ConstantStr.ATTACH_ATTRIBUTES)) {
+                            AttachRawData attachRawData = rawDataDao.getAttachRawData(itemGroupId, dataSourceId, itemName);
+                            reportChartItemList.add(new ReportChartItem(
+                                    reportChartId, itemId, flage ? attachRawData.getDataValue() : attachRawData.getOrgDataValue(),
+                                    attachRawData.getDataValueTime(), null
+                            ));
+                            continue;
+                        }
+                        String valueList = null;
+                        String valueTimeList = null;
+                        String valueIndexList = null;
+                        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);
+                            }
+                            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);
+                                }
+                            }
+                            if (Blank.isNotEmpty(rawDataList)) {
+                                String dataType = rawDataList.get(0).getDataType();
+                                if (dataType.equals("boolean")) {
+                                    map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                } else {
+                                    try {
+                                        map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                    } catch (Exception e) {
+                                        map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
+                                    }
+                                }
+                            }
+                        } else {
+                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
+                        }
+                        valueList = map.get(flage ? "valueList" : "orgValueList");
+                        valueTimeList = map.get("valueTimeList");
+                        valueIndexList = map.get("valueIndexList");
+                        reportChartItemList.add(new ReportChartItem(
+                                reportChartId, itemId, valueList, valueTimeList, valueIndexList
+                        ));
+                    }
+                }
+            }
+            reportTable.setReportChartList(reportChartList);
+        }
+        return Result.ok(reportTable);
+    }
+
+    /**
      * 读取同一个opcDa数据源下,所有项的实时数据
      *
      * @param dataSource
@@ -612,7 +802,10 @@ public class ReportTableTask {
         if (Blank.isEmpty(tableTemplate)) {
             log.info("报表模板不存在");
         }
-        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTtiByTemplateId(tableTemplateId);
+        //通过报表关联的模板,查询出模板对应的表格数据数据项信息
+        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByTemplateId(tableTemplateId);
+        //通过报表关联的模板,查询出模板对应的统计图,以及统计图数据项信息
+        List<TableTemplateChart> tableTemplateChartList = reportTableDao.getTtcByTemplateId(tableTemplateId);
         Date date = new Date();
         //生成一张新的子报表,并添加相应的日志,以及用户组授权
         ReportTable reportTable1 = new ReportTable(
@@ -646,20 +839,17 @@ public class ReportTableTask {
                 String standby = t.getStandby();
                 String itemName = t.getItemName();
                 Integer dataSourceId = t.getDataSourceId();
+                Integer itemType = t.getItemType();
                 Integer valueTakingMode = t.getValueTakingMode();
                 Integer valueType = t.getValueType();
                 Integer bucketType = t.getBucketType();
                 Integer bucketValue = t.getBucketValue();
                 boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
-                Item item = itemGroupDao.getItemById(itemId);
-                if (Blank.isEmpty(item)) {
-                    continue;
-                }
-                Integer itemType = item.getItemType();
                 if (itemType.equals(ConstantStr.ATTACH_ATTRIBUTES)) {
                     AttachRawData attachRawData = rawDataDao.getAttachRawData(itemGroupId, dataSourceId, itemName);
                     reportTableDao.addReportTableItem(new ReportTableItem(
-                            id, itemId, xaxis, yaxis, standby, flage ? attachRawData.getDataValue() : attachRawData.getOrgDataValue(), attachRawData.getDataValueTime(), null
+                            id, itemId, xaxis, yaxis, standby,
+                            flage ? attachRawData.getDataValue() : attachRawData.getOrgDataValue(), attachRawData.getDataValueTime(), null
                     ));
                     continue;
                 }
@@ -710,6 +900,96 @@ public class ReportTableTask {
                 ));
             }
         }
+        if (Blank.isNotEmpty(tableTemplateChartList)) {
+            for (TableTemplateChart ttc : tableTemplateChartList) {
+                Integer valueTakingMode = ttc.getValueTakingMode();
+                Integer valueType = ttc.getValueType();
+                Integer bucketType = ttc.getBucketType();
+                Integer bucketValue = ttc.getBucketValue();
+                boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
+                //根据模板中的统计图生成相应的报表统计图,并添加
+                ReportChart reportChart = new ReportChart(
+                        id, ttc.getId(), ttc.getChartType(), ttc.getChartName(), valueType, ttc.getStandby()
+                );
+                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;
+                        }
+                        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+                        Integer itemId = ttci.getItemId();
+                        String itemName = ttci.getItemName();
+                        Integer dataSourceId = ttci.getDataSourceId();
+                        Integer itemType = ttci.getItemType();
+                        if (itemType.equals(ConstantStr.ATTACH_ATTRIBUTES)) {
+                            AttachRawData attachRawData = rawDataDao.getAttachRawData(itemGroupId, dataSourceId, itemName);
+                            reportChartItemList.add(new ReportChartItem(
+                                    reportChartId, itemId, flage ? attachRawData.getDataValue() : attachRawData.getOrgDataValue(),
+                                    attachRawData.getDataValueTime(), null
+                            ));
+                            continue;
+                        }
+                        String valueList = null;
+                        String valueTimeList = null;
+                        String valueIndexList = null;
+                        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);
+                            }
+                            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);
+                                }
+                            }
+                            if (Blank.isNotEmpty(rawDataList)) {
+                                String dataType = rawDataList.get(0).getDataType();
+                                if (dataType.equals("boolean")) {
+                                    map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                } else {
+                                    try {
+                                        map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                    } catch (Exception e) {
+                                        map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
+                                    }
+                                }
+                            }
+                        } else {
+                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
+                        }
+                        valueList = map.get(flage ? "valueList" : "orgValueList");
+                        valueTimeList = map.get("valueTimeList");
+                        valueIndexList = map.get("valueIndexList");
+                        reportChartItemList.add(new ReportChartItem(
+                                reportChartId, itemId, valueList, valueTimeList, valueIndexList
+                        ));
+                    }
+                    //添加报表统计图相关的数据项
+                    if (Blank.isNotEmpty(reportChartItemList)) {
+                        reportTableDao.addReportChartItem(reportChartItemList);
+                    }
+                }
+            }
+        }
         log.info("自动报表,{},执行结束,时间为{}", reportTable, DateUtil.dateChangeStrYmdhmss(new Date()));
     }
 }

+ 40 - 39
chaunyi_opc/opc_da/src/main/resources/mapper/ReportTableDao.xml

@@ -17,12 +17,18 @@
         , table_template_id, item_id , place_holder, xaxis, yaxis, value_taking_mode, value_type, bucket_type,
             bucket_value, standby
     </sql>
+
     <sql id="tableTemplateChart">
         id
-        , table_template_id, chart_type, chart_name, value_taking_mode, bucket_type,
+        , table_template_id, chart_type, chart_name, value_taking_mode, value_type, bucket_type,
             bucket_value, standby
     </sql>
 
+    <sql id="tableTemplateChartItem">
+        id
+        , table_template_chart_id, item_id
+    </sql>
+
     <sql id="reportTable">
         id
         , report_table_type, table_template_id, user_id, report_table_name, report_table_data, start_time, end_time, current_num, version, create_time
@@ -50,7 +56,7 @@
 
     <sql id="reportChart">
         id
-        , report_table_id, chart_type, chart_name, value_type, standby
+        , report_table_id, template_chart_id, chart_type, chart_name, value_type, standby
     </sql>
 
     <sql id="reportChartItem">
@@ -161,15 +167,15 @@
     <insert id="addTableTemplateChartItem">
         insert into t_table_template_chart_item(table_template_chart_id, item_id) VALUES
         <foreach collection="tableTemplateChartItemList" item="tableTemplateChartItem" separator=",">
-            (#{tableTemplateChartId}, #{tableTemplateChartItem.tableTemplateChartId})
+            (#{tableTemplateChartId}, #{tableTemplateChartItem.itemId})
         </foreach>
     </insert>
 
     <insert id="addReportChart" parameterType="com.example.opc_common.entity.ReportChart"
             useGeneratedKeys="true"
             keyProperty="id">
-        insert into t_report_chart(report_table_id, chart_type, chart_name, value_type, standby)
-            value (#{reportTableId},#{chartType},#{chartName},#{valueType},#{standby})
+        insert into t_report_chart(report_table_id, template_chart_id, chart_type, chart_name, value_type, standby)
+            value (#{reportTableId},#{templateChartId},#{chartType},#{chartName},#{valueType},#{standby})
     </insert>
 
     <insert id="addReportChartItem">
@@ -639,12 +645,13 @@
         where auto_table_id=#{autoTableId})
     </select>
 
-    <select id="getTtiByTemplateId" resultType="com.example.opc_common.entity.TableTemplateTableItem">
+    <select id="getTttiByTemplateId" resultType="com.example.opc_common.entity.TableTemplateTableItem">
         SELECT tttti.id,
                tttti.table_template_id,
                tttti.item_id,
                ti.item_group_id,
                ti.item_name,
+               ti.item_type,
                tig.data_source_id,
                tttti.place_holder,
                tttti.xaxis,
@@ -761,7 +768,7 @@
         <include refid="tableTemplateChart"/>
         from
         t_table_template_chart
-        where id=#{tableTemplateId}
+        where table_template_id=#{tableTemplateId}
     </select>
 
     <resultMap type="com.example.opc_common.entity.TableTemplateChart" id="allTableTemplateChart">
@@ -779,49 +786,21 @@
             <id column="id" property="id"/>
             <id column="table_template_chart_id" property="tableTemplateChartId"/>
             <id column="item_id" property="itemId"/>
-            <id column="item_name" property="itemName"/>
-        </collection>
-    </resultMap>
-
-    <select id="getTableTemplateChartItemById" parameterType="INTEGER"
-            resultType="com.example.opc_common.entity.TableTemplateChartItem">
-        select tttci.id,
-               tttci.table_template_chart_id,
-               tttci.item_id,
-               ti.item_name
-        from t_table_template_chart_item tttci
-                 left join t_item ti ON tttci.item_id = ti.id
-        where tttci.table_template_chart_id = #{id}
-    </select>
-
-    <resultMap type="com.example.opc_common.entity.TableTemplateChart" id="allTableTemplateChart1">
-        <id property="id" column="id"/>
-        <result property="tableTemplateId" column="table_template_id"/>
-        <result property="chartType" column="chart_type"/>
-        <result property="chartName" column="chart_name"/>
-        <result property="valueTakingMode" column="value_taking_mode"/>
-        <result property="bucketType" column="bucket_type"/>
-        <result property="bucketValue" column="bucket_value"/>
-        <result property="standby" column="standby"/>
-        <collection column="id" property="tableTemplateChartItemList"
-                    ofType="com.example.opc_common.entity.TableTemplateChartItem"
-                    select="getTableTemplateChartItemById1">
-            <id column="id" property="id"/>
-            <id column="table_template_chart_id" property="tableTemplateChartId"/>
-            <id column="item_id" property="itemId"/>
             <id column="item_group_id" property="itemGroupId"/>
             <id column="item_name" property="itemName"/>
             <id column="data_source_id" property="dataSourceId"/>
+            <id column="item_type" property="itemType"/>
         </collection>
     </resultMap>
 
-    <select id="getTableTemplateChartItemById1" parameterType="INTEGER"
+    <select id="getTableTemplateChartItemById" parameterType="INTEGER"
             resultType="com.example.opc_common.entity.TableTemplateChartItem">
         select tttci.id,
                tttci.table_template_chart_id,
                tttci.item_id,
                ti.item_group_id,
                ti.item_name,
+               ti.item_type,
                tig.data_source_id
         from t_table_template_chart_item tttci
                  LEFT JOIN t_item ti ON tttci.item_id = ti.id
@@ -884,8 +863,30 @@
         select
         <include refid="reportTable"/>
         from t_report_table
-        where report_name=#{templateName}
+        where report_table_name=#{templateName}
         and table_template_id=#{id}
     </select>
 
+    <select id="getTtciByTtcId" resultType="com.example.opc_common.entity.TableTemplateChartItem">
+        select tttci.id,
+               tttci.table_template_chart_id,
+               tttci.item_id,
+               ti.item_group_id,
+               ti.item_name,
+               ti.item_type,
+               tig.data_source_id
+        from t_table_template_chart_item tttci
+                 LEFT JOIN t_item ti ON tttci.item_id = ti.id
+                 LEFT JOIN t_item_group tig ON ti.item_group_id = tig.id
+        where tttci.table_template_chart_id = #{tableTemplateChartId}
+    </select>
+
+    <select id="getTtcById" resultMap="allTableTemplateChart">
+        select
+        <include refid="tableTemplateChart"/>
+        from
+        t_table_template_chart
+        where id=#{id}
+    </select>
+
 </mapper>