From e8401b85ea303e7cb87062dfa918cb59071befb3 Mon Sep 17 00:00:00 2001
From: VVT789 <sdxt_0802@163.com>
Date: 星期五, 18 四月 2025 12:40:02 +0800
Subject: [PATCH] 报警代码优化

---
 zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java           |    7 
 zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java                  |    5 
 zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml                         |   18 ++
 zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java               |   12 +
 zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml                      |   79 ++++++--
 zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalysisController.java   |   44 ++++
 /dev/null                                                                                 |   37 ----
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java   |  196 +++++++++++++++------
 zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java    |   18 +-
 zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml                       |   10 
 zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java             |   15 +
 zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalysisService.java          |   15 +
 zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java |   76 +++++---
 13 files changed, 364 insertions(+), 168 deletions(-)

diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java
deleted file mode 100644
index 8766e28..0000000
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.zhitan.web.controller.alarm;
-
-import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO;
-import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
-import com.zhitan.alarm.services.IAlarmAnalyisisService;
-import com.zhitan.common.core.controller.BaseController;
-import com.zhitan.common.core.domain.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
-geng * description 鎶ヨ鍒嗘瀽鐩稿叧鍔熻兘
- *
- * @author hmj
- * @date 2024-10-26 17:31
- */
-@RestController
-@RequestMapping("/alarmAnalysis")
-public class AlarmAnalyisisController extends BaseController {
-    @Autowired
-    private IAlarmAnalyisisService alarmAnalyisisService;
-
-    @GetMapping("/getByNodeId")
-    public AjaxResult getByNodeId(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
-        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalyisisService.getByNodeId(alarmAnalysisDTO);
-        return AjaxResult.success(alarmAnalysisVO);
-    }
-
-    @GetMapping("/getCountInfo")
-    public AjaxResult getCountInfo(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
-        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalyisisService.getCountInfo(alarmAnalysisDTO);
-        return AjaxResult.success(alarmAnalysisVO);
-    }
-}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalysisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalysisController.java
new file mode 100644
index 0000000..64aa96f
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalysisController.java
@@ -0,0 +1,44 @@
+package com.zhitan.web.controller.alarm;
+
+import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO;
+import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
+import com.zhitan.alarm.services.IAlarmAnalysisService;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+* description 鎶ヨ鍒嗘瀽鐩稿叧鍔熻兘
+ *
+ * @author zhitan
+ * @date
+ */
+@RestController
+@RequestMapping("/alarmAnalysis")
+public class AlarmAnalysisController extends BaseController {
+    @Autowired
+    private IAlarmAnalysisService alarmAnalysisService;
+
+    @GetMapping("/getByNodeId")
+    public AjaxResult getByNodeId(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
+        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalysisService.getByNodeId(alarmAnalysisDTO);
+        return AjaxResult.success(alarmAnalysisVO);
+    }
+
+    @GetMapping("/getCountInfo")
+    public AjaxResult getCountInfo(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
+        if(ObjectUtils.isEmpty(alarmAnalysisDTO.getNodeId())){
+            return AjaxResult.error("鑺傜偣id涓嶈兘涓虹┖");
+        }
+        if(ObjectUtils.isEmpty(alarmAnalysisDTO.getModelCode())){
+            return AjaxResult.error("妯″瀷缂栫爜涓嶈兘涓虹┖");
+        }
+        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalysisService.getCountInfo(alarmAnalysisDTO);
+        return AjaxResult.success(alarmAnalysisVO);
+    }
+}
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java
index 181e1ff..1e26f86 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java
@@ -12,6 +12,7 @@
 import com.zhitan.common.enums.BusinessType;
 import com.zhitan.common.utils.poi.ExcelUtil;
 import com.zhitan.framework.web.service.TokenService;
+import com.zhitan.model.domain.ModelNode;
 import com.zhitan.realtimedata.domain.TagValue;
 import com.zhitan.realtimedata.service.RealtimeDatabaseService;
 import io.swagger.annotations.Api;
