Forráskód Böngészése

火灾数据优化

yq 3 éve
szülő
commit
78bfb70949

+ 2 - 4
mhfire-mapping/src/main/java/com/bizmatics/mhfire/persistence/mapper/FireStatisticsMapper.java

@@ -64,12 +64,10 @@ public interface FireStatisticsMapper {
 
     Date selectMinDate();
 
-
-    Integer selectCountByRangeDate(@Param("startTime") Date startTime,
+    List<Map<String,Object>> selectCountByDate(@Param("startTime") Date startTime,
                                    @Param("endTime") Date endTime,
                                    @Param("address") String address,
-                                   @Param("fireType") String fireType,
-                                   @Param("month") Integer month);
+                                   @Param("fireType") String fireType);
 
 
 

+ 21 - 17
mhfire-mapping/src/main/resources/mapper/mysql/FireStatisticsMapper.xml

@@ -64,23 +64,7 @@
     <select id="selectMinDate" resultType="java.util.Date">
         select min(`起火时间_日期型`) from `hzdc-hztjb`
     </select>
-    <select id="selectCountByRangeDate" resultType="java.lang.Integer">
-        select count(1)
-        from `hzdc-hztjb`
-        <where>
-            <if test="address != null and address != ''">
-                and `起火地点` LIKE CONCAT(CONCAT('%', #{address}), '%')
-            </if>
-            <if test="fireType != null and fireType != ''">
-                and `火灾原因分类(一级)` = #{fireType}
-            </if>
-            <if test="startTime != null and endTime != null">
-                and  `起火时间_日期型` between STR_TO_DATE(#{startTime},'%Y-%m-%d %H:%i:%s')
-                and STR_TO_DATE(#{endTime},'%Y-%m-%d %H:%i:%s')
-            </if>
-            and Month(`起火时间_日期型`) = #{month}
-        </where>
-    </select>
+
     <select id="selectAvgAndSum" resultType="java.util.Map">
         select sum(`死亡人数`) as deathPerson,avg(`过火面积`) as fireArea
         from `hzdc-hztjb`
@@ -100,5 +84,25 @@
             </if>
         </where>
     </select>
+    <select id="selectCountByDate" resultType="java.util.Map">
+        select
+        month(`起火时间_日期型`) monthTime,
+        COUNT(1) as aCount
+        from `hzdc-hztjb`
+        <where>
+            <if test="address != null and address != ''">
+                and `起火地点` LIKE CONCAT(CONCAT('%', #{address}), '%')
+            </if>
+            <if test="fireType != null and fireType != ''">
+                and `火灾原因分类(一级)` = #{fireType}
+            </if>
+            <if test="startTime != null and endTime != null">
+                and  `起火时间_日期型` between STR_TO_DATE(#{startTime},'%Y-%m-%d %H:%i:%s')
+                and STR_TO_DATE(#{endTime},'%Y-%m-%d %H:%i:%s')
+            </if>
+        </where>
+        group by monthTime
+    </select>
+
 
 </mapper>

+ 23 - 21
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/FireStatisticsServiceImpl.java

@@ -37,37 +37,39 @@ public class FireStatisticsServiceImpl implements FireStatisticsService {
     @Override
     public List<Object> getFireCountByData(Date startTime,Date endTime,String address,String fireType) {
         List<Object> list = new ArrayList<>();
-        List<Integer> thisYearList = new ArrayList<>();
-        List<Double> monthList = new ArrayList<>();
-        List<Double> yearList = new ArrayList<>();
         Date date = new Date();
+        Date beginDayOfYear = DateUtils.getBeginDayOfYear(date);
         //获取传入时间的最大时间和最小时间
         int distanceOfTwoDate =Integer.parseInt(DateUtils.getYear(endTime)) - Integer.parseInt(DateUtils.getYear(startTime)) + 1;
-        Date startMax = DateUtils.getFirstDayOfMonth(DateUtils.setMonths(startTime, 0));
-        Date endMax = DateUtils.getLastDayOfMonth(DateUtils.setMonths(endTime, 11));
         //获取数据库全部项目的最小时间和最大时间
         Date maxDate = fireStatisticsMapper.selectMaxDate();
         Date minDate = fireStatisticsMapper.selectMinDate();
         int distanceOfTwoDateYear =Integer.parseInt(DateUtils.getYear(maxDate)) - Integer.parseInt(DateUtils.getYear(minDate)) + 1;
-        for (int i = 0; i < 12; i++) {
-            //获取今年的12个月份数据
-            date = DateUtils.setDays(date,1);
-            Date setMonths = DateUtils.setMonths(date, i);
-            Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(setMonths);
-            Date lastDayOfMonth = DateUtils.getLastDayOfMonth(setMonths);
-            thisYearList.add(fireStatisticsMapper.selectCount(firstDayOfMonth, lastDayOfMonth, address,fireType,null,null));
-            //月平均值
-            Integer monthCount = fireStatisticsMapper.selectCountByRangeDate(startMax, endMax, address, fireType,i+1);
-            monthList.add(Arith.div(monthCount, distanceOfTwoDate,2));
-            Integer yearCount = fireStatisticsMapper.selectCountByRangeDate(null, null,address, fireType,i+1);
-            yearList.add(Arith.div(yearCount, distanceOfTwoDateYear,2));
-        }
-        list.add(thisYearList);
-        list.add(monthList);
-        list.add(yearList);
+        list.add(perfect(beginDayOfYear, date, address, fireType, 1));
+        list.add(perfect(startTime,endTime,address,fireType,distanceOfTwoDate));
+        list.add(perfect(null,null,address,fireType,distanceOfTwoDateYear));
         return list;
     }
 
+    public List<Object> perfect(Date startTime,Date endTime,String address,String fireType, Integer subTime){
+        List<Map<String, Object>> list = fireStatisticsMapper.selectCountByDate(startTime, endTime, fireType, address);
+        List<Object> avgList = new ArrayList<>();
+        for (int i = 1; i <= 12; i++) {
+            int finalI = i;
+            list.stream()
+                    .filter(map -> Integer.parseInt(map.get("monthTime").toString()) == finalI)
+                    .findFirst()
+                    .map(map -> {
+                        avgList.add(Arith.div(Double.parseDouble(map.get("aCount").toString()),subTime,2));
+                        return Optional.empty();
+                    })
+                    .orElseGet(() -> {
+                        avgList.add(0.00);
+                        return Optional.empty();
+                    });
+        }
+        return avgList;
+    }
 
     @Override
     public CommonPage<FireStatisticsPO> page(Integer current, Integer size, Date startTime, Date endTime, String address) {