| | |
| | | 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.VideoOnlineResult; |
| | | 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.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 设备资产Service业务层处理 |
| | |
| | | * @date 2024-03-04 |
| | | */ |
| | | @Service |
| | | public class TMonitorServiceImpl extends ServiceImpl<TMonitorMapper, TMonitor> implements ITMonitorService |
| | | { |
| | | 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; |
| | | |
| | | /** |
| | | * 查询设备资产 |
| | |
| | | * @return 设备资产 |
| | | */ |
| | | @Override |
| | | public TMonitor selectTMonitorById(Long id) |
| | | { |
| | | public TMonitor selectTMonitorById(Long id) { |
| | | return tMonitorMapper.selectTMonitorById(id); |
| | | } |
| | | |
| | | /** |
| | | * 查询设备资产列表 |
| | | * 异常恢复监控、车辆、人脸、视频通用接口 |
| | | * |
| | | * @param tMonitor 设备资产 |
| | | * @return 设备资产 |
| | | */ |
| | | @Override |
| | | @DataScope(deptAlias = "d",userAlias = "u") |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public List<TMonitorVO> selectTMonitorList(TMonitorVO tMonitor) { |
| | | List<TMonitorVO> monitors = tMonitorMapper.selectTMonitorList(tMonitor); |
| | | // 异常设备 |
| | | // 异常恢复监控 |
| | | if (Objects.equals(tMonitor.getRecovery(), 1L)) { |
| | | String time = configService.selectConfigByKey("abnormal.equipment.continuous.attention.time"); |
| | | if (StringUtils.isBlank(time)) { |
| | | throw new RuntimeException("请配置异常设备连续关注时间"); |
| | | } |
| | | List<TMonitorVO> recoveryMonitors = tMonitorMapper.selectRecoveryMonitor(time); |
| | | monitors.addAll(recoveryMonitors); |
| | | 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(); |
| | | //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<MonitorQualifyResult> monitorQualifyResults = mongoTemplate.find(query, MonitorQualifyResult.class); |
| | | // 视频监控设备 |
| | | if (Objects.equals(tMonitor.getCameraFunType(), "1")) { |
| | | monitors.forEach(monitor -> { |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria.where("deviceId").is(monitor.getSerialNumber()) |
| | | // .and("mongoCreateTime").is(LocalDate.now()) |
| | | ); |
| | | VideoOnlineResult one = mongoTemplate.findOne(query, VideoOnlineResult.class); |
| | | if (one != null) { |
| | | monitor.setIfmDelay(one.getIfmDelay()); |
| | | monitor.setSipDelay(one.getSipDelay()); |
| | | monitor.setVideoDelay(one.getVideoDelay()); |
| | | monitor.setMongoCreateTime(one.getMongoCreateTime()); |
| | | //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")) { |
| | | monitors.forEach(monitor -> { |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria.where("externalIndexCode").is(monitor.getSerialNumber()) |
| | | // .and("mongoCreateTime").is(LocalDate.now()) |
| | | ); |
| | | VehicleDeviceInspectionResult one = mongoTemplate.findOne(query, VehicleDeviceInspectionResult.class); |
| | | VehicleDeviceSamplingResult two = mongoTemplate.findOne(query, VehicleDeviceSamplingResult.class); |
| | | if (one != null) { |
| | | monitor.setDataCount(one.getDataCount()); |
| | | monitor.setClockPercent(Objects.nonNull(one.getSnapClock()) ? one.getSnapClock().getClockPercent() : null); |
| | | monitor.setMongoCreateTime(one.getMongoCreateTime()); |
| | | //属性一致率、大图、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 (two != null) { |
| | | monitor.setBigUsefulPercent(Objects.nonNull(two.getBigUseful()) ? two.getBigUseful().getBigUsefulPercent() : null); |
| | | monitor.setMajorConPercent(Objects.nonNull(two.getVehDiff()) ? two.getVehDiff().getMajorConPercent() : null); |
| | | monitor.setImportantConPercent(Objects.nonNull(two.getVehDiff()) ? two.getVehDiff().getImportantConPercent() : null); |
| | | monitor.setMongoCreateTime(two.getMongoCreateTime()); |
| | | //抓拍量、时钟、上传 |
| | | 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")) { |
| | | monitors.forEach(monitor -> { |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria.where("externalIndexCode").is(monitor.getSerialNumber()) |
| | | // .and("mongoCreateTime").is(LocalDate.now()) |
| | | ); |
| | | FaceDeviceInspectionResult one = mongoTemplate.findOne(query, FaceDeviceInspectionResult.class); |
| | | FaceDeviceSamplingResult two = mongoTemplate.findOne(query, FaceDeviceSamplingResult.class); |
| | | if (one != null) { |
| | | monitor.setDataCount(one.getDataCount()); |
| | | monitor.setClockPercent(Objects.nonNull(one.getSnapClock()) ? one.getSnapClock().getClockPercent() : null); |
| | | monitor.setMongoCreateTime(one.getMongoCreateTime()); |
| | | //人脸合格、大图、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 (two != null) { |
| | | monitor.setBigUsefulPercent(Objects.nonNull(two.getBigUseful())? two.getBigUseful().getBigUsefulPercent() : null); |
| | | monitor.setFaceEligPercent(Objects.nonNull(two.getFaceEligibility()) ? two.getFaceEligibility().getFaceEligPercent() : null); |
| | | monitor.setMongoCreateTime(two.getMongoCreateTime()); |
| | | //抓拍量、时钟、上传、建模失败率 |
| | | 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()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int insertTMonitor(TMonitor tMonitor) |
| | | { |
| | | public int insertTMonitor(TMonitor tMonitor) { |
| | | return tMonitorMapper.insertTMonitor(tMonitor); |
| | | } |
| | | |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int updateTMonitor(TMonitor tMonitor) |
| | | { |
| | | public int updateTMonitor(TMonitor tMonitor) { |
| | | return tMonitorMapper.updateTMonitor(tMonitor); |
| | | } |
| | | |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deleteTMonitorByIds(Long[] ids) |
| | | { |
| | | public int deleteTMonitorByIds(Long[] ids) { |
| | | return tMonitorMapper.deleteTMonitorByIds(ids); |
| | | } |
| | | |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deleteTMonitorById(Long id) |
| | | { |
| | | public int deleteTMonitorById(Long id) { |
| | | return tMonitorMapper.deleteTMonitorById(id); |
| | | } |
| | | |
| | | @Override |
| | | @DataScope(deptAlias = "d",userAlias = "u") |
| | | public Map<String, String> getVideoCount(TMonitor tMonitor) { |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public Map<String, String> getVideoCount(TMonitorVO tMonitor) { |
| | | return tMonitorMapper.getVideoCount(tMonitor); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, String> recoveryException() { |
| | | String time = configService.selectConfigByKey("abnormal.equipment.continuous.attention.time"); |
| | | return tMonitorMapper.recoveryException(time); |
| | | @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 |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<MonitorTotalVO> monitorTotal(DashboardQuery dashboardQuery) { |
| | | return baseMapper.monitorTotal(dashboardQuery); |
| | | 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) { |
| | | //TODO:新增dept AreaCode字段 |
| | | return baseMapper.monitorRate(dashboardQuery); |
| | | } |
| | | |