RouteService.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package top.haijunit.train.service;
  2. import lombok.RequiredArgsConstructor;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.stereotype.Service;
  5. import top.haijunit.common.utils.StreamUtils;
  6. import top.haijunit.train.domain.constant.DirectionEnum;
  7. import top.haijunit.train.domain.entity.RouteEntity;
  8. import top.haijunit.train.domain.entity.SelectionEntity;
  9. import top.haijunit.train.domain.repository.RouteRepository;
  10. import top.haijunit.train.domain.repository.SelectionRepository;
  11. import top.haijunit.train.simulation.TrainItem;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.function.Function;
  16. /**
  17. * @author zhanghaijun
  18. * @date 2023/11/29 06:54
  19. * @description [一句话描述该类的功能]
  20. */
  21. @Slf4j
  22. @Service
  23. @RequiredArgsConstructor
  24. public class RouteService {
  25. private final RouteRepository routeRepository;
  26. private final SelectionRepository selectionRepository;
  27. public RouteEntity getNextRoute(RouteEntity route) {
  28. return routeRepository.findById(route.getNextId()).orElse(null);
  29. }
  30. public RouteEntity getNextRoute(Long id) {
  31. List<RouteEntity> routeList = routeRepository.findAll();
  32. for (int i = 0; i < routeList.size(); i++) {
  33. if (routeList.get(i).getId().equals(id)) {
  34. if (i == routeList.size() - 1) {
  35. return routeList.get(0);
  36. } else {
  37. return routeList.get(i + 1);
  38. }
  39. }
  40. }
  41. return null;
  42. }
  43. public RouteEntity getCurrentRoute(TrainItem train) {
  44. Map<Long, SelectionEntity> selectionMap = StreamUtils.toMap(selectionRepository.findAll(), SelectionEntity::getId, Function.identity());
  45. for (RouteEntity route : routeRepository.findAll()) {
  46. ArrayList<Long> list = route.getSelectionList();
  47. SelectionEntity start = selectionMap.get(list.get(0));
  48. SelectionEntity end = selectionMap.get(list.get(list.size() - 1));
  49. if (null == start || null == end) {
  50. continue;
  51. }
  52. if (train.getDirection() == DirectionEnum.UP && start.getStartKilometer().compareTo(train.getKilometer()) <= 0 && end.getStartKilometer().add(end.getSelectionLength()).compareTo(train.getKilometer()) > 0) {
  53. return route;
  54. }
  55. if (train.getDirection() == DirectionEnum.DOWN && start.getStartKilometer().compareTo(train.getKilometer()) >= 0 && end.getStartKilometer().add(end.getSelectionLength()).compareTo(train.getKilometer()) < 0) {
  56. return route;
  57. }
  58. }
  59. return null;
  60. }
  61. }