From 2cb72fa6266cc5892cf6d53c3d6ca0cf492a954d Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期一, 20 一月 2025 14:01:16 +0800
Subject: [PATCH] 指标查询: getInfoByIds queryIndItemHistoryValue bug

---
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/impl/IndItemServiceImpl.java |    6 +++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/IndItemService.java          |    3 +
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java                   |   35 ++++++++++++++++-
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java         |   53 ++++++++++++++++++--------
 iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/IndItemApi.java                       |    5 ++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java          |    4 +-
 6 files changed, 85 insertions(+), 21 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/IndItemApi.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/IndItemApi.java
index 0fc23d4..0e0fe93 100644
--- a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/IndItemApi.java
+++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/ind/IndItemApi.java
@@ -10,6 +10,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author PanZhibao
@@ -33,4 +34,8 @@
     @GetMapping(PREFIX + "/info/id/{id}")
     @Operation(summary = "根据测点编号查询测点信息")
     ApiIndItemDTO getInfoById(@PathVariable("id") String id);
+
+    @PostMapping(PREFIX + "/info/ids")
+    @Operation(summary = "根据多个id查询指标数据信息")
+    List<ApiIndItemDTO> getInfoByIds(@RequestParam("indIds") Set<String> indIds);
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java
index 93f346f..317e493 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/ind/IndItemApiImpl.java
@@ -5,13 +5,17 @@
 import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO;
 import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO;
 import com.iailab.module.data.ind.collection.IndItemCollector;
+import com.iailab.module.data.ind.item.entity.IndItemEntity;
 import com.iailab.module.data.ind.item.service.IndItemService;
 import com.iailab.module.data.ind.item.vo.IndItemValueVO;
 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.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author PanZhibao
@@ -31,17 +35,44 @@
     @Override
     public List<ApiIndItemValueDTO> queryIndItemDefaultValue(String itemNo){
         List<IndItemValueVO> list = indItemCollector.queryValue(itemNo);
-        return ConvertUtils.sourceToTarget(list, ApiIndItemValueDTO.class);
+        List<ApiIndItemValueDTO> result = new ArrayList<>(list.size());
+        list.forEach(item -> {
+            if (item != null) {
+                ApiIndItemValueDTO indItemValueDTO = new ApiIndItemValueDTO();
+                indItemValueDTO.setDataTime(item.getDataTime());
+                indItemValueDTO.setDataValue(item.getDataValue().doubleValue());
+                result.add(indItemValueDTO);
+            }
+        });
+        return result;
     }
 
     @Override
     public List<ApiIndItemValueDTO> queryIndItemHistoryValue(ApiIndItemQueryDTO dto) {
         List<IndItemValueVO> list = indItemCollector.queryValue(dto.getItemNo(), dto.getStart(), dto.getEnd());
-        return ConvertUtils.sourceToTarget(list, ApiIndItemValueDTO.class);
+        List<ApiIndItemValueDTO> result = new ArrayList<>(list.size());
+        list.forEach(item -> {
+            if (item != null) {
+                ApiIndItemValueDTO indItemValueDTO = new ApiIndItemValueDTO();
+                indItemValueDTO.setDataTime(item.getDataTime());
+                indItemValueDTO.setDataValue(item.getDataValue().doubleValue());
+                result.add(indItemValueDTO);
+            }
+        });
+        return result;
     }
 
     @Override
     public ApiIndItemDTO getInfoById(String id) {
         return ConvertUtils.sourceToTarget(indItemService.get(id), ApiIndItemDTO.class);
     }
+
+    @Override
+    public List<ApiIndItemDTO> getInfoByIds(Set<String> indIds) {
+        if (CollectionUtils.isEmpty(indIds)) {
+            return new ArrayList<>();
+        }
+        List<IndItemEntity> inds = indItemService.getInfoByIds(indIds);
+        return ConvertUtils.sourceToTarget(inds,ApiIndItemDTO.class);
+    }
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java
index 51b27f8..d8b98fb 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/IndItemCollector.java
@@ -71,10 +71,10 @@
                 result = atomItemHandler.queryValue(indItem.getId());
                 break;
             case DER:
-                result = derItemHandler.queryValue(itemNo, startTime, endTime);
+                result = derItemHandler.queryValue(indItem.getId(), startTime, endTime);
                 break;
             case CAL:
-                result = calItemHandler.queryValue(itemNo, startTime, endTime);
+                result = calItemHandler.queryValue(indItem.getId(), startTime, endTime);
                 break;
             default:
                 break;
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java
index 87fee61..e33849c 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/collection/utils/IndSqlUtils.java
@@ -139,7 +139,9 @@
                 whereSql.append(indItem.getTimeLabel());
                 whereSql.append(" <= '");
                 whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_DATE));
-                whereSql.append("' AND >= '");
+                whereSql.append("' AND ");
+                whereSql.append(indItem.getTimeLabel());
+                whereSql.append(" >= '");
                 calendar.add(Calendar.DAY_OF_YEAR, -7);
                 whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_DATE));
                 whereSql.append("'");
