| | |
| | | private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper; |
| | | private final NotifyService notifyService; |
| | | private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; |
| | | private final WorkOrderErrorTypeMapper workOrderErrorTypeMapper; |
| | | private final WorkOrderErrorTypeServiceImpl workOrderErrorTypeService; |
| | | private final SysConfigMapper configMapper; |
| | | private final ServerConfig serverConfig; |
| | | private final ReportMapper reportMapper; |
| | |
| | | List<String> serialNumberList = workOrderList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList()); |
| | | // 查出数据库中国标码对应的未完成的工单 |
| | | List<WorkOrder> inDatabaseWorkOrderList = new LambdaQueryChainWrapper<>(baseMapper) |
| | | .select(WorkOrder::getId, WorkOrder::getSerialNumber, WorkOrder::getStatus, WorkOrder::getErrorType) |
| | | .select(WorkOrder::getId, WorkOrder::getSerialNumber, WorkOrder::getStatus, WorkOrder::getWorkOrderNo) |
| | | .in(WorkOrder::getSerialNumber, serialNumberList) |
| | | .ne(WorkOrder::getStatus, WorkOrderStatusEnum.AUDITING_SUCCESS) |
| | | .list(); |
| | | Map<String, WorkOrder> mapping = inDatabaseWorkOrderList.stream().collect((Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder))); |
| | | List<WorkOrder> waitAddList = new ArrayList<>(48); |
| | | List<WorkOrderErrorType> waitAddErrorTypeList = new ArrayList<>(48); |
| | | Integer updateNum = 0; |
| | | |
| | | Date now = new Date(); |
| | | for (WorkOrder workOrder : workOrderList) { |
| | | WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber()); |
| | | if (Objects.nonNull(databaseWorkOrder)) { |
| | | List<WorkOrderErrorType> workOrderErrorTypeList = new LambdaQueryChainWrapper<>(workOrderErrorTypeMapper) |
| | | .select(WorkOrderErrorType::getErrorName) |
| | | .eq(WorkOrderErrorType::getWorkOrderNo, workOrder.getWorkOrderNo()) |
| | | .list(); |
| | | List<String> errorNameList = workOrderErrorTypeList.stream().map(WorkOrderErrorType::getErrorName).collect(Collectors.toList()); |
| | | String errorType = databaseWorkOrder.getErrorType(); |
| | | if (errorNameList.contains(errorType)) { |
| | | List<String> errorNameList = workOrderErrorTypeService.getBaseMapper().getNotFinishWorkOrderErrors(workOrder.getWorkOrderNo()); |
| | | List<String> errorTypes = workOrder.getErrorTypeList(); |
| | | if (errorNameList.containsAll(errorTypes)) { |
| | | // 如果,国标码、故障类型都一样,则跳过不处理 |
| | | continue; |
| | | } else { |
| | | // 错误类型不一样,就新增一个错误类型,并且重置工单状态为待处理 |
| | | List<SysDictData> errorTypeDictList = dictDataMapper.selectDictDataByType("error_type"); |
| | | String finalErrorType = errorType; |
| | | List<SysDictData> targetErrorTypes = errorTypeDictList.stream().filter(item -> finalErrorType.equals(item.getDictValue())).collect(Collectors.toList()); |
| | | if (! CollectionUtils.isEmpty(targetErrorTypes)) { |
| | | errorType = targetErrorTypes.get(0).getDictValue(); |
| | | for (String errorType : errorTypes) { |
| | | if (! errorNameList.contains(errorType)) { |
| | | // 错误类型不一样,就新增一个错误类型,并且重置工单状态为待处理 |
| | | WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType(); |
| | | workOrderErrorType.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo()); |
| | | workOrderErrorType.setCreateTime(now); |
| | | workOrderErrorType.setUpdateTime(now); |
| | | workOrderErrorType.setErrorName(errorType); |
| | | workOrderErrorTypeService.save(workOrderErrorType); |
| | | } |
| | | } |
| | | WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType(); |
| | | workOrderErrorType.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo()); |
| | | Date now = new Date(); |
| | | workOrderErrorType.setCreateTime(now); |
| | | workOrderErrorType.setUpdateTime(now); |
| | | workOrderErrorTypeMapper.insert(workOrderErrorType); |
| | | |
| | | databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); |
| | | databaseWorkOrder.setUpdateTime(now); |
| | | baseMapper.updateById(databaseWorkOrder); |
| | |
| | | continue; |
| | | } |
| | | workOrder.setWorkOrderNo(IdUtils.timeAddRandomNO(5)); |
| | | workOrder.setUnitId(Math.toIntExact(point.getUnitId())); |
| | | if (Objects.nonNull(point.getUnitId())) { |
| | | workOrder.setUnitId(Math.toIntExact(point.getUnitId())); |
| | | } |
| | | if (point.getImportantTag() || point.getImportantCommandImageTag()) { |
| | | workOrder.setProcessingPeriod(Integer.valueOf(important.getConfigValue())); |
| | | } else { |
| | | workOrder.setProcessingPeriod(Integer.valueOf(normal.getConfigValue())); |
| | | } |
| | | // 保存错误类型 |
| | | for (String errorType : workOrder.getErrorTypeList()) { |
| | | WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType(); |
| | | workOrderErrorType.setWorkOrderNo(workOrder.getWorkOrderNo()); |
| | | workOrderErrorType.setCreateTime(now); |
| | | workOrderErrorType.setUpdateTime(now); |
| | | workOrderErrorType.setErrorName(errorType); |
| | | waitAddErrorTypeList.add(workOrderErrorType); |
| | | } |
| | | } |
| | | waitAddList.removeAll(notAddList); |
| | | if (CollectionUtils.isEmpty(waitAddList)) { |
| | | return Boolean.TRUE; |
| | | } |
| | | this.saveBatch(waitAddList); |
| | | // 保存工单和故障类型 |
| | | baseMapper.addMany(waitAddList); |
| | | if (! CollectionUtils.isEmpty(waitAddErrorTypeList)) { |
| | | workOrderErrorTypeService.getBaseMapper().addMany(waitAddErrorTypeList); |
| | | } |
| | | // 如果是直接下发,添加下发记录 |
| | | if (WorkOrderStatusEnum.DISTRIBUTED.equals(waitAddList.get(0).getStatus())) { |
| | | List<WorkOrderDistributeRecord> distributedRecordList = waitAddList.stream().map(item -> { |
| | | WorkOrderDistributeRecord workOrderDistributeRecord = new WorkOrderDistributeRecord(); |
| | | workOrderDistributeRecord.setWorkOrderId(item.getId()); |
| | | workOrderDistributeRecord.setWorkOrderNo(item.getWorkOrderNo()); |
| | | workOrderDistributeRecord.setDistributeWay(WorkOrderDistributeWayEnum.DIRECT_DISTRIBUTE); |
| | | workOrderDistributeRecord.setUserId(1L); |
| | | Date now = new Date(); |
| | | workOrderDistributeRecord.setCreateTime(now); |
| | | workOrderDistributeRecord.setUpdateTime(now); |
| | | return workOrderDistributeRecord; |
| | |
| | | entity.setUpdateTime(now); |
| | | entity.setErrorType(String.join(",", form.getErrorType())); |
| | | List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList(); |
| | | workOrderErrorTypeMapper.insertWorkOrderErrorTypeList(workOrderErrorTypes); |
| | | workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes); |
| | | if(baseMapper.insert(entity) > 0) { |
| | | return Result.ok("添加成功"); |
| | | } |
| | |
| | | public Result page(WorkOrderQuery query) { |
| | | IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class); |
| | | baseMapper.page(page, query); |
| | | page.getRecords().forEach(item -> item.setErrorType(ErrorTypeEnum.getEnumValue(item.getErrorType()))); |
| | | return Result.ok().data(page.getRecords()).total(page.getTotal()); |
| | | } |
| | | |
| | |
| | | public Result distributePage(DistributeWorkOrderQuery query) { |
| | | IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class); |
| | | baseMapper.distributePage(page, query); |
| | | page.getRecords().forEach(item -> item.setErrorType(ErrorTypeEnum.getEnumValue(item.getErrorType()))); |
| | | return Result.ok().data(page).total(page.getTotal()); |
| | | } |
| | | |
| | |
| | | .orderByDesc(WorkOrder::getCreateTime) |
| | | .last("limit " + data.getFastNumLimit()) |
| | | .list(); |
| | | List<Integer> ids = list.stream().map(WorkOrder::getId).toList(); |
| | | List<String> workOrderNoList = list.stream().map(WorkOrder::getWorkOrderNo).toList(); |
| | | List<String> serialNumberList = list.stream().map(WorkOrder::getSerialNumber).toList(); |
| | | |
| | | if (ids.isEmpty()) { return Result.error("没有符合条件的工单"); } |
| | | if (workOrderNoList.isEmpty()) { return Result.error("没有符合条件的工单"); } |
| | | if (!getDistributeLock()) { return Result.error("此刻有人下发中,为避免冲突,请稍后重试"); } |
| | | try { |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) |
| | | .in(WorkOrder::getId, ids) |
| | | .in(WorkOrder::getWorkOrderNo, workOrderNoList) |
| | | .update(); |
| | | addDistributeRecord(ids, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE); |
| | | addDistributeRecord(workOrderNoList, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE); |
| | | // 同步点位状态 |
| | | ywPointService.updateRecovery(serialNumberList, 1); |
| | | return Result.ok("成功下发" + ids.size() + "条工单"); |
| | | return Result.ok("成功下发" + workOrderNoList.size() + "条工单"); |
| | | } catch (Exception e) { |
| | | return Result.error("操作失败"); |
| | | } finally { |
| | |
| | | WorkOrderDistributeWayEnum distributeWayEnum = WorkOrderDistributeWayEnum.SELECTED_DISTRIBUTE; |
| | | if (!getDistributeLock()) { return Result.error("此刻有人下发中,为避免冲突,请稍后重试"); } |
| | | try { |
| | | if (query.getIds().isEmpty()) { |
| | | query.setIds(new LambdaQueryChainWrapper<>(baseMapper) |
| | | if (query.getWorkOrderNOList().isEmpty()) { |
| | | query.setWorkOrderNOList(new LambdaQueryChainWrapper<>(baseMapper) |
| | | .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) |
| | | .eq(Objects.nonNull(query.getUnitId()), WorkOrder::getUnitId, query.getUnitId()) |
| | | .select(WorkOrder::getId) |
| | | .list() |
| | | .stream() |
| | | .map(WorkOrder::getId) |
| | | .map(WorkOrder::getWorkOrderNo) |
| | | .collect(Collectors.toList())); |
| | | distributeWayEnum = WorkOrderDistributeWayEnum.ALL_DISTRIBUTE; |
| | | } |
| | | if (query.getIds().isEmpty()) { return Result.error("没有工单待下发"); } |
| | | if (query.getWorkOrderNOList().isEmpty()) { return Result.error("没有工单待下发"); } |
| | | new LambdaUpdateChainWrapper<>(baseMapper) |
| | | .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) |
| | | .in(WorkOrder::getId, query.getIds()) |
| | | .in(WorkOrder::getWorkOrderNo, query.getWorkOrderNOList()) |
| | | .update(); |
| | | addDistributeRecord(query.getIds(), distributeWayEnum); |
| | | addDistributeRecord(query.getWorkOrderNOList(), distributeWayEnum); |
| | | // 同步点位状态 |
| | | List<String> serialNumberList = new LambdaQueryChainWrapper<>(baseMapper).select(WorkOrder::getSerialNumber).in(WorkOrder::getId, query.getIds()).list().stream().map(WorkOrder::getSerialNumber).toList(); |
| | | List<String> serialNumberList = new LambdaQueryChainWrapper<>(baseMapper).select(WorkOrder::getSerialNumber).in(WorkOrder::getId, query.getWorkOrderNOList()).list().stream().map(WorkOrder::getSerialNumber).toList(); |
| | | ywPointService.updateRecovery(serialNumberList, 1); |
| | | return Result.ok("成功下发" + query.getIds().size() + "条工单"); |
| | | return Result.ok("成功下发" + query.getWorkOrderNOList().size() + "条工单"); |
| | | } catch (Exception e) { |
| | | return Result.error("操作失败"); |
| | | } finally { |
| | |
| | | |
| | | /** |
| | | * 添加工单下发记录 |
| | | * @param ids 工单id |
| | | * @param workOrderNoList 工单id |
| | | */ |
| | | private void addDistributeRecord(List<Integer> ids, WorkOrderDistributeWayEnum distributeWay) { |
| | | private void addDistributeRecord(List<String> workOrderNoList, WorkOrderDistributeWayEnum distributeWay) { |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | workOrderDistributeRecordMapper.insertBatch( |
| | | ids.stream() |
| | | .map(id -> new WorkOrderDistributeRecord(id, loginUser.getUserId(), distributeWay)) |
| | | workOrderNoList.stream() |
| | | .map(no -> new WorkOrderDistributeRecord(no, loginUser.getUserId(), distributeWay)) |
| | | .toList() |
| | | ); |
| | | } |