From 5b76d629eef02be2f8c7c8ccde13d02aee25e63b Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 18 九月 2024 16:17:54 +0800 Subject: [PATCH] 大屏优化 --- ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java | 280 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 252 insertions(+), 28 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java index a5188d2..46a1751 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java @@ -1,22 +1,43 @@ 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.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涓氬姟灞傚鐞� @@ -25,12 +46,15 @@ * @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; /** * 鏌ヨ璁惧璧勪骇 @@ -39,31 +63,190 @@ * @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") - public List<TMonitorVO> selectTMonitorList(TMonitor tMonitor) - { - List<TMonitorVO> monitors = tMonitorMapper.selectTMonitorList(tMonitor); - if (Objects.equals(tMonitor.getRecovery(), 1)) { + @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("璇烽厤缃紓甯歌澶囪繛缁叧娉ㄦ椂闂�"); } - 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)) + ); + //涓�鏈轰竴妗d俊鎭� + 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")) { + //灞炴�т竴鑷寸巼銆佸ぇ鍥俱�乽rl + 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); + //灞炴�т竴鑷寸巼銆佸ぇ鍥俱�乽rl + 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")) { + //浜鸿劯鍚堟牸銆佸ぇ鍥俱�乽rl璁块棶寮傚父 + 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); + //浜鸿劯鍚堟牸銆佸ぇ鍥俱�乽rl璁块棶寮傚父 + 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; + } + + /** + * 琛ュ厖涓�鏈轰竴妗d俊鎭� + * + * @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()); + } + } + } } /** @@ -73,8 +256,7 @@ * @return 缁撴灉 */ @Override - public int insertTMonitor(TMonitor tMonitor) - { + public int insertTMonitor(TMonitor tMonitor) { return tMonitorMapper.insertTMonitor(tMonitor); } @@ -85,8 +267,7 @@ * @return 缁撴灉 */ @Override - public int updateTMonitor(TMonitor tMonitor) - { + public int updateTMonitor(TMonitor tMonitor) { return tMonitorMapper.updateTMonitor(tMonitor); } @@ -97,8 +278,7 @@ * @return 缁撴灉 */ @Override - public int deleteTMonitorByIds(Long[] ids) - { + public int deleteTMonitorByIds(Long[] ids) { return tMonitorMapper.deleteTMonitorByIds(ids); } @@ -109,21 +289,22 @@ * @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 @@ -143,4 +324,47 @@ } 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: '璁惧姝e父鏁�'}, + * {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", "姝e父鏁�"); + 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()); + } } -- Gitblit v1.8.0