From b8e97e3b94b75243d8e7c5b7b875f3b806551330 Mon Sep 17 00:00:00 2001 From: liyuchen <791867849@qq.com> Date: Sat, 15 Apr 2023 17:09:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=A6=96=E9=A1=B5=E7=81=BE?= =?UTF-8?q?=E5=AE=B3=E7=BB=9F=E8=AE=A1=E4=BB=A3=E7=A0=81-liyuchen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kening/vordm/entity/DisasterData.java | 10 ++ .../controller/DisasterInfoController.java | 9 ++ .../vordm/mapper/DisasterInfoMapper.java | 13 ++ .../vordm/mapper/DisasterInfoMapper.xml | 27 +++++ .../vordm/service/DisasterInfoService.java | 7 ++ .../service/impl/DisasterInfoServiceImpl.java | 113 ++++++++++++++++++ 6 files changed, 179 insertions(+) create mode 100644 kn-service-api/biz-vordm-api/src/main/java/com/kening/vordm/entity/DisasterData.java diff --git a/kn-service-api/biz-vordm-api/src/main/java/com/kening/vordm/entity/DisasterData.java b/kn-service-api/biz-vordm-api/src/main/java/com/kening/vordm/entity/DisasterData.java new file mode 100644 index 0000000..132a78b --- /dev/null +++ b/kn-service-api/biz-vordm-api/src/main/java/com/kening/vordm/entity/DisasterData.java @@ -0,0 +1,10 @@ +package com.kening.vordm.entity; + +import lombok.Data; + +@Data +public class DisasterData { + private String type; + private Integer value; + private String date; +} diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java b/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java index ba96113..c34125f 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java @@ -329,4 +329,13 @@ public class DisasterInfoController { Boolean flag=disasterInfoService.updateById(disasterInfo); return R.data(flag); } + + /** + * 后台管理系统-控制台灾害各项统计 + * @return + */ + @GetMapping("/statistics") + public R statistics(){ + return R.data(disasterInfoService.statistics()); + } } diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.java b/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.java index 9051bd0..63c4628 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.java +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.java @@ -12,6 +12,7 @@ import org.apache.ibatis.annotations.Param; import org.apache.poi.ss.formula.functions.T; import java.util.List; +import java.util.Map; /** * @author G1393 @@ -49,4 +50,16 @@ public interface DisasterInfoMapper extends BaseMapper { List getLeft2Data(); List page(IPage page,@Param("callForHelpVo" )CallForHelpVo callForHelpVo); + + /** + * 获取灾害数据 关联字典项 + * @return + */ + List getAllData(); + + /** + * 查询每个月响应的灾害 + * @return + */ + List> getDisasterInfoByMouth(@Param("start") String start,@Param("end") String end,@Param("type") Integer type); } diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.xml b/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.xml index f253c31..2948341 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.xml +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/mapper/DisasterInfoMapper.xml @@ -158,4 +158,31 @@ order by d.upload_time desc + + + + diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/DisasterInfoService.java b/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/DisasterInfoService.java index d852563..2cc7cf9 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/DisasterInfoService.java +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/DisasterInfoService.java @@ -10,6 +10,7 @@ import com.kening.vordm.vo.GroupByUse; import com.kening.vordm.vo.UserTenantVo; import java.util.List; +import java.util.Map; /** * @author G1393 @@ -55,4 +56,10 @@ public interface DisasterInfoService extends IService { Boolean addVisitCount(Long id); IPage page(IPage page, CallForHelpVo callForHelpVo); + + /** + * 后台管理系统-控制台灾害各项统计 + * @return + */ + Map statistics(); } diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/DisasterInfoServiceImpl.java b/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/DisasterInfoServiceImpl.java index a65ebc4..b25c699 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/DisasterInfoServiceImpl.java +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/DisasterInfoServiceImpl.java @@ -3,9 +3,12 @@ package com.kening.vordm.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Maps; +import com.kening.vordm.entity.DisasterData; import com.kening.vordm.entity.DisasterInfo; import com.kening.vordm.mapper.DisasterInfoMapper; import com.kening.vordm.service.DisasterInfoService; +import com.kening.vordm.service.GuestManageDisasterRefService; import com.kening.vordm.vo.CallForHelpVo; import com.kening.vordm.vo.DisasterMangerInfo; import com.kening.vordm.vo.GroupByUse; @@ -14,8 +17,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @author G1393 @@ -27,6 +34,8 @@ import java.util.List; public class DisasterInfoServiceImpl extends ServiceImpl implements DisasterInfoService { + private final GuestManageDisasterRefService guestManageDisasterRefService; + /** * 返回指定的灾害条目 * @param type @@ -131,5 +140,109 @@ implements DisasterInfoService { return page.setRecords(this.baseMapper.page(page,callForHelpVo)); } + /** + * 后台管理系统-控制台灾害各项统计 + * @description 暂时没有条件查询 所有统计都暂时写在一个查询里面 + * @return + */ + @Override + public Map statistics() { + Map resultMap = Maps.newHashMap(); + //查询灾害表全部数据数据(tip:暂时没有条件 需要的话后期改) + List disasterInfoList = list(); + //统计head头部的数据 + Map headMap = headData(disasterInfoList); + //统计灾害发生区域占比 + Map countryData = disasterCountryProportion(disasterInfoList); + //统计当年的灾害申请次数 按月查询 + List> applyMonth = getDisasterReponseByMouth(1); + //统计灾害数量占比 + Map disasterNum = disasterNumProportion(); + //统计当年的灾害响应次数 按月查询 + List> responseMonth = getDisasterReponseByMouth(2); + resultMap.put("header",headMap); + resultMap.put("country",countryData); + resultMap.put("disasterNum",disasterNum); + resultMap.put("responseMonth",responseMonth); + resultMap.put("applyMonth",applyMonth); + return resultMap; + } + /** + * 统计head头部信息 + * @return + */ + private Map headData(List disasterInfoList){ + Map headMap = Maps.newHashMap(); + //用户访问量 + Integer visitCount = disasterInfoList.stream().map(DisasterInfo::getVisitCount).reduce(Integer::sum).orElse(0); + //数据下载量 + Integer downloadCount = disasterInfoList.stream().map(DisasterInfo::getDownloadCount).reduce(Integer::sum).orElse(0); + //灾害响应申请次数 + Integer size = disasterInfoList.size(); + //灾害响应实际次数 + Long actResponseNum = disasterInfoList.stream().filter(data-> data.getRespondStatus() > 1).count(); + //灾害响应百分比 + headMap.put("visitCount",visitCount); + headMap.put("downloadCount",downloadCount); + headMap.put("applyCount",size); + headMap.put("actResponseNum",actResponseNum); + return headMap; + } + + /** + *计算每个国家的灾害占比 + * @return + */ + private Map disasterCountryProportion(List disasterInfoList){ + Map proportionMap; + //根据国家分组统计次数以及总灾害的占比 + proportionMap = disasterInfoList.stream().collect(Collectors.groupingBy(DisasterInfo::getDisasterCountry,Collectors.counting())); + return proportionMap; + } + + /** + * 计算每个灾害发生的次数 + * @return + */ + private Map disasterNumProportion(){ + List disasterInfoList = baseMapper.getAllData(); + Map proportionMap = disasterInfoList.stream().collect(Collectors.groupingBy(DisasterInfo::getDictValue,Collectors.counting())); + return proportionMap; + } + + /** + * 按月统计当年每个月的响应或者申请量 + * @return + */ + private List> getDisasterReponseByMouth(Integer type){ + //统计每个月的个数 + final String[] MONTH = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"}; + int year = LocalDate.now().getYear(); + List> resultList = new ArrayList<>(); + //查询开始时间 + String start = year + "-01-01 00:00:00"; + //查询结束时间 + String end = year + 1 + "-01-01 00:00:00"; + List> mapList = baseMapper.getDisasterInfoByMouth(start,end,type); + List disasterList = mapList.stream().map((map) -> { + return cn.hutool.core.bean.BeanUtil.mapToBean(map, DisasterData.class, true); + }).collect(Collectors.toList()); + int size = MONTH.length; + Map> collect = disasterList.stream().collect(Collectors.groupingBy(DisasterData::getDate)); + for (int i = 0; i < size; ++i) { + Map result = Maps.newLinkedHashMap(); + String month = MONTH[i]; + List disasterData = collect.get(month); + if (disasterData!=null&&!disasterData.isEmpty()){ + DisasterData disasterData1 = disasterData.get(0); + result.put(year+"-"+month,disasterData1); + }else { + result.put(year+"-"+month,null); + } + resultList.add(result); + } + return resultList; + + } }