package org.springblade.jfpt.animalheat.service.impl;
|
|
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.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<AnimalHeatMapper, BladeAnimalHeat> 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<String,Object> data = (Map<String, Object>) 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<Map<String, Object>> 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<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);
|
}
|
}
|