| | |
| | | //通用 |
| | | // PLATFORM_OFFLINE("PLATFORMOFFLINE", "平台离线","COMMON"), |
| | | // SEVER_INTERRUPT("SEVERINTERRUPT", "服务中断","COMMON"), |
| | | DEVICE_OFFLINE("DEVICEOFFLINE", "设备离线","COMMON"), |
| | | POINT_INFO_ERROR("POINTINFOERRO", "点位信息错误","COMMON"), |
| | | DEVICE_OFFLINE("DEVICEOFFLINE", "设备离线","COMMON",false), |
| | | POINT_INFO_ERROR("POINTINFOERRO", "点位信息错误","COMMON",false), |
| | | //视频 |
| | | CLOCK_SKEW("CLOCKSKEW", "时钟偏差","VIDEO"), |
| | | SIGNAL_LOSS("SIGNALMISS", "信号缺失","VIDEO"), |
| | | SCREEN_COLOR_DEVIATION("SCREENCOLOR", "画面偏色","VIDEO"), |
| | | SNOW_STORM("SCREENSNOW", "雪花干扰","VIDEO"), |
| | | STRIPE_INTERFERENCE("SCREENSTRIP", "条纹干扰","VIDEO"), |
| | | SCREEN_OCCLUSION("SCREENSHADE", "画面遮挡","VIDEO"), |
| | | ABNORMAL_CLARITY("SCREENBLUR", "清晰度异常","VIDEO"), |
| | | CLOCK_SKEW("CLOCKSKEW", "时钟偏差","VIDEO",true), |
| | | SIGNAL_LOSS("SIGNALMISS", "信号缺失","VIDEO",true), |
| | | SCREEN_COLOR_DEVIATION("SCREENCOLOR", "画面偏色","VIDEO",true), |
| | | SNOW_STORM("SCREENSNOW", "雪花干扰","VIDEO",true), |
| | | STRIPE_INTERFERENCE("SCREENSTRIP", "条纹干扰","VIDEO",true), |
| | | SCREEN_OCCLUSION("SCREENSHADE", "画面遮挡","VIDEO",true), |
| | | ABNORMAL_CLARITY("SCREENBLUR", "清晰度异常","VIDEO",true), |
| | | //新增的图像异常,合并前面所有异常类型 |
| | | ABNORMAL_PIC("ABNORMALPIC", "图像异常","VIDEO"), |
| | | ABNORMAL_PIC("ABNORMALPIC", "图像异常","VIDEO",false), |
| | | // ABNORMAL_BRIGHTNESS("SCREENLIGHT", "亮度异常","VIDEO"), |
| | | OSD_ERROR("OSD", "osd异常","VIDEO"), |
| | | OSD_ERROR("OSD", "osd异常","VIDEO",false), |
| | | // VIDEO_LOSS("VIDEOMISS", "录像缺失","VIDEO"), |
| | | // VIDEO_NONE("NOVIDEO", "无录像","VIDEO"), |
| | | // POINT_INFO_MISS("POINTINFOMISS", "点位信息不全","COMMON"), |
| | |
| | | |
| | | // 阈值 |
| | | //车辆人脸通用 |
| | | CLOCK_RIGHT("CLOCK_RIGHT", "时钟准确率异常","CARORFACE"), |
| | | LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "长时间无数据","CARORFACE"), |
| | | DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "数据及时性异常","CARORFACE"), |
| | | NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "不唯一数据量异常","CARORFACE"), |
| | | UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "白天未识别数据量异常","CARORFACE"), |
| | | CLOCK_RIGHT("CLOCK_RIGHT", "时钟准确率异常","CARORFACE",false), |
| | | LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "长时间无数据","CARORFACE",false), |
| | | DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "数据及时性异常","CARORFACE",false), |
| | | NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "不唯一数据量异常","CARORFACE",false), |
| | | UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "白天未识别数据量异常","CARORFACE",false), |
| | | //车辆 |
| | | CAR_SIX("CAR_SIX", "车辆六项属性不完整","CAR"), |
| | | CAR_SIX("CAR_SIX", "车辆六项属性不完整","CAR",false), |
| | | //人脸 |
| | | MODELING_FAIL("MODELING_FAIL", "建模失败率异常","FACE"), |
| | | FACE_LOW("FACE_LOW", "人脸低分率异常","FACE"), |
| | | MODELING_FAIL("MODELING_FAIL", "建模失败率异常","FACE",false), |
| | | FACE_LOW("FACE_LOW", "人脸低分率异常","FACE",false), |
| | | ; |
| | | |
| | | private String value; |
| | |
| | | private String desc; |
| | | |
| | | private String category; |
| | | //false表示在使用,true表示只做翻译不做返回字典 |
| | | private Boolean deleted; |
| | | |
| | | ErrorType(String value, String desc,String category) { |
| | | ErrorType(String value, String desc,String category,Boolean deleted) { |
| | | this.value = value; |
| | | this.desc = desc; |
| | | this.category = category; |
| | | this.deleted = deleted; |
| | | |
| | | } |
| | | |
| | | // 根据分类获取错误类型列表 |
| | | public static List<ErrorType> getErrorTypesByCategory(String category) { |
| | | return Arrays.stream(values()) |
| | | .filter(errorType -> errorType.getCategory() == category) |
| | | .filter(errorType -> errorType.getCategory() == category && !errorType.getDeleted()) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | |
| | | * 故障类型 |
| | | */ |
| | | private String errorType; |
| | | private List<String> errorTypeList; |
| | | |
| | | /** |
| | | * 工单id |
| | |
| | | * 故障类型 |
| | | */ |
| | | private String errorType; |
| | | private List<String> errorTypeList; |
| | | |
| | | /** |
| | | * 状态 |
| | |
| | | * 故障类型 |
| | | */ |
| | | private String errorType; |
| | | private List<String> errorTypeList; |
| | | /** |
| | | * 故障类型 |
| | | */ |
| | |
| | | List<WorkOrderYwConditionRecord> willAddMsg = new ArrayList<>(48); |
| | | // 即将要添加的错误类型 |
| | | List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96); |
| | | if(!CollectionUtils.isEmpty(inDatabaseWorkOrderList)){ |
| | | if (!CollectionUtils.isEmpty(inDatabaseWorkOrderList)) { |
| | | WorkOrder workOrderInDB = inDatabaseWorkOrderList.get(0); |
| | | List<String> errorNameList = workOrderInDB.getErrorTypeList(); |
| | | List<String> errorTypes = entity.getErrorTypeList(); |
| | | if(errorNameList.containsAll(errorTypes)){ |
| | | if (errorNameList.containsAll(errorTypes)) { |
| | | return Result.error("已有同种故障类型工单"); |
| | | }else { |
| | | } else { |
| | | for (String errorType : errorTypes) { |
| | | if(!errorNameList.contains(errorType)){ |
| | | if (!errorNameList.contains(errorType)) { |
| | | // 错误类型不一样,就新增一个错误类型,并且重置工单状态为待处理 |
| | | WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType(); |
| | | workOrderErrorType.setWorkOrderNo(workOrderInDB.getWorkOrderNo()); |
| | |
| | | } |
| | | } |
| | | return Result.ok("添加成功"); |
| | | }else { |
| | | } else { |
| | | //数据库没有正在进行的工单 |
| | | //查redis今日工单数量 |
| | | int workOrderNum = 0; |
| | |
| | | workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes); |
| | | if (baseMapper.insert(entity) > 0) { |
| | | return Result.ok("添加成功"); |
| | | }else { |
| | | } else { |
| | | return Result.error("添加失败"); |
| | | } |
| | | } |
| | |
| | | } |
| | | if (query.getStart() != null) query.setStart(DateUtils.getDayStart(query.getStart())); |
| | | if (query.getEnd() != null) query.setEnd(DateUtils.getDayEnd(query.getEnd())); |
| | | if (query.getErrorType() != null) { |
| | | List<String> errorTypeList = new ArrayList<>(); |
| | | errorTypeList.add(query.getErrorType()); |
| | | if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) { |
| | | //List添加之前几种工单类型 |
| | | errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue()); |
| | | errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue()); |
| | | errorTypeList.add(ErrorType.SNOW_STORM.getValue()); |
| | | errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue()); |
| | | errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue()); |
| | | errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue()); |
| | | } |
| | | query.setErrorTypeList(errorTypeList); |
| | | } |
| | | baseMapper.page(page, query); |
| | | if (!CollectionUtils.isEmpty(page.getRecords())) { |
| | | page.getRecords().stream().forEach(item -> { |
| | |
| | | /** |
| | | * 工单导出的逻辑 |
| | | * 标签:同一个ip标签合在一起,针对离线工单(ip相同就不会生成工单),方便运维处理 |
| | | * |
| | | * @param query |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00"); |
| | | if (query.getEnd() != null) query.setEnd(query.getEnd() + " 23:59:59"); |
| | | if (query.getErrorType() != null) { |
| | | List<String> errorTypeList = new ArrayList<>(); |
| | | errorTypeList.add(query.getErrorType()); |
| | | if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) { |
| | | //List添加之前几种工单类型 |
| | | errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue()); |
| | | errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue()); |
| | | errorTypeList.add(ErrorType.SNOW_STORM.getValue()); |
| | | errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue()); |
| | | errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue()); |
| | | errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue()); |
| | | } |
| | | query.setErrorTypeList(errorTypeList); |
| | | } |
| | | List<WorkOrderVO> export = baseMapper.export(query); |
| | | if(CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>(); |
| | | if (CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>(); |
| | | List<String> ips = export.stream().map(WorkOrderVO::getIp).collect(Collectors.toList()); |
| | | //查出相同ip的设备、并查出标签 |
| | | List<TMonitorResult> monitorVOS = monitorMapper.getByIp(ips); |
| | |
| | | tMonitorResult.setDynamicColumnList(map.get(pointId)); |
| | | } |
| | | } |
| | | export.forEach(result->{ |
| | | export.forEach(result -> { |
| | | StringBuilder dynamicTag = new StringBuilder(""); |
| | | Boolean provinceTagVideo = false; |
| | | Boolean provinceTagCar = false; |
| | |
| | | List<String> dynamicTags = new ArrayList<>(); |
| | | for (TMonitorResult tagVO : monitorVOS) { |
| | | //省厅标签通过ip判断 (运维要求) |
| | | if(tagVO.getIp().equals(result.getIp())){ |
| | | if(tagVO.getProvinceTagVideo()) provinceTagVideo = true; |
| | | if(tagVO.getProvinceTagCar()) provinceTagCar = true; |
| | | if(tagVO.getProvinceTagFace()) provinceTagFace = true; |
| | | if(tagVO.getImportantTag()) importantTag = true; |
| | | if(tagVO.getImportantCommandImageTag()) importantCommandImageTag = true; |
| | | if(tagVO.getDeptTag()) deptTag = true; |
| | | if (tagVO.getIp().equals(result.getIp())) { |
| | | if (tagVO.getProvinceTagVideo()) provinceTagVideo = true; |
| | | if (tagVO.getProvinceTagCar()) provinceTagCar = true; |
| | | if (tagVO.getProvinceTagFace()) provinceTagFace = true; |
| | | if (tagVO.getImportantTag()) importantTag = true; |
| | | if (tagVO.getImportantCommandImageTag()) importantCommandImageTag = true; |
| | | if (tagVO.getDeptTag()) deptTag = true; |
| | | } |
| | | //动态列根据国标判断 |
| | | if (tagVO.getNo().equals(result.getSerialNumber())) { |
| | |
| | | if (!CollectionUtils.isEmpty(tagVO.getDynamicColumnList())) { |
| | | List<DynamicColumnVO> dynamicColumnList = tagVO.getDynamicColumnList(); |
| | | for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) { |
| | | if(!dynamicTags.contains(dynamicColumnVO.getColumnValue())) dynamicTags.add(dynamicColumnVO.getColumnValue()); |
| | | if (!dynamicTags.contains(dynamicColumnVO.getColumnValue())) |
| | | dynamicTags.add(dynamicColumnVO.getColumnValue()); |
| | | } |
| | | } |
| | | } |
| | |
| | | for (String tag : dynamicTags) { |
| | | dynamicTag.append(tag).append("、"); |
| | | } |
| | | StringBuilder tag = new StringBuilder("" + (provinceTagVideo ? "省厅视频、" : "")+(provinceTagCar ? "省厅车辆、" : "")+(provinceTagFace ? "省厅人脸、" : "") + (importantTag ? "重点点位、" : "") + (importantCommandImageTag ? "重点指挥图像、" : "") + (deptTag ? "部级、" : "")); |
| | | StringBuilder tag = new StringBuilder("" + (provinceTagVideo ? "省厅视频、" : "") + (provinceTagCar ? "省厅车辆、" : "") + (provinceTagFace ? "省厅人脸、" : "") + (importantTag ? "重点点位、" : "") + (importantCommandImageTag ? "重点指挥图像、" : "") + (deptTag ? "部级、" : "")); |
| | | if (tag.toString().endsWith("、")) { |
| | | tag = new StringBuilder(tag.substring(0, tag.length() - 1)); |
| | | } |
| | |
| | | import com.ycl.system.page.PageUtil; |
| | | import com.ycl.utils.DateUtils; |
| | | import com.ycl.utils.SecurityUtils; |
| | | import enumeration.ErrorType; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | if(query.getEnd()!=null) { |
| | | query.setEnd(DateUtils.getDayEnd(query.getEnd())); |
| | | } |
| | | if (query.getErrorType() != null) { |
| | | List<String> errorTypeList = new ArrayList<>(); |
| | | errorTypeList.add(query.getErrorType()); |
| | | if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) { |
| | | //List添加之前几种工单类型 |
| | | errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue()); |
| | | errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue()); |
| | | errorTypeList.add(ErrorType.SNOW_STORM.getValue()); |
| | | errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue()); |
| | | errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue()); |
| | | errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue()); |
| | | } |
| | | query.setErrorTypeList(errorTypeList); |
| | | } |
| | | List<YwUnit> ywUnits = baseMapper.selectList(null); |
| | | List<YwUnitVO> lists = ywUnits.stream().map(item -> { |
| | | YwUnitVO vo = new YwUnitVO(); |
| | |
| | | <if test="query.unitId != null"> |
| | | AND wo.unit_id = #{query.unitId} |
| | | </if> |
| | | <if test="query.errorType != null and query.errorType != ''"> |
| | | <if test="query.errorTypeList != null and query.errorTypeList.size>0"> |
| | | AND (EXISTS ( |
| | | SELECT 1 |
| | | FROM t_work_order_error_type twoet |
| | | WHERE twoet.work_order_no = wo.work_order_no |
| | | AND twoet.error_name = #{query.errorType} |
| | | AND twoet.error_name in |
| | | <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType"> |
| | | #{errorType} |
| | | </foreach> |
| | | )) |
| | | </if> |
| | | <if test="query.keyword != null and query.keyword != ''"> |
| | |
| | | <if test="query.start != null and query.end != null"> |
| | | AND wo.create_time BETWEEN #{query.start} AND #{query.end} |
| | | </if> |
| | | <if test="query.errorType != null and query.errorType !='' "> |
| | | <if test="query.errorTypeList != null and query.errorTypeList.size>0"> |
| | | AND (EXISTS ( |
| | | SELECT 1 |
| | | FROM t_work_order_error_type twoet |
| | | WHERE twoet.work_order_no = wo.work_order_no |
| | | AND twoet.error_name = #{query.errorType} |
| | | AND twoet.error_name in |
| | | <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType"> |
| | | #{errorType} |
| | | </foreach> |
| | | )) |
| | | </if> |
| | | GROUP BY |
| | |
| | | <if test="query.start != null and query.end != null"> |
| | | AND wo.create_time BETWEEN #{query.start} AND #{query.end} |
| | | </if> |
| | | <if test="query.errorType != null and query.errorType !='' "> |
| | | <if test="query.errorTypeList != null and query.errorTypeList.size>0"> |
| | | AND (EXISTS ( |
| | | SELECT 1 |
| | | FROM t_work_order_error_type twoet |
| | | WHERE twoet.work_order_no = wo.work_order_no |
| | | AND twoet.error_name = #{query.errorType} |
| | | AND twoet.error_name in |
| | | <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType"> |
| | | #{errorType} |
| | | </foreach> |
| | | )) |
| | | </if> |
| | | </select> |