Преглед изворни кода

事件管理-火灾告警处置相关接口开发

jichaobo пре 2 година
родитељ
комит
78ebebc75f

+ 43 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/AlarmFireController.java

@@ -11,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * 事件管理-火警告警处置
  *
@@ -18,20 +20,59 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2022-07-29
  */
 @RestController
-@RequestMapping("/fireAlarm")
+@RequestMapping("/alarmFire")
 public class AlarmFireController {
 
     @Autowired
     private AlarmFireService alarmFireService;
 
+    /**
+     * 事件管理-火警告警处置/故障告警处置-列表查询
+     *
+     * @param handlingStatus 处理状态(0、未处理 1、已处理)
+     * @param startDate      开始时间 格式:yyyy-MM-dd HH:mm:ss
+     * @param endDate        结束时间 格式:yyyy-MM-dd HH:mm:ss
+     * @param pageNum        当前页
+     * @param pageSize       每页条数
+     * @param alarmType      告警类型(2 火警、4 故障、16 监管等)
+     * @return
+     */
     @GetMapping("alarmFireLowerList")
     public ApiResult<CommonPage<AlarmFireVo>> alarmFireLowerList(@RequestParam(value = "handlingStatus", required = false) Integer handlingStatus,
+                                                                 @RequestParam(value = "alarmType", required = false) Integer alarmType,
                                                                  @RequestParam(value = "startDate", required = false) String startDate,
                                                                  @RequestParam(value = "endDate", required = false) String endDate,
                                                                  @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
                                                                  @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
-        return ApiResult.success(alarmFireService.alarmFireLowerList(handlingStatus,startDate,endDate,pageNum,pageSize));
+        return ApiResult.success(alarmFireService.alarmFireLowerList(handlingStatus, startDate, endDate, pageNum, pageSize, alarmType));
+    }
+
+
+    /**
+     * 事件管理-火警告警处置/故障告警处置-左侧数据统计
+     *
+     * @param alarmType 告警类型(2 火警、4 故障、16 监管等)
+     * @return
+     */
+    @GetMapping("fireStatistics")
+    public ApiResult<Map<String, Object>> fireStatistics(@RequestParam(value = "alarmType", required = false) Integer alarmType) {
+        return ApiResult.success(alarmFireService.fireStatistics(alarmType));
     }
 
+
+    /**
+     * 事件管理-火警告警处置/故障告警处置-数据统计图
+     *
+     * @param alarmType 告警类型(2 火警、4 故障、16 监管等)
+     * @param startDate 开始时间  格式:yyyy-MM-dd HH:mm:ss
+     * @param endDate   结束时间  格式:yyyy-MM-dd HH:mm:ss
+     * @return
+     */
+    @GetMapping("fireStatisticalChart")
+    public ApiResult<Map<String, Object>> fireStatisticalChart(@RequestParam(value = "alarmType", required = false) Integer alarmType,
+                                                               @RequestParam(value = "startDate", required = false) String startDate,
+                                                               @RequestParam(value = "endDate", required = false) String endDate) {
+        return ApiResult.success(alarmFireService.fireStatisticalChart(alarmType, startDate, endDate));
+    }
 }
 

+ 11 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/AlarmFireMapper.java

@@ -1,7 +1,12 @@
 package com.usky.fire.mapper;
 
-import com.usky.fire.domain.AlarmFire;
 import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.fire.domain.AlarmFire;
+import com.usky.fire.service.vo.AlarmFireStatisticalVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 /**
  * <p>
@@ -11,6 +16,11 @@ import com.usky.common.mybatis.core.CrudMapper;
  * @author JCB
  * @since 2022-07-29
  */
+@Repository
 public interface AlarmFireMapper extends CrudMapper<AlarmFire> {
 
+    public List<AlarmFireStatisticalVo> selectAlarmFireStatistical(
+                                                                   @Param("alarmType") Integer alarmType,
+                                                                   @Param("startDate") String startDate,
+                                                                   @Param("endDate") String endDate);
 }

