jinglun-cloud
17 小时以前 1ef1063281497f32fcfa4f14b07d99399c0bb765
src/main/java/com/zy/core/utils/station/StationDispatchLoadSupport.java
@@ -24,6 +24,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -141,27 +142,49 @@
        try {
            List<NavigateNode> nodes = wrkMast == null
                    ? navigateUtils.calcByStationId(sourceStationId, targetStationId)
                    ? navigateUtils.calcOptimalPathByStationId(sourceStationId, targetStationId, null, null)
                    : calcOutboundNavigatePath(wrkMast, sourceStationId, targetStationId, pathLenFactor);
            if (nodes == null || nodes.isEmpty()) {
                return LoopHitResult.noHit();
            }
            for (NavigateNode node : nodes) {
                Integer stationId = getStationIdFromNode(node);
                if (stationId == null) {
                    continue;
                }
                Integer loopNo = loadGuardState.getStationLoopNoMap().get(stationId);
                if (loopNo != null) {
                    return new LoopHitResult(true, loopNo, stationId);
                }
            }
            return findPathLoopHitByNavigateNodes(nodes, loadGuardState);
        } catch (Exception ignore) {
            return LoopHitResult.noHit();
        }
    }
    public LoopHitResult findPathLoopHitByNavigatePath(List<Integer> navigatePath,
                                                       LoadGuardState loadGuardState) {
        if (navigatePath == null || navigatePath.isEmpty()) {
            return LoopHitResult.noHit();
        }
        if (loadGuardState == null || loadGuardState.getStationLoopNoMap().isEmpty()) {
            return LoopHitResult.noHit();
        }
        for (Integer stationId : navigatePath) {
            if (stationId == null) {
                continue;
            }
            Integer loopNo = loadGuardState.getStationLoopNoMap().get(stationId);
            if (loopNo != null) {
                return new LoopHitResult(true, loopNo, stationId);
            }
        }
        return LoopHitResult.noHit();
    }
    public LoopHitResult findPathLoopHitByNavigateNodes(List<NavigateNode> nodes,
                                                        LoadGuardState loadGuardState) {
        if (nodes == null || nodes.isEmpty()) {
            return LoopHitResult.noHit();
        }
        List<Integer> navigatePath = new ArrayList<>();
        for (NavigateNode node : nodes) {
            Integer stationId = getStationIdFromNode(node);
            if (stationId != null) {
                navigatePath.add(stationId);
            }
        }
        return findPathLoopHitByNavigatePath(navigatePath, loadGuardState);
    }
    public void saveLoopLoadReserve(Integer wrkNo, LoopHitResult loopHitResult) {
@@ -213,9 +236,9 @@
        Double normalizedFactor = normalizePathLenFactor(pathLenFactor);
        Integer currentTaskNo = wrkMast == null ? null : wrkMast.getWrkNo();
        if (currentTaskNo == null) {
            return navigateUtils.calcByStationId(sourceStationId, targetStationId, normalizedFactor);
            return navigateUtils.calcOptimalPathByStationId(sourceStationId, targetStationId, null, normalizedFactor);
        }
        return navigateUtils.calcByStationId(sourceStationId, targetStationId, currentTaskNo, normalizedFactor);
        return navigateUtils.calcOptimalPathByStationId(sourceStationId, targetStationId, currentTaskNo, normalizedFactor);
    }
    private Integer getStationIdFromNode(NavigateNode node) {