DYL0109
2025-04-18 940bdec33a4c2a6b52d1497e6eeffddb1b6b4585
Merge pull request #73 from zhitan-cloud/develop1.0

Develop1.0
已添加1个文件
已重命名2个文件
已修改15个文件
1519 ■■■■■ 文件已修改
zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalysisController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/HistoryAlarmController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/alarm/domain/dto/AlarmAnalysisDTO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/alarm/mapper/HistoryAlarmMapper.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalysisService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/alarm/services/impl/HistoryAlarmServiceImpl.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/MeterImplementModel.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/alarm/HistoryAlarmMapper.xml 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml 793 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-vue/src/views/alarmmanage/alarmrecord/alarmRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-vue/src/views/alarmmanage/measuremen/measuremen.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalysisController.java
ÎļþÃû´Ó zhitan-admin/src/main/java/com/zhitan/web/controller/alarm/AlarmAnalyisisController.java ÐÞ¸Ä
@@ -2,36 +2,41 @@
import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO;
import com.zhitan.alarm.domain.vo.AlarmAnalysisVO;
import com.zhitan.alarm.services.IAlarmAnalyisisService;
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;
/**
geng * description æŠ¥è­¦åˆ†æžç›¸å…³åŠŸèƒ½
* description æŠ¥è­¦åˆ†æžç›¸å…³åŠŸèƒ½
 *
 * @author hmj
 * @date 2024-10-26 17:31
 * @author zhitan
 * @date
 */
@RestController
@RequestMapping("/alarmAnalysis")
public class AlarmAnalyisisController extends BaseController {
public class AlarmAnalysisController extends BaseController {
    @Autowired
    private IAlarmAnalyisisService alarmAnalyisisService;
    private IAlarmAnalysisService alarmAnalysisService;
    @GetMapping("/getByNodeId")
    public AjaxResult getByNodeId(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalyisisService.getByNodeId(alarmAnalysisDTO);
        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalysisService.getByNodeId(alarmAnalysisDTO);
        return AjaxResult.success(alarmAnalysisVO);
    }
    @GetMapping("/getCountInfo")
    public AjaxResult getCountInfo(@Validated AlarmAnalysisDTO alarmAnalysisDTO){
        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalyisisService.getCountInfo(alarmAnalysisDTO);
        if(ObjectUtils.isEmpty(alarmAnalysisDTO.getModelCode())){
            return AjaxResult.error("模型编码不能为空");
        }
        AlarmAnalysisVO alarmAnalysisVO  = alarmAnalysisService.getCountInfo(alarmAnalysisDTO);
        return AjaxResult.success(alarmAnalysisVO);
    }
}
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,12 +53,11 @@
     * åŽ†å²æŠ¥è­¦ é¡µé¢ æ ¹æ® èŠ‚ç‚¹ç›®å½•å’Œ æ¡ä»¶æŸ¥è¯¢
     */
    @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);
        return getDataTable(list);
        return getDataTable(historyAlarmService.selectHistoryAlarmPageList(jkHistoryAlarm));
    }
    /**
     * å¯¼å‡ºåŽ†å²æŠ¥è­¦ç›‘æŽ§åˆ—è¡¨
@@ -70,7 +67,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 +162,7 @@
    public TableDataInfo listNote(JkHistoryAlarm jkHistoryAlarm)
    {
        startPage();
        List<JkHistoryAlarm> list = iHistoryAlarmService.selectHistoryAlarmNoteList(jkHistoryAlarm);
        List<JkHistoryAlarm> list = historyAlarmService.selectHistoryAlarmNoteList(jkHistoryAlarm);
        return getDataTable(list);
    }
}
zhitan-framework/src/main/java/com/zhitan/framework/web/service/SysLoginService.java
@@ -61,7 +61,7 @@
    public String login(String username, String password, String code, String uuid)
    {
        // éªŒè¯ç æ ¡éªŒ
        validateCaptcha(username, code, uuid);
//        validateCaptcha(username, code, uuid);
        // ç™»å½•前置校验
        loginPreCheck(username, password);
        // ç”¨æˆ·éªŒè¯
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;
}
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;
/**
@@ -17,28 +18,34 @@
 */
public interface HistoryAlarmMapper {
  /**
   * èŽ·å–åŽ†å²æŠ¥è­¦é›†åˆ
   *
   * @param jkHistoryAlarm æŠ¥è­¦å‚æ•°
   * @return é¢„报警设置集合
   */
  List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm);
    /**
     * èŽ·å–åŽ†å²æŠ¥è­¦é›†åˆ
     *
     * @param jkHistoryAlarm æŠ¥è­¦å‚æ•°
     * @return é¢„报警设置集合
     */
    List<JkHistoryAlarm> selectJkHistoryAlarmList(JkHistoryAlarm jkHistoryAlarm);
  List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm);
    List<JkHistoryAlarm> selectJkHistoryAlarmListExcel(JkHistoryAlarm jkHistoryAlarm);
  /**
   * å®žæ—¶æ£€æµ‹ åŠŸèƒ½ çš„多 sheet页  å±•示 ç»„态图  æµ‹ç‚¹ æŠ¥è­¦ä¿¡æ¯
   *
   * @param jkHistoryAlarm
   * @return
   */
  List<JkHistoryAlarm> selectHistoryAlarmNoteList(JkHistoryAlarm jkHistoryAlarm);
    /**
     * å®žæ—¶æ£€æµ‹ åŠŸèƒ½ çš„多 sheet页  å±•示 ç»„态图  æµ‹ç‚¹ æŠ¥è­¦ä¿¡æ¯
     *
     * @param jkHistoryAlarm
     * @return
     */
    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);
    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("indexIdList") List<String> indexIdList);
    Page<JkHistoryAlarm> getHistoryAlarmList(@Param("beginTime") Date beginTime,
                                             @Param("endTime") Date endTime,
                                             @Param("indexIdList") List<String> indexIdList,
                                             Page<JkHistoryAlarm> pageInfo);
}
zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalysisService.java
ÎļþÃû´Ó zhitan-system/src/main/java/com/zhitan/alarm/services/IAlarmAnalyisisService.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);
}
zhitan-system/src/main/java/com/zhitan/alarm/services/IHistoryAlarmService.java
@@ -32,5 +32,10 @@
  void updateHistoryAlarm(String alarmCode, HistoryAlarm historyAlarm);
  Page<JkHistoryAlarm> selectJkHistoryAlarmPage(JkHistoryAlarm jkHistoryAlarm, Long pageNum, Long pageSize);
  /**
   * åŽ†å²æŠ¥è­¦åˆ†é¡µæŸ¥è¯¢
   * @param jkHistoryAlarm
   * @return
   */
  Page<JkHistoryAlarm> selectHistoryAlarmPageList(JkHistoryAlarm jkHistoryAlarm);
}
zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java
@@ -2,13 +2,14 @@
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.zhitan.alarm.domain.JkHistoryAlarm;
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.basicdata.domain.MeterImplement;
import com.zhitan.alarm.services.IAlarmAnalysisService;
import com.zhitan.basicdata.domain.SysEnergy;
import com.zhitan.basicdata.domain.vo.MeterImplementModel;
import com.zhitan.basicdata.mapper.MeterImplementMapper;
import com.zhitan.basicdata.mapper.SysEnergyMapper;
import com.zhitan.common.enums.IndexType;
@@ -16,7 +17,7 @@
import com.zhitan.common.utils.StringUtils;
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;
@@ -25,21 +26,18 @@
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
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,22 +48,22 @@
    private final EnergyIndexMapper energyIndexMapper;
    
    private final SysEnergyMapper sysEnergyMapper;
    /**
     * æ ¹æ®èŠ‚ç‚¹id获取报警分析信息
     *
     * @param alarmAnalysisDTO
     * @return
     */
    @Override
    public AlarmAnalysisVO getByNodeId(AlarmAnalysisDTO alarmAnalysisDTO) {
        AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
        List<EnergyProportion> alarmProportionList = new ArrayList<>();
        for(IndexType indexType : IndexType.values()){
            EnergyProportion proportion = new EnergyProportion();
            proportion.setEnergyName(indexType.name());
            proportion.setCount(0D);
            proportion.setPercentage(0D);
            alarmProportionList.add(proportion);
        }
        // åˆå§‹åŒ–报警比例列表
        List<EnergyProportion> alarmProportionList = initializeProportionList(IndexType.values());
        // åˆå§‹åŒ–能源比例列表
        List<EnergyProportion> energyProportionList = new ArrayList<>();
        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(new SysEnergy());
        sysEnergies.forEach(sysEnergy -> {
        sysEnergyMapper.selectSysEnergyList(new SysEnergy()).forEach(sysEnergy -> {
            EnergyProportion proportion = new EnergyProportion();
            proportion.setEnergyName(sysEnergy.getEnersno());
            proportion.setCount(0D);
@@ -103,67 +101,21 @@
        query.setNodeId(nodeId);
        final List<JkHistoryAlarm> jkHistoryAlarms = historyAlarmMapper.selectJkHistoryAlarmList(query);
        if(CollectionUtils.isNotEmpty(jkHistoryAlarms)) {
            jkHistoryAlarms.forEach(alarm -> {
                final String indexType = alarm.getIndexType();
                final String indexId = alarm.getIndexId();
                final String alarmNodeId = alarm.getNodeId();
                if ("COLLECT".equals(indexType) && StringUtils.isEmpty(alarm.getEnergyId())) {
                    //根据nodeId和indexId åŽ»æŸ¥è¯¢è®¡é‡å™¨å…·
                    EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
                    final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
                    alarm.setEnergyId(meterImplement.getEnergyType());
                }
            });
            final Map<String, List<JkHistoryAlarm>> alarmTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getIndexType));
            alarmTypeMap.forEach((key, value) -> {
                alarmProportionList.forEach(alarm->{
                    if(alarm.getEnergyName().equals(key)){
                        alarm.setEnergyName(key);
                        alarm.setCount(format2Double(value.size()));
                        double percentage = value.size() / jkHistoryAlarms.size() * 100;
                        alarm.setPercentage(format2Double(percentage));
                    }
                });
            });
            final Map<String, List<JkHistoryAlarm>> energyTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getEnergyId));
            energyTypeMap.forEach((key, value) -> {
                energyProportionList.forEach(en->{
                    if(en.getEnergyName().equals(key)){
                        en.setEnergyName(key);
                        en.setCount(format2Double(value.size()));
                        double percentage = value.size() / jkHistoryAlarms.size() * 100;
                        en.setPercentage(format2Double(percentage));
                    }
                });
            });
            // è®¾ç½®èƒ½æºç±»åž‹
            processEnergyType(jkHistoryAlarms);
            jkHistoryAlarms.forEach(jkHistoryAlarm -> {
                final String alarmBeginTime = DateUtil.format(jkHistoryAlarm.getAlarmBeginTime(), timeFormat);
                jkHistoryAlarm.setAlarmTime(alarmBeginTime);
            });
            final Map<String, List<JkHistoryAlarm>> timeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getAlarmTime));
            while (!beginTime.after(endTime)) {
                final String currentTime = DateUtil.format(beginTime, timeFormat);
                final List<JkHistoryAlarm> value = timeMap.get(currentTime);
                ChartData chartData = new ChartData();
                chartData.setXData(currentTime);
                chartData.setYValue(null == value?0:(double)value.size());
                chartDataList.add(chartData);
            // è®¡ç®—报警类型比例
            calculateProportions(jkHistoryAlarms, alarmProportionList, JkHistoryAlarm::getIndexType);
            // è®¡ç®—能源类型比例
            calculateProportions(jkHistoryAlarms, energyProportionList, JkHistoryAlarm::getEnergyId);
                switch (TimeType.valueOf(queryTimeType)) {
                    case DAY:
                        beginTime = DateUtil.offsetHour(beginTime, 1);
                        break;
                    case MONTH:
                        beginTime = DateUtil.offsetDay(beginTime, 1);
                        break;
                    default:
                        beginTime = DateUtil.offsetMonth(beginTime, 1);
                        break;
                }
            }
            // å¤„理报警时间
            processAlarmTimes(jkHistoryAlarms, timeFormat);
            // ç”Ÿæˆå›¾è¡¨æ•°æ®
            generateChartData(chartDataList, jkHistoryAlarms, beginTime, endTime, timeFormat, queryTimeType);
        }
        alarmAnalysisVO.setAlarmProportion(alarmProportionList);
        alarmAnalysisVO.setEnergyProportion(energyProportionList);