+ 11 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/AlarmFireService.java

@@ -6,6 +6,7 @@ import com.usky.fire.domain.AlarmFire;
 import com.usky.fire.service.vo.AlarmFireVo;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -17,7 +18,15 @@ import java.util.List;
  */
 public interface AlarmFireService extends CrudService<AlarmFire> {
 
-    CommonPage<AlarmFireVo> alarmFireLowerList(Integer handlingStatus, String startDate, String endDate, Integer pageNum, Integer pageSize);
+    CommonPage<AlarmFireVo> alarmFireLowerList(Integer handlingStatus, String startDate, String endDate,
+                                               Integer pageNum, Integer pageSize,Integer alarmType);
 
-    CommonPage<AlarmFire> alarmFireList(List<String> deviceCodeList, Integer handlingStatus, String startDate, String endDate, Integer pageNum, Integer pageSize);
+    Map<String, Object> fireStatistics(Integer alarmType);
+
+    Map<String, Object> fireStatisticalChart(Integer alarmType, String startDate, String endDate);
+
+    Integer fireCount(List<String> deviceCodeList, Integer handlingStatus,Integer alarmType);
+
+    CommonPage<AlarmFire> alarmFireList(List<String> deviceCodeList, Integer handlingStatus, String startDate,
+                                        String endDate, Integer pageNum, Integer pageSize,Integer alarmType);
 }

+ 109 - 4
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/AlarmFireServiceImpl.java

@@ -6,15 +6,21 @@ import com.usky.common.core.bean.CommonPage;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.fire.domain.AlarmFire;
+import com.usky.fire.domain.PlanSite;
 import com.usky.fire.mapper.AlarmFireMapper;
+import com.usky.fire.mapper.PlanSiteMapper;
 import com.usky.fire.service.AlarmFireService;
 import com.usky.fire.service.util.OnlineMethod;
