package org.springblade.modules.animalheat.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.common.entity.AnimalHeatExcel; import org.springblade.common.entity.ReportReturnData; import org.springblade.modules.alarm.constant.AlarmTimeConstant; import org.springblade.modules.animalheat.entity.BladeAnimalHeat; import org.springblade.modules.animalheat.mapper.AnimalHeatMapper; import org.springblade.modules.animalheat.service.AnimalHeatService; import org.springblade.modules.animalheat.util.ImageUtil; import org.springblade.modules.animalheat.vo.AnimalHeatVo; import org.springblade.modules.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 static org.springblade.core.tool.utils.DateUtil.now; /** * 体温数据服务层 * */ @Service public class AnimalHeatServiceImpl extends ServiceImpl implements AnimalHeatService { @Override public boolean save(BladeAnimalHeat entity) { return false; } @Value("${picture.addUrl}") private String picAddUrl; /** * 新增体温数据 * @param body 体温数据 */ @Override @Transactional 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)+"}"; //4.数据转换 Map data = (Map) JSONObject.parse(dataBody); //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(); //将二进制原始图片转换成图片 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){ //比较两个温度的大小,取大的值 float v = Float.parseFloat(temRedArr[0]); float v1 = Float.parseFloat(temRedArr[1]); int compare = Float.compare(v, v1); bladeAnimalHeat.setTempRed(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.2f, Float.parseFloat(temRedArr[0])); bladeAnimalHeat.setStatus(compare1>0 ?0:1); } String person_rects = data.get("person_rect").toString(); bladeAnimalHeat.setPersonRect(person_rects.substring(1,person_rects.length()-1)); bladeAnimalHeat.setCreateTime(now()); //7.插入数据 int idata = baseMapper.insert(bladeAnimalHeat); } /** * 获取体温数据统计 * @param animalHeatVo 条件参数 开始时间,结束时间 * @return */ @Override public List> getAnimalStatis(AnimalHeatVo animalHeatVo) { if(null!= animalHeatVo.getType()){ //查询当天的统计数据 if (animalHeatVo.getType()==0){ return baseMapper.getAnimalStatis(); } //查询本周的统计数据 if (animalHeatVo.getType()==1){ return baseMapper.getAnimalStatisWeek(); } //查询本月的统计数据 if (animalHeatVo.getType()==2){ return baseMapper.getAnimalStatisMonth(); } } return null; } /** * 体温数据的分页数据 * @param animalHeatVo 查询条件 * @param page 查询页码 * @return */ @Override public IPage selectAnimalHeatPage(IPage page, AnimalHeatVo animalHeatVo) { return page.setRecords(baseMapper.selectAnimalHeatPageList(page, animalHeatVo)); } /** * 查询本周每天的体温数据数量 * @return */ @Override public List> selWeekDayAnimalStatis() { return baseMapper.selWeekDayAnimalStatis(); } /** * 统计7天内每天体温异常的的总人数 * @return */ @Override public Map selectAnimalData() { //创建map对象 Map map = new HashMap<>(); //查询统计数据 List 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 selAnimalTimeDis(ConditionVo conditionVo) { //获取当前时间段内异常体温数据集合 List 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 getHealthcodeTimeDis(List collect) { List 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 && hours=AlarmTimeConstant.SIX && hours=AlarmTimeConstant.EIGHT && hours=AlarmTimeConstant.TEN && hours=AlarmTimeConstant.TWEKVE && hours=AlarmTimeConstant.FOURTEEN && hours=AlarmTimeConstant.SIXTEEN && hours=AlarmTimeConstant.EIGHTEEN && hours=AlarmTimeConstant.TWENTY && hours=AlarmTimeConstant.TWENTY_TWO && hours selectAnimalTimeData(ConditionVo conditionVo) { conditionVo.setStartTime(conditionVo.getStartTime().substring(0,10)); conditionVo.setEndTime(conditionVo.getEndTime().substring(0,10)); //创建map对象 Map map = new HashMap<>(); //查询统计数据 List list = baseMapper.selectAnimalTimeData(conditionVo); //封装数据 map.put("animalData",list); //返回数据 return map; } /** * 导出体温数据列表 * @param animalHeatVo 条件 */ @Override public List exportAnimalHeat(AnimalHeatVo animalHeatVo) { return baseMapper.exportAnimalHeat(animalHeatVo); } /** * 导出体温数据列表 * @param animalHeatVo 条件 */ @Override public List getAnimalHeatPie(AnimalHeatVo animalHeatVo) { return baseMapper.getAnimalHeatPie(animalHeatVo); } }