| | |
| | | import com.ycl.utils.http.HttpUtils; |
| | | import com.ycl.utils.redis.RedisCache; |
| | | import com.ycl.utils.uuid.IdUtils; |
| | | import constant.ApiConstants; |
| | | import constant.Constants; |
| | | import constant.RedisConstant; |
| | | import enumeration.ErrorType; |
| | |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | import pojo.CascadeOption; |
| | | import utils.file.FileUtils; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | |
| | | } |
| | | List<String> willAddSerialNumber = waitAddList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList()); |
| | | //只生成考核设备、且有运维单位的工单 |
| | | |
| | | List<YwPoint> pointList = new LambdaQueryChainWrapper<>(ywPointService.getBaseMapper()) |
| | | .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getImportantCommandImageTag) |
| | | .in(YwPoint::getSerialNumber, willAddSerialNumber) |
| | |
| | | } |
| | | log.info("即将生成的工单:{}", workOrder); |
| | | } |
| | | |
| | | redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum); |
| | | redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId); |
| | | // 保存工单和故障类型 |
| | |
| | | UrgentLevelEnum.WARNING, |
| | | workOrder.getWorkOrderNo()); |
| | | notifyService.save(notify); |
| | | List<String> errorList = workOrderErrorTypeMapper.getErrorList(workOrder.getWorkOrderNo()) |
| | | .stream().map(SysDictData::getDictValue).collect(Collectors.toList()); |
| | | List<WorkOrderVO> workOrderVOS = workOrderErrorTypeMapper.getErrorListByNumbers(Arrays.asList(workOrder.getWorkOrderNo())); |
| | | |
| | | // 同步点位状态 |
| | | if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) { |
| | | ywPointService.updateRecovery(Collections.singletonList(workOrder.getSerialNumber()), 0); |
| | | //如果工单为离线工单那么修改点位pingOnline为在线 |
| | | if(!CollectionUtils.isEmpty(errorList) && errorList.contains(ErrorType.DEVICE_OFFLINE.getValue())){ |
| | | new LambdaUpdateChainWrapper<>(ywPointMapper) |
| | | .eq(YwPoint::getSerialNumber, workOrder.getSerialNumber()) |
| | | .set(YwPoint::getUpdateTime, new Date()) |
| | | .set(YwPoint::getPingOnline, 1) |
| | | .update(); |
| | | if (!CollectionUtils.isEmpty(workOrderVOS)) { |
| | | List<String> ips = new ArrayList<>(); |
| | | for (WorkOrderVO workOrderVO : workOrderVOS) { |
| | | if(ErrorType.DEVICE_OFFLINE.getValue().equals(workOrderVO.getErrorType())){ |
| | | ips.add(workOrderVO.getIp()); |
| | | } |
| | | } |
| | | if(!CollectionUtils.isEmpty(ips)) { |
| | | monitorMapper.batchUpdateOnline(ips, new Date(), ApiConstants.UY_OnlineSite_Online); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | workOrder.getWorkOrderNo()); |
| | | notifies.add(notify); |
| | | } |
| | | notifyService.saveBatch(notifies); |
| | | // 同步点位状态 |
| | | if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) { |
| | | ywPointService.updateRecovery(serialNumbers, 0); |
| | | //筛选出离线工单ip并修改在线状态 |
| | | if (!CollectionUtils.isEmpty(serialNumbers)) { |
| | | Map<String, List<String>> errorTypes = workOrderErrorTypeMapper.getErrorListByNumbers(workOrderNoList).stream().collect(Collectors.groupingBy( |
| | | WorkOrderVO::getIp, |
| | | Collectors.mapping( |
| | | WorkOrderVO::getErrorType, |
| | | Collectors.toList() |
| | | ) |
| | | )); |
| | | List<String> ips = new ArrayList<>(); |
| | | errorTypes.forEach((key, value) -> { |
| | | if (!CollectionUtils.isEmpty(value) && value.contains(ErrorType.DEVICE_OFFLINE.getValue())) { |
| | | ips.add(key); |
| | | } |
| | | }); |
| | | if(!CollectionUtils.isEmpty(ips)) { |
| | | monitorMapper.batchUpdateOnline(ips, new Date(), ApiConstants.UY_OnlineSite_Online); |
| | | } |
| | | } |
| | | } |
| | | notifyService.saveBatch(notifies); |
| | | return Result.ok("操作成功"); |
| | | } |
| | | |
| | |
| | | img.setWorkOrderNo(workOrder.getWorkOrderNo()); |
| | | img.setImgUrl(frameImg); |
| | | img.setCreateTime(new Date()); |
| | | //判断该工单的图片是否已经大于5张了 |
| | | LambdaQueryChainWrapper<WorkOrderCheckImg> qw = new LambdaQueryChainWrapper<>(workOrderCheckImgMapper); |
| | | |
| | | //按照创建日期降序排列 |
| | | List<WorkOrderCheckImg> workOrderList = workOrderCheckImgMapper.selectList( |
| | | new LambdaQueryChainWrapper<>(workOrderCheckImgMapper) |
| | | .eq(WorkOrderCheckImg::getWorkOrderNo, workOrder.getWorkOrderNo()) |
| | | .orderByDesc(WorkOrderCheckImg::getCreateTime) |
| | | ); |
| | | //保留最新的5张 |
| | | if (workOrderList.size()>=5){ |
| | | List<String> imgList = workOrderList.subList(4,workOrderList.size()).stream().map(WorkOrderCheckImg::getImgUrl).collect(Collectors.toList()); |
| | | List<Integer> idList = workOrderList.subList(4, workOrderList.size()).stream().map(WorkOrderCheckImg::getId).collect(Collectors.toList()); |
| | | //删除照片 ,并且物理删除服务器内对应照片的名字 |
| | | |
| | | // /profile/2024-11-18_1d8e6d37-a4d0-4bba-8473-ff4e50eda83d.png |
| | | for (String filePath: imgList){ |
| | | delImgFormClient(filePath); |
| | | } |
| | | workOrderCheckImgMapper.deleteBatchIds(idList); |
| | | |
| | | } |
| | | |
| | | |
| | | workOrderCheckImgMapper.insert(img); |
| | | } |
| | | } |
| | |
| | | @Override |
| | | public Result remove(List<String> ids) { |
| | | if (baseMapper.deleteBatchIds(ids) > 0) { |
| | | //批量删除是否被用到? |
| | | |
| | | return Result.ok("删除成功"); |
| | | } |
| | | return Result.error("删除失败"); |
| | | } |
| | | |
| | | /*** |
| | | * 通过url删除服务器内的图片 |
| | | * @param url |
| | | */ |
| | | public void delImgFormClient(String url){ |
| | | //提取文件名 /profile/2024-11-17_79c02666-da1e-45ba-9f29-7523c848fa4a.png |
| | | // 这部分2024-11-17_79c02666-da1e-45ba-9f29-7523c848fa4a.png |
| | | String imgPath = FileUtils.getImgName(url); |
| | | if (imgPath.isEmpty()){ |
| | | log.error("url错误:{}",imgPath); |
| | | }else{ |
| | | //提取日期部分 组装目录 : /opt/zgyw/uploadPath + / + yyyy-MM-dd + |
| | | String pathName = PlatformConfig.getUploadPath() + "/" + FileUtils.extractDateFromString(url); |
| | | FileUtils.deleteFile(pathName+"/" + imgPath); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | String workOrderNo = workOrder.getWorkOrderNo(); |
| | | //删除工单审核记录 |
| | | workOrderAuditingRecordMapper.delete(new QueryWrapper<WorkOrderAuditingRecord>().eq("work_order_no", workOrderNo)); |
| | | //需要物理删除服务器中的图片 |
| | | //查询到工单照片集合 |
| | | List<String> workOrderImg = workOrderCheckImgMapper |
| | | .selectList(new QueryWrapper<WorkOrderCheckImg>().eq("work_order_no", workOrderNo)) |
| | | .stream().map(WorkOrderCheckImg::getImgUrl).collect(Collectors.toList()); |
| | | log.error("删除工单图片集合:{}",workOrderImg); |
| | | log.error("删除路径:{}",PlatformConfig.getUploadPath()); |
| | | |
| | | for (String filePath: workOrderImg){ |
| | | delImgFormClient(filePath); |
| | | } |
| | | |
| | | //删除工单图片记录 |
| | | workOrderCheckImgMapper.delete(new QueryWrapper<WorkOrderCheckImg>().eq("work_order_no", workOrderNo)); |
| | | //删除工单下发记录 |
| | |
| | | } |
| | | return Result.error("删除失败"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 分页查询 |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<WorkOrderVO> distributeList(){ |
| | | return baseMapper.distributeList(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public Result distributeFast(DistributeWorkOrderVO data) { |
| | | // 获取当前时间 |
| | |
| | | distributeUnLock(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | @Transactional |
| | |
| | | @Override |
| | | public Result detailByNo(String workOrderNo) { |
| | | WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo); |
| | | //报空原因1. sql 中 inner join 表 t_work_order_distribute_record 中 无与该表关联的记录 wo.work_order_no = dr.work_order_no |
| | | if(workOrder == null){ |
| | | workOrder = baseMapper.detailByNoButNoDistributeRecord(workOrderNo); |
| | | } |
| | | |
| | | // 是否报备 |
| | | boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper) |
| | | .eq(Report::getSerialNumber, workOrder.getSerialNumber()) |
| | |
| | | workOrder.setImgList(imgList); |
| | | return Result.ok().data(workOrder); |
| | | } |
| | | |
| | | @Autowired |
| | | private WorkOrderMapper workOrderMapper; |
| | | |
| | | /** |
| | | * 工单导出的逻辑 |
| | |
| | | query.setErrorTypeList(errorTypeList); |
| | | } |
| | | List<WorkOrderVO> export = baseMapper.export(query); |
| | | |
| | | |
| | | List<String> workOrderNos = export.stream().map(WorkOrderVO::getWorkOrderNo).collect(Collectors.toList()); |
| | | List<WorkOrderVO> auditTimeList = workOrderMapper.getAuditTimeList(workOrderNos); |
| | | Map<String, List<Date>> auditTimeMap = auditTimeList.stream() |
| | | .collect(Collectors.groupingBy( |
| | | WorkOrderVO::getWorkOrderNo, // 分组的键 |
| | | Collectors.mapping(WorkOrderVO::getAuditTime, Collectors.toList()))); |
| | | if (!CollectionUtils.isEmpty(workOrderNos)){ |
| | | export.forEach(workOrderVO -> { |
| | | List<Date> auditTimes = auditTimeMap.get(workOrderVO.getWorkOrderNo()); |
| | | if (!CollectionUtils.isEmpty(auditTimes)){ |
| | | //审核通过时间 |
| | | Date passTime = Collections.max(auditTimes); |
| | | ZoneId zoneId = ZoneId.systemDefault(); |
| | | workOrderVO.setPassTime(passTime.toInstant().atZone(zoneId).toLocalDateTime()); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | if (CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>(); |
| | | List<String> ips = export.stream().map(WorkOrderVO::getIp).collect(Collectors.toList()); |
| | | //查出相同ip的设备、并查出标签 |