@@ -148,7 +150,9 @@
                 whereSql.append(indItem.getTimeLabel());
                 whereSql.append(" <= '");
                 whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_DATE));
-                whereSql.append("' AND >= '");
+                whereSql.append("' AND ");
+                whereSql.append(indItem.getTimeLabel());
+                whereSql.append(" >= '");
                 calendar.add(Calendar.DAY_OF_YEAR, -30);
                 whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_DATE));
                 whereSql.append("'");
@@ -183,10 +187,13 @@
                 whereSql.append("'");
                 break;
             case THIS_YEAR_MONTH:
-                calendar.set(Calendar.MONTH, 11);
+                whereSql.append(indItem.getTimeLabel());
                 whereSql.append(" <= '");
+                calendar.set(Calendar.MONTH, 11);
                 whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_MON));
-                whereSql.append("' AND >= '");
+                whereSql.append("' AND ");
+                whereSql.append(indItem.getTimeLabel());
+                whereSql.append(" >= '");
                 calendar.set(Calendar.MONTH, 0);
                 whereSql.append(DateUtils.format(calendar.getTime(), PATTERN_MON));
                 whereSql.append("'");
@@ -248,12 +255,18 @@
 
         // 拼接SELECT
         StringBuilder selectSql = new StringBuilder();
-        selectSql.append(indItem.getDimension());
-        selectSql.append(", ");
-        selectSql.append(result.getSelectSql());
-        selectSql.append(", ");
-        selectSql.append(indItem.getTimeLabel());
-        selectSql.append(" data_time");
+        if (StringUtils.isNotBlank(indItem.getDimension()) && StringUtils.isNotBlank(result.getIndItemAtom().getStatFunc())) {
+            selectSql.append(indItem.getDimension());
+            selectSql.append(", ");
+            selectSql.append(result.getSelectSql());
+        } else if (StringUtils.isBlank(indItem.getDimension()) && StringUtils.isNotBlank(result.getIndItemAtom().getStatFunc())) {
+            selectSql.append(result.getSelectSql());
+        } else {
+            selectSql.append(result.getSelectSql());
+            selectSql.append(", ");
+            selectSql.append(indItem.getTimeLabel());
+            selectSql.append(" data_time");
+        }
         result.setSelectSql(selectSql.toString());
 
         // 拼接WHERE
@@ -261,22 +274,28 @@
         whereSql.append(" ");
         whereSql.append(indItem.getTimeLabel());
         whereSql.append(" <= '");
-        whereSql.append(DateUtils.format(endTime, PATTERN_MON));
-        whereSql.append("' AND >= '");
-        whereSql.append(DateUtils.format(startTime, PATTERN_MON));
+        whereSql.append(DateUtils.format(endTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
+        whereSql.append("' AND ");
+        whereSql.append(indItem.getTimeLabel());
+        whereSql.append(" >= '");
+        whereSql.append(DateUtils.format(startTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
         whereSql.append("'");
         result.setWhereSql(whereSql.toString());
 
         // 拼接GROUP
         StringBuilder groupSql = new StringBuilder();
-        groupSql.append(" GROUP BY ");
-        groupSql.append(indItem.getDimension());
+        if (StringUtils.isNotBlank(indItem.getDimension())) {
+            groupSql.append(indItem.getDimension());
+        }
         result.setGroupSql(groupSql.toString());
 
         // 拼接ORDER
         StringBuilder orderBySql = new StringBuilder();
-        orderBySql.append(indItem.getTimeLabel());
-        result.setOrderBySql(orderBySql.toString());
+        if (StringUtils.isNotBlank(indItem.getDimension()) && indItem.getDimension().equals(indItem.getTimeLabel())) {
+            orderBySql.append(indItem.getTimeLabel());
+            result.setOrderBySql(orderBySql.toString());
+        }
+
         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/ind/item/service/IndItemService.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/IndItemService.java
index 593bdcd..e320ecc 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/IndItemService.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/IndItemService.java
@@ -8,6 +8,7 @@
 import com.iailab.module.data.ind.item.vo.IndItemSaveReqVO;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author PanZhibao
@@ -29,4 +30,6 @@
     void delete(String id);
 
     List<IndItemRespVO> getList(IndItemPageReqVO reqVO);
+
+    List<IndItemEntity> getInfoByIds(Set<String> indIds);
 }
\ No newline at end of file
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/impl/IndItemServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/impl/IndItemServiceImpl.java
index 50ac0c4..6f5da02 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/impl/IndItemServiceImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/ind/item/service/impl/IndItemServiceImpl.java
@@ -23,6 +23,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 
 /**
@@ -127,4 +128,9 @@
     public List<IndItemRespVO> getList(IndItemPageReqVO reqVO) {
         return baseDao.getItemList(reqVO);
     }
+
+    @Override
+    public List<IndItemEntity> getInfoByIds(Set<String> indIds) {
+        return baseDao.selectBatchIds(indIds);
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3