| | |
| | | @Service |
| | | public class CommonService { |
| | | |
| | | private static final long OUT_STATION_ROUTE_CACHE_SECONDS = 300L; |
| | | private static final long OUT_STATION_ROUTE_CACHE_SECONDS = 60 * 60 * 24 * 7; |
| | | |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | |
| | | stationList = basDualCrnp.getInStationList$(); |
| | | } |
| | | |
| | | Integer cachedTargetStationId = resolveCachedInStationId(findCrnNoResult, sourceStationId, stationList); |
| | | if (cachedTargetStationId != null) { |
| | | return cachedTargetStationId; |
| | | } |
| | | |
| | | Integer targetStationId = null; |
| | | for (StationObjModel stationObjModel : stationList) { |
| | | try { |
| | | List<NavigateNode> navigateNodes = navigateUtils.calcReachablePathByStationId(sourceStationId, stationObjModel.getStationId()); |
| | | if(!navigateNodes.isEmpty()) { |
| | | targetStationId = stationObjModel.getStationId(); |
| | | cacheInStationId(findCrnNoResult, sourceStationId, targetStationId); |
| | | break; |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 入库路径搜索同样代价较高,只缓存已确认可达的目标站点结果,并通过 TTL 限制陈旧风险。 |
| | | */ |
| | | private Integer resolveCachedInStationId(FindCrnNoResult findCrnNoResult, |
| | | Integer sourceStationId, |
| | | List<StationObjModel> stationList) { |
| | | if (findCrnNoResult == null || findCrnNoResult.getCrnType() == null |
| | | || findCrnNoResult.getCrnNo() == null || sourceStationId == null |
| | | || stationList == null || stationList.isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | Object cacheValue = redisUtil.get(buildInStationRouteCacheKey(findCrnNoResult, sourceStationId)); |
| | | if (cacheValue == null) { |
| | | return null; |
| | | } |
| | | |
| | | Integer cachedStationId = parseInteger(cacheValue); |
| | | if (cachedStationId == null) { |
| | | return null; |
| | | } |
| | | |
| | | for (StationObjModel stationObjModel : stationList) { |
| | | if (stationObjModel != null && cachedStationId.equals(stationObjModel.getStationId())) { |
| | | return cachedStationId; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private void cacheInStationId(FindCrnNoResult findCrnNoResult, |
| | | Integer sourceStationId, |
| | | Integer targetStationId) { |
| | | if (findCrnNoResult == null || findCrnNoResult.getCrnType() == null |
| | | || findCrnNoResult.getCrnNo() == null || sourceStationId == null |
| | | || targetStationId == null) { |
| | | return; |
| | | } |
| | | redisUtil.set(buildInStationRouteCacheKey(findCrnNoResult, sourceStationId), |
| | | targetStationId, |
| | | OUT_STATION_ROUTE_CACHE_SECONDS); |
| | | } |
| | | |
| | | private String buildInStationRouteCacheKey(FindCrnNoResult findCrnNoResult, Integer sourceStationId) { |
| | | return RedisKeyType.IN_STATION_ROUTE_CACHE.key |
| | | + findCrnNoResult.getCrnType().name() |
| | | + "_" |
| | | + findCrnNoResult.getCrnNo() |
| | | + "_" |
| | | + sourceStationId; |
| | | } |
| | | |
| | | /** |
| | | * 出库路径搜索代价较高,只缓存已确认可达的站点结果,并通过 TTL 控制陈旧风险。 |
| | | */ |
| | | private Integer resolveCachedOutStationId(FindCrnNoResult findCrnNoResult, |