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 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 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 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 monitors = tMonitorMapper.selectTMonitorList(tMonitor); // 异常恢复监控 if(Objects.equals(tMonitor.getRecovery(), 1L)){ //工单号 List orders = monitors.stream().map(TMonitorVO::getWorkOrderNo).collect(Collectors.toList()); if(CollectionUtils.isEmpty(orders)){ return monitors; } List 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 numbers = monitors.stream().map(TMonitorVO::getSerialNumber).collect(Collectors.toList()); Query query = new Query(); //TODO:本地测试 // Date now = new Date() Date now = DateUtils.getDay(2024, 7, 13); query.addCriteria(Criteria.where("no").in(numbers) .and("mongoCreateTime").gte(DateUtils.getDayStart(now)).lt(DateUtils.getDayEnd(now)) ); //一机一档信息 List monitorQualifyResults = mongoTemplate.find(query, MonitorQualifyResult.class); // 视频监控设备 if (Objects.equals(tMonitor.getCameraFunType(), "1")) { //OSD信息 List osdCheckResults = mongoTemplate.find(query, OsdCheckResult.class); //录像可用信息 List 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 sampleResults = mongoTemplate.find(query, VehicleDeviceSamplingResult.class); //抓拍量、时钟、上传 List 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 sampleResults = mongoTemplate.find(query, FaceDeviceSamplingResult.class); //抓拍量、时钟、上传 List 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 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 getVideoCount(TMonitorVO tMonitor) { return tMonitorMapper.getVideoCount(tMonitor); } @Override @DataScope(deptAlias = "d", userAlias = "u") public Map recoveryException(TMonitorVO monitor) { // String time = configService.selectConfigByKey("abnormal.equipment.continuous.attention.time"); // monitor.setTime(time); return tMonitorMapper.recoveryException(monitor); } @Override public Map home(HomeQuery monitorQuery) { Map dataMap = new HashMap<>(); Map monthMap1 = new HashMap<>(); Map monthMap2 = new HashMap<>(); List> home = baseMapper.home(monitorQuery); if (ObjectUtils.isNotEmpty(home)) { for (Map 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 List monitorTotal(DashboardQuery dashboardQuery) { return baseMapper.monitorTotal(dashboardQuery); } @Override public List monitorRate(DashboardQuery dashboardQuery) { return baseMapper.monitorRate(dashboardQuery); } @Override public Result assetManagement(DataCenterQuery query) { IPage page = PageUtil.getPage(query, TMonitorVO.class); baseMapper.assetManagement(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } }