package com.ycl.platform.service.impl;
|
|
import com.ycl.platform.controller.YwThresholdController;
|
import com.ycl.platform.domain.entity.WorkOrder;
|
import com.ycl.platform.domain.entity.YwThreshold;
|
import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
|
import com.ycl.platform.domain.result.UY.*;
|
import com.ycl.platform.mapper.WorkOrderMapper;
|
import com.ycl.platform.service.IYwThresholdService;
|
import com.ycl.platform.service.UYErrorTypeCheckService;
|
import com.ycl.platform.service.WorkOrderService;
|
import com.ycl.utils.DateUtils;
|
import com.ycl.utils.uuid.IdUtils;
|
import constant.ApiConstants;
|
import constant.YwThreadConstants;
|
import enumeration.CompareType;
|
import enumeration.ErrorType;
|
import enumeration.general.BusinessTypeEnum;
|
import enumeration.general.WorkOrderStatusEnum;
|
import lombok.Data;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author:xp
|
* @date:2024/8/19 13:46
|
*/
|
@Service
|
@RequiredArgsConstructor
|
@Slf4j
|
public class UYErrorTypeCheckServiceImpl implements UYErrorTypeCheckService {
|
|
private final WorkOrderService workOrderService;
|
private final IYwThresholdService ywThresholdService;
|
private final WorkOrderMapper workOrderMapper;
|
|
/**
|
* 图像检测生成工单
|
*
|
* @param dataList
|
*/
|
@Override
|
public void imageDetectionCheck(List<ImageDetectionResult> dataList) {
|
List<WorkOrder> workOrderList = dataList.stream().filter(item -> -1 == item.getSignal()
|
|| -1 == item.getImage()
|
)
|
.map(item -> {
|
WorkOrder workOrder = new WorkOrder();
|
// 信号缺失
|
if (-1 == item.getSigna1()) {
|
this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
|
}
|
// 画面偏色
|
if (-1 == item.getColor()) {
|
this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
|
}
|
// 雪花干扰
|
if (-1 == item.getSnow()) {
|
this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
|
}
|
// 条纹干扰
|
if (-1 == item.getStripe()) {
|
this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
|
}
|
// 画面遮挡
|
if (-1 == item.getShade()) {
|
this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
|
}
|
// 清晰度异常
|
if (-1 == item.getBlur()) {
|
this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
|
}
|
// // 亮度异常
|
// if (-1 == item.getLight()) {
|
// this.genWorkOrder(workOrder, ErrorType.ABNORMAL_BRIGHTNESS, item.getDeviceId());
|
// }
|
return workOrder;
|
}).collect(Collectors.toList());
|
workOrderService.innerAddWorkOrder(workOrderList);
|
}
|
|
/**
|
* 点位信息异常
|
*
|
* @param dataList
|
*/
|
@Override
|
public void monitorQualifyCheck(List<MonitorQualifyResult> dataList) {
|
List<WorkOrder> workOrderList = dataList.stream().map(item -> {
|
WorkOrder workOrder = new WorkOrder();
|
//TODO:待优云修复,避免工单
|
MonitorQualifyResult.QualifyResult qualifyResult = new MonitorQualifyResult.QualifyResult();
|
qualifyResult.setError(false);
|
item.setIntegrated_device(qualifyResult);
|
if (item.getSerialNumber() == null || item.getSerialNumber().getError() ||
|
item.getCivilCode() == null || item.getCivilCode().getError() ||
|
item.getIntegrated_device() == null || item.getIntegrated_device().getError() ||
|
item.getIp() == null || item.getIp().getError() ||
|
item.getJkdwlx() == null || item.getJkdwlx().getError() ||
|
item.getLatitude() == null || item.getLatitude().getError() ||
|
item.getLongitude() == null || item.getLongitude().getError() ||
|
item.getMacdz() == null || item.getMacdz().getError() ||
|
item.getSbzt() == null || item.getSbzt().getError() ||
|
item.getName() == null || item.getName().getError() ||
|
item.getSxjcjqy() == null || item.getSxjcjqy().getError() ||
|
item.getSxjgnlx() == null || item.getSxjgnlx().getError()) {
|
this.genWorkOrder(workOrder, ErrorType.POINT_INFO_ERROR, item.getSerialNumber().getValue());
|
}
|
return workOrder;
|
}).collect(Collectors.toList());
|
workOrderService.innerAddWorkOrder(workOrderList);
|
}
|
|
@Override
|
public void videoOnlineCheck(List<VideoOnlineResult> dataList) {
|
//查询数据库已存在的离线工单获取ip集合,剔除
|
List<String> ips = workOrderMapper.getOfflineWorkOrder();
|
List<WorkOrder> workOrderList = dataList.stream()
|
.filter(item -> CollectionUtils.isEmpty(ips) || !ips.contains(item.getIpAddr()))
|
.map(item -> {
|
WorkOrder workOrder = new WorkOrder();
|
if (ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus())) {
|
this.genWorkOrder(workOrder, ErrorType.DEVICE_OFFLINE, item.getDeviceId());
|
}
|
return workOrder;
|
}).collect(Collectors.toList());
|
workOrderService.innerAddWorkOrder(workOrderList);
|
}
|
|
@Override
|
public void hkOnlineCheck(List<SnapshotDataMonitorResult> dataList) {
|
//查询数据库已存在的离线工单获取ip集合,剔除
|
List<String> ips = workOrderMapper.getOfflineWorkOrder();
|
List<WorkOrder> workOrderList = dataList.stream()
|
.filter(item -> CollectionUtils.isEmpty(ips) || !ips.contains(item.getIp()))
|
.map(item -> {
|
WorkOrder workOrder = new WorkOrder();
|
this.genWorkOrder(workOrder, ErrorType.DEVICE_OFFLINE, item.getExternalIndexCode());
|
return workOrder;
|
}).collect(Collectors.toList());
|
workOrderService.innerAddWorkOrder(workOrderList);
|
}
|
|
@Override
|
public void recordMetaDSumCheck(List<RecordMetaDSumResult> dataList) {
|
// List<WorkOrder> workOrderList = dataList.stream().map(item -> {
|
// WorkOrder workOrder = new WorkOrder();
|
// if (0 == item.getRecordStatus()) {
|
// this.genWorkOrder(workOrder, ErrorType.VIDEO_LOSS, item.getDeviceId());
|
// } else if (-1 == item.getRecordStatus()) {
|
// this.genWorkOrder(workOrder, ErrorType.VIDEO_NONE, item.getDeviceId());
|
// }
|
// return workOrder;
|
// }).collect(Collectors.toList());
|
// workOrderService.innerAddWorkOrder(workOrderList);
|
}
|
|
|
@Override
|
public void osdCheck(List<OsdCheckResult> dataList) {
|
Map<String, YwThreshold> ywThresholdMap = ywThresholdService.getYwThresholdMap(BusinessTypeEnum.VIDEO.name());
|
List<WorkOrder> workOrderList = dataList.stream().map(item -> {
|
WorkOrder workOrder = new WorkOrder();
|
// osd信息
|
if (!ApiConstants.OSD_Correct.equals(item.getOsdProvinceCorrect())
|
|| (!ApiConstants.OSD_Correct.equals(item.getOsdCityCorrect()))
|
|| (!ApiConstants.OSD_Correct.equals(item.getOsdPartCorrect()))
|
|| (!ApiConstants.OSD_Correct.equals(item.getOsdNameCorrect()))
|
) {
|
this.genWorkOrder(workOrder, ErrorType.OSD_ERROR, item.getDeviceNo());
|
}
|
// osd时间 时间需要走阈值检查 这里需要把时间放在后面:如果时间处于待下发的阈值那么工单状态会改为待下发的工单
|
// if (!ApiConstants.OSD_Correct.equals(item.getOsdTimeCorrect())) {
|
// this.genWorkOrder(workOrder, ErrorType.CLOCK_SKEW, item.getDeviceNo());
|
// }
|
long checkTime = item.getCheckTime().getTime();
|
long osdTime = item.getSetTime().getTime();
|
Long timeDiff = Math.abs((checkTime - osdTime) / 1000);
|
ywThresholdService.check(YwThreadConstants.Video_DiffTime, timeDiff, item.getDeviceNo(), ywThresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.CLOCK_SKEW.getValue());
|
return workOrder;
|
}).collect(Collectors.toList());
|
|
log.error("osdCheck获得插入工单:{}",workOrderList);
|
workOrderService.innerAddWorkOrder(workOrderList);
|
}
|
|
/**
|
* 工单信息
|
*
|
* @param workOrder
|
* @param errorType 故障类型
|
* @param serialNumber 国标码
|
*/
|
private void genWorkOrder(WorkOrder workOrder, ErrorType errorType, String serialNumber) {
|
if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
|
workOrder.setErrorTypeList(new ArrayList<>());
|
workOrder.getErrorTypeList().add(errorType.getValue());
|
} else {
|
workOrder.getErrorTypeList().add(errorType.getValue());
|
}
|
workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
|
workOrder.setSerialNumber(serialNumber);
|
}
|
}
|