From a3a0726158dc82590ad591ca9b56f17c31fe9951 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期一, 04 十一月 2024 17:34:19 +0800
Subject: [PATCH] 计划数据

---
 iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/PlanItemApi.java                   |    6 ++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/plan/PlanItemApiImpl.java               |   19 ++++++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java |   58 ++++++++++++------
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/vo/PlanItemValueExportVO.java     |    2 
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java |   48 +++++++++++-----
 iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/dto/ApiPlanDataDTO.java            |   22 +++++++
 6 files changed, 119 insertions(+), 36 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/PlanItemApi.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/PlanItemApi.java
index 35bfb3c..a5f8c9b 100644
--- a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/PlanItemApi.java
+++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/PlanItemApi.java
@@ -1,5 +1,6 @@
 package com.iailab.module.data.api.plan;
 
+import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
 import com.iailab.module.data.common.ApiDataQueryDTO;
 import com.iailab.module.data.common.ApiDataValueDTO;
 import com.iailab.module.data.enums.ApiConstants;
@@ -9,6 +10,7 @@
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.LinkedHashMap;
 import java.util.List;
 
 /**
@@ -25,4 +27,8 @@
     @PostMapping(PREFIX + "/query-plan/history-value")
     @Operation(summary = "查询计划历史值")
     List<ApiDataValueDTO> queryPlanItemHistoryValue(@RequestBody ApiDataQueryDTO dto);
+
+    @PostMapping(PREFIX + "/query-plans/record-value")
+    @Operation(summary = "查询计划记录")
+    LinkedHashMap<String, List<ApiPlanDataDTO>> queryPlanItemRecordValue(@RequestBody ApiDataQueryDTO dto);
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/dto/ApiPlanDataDTO.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/dto/ApiPlanDataDTO.java
new file mode 100644
index 0000000..0bf7e81
--- /dev/null
+++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/plan/dto/ApiPlanDataDTO.java
@@ -0,0 +1,22 @@
+package com.iailab.module.data.api.plan.dto;
+
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2024年11月04日
+ */
+@Data
+@Tag(name = "计划值")
+public class ApiPlanDataDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String startTime;
+
+    private String endTime;
+
+}
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java
index f2f803f..c44bb02 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/controller/admin/ApiDataController.java
@@ -1,6 +1,5 @@
 package com.iailab.module.data.api.controller.admin;
 
-import com.iailab.framework.apilog.core.annotation.ApiAccessLog;
 import com.iailab.framework.common.pojo.CommonResult;
 import com.iailab.framework.common.util.date.DateUtils;
 import com.iailab.framework.common.util.object.ConvertUtils;
@@ -12,6 +11,7 @@
 import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO;
 import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO;
 import com.iailab.module.data.api.plan.PlanItemApi;
+import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
 import com.iailab.module.data.api.point.DataPointApi;
 import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
 import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
@@ -28,7 +28,7 @@
 import com.iailab.module.data.api.dto.DeviceValueDTO;
 import com.iailab.module.data.common.utils.ApiSecurityUtils;
 import com.iailab.module.data.plan.item.service.PlanItemService;
