Преглед на файлове

优化自动报表获取实时数据接口,定时器自动报表生成接口,优化报表设置定时时间接口,优化启动接口

zhoupeng преди 1 година
родител
ревизия
d195921594

+ 39 - 18
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/controller/ReportTableController.java

@@ -2,9 +2,13 @@ package com.example.opc_da.controller;
 
 import com.example.opc_common.entity.ReportTable;
 import com.example.opc_common.entity.TableTemplate;
+import com.example.opc_common.enums.ModelEnum;
+import com.example.opc_common.enums.OperationEnum;
 import com.example.opc_common.enums.ResultEnum;
+import com.example.opc_common.enums.ServerEnum;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.Result;
+import com.example.opc_da.annotation.WebLog;
 import com.example.opc_da.service.ReportTableService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -28,7 +32,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getSysTableTemplate")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getSysTableTemplate(String keyType, Integer dictId, String templateName) {
         if (Blank.isEmpty(keyType)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "系统报表模板参数不能为空");
@@ -43,7 +47,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getSysTableTemplateById/{id}")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getSysTableTemplateById(@PathVariable Integer id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -58,7 +62,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/addTableTemplate")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.ADD)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.ADD)
     public Result addTableTemplate(@RequestBody TableTemplate tableTemplate) {
         if (Blank.isEmpty(tableTemplate, tableTemplate.getTemplateName(), tableTemplate.getTemplateType(),
                 tableTemplate.getTemplateData())) {
@@ -74,7 +78,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/updateTableTemplate")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.UPDATE)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.UPDATE)
     public Result updateTableTemplate(@RequestBody TableTemplate tableTemplate) {
         return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表模板目前不支持修改");
 //        if (Blank.isEmpty(tableTemplate, tableTemplate.getId(), tableTemplate.getTemplateName(),
@@ -92,7 +96,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/updateTableTemplateNameById")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
     public Result updateTableTemplateNameById(Integer id, String templateName) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表id不能为空");
@@ -109,7 +113,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAllTableTemplate")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getAllTableTemplate(Integer page, Integer limit, String userId, Integer templateType) {
         return reportTableService.getAllTableTemplate(page, limit, userId, templateType);
     }
@@ -121,7 +125,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getTableTemplateById/{id}")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.SELECT)
     public Result getTableTemplateById(@PathVariable Integer id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -138,7 +142,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/delTableTemplateById")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.DELETE)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.TABLETEMPLATE, OperationEnum = OperationEnum.DELETE)
     public Result delTableTemplateById(Integer id, Integer isDelete) {
         if (Blank.isEmpty(id, isDelete)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -155,7 +159,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAllReportTable")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getAllReportTable(Integer page, Integer limit, Integer isAutoReport) {
         return reportTableService.getAllReportTable(page, limit, isAutoReport);
     }
@@ -167,7 +171,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getReportTableById")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getReportTableById(String id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -176,13 +180,28 @@ public class ReportTableController {
     }
 
     /**
+     * 通过id获取报表,不要data数据
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/getReportTableNoDataById")
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+    public Result getReportTableNoDataById(String id) {
+        if (Blank.isEmpty(id)) {
+            return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
+        }
+        return reportTableService.getReportTableNoDataById(id);
+    }
+
+    /**
      * 通过id获取打印报表
      *
      * @param id
      * @return
      */
     @GetMapping("/getPrintReportById/{id}")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getPrintReportById(@PathVariable String id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -197,7 +216,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/delReportTableById/{id}")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.DELETE)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.DELETE)
     public Result delReportTableById(@PathVariable String id) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -212,6 +231,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/delChReportTableList")
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.DELETE)
     public Result delChReportTableList(@RequestParam("idList") List<String> idList) {
         if (Blank.isEmpty(idList)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());
@@ -226,6 +246,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/setAutoTableTime")
+//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result setAutoTableTime(@RequestBody ReportTable reportTable) {
         if (Blank.isEmpty(reportTable, reportTable.getId(), reportTable.getReportTableType(), reportTable.getReportTableName())) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "id、名称、类型不能为空");
@@ -241,7 +262,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/runAutoTableById")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
     public Result runAutoTableById(String id, Integer runState) {
         if (Blank.isEmpty(id, runState)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "id,启停状态不能为空");
@@ -253,7 +274,7 @@ public class ReportTableController {
      * 查询报表数量
      */
     @GetMapping("/queryTableNum")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result queryTableNum() {
         return reportTableService.queryTableNum();
     }
@@ -265,7 +286,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/tableAssignUserById")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.ASSIGN)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.ASSIGN)
     public Result tableAssignUserById(@RequestBody ReportTable reportTable) {
         if (Blank.isEmpty(reportTable, reportTable.getId())) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表id不能为空");
@@ -281,7 +302,7 @@ public class ReportTableController {
      * @return
      */
     @PostMapping("/updateTableNameById")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.UPDATE)
     public Result updateTableNameById(String id, String reportTableName) {
         if (Blank.isEmpty(id)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "报表id不能为空");
@@ -300,7 +321,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAllOkReportTable")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getAllOkReportTable(Integer page, Integer limit, String reportTableName, Integer isAutoReport, Integer isDelete) {
         if (Blank.isEmpty(page, limit) || page < 1 || limit < 1) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "page,limit不能为空,且必须大于0");
@@ -318,7 +339,7 @@ public class ReportTableController {
      * @return
      */
     @GetMapping("/getAutoChReportTable")
-//    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.REPORTTABLE, OperationEnum = OperationEnum.SELECT)
     public Result getAutoChReportTable(Integer page, Integer limit, String autoTableId, String reportTableName) {
         if (Blank.isEmpty(page, limit, autoTableId) || page < 1 || limit < 1) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "page,limit不能为空,且必须大于0,自动报表的id不能为空");

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

@@ -1,9 +1,6 @@
 package com.example.opc_da.dao;
 
-import com.example.opc_common.entity.AttachRawData;
-import com.example.opc_common.entity.CursorRawData;
-import com.example.opc_common.entity.Item;
-import com.example.opc_common.entity.RawData;
+import com.example.opc_common.entity.*;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -54,6 +51,8 @@ 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,4 +66,11 @@ public interface RawDataDao {
     AttachRawData getAttachRawDataReal(Integer itemGroupId, Integer dataSourceId, String itemReadName);
 
     RawData getLatestRawData(Integer itemGroupId, Integer dataSourceId, String itemReadName);
+
+    List<RawData> getTableDataGroupByDay(Integer itemGroupId, Integer remainder, Integer dataSourceId, List<TableTemplateTableItem> tableTemplateItemList, 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);
+
 }

+ 6 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dao/ReportTableDao.java

@@ -47,6 +47,9 @@ public interface ReportTableDao {
     //通过id获取报表
     ReportTable getReportTableById(String id);
 
+    //通过id获取报表,但是没有data数据
+    ReportTable getReportTableNoDataById(String id);
+
     //通过id删除报表
     Integer delReportTableById(String id);
 
@@ -221,4 +224,7 @@ public interface ReportTableDao {
     //通过子报表id查看相应的主报表
     ReportTable getMainTableBychTableId(String chTableId);
 
+    List<TableTemplateTableItem> getTttiByTemplateIdGroup(Integer tableTemplateId);
+
+    List<TableTemplateTableItem> getTttiByGroup(Integer tableTemplateId, Integer itemGroupId, Integer dataSourceId, Integer bucketType);
 }

+ 2 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/ReportTableService.java

@@ -24,6 +24,8 @@ public interface ReportTableService {
 
     Result getReportTableById(String id);
 
+    Result getReportTableNoDataById(String id);
+
     Result getPrintReportById(String id);
 
     Result delReportTableById(String id);

+ 6 - 1
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java

@@ -357,6 +357,11 @@ public class ReportTableServiceImpl implements ReportTableService {
     }
 
     @Override
+    public Result getReportTableNoDataById(String id) {
+        return Result.ok(reportTableDao.getReportTableNoDataById(id));
+    }
+
+    @Override
     public Result getPrintReportById(String id) {
         ReportTable reportTable = reportTableDao.getReportTableById(id);
         if (Blank.isEmpty(reportTable)) {
@@ -549,7 +554,7 @@ public class ReportTableServiceImpl implements ReportTableService {
         if (!CronExpression.isValidExpression(cron)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "定时任务配置不正确,请重新配置");
         }
-        ReportTable oldReportTable = reportTableDao.getReportTableById(id);
+        ReportTable oldReportTable = reportTableDao.getReportTableNoDataById(id);
         if (oldReportTable.getRunState().equals(ConstantStr.START_UP)) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "自动报表现在处于启动状态,不允许修改定时时间");
         }

+ 325 - 92
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTableTask.java

@@ -74,7 +74,7 @@ public class ReportTableTask {
         List<TableTemplateTableItem> tableTemplateItemList = tableTemplate.getTableTemplateItemList();
         List<TableTemplateChart> tableTemplateChartList = tableTemplate.getTableTemplateChartList();
 
-        String reportTableId = IdUtil.createSnowflake(1, 1).nextId()+"";
+        String reportTableId = IdUtil.createSnowflake(1, 1).nextId() + "";
         //根据模板生成相应的报表
         ReportTable reportTable = new ReportTable(reportTableId,
                 tableTemplate.getTemplateType(), tableTemplateId, tableTemplate.getUserId(), tableTemplate.getTemplateName(),
@@ -269,7 +269,7 @@ public class ReportTableTask {
         List<TableTemplateTableItem> tableTemplateItemList = tableTemplate.getTableTemplateItemList();
         List<TableTemplateChart> tableTemplateChartList = tableTemplate.getTableTemplateChartList();
 
-        String reportTableId = IdUtil.createSnowflake(1, 1).nextId()+"";
+        String reportTableId = IdUtil.createSnowflake(1, 1).nextId() + "";
         //根据模板生成相应的报表
         ReportTable reportTable = new ReportTable(reportTableId,
                 tableTemplate.getTemplateType(), tableTemplateId, tableTemplate.getUserId(), tableTemplate.getTemplateName(),
@@ -407,7 +407,7 @@ public class ReportTableTask {
             throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "事件驱动显示数量设置不能为空");
         }
 
-        String reportTableId = IdUtil.createSnowflake(1, 1).nextId()+"";
+        String reportTableId = IdUtil.createSnowflake(1, 1).nextId() + "";
         //根据模板生成相应的报表
         ReportTable reportTable = new ReportTable(reportTableId,
                 tableTemplate.getTemplateType(), tableTemplateId, tableTemplate.getUserId(), tableTemplate.getTemplateName(),
@@ -512,7 +512,7 @@ public class ReportTableTask {
             throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "变量类型只能为单变量或者双变量");
         }
 
-        String reportTableId = IdUtil.createSnowflake(1, 1).nextId()+"";
+        String reportTableId = IdUtil.createSnowflake(1, 1).nextId() + "";
         //根据模板生成相应的报表
         ReportTable reportTable = new ReportTable(reportTableId,
                 tableTemplate.getTemplateType(), tableTemplateId, tableTemplate.getUserId(), tableTemplate.getTemplateName(),
@@ -762,10 +762,12 @@ public class ReportTableTask {
         if (Blank.isEmpty(tableTemplateId)) {
             return reportTable;
         }
+        //#查询报表模板
         TableTemplate tableTemplate = reportTableDao.getTableTemplateById(tableTemplateId);
         if (Blank.isEmpty(tableTemplate)) {
             return reportTable;
         }
+        //根据配置的cron,生成此报表这个时候的开始时间和结束时间
         String cron = reportTable.getCron();
         Date reportStartTime = reportTable.getStartTime();
         if (Blank.isEmpty(cron)) {
@@ -777,72 +779,186 @@ public class ReportTableTask {
         Date startTime = CronUtil.getTimeBefore(cron, reportTable.getStartTime());
         Date endTime = CronUtil.getTimeAfter(cron, startTime);
         //获取此报表管理的报表模板,所关联的表格数据项
-        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;
-                }
+        //通过时段类型,数据组id,数据源id,对数据项进行分组
+        List<TableTemplateTableItem> tableTemplateItemGroupList = reportTableDao.getTttiByTemplateIdGroup(tableTemplateId);
+        if (Blank.isNotEmpty(tableTemplateItemGroupList)) {
+            for (TableTemplateTableItem ttti : tableTemplateItemGroupList) {
+                Integer itemGroupId = ttti.getItemGroupId();
+                Integer dataSourceId = ttti.getDataSourceId();
                 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);
-                Map<String, String> map = new HashMap<>();
+                Integer bucketType = ttti.getBucketType();
+                //查询每个分组下的报表模板数据项信息
+                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;
-                    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);
+//                        rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
+                        rawDataList = rawDataDao.getTableDataGroupByDay(itemGroupId, remainder, 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.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
+                        rawDataList = rawDataDao.getTableDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateItemList, 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);
+                    //从临时表中,查出所有临时数据
+                    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 -> {
+                    //循环得到每个数据项的历史数据和临时数据,归属时间
+                    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 -> {
+                        //生成历史数据
+                        if (rawData.getItemGroupId().equals(itemGroupId1)
+                                && rawData.getDataSourceId().equals(dataSourceId1)
+                                && rawData.getItemName().equals(itemReadName)) {
+                            currentRawDataList.add(rawData);
+                        }
+                    });
+                    finalCursorRawDataList.forEach(currentRawData -> {
+                        //生成临时数据
+                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
+                                && currentRawData.getDataSourceId().equals(dataSourceId1)
+                                && currentRawData.getItemName().equals(itemReadName)) {
+                            currentCursorRawDataList.add(currentRawData);
+                        }
+                    });
+                    finalSqlCurrentYmdhList.forEach(currentRawData -> {
+                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
+                                && currentRawData.getDataSourceId().equals(dataSourceId1)
+                                && currentRawData.getItemName().equals(itemReadName)) {
+                            currentSqlYmdhList.add(currentRawData.getValueBelongTime());
+                        }
+                    });
+                    //根据历史数据和临时数据,计算出此数据项在报表中应该展示的数据,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);
                         }
                     }
-                    if (Blank.isNotEmpty(rawDataList)) {
-                        String dataType = rawDataList.get(0).getDataType();
+                    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 (dataType.equals("boolean")) {
-                            map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                            map = ReportTask.genBoolean(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                         } else {
                             try {
-                                map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                map = ReportTask.genBigDecimal(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                             } catch (Exception e) {
-                                map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
+                                map = ReportTask.genString(currentRawDataList1, 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");
-                reportTableItemList.add(new ReportTableItem(
-                        reportTableId, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
-                ));
+                    Integer valueType = t.getValueType();
+                    boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
+                    String valueList = map.get(flage ? "valueList" : "orgValueList");
+                    String valueTimeList = map.get("valueTimeList");
+                    String valueIndexList = map.get("valueIndexList");
+                    Integer itemId = t.getItemId();
+                    Integer xaxis = t.getXaxis();
+                    Integer yaxis = t.getYaxis();
+                    String standby = t.getStandby();
+                    //将数据项的信息放到集合中
+                    reportTableItemList.add(new ReportTableItem(
+                            reportTableId, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
+                    ));
+                });
+
+//                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);
+//                        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(), "目前还未适配此种类型的取值模式");
+//                        }
+//                        String valueList = map.get(flage ? "valueList" : "orgValueList");
+//                        String valueTimeList = map.get("valueTimeList");
+//                        String valueIndexList = map.get("valueIndexList");
+//                        reportTableItemList.add(new ReportTableItem(
+//                                reportTableId, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
+//                        ));
+//                    }
+//                }
             }
         }
+
         if (Blank.isNotEmpty(reportTableItemList)) {
             reportTable.setReportTableItemList(reportTableItemList);
         }
@@ -962,7 +1078,7 @@ public class ReportTableTask {
                     jsonObject.put("dataOrgValue", value);
                     if (Blank.isNotEmpty(dm) && dm.getModelType().equals(ConstantStr.VALUE_REPLACE)) {
                         jsonObject.put("dataValue", DataModel.valueReplace(dm, value.toString()));
-                    }else{
+                    } else {
                         if (javaType.toLowerCase().equals("boolean")) {
                             jsonObject.put("dataValue", value);
                         } else {
@@ -1003,81 +1119,198 @@ public class ReportTableTask {
         if (Blank.isEmpty(tableTemplate)) {
             log.info("报表模板不存在");
         }
-        //通过报表关联的模板,查询出模板对应的表格数据数据项信息
-        List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByTemplateId(tableTemplateId);
         //通过报表关联的模板,查询出模板对应的统计图,以及统计图数据项信息
         List<TableTemplateChart> tableTemplateChartList = reportTableDao.getTtcByTemplateId(tableTemplateId);
         //生成一张新的子报表,并添加相应的日志,以及用户组授权
-        String id = IdUtil.createSnowflake(1, 1).nextId()+"";
-        asyncAsyncTask.addHaveKeyChReport(reportTable,id,ConstantStr.AUTOMATIC_GENERATE_REPORT, null);
+        String id = IdUtil.createSnowflake(1, 1).nextId() + "";
+        asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.AUTOMATIC_GENERATE_REPORT, null);
         //根据报表的cron和开始、结束时间,生成此次执行报表抓取数据的开始时间和结束时间
         String cron = reportTable.getCron();
         Date startTime = CronUtil.mappingAutoTime(cron, reportTable.getStartTime());
         Date endTime = CronUtil.getTimeAfter(cron, startTime);
-        //根据模板的取值条件获取相应的数据
-        if (Blank.isNotEmpty(tableTemplateItemList)) {
-            for (TableTemplateTableItem t : tableTemplateItemList) {
-                Integer itemGroupId = t.getItemGroupId();
-                if (Blank.isEmpty(itemGroupId)) {
-                    continue;
-                }
+        //获取此报表管理的报表模板,所关联的表格数据项
+        List<ReportTableItem> reportTableItemList = new ArrayList<>();
+        //通过时段类型,数据组id,数据源id,对数据项进行分组
+        List<TableTemplateTableItem> tableTemplateItemGroupList = reportTableDao.getTttiByTemplateIdGroup(tableTemplateId);
+        if (Blank.isNotEmpty(tableTemplateItemGroupList)) {
+            for (TableTemplateTableItem ttti : tableTemplateItemGroupList) {
+                Integer itemGroupId = ttti.getItemGroupId();
+                Integer dataSourceId = ttti.getDataSourceId();
                 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);
-                Map<String, String> map = new HashMap<>();
+                Integer bucketType = ttti.getBucketType();
+                //查询每个分组下的报表模板数据项信息
+                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;
-                    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);
+//                        rawDataList = rawDataDao.getTableDataByDay(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
+                        rawDataList = rawDataDao.getTableDataGroupByDay(itemGroupId, remainder, 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.getTableData(itemGroupId, remainder, dataSourceId, itemName, startBelongTime, endBelongTime);
+                        rawDataList = rawDataDao.getTableDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateItemList, 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);
+                    //从临时表中,查出所有临时数据
+                    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 -> {
+                    //循环得到每个数据项的历史数据和临时数据,归属时间
+                    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 -> {
+                        //生成历史数据
+                        if (rawData.getItemGroupId().equals(itemGroupId1)
+                                && rawData.getDataSourceId().equals(dataSourceId1)
+                                && rawData.getItemName().equals(itemReadName)) {
+                            currentRawDataList.add(rawData);
+                        }
+                    });
+                    finalCursorRawDataList.forEach(currentRawData -> {
+                        //生成临时数据
+                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
+                                && currentRawData.getDataSourceId().equals(dataSourceId1)
+                                && currentRawData.getItemName().equals(itemReadName)) {
+                            currentCursorRawDataList.add(currentRawData);
+                        }
+                    });
+                    finalSqlCurrentYmdhList.forEach(currentRawData -> {
+                        if (currentRawData.getItemGroupId().equals(itemGroupId1)
+                                && currentRawData.getDataSourceId().equals(dataSourceId1)
+                                && currentRawData.getItemName().equals(itemReadName)) {
+                            currentSqlYmdhList.add(currentRawData.getValueBelongTime());
+                        }
+                    });
+                    //根据历史数据和临时数据,计算出此数据项在报表中应该展示的数据,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);
                         }
                     }
-                    if (Blank.isNotEmpty(rawDataList)) {
-                        String dataType = rawDataList.get(0).getDataType();
+                    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 (dataType.equals("boolean")) {
-                            map = ReportTask.genBoolean(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                            map = ReportTask.genBoolean(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                         } else {
                             try {
-                                map = ReportTask.genBigDecimal(rawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                map = ReportTask.genBigDecimal(currentRawDataList1, startTime, endTime, valueTakingMode, bucketType, bucketValue);
                             } catch (Exception e) {
-                                map = ReportTask.genString(rawDataList, startTime, endTime, bucketType, bucketValue);
+                                map = ReportTask.genString(currentRawDataList1, 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");
-                reportTableDao.addReportTableItem(new ReportTableItem(
-                        id, itemId, valueType, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
-                ));
+                    Integer valueType = t.getValueType();
+                    boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
+                    String valueList = map.get(flage ? "valueList" : "orgValueList");
+                    String valueTimeList = map.get("valueTimeList");
+                    String valueIndexList = map.get("valueIndexList");
+                    Integer itemId = t.getItemId();
+                    Integer xaxis = t.getXaxis();
+                    Integer yaxis = t.getYaxis();
+                    String standby = t.getStandby();
+                    //将数据项的信息放到集合中
+                    reportTableItemList.add(new ReportTableItem(
+                            id, itemId, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
+                    ));
+                });
             }
         }
+        if (Blank.isNotEmpty(reportTableItemList)) {
+            reportTable.setReportTableItemList(reportTableItemList);
+        }
+
+        //根据模板的取值条件获取相应的数据
+//        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);
+//                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(), "目前还未适配此种类型的取值模式");
+//                }
+//                String valueList = map.get(flage ? "valueList" : "orgValueList");
+//                String valueTimeList = map.get("valueTimeList");
+//                String valueIndexList = map.get("valueIndexList");
+//                reportTableDao.addReportTableItem(new ReportTableItem(
+//                        id, itemId, valueType, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
+//                ));
+//            }
+//        }
         if (Blank.isNotEmpty(tableTemplateChartList)) {
             for (TableTemplateChart ttc : tableTemplateChartList) {
                 Integer valueTakingMode = ttc.getValueTakingMode();

+ 109 - 3
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTask.java

@@ -220,11 +220,11 @@ public class ReportTask {
         BigDecimal value = null;
         if (Blank.isNotEmpty(bigDecimalList)) {
             if (valueTakingMode.equals(ConstantStr.AVERAGE_VALUE)) {
-                value=new BigDecimal(bigDecimalList.stream().mapToDouble(BigDecimal::doubleValue).average().orElse(0));
+                value = new BigDecimal(bigDecimalList.stream().mapToDouble(BigDecimal::doubleValue).average().orElse(0));
             } else if (valueTakingMode.equals(ConstantStr.MAX_VALUE)) {
-                value=Collections.max(bigDecimalList);
+                value = Collections.max(bigDecimalList);
             } else if (valueTakingMode.equals(ConstantStr.MIN_VALUE)) {
-                value=Collections.min(bigDecimalList);
+                value = Collections.min(bigDecimalList);
             } else if (valueTakingMode.equals(ConstantStr.INSTANTANEOUS_VALUE)) {
                 for (int i = 0; i < bigDecimalList.size(); i++) {
                     BigDecimal bigDecimal = bigDecimalList.get(i);
@@ -513,6 +513,112 @@ public class ReportTask {
         return rawDataList;
     }
 
+    public static Map<String, String> genAutoData(List<RawData> rawDataList, List<CursorRawData> cursorRawDataList,
+                                                  Date startTime, Date endTime, Integer valueTakingMode, Integer bucketType, Integer bucketValue) {
+        Map<String, String> map = new HashMap<>();
+        String pattern = null;
+        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
+            pattern = ConstantStr.TIME_DAY_STR;
+        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)) {
+            pattern = ConstantStr.TIME_HOUR_STR;
+        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE)) {
+            pattern = ConstantStr.TIME_MINUTE_STR;
+        } else if (bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
+            pattern = ConstantStr.TIME_SECOND_STR;
+        }
+        //开始时间事件戳
+        long startTimeTime = startTime.getTime();
+        long endTimeTime;
+        int timeLength = DateUtil.timeDifference(startTime, endTime, pattern, bucketValue);
+        if (Blank.isNotEmpty(rawDataList)) {
+            if (Blank.isNotEmpty(cursorRawDataList)) {
+                //如果历史数据表不为空,临时数据表不为空
+
+            } else {
+                //如果历史数据表不为空,临时数据表为空
+
+            }
+        } else {
+            if (Blank.isNotEmpty(cursorRawDataList)) {
+                //如果历史数据表为空,临时数据表不为空
+                CursorRawData cursorRawData = cursorRawDataList.get(0);
+                String dataType = cursorRawData.getDataType();
+                if (dataType.toLowerCase().equals("boolean")) {
+                    List<Boolean> orgValueList = new ArrayList<>();
+                    List<Boolean> valueList = new ArrayList<>();
+                    List<String> valueTimeList = new ArrayList<>();
+                    List<Long> valueIndexList = new ArrayList<>();
+                    for (int i = 0; i < timeLength; i++) {
+                        //每次循环,算出结束时间,最后并将结束时间赋值给开始时间
+                        if (i != timeLength - 1) {
+                            endTimeTime = DateUtil.addTimeStamp(startTimeTime, pattern, bucketValue);
+                        } else {
+                            endTimeTime = endTime.getTime();
+                        }
+                        List<Boolean> orgList = new ArrayList<>();
+                        List<Boolean> list = new ArrayList<>();
+                        for (int j = 0; j < cursorRawDataList.size(); j++) {
+                            CursorRawData cursorRawData1 = cursorRawDataList.get(j);
+                            long time = DateUtil.strYmdhmssChangeDate(cursorRawData1.getDataValueTime()).getTime();
+                            if (startTimeTime <= time && time < endTimeTime) {
+                                orgList.add(JSON.parseObject(cursorRawData1.getOrgDataValue(), Boolean.class));
+                                list.add(JSON.parseObject(cursorRawData1.getDataValue(), Boolean.class));
+                            }
+                            cursorRawDataList.remove(j);
+                            j--;
+                        }
+                        orgValueList.add(genBooleanValue(orgList, valueTakingMode));
+                        valueList.add(genBooleanValue(list, valueTakingMode));
+                        valueTimeList.add(DateUtil.dateChangeStrYmdhmss(new Date(startTimeTime)));
+                        valueIndexList.add(((long) i));
+                        startTimeTime = endTimeTime;
+                    }
+                    map.put("orgValueList", ArrayUtil.listToStr(orgValueList));
+                    map.put("valueList", ArrayUtil.listToStr(valueList));
+                    map.put("valueTimeList", ArrayUtil.listToStr(valueTimeList));
+                    map.put("valueIndexList", ArrayUtil.listToStr(valueIndexList));
+                } else {
+                    try {
+                        List<BigDecimal> orgValueList = new ArrayList<>();
+                        List<BigDecimal> valueList = new ArrayList<>();
+                        List<String> valueTimeList = new ArrayList<>();
+                        List<Long> valueIndexList = new ArrayList<>();
+
+                    } catch (Exception e) {
+                        List<String> orgValueList = new ArrayList<>();
+                        List<String> valueList = new ArrayList<>();
+                        List<String> valueTimeList = new ArrayList<>();
+                        List<Long> valueIndexList = new ArrayList<>();
+
+                    }
+                }
+            } else {
+                //如果历史数据表为空,临时数据表为空,则所有数据为空
+                List<String> orgValueList = new ArrayList<>();
+                List<String> valueList = new ArrayList<>();
+                List<String> valueTimeList = new ArrayList<>();
+                List<Long> valueIndexList = new ArrayList<>();
+                for (int i = 0; i < timeLength; i++) {
+                    if (i != timeLength - 1) {
+                        endTimeTime = DateUtil.addTimeStamp(startTimeTime, pattern, bucketValue);
+                    } else {
+                        endTimeTime = endTime.getTime();
+                    }
+                    orgValueList.add(null);
+                    valueList.add(null);
+                    valueTimeList.add(DateUtil.dateChangeStrYmdhmss(new Date(startTimeTime)));
+                    valueIndexList.add(((long) i));
+                    startTimeTime = endTimeTime;
+                }
+                map.put("orgValueList", ArrayUtil.listToStr(orgValueList));
+                map.put("valueList", ArrayUtil.listToStr(valueList));
+                map.put("valueTimeList", ArrayUtil.listToStr(valueTimeList));
+                map.put("valueIndexList", ArrayUtil.listToStr(valueIndexList));
+            }
+        }
+        return map;
+    }
+
     public static Map<String, String> genBoolean(RawData rawData) {
         String dataValue = rawData.getDataValue();
         String dataValueTime = rawData.getDataValueTime();

+ 57 - 0
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/RawDataDao.xml

@@ -231,6 +231,20 @@
         ORDER BY value_belong_time
     </select>
 
+    <select id="getTableDataGroup" 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="tableTemplateItemList" item="tableTemplateItem" separator="," open="(" close=")">
+            #{tableTemplateItem.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"/>
@@ -243,6 +257,20 @@
         ORDER BY value_belong_time
     </select>
 
+    <select id="getTableDataGroupByDay" 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="tableTemplateItemList" item="tableTemplateItem" separator="," open="(" close=")">
+            #{tableTemplateItem.itemReadName}
+        </foreach>
+        AND DATE_FORMAT(value_belong_time,'%Y-%m-%d') BETWEEN #{startBelongTime} AND #{endBelongTime}
+        ORDER BY value_belong_time
+    </select>
+
     <select id="getEventMeetIndexList" resultType="java.lang.Long">
         SELECT
         data_index
@@ -291,6 +319,19 @@
         ORDER BY data_index
     </select>
 
+    <select id="getTableCursorDataGroup" 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>
+        ORDER BY data_index
+    </select>
+
     <select id="getCursorYmdh" resultType="java.lang.String">
         select value_belong_time
         from t_raw_data
@@ -306,6 +347,21 @@
         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"/>
@@ -361,4 +417,5 @@
         AND item_name = #{itemReadName}
         ORDER BY create_time limit 1
     </select>
+
 </mapper>

+ 57 - 3
cqcy-ei/cqcy-ei-da/src/main/resources/mapper/ReportTableDao.xml

@@ -438,6 +438,13 @@
         where id = #{id}
     </select>
 
+<!--    <select id="getTableTemplateById" resultMap="allTableTemplate">-->
+<!--        select-->
+<!--        <include refid="tableTemplate"/>-->
+<!--        from t_table_template-->
+<!--        where id = #{id}-->
+<!--    </select>-->
+
     <select id="getTableTemplateByNameNoId" resultType="com.example.opc_common.entity.TableTemplate">
         select
         <include refid="tableTemplate"/>
@@ -457,11 +464,11 @@
 
     <select id="getReportTableByNameNoId" resultType="com.example.opc_common.entity.ReportTable">
         select
-        <include refid="reportTable"/>
+        <include refid="reportTableNoData"/>
         from t_report_table
-        where id != #{id}
-        and user_id = #{userId}
+        where user_id = #{userId}
         and report_table_name = #{reportTableName}
+        and id != #{id}
     </select>
 
     <select id="getReportTableCount" resultType="java.lang.Long">
@@ -492,6 +499,13 @@
         where id = #{id}
     </select>
 
+    <select id="getReportTableNoDataById" resultType="com.example.opc_common.entity.ReportTable">
+        select
+        <include refid="reportTableCronNoData"/>
+        from t_report_table
+        where id = #{id}
+    </select>
+
     <select id="queryTableNum" resultType="java.lang.Integer">
         SELECT COUNT(*)
         FROM t_report_table
@@ -1162,4 +1176,44 @@
         where id = (select auto_table_id from t_table_auto_log where auto_ch_table_id=#{chTableId})
     </select>
 
+    <select id="getTttiByTemplateIdGroup" resultType="com.example.opc_common.entity.TableTemplateTableItem">
+        SELECT ti.item_group_id,
+               tig.data_source_id,
+               tttti.bucket_type
+        FROM t_table_template_table_item tttti
+                 LEFT JOIN t_item ti ON tttti.item_id = ti.id
+                 LEFT JOIN t_item_group tig ON ti.item_group_id = tig.id
+        WHERE tttti.table_template_id = #{tableTemplateId}
+        GROUP BY tttti.bucket_type,
+                 ti.item_group_id,
+                 tig.data_source_id
+    </select>
+
+    <select id="getTttiByGroup" 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_read_name,
+               ti.item_type,
+               tig.data_source_id,
+               tttti.time_item_type,
+               tttti.place_holder,
+               tttti.xaxis,
+               tttti.yaxis,
+               tttti.value_taking_mode,
+               tttti.value_type,
+               tttti.bucket_type,
+               tttti.bucket_value,
+               tttti.standby
+        FROM t_table_template_table_item tttti
+                 LEFT JOIN t_item ti ON tttti.item_id = ti.id
+                 LEFT JOIN t_item_group tig ON ti.item_group_id = tig.id
+        WHERE tttti.table_template_id = #{tableTemplateId}
+          AND ti.item_group_id = #{itemGroupId}
+          AND tig.data_source_id = #{dataSourceId}
+          AND tttti.bucket_type = #{bucketType}
+    </select>
+
 </mapper>