@@ -43,10 +44,7 @@
 public class HistoryAlarmController extends BaseController
 {
     @Autowired
-    private IHistoryAlarmService iHistoryAlarmService;
-
-    @Autowired
-    private TokenService tokenService;
+    private IHistoryAlarmService historyAlarmService;
 
     @Autowired
     private RealtimeDatabaseService realtimeDatabaseService;
@@ -55,11 +53,13 @@
      * 鍘嗗彶鎶ヨ 椤甸潰 鏍规嵁 鑺傜偣鐩綍鍜� 鏉′欢鏌ヨ
      */
     @ApiOperation("鍘嗗彶鎶ヨ鏌ヨ")
-//    @PreAuthorize("@ss.hasPermi('energyAlarm:historicalAlarm:list')")
+    @PreAuthorize("@ss.hasPermi('energyAlarm:historicalAlarm:list')")
     @GetMapping("/list")
-    public TableDataInfo list(JkHistoryAlarm jkHistoryAlarm,Long pageNum,Long pageSize)
+    public TableDataInfo list(JkHistoryAlarm jkHistoryAlarm)
     {
-        Page<JkHistoryAlarm> list = iHistoryAlarmService.selectJkHistoryAlarmPage(jkHistoryAlarm,pageNum,pageSize);
+        startPage();
+        List<JkHistoryAlarm> list = historyAlarmService.selectHistoryAlarmPageList(jkHistoryAlarm);
+//        Page<JkHistoryAlarm> list = historyAlarmService.selectJkHistoryAlarmPage(jkHistoryAlarm);
         return getDataTable(list);
     }
     /**
@@ -70,7 +70,7 @@
     @GetMapping("/export")
     public AjaxResult export(JkHistoryAlarm jkHistoryAlarm)
     {
-        List<JkHistoryAlarm> list = iHistoryAlarmService.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
+        List<JkHistoryAlarm> list = historyAlarmService.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
         ExcelUtil<JkHistoryAlarm> util = new ExcelUtil<JkHistoryAlarm>(JkHistoryAlarm.class);
         return util.exportExcel(list, "alarm");
     }
@@ -165,7 +165,7 @@
     public TableDataInfo listNote(JkHistoryAlarm jkHistoryAlarm)
     {
         startPage();
-        List<JkHistoryAlarm> list = iHistoryAlarmService.selectHistoryAlarmNoteList(jkHistoryAlarm);
+        List<JkHistoryAlarm> list = historyAlarmService.selectHistoryAlarmNoteList(jkHistoryAlarm);
         return getDataTable(list);
     }
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java b/zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java
index 5ca1ddf..507f1c0 100644
--- a/zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.zhitan.common.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -13,8 +14,7 @@
  * @author hmj
  * @date 2024-10-16 17:55
  */
-@Getter
-@Setter
+@Data
 public class AlarmAnalysisDTO {
     @ApiModelProperty(value = "鑺傜偣id")
     private String nodeId;
@@ -28,18 +28,23 @@
     /**
      * 缁熻寮�濮嬫椂闂�
      */
+    @ApiModelProperty(value = "缁熻寮�濮嬫椂闂�")
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date beginTime;
 
     /**
-     * 缁熻寮�濮嬫椂闂�
+     * 缁熻缁撴潫鏃堕棿
      */
+    @ApiModelProperty(value = "缁熻缁撴潫鏃堕棿")
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "鎶ヨ寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鎶ヨ缁撴潫鏃堕棿", dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date endTime;
 
-    /** 妯″瀷缂栫爜 */
+    /**
+     * 妯″瀷缂栫爜
+     */
+    @ApiModelProperty(value = "妯″瀷缂栫爜")
     @Excel(name = "妯″瀷缂栫爜")
     private String modelCode;
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java
index ab16fbd..b0a16c3 100644
--- a/zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java
@@ -7,6 +7,7 @@
 import com.zhitan.alarm.domain.JkHistoryAlarm;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -35,10 +36,15 @@
    */
   List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm);
 
-  void updateHistoryAlarm(@Param("alarmCode") String alarmCode,
-      @Param("historyAlarm") HistoryAlarm historyAlarm);
+  void updateHistoryAlarm(@Param("alarmCode") String alarmCode, @Param("historyAlarm") HistoryAlarm historyAlarm);
 
   Page<JkHistoryAlarm> selectJkHistoryAlarmPage(@Param("jkHistoryAlarm") JkHistoryAlarm jkHistoryAlarm,@Param("page")Page<?> page);
 
-  Integer selectCountByTime(@Param("beginTime") DateTime beginTime, @Param("endTime") DateTime endTime);
+  Integer selectCountByTime(@Param("beginTime") DateTime beginTime,
+                            @Param("endTime") DateTime endTime,
+                            @Param("nodeIdList") List<String> nodeIdList);
+
+    List<JkHistoryAlarm> getHistoryAlarmList(@Param("indexIdList") List<String> indexIdList,
+                                             @Param("beginTime") Date beginTime,
+                                             @Param("endTime")Date endTime);
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalysisService.java
similarity index 61%
rename from zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.java
rename to zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalysisService.java
index 2c54007..cd694b8 100644
--- a/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.java
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalysisService.java
@@ -4,13 +4,20 @@
 import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
 
 /**
- * description todu
+ * 鎶ヨ鍒嗘瀽鎺ュ彛
  *
- * @author hmj
- * @date 2024-10-26 17:33
+ * @author zhitan
+ * @date
  */
-public interface IAlarmAnalyisisService {
+public interface IAlarmAnalysisService {
+
     AlarmAnalysisVO getByNodeId(AlarmAnalysisDTO alarmAnalysisDTO);
 
+    /**
+     * 鎶ヨ鍒嗘瀽缁熻
+     *
+     * @param alarmAnalysisDTO
+     * @return
+     */
     AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO);
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java
index b3dcc7c..bc6792f 100644
--- a/zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java
@@ -33,4 +33,11 @@
   void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm);
 
   Page<JkHistoryAlarm> selectJkHistoryAlarmPage(JkHistoryAlarm jkHistoryAlarm, Long pageNum, Long pageSize);
+
+  /**
+   * 鍘嗗彶鎶ヨ鍒嗛〉鏌ヨ
+   * @param jkHistoryAlarm
+   * @return
+   */
+  List<JkHistoryAlarm> selectHistoryAlarmPageList(JkHistoryAlarm jkHistoryAlarm);
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
index 3545c7d..53d8c83 100644
--- a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
@@ -6,7 +6,7 @@
 import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO;
 import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
 import com.zhitan.alarm.mapper.HistoryAlarmMapper;
-import com.zhitan.alarm.services.IAlarmAnalyisisService;
+import com.zhitan.alarm.services.IAlarmAnalysisService;
 import com.zhitan.basicdata.domain.MeterImplement;
 import com.zhitan.basicdata.domain.SysEnergy;
 import com.zhitan.basicdata.mapper.MeterImplementMapper;
@@ -17,6 +17,7 @@
 import com.zhitan.consumptionanalysis.domain.vo.ChartData;
 import com.zhitan.consumptionanalysis.domain.vo.EnergyProportion;
 import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
 import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
 import com.zhitan.model.mapper.EnergyIndexMapper;
 import com.zhitan.model.mapper.ModelNodeMapper;
@@ -32,14 +33,14 @@
 import java.util.stream.Collectors;
 
 /**
- * description todu
+ * 鎶ヨ鍒嗘瀽瀹炵幇
  *
- * @author hmj
- * @date 2024-10-26 17:34
+ * @author
+ * @date
  */
 @Service
 @AllArgsConstructor
-public class AlarmAnalyisisServiceImpl implements IAlarmAnalyisisService {
+public class AlarmAnalyisisServiceImpl implements IAlarmAnalysisService {
 
     private final ModelNodeMapper modelNodeMapper;
     
@@ -50,6 +51,13 @@
     private final EnergyIndexMapper energyIndexMapper;
     
     private final SysEnergyMapper sysEnergyMapper;
+
+    /**
+     * 鏍规嵁鑺傜偣id鑾峰彇鎶ヨ鍒嗘瀽淇℃伅(搴熷純)
+     *
+     * @param alarmAnalysisDTO
+     * @return
+     */
     @Override
     public AlarmAnalysisVO getByNodeId(AlarmAnalysisDTO alarmAnalysisDTO) {
         AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
@@ -171,31 +179,6 @@
         return alarmAnalysisVO;
     }
 
-
-    @Override
-    public AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO) {
-        AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
-        final String nodeId = alarmAnalysisDTO.getNodeId();
-        final DateTime beginOfMonth = DateUtil.beginOfMonth(new Date());
-        final DateTime endOfMonth = DateUtil.endOfMonth(new Date());
-        final DateTime beginOfYear = DateUtil.beginOfYear(new Date());
-        final DateTime endOfYear = DateUtil.endOfYear(new Date());
-
-        /**
-         * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭�
-         */
-        List<ModelNodeIndexInfo> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,null);
-        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList());
-
-        Integer monthCount = historyAlarmMapper.selectCountByTime(beginOfMonth,endOfMonth);
-        Integer yearCount = historyAlarmMapper.selectCountByTime(beginOfYear,endOfYear);
-        
-        alarmAnalysisVO.setIndexCount(indexIds.size());
-        alarmAnalysisVO.setMonthCount(monthCount);
-        alarmAnalysisVO.setYearCount(yearCount);
-        return alarmAnalysisVO;
-    }
-
     private double format2Double(double averageEnergy) {
         // 鍒涘缓DecimalFormat瀵硅薄锛岃缃繚鐣欎袱浣嶅皬鏁�
         DecimalFormat df = new DecimalFormat("#.00");
@@ -204,4 +187,37 @@
         String formattedResult = df.format(averageEnergy);
         return Double.valueOf(formattedResult);
     }
