ycl-common/src/main/java/constant/PointHeaderConstant.java
@@ -1,13 +1,23 @@ package constant; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * 点位导出表头常量 */ public class PointHeaderConstant { public final static String ID = "id"; public final static String Point_Name = "点位名称(可修改)"; public final static String Serial_Number = "国标码(不可修改)"; public final static String IP = "点位IP(可修改)"; public final static String Province_Tag = "是否省厅标签(可修改)"; public final static String Impotrant_Command_Image = "是否重点指挥图像(可修改)"; public final static String Dept_Tag = "是否部级标签(可修改)"; // 可以将这些已知的键放入一个集合中,方便检查 public static final Set<String> KNOWN_KEYS = new HashSet<>(Arrays.asList( ID,Point_Name, IP, Serial_Number, Province_Tag, Impotrant_Command_Image, Dept_Tag )); } ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumnValue.java
New file @@ -0,0 +1,41 @@ package com.ycl.platform.domain.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; /** * 动态列 * * @author xp * @since 2024-08-16 */ @Data @TableName("t_dynamic_column_value") public class DynamicColumnValue { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; @TableField("dynamic_column_id") /** 关联动态列ID */ private Integer dynamicColumnId; @TableField("column_value") /** elementui table prop */ private String columnValue; @TableField("ref_id") /** 关联的数据id */ private Integer refId; } ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
@@ -75,9 +75,9 @@ @TableField("dept_tag") private Boolean deptTag; @ApiModelProperty("是否在线:true 在线") @ApiModelProperty("1在线 0未知 -1离线") @TableField("online") private Boolean online; private Integer online; @TableField("serial_number") private String serialNumber; ycl-pojo/src/main/java/com/ycl/platform/domain/excel/PointExport.java
@@ -58,9 +58,11 @@ @ColumnWidth(20) @ExcelProperty("是否部级标签(可修改)") private String deptTag; private String deptTagString; @ExcelIgnore private Boolean deptTag; @ExcelIgnore private Boolean importantTag; @ExcelProperty("是否重点点位") ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java
@@ -14,19 +14,21 @@ */ @Data public class DynamicColumnVO extends AbsVo { /** 关联一机一档id */ /** 表名 */ private String tableName; /** elementui table prop */ private String propName; /** elementui table label */ /** elementui 字段名 */ private String labelValue; /** 值 */ /** 字段值 */ private String columnValue; /** 关联数据的id */ private Integer refId; /** value表的id */ private Integer valueId; public static DynamicColumnVO getVoByEntity(@NonNull DynamicColumn entity, DynamicColumnVO vo) { if(vo == null) { vo = new DynamicColumnVO(); ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java
@@ -15,7 +15,7 @@ private String ip; /** 是否在线 */ private Boolean online; private Integer online; private Date updateTime; } ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java
@@ -16,6 +16,8 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.concurrent.ExecutionException; import org.springframework.validation.annotation.Validated; import jakarta.validation.constraints.NotEmpty; import io.swagger.annotations.Api; @@ -124,7 +126,7 @@ Integer unitId, String startTime, Boolean needUpdateUnit, String endTime) throws IOException, ParseException { String endTime) throws IOException, ParseException, ExecutionException, InterruptedException { Date start = null; Date end = null; if (-1 == unitId) { ycl-server/src/main/java/com/ycl/platform/mapper/DynamicColumnMapper.java
@@ -3,6 +3,7 @@ import com.ycl.platform.domain.entity.DynamicColumn; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.platform.domain.entity.DynamicColumnValue; import com.ycl.platform.domain.query.DynamicColumnQuery; import com.ycl.platform.domain.vo.DynamicColumnVO; import com.ycl.platform.domain.form.DynamicColumnForm; @@ -39,4 +40,8 @@ */ IPage getPage(IPage page, @Param("query") DynamicColumnQuery query); void saveBatch( @Param("insertList") List<DynamicColumnValue> insertList); void updateBatch( @Param("updateList") List<DynamicColumnValue> updateList); } ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.platform.domain.entity.ReportAuditingRecord; import com.ycl.platform.domain.entity.YwPoint; import com.ycl.platform.domain.excel.PointExport; import com.ycl.platform.domain.form.BatchEditPointForm; import com.ycl.platform.domain.form.YwPointForm; import com.ycl.platform.domain.query.YwPointQuery; @@ -16,6 +17,7 @@ import java.io.IOException; import java.util.Date; import java.util.List; import java.util.concurrent.ExecutionException; /** * 运维点位 服务类 @@ -125,7 +127,7 @@ * @param unitId 运维单位id * @return */ Result importData(MultipartFile file, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws IOException; Result importData(MultipartFile file, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws IOException, ExecutionException, InterruptedException; /** * 获取报备是否审核通过(最新一条) @@ -149,4 +151,8 @@ * @return */ <T extends BaseResult> void setNew(List<T> dataList); void updatePoint(List<PointExport> dataList, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws ExecutionException, InterruptedException; void updateDynamic(List<PointExport> dataList); } ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java
@@ -106,11 +106,12 @@ public void videoOnlineCheck(List<VideoOnlineResult> dataList) { List<WorkOrder> workOrderList = dataList.stream().map(item -> { WorkOrder workOrder = new WorkOrder(); if (-1 == item.getStatus()) { if (ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus()) ) { this.genWorkOrder(workOrder, ErrorType.DEVICE_OFFLINE, item.getDeviceId()); } else if (0 == item.getStatus()) { this.genWorkOrder(workOrder, ErrorType.UNKNOWN, item.getDeviceId()); } // else if (0 == item.getStatus()) { // this.genWorkOrder(workOrder, ErrorType.UNKNOWN, item.getDeviceId()); // } return workOrder; }).collect(Collectors.toList()); workOrderService.innerAddWorkOrder(workOrderList); ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
@@ -9,9 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.dataListener.CurrencyDataListener; import com.ycl.platform.base.AbsVo; import com.ycl.platform.domain.entity.ReportAuditingRecord; import com.ycl.platform.domain.entity.YwPeople; import com.ycl.platform.domain.entity.YwPoint; import com.ycl.platform.domain.entity.*; import com.ycl.platform.domain.excel.PointExport; import com.ycl.platform.domain.form.BatchEditPointForm; import com.ycl.platform.domain.form.YwPointForm; @@ -25,6 +23,7 @@ import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.mapper.YwPeopleMapper; import com.ycl.platform.mapper.YwPointMapper; import com.ycl.platform.service.DynamicColumnService; import com.ycl.platform.service.YwPointService; import com.ycl.platform.service.YwUnitService; import com.ycl.system.Result; @@ -34,11 +33,13 @@ import com.ycl.utils.DateUtils; import com.ycl.utils.SecurityUtils; import com.ycl.utils.poi.EasyExcelImportUtils; import com.ycl.utils.uuid.IdUtils; import constant.PointHeaderConstant; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -67,6 +68,7 @@ private final SysDeptMapper sysDeptMapper; private final TMonitorMapper monitorMapper; private final DynamicColumnMapper dynamicColumnMapper; private final ApplicationContext context; /** * 添加 @@ -250,10 +252,11 @@ List<DynamicColumnVO> dynamics = dynamicColumnMapper.getData(); Map<Integer, List<DynamicColumnVO>> dynamicMap = new HashMap<>(); if (!CollectionUtils.isEmpty(dynamics)) { dynamicMap = dynamics.stream().filter(vo ->vo.getId()!=null).collect(Collectors.groupingBy(AbsVo::getId)); dynamicMap = dynamics.stream().filter(vo -> vo.getRefId() != null).collect(Collectors.groupingBy(DynamicColumnVO::getRefId)); } //定义表头列表 LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(PointHeaderConstant.ID); headers.add(PointHeaderConstant.Point_Name); headers.add(PointHeaderConstant.Serial_Number); headers.add(PointHeaderConstant.IP); @@ -271,12 +274,13 @@ for (PointExport export : exportData) { List<Object> list = new ArrayList<>(); //需要保证顺序一致 list.add(export.getId()); list.add(export.getPointName()); list.add(export.getSerialNumber()); list.add(export.getPointIP()); list.add(export.getProvinceTagString()); list.add(export.getImportantCommandImageTagString()); list.add(export.getDeptTag()); list.add(export.getDeptTagString()); for (String header : headersList) { //创建一个变量记录找没找到这个header boolean flag = false; @@ -308,27 +312,50 @@ @Override @Transactional(rollbackFor = Exception.class) public Result importData(MultipartFile file, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws IOException { // List<Map<String,String>> list = EasyExcelImportUtils.makeData(file); Consumer<List<PointExport>> consumer = (dataList) -> { try { this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit); } catch (ExecutionException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); needUpdateUnit) throws IOException, ExecutionException, InterruptedException { List<Map<String, String>> list = EasyExcelImportUtils.makeData(file); List<PointExport> dataList = new ArrayList<>(); // Consumer<List<PointExport>> consumer = (dataList) -> { // try { // this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit); // } catch (ExecutionException e) { // e.printStackTrace(); // } catch (InterruptedException e) { // e.printStackTrace(); // } // }; // EasyExcel.read(file.getInputStream(), PointExport.class, new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll(); for (Map<String, String> map : list) { PointExport pointExport = new PointExport(); pointExport.setId(Integer.valueOf(map.get(PointHeaderConstant.ID))); pointExport.setPointName(map.get(PointHeaderConstant.Point_Name)); pointExport.setPointIP(map.get(PointHeaderConstant.IP)); pointExport.setSerialNumber(map.get(PointHeaderConstant.Serial_Number)); pointExport.setProvinceTag("是".equals(map.get(PointHeaderConstant.Province_Tag))); pointExport.setImportantCommandImageTag("是".equals(map.get(PointHeaderConstant.Impotrant_Command_Image))); pointExport.setDeptTag("是".equals(map.get(PointHeaderConstant.Dept_Tag))); List<DynamicColumnVO> dynamics = new ArrayList<>(); // 处理动态列 for (Map.Entry<String, String> entry : map.entrySet()) { String key = entry.getKey(); if (!PointHeaderConstant.KNOWN_KEYS.contains(key)) { DynamicColumnVO dynamicColumnVO = new DynamicColumnVO(); dynamicColumnVO.setRefId(pointExport.getId()); dynamicColumnVO.setLabelValue(entry.getKey()); dynamicColumnVO.setColumnValue(entry.getValue()); dynamicColumnVO.setPropName(IdUtils.randomNO(new Date())); dynamicColumnVO.setTableName("t_yw_point"); dynamics.add(dynamicColumnVO); } } }; EasyExcel.read(file.getInputStream(), PointExport.class, new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll(); // for (Map<String, String> map : list) { // PointExport pointExport = new PointExport(); // pointExport.setPointName(map.get(PointHeaderConstant.Point_Name)); // pointExport.setPointIP(map.get(PointHeaderConstant.IP)); // pointExport.setSerialNumber(map.get(PointHeaderConstant.Serial_Number)); // } // this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit); // System.out.println(list); pointExport.setDynamicData(dynamics); dataList.add(pointExport); } YwPointServiceImpl self = context.getBean(YwPointServiceImpl.class); self.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit); self.updateDynamic(dataList); return Result.ok(); } @@ -343,7 +370,6 @@ * @param dataList * @param unitId */ @Transactional(rollbackFor = Exception.class) public void updatePoint(List<PointExport> dataList, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws ExecutionException, InterruptedException { if (CollectionUtils.isEmpty(dataList)) { @@ -351,9 +377,9 @@ } List<YwPoint> pointList = dataList.stream().map(item -> { YwPoint point = new YwPoint(); point.setImportantCommandImageTag("是".equals(item.getImportantCommandImageTagString())); point.setProvinceTag("是".equals(item.getProvinceTagString())); point.setDeptTag("是".equals(item.getDeptTag())); point.setImportantCommandImageTag(item.getImportantCommandImageTag()); point.setProvinceTag(item.getProvinceTag()); point.setDeptTag(item.getDeptTag()); if (needUpdateUnit) { if (Objects.nonNull(unitId)) { point.setUnitId(Long.valueOf(unitId)); @@ -373,6 +399,67 @@ this.waitAllFinishAndGetResult(pointList); } @Override public void updateDynamic(List<PointExport> dataList) { List<DynamicColumnValue> insertList = new ArrayList<>(); List<DynamicColumnValue> updateList = new ArrayList<>(); List<Integer> deleteList = new ArrayList<>(); //查出所有种类动态列作为字典 Map<String, Integer> dictionary = new LambdaQueryChainWrapper<>(dynamicColumnMapper) .list().stream().collect(Collectors.toMap(DynamicColumn::getLabelValue, DynamicColumn::getId)); //查出点位表的所有动态列 List<DynamicColumnVO> dynamicVOList = dynamicColumnMapper.getData(); Map<Integer, List<DynamicColumnVO>> dynamicVOMap = new HashMap<>(); if (!CollectionUtils.isEmpty(dynamicVOList)) { dynamicVOMap = dynamicVOList.stream().filter(vo -> vo.getRefId() != null).collect(Collectors.groupingBy(DynamicColumnVO::getRefId)); } //根据label_value和ref_id判断是否是同一数据 for (PointExport pointExport : dataList) { //得到excel中动态列名作为key的map Map<String, DynamicColumnVO> exportMap = pointExport.getDynamicData().stream().collect(Collectors.toMap(DynamicColumnVO::getLabelValue, Function.identity())); //查出数据库中这个点位的动态列 List<DynamicColumnVO> dynamicColumnVOS = dynamicVOMap.get(pointExport.getId()); if (!CollectionUtils.isEmpty(dynamicColumnVOS)) { //遍历数据库中这个点位的动态列,并根据动态列名找出excel中的值 for (DynamicColumnVO vo : dynamicColumnVOS) { DynamicColumnVO dynamicColumnVO = exportMap.get(vo.getLabelValue()); //存在说明excel有这个数据,将数据库这个数据的值改为excel的值 if (dynamicColumnVO.getColumnValue() != null) { DynamicColumnValue entity = new DynamicColumnValue(); entity.setColumnValue(dynamicColumnVO.getColumnValue()); entity.setDynamicColumnId(vo.getId()); entity.setRefId(vo.getRefId()); entity.setId(vo.getValueId()); updateList.add(entity); } else { //不存在则取消标签,删除 deleteList.add(vo.getValueId()); } } } else { //数据库里查不到excel里面的这个点位动态列,全为新增 List<DynamicColumnVO> dynamicData = pointExport.getDynamicData(); for (DynamicColumnVO excelData : dynamicData) { if(excelData.getColumnValue()!=null) { Integer dynamicId = dictionary.get(excelData.getLabelValue()); DynamicColumnValue entity = new DynamicColumnValue(); entity.setColumnValue(excelData.getColumnValue()); entity.setDynamicColumnId(dynamicId); entity.setRefId(pointExport.getId()); insertList.add(entity); } } } } //插入 if(!CollectionUtils.isEmpty(insertList)) dynamicColumnMapper.saveBatch(insertList); //更新 if(!CollectionUtils.isEmpty(updateList)) dynamicColumnMapper.updateBatch(updateList); //删除 if(!CollectionUtils.isEmpty(deleteList)) dynamicColumnMapper.deleteBatchIds(deleteList); } public void waitAllFinishAndGetResult(List<YwPoint> dataList) { Date startTime = new Date(); this.baseMapper.updatePoint(dataList); ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -123,6 +123,7 @@ //存放在mongo中 carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR)); mongoTemplate.insertAll(carList); //TODO:更新point表在线状态 } /** 人脸数据 */ @@ -148,7 +149,9 @@ //存放在mongo中 faceList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE)); mongoTemplate.insertAll(faceList); //TODO:更新point表在线状态 } log.info("结束抓拍数据量检测结果数据同步"); } ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -21,6 +21,7 @@ import com.ycl.system.service.ISysDictDataService; import com.ycl.utils.DateUtils; import com.ycl.utils.StringUtils; import constant.ApiConstants; import constant.CheckConstants; import constant.RedisConstant; import enumeration.general.AreaDeptEnum; @@ -62,18 +63,18 @@ private RedisTemplate redisTemplate; //同步点位在线率到mongo(弃用) public void siteOnline() { log.info("开始同步点位在线率到mongo"); List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(null); if (!CollectionUtils.isEmpty(tMonitorResults)) { //如果存在之前的数据先删除 Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); DeleteResult result = mongoTemplate.remove(query, TMonitorResult.class); //存放在mongo中 mongoTemplate.insertAll(tMonitorResults); log.info("结束同步点位在线率到mongo"); } } // public void siteOnline() { // log.info("开始同步点位在线率到mongo"); // List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(null); // if (!CollectionUtils.isEmpty(tMonitorResults)) { // //如果存在之前的数据先删除 // Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); // DeleteResult result = mongoTemplate.remove(query, TMonitorResult.class); // //存放在mongo中 // mongoTemplate.insertAll(tMonitorResults); // log.info("结束同步点位在线率到mongo"); // } // } //同步mongodb一机一档到数据库 @Transactional(rollbackFor = Exception.class) @@ -161,6 +162,7 @@ ywPoint.setImportantCommandImageTag(Boolean.FALSE); ywPoint.setCreateTime(new Date()); ywPoint.setUpdateTime(new Date()); ywPoint.setOnline(ApiConstants.UY_OnlineSite_Unknown); } //状态设置为考核设备 ywPoint.setExamineStatus(Boolean.TRUE); ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -172,9 +172,9 @@ } /** * 点位在线检测 * 点位在线PING检测 */ //TODO:视频离线次数、监测次数(修改逻辑只针对工单,检测在线的) //TODO:点位在线(修改逻辑只针对工单) public void pointOnline() throws ExecutionException, InterruptedException { log.info("开始检测点位在线"); Integer times = 2; @@ -186,25 +186,16 @@ } else { log.error("请配置离线次数,此次设置为默认值2"); } // 先查出设备IP集合 // 先查出在线的设备IP集合,剔除掉在线情况是未知的,并且只检测正在考核的设备避免多余工单 List<TMonitorResult> monitorList = monitorMapper.getDistinctIP(); // List<Future<TMonitorResult>> futureList = new ArrayList<>(48); List<TMonitorResult> dataList = new ArrayList<>(48); // for (TMonitorResult monitor : monitorList) { // OnlineCheckThread thread = new OnlineCheckThread(monitor, checkPointUtil, times); // Future<TMonitorResult> future = executorService.submit(thread); // futureList.add(future); // } // for (Future<TMonitorResult> future : futureList) { // dataList.add(future.get()); // get方法会阻塞,知道拿到结果才继续执行for // } Integer time = times; List<CompletableFuture<TMonitorResult>> futureList = monitorList.stream() .map(monitor -> CompletableFuture.supplyAsync(() -> { OnlineCheckThread thread = new OnlineCheckThread(monitor, checkPointUtil, time); return thread.call(); // 假设 OnlineCheckThread 实现了 Callable 接口 }, executorService) .orTimeout(40, TimeUnit.SECONDS) .orTimeout(60, TimeUnit.SECONDS) .exceptionally(ex -> { if (ex instanceof TimeoutException) { log.error("任务执行超时:"+monitor.getIp()); @@ -239,7 +230,7 @@ futureList.toArray(new CompletableFuture[0]) ); try { allOf.get(35, TimeUnit.SECONDS); // 给予额外的5秒来收集结果 allOf.get(60, TimeUnit.SECONDS); // 给予额外的5秒来收集结果 } catch (TimeoutException e) { log.warn("部分任务未在指定时间内完成"); } catch (Exception e2){ @@ -248,19 +239,19 @@ dataList = futureList.stream() .map(CompletableFuture::join) .filter(result -> result != null) .filter(Objects::nonNull) .collect(Collectors.toList()); // 更新point表的在线标识 //筛选出ping离线的设备,更改数据库为离线 Date now = new Date(); List<UpdateOnlineVO> willUpdateList = dataList.stream().map(item -> { List<UpdateOnlineVO> willUpdateList = dataList.stream().filter(result->!result.getOnline()).map(item -> { UpdateOnlineVO vo = new UpdateOnlineVO(); vo.setOnline(item.getOnline()); vo.setOnline(item.getOnline()?ApiConstants.UY_OnlineSite_Online:ApiConstants.UY_OnlineSite_Offline); vo.setIp(item.getIp()); vo.setUpdateTime(now); return vo; }).collect(Collectors.toList()); monitorMapper.updateOnline(willUpdateList); // 工单 //工单 List<WorkOrder> workOrderList = dataList.stream() .filter(item -> Objects.nonNull(item.getWorkOrder())) .map(TMonitorResult::getWorkOrder) @@ -305,8 +296,19 @@ pointService.setDeviceTagByGB(records); //存放在mongo中 mongoTemplate.insertAll(records); // 工单生成 uyErrorTypeCheckService.videoOnlineCheck(records); //更新point表在线状态 Date now = new Date(); List<UpdateOnlineVO> willUpdateList = records.stream().map(item -> { UpdateOnlineVO vo = new UpdateOnlineVO(); vo.setOnline(item.getStatus()); vo.setIp(item.getIpAddr()); vo.setUpdateTime(now); return vo; }).collect(Collectors.toList()); monitorMapper.updateOnline(willUpdateList); //离线生成工单 List<VideoOnlineResult> workOrders = records.stream().filter(item -> ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus())).collect(Collectors.toList()); uyErrorTypeCheckService.videoOnlineCheck(workOrders); } else { log.error("点位在线结果数据为空{}", data); } ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
@@ -73,7 +73,6 @@ workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); result.setWorkOrder(workOrder); } log.info("监测对象:"+result); return result; } ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
@@ -49,7 +49,6 @@ public TMonitorResult check(TMonitorResult monitor) { // 先检测能否访问该ip的网页 ResponseEntity<String> res = null; log.info("监测IP:" + monitor.getIp()); String prefix = "http://"; if ("127.0.0.1".equals(monitor.getIp())) { monitor.setOnline(Boolean.FALSE); @@ -74,7 +73,7 @@ } if (!monitor.getOnline()) { try { reachable = InetAddress.getByName(monitor.getIp()).isReachable(3000); reachable = InetAddress.getByName(monitor.getIp()).isReachable(5000); } catch (IOException e) { e.printStackTrace(); } ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
@@ -28,10 +28,12 @@ </select> <select id="getData" resultType="com.ycl.platform.domain.vo.DynamicColumnVO"> SELECT TDCV.ref_id as id, TDC.id, TDCV.ref_id, TDC.prop_name, TDC.label_value, TDCV.column_value TDCV.column_value, TDCV.id as value_id FROM t_dynamic_column TDC LEFT JOIN t_dynamic_column_value TDCV ON TDC.id =TDCV.dynamic_column_id @@ -46,6 +48,7 @@ </where> </select> <select id="getPage" resultMap="BaseResultMap"> SELECT TDC.ref_id, TDC.prop_name, @@ -56,4 +59,17 @@ WHERE TDC.deleted = 0 </select> <insert id="saveBatch"> insert into t_dynamic_column_value (dynamic_column_id,column_value,ref_id) values <foreach collection="insertList" item="item" separator=","> (#{item.dynamicColumnId},#{item.columnValue},#{item.refId}) </foreach> </insert> <update id="updateBatch"> <foreach collection="updateList" separator=";" item="item"> UPDATE t_dynamic_column_value SET column_value = #{item.columnValue} WHERE id = #{item.id} </foreach> </update> </mapper> ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -342,8 +342,9 @@ <select id="getVideoCount" resultType="java.util.Map"> SELECT count(*) AS totalPosts, IFNULL(SUM(IF(p.online = 1, 1, 0)), 0) AS totalMembers, IFNULL(SUM(IF(p.online = 0, 1, 0)), 0) AS postsPercentage, IFNULL(ROUND(SUM(IF(p.online, 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage FROM t_monitor m IFNULL(SUM(IF(p.online = -1, 1, 0)), 0) AS postsPercentage, IFNULL(SUM(IF(p.online = 0, 1, 0)), 0) AS unknownNumbers, IFNULL(ROUND(SUM(IF(p.online = 1 , 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage FROM t_monitor m left join t_yw_point p on m.serial_number = p.serial_number left join sys_dept d on p.dept_id = d.dept_id and d.del_flag = 0 <where> @@ -439,30 +440,33 @@ 'video' as type, COUNT(p1.id) AS totalNum, COUNT(p2.id) AS errorNum, COUNT(p1.id) - COUNT(p2.id) AS normalNum COUNT(p3.id) AS normalNum FROM t_monitor LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1<if test="dataScope == 1"> AND p1.province_tag = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND p2.online = 0 AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND p2.online = -1 AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number AND p3.examine_status = 1 AND p3.online = 1 AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if> WHERE INSTR(camera_fun_type, 1) UNION ALL SELECT 'car' as type, COUNT(p1.id) AS totalNum, COUNT(p2.id) AS errorNum, COUNT(p1.id) - COUNT(p2.id) AS normalNum COUNT(p3.id) AS normalNum FROM t_monitor LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1 <if test="dataScope == 1"> AND p1.province_tag = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND p2.online = 0 AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = '1' </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND p2.online = -1 AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number AND p3.examine_status = 1 AND p3.online = 1 AND p1.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if> WHERE INSTR(camera_fun_type, 2) UNION ALL SELECT 'face' as type, COUNT(p1.id) AS totalNum, COUNT(p2.id) AS errorNum, COUNT(p1.id) - COUNT(p2.id) AS normalNum COUNT(p3.id) AS normalNum FROM t_monitor LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1 <if test="dataScope == 1"> AND p1.province_tag = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND p2.online = 0 AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND p2.online = -1 AND p1.id = p2.id<if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if> LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number AND p3.examine_status = 1 AND p3.online = 1 AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if> WHERE INSTR(camera_fun_type, 3) </select> <select id="monitorRate" resultType="com.ycl.platform.domain.vo.screen.MonitorRateVO"> @@ -473,15 +477,17 @@ ( SELECT d.area, IFNULL(ROUND((COUNT(m.id) - COUNT(m2.id)) / COUNT(m.id) * 100, 2), 0) AS faceRate, COUNT(m.id) - COUNT(m2.id) AS faceNormalNum, IFNULL(ROUND(COUNT(m3.id)/ COUNT(m.id) * 100, 2), 0) AS faceRate, COUNT(m3.id) AS faceNormalNum, COUNT(m2.id) AS faceErrorNum FROM sys_dept d LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if> LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.online = 0 AND p2.examine_status = 1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if> LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.online = -1 AND p2.examine_status = 1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if> LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.online = 1 AND p3.examine_status = 1 AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if> LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 3) LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 3) LEFT JOIN t_monitor m3 ON m3.serial_number = p3.serial_number AND INSTR(m3.camera_fun_type, 3) WHERE d.del_flag = 0 AND d.area IS NOT NULL GROUP BY d.area, d.dept_id ORDER BY d.area_code @@ -491,15 +497,17 @@ ( SELECT d.area, IFNULL(ROUND((COUNT(m.id) - COUNT(m2.id)) / COUNT(m.id) * 100, 2), 0) AS carRate, COUNT(m.id) - COUNT(m2.id) AS carNormalNum, IFNULL(ROUND(COUNT(m3.id) / COUNT(m.id) * 100, 2), 0) AS carRate, COUNT(m3.id) AS carNormalNum, COUNT(m2.id) AS carErrorNum FROM sys_dept d LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if> LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND p2.online = 0 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if> LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND p2.online = -1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if> LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.examine_status = 1 AND p3.online = 1 AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if> LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 2) LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 2) LEFT JOIN t_monitor m3 ON m3.serial_number = p3.serial_number AND INSTR(m3.camera_fun_type, 2) WHERE d.del_flag = 0 AND d.area IS NOT NULL GROUP BY d.area, d.dept_id, d.area_code ORDER BY d.area_code @@ -509,15 +517,17 @@ ( SELECT d.area, IFNULL(ROUND((COUNT(m.id) - COUNT(m2.id)) / COUNT(m.id) * 100, 2), 0) AS videoRate, COUNT(m.id) - COUNT(m2.id) AS videoNormalNum, IFNULL(ROUND(COUNT(m3.id) / COUNT(m.id) * 100, 2), 0) AS videoRate, COUNT(m3.id) AS videoNormalNum, COUNT(m2.id) AS videoErrorNum FROM sys_dept d LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if> LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND p2.online = 0 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if> LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND p2.online = -1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if> LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.examine_status = 1 AND p3.online = 1 AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if> LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 1) LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 1) LEFT JOIN t_monitor m3 ON m3.serial_number = p3.serial_number AND INSTR(m3.camera_fun_type, 1) WHERE d.del_flag = 0 AND d.area IS NOT NULL GROUP BY d.area, d.area_code, d.dept_id ORDER BY d.area_code @@ -645,6 +655,7 @@ from t_monitor m left join t_yw_point p on m.serial_number = p.serial_number left join sys_dept d on p.dept_id = d.dept_id where p.online != 0 and p.examine_status = 1 </select> <update id="updateOnline"> @@ -655,7 +666,7 @@ online = #{online.online}, update_time = #{online.updateTime} WHERE EXISTS (SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number) EXISTS (SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number ) </foreach> </update> </mapper> ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml
@@ -95,9 +95,9 @@ LEFT JOIN t_dynamic_column dc ON dc.id = dcv.dynamic_column_id AND dc.table_name = #{tableName} WHERE dcv.ref_id = #{id} <if test="pointName != null and pointName != ''"> and dcv.column_value like concat('%', #{pointName}, '%') </if> <!-- <if test="pointName != null and pointName != ''">--> <!-- and dcv.column_value like concat('%', #{pointName}, '%')--> <!-- </if>--> </select> <select id="dataCenterPage" resultType="com.ycl.platform.domain.vo.PointDetailVO"> @@ -233,7 +233,7 @@ CASE WHEN yp.province_tag = 0 THEN '否' ELSE '是' END AS provinceTagString, CASE WHEN yp.important_tag = 0 THEN '否' ELSE '是' END AS importantTagString, CASE WHEN yp.important_command_image_tag = 0 THEN '否' ELSE '是' END AS importantCommandImageTagString, CASE WHEN yp.dept_tag = 0 THEN '否' ELSE '是' END AS deptTag CASE WHEN yp.dept_tag = 0 THEN '否' ELSE '是' END AS deptTagString FROM t_yw_point yp INNER JOIN t_monitor m ON yp.serial_number = m.serial_number