-import com.iailab.module.data.point.vo.PointValueExportVO;
+import com.iailab.module.data.point.vo.DaPointExcelVO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
@@ -37,7 +37,6 @@
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -46,12 +45,9 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.iailab.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static com.iailab.framework.common.pojo.CommonResult.success;
 
 /**
@@ -216,8 +212,23 @@
             apiSecurityUtils.validate(request);
             result = planItemApi.queryPlanItemHistoryValue(dto);
             return new CommonResult<List<ApiDataValueDTO>>().setData(result);
-        }  catch (Exception ex) {
+        } catch (Exception ex) {
             return new CommonResult<List<ApiDataValueDTO>>().setMsg(ex.getMessage());
+        }
+    }
+
+    @PermitAll
+    @PostMapping("/query-plan/record-value")
+    @Operation(summary = "查询单个计划历史值")
+    public CommonResult<LinkedHashMap<String, List<ApiPlanDataDTO>>> queryPlanItemRecordValue(HttpServletResponse response, HttpServletRequest
+            request, @RequestBody ApiDataQueryDTO dto) {
+        LinkedHashMap<String, List<ApiPlanDataDTO>> result = new LinkedHashMap<>();
+        try {
+            apiSecurityUtils.validate(request);
+            result = planItemApi.queryPlanItemRecordValue(dto);
+            return new CommonResult<LinkedHashMap<String, List<ApiPlanDataDTO>>>().setData(result);
+        } catch (Exception ex) {
+            return new CommonResult<LinkedHashMap<String, List<ApiPlanDataDTO>>>().setMsg(ex.getMessage());
         }
     }
 
@@ -226,13 +237,16 @@
             request, @RequestBody ApiDataQueryDTO dto) {
 
         BarLineDTO CommonResult = new BarLineDTO();
+
         try {
             apiSecurityUtils.validate(request);
             List<String> legend = new ArrayList<>();
             List<SeriesItem> series = new ArrayList<>();
-            String endDateStr = dto.getEnd() == null ? DateUtils.format(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) : DateUtils.format(dto.getEnd(),  DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
-            Date endDate = DateUtils.parse(endDateStr, "yyyy-MM-dd HH:mm");
-            Date startDate = dto.getStart() == null ? DateUtils.addDateHours(endDate, -2) : dto.getStart();
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.MILLISECOND, 0);
+            calendar.set(Calendar.SECOND, 0);
+            Date endDate = dto.getEnd() == null ? DateUtils.addDateHours(calendar.getTime(), 2) : dto.getEnd();
+            Date startDate = dto.getStart() == null ? calendar.getTime() : dto.getStart();
             List<String> categories = DateUtils.getTimeScale(startDate, endDate, dto.getGranularity() == null ? 60 : dto.getGranularity());
             if (CollectionUtils.isEmpty(dto.getItemNos())) {
                 return new CommonResult<BarLineDTO>().setData(CommonResult);
@@ -268,24 +282,28 @@
         return new CommonResult<BarLineDTO>().setData(CommonResult);
     }
 
-    @GetMapping("/export-plan/history-value")
+    @PostMapping("/export-plan/history-value")
     @Operation(summary = "导出计划数据")
-    public void exportPlanHistoryValue(@RequestParam("itemNo") String itemNo,
-                                 @RequestParam("start") String start,
-                                 @RequestParam("end") String end,
-                                 HttpServletResponse response) throws IOException {
+    public void exportPlanHistoryValue(HttpServletResponse response, HttpServletRequest
+            request, @RequestBody ApiDataQueryDTO dto) throws IOException {
+        //apiSecurityUtils.validate(request);
         Calendar calendar = Calendar.getInstance();
         calendar.set(Calendar.MILLISECOND, 0);
         calendar.set(Calendar.SECOND, 0);
-        Date startDate = StringUtils.isBlank(start) ? DateUtils.addDateHours(calendar.getTime(), 0) : DateUtils.parse(start, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
-        Date endDate = StringUtils.isBlank(end) ? DateUtils.addDateHours(calendar.getTime(), 3) : DateUtils.parse(end, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
+        Date endDate = dto.getEnd() == null ? DateUtils.addDateHours(calendar.getTime(), 2) : dto.getEnd();
+        Date startDate = dto.getStart() == null ? calendar.getTime() : dto.getStart();
         ApiDataQueryDTO queryDto = new ApiDataQueryDTO();
-        queryDto.setItemNo(itemNo);
+        queryDto.setItemNo(dto.getItemNo());
         queryDto.setStart(startDate);
         queryDto.setEnd(endDate);
         List<ApiDataValueDTO> list = planItemApi.queryPlanItemHistoryValue(queryDto);
-        List<PlanItemValueExportVO> exportList = ConvertUtils.sourceToTarget(list, PlanItemValueExportVO.class);
-        ExcelUtils.write(response, "计划数据.xls", "数据", PlanItemValueExportVO.class, exportList);
+        List<PlanItemValueExportVO> exportList = list.stream().map(item -> {
+            PlanItemValueExportVO exportVO = new PlanItemValueExportVO();
+            exportVO.setDataTime(DateUtils.format(item.getDataTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
+            exportVO.setDataValue(new BigDecimal(item.getDataValue()).setScale(0, BigDecimal.ROUND_HALF_UP).toString());
+            return exportVO;
+        }).collect(Collectors.toList());
+        ExcelUtils.write(response, "计划数据.xls", "计划数据", PlanItemValueExportVO.class, exportList);
     }
 
     @PermitAll
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/plan/PlanItemApiImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/plan/PlanItemApiImpl.java
index e679c6b..46f93e7 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/plan/PlanItemApiImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/plan/PlanItemApiImpl.java
@@ -1,14 +1,18 @@
 package com.iailab.module.data.api.plan;
 
 import com.iailab.framework.common.util.object.ConvertUtils;
+import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
 import com.iailab.module.data.common.ApiDataQueryDTO;
 import com.iailab.module.data.common.ApiDataValueDTO;
 import com.iailab.module.data.plan.item.collection.PlanItemCollector;
+import com.iailab.module.data.plan.item.vo.PlanItemDataVO;
 import com.iailab.module.data.plan.item.vo.PlanItemValueVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.LinkedHashMap;
 import java.util.List;
 
 /**
@@ -18,7 +22,7 @@
  */
 @RestController // 提供 RESTful API 接口,给 Feign 调用
 @Validated