+
+    /**
+     * 鑾峰彇鎶ヨ鍒嗘瀽缁熻淇℃伅
+     * @param alarmAnalysisDTO
+     * @return
+     */
+    @Override
+    public AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO) {
+
+        AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
+
+        // 鏌ヨ妯″瀷涓嬬殑鐐逛綅鏁版嵁
+        ModelNode modelNode = modelNodeMapper.selectModelNodeById(alarmAnalysisDTO.getNodeId());
+        List<ModelNodeIndexInfo> nodeIndexInfoList = modelNodeMapper.getAllModelNodeIndexByAddress(modelNode.getModelCode(), modelNode.getAddress());
+        alarmAnalysisVO.setIndexCount(nodeIndexInfoList.size());
+        if (CollectionUtils.isEmpty(nodeIndexInfoList)) {
+            return alarmAnalysisVO;
+        }
+
+        // 鑾峰彇鏈堟姤璀︽暟銆佸勾鎶ヨ鏁�
+        List<String> nodeIdList = nodeIndexInfoList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList());
+
+        DateTime beginOfMonth = DateUtil.beginOfMonth(new Date());
+        DateTime endOfMonth = DateUtil.endOfMonth(new Date());
+        DateTime beginOfYear = DateUtil.beginOfYear(new Date());
+        DateTime endOfYear = DateUtil.endOfYear(new Date());
+        Integer monthCount = historyAlarmMapper.selectCountByTime(beginOfMonth,endOfMonth, nodeIdList);
+        Integer yearCount = historyAlarmMapper.selectCountByTime(beginOfYear,endOfYear, nodeIdList);
+
+        alarmAnalysisVO.setMonthCount(monthCount);
+        alarmAnalysisVO.setYearCount(yearCount);
+        return alarmAnalysisVO;
+    }
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java
index 9b16045..0a1f8ec 100644
--- a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java
@@ -1,5 +1,9 @@
 package com.zhitan.alarm.services.impl;
 
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zhitan.alarm.domain.HistoryAlarm;
 import com.zhitan.alarm.domain.JkHistoryAlarm;
@@ -8,83 +12,163 @@
 import com.zhitan.basicdata.domain.MeterImplement;
 import com.zhitan.basicdata.mapper.MeterImplementMapper;
 import com.zhitan.common.enums.TimeType;
+import com.zhitan.common.utils.DateUtils;
 import com.zhitan.common.utils.StringUtils;
 import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.domain.NodeIndex;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
 import com.zhitan.model.mapper.EnergyIndexMapper;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.mapper.NodeIndexMapper;
+import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
+
+@AllArgsConstructor
 
 @Service
 public class HistoryAlarmServiceImpl implements IHistoryAlarmService {
 
-  @Autowired
-  private HistoryAlarmMapper historyAlarmMapper;
+    @Resource
+    private HistoryAlarmMapper historyAlarmMapper;
 
-  @Autowired
-  private MeterImplementMapper meterImplementMapper;
+    @Resource
+    private MeterImplementMapper meterImplementMapper;
 
-  @Autowired
-  private EnergyIndexMapper energyIndexMapper;
+    @Resource
+    private ModelNodeMapper modelNodeMapper;
+    @Resource
+    private NodeIndexMapper nodeIndexMapper;
+    @Resource
+    private EnergyIndexMapper energyIndexMapper;
 
 
-  @Override
-  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime) {
-    return null;
-  }
+    @Override
+    public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime) {
+        return null;
+    }
 
-  @Override
-  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, TimeType timeType) {
-    return null;
-  }
+    @Override
+    public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, TimeType timeType) {
+        return null;
+    }
 
-  @Override
-  public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, String alarmType) {
-    return null;
-  }
+    @Override
+    public List<HistoryAlarm> getHistoryAlarm(Date beginTime, Date endTime, String alarmType) {
+        return null;
+    }
 
-  @Override
-  public List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm) {
-    return historyAlarmMapper.selectJkHistoryAlarmList(jkHistoryAlarm);
-  }
+    @Override
+    public List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm) {
+        return historyAlarmMapper.selectJkHistoryAlarmList(jkHistoryAlarm);
+    }
 
-  @Override
-  public List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm) {
-    return historyAlarmMapper.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
-  }
+    @Override
+    public List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm) {
+        return historyAlarmMapper.selectJkHistoryAlarmListExcel(jkHistoryAlarm);
+    }
 
-  /**
-   * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
-   *
-   * @param jkHistoryAlarm
-   * @return
-   */
-  @Override
-  public List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm) {
-    return historyAlarmMapper.selectHistoryAlarmNoteList(jkHistoryAlarm);
-  }
+    /**
+     * 瀹炴椂妫�娴� 鍔熻兘 鐨勫 sheet椤�  灞曠ず 缁勬�佸浘  娴嬬偣 鎶ヨ淇℃伅
+     *
+     * @param jkHistoryAlarm
+     * @return
+     */
+    @Override
+    public List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm) {
+        return historyAlarmMapper.selectHistoryAlarmNoteList(jkHistoryAlarm);
+    }
 
-  @Override
-  public void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm) {
-    historyAlarmMapper.updateHistoryAlarm(alarmCode, historyAlarm);
-  }
+    @Override
+    public void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm) {
+        historyAlarmMapper.updateHistoryAlarm(alarmCode, historyAlarm);
+    }
 
-  @Override
-  public Page<JkHistoryAlarm> selectJkHistoryAlarmPage(JkHistoryAlarm jkHistoryAlarm, Long pageNum, Long pageSize) {
-    final Page<JkHistoryAlarm> jkHistoryAlarmPage = historyAlarmMapper.selectJkHistoryAlarmPage(jkHistoryAlarm, new Page<>(pageNum, pageSize));
-    jkHistoryAlarmPage.getRecords().forEach(alarm->{
-      final String indexType = alarm.getIndexType();
-      final String indexId = alarm.getIndexId();
-      if("COLLECT".equals(indexType) && StringUtils.isEmpty(alarm.getEnergyId())){
-        //鏍规嵁nodeId鍜宨ndexId 鍘绘煡璇㈣閲忓櫒鍏�
-        EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
-        final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
-        alarm.setEnergyId(meterImplement.getEnergyType());
-      }
-    });
-    return jkHistoryAlarmPage;
-  }
-  
+    // 搴熷純
+    @Override
+    public Page<JkHistoryAlarm> selectJkHistoryAlarmPage(JkHistoryAlarm jkHistoryAlarm, Long pageNum, Long pageSize) {
+        final Page<JkHistoryAlarm> jkHistoryAlarmPage = historyAlarmMapper.selectJkHistoryAlarmPage(jkHistoryAlarm, new Page<>(pageNum, pageSize));
+        jkHistoryAlarmPage.getRecords().forEach(alarm -> {
+            final String indexType = alarm.getIndexType();
+            final String indexId = alarm.getIndexId();
+            if ("COLLECT".equals(indexType) && StringUtils.isEmpty(alarm.getEnergyId())) {
+                //鏍规嵁nodeId鍜宨ndexId 鍘绘煡璇㈣閲忓櫒鍏�
+                EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
+                final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
+                alarm.setEnergyId(meterImplement.getEnergyType());
+            }
+        });
+        return jkHistoryAlarmPage;
+    }
+
+    /**
+     * 鑾峰彇鍘嗗彶鎶ヨ鍒嗛〉鏁版嵁
+     *
+     * @param historyAlarm
+     * @return
+     */
+    @Override
+    public List<JkHistoryAlarm> selectHistoryAlarmPageList(JkHistoryAlarm historyAlarm) {
+
+        List<String> indexIdList = new ArrayList<>();
+        if ("ALL".equals(historyAlarm.getEierarchyFlag())) {
+
+            ModelNode modelNode = modelNodeMapper.selectModelNodeById(historyAlarm.getNodeId());
+            List<ModelNodeIndexInfo> modelNodeIndexInfoList =
+                    modelNodeMapper.getAllModelNodeIndexByAddress(modelNode.getModelCode(), modelNode.getAddress());
+            if (StringUtils.isNotEmpty(historyAlarm.getIndexName())) {
+                modelNodeIndexInfoList = modelNodeIndexInfoList.stream()
+                        .filter(modelNodeIndexInfo -> modelNodeIndexInfo.getIndexName().contains(historyAlarm.getIndexName()))
+                        .collect(Collectors.toList());
+            }
+            if (ObjectUtils.isNotEmpty(historyAlarm.getIndexType())) {
+                modelNodeIndexInfoList = modelNodeIndexInfoList.stream()
+                        .filter(modelNodeIndexInfo -> historyAlarm.getIndexType().equals(modelNodeIndexInfo.getIndexType()))
+                        .collect(Collectors.toList());
+            }
+            indexIdList = modelNodeIndexInfoList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList());
+
+        } else {
+
+            LambdaQueryWrapper<NodeIndex> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(NodeIndex::getNodeId, historyAlarm.getNodeId());
+            List<NodeIndex> nodeIndexList = nodeIndexMapper.selectList(queryWrapper);
+            List<String> allIndexIdList = nodeIndexList.stream().map(NodeIndex::getIndexId).collect(Collectors.toList());
+            if (ObjectUtils.isNotEmpty(allIndexIdList)) {
+                List<EnergyIndex> indexList = energyIndexMapper.selectEnergyIndexByIds(allIndexIdList);
+                if (ObjectUtils.isNotEmpty(historyAlarm.getIndexName())) {
+                    indexList = indexList.stream().filter(energyIndex -> energyIndex.getName().contains(historyAlarm.getIndexName())).collect(Collectors.toList());
+                }
+                if (ObjectUtils.isNotEmpty(historyAlarm.getIndexType())) {
+                    indexList = indexList.stream().filter(energyIndex -> historyAlarm.getIndexType().equals(energyIndex.getIndexTypeCode())).collect(Collectors.toList());
+                }
+                indexIdList = indexList.stream().map(EnergyIndex::getIndexId).collect(Collectors.toList());
+            }
+        }
+
+        if (ObjectUtils.isEmpty(indexIdList)) {
+            return new ArrayList<>();
+        }
+
+        //鏃堕棿澶勭悊 濡傛灉涓嶄紶鏃堕棿榛樿鏌ヨ褰撳ぉ鐨勬暟鎹�
+        Date endTime = DateUtils.parseDate(historyAlarm.getEndTime());
+        if (ObjectUtils.isEmpty(endTime)) {
+            endTime = DateUtil.endOfDay(DateUtils.getNowDate());
+        }
+        Date beginTime = DateUtils.parseDate(historyAlarm.getEndTime());
+        if (ObjectUtils.isEmpty(beginTime)) {
+            beginTime = DateUtil.beginOfDay(DateUtils.getNowDate());
+        }
+
+        List<JkHistoryAlarm> historyAlarmList = historyAlarmMapper.getHistoryAlarmList(indexIdList, beginTime, endTime);
+        return historyAlarmList;
+    }
+
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
index 56b41e1..6af717b 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
@@ -215,4 +215,9 @@
                                                      @Param("energyType") String energyType,
                                                      @Param("timeType") TimeType timeType,
                                                      @Param("dateTimeMap") Map<String, LocalDateTime> dateTimeMap);
+
+    /**
+     * 閫氳繃鑺傜偣鍦板潃鏌ヨ鑺傜偣涓嬪強瀛愯妭鐐逛笅鐨勬墍鏈夌偣浣嶄俊鎭�
+     */
+    List<ModelNodeIndexInfo> getAllModelNodeIndexByAddress(@Param("modelCode") String modelCode, @Param("address") String address);
 }
diff --git a/zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml b/zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml
index d7d6f6e..68ca059 100644
--- a/zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml
@@ -4,7 +4,7 @@
   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zhitan.alarm.mapper.HistoryAlarmMapper">
 
-  <resultMap type="HistoryAlarm" id="HistoryAlarmResult">
+  <resultMap type="com.zhitan.alarm.domain.HistoryAlarm" id="HistoryAlarmResult">
     <result property="id" column="id"/>
     <result property="endTime" column="end_time"/>
     <result property="indexId" column="index_id"/>
@@ -18,7 +18,7 @@
     <result property="content" column="content"/>
   </resultMap>
 
-  <resultMap type="JkHistoryAlarm" id="JkHistoryAlarmResult">
+  <resultMap type="com.zhitan.alarm.domain.JkHistoryAlarm" id="JkHistoryAlarmResult">
     <result property="modelName" column="modelname"/>
     <result property="code" column="code"/>
     <result property="indexName" column="indexname"/>
@@ -50,7 +50,7 @@
     from history_alarm
   </sql>
 
