wangbo 4 years ago
parent
commit
baa7639094

+ 41 - 4
sms_water/src/main/java/com/huaxu/controller/SceneController.java

@@ -26,10 +26,8 @@ import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
-import java.util.Calendar;
-import java.util.List;
-import java.util.Map;
-import java.util.Date;
+import java.util.*;
+
 import org.springframework.web.bind.annotation.*;
 import com.huaxu.entity.SceneEntity;
 import com.huaxu.service.SceneService;
@@ -270,6 +268,45 @@ public class SceneController {
     }
 
 
+    @RequestMapping(value = "/alarmTimesStatistics", method = RequestMethod.GET)
+    @ResponseBody
+    @ApiOperation(value = "场景及设备故障率")
+    public  AjaxMessage<List<Map<String,Object>>> alarmTimesStatistics(
+            @ApiParam(value = "设备或场景ID", required = true) @RequestParam(required = true) int id,
+            @ApiParam(value = "设备或场景标识(1:设备;2:场景)", required = true) @RequestParam(required = true) int sort,
+            @ApiParam(value = "统计类型:0-按月统计,1-按年统计,2-自定义统计", required = true) @RequestParam(required = true) int type,
+            @ApiParam(value = "统计时间:月格式(yyyy-MM),年格式(yyyy),自定义统计时间开始日期", required = true) @RequestParam(required = true) String startDate,
+            @ApiParam(value = "统计时间:年月统计不用传入此参数,自定义统计截至日期", required = false) @RequestParam(required = false) String endDate) throws ParseException {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        SceneEntity sceneEntity = new SceneEntity();
+        sceneEntity.setId(Long.parseLong(String.valueOf(id)));
+        switch (type) {
+            case 0:
+                startDate = String.format("%s-01", startDate);
+                endDate = subMonth(startDate, 1);
+                break;
+            case 1:
+                startDate = String.format("%s-01-01", startDate);
+                endDate = subYear(startDate, 1);
+                break;
+            case 2:
+                startDate = String.format("%s-01", startDate);
+                endDate = String.format("%s-01", endDate);
+                break;
+        }
+        List<Map<String,Object>> list = new ArrayList<>();
+
+        if(type == 0 || type== 2){
+            list = sceneService.selectMonthAlarmTimes(sceneEntity, startDate, endDate,sort);
+        }
+        else if(type == 1){
+            list = sceneService.selectYearAlarmTimes(sceneEntity, startDate, endDate,sort);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, list);
+    }
+
+
+
 
 
     /**

+ 2 - 0
sms_water/src/main/java/com/huaxu/dao/SceneMapper.java

@@ -47,5 +47,7 @@ public interface SceneMapper extends BaseMapper<SceneEntity> {
     List<Map<String,Object>> findSceneAmount(@Param("scene") SceneEntity sceneEntity,@Param("months") Integer months);
 
     List<Map<String,Object>> selectAlarmSceneAndDevice(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate);
+
+    List<Map<String,Object>> selectMonthAlarmTimes(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate,@Param("sort") int sort);
     /**删除相关方法  使用mybatis-plus集成的 **/
 }

+ 61 - 0
sms_water/src/main/java/com/huaxu/service/SceneService.java

@@ -449,4 +449,65 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
     public List<Map<String,Object>> selectAlarmSceneAndDevice(SceneEntity sceneEntity, String startDate, String endDate){
         return sceneMapper.selectAlarmSceneAndDevice(sceneEntity, startDate, endDate);
     }
