| | |
| | | @Autowired |
| | | private XpOperationsUserRepository repository; |
| | | |
| | | public void reassign(Long taskId,String msg) { |
| | | @Override |
| | | @Transactional |
| | | public void reassign(Long taskId, String msg) { |
| | | |
| | | XpTask task = getById(taskId); |
| | | XpVehicle vehicle = xpVehicleClient.queryById(task.getVehicleId()).getData(); |
| | |
| | | if (Objects.isNull(taskRuleRole) || Objects.isNull(taskRule)) { |
| | | throw new ServiceException("未配置车辆事故任务分配规则"); |
| | | } |
| | | List<Long> excludedUserIds = Optional.ofNullable(task.getExcluded()).orElse(new ArrayList<>()); |
| | | excludedUserIds.add(Long.valueOf(task.getHandleUserId())); |
| | | task.setExcluded(excludedUserIds); |
| | | Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData(); |
| | | List<Long> roleIds = taskRuleRole.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList()); |
| | | List<XpOperationsRole> data = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData(); |
| | | List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData(); |
| | | List<XpOperationsRole> collect = data.stream().filter(x -> ids.contains(x.getOperationsUserId())).collect(Collectors.toList()); |
| | | String belongUserIds = collect.stream().map(XpOperationsRole::getOperationsUserId).collect(Collectors.toSet()).stream().map(String::valueOf).collect(Collectors.joining(",")); |
| | | String idsWithoutMe = belongUserIds.replace(task.getHandleUserId(), ""); |
| | | String belongUserIds = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData().stream() |
| | | .map(XpOperationsRole::getOperationsUserId) |
| | | .filter(ids::contains) |
| | | .filter(id -> !excludedUserIds.contains(id)) |
| | | .map(String::valueOf).collect(Collectors.joining(",")); |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class); |
| | | String handlerUser = chooseNearestAvailableOperationsUser(idsWithoutMe, vehiclePosition); |
| | | String handlerUser = chooseNearestAvailableOperationsUser(belongUserIds, vehiclePosition); |
| | | task.setHandleUserId(handlerUser); |
| | | if(handlerUser == null) { |
| | | task.setStatus(4); |
| | |
| | | } |
| | | Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData(); |
| | | List<Long> roleIds = taskRuleRole.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList()); |
| | | List<XpOperationsRole> data = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData(); |
| | | List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData(); |
| | | List<XpOperationsRole> collect = data.stream().filter(x -> ids.contains(x.getOperationsUserId())).collect(Collectors.toList()); |
| | | String belongUserIds = collect.stream().map(XpOperationsRole::getOperationsUserId).collect(Collectors.toSet()).stream().map(String::valueOf).collect(Collectors.joining(",")); |
| | | String belongUserIds = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData().stream() |
| | | .map(XpOperationsRole::getOperationsUserId) |
| | | .filter(ids::contains) |
| | | .map(String::valueOf).collect(Collectors.joining(",")); |
| | | |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class); |
| | | Map<String, String> geocode = gdMapGeocodingUtil.geocode(vehiclePosition.getPoint().getX() + "", vehiclePosition.getPoint().getY() + ""); |
| | |
| | | |
| | | private String chooseNearestAvailableOperationsUser(String belongUserIds, VehiclePosition vehiclePosition) { |
| | | |
| | | if (StringUtils.isBlank(belongUserIds)) return null; |
| | | List<Long> ids = Arrays.stream(belongUserIds.split(",")).filter(StringUtils::isNotBlank).map(Long::valueOf).collect(Collectors.toList()); |
| | | |
| | | // 让mongo根据[id in ids]返回距离排序的users |