|
@@ -1,6 +1,7 @@
|
|
|
package com.usky.fire.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
@@ -8,6 +9,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.usky.common.core.bean.CommonPage;
|
|
|
import com.usky.common.core.exception.BusinessException;
|
|
|
+import com.usky.common.core.util.Arith;
|
|
|
+import com.usky.common.core.util.DateUtils;
|
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
import com.usky.common.security.utils.SecurityUtils;
|
|
|
import com.usky.fire.domain.DemFileLabel;
|
|
@@ -27,10 +30,8 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -486,4 +487,78 @@ public class DemFireStatisticsServiceImpl extends AbstractCrudService<DemFireSta
|
|
|
demFireStatisticsAttach.setUpdateTime(LocalDateTime.now());
|
|
|
demFireStatisticsAttachService.updateById(demFireStatisticsAttach);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Object> getFireCountByData(String startTime, String endTime, String address, String fireType) {
|
|
|
+ Date startTime1 = null;
|
|
|
+ Date endTime1 = null;
|
|
|
+ if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
|
|
|
+ startTime1 = OnlineMethod.transferString2Date(startTime);
|
|
|
+ endTime1 = OnlineMethod.transferString2Date(endTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Object> list = new ArrayList<>();
|
|
|
+ Date date = new Date();
|
|
|
+ Date beginDayOfYear = DateUtils.getBeginDayOfYear(date);
|
|
|
+ //获取传入时间的最大时间和最小时间
|
|
|
+ int distanceOfTwoDate = Integer.parseInt(DateUtils.getYear(endTime1)) - Integer.parseInt(DateUtils.getYear(startTime1)) + 1;
|
|
|
+ //获取数据库全部项目的最小时间和最大时间
|
|
|
+ QueryWrapper<DemFireStatistics> query = Wrappers.query();
|
|
|
+ query.select("max(fire_time) as fireTime");
|
|
|
+ DemFireStatistics one = this.getOne(query);
|
|
|
+ QueryWrapper<DemFireStatistics> query1 = Wrappers.query();
|
|
|
+ query1.select("min(fire_time) as fireTime");
|
|
|
+ DemFireStatistics one1 = this.getOne(query1);
|
|
|
+ Date maxDate = null;
|
|
|
+ Date minDate = null;
|
|
|
+ if (one.getFireTime() != null) {
|
|
|
+ maxDate = Date.from(one.getFireTime().atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ }
|
|
|
+ if (one1.getFireTime() != null) {
|
|
|
+ minDate = Date.from(one1.getFireTime().atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ }
|
|
|
+ int distanceOfTwoDateYear = Integer.parseInt(DateUtils.getYear(maxDate)) - Integer.parseInt(DateUtils.getYear(minDate)) + 1;
|
|
|
+ list.add(perfect(beginDayOfYear, date, address, fireType, 1));
|
|
|
+ list.add(perfect(startTime1, endTime1, 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<String> fireNumberList = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotBlank(fireType)) {
|
|
|
+ LambdaQueryWrapper<DemFireStatisticsAttach> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.select(DemFireStatisticsAttach::getFireNumber)
|
|
|
+ .eq(DemFireStatisticsAttach::getFireCauseType1, fireType);
|
|
|
+ List<DemFireStatisticsAttach> list1 = demFireStatisticsAttachService.list(queryWrapper);
|
|
|
+ if (CollectionUtils.isNotEmpty(list1)) {
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
+ fireNumberList.add(list1.get(i).getFireNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ QueryWrapper<DemFireStatistics> query = Wrappers.query();
|
|
|
+ query.select("MONTH (fire_time) monthTime", "COUNT(1) AS aCount")
|
|
|
+ .like(StringUtils.isNotBlank(address), "fire_address", address)
|
|
|
+ .in(CollectionUtils.isNotEmpty(fireNumberList), "fire_number", fireNumberList)
|
|
|
+ .between(startTime != null && endTime != null, "fire_time", startTime, endTime)
|
|
|
+ .groupBy("monthTime");
|
|
|
+ List<Map<String, Object>> list = this.listMaps(query);
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|