|
|
@@ -2,32 +2,48 @@ package com.xunmei.mediator.api.service.impl;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.xunmei.common.core.constant.SecurityConstants;
|
|
|
+import com.xunmei.common.core.domain.mediator.domain.MediatorAlarmCode;
|
|
|
import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
|
|
|
+import com.xunmei.common.core.domain.video.MediatorVideoDiagnosisLog;
|
|
|
import com.xunmei.common.core.domain.video.MediatorVideoDiagnosisRecord;
|
|
|
+import com.xunmei.common.core.util.BeanHelper;
|
|
|
+import com.xunmei.common.core.utils.IDHelper;
|
|
|
+import com.xunmei.mediator.api.mapper.MediatorAlarmCodeMapper;
|
|
|
import com.xunmei.mediator.api.mapper.MediatorCategoryMapper;
|
|
|
+import com.xunmei.mediator.api.mapper.VideoDiagnosisLogMapper;
|
|
|
import com.xunmei.mediator.api.mapper.VideoDiagnosisRecordMapper;
|
|
|
+import com.xunmei.mediator.api.service.IMediatorAlarmCodeService;
|
|
|
+import com.xunmei.mediator.api.service.IVideoDiagnosisLogService;
|
|
|
import com.xunmei.mediator.api.service.IVideoDiagnosisRecordService;
|
|
|
import com.xunmei.mediator.api.service.NorthErrorService;
|
|
|
import com.xunmei.mediator.domain.dto.protection.ReceiveErrorDto;
|
|
|
+import com.xunmei.mediator.domain.dto.protection.VideoRecorderHardDiskDetectionEditDto;
|
|
|
import com.xunmei.mediator.domain.dto.redis.RedisKey;
|
|
|
import com.xunmei.mediator.domain.dto.videoDiagnosis.VideoDiagnosisDetailInfoVo;
|
|
|
import com.xunmei.mediator.domain.dto.videoDiagnosis.VideoDiagnosisDto;
|
|
|
import com.xunmei.mediator.util.CheckDataUtil;
|
|
|
import com.xunmei.mediator.util.RedisUtil;
|
|
|
+import com.xunmei.system.api.RemoteDeviceService;
|
|
|
import com.xunmei.system.api.RemoteOrgService;
|
|
|
import com.xunmei.system.api.domain.SysDevice;
|
|
|
import com.xunmei.system.api.domain.SysOrg;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
|
|
|
+import org.springframework.transaction.support.TransactionSynchronizationManager;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.text.ParseException;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
- * 服务实现类
|
|
|
+ * 服务实现类
|
|
|
* </p>
|
|
|
*
|
|
|
* @author oygj
|
|
|
@@ -40,12 +56,15 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
|
|
|
@Resource
|
|
|
RemoteOrgService orgService;
|
|
|
@Resource
|
|
|
- NorthErrorService northErrorService;
|
|
|
+ private IVideoDiagnosisLogService videoDiagnosisLogService;
|
|
|
@Resource
|
|
|
MediatorCategoryMapper categoryMapper;
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ RemoteDeviceService deviceService;
|
|
|
+ @Resource
|
|
|
+ MediatorAlarmCodeMapper alarmCodeMapper;
|
|
|
@Override
|
|
|
- public ReceiveErrorDto saveData(VideoDiagnosisDto videoDiagnosisDto, String msgId, String branchId) throws IllegalAccessException {
|
|
|
+ public ReceiveErrorDto saveData(VideoDiagnosisDto videoDiagnosisDto, String msgId, String branchId) throws IllegalAccessException, ParseException {
|
|
|
ReceiveErrorDto error = new ReceiveErrorDto();
|
|
|
//与上次接收到的数据进行比较,如果相同则不进行处理
|
|
|
//这里要返回true,不然接口调用端会重复发送
|
|
|
@@ -61,8 +80,8 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
|
|
|
SysOrg org = (SysOrg) map.get("org");
|
|
|
SysDevice device = (SysDevice) map.get("device");
|
|
|
MediatorCategory category = (MediatorCategory) map.get("category");
|
|
|
- // Map<String, Object> objectMap = this.buildEntityDto(videoDiagnosisDto, org, device, category);
|
|
|
- // this.saveDataInfo(objectMap, videoDiagnosisDto, device);
|
|
|
+ Map<String, Object> objectMap = this.buildEntityDto(videoDiagnosisDto, org, device, category);
|
|
|
+ this.saveDataInfo(objectMap, videoDiagnosisDto, device);
|
|
|
}
|
|
|
return error;
|
|
|
}
|
|
|
@@ -101,8 +120,7 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
|
|
|
map.put("error", error);
|
|
|
return map;
|
|
|
}
|
|
|
- // MediatorCategory category = categoryMapper.selectById(device.getCategoryId());
|
|
|
- MediatorCategory category=new MediatorCategory();
|
|
|
+ MediatorCategory category = categoryMapper.selectById(device.getCategoryId());
|
|
|
if (ObjectUtil.isNull(category)) {
|
|
|
error.setSuccess(false);
|
|
|
error.setErrorMsg("设备类型不存在");
|
|
|
@@ -163,4 +181,182 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
|
|
|
return diff;
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ private Map<String, Object> buildEntityDto(VideoDiagnosisDto videoDiagnosisDto, SysOrg org, SysDevice device, MediatorCategory category) throws ParseException {
|
|
|
+ Map<String, Object> objectMap = new HashMap<>();
|
|
|
+ MediatorVideoDiagnosisRecord videoDiagnosis = new MediatorVideoDiagnosisRecord();
|
|
|
+ videoDiagnosis.setId(IDHelper.id());
|
|
|
+ MediatorVideoDiagnosisRecord old = this.findByOrgIdAndEquipmentCodeAndChannelCode(org.getId(), videoDiagnosisDto.getEquipmentCode(), videoDiagnosisDto.getChannelCode());
|
|
|
+ if (old != null) {
|
|
|
+ videoDiagnosis = old;
|
|
|
+ }
|
|
|
+ Date date = new Date();
|
|
|
+ if (videoDiagnosis.getCreateTime() == null) {
|
|
|
+ videoDiagnosis.setCreateTime(date);
|
|
|
+ }
|
|
|
+
|
|
|
+ videoDiagnosis.setUpdateTime(date);
|
|
|
+ videoDiagnosis.setAlarmTime(videoDiagnosisDto.getAlarmTime());
|
|
|
+ videoDiagnosis.setChannelCode(videoDiagnosisDto.getChannelCode());
|
|
|
+ videoDiagnosis.setChannelName(videoDiagnosisDto.getChannelName());
|
|
|
+ videoDiagnosis.setDetailInfo(JSON.toJSONString(videoDiagnosisDto.getDetailInfo()));
|
|
|
+ videoDiagnosis.setEquipmentCode(videoDiagnosisDto.getEquipmentCode());
|
|
|
+ switch (videoDiagnosisDto.getIsAlarm()) {
|
|
|
+ case 0:
|
|
|
+ videoDiagnosis.setIsAlarm(1);
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ videoDiagnosis.setIsAlarm(0);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ videoDiagnosis.setOrgId(org.getId());
|
|
|
+ videoDiagnosis.setOrgName(org.getName());
|
|
|
+ videoDiagnosis.setOrgPath(org.getPath());
|
|
|
+ SysDevice hostDevice = deviceService.findByHostCode(videoDiagnosis.getEquipmentCode(),SecurityConstants.INNER);
|
|
|
+ if (hostDevice != null) {
|
|
|
+ videoDiagnosis.setEquipmentName(hostDevice.getDeviceName());
|
|
|
+ }
|
|
|
+ videoDiagnosis.setDeviceName(device.getDeviceName());
|
|
|
+ videoDiagnosis.setDeviceId(String.valueOf(device.getId()));
|
|
|
+ this.dealDetailInfo(videoDiagnosis);
|
|
|
+ objectMap.put("videoDiagnosis", videoDiagnosis);
|
|
|
+
|
|
|
+ QueryWrapper<MediatorAlarmCode> qw = new QueryWrapper<>();
|
|
|
+ qw.lambda().eq(MediatorAlarmCode::getParentId, 6);
|
|
|
+ qw.lambda().eq(MediatorAlarmCode::getDeleted, 0);
|
|
|
+ List<MediatorAlarmCode> codes = alarmCodeMapper.selectList(qw);
|
|
|
+ objectMap.put("codes", codes);
|
|
|
+
|
|
|
+ /* List<HostAlarmRecord> alarmRecords = this.buildHostAlarmRecord(videoDiagnosis, org, category, device, videoDiagnosisDto, codes);
|
|
|
+ if (alarmRecords != null && alarmRecords.size() > 0) {
|
|
|
+ QueryWrapper<HostAlarmRecord> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda().eq(HostAlarmRecord::getDeviceId, device.getId());
|
|
|
+ queryWrapper.lambda().eq(HostAlarmRecord::getOrgId, org.getId());
|
|
|
+ queryWrapper.lambda().eq(HostAlarmRecord::getAlarmStatus, 1);
|
|
|
+ List<HostAlarmRecord> alarmRecordList = hostAlarmRecordDao.list(queryWrapper);
|
|
|
+ //传过来的数据(告警未结束,需要插入的数据)
|
|
|
+ List<HostAlarmRecord> alarmRecordsa = alarmRecords.stream().filter(r -> r.getAlarmStatus() == 1).collect(Collectors.toList());
|
|
|
+ //传过来的数据(告警结束,需要修改的数据)
|
|
|
+ List<HostAlarmRecord> alarmRecordsb = alarmRecords.stream().filter(r -> r.getAlarmStatus() == 0).collect(Collectors.toList());
|
|
|
+ List<HostAlarmRecord> alarmRecordsInsert = new ArrayList<>();
|
|
|
+ List<HostAlarmRecord> alarmRecordsUpdate = new ArrayList<>();
|
|
|
+ if (alarmRecordsa != null && alarmRecordsa.size() > 0) {
|
|
|
+ for (HostAlarmRecord record : alarmRecordsa) {
|
|
|
+ if (alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId()) && r.getAlarmCode().equals(record.getAlarmCode())).count() > 0) {
|
|
|
+ continue;
|
|
|
+ } else {
|
|
|
+ record.setId(IDHelper.id());
|
|
|
+ alarmRecordsInsert.add(record);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ objectMap.put("alarmRecordsInsert", alarmRecordsInsert);
|
|
|
+ }
|
|
|
+ if (alarmRecordsb != null && alarmRecordsb.size() > 0) {
|
|
|
+ for (HostAlarmRecord record : alarmRecordsb) {
|
|
|
+ if (alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId()) && r.getAlarmCode().equals(record.getAlarmCode())).count() > 0) {
|
|
|
+ List<HostAlarmRecord> recordaa = alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId()) && r.getAlarmCode().equals(record.getAlarmCode())).collect(Collectors.toList());
|
|
|
+ if (recordaa != null && recordaa.size() > 0) {
|
|
|
+ HostAlarmRecord recorda = recordaa.get(0); //alarmRecordList.stream().filter(r -> r.getDeviceId().equals(record.getDeviceId()) && r.getOrgId().equals(record.getOrgId())).collect(Collectors.toList()).get(0);
|
|
|
+ BeanHelper.copyProperties(recorda, record);
|
|
|
+ alarmRecordsUpdate.add(recorda);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ objectMap.put("alarmRecordsUpdate", alarmRecordsUpdate);
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ return objectMap;
|
|
|
+ }
|
|
|
+ private void dealDetailInfo(MediatorVideoDiagnosisRecord record){
|
|
|
+ final String detailInfo = record.getDetailInfo();
|
|
|
+ if (ObjectUtil.isNotNull(detailInfo)) {
|
|
|
+ final List<VideoDiagnosisDetailInfoVo> list = JSON.parseArray(detailInfo, VideoDiagnosisDetailInfoVo.class);
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (VideoDiagnosisDetailInfoVo infoVo : list) {
|
|
|
+ switch (infoVo.getType()) {
|
|
|
+ case 0:
|
|
|
+ record.setSignalLost(infoVo.getState());
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ record.setOcclude(infoVo.getState());
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ record.setBrightness(infoVo.getState());
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ record.setColorCast(infoVo.getState());
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ record.setSnowflake(infoVo.getState());
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ record.setStripe(infoVo.getState());
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ record.setContrast(infoVo.getState());
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ record.setBlurry(infoVo.getState());
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public MediatorVideoDiagnosisRecord findByOrgIdAndEquipmentCodeAndChannelCode(Long orgId, String equipmentCode, String channelCode) {
|
|
|
+ return lambdaQuery()
|
|
|
+ .eq(MediatorVideoDiagnosisRecord::getOrgId, orgId)
|
|
|
+ .eq(MediatorVideoDiagnosisRecord::getEquipmentCode, equipmentCode)
|
|
|
+ .eq(MediatorVideoDiagnosisRecord::getChannelCode, channelCode)
|
|
|
+ .last("limit 1").one();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveDataInfo(Map<String, Object> objectMap, VideoDiagnosisDto videoDiagnosisDto, SysDevice device) {
|
|
|
+ MediatorVideoDiagnosisRecord videoDiagnosis = (MediatorVideoDiagnosisRecord) objectMap.get("videoDiagnosis");
|
|
|
+ /* List<HostAlarmRecord> alarmRecordsInsert = (List<HostAlarmRecord>) objectMap.get("alarmRecordsInsert");
|
|
|
+ List<HostAlarmRecord> alarmRecordsUpdate = (List<HostAlarmRecord>) objectMap.get("alarmRecordsUpdate");*/
|
|
|
+ try {
|
|
|
+ videoDiagnosisLogService.saveData(videoDiagnosis);
|
|
|
+ this.saveOrUpdate(videoDiagnosis);
|
|
|
+ /*if(alarmRecordsInsert!=null&&alarmRecordsInsert.size()>0){
|
|
|
+ hostAlarmRecordDao.saveBatch(alarmRecordsInsert);
|
|
|
+ }
|
|
|
+ if(alarmRecordsUpdate!=null&&alarmRecordsUpdate.size()>0){
|
|
|
+ hostAlarmRecordDao.updateBatchById(alarmRecordsUpdate);
|
|
|
+ }*/
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ /* TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
|
|
|
+ @Override
|
|
|
+ public void afterCommit() {
|
|
|
+ //如果未开启自动生成运维单则 返回
|
|
|
+ if(alarmRecordsInsert!=null&&alarmRecordsInsert.size()>0){
|
|
|
+ for (HostAlarmRecord record : alarmRecordsInsert) {
|
|
|
+ List<AlarmCode> codes1 = codes.stream().filter(r -> r.getCode().equals(record.getAlarmCode())).collect(Collectors.toList());
|
|
|
+ if (codes1 != null && codes1.size() > 0) {
|
|
|
+ AlarmCode code = codes1.get(0);
|
|
|
+ if (code != null && code.getAutoGenerate()!=null&& 0 != code.getAutoGenerate()) {
|
|
|
+ deal(videoDiagnosisDto, videoDiagnosis, device.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });*/
|
|
|
+ }
|
|
|
}
|