@@ -171,29 +123,93 @@
        return alarmAnalysisVO;
    }
    /**
     * è®¾ç½®èƒ½æºç±»åž‹
     */
    private void processEnergyType(List<JkHistoryAlarm> jkHistoryAlarms) {
        List<String> indexIds = jkHistoryAlarms.stream().map(JkHistoryAlarm::getIndexId).collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(indexIds)) {
            List<MeterImplementModel> modelList = energyIndexMapper.selectEnergyTypeByIndex(indexIds);
            if (CollectionUtils.isNotEmpty(modelList)){
                Map<String, String> energyMap = modelList.stream().collect(Collectors.toMap(MeterImplementModel::getIndexId, MeterImplementModel::getEnergyType));
    @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());
                jkHistoryAlarms.forEach(alarm -> {
                    if (IndexType.COLLECT.getDescription().equals(alarm.getIndexType()) && StringUtils.isEmpty(alarm.getEnergyId())){
                        alarm.setEnergyId(energyMap.get(alarm.getIndexId()));
                    }
                });
            }
        }
    }
        /**
         * æŸ¥è¯¢ç‚¹ä½ä¸Žç”¨èƒ½å•元信息
         */
        List<ModelNodeIndexInfo> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,null);
        List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList());
    /**
     * è®¡ç®—占比
     */
    private void calculateProportions(List<JkHistoryAlarm> jkHistoryAlarms, List<EnergyProportion> proportionList, java.util.function.Function<JkHistoryAlarm, String> keyExtractor) {
        Map<String, List<JkHistoryAlarm>> typeMap = jkHistoryAlarms.stream()
                .collect(Collectors.groupingBy(keyExtractor));
        typeMap.forEach((key, value) -> {
            proportionList.forEach(alarm -> {
                if (alarm.getEnergyName().equals(key)) {
                    alarm.setCount(format2Double(value.size()));
                    double percentage = (double) value.size() / jkHistoryAlarms.size() * 100;
                    alarm.setPercentage(format2Double(percentage));
                }
            });
        });
    }
        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 void processAlarmTimes(List<JkHistoryAlarm> jkHistoryAlarms, String timeFormat) {
        jkHistoryAlarms.forEach(jkHistoryAlarm -> {
            String alarmBeginTime = DateUtil.format(jkHistoryAlarm.getAlarmBeginTime(), timeFormat);
            jkHistoryAlarm.setAlarmTime(alarmBeginTime);
        });
    }
    /**
     * ç”Ÿæˆå›¾è¡¨æ•°æ®
     */
    private void generateChartData(List<ChartData> chartDataList, List<JkHistoryAlarm> jkHistoryAlarms, Date beginTime, Date endTime, String timeFormat, String queryTimeType) {
        Map<String, List<JkHistoryAlarm>> timeMap = jkHistoryAlarms.stream()
                .collect(Collectors.groupingBy(JkHistoryAlarm::getAlarmTime));
        while (!beginTime.after(endTime)) {
            String currentTime = DateUtil.format(beginTime, timeFormat);
            List<JkHistoryAlarm> value = timeMap.get(currentTime);
            ChartData chartData = new ChartData();
            chartData.setXData(currentTime);
            chartData.setYValue(value == null ? 0 : (double) value.size());
            chartDataList.add(chartData);
            switch (TimeType.valueOf(queryTimeType)) {
                case DAY:
                    beginTime = DateUtil.offsetHour(beginTime, 1);
                    break;
                case MONTH:
                    beginTime = DateUtil.offsetDay(beginTime, 1);
                    break;
                default:
                    beginTime = DateUtil.offsetMonth(beginTime, 1);
                    break;
            }
        }
    }
    /**
     * åˆå§‹åŒ–占比列表
     */
    private List<EnergyProportion> initializeProportionList(Object[] items) {
        List<EnergyProportion> proportionList = new ArrayList<>();
        for (Object item : items) {
            EnergyProportion proportion = new EnergyProportion();
            proportion.setEnergyName(item.toString());
            proportion.setCount(0D);
            proportion.setPercentage(0D);
            proportionList.add(proportion);
        }
        return proportionList;
    }
    private double format2Double(double averageEnergy) {
@@ -204,4 +220,41 @@
        String formattedResult = df.format(averageEnergy);
        return Double.valueOf(formattedResult);
    }
    /**
     * èŽ·å–æŠ¥è­¦åˆ†æžç»Ÿè®¡ä¿¡æ¯
     * @param alarmAnalysisDTO
     * @return
     */
    @Override
    public AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO) {
        AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO();
        ModelNode parentNode = modelNodeMapper.selectModelNodeById(alarmAnalysisDTO.getNodeId());
        if(ObjectUtils.isEmpty(parentNode)){
            return alarmAnalysisVO;
        }
        // æŸ¥è¯¢æ¨¡åž‹ä¸‹çš„点位数据
        List<ModelNodeIndexInfo> nodeIndexInfoList = modelNodeMapper.getAllModelNodeIndexByAddress(parentNode.getModelCode(), parentNode.getAddress());
        alarmAnalysisVO.setIndexCount(nodeIndexInfoList.size());
        if (CollectionUtils.isEmpty(nodeIndexInfoList)) {
            return alarmAnalysisVO;
        }
        // èŽ·å–æœˆæŠ¥è­¦æ•°ã€å¹´æŠ¥è­¦æ•°
        List<String> indexIdList = 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, indexIdList);
        Integer yearCount = historyAlarmMapper.selectCountByTime(beginOfYear,endOfYear, indexIdList);
        alarmAnalysisVO.setMonthCount(monthCount);
        alarmAnalysisVO.setYearCount(yearCount);
        return alarmAnalysisVO;
    }
}
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,147 @@
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.PageUtils;
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和indexId åŽ»æŸ¥è¯¢è®¡é‡å™¨å…·
        EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId);
        final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId());
        alarm.setEnergyId(meterImplement.getEnergyType());
      }
    });
    return jkHistoryAlarmPage;
  }
    /**
     * èŽ·å–åŽ†å²æŠ¥è­¦åˆ†é¡µæ•°æ®
     *
     * @param historyAlarm
     * @return
     */
    @Override
    public Page<JkHistoryAlarm> selectHistoryAlarmPageList(JkHistoryAlarm historyAlarm) {
        Page<JkHistoryAlarm> pageInfo = PageUtils.getPageInfo(JkHistoryAlarm.class);
        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 pageInfo;
        }
        //时间处理 å¦‚果不传时间默认查询当天的数据
        Date endTime = DateUtils.parseDate(historyAlarm.getEndTime());
        if (ObjectUtils.isEmpty(endTime)) {
            endTime = DateUtil.endOfDay(DateUtils.getNowDate());
        }
        Date beginTime = DateUtils.parseDate(historyAlarm.getBeginTime());
        if (ObjectUtils.isEmpty(beginTime)) {
            beginTime = DateUtil.beginOfDay(DateUtils.getNowDate());
        }
        return historyAlarmMapper.getHistoryAlarmList(beginTime, endTime,indexIdList, pageInfo);
    }
}
zhitan-system/src/main/java/com/zhitan/basicdata/domain/vo/MeterImplementModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.zhitan.basicdata.domain.vo;
import lombok.Data;
@Data
public class MeterImplementModel {
    /**
     * indexId
     */
    private String indexId;
    /**
     * meterId
     */
    private String meterId;
    /**
     * èƒ½æºç±»åž‹
     */
    private String energyType;
}
zhitan-system/src/main/java/com/zhitan/model/mapper/EnergyIndexMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhitan.basicdata.domain.vo.MeterImplementModel;
import com.zhitan.model.domain.EnergyIndex;
import com.zhitan.model.domain.EnergyIndexQuery;
import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
@@ -105,4 +106,6 @@
  List<EnergyIndex> getIndexByMeterIdIndexCode(@Param("meterId") String meterId, @Param("indexCode") String indexCode, @Param("nodeId") String nodeId);
  List<ModelNodeIndexInfo> getModelNodeIndexInfoListByIndexIds(@Param("indexIds") String[] indexIds);
  List<MeterImplementModel> selectEnergyTypeByIndex(@Param("indexIds") List<String> indexIds);
}
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);
}
zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java
@@ -52,10 +52,11 @@
    public BigDecimal getEnergyLossRatio() {
        if (BigDecimal.ZERO.compareTo(totalAccumulatedAmount) == 0
                || BigDecimal.ZERO.compareTo(difference) == 0){
                || BigDecimal.ZERO.compareTo(difference) == 0) {
            return BigDecimal.ZERO;
        }
        return energyLossRatio = difference.divide(totalAccumulatedAmount, 2, RoundingMode.HALF_UP);
        // å…ˆè®¡ç®—比例,再乘以 100 è½¬æ¢ä¸ºç™¾åˆ†æ•°
        return energyLossRatio = difference.divide(totalAccumulatedAmount, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP);
    }
    public FlowChartsVO() {
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,74 @@
    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="indexIdList != null and indexIdList.size() > 0">
        and index_id in
        <foreach collection="indexIdList" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
      </if>
    </where>
  </select>
    <select id="getHistoryAlarmList" resultType="com.zhitan.alarm.domain.JkHistoryAlarm">
      SELECT
        mn.node_id nodeId,
        mn."name" modelName,
        mi.meter_name meterName,
        mi.energy_type energyId,
        his.index_id indexId,
        ei."name" indexName,
        ei.index_type indexType,
        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 alarmBeginTime,
        his.end_time alarmEndTime,
        his.duration 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>
zhitan-system/src/main/resources/mapper/model/EnergyIndexMapper.xml
@@ -1,317 +1,319 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhitan.model.mapper.EnergyIndexMapper">
  <resultMap type="EnergyIndex" id="EnergyIndexResult">
    <result property="indexId" column="index_id"/>
    <result property="name" column="name"/>
    <result property="code" column="code"/>
    <result property="indexType" column="index_type"/>
    <result property="indexCategory" column="index_category"/>
    <result property="remark" column="remark"/>
    <result property="unitId" column="unit_id"/>
    <result property="meterId" column="meter_id"/>
    <result property="orderNum" column="order_num"/>
    <result property="equipment" column="equipment"/>
    <result property="energyId" column="energy_id"/>
    <result property="meterName" column="meter_name"/>
  </resultMap>
    <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"/>
        <result property="indexType" column="index_type"/>
        <result property="indexCategory" column="index_category"/>
        <result property="remark" column="remark"/>
        <result property="unitId" column="unit_id"/>
        <result property="meterId" column="meter_id"/>
        <result property="orderNum" column="order_num"/>
        <result property="equipment" column="equipment"/>
        <result property="energyId" column="energy_id"/>
        <result property="meterName" column="meter_name"/>
    </resultMap>
  <sql id="selectEnergyIndexVo">
    select index_id,
           name,
           code,
           index_type,
           index_category,
           remark,
           unit_id,
           meter_id,
           order_num,
           equipment,
           energy_id
    from energy_index
  </sql>
    <sql id="selectEnergyIndexVo">
        select index_id,
               name,
               code,
               index_type,
               index_category,
               remark,
               unit_id,
               meter_id,
               order_num,
               equipment,
               energy_id
        from energy_index
    </sql>
  <select id="selectEnergyIndexList" parameterType="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>
      <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
      <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
      <if test="indexType != null">and index_type = #{indexType}</if>
      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
      <if test="indexCategory != null  and indexCategory != ''">and index_category =
        #{indexCategory}
      </if>
    </where>
    order by ei.order_num
  </select>
    <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>
            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
            <if test="code != null  and code != ''">and code like concat('%', #{code}, '%')</if>
            <if test="indexType != null">and index_type = #{indexType}</if>
            <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
            <if test="indexCategory != null  and indexCategory != ''">and index_category =
                #{indexCategory}
            </if>
        </where>
        order by ei.order_num
    </select>
  <select id="selectEnergyIndexById" parameterType="String" resultMap="EnergyIndexResult">
    <include refid="selectEnergyIndexVo"/>
    where index_id = #{indexId}
    order by order_num
  </select>
    <select id="selectEnergyIndexById" parameterType="String" resultMap="EnergyIndexResult">
        <include refid="selectEnergyIndexVo"/>
        where index_id = #{indexId}
        order by order_num
    </select>
  <select id="selectEnergyIndexByIds" resultType="com.zhitan.model.domain.EnergyIndex">
    <include refid="selectEnergyIndexVo"/>
    where
    <select id="selectEnergyIndexByIds" resultType="com.zhitan.model.domain.EnergyIndex">
        <include refid="selectEnergyIndexVo"/>
        where
        index_id IN
        <foreach collection="list" item="indexId" open="(" separator="," close=")">
          #{indexId}
        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
            #{indexId}
        </foreach>
  </select>
    </select>
  <select id="energyIndexHasExist" resultType="java.lang.Integer">
    select count(*)
    from energy_index
    where code = #{code};
  </select>
  <select id="energyIndexHasExistWhenUpdate" resultType="java.lang.Integer">
    select count(*)
    from energy_index
    where code = #{code}
      AND index_id != #{indexId};
  </select>
  <select id="getMeterIndex" resultMap="EnergyIndexResult">
    <include refid="selectEnergyIndexVo"/>
    where meter_id = #{meterId}
    order by order_num
  </select>
  <select id="modelHasConfig" resultType="java.lang.Integer">
    select count(*)
    from model_node
    where model_code = #{modelCode};
  </select>
  <select id="selectCollectIndex" resultMap="EnergyIndexResult">
    <include refid="selectEnergyIndexVo"/>
    where meter_id = #{deviceId}
    order by order_num
  </select>
  <select id="getEnergyIndexByIds" resultMap="EnergyIndexResult">
    <include refid="selectEnergyIndexVo"/>
    where index_id in
    <foreach item="indexId" collection="list" open="(" separator="," close=")">
      #{indexId}
    </foreach>
    order by order_num
  </select>
  <select id="getEnergyIndexByCodes" resultMap="EnergyIndexResult">
    <include refid="selectEnergyIndexVo"/>
    where code in
    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
      #{indexCode}
    </foreach>
    order by order_num
  </select>
  <select id="getIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
    select ei.*
    from energy_index ei
           left join node_index ni on ei.index_id = ni.index_id
    where ni.node_id in (select node_id
                         from model_node
                         where address like (select address
                                             from model_node
                                             where node_id = #{nodeId}) || '%')
    order by ei.order_num
  </select>
  <select id="searchIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
    select ei.*
    from energy_index ei
           left join node_index ni on ei.index_id = ni.index_id
    where ni.node_id in (select node_id
                         from model_node
                         where address like (select address
                                             from model_node
                                             where node_id = #{nodeId}) || '%')
      and (ei.code like concat('%', #{filter}, '%') or ei.name like concat('%', #{filter}, '%'))
    order by ei.order_num
  </select>
  <select id="selectEnergyIndex" 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>
      <if test="codeOrName != null  and codeOrName != ''">and (name like concat('%', #{codeOrName},
        '%') or code like concat('%', #{codeOrName}, '%'))
      </if>
      <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
      <if test="indexType != null">and index_type = #{indexType}</if>
      <if test="indexCategory != null  and indexCategory != ''">and index_category =
        #{indexCategory}
      </if>
    </where>
    order by ei.order_num
  </select>
    <select id="energyIndexHasExist" resultType="java.lang.Integer">
        select count(*)
        from energy_index
        where code = #{code};
    </select>
    <select id="energyIndexHasExistWhenUpdate" resultType="java.lang.Integer">
        select count(*)
        from energy_index
        where code = #{code}
          AND index_id != #{indexId};
    </select>
    <select id="getMeterIndex" resultMap="EnergyIndexResult">
        <include refid="selectEnergyIndexVo"/>
        where meter_id = #{meterId}
        order by order_num
    </select>
    <select id="modelHasConfig" resultType="java.lang.Integer">
        select count(*)
        from model_node
        where model_code = #{modelCode};
    </select>
    <select id="selectCollectIndex" resultMap="EnergyIndexResult">
        <include refid="selectEnergyIndexVo"/>
        where meter_id = #{deviceId}
        order by order_num
    </select>
    <select id="getEnergyIndexByIds" resultMap="EnergyIndexResult">
        <include refid="selectEnergyIndexVo"/>
        where index_id in
        <foreach item="indexId" collection="list" open="(" separator="," close=")">
            #{indexId}
        </foreach>
        order by order_num
    </select>
    <select id="getEnergyIndexByCodes" resultMap="EnergyIndexResult">
        <include refid="selectEnergyIndexVo"/>
        where code in
        <foreach item="indexCode" collection="list" open="(" separator="," close=")">
            #{indexCode}
        </foreach>
        order by order_num
    </select>
    <select id="getIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
        select ei.*
        from energy_index ei
                 left join node_index ni on ei.index_id = ni.index_id
        where ni.node_id in (select node_id
                             from model_node
                             where address like (select address
                                                 from model_node
                                                 where node_id = #{nodeId}) || '%')
        order by ei.order_num
    </select>
    <select id="searchIndexByNodeAndChildrenNode" resultMap="EnergyIndexResult">
        select ei.*
        from energy_index ei
                 left join node_index ni on ei.index_id = ni.index_id
        where ni.node_id in (select node_id
                             from model_node
                             where address like (select address
                                                 from model_node
                                                 where node_id = #{nodeId}) || '%')
          and (ei.code like concat('%', #{filter}, '%') or ei.name like concat('%', #{filter}, '%'))
        order by ei.order_num
    </select>
    <select id="selectEnergyIndex" 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>
            <if test="codeOrName != null  and codeOrName != ''">and (name like concat('%', #{codeOrName},
                '%') or code like concat('%', #{codeOrName}, '%'))
            </if>
            <if test="nodeId != null  and nodeId != ''">and node_id = #{nodeId}</if>
            <if test="indexType != null">and index_type = #{indexType}</if>
            <if test="indexCategory != null  and indexCategory != ''">and index_category =
                #{indexCategory}
            </if>
        </where>
        order by ei.order_num
    </select>
  <insert id="insertEnergyIndex" parameterType="EnergyIndex">
    insert into energy_index
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="indexId != null  and indexId != ''">index_id,</if>
      <if test="name != null  and name != ''">name,</if>
      <if test="code != null  and code != ''">code,</if>
      <if test="indexType != null">index_type,</if>
      <if test="indexCategory != null  and indexCategory != ''">
        index_category,
      </if>
      <if test="remark != null  and remark != ''">remark,</if>
      <if test="unitId != null  and unitId != ''">unit_id,</if>
      <if test="orderNum != null">order_num,</if>
      <if test="equipment != null">equipment,</if>
      <if test="energyId != null">energy_id,</if>
    </trim>
    <trim prefix="values (" suffix=");" suffixOverrides=",">
      <if test="indexId != null  and indexId != ''">
        #{indexId},
      </if>
      <if test="name != null  and name != ''">#{name},</if>
      <if test="code != null  and code != ''">#{code},</if>
      <if test="indexType != null">
        #{indexType},
      </if>
      <if test="indexCategory != null  and indexCategory != ''">
        #{indexCategory},
      </if>
      <if test="remark != null  and remark != ''">#{remark},
      </if>
      <if test="unitId != null  and unitId != ''">#{unitId},
      </if>
      <if test="orderNum != null">#{orderNum},
      </if>
      <if test="equipment != null">#{equipment},
      </if>
      <if test="energyId != null">#{energyId},
      </if>
    </trim>
    <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>
            <if test="name != null  and name != ''">name,</if>
            <if test="code != null  and code != ''">code,</if>
            <if test="indexType != null">index_type,</if>
            <if test="indexCategory != null  and indexCategory != ''">
                index_category,
            </if>
            <if test="remark != null  and remark != ''">remark,</if>
            <if test="unitId != null  and unitId != ''">unit_id,</if>
            <if test="orderNum != null">order_num,</if>
            <if test="equipment != null">equipment,</if>
            <if test="energyId != null">energy_id,</if>
        </trim>
        <trim prefix="values (" suffix=");" suffixOverrides=",">
            <if test="indexId != null  and indexId != ''">
                #{indexId},
            </if>
            <if test="name != null  and name != ''">#{name},</if>
            <if test="code != null  and code != ''">#{code},</if>
            <if test="indexType != null">
                #{indexType},
            </if>
            <if test="indexCategory != null  and indexCategory != ''">
                #{indexCategory},
            </if>
            <if test="remark != null  and remark != ''">#{remark},
            </if>
            <if test="unitId != null  and unitId != ''">#{unitId},
            </if>
            <if test="orderNum != null">#{orderNum},
            </if>
            <if test="equipment != null">#{equipment},
            </if>
            <if test="energyId != null">#{energyId},
            </if>
        </trim>
  </insert>
  <insert id="insertNodeIndex">
    insert into node_index (node_id, index_id) values (#{nodeId}, #{indexId});
  </insert>
  <insert id="insertEnergyIndices">
    <foreach collection="energyIndices" item="energyIndex" separator=";">
      insert into energy_index
      <trim prefix="(" suffix=")" suffixOverrides=",">
        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
        <if test="energyIndex.indexType != null">index_type,</if>
        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
          index_category,
        </if>
        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
        <if test="energyIndex.orderNum != null">order_num,</if>
      </trim>
      <trim prefix="values (" suffix=")" suffixOverrides=",">
        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
          #{energyIndex.indexId},
        </if>
        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
        <if test="energyIndex.indexType != null">
          #{energyIndex.indexType},
        </if>
        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
          #{energyIndex.indexCategory},
        </if>
        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
        </if>
        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
        </if>
        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
          #{energyIndex.meterId},
        </if>
        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
      </trim>
    </foreach>
  </insert>
  <insert id="saveEnergyIndex">
    <foreach collection="list" item="energyIndex" separator=";">
      insert into energy_index
      <trim prefix="(" suffix=")" suffixOverrides=",">
        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
        <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
        <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
        <if test="energyIndex.indexType != null">index_type,</if>
        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
          index_category,
        </if>
        <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
        <if test="energyIndex.orderNum != null">order_num,</if>
      </trim>
      <trim prefix="values (" suffix=")" suffixOverrides=",">
        <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
          #{energyIndex.indexId},
        </if>
        <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
        <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
        <if test="energyIndex.indexType != null">
          #{energyIndex.indexType},
        </if>
        <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
          #{energyIndex.indexCategory},
        </if>
        <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
        </if>
        <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
        </if>
        <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
          #{energyIndex.meterId},
        </if>
        <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
      </trim>
      ;
      insert into node_index (node_id, index_id) values (#{energyIndex.nodeId},
      #{energyIndex.indexId});
    </foreach>
  </insert>
    </insert>
    <insert id="insertNodeIndex">
        insert into node_index (node_id, index_id)
        values (#{nodeId}, #{indexId});
    </insert>
    <insert id="insertEnergyIndices">
        <foreach collection="energyIndices" item="energyIndex" separator=";">
            insert into energy_index
            <trim prefix="(" suffix=")" suffixOverrides=",">
                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
                <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
                <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
                <if test="energyIndex.indexType != null">index_type,</if>
                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
                    index_category,
                </if>
                <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
                <if test="energyIndex.orderNum != null">order_num,</if>
            </trim>
            <trim prefix="values (" suffix=")" suffixOverrides=",">
                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
                    #{energyIndex.indexId},
                </if>
                <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
                <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
                <if test="energyIndex.indexType != null">
                    #{energyIndex.indexType},
                </if>
                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
                    #{energyIndex.indexCategory},
                </if>
                <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
                </if>
                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
                </if>
                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
                    #{energyIndex.meterId},
                </if>
                <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
            </trim>
        </foreach>
    </insert>
    <insert id="saveEnergyIndex">
        <foreach collection="list" item="energyIndex" separator=";">
            insert into energy_index
            <trim prefix="(" suffix=")" suffixOverrides=",">
                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">index_id,</if>
                <if test="energyIndex.name != null  and energyIndex.name != ''">name,</if>
                <if test="energyIndex.code != null  and energyIndex.code != ''">code,</if>
                <if test="energyIndex.indexType != null">index_type,</if>
                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
                    index_category,
                </if>
                <if test="energyIndex.remark != null  and energyIndex.remark != ''">remark,</if>
                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">unit_id,</if>
                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">meter_id,</if>
                <if test="energyIndex.orderNum != null">order_num,</if>
            </trim>
            <trim prefix="values (" suffix=")" suffixOverrides=",">
                <if test="energyIndex.indexId != null  and energyIndex.indexId != ''">
                    #{energyIndex.indexId},
                </if>
                <if test="energyIndex.name != null  and energyIndex.name != ''">#{energyIndex.name},</if>
                <if test="energyIndex.code != null  and energyIndex.code != ''">#{energyIndex.code},</if>
                <if test="energyIndex.indexType != null">
                    #{energyIndex.indexType},
                </if>
                <if test="energyIndex.indexCategory != null  and energyIndex.indexCategory != ''">
                    #{energyIndex.indexCategory},
                </if>
                <if test="energyIndex.remark != null  and energyIndex.remark != ''">#{energyIndex.remark},
                </if>
                <if test="energyIndex.unitId != null  and energyIndex.unitId != ''">#{energyIndex.unitId},
                </if>
                <if test="energyIndex.meterId != null  and energyIndex.meterId != ''">
                    #{energyIndex.meterId},
                </if>
                <if test="energyIndex.orderNum != null">#{energyIndex.orderNum},</if>
            </trim>
            ;
            insert into node_index (node_id, index_id) values (#{energyIndex.nodeId},
            #{energyIndex.indexId});
        </foreach>
    </insert>
  <update id="updateEnergyIndex" parameterType="EnergyIndex">
    update energy_index
    <trim prefix="SET" suffixOverrides=",">
      <if test="name != null  and name != ''">name = #{name},</if>
      <if test="code != null  and code != ''">code = #{code},</if>
      <if test="indexType != null">index_type = #{indexType},</if>
      <if test="indexCategory != null  and indexCategory != ''">index_category = #{indexCategory},
      </if>
      <if test="remark != null  and remark != ''">remark = #{remark},</if>
      <if test="unitId != null  and unitId != ''">unit_id = #{unitId},</if>
      <if test="orderNum != null">order_num = #{orderNum},</if>
      <if test="equipment != null">equipment = #{equipment},</if>
      <if test="energyId != null">energy_id=#{energyId},</if>
    </trim>
    where index_id = #{indexId}
  </update>
    <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>
            <if test="code != null  and code != ''">code = #{code},</if>
            <if test="indexType != null">index_type = #{indexType},</if>
            <if test="indexCategory != null  and indexCategory != ''">index_category = #{indexCategory},
            </if>
            <if test="remark != null  and remark != ''">remark = #{remark},</if>
            <if test="unitId != null  and unitId != ''">unit_id = #{unitId},</if>
            <if test="orderNum != null">order_num = #{orderNum},</if>
            <if test="equipment != null">equipment = #{equipment},</if>
            <if test="energyId != null">energy_id=#{energyId},</if>
        </trim>
        where index_id = #{indexId}
    </update>
  <delete id="deleteEnergyIndexByIds" parameterType="String">
    delete from energy_index where index_id in
    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
      #{indexId}
    </foreach>;
    delete from node_index where node_id = #{nodeId} and index_id in
    <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
      #{indexId}
    </foreach>;
  </delete>
  <delete id="deleteIndexByMeterId">
    delete
    from energy_index
    where meter_id = #{meterId}
  </delete>
  <delete id="removeEnergyIndex">
    delete from energy_index where index_id in
    <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
      #{indexId}
    </foreach>
  </delete>
    <delete id="deleteEnergyIndexByIds" parameterType="String">
        delete from energy_index where index_id in
        <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
            #{indexId}
        </foreach>;
        delete from node_index where node_id = #{nodeId} and index_id in
        <foreach item="indexId" collection="indexIds" open="(" separator="," close=")">
            #{indexId}
        </foreach>;
    </delete>
    <delete id="deleteIndexByMeterId">
        delete
        from energy_index
        where meter_id = #{meterId}
    </delete>
    <delete id="removeEnergyIndex">
        delete from energy_index where index_id in
        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
            #{indexId}
        </foreach>
    </delete>
  <select id="getEnergyIndexMeterByCodes" resultMap="EnergyIndexResult">
    select ei.index_id,
    <select id="getEnergyIndexMeterByCodes" resultMap="EnergyIndexResult">
        select ei.index_id,
        ei.name,
        ei.code,
        ei.index_type,
@@ -324,100 +326,101 @@
        ei.energy_id,
        meter_name
        from energy_index as ei,meter_implement as me
    where ei.code in
    <foreach item="indexCode" collection="list" open="(" separator="," close=")">
      #{indexCode}
    </foreach>
    and ei.meter_id = me.id
    order by ei.order_num
  </select>
  <select id="selectEnergyIndexPage" 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>
      <if test="query.codeOrName != null  and query.codeOrName != ''">and (name like concat('%', #{query.codeOrName},
        '%') or code like concat('%', #{query.codeOrName}, '%'))
      </if>
      <if test="query.indexType != null">and index_type = #{query.indexType}</if>
      <if test="query.nodeId != null  and query.nodeId != ''">and ni.node_id = #{query.nodeId}</if>
      <if test="query.indexCategory != null  and query.indexCategory != ''">and index_category =
        #{query.indexCategory}
      </if>
    </where>
    order by ei.order_num
  </select>
    <select id="listIndexByMeterIds" resultType="com.zhitan.model.domain.EnergyIndex">
      select ei.index_id,
      name,
      code,
      index_type,
      index_category,
      remark,
      unit_id,
      meter_id,
      order_num,
      equipment,
      energy_id
      from energy_index ei
      left join node_index ni on ei.index_id = ni.index_id
      <where>
        <if test="nodeId != null  and nodeId != ''">and ni.node_id = #{nodeId}</if>
        <if test="meterIds != null">
          and ei.meter_id in
          <foreach collection="meterIds" item="meterId" open="(" separator="," close=")">
            #{meterId}
          </foreach>
        </if>
      </where>
        where ei.code in
        <foreach item="indexCode" collection="list" open="(" separator="," close=")">
            #{indexCode}
        </foreach>
        and ei.meter_id = me.id
        order by ei.order_num
    </select>
  <select id="getiEnergyIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
    <include refid="selectEnergyIndexVo"/>
    where code = #{cdoe}
  </select>
  <select id="getIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
    SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
    LEFT JOIN node_device nd on ei.meter_id =  nd.device_id
    LEFT JOIN meter_implement  mi on mi."id" = nd.device_id
    <where>
        <if test="nodeId != null  and nodeId != ''">and nd.node_id  = #{nodeId}</if>
        <if test="code != null  and code != ''">
          and (mi.meter_name like concat('%', #{code}, '%')
          or ei.code like concat('%', #{code}, '%')
          or ei.name like concat('%', #{code}, '%')
          )
        </if>
    </where>
  </select>
  <select id="getIndexByMeterIdIndexCode" resultType="com.zhitan.model.domain.EnergyIndex">
    SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
    LEFT JOIN node_device nd on ei.meter_id =  nd.device_id
    LEFT JOIN meter_implement  mi on mi."id" = nd.device_id
    <where>
        <if test="nodeId != null  and nodeId != ''">and nd.node_id  = #{nodeId}</if>
        <if test="indexCode != null  and indexCode != ''">
          and (mi.meter_name like concat('%', #{indexCode}, '%')
          or ei.code like concat('%', #{indexCode}, '%')
          or ei.name like concat('%', #{indexCode}, '%')
          )
        </if>
        <if test="meterId != null  and meterId != ''">
          and ei.meter_id = #{meterId}
        </if>
    </where>
  </select>
    <select id="selectEnergyIndexPage" 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>
            <if test="query.codeOrName != null  and query.codeOrName != ''">and (name like concat('%',
                #{query.codeOrName},
                '%') or code like concat('%', #{query.codeOrName}, '%'))
            </if>
            <if test="query.indexType != null">and index_type = #{query.indexType}</if>
            <if test="query.nodeId != null  and query.nodeId != ''">and ni.node_id = #{query.nodeId}</if>
            <if test="query.indexCategory != null  and query.indexCategory != ''">and index_category =
                #{query.indexCategory}
            </if>
        </where>
        order by ei.order_num
    </select>
    <select id="listIndexByMeterIds" resultType="com.zhitan.model.domain.EnergyIndex">
        select ei.index_id,
        name,
        code,
        index_type,
        index_category,
        remark,
        unit_id,
        meter_id,
        order_num,
        equipment,
        energy_id
        from energy_index ei
        left join node_index ni on ei.index_id = ni.index_id
        <where>
            <if test="nodeId != null  and nodeId != ''">and ni.node_id = #{nodeId}</if>
            <if test="meterIds != null">
                and ei.meter_id in
                <foreach collection="meterIds" item="meterId" open="(" separator="," close=")">
                    #{meterId}
                </foreach>
            </if>
        </where>
    </select>
    <select id="getiEnergyIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
        <include refid="selectEnergyIndexVo"/>
        where code = #{cdoe}
    </select>
    <select id="getIndexByCode" resultType="com.zhitan.model.domain.EnergyIndex">
        SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
        LEFT JOIN node_device nd on ei.meter_id = nd.device_id
        LEFT JOIN meter_implement mi on mi."id" = nd.device_id
        <where>
            <if test="nodeId != null  and nodeId != ''">and nd.node_id = #{nodeId}</if>
            <if test="code != null  and code != ''">
                and (mi.meter_name like concat('%', #{code}, '%')
                or ei.code like concat('%', #{code}, '%')
                or ei.name like concat('%', #{code}, '%')
                )
            </if>
        </where>
    </select>
    <select id="getIndexByMeterIdIndexCode" resultType="com.zhitan.model.domain.EnergyIndex">
        SELECT ei.code,mi.meter_name||'_'||ei.name as name from energy_index ei
        LEFT JOIN node_device nd on ei.meter_id = nd.device_id
        LEFT JOIN meter_implement mi on mi."id" = nd.device_id
        <where>
            <if test="nodeId != null  and nodeId != ''">and nd.node_id = #{nodeId}</if>
            <if test="indexCode != null  and indexCode != ''">
                and (mi.meter_name like concat('%', #{indexCode}, '%')
                or ei.code like concat('%', #{indexCode}, '%')
                or ei.name like concat('%', #{indexCode}, '%')
                )
            </if>
            <if test="meterId != null  and meterId != ''">
                and ei.meter_id = #{meterId}
            </if>
        </where>
    </select>
    <select id="getModelNodeIndexInfoListByIndexIds"
            resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfo">
        SELECT     mi.model_name modelName,
          mi.model_code,
          mn."name" "name",
          ei.index_id,
          ei.code indexCode,
          ei."name" indexName,
          ei.energy_id,
          ei.energy_id
        SELECT mi.model_name modelName,
        mi.model_code,
        mn."name" "name",
        ei.index_id,
        ei.code indexCode,
        ei."name" indexName,
        ei.energy_id,
        ei.energy_id
        FROM node_index ni
        INNER JOIN energy_index ei ON ni.index_id = ei.index_id
        LEFT JOIN model_node mn ON ni.node_id = mn.node_id
@@ -427,4 +430,16 @@
            #{indexId}
        </foreach>
    </select>
    <select id="selectEnergyTypeByIndex" resultType="com.zhitan.basicdata.domain.vo.MeterImplementModel">
        select ex.index_id indexId,
               mi.id meterId,
               mi.energy_type energyType
        from energy_index ex
                 left join meter_implement mi on ex.meter_id = mi.id
        where ex.index_id in
        <foreach collection="indexIds" item="indexId" open="(" separator="," close=")">
            #{indexId}
        </foreach>
    </select>
</mapper>
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>
zhitan-vue/src/views/alarmmanage/alarmrecord/alarmRecord.vue
@@ -70,7 +70,7 @@
                show-overflow-tooltip
                :formatter="(row, column) => formatterLabel(energyTypeList, row.energyId)"
              />
              <el-table-column label="预设值" prop="energyType" align="center" show-overflow-tooltip />
              <el-table-column label="预设值" prop="limitingValue" align="center" show-overflow-tooltip />
              <el-table-column label="报警值" prop="alarmValue" align="center" show-overflow-tooltip />
              <el-table-column label="报警时间" prop="alarmBeginTime" align="center" show-overflow-tooltip />
            </el-table>
zhitan-vue/src/views/alarmmanage/measuremen/measuremen.vue
@@ -97,10 +97,13 @@
  timeType: null,
  dataTime: null,
  nodeId: null,
  modelCode: ''
})
import { getByNodeId, getCountInfo } from "@/api/alarmManage/alarmManage"
import { el } from "element-plus/es/locales.mjs"
import { useRoute } from "vue-router"
const route = useRoute()
let form = ref({})
let currentNode = ref()
@@ -114,6 +117,7 @@
  handleTimeType(period.value[0].value)
  getByNodeIdFun()
  getCountInfoFun()
}
function getByNodeIdFun() {
@@ -155,10 +159,12 @@
// getByNodeIdFun()
function handleQuery() {
  getByNodeIdFun()
  getCountInfoFun()
}
function resetQuery() {
  handleTimeType("YEAR")
  getByNodeIdFun()
  getCountInfoFun()
}
let dataArray = ref({
  indexCount: 0,
@@ -166,14 +172,16 @@
  monthCount: 0,
})
function getCountInfoFun() {
  getCountInfo(queryParams.value).then((res) => {
  getCountInfo({
    ...queryParams.value,
    modelCode: route.query.modelCode,
  }).then((res) => {
    if (res.code == 200) {
      dataArray.value = res.data
    }
  })
}
getCountInfoFun()
function pieChart(Id, data, name) {
  console.log(data)
  let total = 0
@@ -274,11 +282,11 @@
      axisPointer: {
        type: "shadow",
      },
      axisTick: {
        show: false,
        alignWithLabel: true,
        length: 5,
      },
      // axisTick: {
      //   show: false,
      //   alignWithLabel: true,
      //   length: 5,
      // },
      // åæ ‡è½´åˆ»åº¦çº¿æ ·å¼
      axisTick: {
        show: false,
@@ -313,11 +321,11 @@
        padding: [0, 0, 5, 0],
      },
      // åæ ‡è½´åˆ»åº¦
      axisTick: {
        show: false,
        alignWithLabel: true,
        length: 5,
      },
      // axisTick: {
      //   show: false,
      //   alignWithLabel: true,
      //   length: 5,
      // },
      // åæ ‡è½´åˆ»åº¦çº¿æ ·å¼
      axisTick: {
        show: false,