-  <select id="selectHistoryAlarmList" parameterType="HistoryAlarm" resultMap="HistoryAlarmResult">
+  <select id="selectHistoryAlarmList" parameterType="com.zhitan.alarm.domain.HistoryAlarm" resultMap="HistoryAlarmResult">
     <include refid="selectHistoryAlarmVo"/>
     <where>
       <if test="indexName != null  and indexName != ''">and index_name like concat('%',
@@ -77,7 +77,7 @@
   </select>
 
 
-  <update id="updateHistoryAlarm" parameterType="HistoryAlarm">
+  <update id="updateHistoryAlarm" parameterType="com.zhitan.alarm.domain.HistoryAlarm">
     delete from realtime_alarm where alarm_code = #{alarmCode};
     insert into history_alarm
     <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -127,7 +127,7 @@
   </delete>
 
   <!--鍘嗗彶 鎶ヨ鍒楄〃椤甸潰 閲囬泦鐐� 涓婚〉闈㈠垪琛ㄦ煡璇�-->
-  <select id="selectJkHistoryAlarmList" parameterType="JkHistoryAlarm"
+  <select id="selectJkHistoryAlarmList" parameterType="com.zhitan.alarm.domain.JkHistoryAlarm"
     resultMap="JkHistoryAlarmResult">
     SELECT
     mo."name" AS modelname,
@@ -180,7 +180,7 @@
     order by alarm_level,mo.node_id,limit_type asc
   </select>
 
-  <select id="selectJkHistoryAlarmListExcel" parameterType="JkHistoryAlarm"
+  <select id="selectJkHistoryAlarmListExcel" parameterType="com.zhitan.alarm.domain.JkHistoryAlarm"
     resultMap="JkHistoryAlarmResult">
     SELECT
     mo."name" AS modelname,
@@ -232,7 +232,7 @@
     order by alarm_level,mo.node_id,limit_type asc
   </select>
 
-  <select id="selectHistoryAlarmNoteList" parameterType="JkHistoryAlarm"
+  <select id="selectHistoryAlarmNoteList" parameterType="com.zhitan.alarm.domain.JkHistoryAlarm"
     resultMap="JkHistoryAlarmResult">
     SELECT
     ei.code,
@@ -273,7 +273,7 @@
     </if>
     order by alarm_level,limit_type asc
   </select>
-  <select id="selectJkHistoryAlarmPage" resultType="JkHistoryAlarm">
+  <select id="selectJkHistoryAlarmPage" resultType="com.zhitan.alarm.domain.JkHistoryAlarm">
     SELECT
     mo."name" AS modelname,
     ei.code,
@@ -294,7 +294,7 @@
     energy_index ei,
     node_index ni,
     model_node mo,
-    history_alarm bj ,
+    history_alarm bj,
     alarm_item alit
     WHERE
     ni.node_id IN (
@@ -310,30 +310,71 @@
     AND alit.alarm_code = bj.alarm_code
     AND alit.time_slot='LIVE'
     AND ei.index_type=#{jkHistoryAlarm.indexType}
-    <if test="jkHistoryAlarm.indexName != null  and jkHistoryAlarm.indexName != ''">and ei.name like concat('%', #{jkHistoryAlarm.indexName},
-      '%')
+    <if test="jkHistoryAlarm.indexName != null  and jkHistoryAlarm.indexName != ''">
+      and ei.name like concat('%', #{jkHistoryAlarm.indexName}, '%')
     </if>
-    <if test="jkHistoryAlarm.limitType != null  and jkHistoryAlarm.limitType != ''">and alit.limit_type=#{jkHistoryAlarm.limitType}</if>
-    <if test="jkHistoryAlarm.alarmLevel != null  and jkHistoryAlarm.alarmLevel != ''">and alit.alarm_level=#{jkHistoryAlarm.alarmLevel}</if>
-    <if test="jkHistoryAlarm.beginTime != null and jkHistoryAlarm.beginTime != ''">and begin_time &gt;=
-      to_timestamp(#{jkHistoryAlarm.beginTime},'yyyy-mm-dd hh24:mi:ss')
+    <if test="jkHistoryAlarm.limitType != null  and jkHistoryAlarm.limitType != ''">
+      and alit.limit_type=#{jkHistoryAlarm.limitType}
+      </if>
+    <if test="jkHistoryAlarm.alarmLevel != null  and jkHistoryAlarm.alarmLevel != ''">
+      and alit.alarm_level=#{jkHistoryAlarm.alarmLevel}
+      </if>
+    <if test="jkHistoryAlarm.beginTime != null and jkHistoryAlarm.beginTime != ''">
+      and begin_time &gt;= to_timestamp(#{jkHistoryAlarm.beginTime}, 'yyyy-mm-dd hh24:mi:ss')
     </if>
-    <if test="jkHistoryAlarm.endTime != null and jkHistoryAlarm.endTime != ''">and begin_time &lt;=
-      to_timestamp(#{jkHistoryAlarm.endTime},'yyyy-mm-dd hh24:mi:ss')
+    <if test="jkHistoryAlarm.endTime != null and jkHistoryAlarm.endTime != ''">
+      and begin_time &lt;= to_timestamp(#{jkHistoryAlarm.endTime},'yyyy-mm-dd hh24:mi:ss')
     </if>
     order by alarm_level,mo.node_id,limit_type asc
   </select>
+
   <select id="selectCountByTime" resultType="java.lang.Integer">
     select count(0)
     from history_alarm 
     <where>
       <if test="beginTime != null ">
-       and begin_time &gt;= #{beginTime}
+        and begin_time &gt;= #{beginTime}
       </if>
       <if test="endTime != null ">
-      and begin_time &lt;= #{endTime}
+        and begin_time &lt;= #{endTime}
+      </if>
+      <if test="nodeIdList != null and nodeIdList.size() > 0">
+        and node_id in
+        <foreach collection="nodeIdList" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
       </if>
     </where>
   </select>
+    <select id="getHistoryAlarmList" resultType="com.zhitan.alarm.domain.JkHistoryAlarm">
+      SELECT
+        mn."name" modelName,
+        mi.meter_name meterName,
+        his.index_id indexId,
+        ei."name" indexName,
+        ei.code code,
+        ei.unit_id unitId,
+        ai.alarm_level alarmLevel,
+        ai.limit_type limitType,
+        his.limiting_value limitingValue,
+        his.alarm_value alarmValue,
+        his.begin_time beginTime,
+        his.end_time endTime,
+        his.duration
+      FROM
+        history_alarm his
+          LEFT JOIN alarm_item ai ON his.item_id = ai."id"
+          LEFT JOIN energy_index ei ON his.index_id = ei.index_id
+          LEFT JOIN meter_implement mi ON ei.meter_id = mi."id"
+          LEFT JOIN model_node mn ON mn.node_id = ai.node_id
+      WHERE
+        his.begin_time BETWEEN #{beginTime} AND #{endTime}
+        <if test="indexIdList != null and indexIdList.size() > 0">
+          AND his.index_id IN
+          <foreach collection="indexIdList" item="item" open="(" separator="," close=")">
+            #{item}
+          </foreach>
+        </if>
+    </select>
 
 </mapper>
diff --git a/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
index 3e16008..1145863 100644
--- a/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
@@ -4,7 +4,7 @@
   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zhitan.model.mapper.EnergyIndexMapper">
 
-  <resultMap type="EnergyIndex" id="EnergyIndexResult">
+  <resultMap type="com.zhitan.model.domain.EnergyIndex" id="EnergyIndexResult">
     <result property="indexId" column="index_id"/>
     <result property="name" column="name"/>
     <result property="code" column="code"/>
@@ -34,7 +34,7 @@
     from energy_index
   </sql>
 
-  <select id="selectEnergyIndexList" parameterType="EnergyIndex" resultMap="EnergyIndexResult">
+  <select id="selectEnergyIndexList" parameterType="com.zhitan.model.domain.EnergyIndex" resultMap="EnergyIndexResult">
     select ni.index_id, name, code, index_type, remark, unit_id, index_category
     from energy_index ei left join node_index ni on ei.index_id = ni.index_id
     <where>
@@ -59,7 +59,7 @@
     <include refid="selectEnergyIndexVo"/>
     where
         index_id IN
-        <foreach collection="list" item="indexId" open="(" separator="," close=")">
+        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
           #{indexId}
         </foreach>
   </select>
@@ -145,7 +145,7 @@
     order by ei.order_num
   </select>
 
-  <insert id="insertEnergyIndex" parameterType="EnergyIndex">
+  <insert id="insertEnergyIndex" parameterType="com.zhitan.model.domain.EnergyIndex">
     insert into energy_index
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="indexId != null  and indexId != ''">index_id,</if>
@@ -271,7 +271,7 @@
     </foreach>
   </insert>
 
-  <update id="updateEnergyIndex" parameterType="EnergyIndex">
+  <update id="updateEnergyIndex" parameterType="com.zhitan.model.domain.EnergyIndex">
     update energy_index
     <trim prefix="SET" suffixOverrides=",">
       <if test="name != null  and name != ''">name = #{name},</if>
diff --git a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
index eb7fbde..d8486ec 100644
--- a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
+++ b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml
@@ -466,4 +466,22 @@
           AND di.data_time >= #{dateTimeMap.startTime}
           AND di.data_time &lt;= #{dateTimeMap.endTime}
     </select>
+    <select id="getAllModelNodeIndexByAddress" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfo">
+        SELECT
+            mn.node_id nodeId,
+            mn.code nodeCode,
+            mn."name" nodeName,
+            ni.index_id indexId,
+            ei."name" indexName,
+            ei.index_type indexType,
+            mi.energy_type
+        FROM
+            "model_node" mn
+                LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id
+                LEFT JOIN energy_index ei ON ni.index_id = ei.index_id
+                LEFT JOIN meter_implement mi ON mi."id" = ei.meter_id
+        WHERE
+            mn.model_code = #{modelCode}
+          AND mn.address LIKE concat( #{address} , '%' )
+    </select>
 </mapper>

--
Gitblit v1.9.3