bug+检测按钮+新的故障下拉框+工单删除+记录检测离线具体时间点等等
| | |
| | | import com.baomidou.mybatisplus.annotation.EnumValue; |
| | | import lombok.Getter; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author:xp |
| | | * @date:2024/8/19 11:39 |
| | | */ |
| | | @Getter |
| | | public enum ErrorType { |
| | | |
| | | PLATFORM_OFFLINE("PLATFORMOFFLINE", "平台离线"), |
| | | SEVER_INTERRUPT("SEVERINTERRUPT", "服务中断"), |
| | | DEVICE_OFFLINE("DEVICEOFFLINE", "设备离线"), |
| | | VIDEO_LOSS("VIDEOMISS", "录像缺失"), |
| | | VIDEO_NONE("NOVIDEO", "无录像"), |
| | | POINT_INFO_ERROR("POINTINFOERRO", "点位信息错误"), |
| | | POINT_INFO_MISS("POINTINFOMISS", "点位信息不全"), |
| | | SIGNAL_LOSS("SIGNALMISS", "信号缺失"), |
| | | SCREEN_COLOR_DEVIATION("SCREENCOLOR", "画面偏色"), |
| | | SNOW_STORM("SCREENSNOW", "雪花干扰"), |
| | | STRIPE_INTERFERENCE("SCREENSTRIP", "条纹干扰"), |
| | | SCREEN_OCCLUSION("SCREENSHADE", "画面遮挡"), |
| | | ABNORMAL_CLARITY("SCREENBLUR", "清晰度异常"), |
| | | ABNORMAL_BRIGHTNESS("SCREENLIGHT", "亮度异常"), |
| | | UNKNOWN("UNKNOWN", "未知"), |
| | | CLOCK_SKEW("CLOCKSKEW", "时钟偏差"), |
| | | OSD_ERROR("OSD", "osd异常"), |
| | | PIC_URLABNORMAL("PICURLABNORMAL","图片访问异常"), |
| | | MONITOR_UNQUALIFY("MONITORUNQUALIFY", "一机一档不合格"), |
| | | PIC_UNUSEFUL("PICUNUSEFUL", "大图不可用"), |
| | | VIDEO_ORPIC_UNNORMAL("VIDEOORPICUNNORMAL", "视频拉流、图片获取异常"), |
| | | //通用 |
| | | // PLATFORM_OFFLINE("PLATFORMOFFLINE", "平台离线","COMMON"), |
| | | // SEVER_INTERRUPT("SEVERINTERRUPT", "服务中断","COMMON"), |
| | | DEVICE_OFFLINE("DEVICEOFFLINE", "设备离线","COMMON"), |
| | | POINT_INFO_ERROR("POINTINFOERRO", "点位信息错误","COMMON"), |
| | | //视频 |
| | | 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"), |
| | | ABNORMAL_BRIGHTNESS("SCREENLIGHT", "亮度异常","VIDEO"), |
| | | OSD_ERROR("OSD", "osd异常","VIDEO"), |
| | | // VIDEO_LOSS("VIDEOMISS", "录像缺失","VIDEO"), |
| | | // VIDEO_NONE("NOVIDEO", "无录像","VIDEO"), |
| | | // POINT_INFO_MISS("POINTINFOMISS", "点位信息不全","COMMON"), |
| | | // UNKNOWN("UNKNOWN", "未知"), |
| | | // PIC_URLABNORMAL("PICURLABNORMAL","图片访问异常",""), |
| | | // MONITOR_UNQUALIFY("MONITORUNQUALIFY", "一机一档不合格"), |
| | | // PIC_UNUSEFUL("PICUNUSEFUL", "大图不可用"), |
| | | // VIDEO_ORPIC_UNNORMAL("VIDEOORPICUNNORMAL", "视频拉流、图片获取异常"), |
| | | |
| | | // 阈值 |
| | | CLOCK_RIGHT("CLOCK_RIGHT", "时钟准确率异常"), |
| | | LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "长时间无数据"), |
| | | DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "数据及时性异常"), |
| | | NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "不唯一数据量异常"), |
| | | UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "白天未识别数据量异常"), |
| | | CAR_SIX("CAR_SIX", "车辆六项属性不完整"), |
| | | MODELING_FAIL("MODELING_FAIL", "建模失败率异常"), |
| | | FACE_LOW("FACE_LOW", "人脸低分率异常"), |
| | | //车辆人脸通用 |
| | | 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"), |
| | | //车辆 |
| | | CAR_SIX("CAR_SIX", "车辆六项属性不完整","CAR"), |
| | | //人脸 |
| | | MODELING_FAIL("MODELING_FAIL", "建模失败率异常","FACE"), |
| | | FACE_LOW("FACE_LOW", "人脸低分率异常","FACE"), |
| | | ; |
| | | |
| | | private String value; |
| | | |
| | | private String desc; |
| | | |
| | | ErrorType(String value, String desc) { |
| | | private String category; |
| | | |
| | | ErrorType(String value, String desc,String category) { |
| | | this.value = value; |
| | | this.desc = desc; |
| | | this.category = category; |
| | | } |
| | | |
| | | // 根据分类获取错误类型列表 |
| | | public static List<ErrorType> getErrorTypesByCategory(String category) { |
| | | return Arrays.stream(values()) |
| | | .filter(errorType -> errorType.getCategory() == category) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | } |
New file |
| | |
| | | package pojo; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.util.List; |
| | | //前端级联选择数据 |
| | | @Data |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class CascadeOption { |
| | | private String value; |
| | | private String label; |
| | | private List<CascadeOption> children; |
| | | } |
| | |
| | | /** |
| | | * 故障类型 |
| | | */ |
| | | private List<String> errorTypeList; |
| | | private String errorType; |
| | | |
| | | /** |
| | | * 工单id |
| | |
| | | /** |
| | | * 故障类型 |
| | | */ |
| | | private List<String> errorTypeList; |
| | | private String errorType; |
| | | |
| | | /** |
| | | * 状态 |
| | |
| | | /** |
| | | * 故障类型 |
| | | */ |
| | | private List<String> errorTypeList; |
| | | |
| | | private String errorType; |
| | | /** |
| | | * 故障类型 |
| | | */ |
| | | private String errorTypeLabel; |
| | | /** |
| | | * 状态 |
| | | */ |
| | |
| | | import lombok.Data; |
| | | import org.springframework.data.mongodb.core.mapping.Document; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | private Integer checkCount; |
| | | /** 当日离线 */ |
| | | private Integer offLineCount; |
| | | /** |
| | | * 离线时间点 |
| | | */ |
| | | private List<Date> offLineTime; |
| | | private List<String> offLineTimeStr; |
| | | /** 设备类型 */ |
| | | private String monitorType; |
| | | /** 设备名 */ |
| | |
| | | /** 是否系统消息 */ |
| | | private Boolean sysMsg; |
| | | |
| | | /** 是否系统消息 */ |
| | | private Integer userId; |
| | | |
| | | public static WorkOrderYwConditionRecordVO getVoByEntity(@NonNull WorkOrderYwConditionRecord entity, WorkOrderYwConditionRecordVO vo) { |
| | | if(vo == null) { |
| | | vo = new WorkOrderYwConditionRecordVO(); |
| | |
| | | return workOrderService.detail(id); |
| | | } |
| | | |
| | | @GetMapping("/check") |
| | | @ApiOperation(value = "图片检测", notes = "图片检测") |
| | | @PreAuthorize("@ss.hasPermi('work:order:check')") |
| | | public Result check(String workOrderNo,String serialNumber) { |
| | | return workOrderService.checkImage(workOrderNo,serialNumber); |
| | | } |
| | | |
| | | @GetMapping("/list") |
| | | @ApiOperation(value = "列表", notes = "列表") |
| | | @PreAuthorize("@ss.hasPermi('work:order:list')") |
| | |
| | | return workOrderService.all(); |
| | | } |
| | | |
| | | @GetMapping("/errorType/list") |
| | | @ApiOperation(value = "故障列表", notes = "故障列表") |
| | | @PreAuthorize("@ss.hasPermi('work:order:list')") |
| | | public Result errorList() { |
| | | return workOrderService.errorAll(); |
| | | } |
| | | @GetMapping("/detail/info/{workOrderNo}") |
| | | @ApiOperation(value = "详情", notes = "详情") |
| | | @PreAuthorize("@ss.hasPermi('work:order:detail')") |
| | |
| | | public Result batchDeleteWorkOrderWhite(@RequestBody List<String> ids) { |
| | | return workOrderService.batchDeleteWorkOrderWhite(ids); |
| | | } |
| | | |
| | | /** |
| | | * 批量删除工单 |
| | | * |
| | | * @return {@link Result } |
| | | * @author |
| | | */ |
| | | @DeleteMapping("/batchDelete") |
| | | @PreAuthorize("@ss.hasPermi('work:order:delete')") |
| | | @ApiOperation(value = "批量删除工单白名单", notes = "批量删除工单白名单") |
| | | public Result batchDeleteWorkOrder(@RequestBody List<String> workOrderNos) { |
| | | return workOrderService.batchDeleteWorkOrder(workOrderNos); |
| | | } |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.ycl.platform.domain.entity.WorkOrder; |
| | | import com.ycl.platform.domain.form.WorkOrderBatchAuditingForm; |
| | | import com.ycl.platform.domain.query.*; |
| | | import com.ycl.platform.domain.vo.DeviceInfoVO; |
| | | import com.ycl.platform.domain.vo.WorkOrderDetailVO; |
| | |
| | | * @return |
| | | */ |
| | | List<WorkOrderVO> getRecoveryInfo(List<String> orders); |
| | | |
| | | List<WorkOrder> batchGetByError(@Param("form") WorkOrderBatchAuditingForm form); |
| | | |
| | | } |
| | |
| | | */ |
| | | void batchImportWhite(List<PointExport> dataList); |
| | | |
| | | /** |
| | | * 检测按钮 |
| | | * @param workOrderNo |
| | | * @return |
| | | */ |
| | | Result checkImage(String workOrderNo,String serialNumber); |
| | | |
| | | Result batchDeleteWorkOrder(List<String> workOrderNos); |
| | | |
| | | Result errorAll(); |
| | | |
| | | } |
| | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.DecimalFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | |
| | | } else { |
| | | item.setOnlineStr("未知"); |
| | | } |
| | | List<Date> offLineTime = item.getOffLineTime(); |
| | | //后续可以改成配置的离线次数(提取前n次,n为配置的离线次数) |
| | | SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | if(CollectionUtils.isNotEmpty(offLineTime) && offLineTime.size()>1){ |
| | | offLineTime = offLineTime.subList(0,1); |
| | | } |
| | | List<String> dateStr = new ArrayList<>(); |
| | | for (Date date : offLineTime) { |
| | | String formatDate = format.format(date); |
| | | dateStr.add(formatDate); |
| | | } |
| | | item.setOffLineTimeStr(dateStr); |
| | | }); |
| | | params.setDeptTag(-1); |
| | | params.setDeviceType(1); |
| | |
| | | |
| | | @Override |
| | | public void recordMetaDSumCheck(List<RecordMetaDSumResult> dataList) { |
| | | List<WorkOrder> workOrderList = dataList.stream().map(item -> { |
| | | WorkOrder workOrder = new WorkOrder(); |
| | | if (0 == item.getRecordStatus()) { |
| | | this.genWorkOrder(workOrder, ErrorType.VIDEO_LOSS, item.getDeviceId()); |
| | | } else if (-1 == item.getRecordStatus()) { |
| | | this.genWorkOrder(workOrder, ErrorType.VIDEO_NONE, item.getDeviceId()); |
| | | } |
| | | return workOrder; |
| | | }).collect(Collectors.toList()); |
| | | workOrderService.innerAddWorkOrder(workOrderList); |
| | | // List<WorkOrder> workOrderList = dataList.stream().map(item -> { |
| | | // WorkOrder workOrder = new WorkOrder(); |
| | | // if (0 == item.getRecordStatus()) { |
| | | // this.genWorkOrder(workOrder, ErrorType.VIDEO_LOSS, item.getDeviceId()); |
| | | // } else if (-1 == item.getRecordStatus()) { |
| | | // this.genWorkOrder(workOrder, ErrorType.VIDEO_NONE, item.getDeviceId()); |
| | | // } |
| | | // return workOrder; |
| | | // }).collect(Collectors.toList()); |
| | | // workOrderService.innerAddWorkOrder(workOrderList); |
| | | } |
| | | |
| | | |
| | |
| | | import constant.CheckConstants; |
| | | import constant.Constants; |
| | | import constant.RedisConstant; |
| | | import enumeration.ErrorType; |
| | | import enumeration.general.*; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | import org.springframework.util.Assert; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | import pojo.CascadeOption; |
| | | |
| | | import javax.imageio.ImageIO; |
| | | import javax.swing.*; |
| | |
| | | private final NotifyService notifyService; |
| | | private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; |
| | | private final WorkOrderErrorTypeServiceImpl workOrderErrorTypeService; |
| | | private final WorkOrderErrorTypeMapper workOrderErrorTypeMapper; |
| | | private final SysConfigMapper configMapper; |
| | | private final ReportMapper reportMapper; |
| | | private final WorkOrderCheckImgMapper workOrderCheckImgMapper; |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Result batchAuditing(WorkOrderBatchAuditingForm form) { |
| | | // 根据故障类型获取列表 |
| | | List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper) |
| | | .in(WorkOrder::getStatus, WorkOrderStatusEnum.YW_HANDLE.getValue()) |
| | | .in(WorkOrder::getErrorType, form.getErrorTypes()) |
| | | .select(WorkOrder::getId, WorkOrder::getUnitId, WorkOrder::getWorkOrderNo, WorkOrder::getSerialNumber) |
| | | .list(); |
| | | List<WorkOrder> list = baseMapper.batchGetByError(form); |
| | | // List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper) |
| | | // .in(WorkOrder::getStatus, WorkOrderStatusEnum.YW_HANDLE.getValue()) |
| | | // .in(WorkOrder::getErrorType, form.getErrorTypes()) |
| | | // .select(WorkOrder::getId, WorkOrder::getUnitId, WorkOrder::getWorkOrderNo, WorkOrder::getSerialNumber) |
| | | // .list(); |
| | | if (list.isEmpty()) { |
| | | return Result.error("没有工单可以审核"); |
| | | } |
| | |
| | | public List<WorkOrderYwConditionRecordVO> selectYwConditionByYwId(String workOrderNo) { |
| | | List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(workOrderNo); |
| | | ywConditionList.stream().forEach(item -> { |
| | | if(item.getUserId().equals(1)){ |
| | | item.setUnitName("管理员"); |
| | | } |
| | | if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) { |
| | | item.setUnitName("系统消息"); |
| | | } |
| | |
| | | if (!CollectionUtils.isEmpty(page.getRecords())) { |
| | | page.getRecords().stream().forEach(item -> { |
| | | if (StringUtils.hasText(item.getErrorType())) { |
| | | item.setErrorTypeList(List.of(item.getErrorType().split(","))); |
| | | List<String> errorTypeList = new ArrayList<>(List.of(item.getErrorType().split(","))); |
| | | int index = errorTypeList.indexOf(query.getErrorTypeLabel()); |
| | | if (index != -1) { |
| | | // 保存要移动的元素 |
| | | String firstOccurrence = errorTypeList.get(index); |
| | | // 从列表中移除该元素(第一次出现的位置) |
| | | errorTypeList.remove(index); |
| | | // 将该元素添加到列表的首位 |
| | | errorTypeList.add(0, firstOccurrence); |
| | | } |
| | | // 设置更新后的列表 |
| | | item.setErrorTypeList(errorTypeList); |
| | | } |
| | | if (StringUtils.hasText(item.getImgListStr())) { |
| | | item.setImgList(List.of(item.getImgListStr().split(","))); |
| | |
| | | |
| | | |
| | | @Override |
| | | public synchronized String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception { |
| | | public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception { |
| | | String url = String.format(this.rtspServer + "/api/play/start/img/%s/%s", deviceId, channelId); |
| | | log.info("访问路径{}",url); |
| | | String result = HttpUtils.sendGet(url); |
| | |
| | | |
| | | @Override |
| | | public List<WorkOrderVO> export (WorkOrderExportQuery query){ |
| | | if(query.getUnitId()==null) { |
| | | query.setUnitId(SecurityUtils.getUnitId()); |
| | | } |
| | | if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00"); |
| | | if (query.getEnd() != null) query.setEnd(query.getEnd() + " 23:59:59"); |
| | | |
| | |
| | | insertWhiteList.stream().forEach(white -> workOrderWhiteMapper.insert(white)); |
| | | } |
| | | |
| | | /** |
| | | * 检测工单按钮 |
| | | * @param workOrderNo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Result checkImage(String workOrderNo,String serialNumber) { |
| | | // 查出国标设备,就一条数据 |
| | | List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper) |
| | | .orderByDesc(DeviceInfo::getUpdateTime) |
| | | .last("limit 1") |
| | | .list(); |
| | | if (!CollectionUtils.isEmpty(gbDevices)) { |
| | | try { |
| | | String imgUrl = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), serialNumber,workOrderNo); |
| | | if (StringUtils.hasText(imgUrl)) { |
| | | WorkOrderCheckImg img = new WorkOrderCheckImg(); |
| | | img.setWorkOrderNo(workOrderNo); |
| | | img.setImgUrl(imgUrl); |
| | | img.setCreateTime(new Date()); |
| | | workOrderCheckImgMapper.insert(img); |
| | | } |
| | | return Result.ok().data(imgUrl); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return Result.ok(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Result batchDeleteWorkOrder(List<String> workOrderNos) { |
| | | if(!CollectionUtils.isEmpty(workOrderNos)) { |
| | | //删除工单审核记录 |
| | | workOrderAuditingRecordMapper.delete(new QueryWrapper<WorkOrderAuditingRecord>().in("work_order_no", workOrderNos)); |
| | | //删除工单图片记录 |
| | | workOrderCheckImgMapper.delete(new QueryWrapper<WorkOrderCheckImg>().in("work_order_no", workOrderNos)); |
| | | //删除工单下发记录 |
| | | workOrderDistributeRecordMapper.delete(new QueryWrapper<WorkOrderDistributeRecord>().in("work_order_no", workOrderNos)); |
| | | //删除工单故障类型 |
| | | workOrderErrorTypeMapper.delete(new QueryWrapper<WorkOrderErrorType>().in("work_order_no", workOrderNos)); |
| | | //删除工单情况记录 |
| | | workOrderYwConditionRecordMapper.delete(new QueryWrapper<WorkOrderYwConditionRecord>().in("work_order_no", workOrderNos)); |
| | | //删除工单 |
| | | this.baseMapper.delete(new QueryWrapper<WorkOrder>().in("work_order_no", workOrderNos)); |
| | | } |
| | | return Result.ok(); |
| | | } |
| | | |
| | | @Override |
| | | public Result errorAll() { |
| | | List<CascadeOption> results = new ArrayList<>(); |
| | | CascadeOption video = new CascadeOption(); |
| | | video.setLabel("视频"); |
| | | video.setValue("VIDEO"); |
| | | List<ErrorType> videoErr = ErrorType.getErrorTypesByCategory("VIDEO"); |
| | | List<ErrorType> videoErr1 = ErrorType.getErrorTypesByCategory("COMMON"); |
| | | videoErr.addAll(videoErr1); |
| | | List<CascadeOption> videoChildren = videoErr.stream().map(item -> CascadeOption.builder() |
| | | .value(item.getValue()) |
| | | .label(item.getDesc()) |
| | | .build()).collect(Collectors.toList()); |
| | | video.setChildren(videoChildren); |
| | | |
| | | CascadeOption car = new CascadeOption(); |
| | | car.setLabel("车辆"); |
| | | car.setValue("CAR"); |
| | | List<ErrorType> carErr = ErrorType.getErrorTypesByCategory("CAR"); |
| | | List<ErrorType> carErr1 = ErrorType.getErrorTypesByCategory("COMMON"); |
| | | List<ErrorType> carErr2 = ErrorType.getErrorTypesByCategory("CARORFACE"); |
| | | carErr.addAll(carErr1); |
| | | carErr.addAll(carErr2); |
| | | List<CascadeOption> carChildren = carErr.stream().map(item -> CascadeOption.builder() |
| | | .value(item.getValue()) |
| | | .label(item.getDesc()) |
| | | .build()).collect(Collectors.toList()); |
| | | car.setChildren(carChildren); |
| | | |
| | | CascadeOption face = new CascadeOption(); |
| | | face.setLabel("人脸"); |
| | | face.setValue("FACE"); |
| | | List<ErrorType> faceErr = ErrorType.getErrorTypesByCategory("FACE"); |
| | | List<ErrorType> faceErr1 = ErrorType.getErrorTypesByCategory("COMMON"); |
| | | List<ErrorType> faceErr2 = ErrorType.getErrorTypesByCategory("CARORFACE"); |
| | | faceErr.addAll(faceErr1); |
| | | faceErr.addAll(faceErr2); |
| | | List<CascadeOption> faceChildren = faceErr.stream().map(item -> CascadeOption.builder() |
| | | .value(item.getValue()) |
| | | .label(item.getDesc()) |
| | | .build()).collect(Collectors.toList()); |
| | | face.setChildren(faceChildren); |
| | | |
| | | results.add(video); |
| | | results.add(car); |
| | | results.add(face); |
| | | return Result.ok().data(results); |
| | | } |
| | | } |
| | |
| | | } |
| | | String errorType = workOrder.getErrorType(); |
| | | //存储故障 录像或图片访问异常 |
| | | if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) { |
| | | if (!CollectionUtils.isEmpty(storeRuleMap)) { |
| | | storeRuleMap.forEach((contractId, rules) -> { |
| | | Integer unitId = rules.get(0).getUnitId(); |
| | | //找到对应的规则 |
| | | if (workOrder.getUnitId().equals(unitId)) { |
| | | //工单下发时间 |
| | | Date createTime = workOrder.getDistributeTime(); |
| | | Date auditTime = workOrder.getAuditTime(); |
| | | double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60); |
| | | //选择时间范围内的规则 |
| | | for (CalculateRuleVO rule : rules) { |
| | | if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) { |
| | | double deductScore = rule.getCalcFraction() * Math.ceil(diffTime); |
| | | ContractScore contractScore = getContractScore(rule, deductScore, Math.round(diffTime * 100) / 100 + "", Remark + "工单编号为:" + workOrder.getWorkOrderNo() + "处理超时,扣除" + deductScore + "分"); |
| | | contractScoreList.add(contractScore); |
| | | workOrderList.add(workOrder.getWorkOrderNo()); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | // if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) { |
| | | // if (!CollectionUtils.isEmpty(storeRuleMap)) { |
| | | // storeRuleMap.forEach((contractId, rules) -> { |
| | | // Integer unitId = rules.get(0).getUnitId(); |
| | | // //找到对应的规则 |
| | | // if (workOrder.getUnitId().equals(unitId)) { |
| | | // //工单下发时间 |
| | | // Date createTime = workOrder.getDistributeTime(); |
| | | // Date auditTime = workOrder.getAuditTime(); |
| | | // double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60); |
| | | // //选择时间范围内的规则 |
| | | // for (CalculateRuleVO rule : rules) { |
| | | // if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) { |
| | | // double deductScore = rule.getCalcFraction() * Math.ceil(diffTime); |
| | | // ContractScore contractScore = getContractScore(rule, deductScore, Math.round(diffTime * 100) / 100 + "", Remark + "工单编号为:" + workOrder.getWorkOrderNo() + "处理超时,扣除" + deductScore + "分"); |
| | | // contractScoreList.add(contractScore); |
| | | // workOrderList.add(workOrder.getWorkOrderNo()); |
| | | // } |
| | | // } |
| | | // } |
| | | // }); |
| | | // } |
| | | // } |
| | | //前端感知源治理工作(时钟同步规则、OSD规则、一机一档规则) |
| | | if (ErrorType.MONITOR_UNQUALIFY.getValue().equals(errorType) || ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType)) { |
| | | if (ErrorType.POINT_INFO_ERROR.getValue().equals(errorType) || ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType)) { |
| | | if (!CollectionUtils.isEmpty(monitorRuleMap)) { |
| | | monitorRuleMap.forEach((contractId, rules) -> { |
| | | Integer unitId = rules.get(0).getUnitId(); |
| | |
| | | if (osdCheckResult != null) { |
| | | monitor.setDeviceType(osdCheckResult.getDeviceBrand()); |
| | | } |
| | | |
| | | monitorList.add(monitor); |
| | | } |
| | | }); |
| | |
| | | //老设备状态改为不参与考核 |
| | | if (!points.contains(key)) { |
| | | value.setExamineStatus(Boolean.FALSE); |
| | | //单位设置为空 |
| | | value.setUnitId(null); |
| | | ywPointList.add(value); |
| | | } |
| | | }); |
| | |
| | | @Override |
| | | public TMonitorResult call() { |
| | | TMonitorResult result = checkPointUtil.check(monitor); |
| | | // 一天内监测到离线1次以上,生成工单 |
| | | if (result.getOffLineCount() >= times) { |
| | | // 这次不在线且一天内监测到离线2次及以上,生成工单 |
| | | if (!result.getPingOnline() && result.getOffLineCount() >= times) { |
| | | WorkOrder workOrder = new WorkOrder(); |
| | | workOrder.setSerialNumber(result.getNo()); |
| | | List<String> errList = new ArrayList<>(); |
| | |
| | | } else { |
| | | map = new HashMap<>(); |
| | | } |
| | | |
| | | if (!monitor.getPingOnline()) { |
| | | try { |
| | | reachable = InetAddress.getByName(monitor.getIp()).isReachable(5000); |
| | |
| | | } |
| | | if (!monitor.getPingOnline()) { |
| | | offLineTimes++; |
| | | List<Date> offLineTime = monitor.getOffLineTime(); |
| | | if(CollectionUtils.isEmpty(offLineTime)) offLineTime = new ArrayList<>(); |
| | | offLineTime.add(new Date()); |
| | | monitor.setOffLineTime(offLineTime); |
| | | } |
| | | map.put("checkTimes", checkTimes); |
| | | map.put("offLineTimes", offLineTimes); |
| | |
| | | left join ( |
| | | WITH cte AS ( |
| | | SELECT *,row_number() OVER(PARTITION BY serial_number ORDER BY create_time DESC) rn FROM t_work_order |
| | | WHERE deleted = 0 AND status == 'AUDITING_SUCCESS' |
| | | WHERE deleted = 0 AND status = 'AUDITING_SUCCESS' |
| | | ) SELECT * FROM cte WHERE rn=1 |
| | | ) w on m.serial_number = w.serial_number and w.deleted = 0 |
| | | left join t_yw_unit u on p.unit_id = u.id and u.deleted = 0 |
| | |
| | | FROM |
| | | t_work_order wo |
| | | INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number |
| | | INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no |
| | | INNER JOIN t_yw_unit u ON wo.unit_id = u.id AND u.deleted = 0 |
| | | INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no |
| | | INNER JOIN sys_dict_data da ON da.dict_value = et.error_name AND da.dict_type = 'error_type' |
| | | LEFT JOIN t_work_order_check_img ci ON ci.work_order_no = wo.work_order_no |
| | | LEFT JOIN t_yw_people p ON wo.yw_people_id = p.id AND p.deleted = 0 |
| | |
| | | <if test="query.unitId != null"> |
| | | AND wo.unit_id = #{query.unitId} |
| | | </if> |
| | | <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> |
| | | <if test="query.errorType != null and query.errorType != ''"> |
| | | AND (EXISTS ( |
| | | SELECT 1 |
| | | FROM t_work_order_error_type twoet |
| | | WHERE twoet.work_order_no = wo.work_order_no |
| | | AND twoet.error_name in |
| | | <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType}</foreach> |
| | | AND twoet.error_name = #{query.errorType} |
| | | )) |
| | | </if> |
| | | <if test="query.keyword != null and query.keyword != ''"> |
| | |
| | | t_work_order wo |
| | | INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number |
| | | INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no |
| | | INNER JOIN t_yw_unit u ON wo.unit_id = u.id AND u.deleted = 0 |
| | | INNER JOIN sys_dict_data da ON da.dict_value = et.error_name AND da.dict_type = 'error_type' |
| | | INNER JOIN t_yw_unit u ON wo.unit_id = u.id AND u.deleted = 0 |
| | | LEFT JOIN t_work_order_check_img ci ON ci.work_order_no = wo.work_order_no |
| | | LEFT JOIN t_yw_people p ON wo.yw_people_id = p.id AND p.deleted = 0 |
| | | WHERE |
| | |
| | | <if test="query.start != null and query.end != null"> |
| | | AND wo.create_time BETWEEN #{query.start} AND #{query.end} |
| | | </if> |
| | | <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> |
| | | <if test="query.errorType != null and query.errorType !='' "> |
| | | AND (EXISTS ( |
| | | SELECT 1 |
| | | FROM t_work_order_error_type twoet |
| | | WHERE twoet.work_order_no = wo.work_order_no |
| | | AND twoet.error_name in |
| | | <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType}</foreach> |
| | | AND twoet.error_name = #{query.errorType} |
| | | )) |
| | | </if> |
| | | GROUP BY |
| | |
| | | t_work_order wo |
| | | INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number |
| | | INNER JOIN t_yw_point yp ON yp.serial_number = wo.serial_number AND yp.deleted = 0 |
| | | INNER JOIN t_yw_unit u ON wo.unit_id = u.id and u.deleted = 0 |
| | | INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no |
| | | INNER JOIN sys_dict_data da ON da.dict_value = et.error_name AND da.dict_type = 'error_type' |
| | | INNER JOIN t_yw_unit u ON wo.unit_id = u.id and u.deleted = 0 |
| | | LEFT JOIN t_yw_people p ON wo.yw_people_id = p.id and p.deleted = 0 |
| | | LEFT JOIN t_work_order_distribute_record odr ON odr.work_order_no = wo.work_order_no AND odr.deleted = 0 |
| | | LEFT JOIN sys_user su ON su.user_id = odr.user_id |
| | |
| | | <if test="query.start != null and query.end != null"> |
| | | AND wo.create_time BETWEEN #{query.start} AND #{query.end} |
| | | </if> |
| | | <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> |
| | | <if test="query.errorType != null and query.errorType != ''"> |
| | | AND (EXISTS ( |
| | | SELECT 1 |
| | | FROM t_work_order_error_type twoet |
| | | WHERE twoet.work_order_no = wo.work_order_no |
| | | AND twoet.error_name in |
| | | <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType} |
| | | </foreach> |
| | | AND twoet.error_name = #{query.errorType} |
| | | )) |
| | | </if> |
| | | GROUP BY |
| | |
| | | |
| | | <select id="workOrderTotal" resultType="com.ycl.platform.domain.vo.screen.WorkOrderTotalVO"> |
| | | SELECT |
| | | COUNT(*) AS totalNum, |
| | | COUNT(IF(w.status != 'AUDITING_SUCCESS' and w.status != 'WAIT_DISTRIBUTED', 1, NULL)) AS todoNum, |
| | | COUNT(IF(w.status != 'WAIT_DISTRIBUTE', 1, NULL)) AS totalNum, |
| | | COUNT(IF(w.status != 'AUDITING_SUCCESS' and w.status != 'WAIT_DISTRIBUTE', 1, NULL)) AS todoNum, |
| | | COUNT(IF(w.status = 'AUDITING_SUCCESS', 1, NULL)) AS doneNum |
| | | FROM t_work_order w |
| | | LEFT JOIN t_yw_point p ON w.serial_number = p.serial_number AND p.deleted = 0 |
| | |
| | | p.yw_person_name |
| | | </select> |
| | | |
| | | |
| | | <select id="batchGetByError" resultType="com.ycl.platform.domain.entity.WorkOrder"> |
| | | select wo.id,wo.unit_id,wo.work_order_no,wo.serial_number |
| | | from t_work_order wo |
| | | <where> |
| | | wo.deleted = 0 and wo.status = 'YW_HANDLE' |
| | | <if test="form.errorTypes != null and form.errorTypes.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 in |
| | | <foreach collection="form.errorTypes" open="(" separator="," close=")" item="errorType"> |
| | | #{errorType} |
| | | </foreach> |
| | | )) |
| | | </if> |
| | | </where> |
| | | </select> |
| | | </mapper> |
| | |
| | | <result column="unit_name" property="unitName"/> |
| | | <result column="sys_msg" property="sysMsg"/> |
| | | <result column="yw_proofMaterials" property="ywProofMaterials"/> |
| | | <result column="user_id" property="userId"/> |
| | | </resultMap> |
| | | |
| | | <select id="selectYwConditionByYwId" resultMap="BaseResultMap"> |
| | | SELECT DISTINCT yw.id, yu.id as unit_id, yu.unit_name,yw.yw_condition, yw.yw_proofMaterials ,yw.create_time, yw.sys_msg, su.nick_name |
| | | SELECT DISTINCT yw.id, yu.id as unit_id, yu.unit_name,yw.yw_condition, yw.yw_proofMaterials ,yw.create_time, yw.sys_msg, su.nick_name,su.user_id |
| | | FROM t_work_order_yw_condition_record yw |
| | | LEFT JOIN sys_user su ON yw.commit_user = su.user_id AND yw.deleted = 0 |
| | | LEFT JOIN t_yw_unit yu ON su.unit_id = yu.id |
| | |
| | | <if test="query.start != null and query.end != null"> |
| | | AND wo.create_time BETWEEN #{query.start} AND #{query.end} |
| | | </if> |
| | | <if test="query.errorTypeList != null and query.errorTypeList.size() > 0"> |
| | | <if test="query.errorType != null and query.errorType !='' "> |
| | | AND (EXISTS ( |
| | | SELECT 1 |
| | | FROM t_work_order_error_type twoet |
| | | WHERE twoet.work_order_no = wo.work_order_no |
| | | AND twoet.error_name in |
| | | <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType} |
| | | </foreach> |
| | | AND twoet.error_name = #{query.errorType} |
| | | )) |
| | | </if> |
| | | </select> |