| | |
| | | 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.AlarmDataParam; |
| | | import com.ycl.dto.video.AlarmParam; |
| | | import com.ycl.dto.video.CameraInfParam; |
| | | 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.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.function.Consumer; |
| | | |
| | | /** |
| | | * VideoAlarmReportServiceImpl |
| | |
| | | private IViolationsService violationsService; |
| | | |
| | | @Autowired |
| | | private OssService ossService; |
| | | |
| | | @Autowired |
| | | public void setMediaFileUtil(MediaFileUtil mediaFileUtil) { |
| | | this.mediaFileUtil = mediaFileUtil; |
| | | } |
| | |
| | | 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().size() > 0) { |
| | | 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 = ""; |
| | | String[] strings = alarmParam.getPicData().split(","); |
| | | String extension = "jpg"; |
| | | if (!StringUtils.isEmpty(alarmParam.getPicData())) { |
| | | // String[] strings = alarmParam.getPicData().split(","); |
| | | String extension = "jpg"; |
| | | |
| | | byte[] data = DatatypeConverter.parseBase64Binary(strings[1]); |
| | | InputStream inputStream = new ByteArrayInputStream(data); |
| | | try { |
| | | picData = mediaFileUtil.savePicture(inputStream, extension); |
| | | List<VideoAlarmReport> videoAlarmReports = new ArrayList<>(); |
| | | for (int i = 0; i < alarmParam.getAlarmData().size(); i++) { |
| | | AlarmDataParam alarmData = alarmParam.getAlarmData().get(i); |
| | | /******************** 处理图片 **********************/ |
| | | try { |
| | | Date date = sdf.parse(alarmData.getAlarmTime()); |
| | | Instant instant = date.toInstant(); |
| | | ZoneId zoneId = ZoneId.systemDefault(); |
| | | // 按照Base64编码解析数据 |
| | | byte[] data = DatatypeConverter.parseBase64Binary(alarmParam.getPicData()); |
| | | InputStream inputStream = new ByteArrayInputStream(data); |
| | | try { |
| | | // 如果List<AlarmDataParam>合理 |
| | | if (alarmParam.getAlarmData() != null && alarmParam.getAlarmData().size() != 0) { |
| | | |
| | | 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()) |
| | | .algoName(alarmData.getAlgoName()).alarmObj(JSON.toJSONString(alarmData.getAlarmObject())) |
| | | .build(); |
| | | 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); |
| | | |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | this.saveBatch(videoAlarmReports, videoAlarmReports.size()); |
| | | this.saveBatch(videoAlarmReports, videoAlarmReports.size()); |
| | | |
| | | violationsService.saveFromVideo(videoAlarmReports); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<VideoAlarmReport> findByChannelAndAlarmNameAndTime(String channel, String alarmName, LocalDateTime alarmTime) { |
| | | |
| | | LambdaQueryWrapper<VideoAlarmReport> queryWrapper = new LambdaQueryWrapper<VideoAlarmReport>() |
| | | .eq(VideoAlarmReport::getChannel, channel).eq(VideoAlarmReport::getAlarmName, alarmName) |
| | | .between(VideoAlarmReport::getAlarmTime, alarmTime.plusMinutes(-3), alarmTime.plusMinutes(3)); |
| | | return this.list(queryWrapper); |
| | | } |
| | | |
| | | private List<VideoAlarmReport> getByAlarmId(String alarmId) { |
| | | LambdaQueryWrapper<VideoAlarmReport> queryWrapper = new LambdaQueryWrapper<VideoAlarmReport>().eq(VideoAlarmReport::getAlarmId, alarmId); |
| | | return this.list(queryWrapper); |
| | | } |
| | | } |