package com.ycl.service.video.impl;
|
|
import com.alibaba.druid.util.StringUtils;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.dto.video.*;
|
import com.ycl.entity.video.VideoAlarmReport;
|
import com.ycl.mapper.video.VideoAlarmReportMapper;
|
import com.ycl.service.caseHandler.IViolationsService;
|
import com.ycl.service.oss.OssService;
|
import com.ycl.service.video.IVideoAlarmReportService;
|
import com.ycl.utils.MediaFileUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.imageio.ImageIO;
|
import javax.xml.bind.DatatypeConverter;
|
import java.awt.*;
|
import java.awt.image.BufferedImage;
|
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.Instant;
|
import java.time.ZoneId;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.function.Consumer;
|
|
/**
|
* VideoAlarmReportServiceImpl
|
*
|
* @version V1.0
|
* @author: AI
|
* @date: 2022-09-20 17:36
|
**/
|
@Service
|
public class VideoAlarmReportServiceImpl extends ServiceImpl<VideoAlarmReportMapper, VideoAlarmReport> implements IVideoAlarmReportService {
|
|
private MediaFileUtil mediaFileUtil;
|
private IViolationsService violationsService;
|
|
@Autowired
|
private OssService ossService;
|
|
@Autowired
|
public void setMediaFileUtil(MediaFileUtil mediaFileUtil) {
|
this.mediaFileUtil = mediaFileUtil;
|
}
|
|
@Autowired
|
public void setViolationsService(IViolationsService violationsService) {
|
this.violationsService = violationsService;
|
}
|
|
// @Override
|
// public void save(AlarmParam alarmParam) {
|
// if (alarmParam != null && alarmParam.getAlarmData() != null) {
|
// CameraInfParam cameraInf = alarmParam.getCameraInf();
|
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
|
// String picData = "";
|
// if (!StringUtils.isEmpty(alarmParam.getPicData())) {
|
//// String[] strings = alarmParam.getPicData().split(",");
|
// String extension = "jpg";
|
//
|
// byte[] data = DatatypeConverter.parseBase64Binary(alarmParam.getPicData());
|
// InputStream inputStream = new ByteArrayInputStream(data);
|
//
|
// try {
|
// if (!StringUtils.isEmpty(alarmParam.getAlarmData().getAlarmObject().toString())) {
|
// String alarmObject = JSON.toJSONString(alarmParam.getAlarmData().getAlarmObject());
|
// if (!StringUtils.isEmpty(alarmObject)) {
|
// BufferedImage image = ImageIO.read(inputStream);
|
//
|
// Graphics2D g2 = (Graphics2D) image.getGraphics();
|
// g2.setColor(Color.RED);
|
// g2.setStroke(new BasicStroke(3.0f));
|
// List<AlarmObject> alarmObjects = JSON.parseArray(alarmObject, AlarmObject.class);
|
// alarmObjects.forEach(o -> {
|
// o.getObjectRect().forEach(rect -> {
|
// g2.drawRect(rect.getX(), rect.getY(), rect.getW(), rect.getH());
|
// });
|
// });
|
// ByteArrayOutputStream os = new ByteArrayOutputStream();
|
// ImageIO.write(image, extension, os);
|
// inputStream = new ByteArrayInputStream(os.toByteArray());
|
// }
|
// }
|
// picData = mediaFileUtil.savePicture(inputStream, extension);
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
// }
|
// List<VideoAlarmReport> videoAlarmReports = new ArrayList<>();
|
//
|
// AlarmDataParam alarmData = alarmParam.getAlarmData();
|
// List<VideoAlarmReport> list = getByAlarmId(alarmData.getAlarmID());
|
// try {
|
// Date date = sdf.parse(alarmData.getAlarmTime());
|
// Instant instant = date.toInstant();
|
// ZoneId zoneId = ZoneId.systemDefault();
|
// VideoAlarmReport videoAlarmReport = VideoAlarmReport.builder()
|
// .ip(cameraInf.getIp()).port(cameraInf.getPort())
|
// .user(cameraInf.getUser()).password(cameraInf.getPassword())
|
// .channel(cameraInf.getChannel()).platResourceId(cameraInf.getPlatResourceID())
|
// .picData(picData).alarmTime(instant.atZone(zoneId).toLocalDateTime())
|
// .alarmId(alarmData.getAlarmID()).algoType(alarmData.getAlgoType())
|
// .alarmType(alarmData.getAlarmType()).alarmName(alarmData.getAlarmName())
|
// .algoName(alarmData.getAlgoName()).alarmObj(JSON.toJSONString(alarmData.getAlarmObject()))
|
// .build();
|
// if (list.size() == 0) {
|
//
|
// videoAlarmReports.add(videoAlarmReport);
|
//
|
// this.saveBatch(videoAlarmReports, videoAlarmReports.size());
|
//
|
// violationsService.saveFromVideo(videoAlarmReports);
|
//
|
// } else {
|
// videoAlarmReport.setId(list.get(0).getId());
|
// this.updateById(videoAlarmReport);
|
// }
|
// } catch (ParseException e) {
|
// e.printStackTrace();
|
// }
|
// }
|
// }
|
|
@Override
|
public void save(AlarmParam alarmParam) {
|
if (alarmParam != null && alarmParam.getAlarmData() != null) {
|
// 取出CameraInf
|
CameraInfParam cameraInf = alarmParam.getCameraInf();
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
|
String picData = "";
|
if (!StringUtils.isEmpty(alarmParam.getPicData())) {
|
// String[] strings = alarmParam.getPicData().split(",");
|
String extension = "jpg";
|
|
// 按照Base64编码解析数据
|
byte[] data = DatatypeConverter.parseBase64Binary(alarmParam.getPicData());
|
InputStream inputStream = new ByteArrayInputStream(data);
|
try {
|
// 如果List<AlarmDataParam>合理
|
if (alarmParam.getAlarmData() != null && alarmParam.getAlarmData().size() != 0) {
|
|
BufferedImage image = ImageIO.read(inputStream);
|
Graphics2D g2 = (Graphics2D) image.getGraphics();
|
g2.setColor(Color.RED);
|
g2.setStroke(new BasicStroke(3.0f));
|
|
List<AlarmDataParam> alarmData = alarmParam.getAlarmData();
|
|
alarmData.forEach(new Consumer<AlarmDataParam>() {
|
@Override
|
public void accept(AlarmDataParam alarmDataParam) {
|
List<AlarmObject> alarmObject = alarmDataParam.getAlarmObject();
|
alarmObject.forEach(new Consumer<AlarmObject>() {
|
@Override
|
public void accept(AlarmObject alarmObject) {
|
ObjectRect rect = alarmObject.getObjectRect();
|
g2.drawRect(rect.getX(), rect.getY(), rect.getW(), rect.getH());
|
}
|
});
|
}
|
});
|
|
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
ImageIO.write(image, extension, os);
|
inputStream = new ByteArrayInputStream(os.toByteArray());
|
|
}
|
picData = ossService.uploadImages(inputStream, extension);
|
} catch (Exception e) {
|
System.out.println("保存报警数据失败---图片上传失败:" + e.getMessage());
|
// e.printStackTrace();
|
}
|
}
|
List<VideoAlarmReport> videoAlarmReports = new ArrayList<>();
|
|
List<AlarmDataParam> alarmData = alarmParam.getAlarmData();
|
for (AlarmDataParam alarmDatum : alarmData) {
|
List<VideoAlarmReport> list = getByAlarmId(alarmDatum.getAlarmID());
|
try {
|
Date date = sdf.parse(alarmDatum.getAlarmTime());
|
Instant instant = date.toInstant();
|
ZoneId zoneId = ZoneId.systemDefault();
|
VideoAlarmReport videoAlarmReport = VideoAlarmReport.builder()
|
.ip(cameraInf.getIp()).port(cameraInf.getPort())
|
.user(cameraInf.getUser()).password(cameraInf.getPassword())
|
.channel(cameraInf.getChannel()).platResourceId(cameraInf.getPlatResourceID())
|
.picData(picData).alarmTime(instant.atZone(zoneId).toLocalDateTime())
|
.alarmId(alarmDatum.getAlarmID()).algoType(alarmDatum.getAlgoType())
|
.alarmType(alarmDatum.getAlarmType()).alarmName(alarmDatum.getAlarmName())
|
.algoName(alarmDatum.getAlgoName()).alarmObj(JSON.toJSONString(alarmDatum.getAlarmObject()))
|
.build();
|
if (list.size() == 0) {
|
|
videoAlarmReports.add(videoAlarmReport);
|
|
this.saveBatch(videoAlarmReports, videoAlarmReports.size());
|
|
violationsService.saveFromVideo(videoAlarmReports);
|
|
} else {
|
videoAlarmReport.setId(list.get(0).getId());
|
this.updateById(videoAlarmReport);
|
}
|
} catch (ParseException e) {
|
System.out.println("保存报警数据失败:" + e.getMessage());
|
// e.printStackTrace();
|
}
|
}
|
}
|
}
|
|
@Override
|
public void saveFromHK(HKAlarmParam alarmParam) {
|
if (alarmParam != null) {
|
violationsService.saveFromHKVideo(alarmParam);
|
}
|
}
|
|
private List<VideoAlarmReport> getByAlarmId(String alarmId) {
|
LambdaQueryWrapper<VideoAlarmReport> queryWrapper = new LambdaQueryWrapper<VideoAlarmReport>().eq(VideoAlarmReport::getAlarmId, alarmId);
|
return this.list(queryWrapper);
|
}
|
}
|