+
+    public List<Map<String,Object>> selectMonthAlarmTimes(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate,@Param("sort") int sort){
+        String strMonth = startDate.substring(5,7);
+        int days = getDaysByYearMonth(Integer.parseInt(strMonth));
+        List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+        List<Map<String,Object>> list = sceneMapper.selectMonthAlarmTimes(sceneEntity,startDate,endDate,sort);
+        for(int i=0; i<days; i++) {
+            String strDate = startDate.substring(0, 7) + String.format("-%02d", i + 1);
+            Map<String, Object> data = new HashMap<>();
+            data.put("数量", 0);
+            data.put("日期", strDate);
+            data.put("序号",i+1);
+            result.add(data);
+        }
+        for(int i=0;i<list.size();i++){
+            Map<String,Object> map =list.get(i);
+            int day = Integer.parseInt(map.get("日期").toString().substring(8,10));
+            result.get(day-1).put("数量",map.get("数量"));
+        }
+        return result;
+    }
+
+    public List<Map<String,Object>> selectYearAlarmTimes(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate,@Param("sort") int sort){
+        List<Map<String,Object>> list = sceneMapper.selectMonthAlarmTimes(sceneEntity,startDate,endDate,sort);
+        List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+        for(int i=0; i<12; i++) {
+            String strDate = startDate.substring(0, 4) + String.format("-%02d", i + 1);
+            Map<String, Object> data = new HashMap<>();
+            data.put("数量", 0);
+            data.put("日期", strDate);
+            data.put("序号",i+1);
+            result.add(data);
+        }
+        for(int i=0;i<list.size();i++){
+            Map<String,Object> map =list.get(i);
+            int month = Integer.parseInt(map.get("日期").toString().substring(5,7));
+            result.get(month-1).put("数量",map.get("数量"));
+        }
+        return result;
+    }
+
+    /**
+     *获取某月有多少天
+     */
+    private int getDaysByYearMonth(int month) {
+
+        Calendar a =Calendar.getInstance();
+
+        a.set(Calendar.MONTH, month- 1);
+
+        a.set(Calendar.DATE, 1);
+
+        a.roll(Calendar.DATE,-1);
+
+        int maxDate =a.get(Calendar.DATE);
+
+        return maxDate;
+
+    }
+
+
 }

+ 37 - 5
sms_water/src/main/resources/mapper/SceneMapper.xml

@@ -430,8 +430,8 @@
     </select>
     <!--报警场景及报警设备查询-->
     <select id="selectAlarmSceneAndDevice" resultType="map">
-       select amount, id, name, type from(
-        select count(1) amount, a.id, a.SCENE_NAME name,2 type
+       select amount, id, name, sort from(
+        select count(1) amount, a.id, a.SCENE_NAME name,2 sort
         from sms_scene a INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
         INNER JOIN sms_alarm_details c on c.PARENT_SCENE_ID=a.ID
         <where>
@@ -470,11 +470,11 @@
             and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
             and SCENE_TYPE_NAME in('水源','水厂','泵站')
         </where>
-        group by a.SCENE_NAME, a.ID, type
+        group by a.SCENE_NAME, a.ID, sort
 
         union all
 
-        select count(1) amount, d.id, d.DEVICE_NAME name,1 type
+        select count(1) amount, d.id, d.DEVICE_NAME name,1 sort
         from sms_alarm_details c
         INNER JOIN sms_device d on c.DEVICE_ID=d.ID
         INNER JOIN sms_scene a on  c.PARENT_SCENE_ID=a.ID
@@ -515,7 +515,39 @@
             and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
             and SCENE_TYPE_NAME='管网'
         </where>
-        group by d.DEVICE_NAME, d.ID, type) t
+        group by d.DEVICE_NAME, d.ID, sort) t
         order by amount desc
     </select>
+
+    <select id="selectMonthAlarmTimes" resultType="map">
+        select count(1) 数量, DATE_FORMAT(c.DATE_CREATE,'%Y-%m-%d') 日期
+            <if test="sort == 2">
+                from sms_scene a INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
+                INNER JOIN sms_alarm_details c on c.PARENT_SCENE_ID=a.ID
+                where a.ID = #{scene.id}
+            </if>
+            <if test="sort == 1">
+                from sms_alarm_details c
+                where c.device_id = #{scene.id}
+            </if>
+            and c.date_create &gt;= date_format(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+            and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+            group by DATE_FORMAT(c.DATE_CREATE,'%Y-%m-%d')
+    </select>
+
+    <select id="selectYearAlarmTimes" resultType="map">
+        select count(1) 数量, DATE_FORMAT(c.DATE_CREATE,'%Y-%m') 日期
+        <if test="sort == 2">
+            from sms_scene a INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
+            INNER JOIN sms_alarm_details c on c.PARENT_SCENE_ID=a.ID
+            where a.ID = #{scene.id}
+        </if>
+        <if test="sort == 1">
+            from sms_alarm_details c
+            where c.device_id = #{scene.id}
+        </if>
+        and c.date_create &gt;= date_format(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+        and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+        group by DATE_FORMAT(c.DATE_CREATE,'%Y-%m')
+    </select>
 </mapper>