丁治程 1 рік тому
батько
коміт
40d508961e

+ 16 - 0
module_tpm/src/main/java/org/jeecg/modules/tpmMessageAlarm/controller/TpmMessageAlarmController.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.tpmMessageAlarm.controller;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -177,4 +178,19 @@ public class TpmMessageAlarmController extends JeecgController<TpmMessageAlarm,
         return super.importExcel(request, response, TpmMessageAlarm.class);
     }
 
+    /**
+    *   author: dzc
+    *   version: 1.0
+    *   des: 报警分析
+    *   date: 2024/4/25
+    */
+	@AutoLog(value = "报警信息-分析统计")
+	@ApiOperation(value="报警信息-分析统计", notes="报警信息-分析统计")
+	//@RequiresPermissions("org.jeecg.modules:tpm_message_alarm:edit")
+	@RequestMapping(value = "/getalarminfo", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<HashMap> getAlarmInfo(@RequestParam(name = "ids",required = true) List<String> ids, String yearmonth) {
+		HashMap map = tpmMessageAlarmService.getAlarmInfo(ids,yearmonth);
+		return Result.OK(map);
+	}
+
 }

+ 51 - 0
module_tpm/src/main/java/org/jeecg/modules/tpmMessageAlarm/entity/TpmMessageAlarmStatistics.java

@@ -0,0 +1,51 @@
+package org.jeecg.modules.tpmMessageAlarm.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author dzc
+ * @date 2024/4/25 10:11
+ * @package org.jeecg.modules.tpmMessageAlarm.entity
+ * @project EMS_server
+ * @des 报警信息统计实体
+ */
+@Data
+public class TpmMessageAlarmStatistics implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 设备id */
+    private Long equipmentid;
+
+    /** 设备名称 */
+    private String equipmentname;
+
+    /** 所属年*/
+    private Long year;
+
+    /** 所属月*/
+    private Long month;
+
+    /** 所属周*/
+    private Long week;
+
+    /** 日期*/
+    private String day;
+
+    /** 周几*/
+    private Long dayofweek;
+
+    /**发生次数*/
+    private Long howManyTimes;
+
+    /**发生次数*/
+    private Long howManyTimes2;
+
+    /**查询ids*/
+    private List<String> ids;
+
+    /** 类别 */
+    private String type;
+}

+ 22 - 0
module_tpm/src/main/java/org/jeecg/modules/tpmMessageAlarm/mapper/TpmMessageAlarmMapper.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarm;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics;
 import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmVo;
 
 /**
@@ -23,4 +24,25 @@ public interface TpmMessageAlarmMapper extends BaseMapper<TpmMessageAlarm> {
     *   date: 2024/4/24
     */
     List<TpmMessageAlarmVo> getTpmMessageAlarmInfo(Page<TpmMessageAlarmVo> page,@Param("tpmMessageAlarm") TpmMessageAlarmVo tpmMessageAlarm);
+
+    /** 报警统计 */
+    List<TpmMessageAlarmStatistics> selectAlarmStatistics(@Param("alarmStatistics") TpmMessageAlarmStatistics alarmStatistics);
+
+    /** 信息统计(报警等级) */
+    List<TpmMessageAlarmStatistics> selectLevelStatistics(@Param("alarmStatistics") TpmMessageAlarmStatistics alarmStatistics);
+
+    /** 报警排名(报警类型) */
+    List<TpmMessageAlarmStatistics> selectAlarmRank(@Param("alarmStatistics") TpmMessageAlarmStatistics alarmStatistics);
+
+    /** 近两年报警对比图(报警类型) */
+    List<TpmMessageAlarmStatistics> selectAlarmTwoYear(@Param("alarmStatistics") TpmMessageAlarmStatistics alarmStatistics);
+
+    /** 报警类型占比 */
+    List<TpmMessageAlarmStatistics> selectTypeRatio(@Param("alarmStatistics") TpmMessageAlarmStatistics alarmStatistics);
+
+    /** 报警趋势散点图 */
+    List<TpmMessageAlarmStatistics> selectAlarmScatter(@Param("alarmStatistics") TpmMessageAlarmStatistics alarmStatistics);
+
+    /** 报警类型信息 */
+    List<TpmMessageAlarmStatistics> selectAlarmType(@Param("alarmStatistics") TpmMessageAlarmStatistics alarmStatistics);
 }

