南昌市物联网技防平台-后台
zengh
2021-06-01 cd2cfd37366002f790a2ed1435962d4eff7d5cec
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/animalheat/service/impl/AnimalHeatServiceImpl.java
@@ -3,19 +3,20 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.common.entity.ReportReturnData;
import org.springblade.jfpt.alarm.constant.AlarmTimeConstant;
import org.springblade.jfpt.animalheat.entity.BladeAnimalHeat;
import org.springblade.jfpt.animalheat.mapper.AnimalHeatMapper;
import org.springblade.jfpt.animalheat.service.AnimalHeatService;
import org.springblade.jfpt.animalheat.util.ImageUtil;
import org.springblade.common.entity.AnimalHeatExcel;
import org.springblade.jfpt.animalheat.vo.AnimalHeatVo;
import org.springblade.jfpt.animalheat.vo.StatisVo;
import org.springblade.jfpt.parcel.vo.ConditionVo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import static org.springblade.core.tool.utils.DateUtil.now;
/**
@@ -32,9 +33,6 @@
   @Value("${picture.addUrl}")
   private String picAddUrl;
   @Value("${picture.pre}")
   private String picPre;
   /**
    * 新增体温数据
@@ -45,21 +43,27 @@
   public void save(String body) {
      //1.截取信息
      int i = body.indexOf("{");
      String host = body.substring(body.indexOf("192."), body.indexOf("Accept-Encoding"));
      //2.从 {  处开始截取
      int length = body.length();
      //3.截取,由于获取数据时,} 被去除,需要加上
      String dataBody = body.substring(i, length)+"}";
      System.out.println("dataBody = " + dataBody);
      //4.数据转换
      Map<String,Object> data = (Map<String, Object>) JSONObject.parse(dataBody);
      System.out.println("data = " + data);
      //5.创建体温数据对象
      BladeAnimalHeat bladeAnimalHeat = new BladeAnimalHeat();
      //6.取出数据,封装数据到对象
      String method = data.get("method").toString();
      if (method.contains("infrared_aiom_picture")){
         bladeAnimalHeat.setMethod(0);
      }
      bladeAnimalHeat.setSerialno(data.get("serialno").toString());
      bladeAnimalHeat.setIp(host);
      String picture = data.get("picture").toString();
      //将二进制原始图片转换成图片
      ImageUtil.base64StringToImage(picture);
      //bladeAnimalHeat.setPicture(data.get("picture").toString());  //暂时不存入
      String imageUrl = ImageUtil.base64StringToImage(picture);
      //存入图片地址url
      bladeAnimalHeat.setPicture(picAddUrl+imageUrl);
      String temp_red =data.get("temp_red").toString();
      String[] temRedArr = temp_red.substring(1,temp_red.length()-1).split(",");
      if (temRedArr.length>1){
@@ -68,16 +72,16 @@
         float v1 = Float.parseFloat(temRedArr[1]);
         int compare = Float.compare(v, v1);
         bladeAnimalHeat.setTempRed(compare>=0 ? v:v1);
         //和标志温度比较,大于37度为高温,标记为1,小于则为正常0
         int compare1 = Float.compare(37, compare >= 0 ? v : v1);
         //和标志温度比较,大于37.2度为高温,标记为1,小于则为正常0
         int compare1 = Float.compare(37.2f, compare >= 0 ? v : v1);
         bladeAnimalHeat.setStatus(compare1>0 ?0:1);
      }else {
         bladeAnimalHeat.setTempRed(Float.parseFloat(temRedArr[0]));
         int compare1 = Float.compare(37, Float.parseFloat(temRedArr[0]));
         int compare1 = Float.compare(37.2f, Float.parseFloat(temRedArr[0]));
         bladeAnimalHeat.setStatus(compare1>0 ?0:1);
      }
      String person_rects = data.get("person_rect").toString();
      bladeAnimalHeat.setPersonRect(person_rects.substring(2,person_rects.length()-2));
      bladeAnimalHeat.setPersonRect(person_rects.substring(1,person_rects.length()-1));
      bladeAnimalHeat.setCreateTime(now());
      //7.插入数据
      int idata = baseMapper.insert(bladeAnimalHeat);
@@ -90,15 +94,19 @@
    * @return
    */
   @Override
   public List<StatisVo> getAnimalStatis(AnimalHeatVo animalHeatVo) {
      if(null!= animalHeatVo.getStatus()){
   public List<Map<String, Object>> getAnimalStatis(AnimalHeatVo animalHeatVo) {
      if(null!= animalHeatVo.getType()){
         //查询当天的统计数据
         if (animalHeatVo.getStatus()==0){
         if (animalHeatVo.getType()==0){
            return baseMapper.getAnimalStatis();
         }
         //查询本周的统计数据
         if (animalHeatVo.getStatus()==1){
         if (animalHeatVo.getType()==1){
            return baseMapper.getAnimalStatisWeek();
         }
         //查询本月的统计数据
         if (animalHeatVo.getType()==2){
            return baseMapper.getAnimalStatisMonth();
         }
      }
      return null;
@@ -115,4 +123,173 @@
   public IPage<BladeAnimalHeat> selectAnimalHeatPage(IPage<BladeAnimalHeat> page, AnimalHeatVo animalHeatVo) {
      return page.setRecords(baseMapper.selectAnimalHeatPageList(page, animalHeatVo));
   }
   /**
    * 查询本周每天的体温数据数量
    * @return
    */
   @Override
   public List<Map<String, Integer>> selWeekDayAnimalStatis() {
      return baseMapper.selWeekDayAnimalStatis();
   }
   /**
    * 统计7天内每天体温异常的的总人数
    * @return
    */
   @Override
   public Map<String, Object> selectAnimalData() {
      //创建map对象
      Map<String, Object> map = new HashMap<>();
      //查询统计数据
      List<Integer> list = baseMapper.selectAnimalHeatDataStatis();
      //封装数据
      map.put("animalData",list);
      //返回数据
      return map;
   }
   /**
    * 查询当前时间段体温异常总次数
    * @param conditionVo
    * @return
    */
   @Override
   public Integer selAnimalTimeCount(ConditionVo conditionVo) {
      return baseMapper.selAnimalTimeCount(conditionVo);
   }
   /**
    * 查询当前时间段区间时间体温异常次数
    * @param conditionVo
    * @return
    */
   @Override
   public List<Integer> selAnimalTimeDis(ConditionVo conditionVo) {
      //获取当前时间段内异常体温数据集合
      List<BladeAnimalHeat> animalHeats = baseMapper.selAnimalTimeData(conditionVo);
      if (animalHeats.size()>0){
         return getHealthcodeTimeDis(animalHeats);
      }
      return Arrays.asList(0,0,0,0,0,0,0,0,0,0,0,0);
   }
   /**
    * 筛选数据,分类返回
    * @param collect 集合数据
    * @return
    */
   private List<Integer> getHealthcodeTimeDis(List<BladeAnimalHeat> collect) {
      List<Integer> list = new ArrayList<>();
      int count02 = 0;
      int count0204 = 0;
      int count0406 = 0;
      int count0608 = 0;
      int count0810 = 0;
      int count1012 = 0;
      int count1214 = 0;
      int count1416 = 0;
      int count1618 = 0;
      int count1820 = 0;
      int count2022 = 0;
      int count2224 = 0;
      //遍历集合
      for (BladeAnimalHeat animalHeat:collect) {
         try {
            long hours = animalHeat.getCreateTime().getHours();
            if (hours>0 && hours< AlarmTimeConstant.TWO){
               count02+=1;
            }
            if (hours>=AlarmTimeConstant.TWO && hours<AlarmTimeConstant.FOUR){
               count0204+=1;
            }
            if (hours>=AlarmTimeConstant.FOUR && hours<AlarmTimeConstant.SIX){
               count0406+=1;
            }
            if (hours>=AlarmTimeConstant.SIX && hours<AlarmTimeConstant.EIGHT){
               count0608+=1;
            }
            if (hours>=AlarmTimeConstant.EIGHT && hours<AlarmTimeConstant.TEN){
               count0810+=1;
            }
            if (hours>=AlarmTimeConstant.TEN && hours<AlarmTimeConstant.TWEKVE){
               count1012+=1;
            }
            if (hours>=AlarmTimeConstant.TWEKVE && hours<AlarmTimeConstant.FOURTEEN){
               count1214+=1;
            }
            if (hours>=AlarmTimeConstant.FOURTEEN && hours<AlarmTimeConstant.SIXTEEN){
               count1416+=1;
            }
            if (hours>=AlarmTimeConstant.SIXTEEN && hours<AlarmTimeConstant.EIGHTEEN){
               count1618+=1;
            }
            if (hours>=AlarmTimeConstant.EIGHTEEN && hours<AlarmTimeConstant.TWENTY){
               count1820+=1;
            }
            if (hours>=AlarmTimeConstant.TWENTY && hours<AlarmTimeConstant.TWENTY_TWO){
               count2022+=1;
            }
            if (hours>=AlarmTimeConstant.TWENTY_TWO && hours<AlarmTimeConstant.TWENTY_FOUR){
               count2224+=1;
            }
         } catch (Exception e) {
            e.printStackTrace();
         }
      }
      //封装数据
      list.add(count02);
      list.add(count0204);
      list.add(count0406);
      list.add(count0608);
      list.add(count0810);
      list.add(count1012);
      list.add(count1214);
      list.add(count1416);
      list.add(count1618);
      list.add(count1820);
      list.add(count2022);
      list.add(count2224);
      //返回数据
      return list;
   }
   /**
    * 统计时间段内体温异常人数数量数据
    * @param conditionVo
    * @return
    */
   @Override
   public Map<String, Object> selectAnimalTimeData(ConditionVo conditionVo) {
      conditionVo.setStartTime(conditionVo.getStartTime().substring(0,10));
      conditionVo.setEndTime(conditionVo.getEndTime().substring(0,10));
      //创建map对象
      Map<String, Object> map = new HashMap<>();
      //查询统计数据
      List<Integer> list = baseMapper.selectAnimalTimeData(conditionVo);
      //封装数据
      map.put("animalData",list);
      //返回数据
      return map;
   }
   /**
    * 导出体温数据列表
    * @param animalHeatVo 条件
    */
   @Override
   public List<AnimalHeatExcel> exportAnimalHeat(AnimalHeatVo animalHeatVo) {
      return baseMapper.exportAnimalHeat(animalHeatVo);
   }
   /**
    * 导出体温数据列表
    * @param animalHeatVo 条件
    */
   @Override
   public List<ReportReturnData> getAnimalHeatPie(AnimalHeatVo animalHeatVo) {
      return baseMapper.getAnimalHeatPie(animalHeatVo);
   }
}