package com.ycl.service.caseHandler.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hikvision.artemis.sdk.util.HttpUtils;
import com.ycl.common.util.UtilNumber;
import com.ycl.dto.video.HKAlarmParam;
import com.ycl.entity.caseHandler.BaseCase;
import com.ycl.entity.caseHandler.EventSource;
import com.ycl.entity.caseHandler.QuestionCategory;
import com.ycl.entity.caseHandler.Violations;
import com.ycl.entity.dict.DataDictionary;
import com.ycl.entity.region.SccgRegion;
import com.ycl.entity.resources.ImageResources;
import com.ycl.entity.video.VideoAlarmReport;
import com.ycl.entity.video.VideoPoint;
import com.ycl.enums.common.DictTypeEnum;
import com.ycl.mapper.caseHandler.BaseCaseMapper;
import com.ycl.mapper.caseHandler.ViolationsMapper;
import com.ycl.service.caseHandler.IBaseCaseService;
import com.ycl.service.caseHandler.IViolationsService;
import com.ycl.service.dict.IDataDictionaryService;
import com.ycl.service.oss.OssService;
import com.ycl.service.region.ISccgRegionService;
import com.ycl.service.resources.IImageResourcesService;
import com.ycl.service.video.IVideoAlarmReportService;
import com.ycl.service.video.impl.IVideoPointService;
import com.ycl.vo.cockpit.enforcementEvents.VideoAndAreaVO;
import net.coobird.thumbnailator.Thumbnails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
*
* 违规事件 服务实现类
*
*
* @author wl
* @since 2022-09-24
*/
@Service
public class ViolationsServiceImpl extends ServiceImpl implements IViolationsService {
private IVideoPointService videoPointService;
private IBaseCaseService baseCaseService;
private IDataDictionaryService dataDictionaryService;
private IImageResourcesService imageResourcesService;
private ISccgRegionService regionService;
private IVideoAlarmReportService videoAlarmReportService;
@Autowired
private OssService ossService;
@Resource
BaseCaseMapper baseCaseMapper;
@Autowired
UtilNumber utilNumber;
@Autowired
public void setVideoPointService(IVideoPointService videoPointService) {
this.videoPointService = videoPointService;
}
@Autowired
public void setBaseCaseService(IBaseCaseService baseCaseService) {
this.baseCaseService = baseCaseService;
}
@Autowired
public void setDataDictionaryService(IDataDictionaryService dataDictionaryService) {
this.dataDictionaryService = dataDictionaryService;
}
@Autowired
public void setImageResourcesService(IImageResourcesService imageResourcesService) {
this.imageResourcesService = imageResourcesService;
}
@Autowired
public void setRegionService(ISccgRegionService regionService) {
this.regionService = regionService;
}
@Autowired
public void setVideoAlarmReportService(IVideoAlarmReportService videoAlarmReportService) {
this.videoAlarmReportService = videoAlarmReportService;
}
@Override
public void saveFromVideo(List videoAlarmReports) {
for (VideoAlarmReport videoAlarmReport : videoAlarmReports) {
BaseCase baseCase = BaseCase.builder().eventSource(EventSource.VIDEO.getCode()).category(QuestionCategory.VIOLATION.getCode())
.code(utilNumber.createCaseCode()).createTime(LocalDateTime.now()).createUser(0L).state(1).alarmTime(videoAlarmReport.getAlarmTime()).build();
Violations violations = new Violations();
VideoPoint videoPoint = videoPointService.getByCode(videoAlarmReport.getPlatResourceId());
if (videoPoint != null) {
baseCase.setLatitude(videoPoint.getLatitude());
baseCase.setLongitude(videoPoint.getLongitude());
baseCase.setStreetId(videoPoint.getStreetId());
baseCase.setCommunityId(videoPoint.getCommunityId());
baseCase.setSite(videoPoint.getAddress());
baseCase.setGridId(videoPoint.getGridId());
baseCase.setSite(videoPoint.getAddress());
baseCaseService.save(baseCase);
violations.setId(baseCase.getId());
violations.setVideoAlarmReportId(videoAlarmReport.getId());
violations.setVideoPointId(videoPoint.getId());
violations.setDescription(videoAlarmReport.getAlgoName());
List list = dataDictionaryService.queryByCode(DictTypeEnum.EVENT_GRADE_TYPE.getCode(), videoAlarmReport.getAlarmName().trim());
if (list.size() > 0) {
violations.setGradeId(list.get(0).getId());
}
baseMapper.insert(violations);
try {
ImageResources imageResources = new ImageResources();
imageResources.setType("05");
imageResources.setBelongToId(baseCase.getId());
imageResources.setUrl(videoAlarmReport.getPicData());
imageResources.setCreateTime(LocalDateTime.now());
ImageResources imageResources1 = new ImageResources();
BeanUtil.copyProperties(imageResources, imageResources1);
imageResources1.setType("01");
imageResourcesService.save(imageResources1);
imageResourcesService.save(imageResources);
} catch (Exception ex) {
System.out.println("海康推送保存异常:" + ex.getMessage());
}
}
}
}
@Override
public void saveFromHKVideo(HKAlarmParam alarmParam) {
SccgRegion region = regionService.getByCode(alarmParam.getPrefectureCodeIdaas());
VideoPoint videoPoint = videoPointService.getByCode(alarmParam.getEventNumber());
List dataDictionaries = dataDictionaryService.queryByRemark(alarmParam.getSubject());
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime alarmTime = LocalDateTime.parse(alarmParam.getIncidentDate(), df);
BaseCase baseCase = BaseCase.builder().eventSource(1).category(QuestionCategory.VIOLATION.getCode())
.code(utilNumber.createCaseCode()).createTime(LocalDateTime.now()).createUser(0L).state(1).
alarmTime(alarmTime).build();
Violations violations = new Violations();
baseCase.setLatitude(alarmParam.getLatitude());
baseCase.setLongitude(alarmParam.getLongitude());
if (region != null) {
baseCase.setStreetId(region.getId().intValue());
}
baseCase.setSite(alarmParam.getScene());
baseCaseService.save(baseCase);
violations.setId(baseCase.getId());
if (dataDictionaries.size() > 0) {
violations.setGradeId(dataDictionaries.get(0).getId());
}
violations.setDescription(alarmParam.getEventContent());
violations.setInformant(alarmParam.getReportUserName());
violations.setInformantPhoneCode(alarmParam.getContact());
if (videoPoint != null) {
violations.setVideoPointId(videoPoint.getId());
}
String[] imgs = alarmParam.getFileUrl().split(",");
VideoAlarmReport videoAlarmReport = new VideoAlarmReport();
videoAlarmReport.setPlatResourceId(alarmParam.getEventNumber());
String img0 = "";
if (imgs.length > 0) {
img0 = saveOSS(imgs[0]);
videoAlarmReport.setPicData(img0);
}
videoAlarmReport.setAlarmTime(alarmTime);
videoAlarmReport.setAlarmId(alarmParam.getEventId());
videoAlarmReport.setAlgoName(alarmParam.getContact());
videoAlarmReport.setAlarmName(alarmParam.getSubject());
videoAlarmReportService.save(videoAlarmReport);
violations.setVideoAlarmReportId(videoAlarmReport.getId());
baseMapper.insert(violations);
try {
for (int i = 0; i < imgs.length; i++) {
ImageResources imageResources = new ImageResources();
imageResources.setType("04");
imageResources.setBelongToId(baseCase.getId());
imageResources.setUrl(i == 0 ? img0 : saveOSS(imgs[i]));
imageResources.setCreateTime(LocalDateTime.now());
ImageResources imageResources1 = new ImageResources();
BeanUtil.copyProperties(imageResources, imageResources1);
imageResources1.setType("01");
imageResourcesService.save(imageResources1);
imageResourcesService.save(imageResources);
}
} catch (Exception ex) {
}
}
private String saveOSS(String hkUrl) {
InputStream inputStream = getImageStream(hkUrl);
if (inputStream != null) {
String picData = ossService.uploadImages(inputStream, ".png",0);
return picData;
} else return "";
}
private InputStream getImageStream(String url) {
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
connection.setRequestMethod("GET");
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream outs = new ByteArrayOutputStream();
Thumbnails.of(inputStream).scale(0.6).outputQuality(1).toOutputStream(outs);
InputStream ins = new ByteArrayInputStream(outs.toByteArray());
return ins;
}
} catch (IOException e) {
System.out.println("获取网络图片出现异常,图片路径为:" + url);
e.printStackTrace();
}
return null;
}
@Override
public List selectType() {
return baseCaseMapper.selectType();
}
}