+ 147 - 0
module_tpm/src/main/java/org/jeecg/modules/tpmMessageAlarm/mapper/xml/TpmMessageAlarmMapper.xml

@@ -56,4 +56,151 @@
             <if test="tpmMessageAlarm.status != null"> and s.status = #{tpmMessageAlarm.status}</if>
         </where> order by s.alarmtime  desc
     </select>
+
+
+    <resultMap type="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" id="AlarmStatisticsResult">
+        <result property="equipmentid"    column="equipmentid"    />
+        <result property="equipmentname"    column="equipmentname"    />
+        <result property="year"    column="year"    />
+        <result property="month"    column="month"    />
+        <result property="week"    column="week"    />
+        <result property="day"    column="day"    />
+        <result property="dayofweek"    column="dayofweek"    />
+        <result property="howManyTimes"    column="howManyTimes"    />
+        <result property="howManyTimes2"    column="howManyTimes2"    />
+        <result property="type"    column="type"    />
+    </resultMap>
+
+    <!-- 报警信息统计 -->
+    <select id="selectAlarmStatistics" parameterType="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" resultMap="AlarmStatisticsResult">
+        select 'year' as type, count(*) as howManyTimes
+        from tpm_message_alarm
+        where year=#{alarmStatistics.year}
+        union
+        select 'month' as type, count(*) as howManyTimes
+        from tpm_message_alarm
+        where year=#{alarmStatistics.year} and month=#{alarmStatistics.month}
+    </select>
+
+    <!-- 报警等级统计 -->
+    <select id="selectLevelStatistics" parameterType="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" resultMap="AlarmStatisticsResult">
+        select d.item_text as equipmentname, count(a.id) as howManyTimes
+        from tpm_message_alarm as a
+        left join
+            (
+                select dt.item_text,dt.item_value
+                from sys_dict sd
+                LEFT JOIN sys_dict_item dt
+                on sd.dict_code = 'alarm_level' and sd.id = dt.dict_id
+            )d
+        on a.alarmlevel = d.item_value
+        where a.year=#{alarmStatistics.year} and a.month=#{alarmStatistics.month}
+        group by d.item_text
+        order by d.item_text asc
+    </select>
+
+    <!-- 报警排名 -->
+    <select id="selectAlarmRank" parameterType="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" resultMap="AlarmStatisticsResult">
+        select d.item_text as equipmentname, count(a.id) as howManyTimes
+        from tpm_message_alarm as a
+        left join
+         (
+             select dt.item_text,dt.item_value
+             from sys_dict sd
+             LEFT JOIN sys_dict_item dt
+             on sd.dict_code = 'alarm_type' and sd.id = dt.dict_id
+         )d
+        on a.alarmtype = d.item_value
+        where a.year=#{alarmStatistics.year} and a.month=#{alarmStatistics.month}
+        group by d.item_text
+        order by count(a.id) desc, d.item_text asc
+    </select>
+
+    <!-- 近两年报警对比图(报警类型) -->
+    <select id="selectAlarmTwoYear" parameterType="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" resultMap="AlarmStatisticsResult">
+        select t.*
+        from (
+            select 'lastyear' as type, d.item_text as equipmentname, count(a.id) as howManyTimes
+            from tpm_message_alarm as a
+            left join
+             (
+                 select dt.item_text,dt.item_value
+                 from sys_dict sd
+                 left JOIN sys_dict_item dt on sd.dict_code = 'alarm_type' and sd.id = dt.dict_id
+             )d
+            on a.alarmtype = d.item_value
+            where a.year=#{alarmStatistics.year}-1
+            group by type, d.item_text
+
+            union
+
+            select 'thisyear' as type, d.item_text as equipmentname, count(a.id) as howManyTimes
+            from tpm_message_alarm as a
+            left join
+             (
+                 select dt.item_text,dt.item_value
+                 from sys_dict sd
+                 left JOIN sys_dict_item dt on sd.dict_code = 'alarm_type' and sd.id = dt.dict_id
+             )d
+            on a.alarmtype = d.item_value
+            where a.year=#{alarmStatistics.year}
+            group by type, d.item_text
+
+            union
+
+            select 'all' as type, d.item_text as equipmentname, count(a.id) as howManyTimes
+            from tpm_message_alarm as a
+            left join
+             (
+                 select dt.item_text,dt.item_value
+                 from sys_dict sd
+                 left JOIN sys_dict_item dt on sd.dict_code = 'alarm_type' and sd.id = dt.dict_id
+             )d
+            on a.alarmtype = d.item_value
+            where a.year in (#{alarmStatistics.year},#{alarmStatistics.year}-1)
+            group by type, d.item_text
+        ) as t
+        order by t.type, t.equipmentname
+    </select>
+
+    <!-- 报警类型占比 -->
+    <select id="selectTypeRatio" parameterType="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" resultMap="AlarmStatisticsResult">
+        select d.item_text as equipmentname, count(a.id) as howManyTimes
+        from tpm_message_alarm as a
+        left join
+         (
+             select dt.item_text,dt.item_value
+             from sys_dict sd
+             LEFT JOIN sys_dict_item dt
+             on sd.dict_code = 'alarm_type' and sd.id = dt.dict_id
+         )d
+        on a.alarmtype = d.item_value
+        where a.year=#{alarmStatistics.year} and a.month=#{alarmStatistics.month}
+        group by d.item_text
+        order by d.item_text
+    </select>
+
+    <!-- 报警趋势散点图 -->
+    <select id="selectAlarmScatter" parameterType="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" resultMap="AlarmStatisticsResult">
+        SELECT d.item_text as equipmentname,a.day,count(a.id) as howManyTimes
+        from tpm_message_alarm as a
+        left join
+         (
+             select dt.item_text,dt.item_value
+             from sys_dict sd
+             LEFT JOIN sys_dict_item dt on sd.dict_code = 'alarm_type' and sd.id = dt.dict_id
+         )d
+        on a.alarmtype = d.item_value
+        where a.year=#{alarmStatistics.year} and a.month=#{alarmStatistics.month}
+        group by a.day,d.item_text;
+    </select>
+
+    <!-- 报警类型信息 -->
+    <select id="selectAlarmType" parameterType="org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics" resultMap="AlarmStatisticsResult">
+        select item_text as equipmentname, 0 as howManyTimes
+        from sys_dict_item i
+        left join sys_dict d on i.dict_id = d.id
+        where  d.dict_code = 'alarm_type'
+        group by i.item_text
+    </select>
 </mapper>

+ 9 - 0
module_tpm/src/main/java/org/jeecg/modules/tpmMessageAlarm/service/ITpmMessageAlarmService.java

@@ -5,6 +5,7 @@ import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarm;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmVo;
 
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -22,4 +23,12 @@ public interface ITpmMessageAlarmService extends IService<TpmMessageAlarm> {
     *   date: 2024/4/24
     */
     List<TpmMessageAlarmVo> getTpmMessageAlarmInfo(Page<TpmMessageAlarmVo> page, TpmMessageAlarmVo tpmMessageAlarm);
+
+    /**
+    *   author: dzc
+    *   version: 1.0
+    *   des: 报警分析
+    *   date: 2024/4/25
+    */
+    HashMap getAlarmInfo(List<String> ids, String yearmonth);
 }

+ 68 - 0
module_tpm/src/main/java/org/jeecg/modules/tpmMessageAlarm/service/impl/TpmMessageAlarmServiceImpl.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.tpmMessageAlarm.service.impl;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarm;
+import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmStatistics;
 import org.jeecg.modules.tpmMessageAlarm.entity.TpmMessageAlarmVo;
 import org.jeecg.modules.tpmMessageAlarm.mapper.TpmMessageAlarmMapper;
 import org.jeecg.modules.tpmMessageAlarm.service.ITpmMessageAlarmService;
@@ -10,6 +11,9 @@ import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -35,4 +39,68 @@ public class TpmMessageAlarmServiceImpl extends ServiceImpl<TpmMessageAlarmMappe
     public List<TpmMessageAlarmVo> getTpmMessageAlarmInfo(Page<TpmMessageAlarmVo> page, TpmMessageAlarmVo tpmMessageAlarm) {
         return alarmMapper.getTpmMessageAlarmInfo(page,tpmMessageAlarm);
     }
+
+    /**
+    *   author: dzc
+    *   version: 1.0
+    *   des: 报警分析
+    *   date: 2024/4/25
+    */
+    @Override
+    public HashMap getAlarmInfo(List<String> ids, String yearmonth) {
+        HashMap<String, List<TpmMessageAlarmStatistics>> resultMap = new HashMap<>();
+
+        Long year;
+        Long month;
+        if (!"".equals(yearmonth) && yearmonth != null) {
+            year = Long.parseLong(yearmonth.substring(0, 4));
+            month = Long.parseLong(yearmonth.substring(5, 7));
+        }
+        else {
+            Date standardDate = new Date();
+            Calendar calendar = Calendar.getInstance();
+            // 设置当前的时间戳
+            calendar.setTime(standardDate);
+            // 获得当前日期所属月
+            month = (long) (calendar.get(calendar.MONTH) + 1);
+            // 获得当前日期所属年
+            year = (long) calendar.get(Calendar.YEAR);
+
+        }
+
+        TpmMessageAlarmStatistics alarmStatistics = new TpmMessageAlarmStatistics();
+        alarmStatistics.setIds(ids);
+        alarmStatistics.setYear(year);
+        alarmStatistics.setMonth(month);
+
+        /** 报警统计 */
+        List<TpmMessageAlarmStatistics> list1 = alarmMapper.selectAlarmStatistics(alarmStatistics);
+        resultMap.put("alarmStatistics",list1);
+
+        /** 信息统计(报警等级) */
+        List<TpmMessageAlarmStatistics> list2 = alarmMapper.selectLevelStatistics(alarmStatistics);
+        resultMap.put("levelStatistics",list2);
+
+        /** 报警排名(报警类型) */
+        List<TpmMessageAlarmStatistics> list3 = alarmMapper.selectAlarmRank(alarmStatistics);
+        resultMap.put("alarmRank",list3);
+
+        /** 近两年报警对比图(报警类型) */
+        List<TpmMessageAlarmStatistics> list4 = alarmMapper.selectAlarmTwoYear(alarmStatistics);
+        resultMap.put("alarmTwoYear",list4);
+
+        /** 报警类型占比 */
+        List<TpmMessageAlarmStatistics> list5 = alarmMapper.selectTypeRatio(alarmStatistics);
+        resultMap.put("typeRatio",list5);
+
+        /** 报警趋势散点图 */
+        List<TpmMessageAlarmStatistics> list6 = alarmMapper.selectAlarmScatter(alarmStatistics);
+        resultMap.put("alarmScatter",list6);
+
+        /** 报警类型信息 */
+        List<TpmMessageAlarmStatistics> list7 = alarmMapper.selectAlarmType(alarmStatistics);
+        resultMap.put("alarmType",list7);
+
+        return resultMap;
+    }
 }