+import com.usky.fire.service.vo.AlarmFireStatisticalVo;
 import com.usky.fire.service.vo.AlarmFireVo;
 import com.usky.system.model.LoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -27,7 +33,8 @@ import java.util.List;
 @Service
 public class AlarmFireServiceImpl extends AbstractCrudService<AlarmFireMapper, AlarmFire> implements AlarmFireService {
 
-    public CommonPage<AlarmFireVo> alarmFireLowerList(Integer handlingStatus, String startDate, String endDate, Integer pageNum, Integer pageSize) {
+    public CommonPage<AlarmFireVo> alarmFireLowerList(Integer handlingStatus, String startDate, String endDate,
+                                                      Integer pageNum, Integer pageSize, Integer alarmType) {
         String userType = null;
         LoginUser loginUser = SecurityUtils.getLoginUser();
         if (loginUser != null && !"".equals(loginUser)) {
@@ -35,7 +42,7 @@ public class AlarmFireServiceImpl extends AbstractCrudService<AlarmFireMapper, A
         }
         //缺少维保单位部分代码
         List<String> devcieCodeList = new ArrayList<>();
-        CommonPage<AlarmFire> alarmFireList = this.alarmFireList(devcieCodeList, handlingStatus, startDate, endDate, pageNum, pageSize);
+        CommonPage<AlarmFire> alarmFireList = this.alarmFireList(devcieCodeList, handlingStatus, startDate, endDate, pageNum, pageSize,alarmType);
         List<AlarmFireVo> list = new ArrayList<>();
         for (int i = 0; i < alarmFireList.getRecords().size(); i++) {
             AlarmFireVo alarmFireVo = new AlarmFireVo();
@@ -66,8 +73,102 @@ public class AlarmFireServiceImpl extends AbstractCrudService<AlarmFireMapper, A
         return new CommonPage<>(list, alarmFireList.getTotal(), alarmFireList.getSize(), alarmFireList.getSize());
     }
 
+
+    public Map<String, Object> fireStatistics(Integer alarmType) {
+        String userType = null;
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (loginUser != null && !"".equals(loginUser)) {
+            userType = loginUser.getUserType();
+        }
+        //缺少维保单位部分代码
+        List<String> devcieCodeList = new ArrayList<>();
+
+        int untreated = this.fireCount(devcieCodeList, 0,alarmType);
+        int processed = this.fireCount(devcieCodeList, 1,alarmType);
+//        String disposalRate =  processed / (untreated + processed) + "%";
+        Integer count = untreated + processed;
+        String disposalRate = OnlineMethod.myPercent(processed,count);
+        Map<String, Object> map = new HashMap<>();
+        map.put("untreated", untreated);//告警未处理数
+        map.put("processed", processed);//告警未处理数
+        map.put("disposalRate", disposalRate);//告警处理率
+        map.put("deviceCount", 0);//设备总数
+        map.put("deviceOfflineCount", 0);//设备离线数
+        map.put("deviceAlarmCount", 0);//设备告警数
+        map.put("deviceNormalCount", 0);//设备正常数
+        map.put("deviceOfflineRate", 0);//设备离线率
+        map.put("deviceAlarmRate", 0);//设备告警率
+        map.put("deviceOfflineRate", 0);//设备正常率
+        return map;
+    }
+
+
+
+
+    public Map<String, Object> fireStatisticalChart(Integer alarmType, String startDate, String endDate){
+        String userType = null;
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (loginUser != null && !"".equals(loginUser)) {
+            userType = loginUser.getUserType();
+        }
+        //缺少维保单位部分代码
+        List<String> devcieCodeList = new ArrayList<>();
+        List<AlarmFireStatisticalVo> list = baseMapper.selectAlarmFireStatistical(alarmType,startDate,endDate);
+        List<Integer> alarmCountList = new ArrayList<>();
+        List<Integer> handleCountList = new ArrayList<>();
+        List<String> alarmTimeList = new ArrayList<>();
+        for (int i = 0; i < list.size(); i++) {
+            alarmCountList.add(list.get(i).getCount());
+            handleCountList.add(list.get(i).getSum());
+            alarmTimeList.add(list.get(i).getAlarmTime());
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("alarmCountList",alarmCountList);
+        map.put("handleCountList", handleCountList);
+        map.put("alarmTimeList", alarmTimeList);
+        return map;
+    }
+
+
+
+    /**
+     * 火警告警处置/故障告警处置-数量统计
+     *
+     * @param deviceCodeList 单位编号
+     * @param handlingStatus 处理状态(0、未处理 1、已处理)
+     * @param alarmType 告警类型(2 火警、4 故障、16 监管等)
+     * @return
+     */
+    public Integer fireCount(List<String> deviceCodeList, Integer handlingStatus,Integer alarmType) {
+        LambdaQueryWrapper<AlarmFire> queryWrapper = Wrappers.lambdaQuery();
+        if (deviceCodeList.size() > 0) {
+            queryWrapper.in(AlarmFire::getDeviceCode, deviceCodeList);
+        }
+        if (handlingStatus != null) {
+            queryWrapper.eq(AlarmFire::getHandlingStatus, handlingStatus);
+        }
+        if (alarmType != null && alarmType != 0) {
+            queryWrapper.eq(AlarmFire::getAlarmType, alarmType);
+        }
+        int total = this.count(queryWrapper);
+        return total;
+    }
+
+    /**
+     * 火警告警处置/故障告警处置-列表数据查询
+     *
+     * @param deviceCodeList 设备编号
+     * @param handlingStatus 处理状态(0、未处理 1、已处理)
+     * @param startDate      开始时间 格式:yyyy-MM-dd HH:mm:ss
+     * @param endDate        结束时间 格式:yyyy-MM-dd HH:mm:ss
+     * @param pageNum        当前页
+     * @param pageSize       每页条数
+     * @param alarmType       告警类型(2 火警、4 故障、16 监管等)
+     * @return
+     */
     @Override
-    public CommonPage<AlarmFire> alarmFireList(List<String> deviceCodeList, Integer handlingStatus, String startDate, String endDate, Integer pageNum, Integer pageSize) {
+    public CommonPage<AlarmFire> alarmFireList(List<String> deviceCodeList, Integer handlingStatus, String startDate,
+                                               String endDate, Integer pageNum, Integer pageSize,Integer alarmType) {
         LambdaQueryWrapper<AlarmFire> queryWrapper = Wrappers.lambdaQuery();
         if (deviceCodeList.size() > 0) {
             queryWrapper.in(AlarmFire::getDeviceCode, deviceCodeList);
@@ -76,6 +177,10 @@ public class AlarmFireServiceImpl extends AbstractCrudService<AlarmFireMapper, A
             queryWrapper.eq(AlarmFire::getHandlingStatus, handlingStatus);
         }
 
+        if (alarmType != null && alarmType != 0) {
+            queryWrapper.eq(AlarmFire::getAlarmType, alarmType);
+        }
+
         if (startDate != null && !"".equals(startDate) && endDate != null && !"".equals(endDate)) {
             queryWrapper.between(AlarmFire::getAlarmTime, startDate, endDate);
         }
@@ -83,7 +188,7 @@ public class AlarmFireServiceImpl extends AbstractCrudService<AlarmFireMapper, A
         queryWrapper.orderByDesc(AlarmFire::getId);
         if (pageNum != null && pageNum != 0 && pageSize != null && pageSize != 0) {
             Integer startFate = OnlineMethod.getStartFate(pageNum, pageSize);
-            queryWrapper.last("limit " + startFate + ","+pageSize);
+            queryWrapper.last("limit " + startFate + "," + pageSize);
         }
         List<AlarmFire> list = this.list(queryWrapper);
         return new CommonPage<>(list, total, pageSize, pageNum);

+ 45 - 14
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/util/OnlineMethod.java

@@ -4,6 +4,7 @@ import com.usky.fire.service.vo.PatrolInspectionAreaVo;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -15,13 +16,41 @@ import java.util.*;
 
 public class OnlineMethod {
 
+    /**
+     * 占比率计算
+     *
+     * @param y 总数
+     * @param z 占比数
+     * @return
+     */
+    public static String myPercent(int y, int z) {
+        String baifenbi = "";// 接受百分比的值
+        double baiy = y * 1.0;
+        double baiz = z * 1.0;
+        double fen = baiy / baiz;
+// NumberFormat nf = NumberFormat.getPercentInstance();注释掉的也是一种方法
+// nf.setMinimumFractionDigits( 2 ); 保留到小数点后几位
+        DecimalFormat df1 = new DecimalFormat("##.00%");
+// ##.00%
+// 百分比格式,后面不足2位的用0补齐
+// baifenbi=nf.format(fen);
+        baifenbi = df1.format(fen);
+//        System.out.println(baifenbi);
+        return baifenbi;
+    }
 
-    public static  Integer getStartFate(Integer pageNum,Integer pageSize){
+    /**
+     * 起始条数计算
+     *
+     * @param pageNum  当前页
+     * @param pageSize 每页条数
+     * @return
+     */
+    public static Integer getStartFate(Integer pageNum, Integer pageSize) {
         return (pageNum - 1) * pageSize;
     }
 
 
-
     /**
      * 根据父节点的ID获取所有子节点
      *
@@ -85,6 +114,7 @@ public class OnlineMethod {
 
     /**
      * 计算两个日期相隔天数
+     *
      * @param s1 日期1
      * @param s2 日期2
      * @return
@@ -102,8 +132,7 @@ public class OnlineMethod {
       * *
       *  @returr
       * */
-    public static LocalDate getDate(String dateStr, String format, boolean flag, int day)
-    {
+    public static LocalDate getDate(String dateStr, String format, boolean flag, int day) {
         Calendar c = Calendar.getInstance();
         Date date = null;
         try {
@@ -111,20 +140,19 @@ public class OnlineMethod {
         } catch (ParseException e) {
             e.printStackTrace();
         }
-        c.setTime (date);
+        c.setTime(date);
         int day1 = c.get(Calendar.DATE);
         if (flag) {
             c.set(Calendar.DATE, day1 + day);
-        }else {
-            c.set(Calendar.DATE, day1- day);
+        } else {
+            c.set(Calendar.DATE, day1 - day);
         }
         String m = new SimpleDateFormat(format).format(c.getTime());
         LocalDate beginDateTime = LocalDate.parse(m, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        return  beginDateTime;
+        return beginDateTime;
     }
 
 
-
     /**
      * 获取当前日期是星期几<br>
      *
@@ -133,7 +161,7 @@ public class OnlineMethod {
      */
 
     public static String getWeekOfDate(Date date) {
-        String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
+        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
         Calendar cal = Calendar.getInstance();
         cal.setTime(date);
         int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
@@ -144,13 +172,14 @@ public class OnlineMethod {
 
     /**
      * 获取startDate日期后month月的日期
+     *
      * @param startDate 开始日期
-     * @param month  几个月后
+     * @param month     几个月后
      * @return
      */
-    public static LocalDate getMonthDate(Date startDate,int month){
+    public static LocalDate getMonthDate(Date startDate, int month) {
         LocalDateTime localDateTime = startDate.toInstant()
-                .atZone(ZoneId.systemDefault() )
+                .atZone(ZoneId.systemDefault())
                 .toLocalDateTime().plusMonths(month);
         LocalDate localDate = localDateTime.toLocalDate();
 //        Date date = Date.from(localDateTime.atZone( ZoneId.systemDefault()).toInstant());
@@ -159,10 +188,11 @@ public class OnlineMethod {
 
     /**
      * String转Date
+     *
      * @param timeStr 时间格式 yyyy-MM-dd
      * @return
      */
-    public static Date getDate(String timeStr){
+    public static Date getDate(String timeStr) {
         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
         Date date = null;
         try {
@@ -176,6 +206,7 @@ public class OnlineMethod {
 
     /**
      * 保留2个小数
+     *
      * @param value
      * @return
      */

+ 36 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/AlarmFireStatisticalVo.java

@@ -0,0 +1,36 @@
+package com.usky.fire.service.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 火灾报警系统报警信息表
+ * </p>
+ *
+ * @author JCB
+ * @since 2022-07-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class AlarmFireStatisticalVo implements Serializable {
+
+    /**
+     * 时间
+     */
+    private String alarmTime;
+
+    /**
+     * 告警数量
+     */
+    private Integer count;
+
+    /**
+     * 已处理数量
+     */
+    private Integer sum;
+}

+ 24 - 0
service-fire/service-fire-biz/src/main/resources/mapper.fire/AlarmFireMapper.xml

@@ -27,5 +27,29 @@
         <result column="false_alarm" property="falseAlarm" />
         <result column="site_photo" property="sitePhoto" />
     </resultMap>
+    <select id="selectAlarmFireStatistical" resultType="com.usky.fire.service.vo.AlarmFireStatisticalVo">
+        SELECT
+        DATE_FORMAT(alarm_time, "%Y-%m-%d") AS alarmTime,
+        count(*) AS `count`,
+        sum(handling_status) AS `sum`
+        FROM
+        alarm_fire
+        <where>
+            <if test="deviceList != null and deviceList.size() > 0">
+                <foreach item="item" collection="deviceList" open="(" separator="," close=")">
+                    #{item.deviceCode}
+                </foreach>
+            </if>
+            <if test="startDate != null and startDate != '' and startDate != null and startDate != ''">
+                and  alarm_time BETWEEN  #{startDate} AND  #{endDate}
+            </if>
+            <if test="alarmType != 0 and alarmType != null">
+                AND alarm_type = #{alarmType}
+            </if>
+        </where>
+        GROUP BY
+        alarmTime
+    </select>
+
 
 </mapper>