| | |
| | | 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.util.List; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 设备资产Service业务层处理 |
| | |
| | | * @date 2024-03-04 |
| | | */ |
| | | @Service |
| | | public class TMonitorServiceImpl 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 |
| | | public List<TMonitor> selectTMonitorList(TMonitor tMonitor) |
| | | { |
| | | return tMonitorMapper.selectTMonitorList(tMonitor); |
| | | @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(); |
| | | //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")) { |
| | | //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()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | * @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(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) { |
| | | //TODO:新增dept AreaCode字段 |
| | | 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()); |
| | | } |
| | | } |