From d8d91ebc9ee8266373dbadcbde05cc614880ad38 Mon Sep 17 00:00:00 2001
From: DYL <Dn1332079466>
Date: 星期一, 10 二月 2025 11:14:31 +0800
Subject: [PATCH] 功率因数

---
 zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java                 |  590 +++++++++++++++++++-------------------
 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java             |   23 +
 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java           |   20 +
 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java         |   19 +
 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java         |   33 ++
 zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java |   55 +++
 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java |  115 +++++++
 7 files changed, 560 insertions(+), 295 deletions(-)

diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java
new file mode 100644
index 0000000..a82aeec
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java
@@ -0,0 +1,55 @@
+package com.zhitan.web.controller.energyMonitor;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.energyMonitor.service.IElectricPowerFactorService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.service.IEnergyIndexService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Description: 鍔熺巼鍥犳暟
+ * @Author: yxw
+ * @Date: 2022-04-24
+ * @Version: V1.2
+ */
+@Api(tags = "鍔熺巼鍥犳暟")
+@RestController
+@RequestMapping("/powerFactorAnalysis")
+@Slf4j
+public class ElectricPowerFactorController extends BaseController {
+
+    @Autowired
+    private IElectricPowerFactorService electricPowerFactorService;
+
+    @Autowired
+    private IEnergyIndexService energyIndexService;
+
+    /**
+     * 鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁
+     *
+     * @param nodeId   鑺傜偣id
+     * @param meterId  鐢佃〃id
+     * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21
+     */
+    @Log(title = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁")
+    @ApiOperation(value = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁", notes = "鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁")
+    @GetMapping(value = "/detail")
+    public AjaxResult list(@RequestParam(name = "nodeId") String nodeId,
+                           @RequestParam(name = "meterId") String meterId,
+                           @RequestParam(name = "timeCode") String timeCode) {
+        EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(nodeId, meterId, CommonConst.TAG_CODE_GLYS);
+
+        return AjaxResult.success(electricPowerFactorService.list(timeCode, energyIndex));
+    }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java
new file mode 100644
index 0000000..2da7ece
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java
@@ -0,0 +1,33 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricPowerFactorDetail {
+    /**
+     * 鏈�澶у姛鐜囧洜鏁�
+     */
+    private String max;
+    /**
+     * 鏈�澶у姛鐜囧洜鏁板彂鐢熸椂闂�
+     */
+    private String maxTime;
+    /**
+     * 鏈�灏忓姛鐜囧洜鏁�
+     */
+    private String min;
+    /**
+     * 鏈�灏忓姛鐜囧洜鏁板彂鐢熸椂闂�
+     */
+    private String minTime;
+    /**
+     * 骞冲潎鍔熺巼鍥犳暟
+     */
+    private String avg;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java
new file mode 100644
index 0000000..42c024d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java
@@ -0,0 +1,20 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricPowerFactorItem {
+    /**
+     * 鏃堕棿
+     */
+    private String timeCode;
+    /**
+     * 瀹炴椂鍊�
+     */
+    private String value;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java
new file mode 100644
index 0000000..83b3eef
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java
@@ -0,0 +1,23 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:58
+ */
+@Data
+public class ElectricPowerFactorVO {
+    /**
+     * 璁板綍鍒楄〃
+     */
+    private List<ElectricPowerFactorItem> itemList;
+
+    /**
+     * 璇︽儏瀹炰綋
+     */
+    private ElectricPowerFactorDetail detail;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java
new file mode 100644
index 0000000..b74cc1b
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java
@@ -0,0 +1,19 @@
+package com.zhitan.energyMonitor.service;
+
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO;
+import com.zhitan.model.domain.EnergyIndex;
+
+
+/**
+ * @Description:
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+public interface IElectricPowerFactorService {
+
+    /**
+     * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁
+     */
+    ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java
new file mode 100644
index 0000000..ea366f9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java
@@ -0,0 +1,115 @@
+package com.zhitan.energyMonitor.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.utils.ChartUtils;
+import com.zhitan.common.utils.DateTimeUtil;
+import com.zhitan.common.utils.DoubleUtil;
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorDetail;
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorItem;
+import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO;
+import com.zhitan.energyMonitor.service.IElectricPowerFactorService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: sensor_alarm_item
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+@Slf4j
+@Service
+public class ElectricPowerFactorServiceImpl implements IElectricPowerFactorService {
+    @Autowired
+    private RealtimeDatabaseService realtimeDatabaseService;
+
+    @Override
+    public ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex) {
+        ElectricPowerFactorVO vo = new ElectricPowerFactorVO();
+        List<ElectricPowerFactorItem> itemList = new ArrayList<>();
+        ElectricPowerFactorDetail detail = new ElectricPowerFactorDetail();
+        detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN);
+        detail.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+        detail.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+        detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN);
+        vo.setItemList(itemList);
+        vo.setDetail(detail);
+
+        List<Date> dateList = new ArrayList<>();
+        ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, timeCode, dateList);
+        double max = CommonConst.DIGIT_0, min = CommonConst.MIN_INIT_VALUE;
+        //dateList璁℃暟
+        Date now = new Date();
+        //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+        now = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now);
+        int i = CommonConst.DIGIT_0;
+        for (Date date : dateList) {
+            ElectricPowerFactorItem temp = new ElectricPowerFactorItem();
+            temp.setTimeCode(ChartUtils.getTimeCodeChart(TimeTypeConst.TIME_TYPE_DAY, date));
+            temp.setValue(CommonConst.DOUBLE_MINUS_SIGN);
+            itemList.add(temp);
+            // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿--
+            if (DateTimeUtil.compareDateDiff(date, now) > CommonConst.DIGIT_0) {
+                i++;
+                continue;
+            }
+            TagValue tagValue = new TagValue();
+            try {
+                TagValue retrieve = realtimeDatabaseService.retrieve(energyIndex.getCode(), date);
+                if (ObjectUtil.isNotEmpty(retrieve)) {
+                    tagValue = retrieve;
+                }
+            } catch (Exception e) {
+                log.error("鑾峰彇鍔熺巼鍥犳暟寮傚父锛�" + e.getMessage());
+            }
+            if (ObjectUtil.isNotEmpty(tagValue.getValue())) {
+                double value = DoubleUtil.formatDouble(tagValue.getValue());
+
+                temp.setValue(String.valueOf(value));
+                //缁欐渶灏忓�艰祴鍊肩涓�鏉�
+                if (i == CommonConst.DIGIT_0) {
+                    min = Double.parseDouble(temp.getValue());
+                }
+                if (value > max) {
+                    max = value;
+                    detail.setMax(max + CommonConst.EMPTY);
+                    detail.setMaxTime(DateTimeUtil.getDateTime(date));
+                }
+                if (value <= min) {
+                    min = value;
+                    detail.setMin(min + CommonConst.EMPTY);
+                    detail.setMinTime(DateTimeUtil.getDateTime(date));
+                }
+            }
+            i++;
+        }
+
+        detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN);
+        if (ObjectUtil.isNotEmpty(itemList)) {
+            double avg = CommonConst.DIGIT_DOUBLE_0;
+            for (ElectricPowerFactorItem li : itemList) {
+                try {
+                    if (!li.getValue().equals(CommonConst.DOUBLE_MINUS_SIGN)) {
+                        avg += DoubleUtil.toDouble(li.getValue());
+                    }
+                } catch (Exception e) {
+                    log.error(e.getMessage());
+                }
+            }
+            detail.setAvg(DoubleUtil.formatDoubleToStr(avg / itemList.size()));
+        }
+
+        return vo;
+    }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
index 47e57ca..301d0ae 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
@@ -35,320 +35,320 @@
 @Service
 public class EnergyIndexServiceImpl implements IEnergyIndexService {
 
-  @Autowired
-  private EnergyIndexMapper energyIndexMapper;
-  @Autowired
-  private IDaqTemplateService daqTemplateService;
-  @Autowired
-  private IMeterImplementService meterImplementService;
-  @Autowired
-  private IModelNodeService modelNodeService;
+    @Autowired
+    private EnergyIndexMapper energyIndexMapper;
+    @Autowired
+    private IDaqTemplateService daqTemplateService;
+    @Autowired
+    private IMeterImplementService meterImplementService;
+    @Autowired
+    private IModelNodeService modelNodeService;
 
-  @Autowired
-  private ModelNodeMapper modelNodeMapper;
+    @Autowired
+    private ModelNodeMapper modelNodeMapper;
 
-  @Override
-  public EnergyIndex getiEnergyIndexByCode(String code) {
-    return energyIndexMapper.getiEnergyIndexByCode(code);
-  }
-
-  @Override
-  public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) {
-    return energyIndexMapper.listIndexByMeterIds(nodeId,meterId);
-  }
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅
-   *
-   * @param indexId 鎸囨爣淇℃伅ID
-   * @return 鎸囨爣淇℃伅
-   */
-  @Override
-  public EnergyIndex selectEnergyIndexById(String indexId) {
-    return energyIndexMapper.selectEnergyIndexById(indexId);
-  }
-
-  @Override
-  public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) {
-    if (CollectionUtils.isEmpty(indexId)) {
-      return Collections.emptyList();
-    }
-    return energyIndexMapper.selectEnergyIndexByIds(indexId);
-  }
-
-  @Override
-  public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) {
-    return energyIndexMapper.selectEnergyIndexList(energyIndex);
-  }
-
-  /**
-   * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 鎸囨爣淇℃伅
-   */
-  @Override
-  public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) {
-    return energyIndexMapper.selectEnergyIndex(query);
-  }
-
-  /**
-   * 鏂板鎸囨爣淇℃伅
-   *
-   * @param nodeId
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  @Override
-  public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) {
-    energyIndex.setNodeId(nodeId);
-    energyIndexMapper.insertEnergyIndex( energyIndex);
-    return energyIndexMapper.insertNodeIndex(nodeId,energyIndex.getIndexId());
-  }
-
-  /**
-   * 淇敼鎸囨爣淇℃伅
-   *
-   * @param energyIndex 鎸囨爣淇℃伅
-   * @return 缁撴灉
-   */
-  @Override
-  public int updateEnergyIndex(EnergyIndex energyIndex) {
-    return energyIndexMapper.updateEnergyIndex(energyIndex);
-  }
-
-  /**
-   * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
-   *
-   * @param nodeId
-   * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
-   * @return 缁撴灉
-   */
-  @Override
-  public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) {
-    return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds);
-  }
-
-  @Override
-  public boolean energyIndexHasExist(String code) {
-    int count = energyIndexMapper.energyIndexHasExist(code);
-    return count > 0;
-  }
-
-  @Override
-  public boolean energyIndexHasExist(String indexId, String code) {
-    int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code);
-    return count > 0;
-  }
-
-  @Override
-  public AjaxResult addMeterIndex(String meterId) {
-    MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId);
-    if (meterImplement == null) {
-      return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�");
+    @Override
+    public EnergyIndex getiEnergyIndexByCode(String code) {
+        return energyIndexMapper.getiEnergyIndexByCode(code);
     }
 
-    DaqTemplate query = new DaqTemplate();
-    query.setDeviceType(meterImplement.getMeterType());
-    List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query);
-    if (daqTemplates.isEmpty()) {
-      return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒");
+    @Override
+    public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) {
+        return energyIndexMapper.listIndexByMeterIds(nodeId, meterId);
     }
 
-    List<EnergyIndex> energyIndices = new ArrayList<>();
-    daqTemplates.forEach(daqTemplate -> {
-      EnergyIndex energyIndex = new EnergyIndex();
-      energyIndex.setIndexId(UUID.randomUUID().toString());
-      energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode());
-      energyIndex.setName(daqTemplate.getName());
-      energyIndex.setUnitId(daqTemplate.getUnit());
-      energyIndex.setIndexType(IndexType.COLLECT);
-      energyIndex.setMeterId(meterId);
-      energyIndices.add(energyIndex);
-    });
-
-    energyIndexMapper.deleteIndexByMeterId(meterId);
-    energyIndexMapper.insertEnergyIndices(energyIndices);
-    return AjaxResult.success();
-  }
-
-  @Override
-  public List<EnergyIndex> getMeterIndex(String meterId) {
-    return energyIndexMapper.getMeterIndex(meterId);
-  }
-
-  @Override
-  public boolean modelHasConfig(String modelCode) {
-    int count = energyIndexMapper.modelHasConfig(modelCode);
-    return count > 0;
-  }
-
-  @Override
-  public List<EnergyIndex> selectCollectIndex(String deviceId) {
-    return energyIndexMapper.selectCollectIndex(deviceId);
-  }
-
-  @Override
-  public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) {
-    return energyIndexMapper.getEnergyIndexByIds(indexIds);
-  }
-
-  @Override
-  public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) {
-    if (indexCodes.isEmpty()) {
-      return new ArrayList<>();
+    /**
+     * 鏌ヨ鎸囨爣淇℃伅
+     *
+     * @param indexId 鎸囨爣淇℃伅ID
+     * @return 鎸囨爣淇℃伅
+     */
+    @Override
+    public EnergyIndex selectEnergyIndexById(String indexId) {
+        return energyIndexMapper.selectEnergyIndexById(indexId);
     }
 
-    return energyIndexMapper.getEnergyIndexByCodes(indexCodes);
-  }
-
-  @Override
-  public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) {
-    return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId);
-  }
-
-  @Override
-  public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
-    return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter);
-  }
-
-  @Override
-  public void removeNodeIndex(String nodeId, List<String> removeLink) {
-    energyIndexMapper.removeNodeIndex(nodeId, removeLink);
-  }
-
-  @Override
-  public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) {
-    List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode)
-        .collect(Collectors.toList());
-    List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId)
-        .collect(Collectors.toList());
-    List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes);
-    List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes);
-    Map<String, String> nodeCodeToId = modelNodes.stream()
-        .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId));
-    Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode)
-        .collect(Collectors.toSet());
-
-    List<EnergyIndex> insertData = new ArrayList<>();
-    List<EnergyIndex> updateData = new ArrayList<>();
-    List<String> errorNodeCode = new ArrayList<>();
-    List<String> insertIndexCode = new ArrayList<>();
-    AtomicBoolean existDuplicateCode = new AtomicBoolean(false);
-    energyIndexList.forEach(energyIndex -> {
-      if (cacheIndexCodes.contains(energyIndex.getCode())) {
-        updateData.add(energyIndex);
-      } else {
-        String nodeCode = energyIndex.getNodeId();
-        if (nodeCodeToId.containsKey(nodeCode)) {
-          if (!insertIndexCode.contains(energyIndex.getCode())) {
-            insertIndexCode.add(energyIndex.getCode());
-            energyIndex.setIndexId(UUID.randomUUID().toString());
-            energyIndex.setNodeId(nodeCodeToId.get(nodeCode));
-            insertData.add(energyIndex);
-          } else {
-            existDuplicateCode.set(true);
-          }
-        } else if (!errorNodeCode.contains(nodeCode)) {
-          errorNodeCode.add(nodeCode);
+    @Override
+    public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) {
+        if (CollectionUtils.isEmpty(indexId)) {
+            return Collections.emptyList();
         }
-      }
-    });
-
-    if (updateSupport && !updateData.isEmpty()) {
-      updateData.forEach(energyIndexMapper::updateEnergyIndex);
+        return energyIndexMapper.selectEnergyIndexByIds(indexId);
     }
 
-    if (!insertData.isEmpty()) {
-      energyIndexMapper.saveEnergyIndex(insertData);
+    @Override
+    public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) {
+        return energyIndexMapper.selectEnergyIndexList(energyIndex);
     }
 
-    String errMsg = "";
-    if (existDuplicateCode.get()) {
-      errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒";
+    /**
+     * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+     *
+     * @param energyIndex 鎸囨爣淇℃伅
+     * @return 鎸囨爣淇℃伅
+     */
+    @Override
+    public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) {
+        return energyIndexMapper.selectEnergyIndex(query);
     }
 
-    if (!errorNodeCode.isEmpty()) {
-      errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒";
+    /**
+     * 鏂板鎸囨爣淇℃伅
+     *
+     * @param nodeId
+     * @param energyIndex 鎸囨爣淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) {
+        energyIndex.setNodeId(nodeId);
+        energyIndexMapper.insertEnergyIndex(energyIndex);
+        return energyIndexMapper.insertNodeIndex(nodeId, energyIndex.getIndexId());
     }
 
-    if (StringUtils.isNotBlank(errMsg)) {
-      return AjaxResult.error(errMsg);
-    }
-    return AjaxResult.success("瀵煎叆鎴愬姛锛�");
-  }
-
-  @Override
-  public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) {
-    if (indexCodes.isEmpty()) {
-      return new ArrayList<>();
+    /**
+     * 淇敼鎸囨爣淇℃伅
+     *
+     * @param energyIndex 鎸囨爣淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateEnergyIndex(EnergyIndex energyIndex) {
+        return energyIndexMapper.updateEnergyIndex(energyIndex);
     }
 
-    return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes);
-  }
-
-  /**
-   * @description: hmj 鍒嗛〉鏌ヨ
-   * @param query
-   * @param pageNum
-   * @param pageSize
-   * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex>
-   * @author: hmj
-   * @date: 2024/10/11 23:56
-   */
-  @Override
-  public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) {
-    return  energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum,pageSize),query);
-  }
-
-  @Override
-  public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code,
-                                             String name,Long pageNum, Long pageSize) {
-    LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>();
-    queryWrapper.in(EnergyIndex::getMeterId,meterIndexIds);
-    queryWrapper.like(StringUtils.isNotEmpty(code),EnergyIndex::getCode,code);
-    queryWrapper.like(StringUtils.isNotEmpty(name),EnergyIndex::getName,name);
-    return energyIndexMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper);
-  }
-
-  @Override
-  public List<EnergyIndex> getIndexByCode(String code, String nodeId) {
-    List<EnergyIndex> energyIndexList =  energyIndexMapper.getIndexByCode(code,nodeId);
-
-    return energyIndexList;
-  }
-
-  /**
-   * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
-   *
-   * @param nodeId 鑺傜偣id
-   * @param meterId      璁惧id
-   * @param indexCode    鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
-   * @return
-   */
-  @Override
-  public EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode) {
-
-    List<EnergyIndex> energyIndexList = listDeviceIndexByCode(nodeId, meterId, indexCode);
-    EnergyIndex energyIndex = energyIndexList.stream().findFirst().orElse(null);
-    if (ObjectUtils.isEmpty(energyIndex)) {
-      energyIndex = new EnergyIndex();
+    /**
+     * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
+     *
+     * @param nodeId
+     * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) {
+        return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds);
     }
-    return energyIndex;
-  }
 
-  /**
-   * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
-   *
-   * @param energyUnitId 鐢ㄨ兘鍗曞厓id
-   * @param meterId      璁惧id
-   * @param indexCode    鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
-   * @return
-   */
-  public List<EnergyIndex> listDeviceIndexByCode(String energyUnitId, String meterId, String indexCode) {
-    return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery()
-            .eq(EnergyIndex::getNodeId, energyUnitId)
-            .eq(EnergyIndex::getMeterId, meterId)
-            .like(EnergyIndex::getCode, indexCode));
-  }
+    @Override
+    public boolean energyIndexHasExist(String code) {
+        int count = energyIndexMapper.energyIndexHasExist(code);
+        return count > 0;
+    }
+
+    @Override
+    public boolean energyIndexHasExist(String indexId, String code) {
+        int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code);
+        return count > 0;
+    }
+
+    @Override
+    public AjaxResult addMeterIndex(String meterId) {
+        MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId);
+        if (meterImplement == null) {
+            return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�");
+        }
+
+        DaqTemplate query = new DaqTemplate();
+        query.setDeviceType(meterImplement.getMeterType());
+        List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query);
+        if (daqTemplates.isEmpty()) {
+            return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒");
+        }
+
+        List<EnergyIndex> energyIndices = new ArrayList<>();
+        daqTemplates.forEach(daqTemplate -> {
+            EnergyIndex energyIndex = new EnergyIndex();
+            energyIndex.setIndexId(UUID.randomUUID().toString());
+            energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode());
+            energyIndex.setName(daqTemplate.getName());
+            energyIndex.setUnitId(daqTemplate.getUnit());
+            energyIndex.setIndexType(IndexType.COLLECT);
+            energyIndex.setMeterId(meterId);
+            energyIndices.add(energyIndex);
+        });
+
+        energyIndexMapper.deleteIndexByMeterId(meterId);
+        energyIndexMapper.insertEnergyIndices(energyIndices);
+        return AjaxResult.success();
+    }
+
+    @Override
+    public List<EnergyIndex> getMeterIndex(String meterId) {
+        return energyIndexMapper.getMeterIndex(meterId);
+    }
+
+    @Override
+    public boolean modelHasConfig(String modelCode) {
+        int count = energyIndexMapper.modelHasConfig(modelCode);
+        return count > 0;
+    }
+
+    @Override
+    public List<EnergyIndex> selectCollectIndex(String deviceId) {
+        return energyIndexMapper.selectCollectIndex(deviceId);
+    }
+
+    @Override
+    public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) {
+        return energyIndexMapper.getEnergyIndexByIds(indexIds);
+    }
+
+    @Override
+    public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) {
+        if (indexCodes.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        return energyIndexMapper.getEnergyIndexByCodes(indexCodes);
+    }
+
+    @Override
+    public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) {
+        return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId);
+    }
+
+    @Override
+    public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) {
+        return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter);
+    }
+
+    @Override
+    public void removeNodeIndex(String nodeId, List<String> removeLink) {
+        energyIndexMapper.removeNodeIndex(nodeId, removeLink);
+    }
+
+    @Override
+    public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) {
+        List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode)
+                .collect(Collectors.toList());
+        List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId)
+                .collect(Collectors.toList());
+        List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes);
+        List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes);
+        Map<String, String> nodeCodeToId = modelNodes.stream()
+                .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId));
+        Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode)
+                .collect(Collectors.toSet());
+
+        List<EnergyIndex> insertData = new ArrayList<>();
+        List<EnergyIndex> updateData = new ArrayList<>();
+        List<String> errorNodeCode = new ArrayList<>();
+        List<String> insertIndexCode = new ArrayList<>();
+        AtomicBoolean existDuplicateCode = new AtomicBoolean(false);
+        energyIndexList.forEach(energyIndex -> {
+            if (cacheIndexCodes.contains(energyIndex.getCode())) {
+                updateData.add(energyIndex);
+            } else {
+                String nodeCode = energyIndex.getNodeId();
+                if (nodeCodeToId.containsKey(nodeCode)) {
+                    if (!insertIndexCode.contains(energyIndex.getCode())) {
+                        insertIndexCode.add(energyIndex.getCode());
+                        energyIndex.setIndexId(UUID.randomUUID().toString());
+                        energyIndex.setNodeId(nodeCodeToId.get(nodeCode));
+                        insertData.add(energyIndex);
+                    } else {
+                        existDuplicateCode.set(true);
+                    }
+                } else if (!errorNodeCode.contains(nodeCode)) {
+                    errorNodeCode.add(nodeCode);
+                }
+            }
+        });
+
+        if (updateSupport && !updateData.isEmpty()) {
+            updateData.forEach(energyIndexMapper::updateEnergyIndex);
+        }
+
+        if (!insertData.isEmpty()) {
+            energyIndexMapper.saveEnergyIndex(insertData);
+        }
+
+        String errMsg = "";
+        if (existDuplicateCode.get()) {
+            errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒";
+        }
+
+        if (!errorNodeCode.isEmpty()) {
+            errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒";
+        }
+
+        if (StringUtils.isNotBlank(errMsg)) {
+            return AjaxResult.error(errMsg);
+        }
+        return AjaxResult.success("瀵煎叆鎴愬姛锛�");
+    }
+
+    @Override
+    public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) {
+        if (indexCodes.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes);
+    }
+
+    /**
+     * @param query
+     * @param pageNum
+     * @param pageSize
+     * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex>
+     * @description: hmj 鍒嗛〉鏌ヨ
+     * @author: hmj
+     * @date: 2024/10/11 23:56
+     */
+    @Override
+    public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) {
+        return energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum, pageSize), query);
+    }
+
+    @Override
+    public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds, String code,
+                                               String name, Long pageNum, Long pageSize) {
+        LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(EnergyIndex::getMeterId, meterIndexIds);
+        queryWrapper.like(StringUtils.isNotEmpty(code), EnergyIndex::getCode, code);
+        queryWrapper.like(StringUtils.isNotEmpty(name), EnergyIndex::getName, name);
+        return energyIndexMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
+    }
+
+    @Override
+    public List<EnergyIndex> getIndexByCode(String code, String nodeId) {
+        List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByCode(code, nodeId);
+
+        return energyIndexList;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+     *
+     * @param nodeId    鑺傜偣id
+     * @param meterId   璁惧id
+     * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+     * @return
+     */
+    @Override
+    public EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode) {
+
+        List<EnergyIndex> energyIndexList = listDeviceIndexByCode(nodeId, meterId, indexCode);
+        EnergyIndex energyIndex = energyIndexList.stream().findFirst().orElse(null);
+        if (ObjectUtils.isEmpty(energyIndex)) {
+            energyIndex = new EnergyIndex();
+        }
+        return energyIndex;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+     *
+     * @param nodeId    鑺傜偣id
+     * @param meterId   璁惧id
+     * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+     * @return
+     */
+    public List<EnergyIndex> listDeviceIndexByCode(String nodeId, String meterId, String indexCode) {
+        return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery()
+                .eq(EnergyIndex::getNodeId, nodeId)
+                .eq(EnergyIndex::getMeterId, meterId)
+                .like(EnergyIndex::getCode, indexCode));
+    }
 }

--
Gitblit v1.9.3