package com.ycl.platform.service.impl;
|
|
import annotation.DataScope;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.platform.domain.entity.TMonitor;
|
import com.ycl.platform.domain.query.DashboardQuery;
|
import com.ycl.platform.domain.query.DataCenterQuery;
|
import com.ycl.platform.domain.query.HomeQuery;
|
import com.ycl.platform.domain.result.HK.FaceDeviceInspectionResult;
|
import com.ycl.platform.domain.result.HK.FaceDeviceSamplingResult;
|
import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult;
|
import com.ycl.platform.domain.result.HK.VehicleDeviceSamplingResult;
|
import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
|
import com.ycl.platform.domain.result.UY.OsdCheckResult;
|
import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
|
import com.ycl.platform.domain.vo.TMonitorVO;
|
import com.ycl.platform.domain.vo.WorkOrderVO;
|
import com.ycl.platform.domain.vo.screen.MonitorRateVO;
|
import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
|
import com.ycl.platform.mapper.TMonitorMapper;
|
import com.ycl.platform.mapper.WorkOrderMapper;
|
import com.ycl.platform.service.ITMonitorService;
|
import com.ycl.system.Result;
|
import com.ycl.system.page.PageUtil;
|
import com.ycl.system.service.ISysConfigService;
|
import com.ycl.utils.DateUtils;
|
import com.ycl.utils.StringUtils;
|
import enumeration.general.AreaDeptEnum;
|
import org.apache.commons.lang3.ObjectUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Query;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.time.LocalDate;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 设备资产Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2024-03-04
|
*/
|
@Service
|
public class TMonitorServiceImpl extends ServiceImpl<TMonitorMapper, TMonitor> implements ITMonitorService {
|
@Autowired
|
private TMonitorMapper tMonitorMapper;
|
@Autowired
|
private ISysConfigService configService;
|
@Autowired
|
private MongoTemplate mongoTemplate;
|
@Autowired
|
private WorkOrderMapper workOrderMapper;
|
|
/**
|
* 查询设备资产
|
*
|
* @param id 设备资产主键
|
* @return 设备资产
|
*/
|
@Override
|
public TMonitor selectTMonitorById(Long id) {
|
return tMonitorMapper.selectTMonitorById(id);
|
}
|
|
/**
|
* 查询设备资产列表
|
* 异常恢复监控、车辆、人脸、视频通用接口
|
*
|
* @param tMonitor 设备资产
|
* @return 设备资产
|
*/
|
@Override
|
@DataScope(deptAlias = "d", userAlias = "u")
|
public List<TMonitorVO> selectTMonitorList(TMonitorVO tMonitor) {
|
// 异常恢复监控
|
if (Objects.equals(tMonitor.getRecovery(), 1L)) {
|
String time = configService.selectConfigByKey("abnormal.equipment.continuous.attention.time");
|
if (StringUtils.isBlank(time)) {
|
throw new RuntimeException("请配置异常设备连续关注时间");
|
}
|
tMonitor.setTime(time);
|
}
|
List<TMonitorVO> monitors = tMonitorMapper.selectTMonitorList(tMonitor);
|
// 异常恢复监控
|
if (Objects.equals(tMonitor.getRecovery(), 1L)) {
|
//工单号
|
List<String> orders = monitors.stream().map(TMonitorVO::getWorkOrderNo).collect(Collectors.toList());
|
if (CollectionUtils.isEmpty(orders)) {
|
return monitors;
|
}
|
List<WorkOrderVO> voList = workOrderMapper.getRecoveryInfo(orders);
|
for (TMonitorVO monitor : monitors) {
|
if (!CollectionUtils.isEmpty(voList)) {
|
for (WorkOrderVO workOrderVO : voList) {
|
if (monitor.getWorkOrderNo().equals(workOrderVO.getWorkOrderNo())) {
|
monitor.setUnitContact(workOrderVO.getUnitContact());
|
monitor.setUnitContactPhone(workOrderVO.getUnitContactPhone());
|
monitor.setYwPeopleName(workOrderVO.getYwPeopleName());
|
monitor.setErrorType(workOrderVO.getErrorType());
|
}
|
}
|
}
|
}
|
return monitors;
|
}
|
//设备编号
|
List<String> numbers = monitors.stream().map(TMonitorVO::getSerialNumber).collect(Collectors.toList());
|
Query query = new Query();
|
Date now = new Date();
|
query.addCriteria(Criteria.where("no").in(numbers)
|
.and("mongoCreateTime").gte(DateUtils.getDayStart(now)).lt(DateUtils.getDayEnd(now))
|
);
|
//一机一档信息
|
List<MonitorQualifyResult> monitorQualifyResults = mongoTemplate.find(query, MonitorQualifyResult.class);
|
// 视频监控设备
|
if (Objects.equals(tMonitor.getCameraFunType(), "1")) {
|
//OSD信息
|
List<OsdCheckResult> osdCheckResults = mongoTemplate.find(query, OsdCheckResult.class);
|
//录像可用信息
|
List<RecordMetaDSumResult> videoResults = mongoTemplate.find(query, RecordMetaDSumResult.class);
|
for (TMonitorVO monitor : monitors) {
|
monitor.setMongoCreateTime(now);
|
//一机一档
|
setOneFile(monitorQualifyResults, monitor);
|
//录像
|
if (!CollectionUtils.isEmpty(videoResults)) {
|
for (RecordMetaDSumResult videoResult : videoResults) {
|
if (monitor.getSerialNumber().equals(videoResult.getNo())) {
|
monitor.setVideoComplete(videoResult.getRecordStatus());
|
monitor.setVideoLoseTime(videoResult.getMissDuration());
|
}
|
}
|
}
|
//OSD
|
if (!CollectionUtils.isEmpty(osdCheckResults)) {
|
for (OsdCheckResult osdCheckResult : osdCheckResults) {
|
if (monitor.getSerialNumber().equals(osdCheckResult.getNo())) {
|
monitor.setOSD(OsdCheckResult.checkOsd(osdCheckResult));
|
monitor.setOSDTime(OsdCheckResult.checkTime(osdCheckResult));
|
}
|
}
|
}
|
}
|
}
|
// 车辆监控设备
|
if (Objects.equals(tMonitor.getCameraFunType(), "2")) {
|
//属性一致率、大图、url
|
List<VehicleDeviceSamplingResult> sampleResults = mongoTemplate.find(query, VehicleDeviceSamplingResult.class);
|
//抓拍量、时钟、上传
|
List<VehicleDeviceInspectionResult> inspectResults = mongoTemplate.find(query, VehicleDeviceInspectionResult.class);
|
for (TMonitorVO monitor : monitors) {
|
monitor.setMongoCreateTime(now);
|
//一机一档
|
setOneFile(monitorQualifyResults, monitor);
|
//属性一致率、大图、url
|
if (!CollectionUtils.isEmpty(sampleResults)) {
|
for (VehicleDeviceSamplingResult sampleResult : sampleResults) {
|
if (monitor.getSerialNumber().equals(sampleResult.getNo())) {
|
if (sampleResult.getBigUseful() != null) {
|
monitor.setBigUsefulPercent(sampleResult.getBigUseful().getBigUsefulPercent());
|
monitor.setUrlPercent(VehicleDeviceSamplingResult.BigUsefulness.calUrl(sampleResult.getBigUseful()));
|
}
|
if (sampleResult.getVehDiff() != null) {
|
monitor.setImportantConPercent(sampleResult.getVehDiff().getImportantConPercent());
|
monitor.setMajorConPercent(sampleResult.getVehDiff().getMajorConPercent());
|
}
|
}
|
}
|
}
|
//抓拍量、时钟、上传
|
if (!CollectionUtils.isEmpty(inspectResults)) {
|
for (VehicleDeviceInspectionResult inspectResult : inspectResults) {
|
if (monitor.getSerialNumber().equals(inspectResult.getNo())) {
|
monitor.setSnapResult(inspectResult.getSnapResult());
|
monitor.setSnapCount(inspectResult.getDataCount());
|
if (inspectResult.getSnapClock() != null)
|
monitor.setClockPercent(inspectResult.getSnapClock().getClockPercent());
|
if (inspectResult.getSnapTimely() != null)
|
monitor.setUploadPercent(inspectResult.getSnapTimely().getTimelyPercent());
|
}
|
}
|
}
|
}
|
}
|
// 人脸监控设备
|
if (Objects.equals(tMonitor.getCameraFunType(), "3")) {
|
//人脸合格、大图、url访问异常
|
List<FaceDeviceSamplingResult> sampleResults = mongoTemplate.find(query, FaceDeviceSamplingResult.class);
|
//抓拍量、时钟、上传
|
List<FaceDeviceInspectionResult> inspectResults = mongoTemplate.find(query, FaceDeviceInspectionResult.class);
|
for (TMonitorVO monitor : monitors) {
|
monitor.setMongoCreateTime(now);
|
//一机一档
|
setOneFile(monitorQualifyResults, monitor);
|
//人脸合格、大图、url访问异常
|
if (!CollectionUtils.isEmpty(sampleResults)) {
|
for (FaceDeviceSamplingResult sampleResult : sampleResults) {
|
if (monitor.getSerialNumber().equals(sampleResult.getNo())) {
|
if (sampleResult.getBigUseful() != null) {
|
monitor.setBigUsefulPercent(sampleResult.getBigUseful().getBigUsefulPercent());
|
monitor.setUrlPercent(FaceDeviceSamplingResult.BigUsefulness.calUrl(sampleResult.getBigUseful()));
|
}
|
if (sampleResult.getFaceEligibility() != null)
|
monitor.setFacePercent(sampleResult.getFaceEligibility().getFaceEligPercent());
|
}
|
}
|
}
|
//抓拍量、时钟、上传、建模失败率
|
if (!CollectionUtils.isEmpty(inspectResults)) {
|
for (FaceDeviceInspectionResult inspectResult : inspectResults) {
|
if (monitor.getSerialNumber().equals(inspectResult.getNo())) {
|
monitor.setSnapResult(inspectResult.getSnapResult());
|
monitor.setSnapCount(inspectResult.getDataCount());
|
if (inspectResult.getSnapClock() != null)
|
monitor.setClockPercent(inspectResult.getSnapClock().getClockPercent());
|
if (inspectResult.getSnapTimely() != null)
|
monitor.setUploadPercent(inspectResult.getSnapTimely().getTimelyPercent());
|
if (inspectResult.getSnapValidity() != null)
|
monitor.setFailPercent(inspectResult.getSnapValidity().getFailPercent());
|
}
|
}
|
}
|
}
|
}
|
return monitors;
|
}
|
|
/**
|
* 补充一机一档信息
|
*
|
* @param monitorQualifyResults
|
* @param monitor
|
*/
|
private void setOneFile(List<MonitorQualifyResult> monitorQualifyResults, TMonitorVO monitor) {
|
if (!CollectionUtils.isEmpty(monitorQualifyResults)) {
|
for (MonitorQualifyResult oneFile : monitorQualifyResults) {
|
if (monitor.getSerialNumber().equals(oneFile.getNo())) {
|
monitor.setMonitorQualify(MonitorQualifyResult.correct(oneFile));
|
monitor.setNewMonitor(oneFile.getNewDevice());
|
}
|
}
|
}
|
}
|
|
/**
|
* 新增设备资产
|
*
|
* @param tMonitor 设备资产
|
* @return 结果
|
*/
|
@Override
|
public int insertTMonitor(TMonitor tMonitor) {
|
return tMonitorMapper.insertTMonitor(tMonitor);
|
}
|
|
/**
|
* 修改设备资产
|
*
|
* @param tMonitor 设备资产
|
* @return 结果
|
*/
|
@Override
|
public int updateTMonitor(TMonitor tMonitor) {
|
return tMonitorMapper.updateTMonitor(tMonitor);
|
}
|
|
/**
|
* 批量删除设备资产
|
*
|
* @param ids 需要删除的设备资产主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteTMonitorByIds(Long[] ids) {
|
return tMonitorMapper.deleteTMonitorByIds(ids);
|
}
|
|
/**
|
* 删除设备资产信息
|
*
|
* @param id 设备资产主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteTMonitorById(Long id) {
|
return tMonitorMapper.deleteTMonitorById(id);
|
}
|
|
@Override
|
@DataScope(deptAlias = "d", userAlias = "u")
|
public Map<String, String> getVideoCount(TMonitorVO tMonitor) {
|
return tMonitorMapper.getVideoCount(tMonitor);
|
}
|
|
@Override
|
@DataScope(deptAlias = "d", userAlias = "u")
|
public Map<String, String> recoveryException(TMonitorVO monitor) {
|
// String time = configService.selectConfigByKey("abnormal.equipment.continuous.attention.time");
|
// monitor.setTime(time);
|
return tMonitorMapper.recoveryException(monitor);
|
}
|
|
@Override
|
public Map<String, Object> home(HomeQuery monitorQuery) {
|
Map<String, Object> dataMap = new HashMap<>();
|
Map<String, Object> monthMap1 = new HashMap<>();
|
Map<String, Object> monthMap2 = new HashMap<>();
|
List<Map<String, Object>> home = baseMapper.home(monitorQuery);
|
if (ObjectUtils.isNotEmpty(home)) {
|
for (Map<String, Object> map : home) {
|
monthMap1.put(map.get("months").toString(), map.get("num1"));
|
monthMap2.put(map.get("months").toString(), map.get("num2"));
|
}
|
dataMap.put("name", home.get(0).get("name"));
|
dataMap.put("state", monthMap1);
|
dataMap.put("state2", monthMap2);
|
}
|
return dataMap;
|
}
|
|
@Override
|
public Map<String, List<Map<String, Object>>> monitorTotal(DashboardQuery dashboardQuery) {
|
List<MonitorTotalVO> monitorTotalVOS = baseMapper.monitorTotal(dashboardQuery);
|
/** facilityData: {
|
* video:[
|
* {value: 4589,title: '设备总数'},
|
* {value: 4294,title: '设备正常数'},
|
* {value: 295,title: '设备异常数'}
|
* ]} */
|
Map<String, List<Map<String, Object>>> resultMap = new HashMap<>();
|
for (MonitorTotalVO vo : monitorTotalVOS) {
|
List<Map<String, Object>> list = new ArrayList();
|
Map<String, Object> total = new HashMap<>();
|
total.put("value", vo.getTotalNum());
|
total.put("title", "设备总数");
|
Map<String, Object> normal = new HashMap<>();
|
normal.put("value", vo.getNormalNum());
|
normal.put("title", "正常数");
|
Map<String, Object> error = new HashMap<>();
|
error.put("value", vo.getErrorNum());
|
error.put("title", "异常数");
|
list.add(total);
|
list.add(normal);
|
list.add(error);
|
resultMap.put(vo.getType(), list);
|
}
|
return resultMap;
|
}
|
|
@Override
|
public List<MonitorRateVO> monitorRate(DashboardQuery dashboardQuery) {
|
return baseMapper.monitorRate(dashboardQuery);
|
}
|
|
|
@Override
|
public Result assetManagement(DataCenterQuery query) {
|
IPage<TMonitorVO> page = PageUtil.getPage(query, TMonitorVO.class);
|
baseMapper.assetManagement(page, query);
|
return Result.ok().data(page.getRecords()).total(page.getTotal());
|
}
|
}
|