-public class PlanItemApiImpl implements PlanItemApi{
+public class PlanItemApiImpl implements PlanItemApi {
 
     @Autowired
     private PlanItemCollector planItemCollector;
@@ -27,4 +31,17 @@
         List<PlanItemValueVO> list = planItemCollector.queryValue(dto.getItemNo(), dto.getStart(), dto.getEnd());
         return ConvertUtils.sourceToTarget(list, ApiDataValueDTO.class);
     }
+
+    public LinkedHashMap<String, List<ApiPlanDataDTO>> queryPlanItemRecordValue(ApiDataQueryDTO dto) {
+        LinkedHashMap<String, List<ApiPlanDataDTO>> result = new LinkedHashMap<>();
+        if (CollectionUtils.isEmpty(dto.getItemNos())) {
+            return result;
+        }
+        dto.getItemNos().forEach(item -> {
+            List<PlanItemDataVO> list = planItemCollector.getSourceValue(item, dto.getStart(), dto.getEnd());
+            result.put(item, ConvertUtils.sourceToTarget(list, ApiPlanDataDTO.class));
+        });
+        return result;
+    }
+
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
index e8f862b..e46e544 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/collection/PlanItemCollector.java
@@ -34,8 +34,6 @@
     public List<PlanItemValueVO> queryValue(String itemNo, Date startTime, Date endTime) {
         List<PlanItemValueVO> result = new ArrayList<>();
         PlanItemEntity itemEntity = planItemService.getInfoByNo(itemNo);
-        Map<String, Object> params = new HashMap<String, Object>();
-
         PlanDataSetEntity dataSet = planDataSetService.get(itemEntity.getDataSet());
         if (dataSet == null) {
             log.warn("数据集不能为空");
@@ -45,24 +43,14 @@
             log.warn("数据源不能为空");
             return null;
         }
+        Map<String, Object> params = getSqlParams(dataSet, startTime, endTime);
         DataContextHolder.setDataSourceId(Long.valueOf(dataSet.getDataSource()));
-
-        params.put("selectSql", " plan_t.start_time, plan_t.end_time");
-        params.put("viewSql", dataSet.getQuerySql());
-        StringBuilder whereSql = new StringBuilder();
-        String startStr = DateUtils.format(startTime, DateUtils.DATE_NUMBER_PATTERN);
-        String endStr = DateUtils.format(endTime, DateUtils.DATE_NUMBER_PATTERN);
-        whereSql.append(" plan_t.start_time <= " )
-                .append(endStr)
-                .append(" and plan_t.end_time >= ")
-                .append(startStr);
-        params.put("whereSql", whereSql.toString());
         List<PlanItemDataVO> dataList = planItemService.getSourceValue(params);
 
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(startTime);
-        int dataLength = (int)((endTime.getTime() - startTime.getTime()) / (1000 * 60)) + 1;
-        for (int i = 0; i < dataLength; i ++) {
+        int dataLength = (int) ((endTime.getTime() - startTime.getTime()) / (1000 * 60)) + 1;
+        for (int i = 0; i < dataLength; i++) {
             PlanItemValueVO itemValue = new PlanItemValueVO();
             Date dataTime = calendar.getTime();
             itemValue.setDataTime(dataTime);
@@ -82,4 +70,34 @@
         }
         return result;
     }
+
+    public List<PlanItemDataVO> getSourceValue(String itemNo, Date startTime, Date endTime) {
+        PlanItemEntity itemEntity = planItemService.getInfoByNo(itemNo);
+        PlanDataSetEntity dataSet = planDataSetService.get(itemEntity.getDataSet());
+        if (dataSet == null) {
+            log.warn("数据集不能为空");
+            return null;
+        }
+        if (StringUtils.isEmpty(dataSet.getDataSource())) {
+            log.warn("数据源不能为空");
+            return null;
+        }
+        Map<String, Object> params = getSqlParams(dataSet, startTime, endTime);
+        return planItemService.getSourceValue(params);
+    }
+
+    private Map<String, Object> getSqlParams(PlanDataSetEntity dataSet, Date startTime, Date endTime) {
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("selectSql", " plan_t.start_time, plan_t.end_time");
+        params.put("viewSql", dataSet.getQuerySql());
+        StringBuilder whereSql = new StringBuilder();
+        String startStr = DateUtils.format(startTime, DateUtils.DATE_NUMBER_PATTERN);
+        String endStr = DateUtils.format(endTime, DateUtils.DATE_NUMBER_PATTERN);
+        whereSql.append(" plan_t.start_time <= ")
+                .append(endStr)
+                .append(" and plan_t.end_time >= ")
+                .append(startStr);
+        params.put("whereSql", whereSql.toString());
+        return params;
+    }
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/vo/PlanItemValueExportVO.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/vo/PlanItemValueExportVO.java
index f962918..4230d05 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/vo/PlanItemValueExportVO.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/plan/item/vo/PlanItemValueExportVO.java
@@ -5,6 +5,8 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * @author PanZhibao
  * @Description

--
Gitblit v1.9.3