| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package top.haijunit.train.service;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import top.haijunit.common.utils.StreamUtils;
- import top.haijunit.train.domain.constant.DirectionEnum;
- import top.haijunit.train.domain.entity.RouteEntity;
- import top.haijunit.train.domain.entity.SelectionEntity;
- import top.haijunit.train.domain.repository.RouteRepository;
- import top.haijunit.train.domain.repository.SelectionRepository;
- import top.haijunit.train.simulation.TrainItem;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.function.Function;
- /**
- * @author zhanghaijun
- * @date 2023/11/29 06:54
- * @description [一句话描述该类的功能]
- */
- @Slf4j
- @Service
- @RequiredArgsConstructor
- public class RouteService {
- private final RouteRepository routeRepository;
- private final SelectionRepository selectionRepository;
- public RouteEntity getNextRoute(RouteEntity route) {
- return routeRepository.findById(route.getNextId()).orElse(null);
- }
- public RouteEntity getNextRoute(Long id) {
- List<RouteEntity> routeList = routeRepository.findAll();
- for (int i = 0; i < routeList.size(); i++) {
- if (routeList.get(i).getId().equals(id)) {
- if (i == routeList.size() - 1) {
- return routeList.get(0);
- } else {
- return routeList.get(i + 1);
- }
- }
- }
- return null;
- }
- public RouteEntity getCurrentRoute(TrainItem train) {
- Map<Long, SelectionEntity> selectionMap = StreamUtils.toMap(selectionRepository.findAll(), SelectionEntity::getId, Function.identity());
- for (RouteEntity route : routeRepository.findAll()) {
- ArrayList<Long> list = route.getSelectionList();
- SelectionEntity start = selectionMap.get(list.get(0));
- SelectionEntity end = selectionMap.get(list.get(list.size() - 1));
- if (null == start || null == end) {
- continue;
- }
- if (train.getDirection() == DirectionEnum.UP && start.getStartKilometer().compareTo(train.getKilometer()) <= 0 && end.getStartKilometer().add(end.getSelectionLength()).compareTo(train.getKilometer()) > 0) {
- return route;
- }
- if (train.getDirection() == DirectionEnum.DOWN && start.getStartKilometer().compareTo(train.getKilometer()) >= 0 && end.getStartKilometer().add(end.getSelectionLength()).compareTo(train.getKilometer()) < 0) {
- return route;
- }
- }
- return null;
- }
- }
|