From 723e341c1872a5a34fd5107b8231f209ae860ac3 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期六, 09 十一月 2024 16:20:13 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/floyd/FloydNavigateService.java | 77 +++++++++++++++++++++++++------------- 1 files changed, 51 insertions(+), 26 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/floyd/FloydNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/floyd/FloydNavigateService.java index 0e99caf..1051454 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/floyd/FloydNavigateService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/floyd/FloydNavigateService.java @@ -1,7 +1,13 @@ package com.zy.acs.manager.core.service.floyd; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.acs.common.constant.RedisConstant; +import com.zy.acs.common.utils.RedisSupport; +import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.exception.BusinessException; +import com.zy.acs.manager.core.service.astart.MapDataDispatcher; import com.zy.acs.manager.manager.entity.Code; import com.zy.acs.manager.manager.entity.CodeGap; import com.zy.acs.manager.manager.entity.Route; @@ -26,6 +32,8 @@ public class FloydNavigateService { public static final double INF = 999999.0; + + private final RedisSupport redis = RedisSupport.defaultRedisSupport; @Autowired private CodeService codeService; @@ -67,41 +75,58 @@ @SuppressWarnings("all") @PostConstruct public void generateMatrix() { - log.info("銆怓LOYD銆戞鍦ㄨ绠楃煩闃垫暟鎹�......"); - List<Code> codeList = codeService.list(new LambdaQueryWrapper<Code>().eq(Code::getStatus, 1).eq(Code::getDeleted, false)); + Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV; - int size = codeList.size(); + String floydHeaderMatrixStr = redis.getValue(RedisConstant.MAP_FLOYD_MATRIX_HEADER_FLAG, String.valueOf(lev)); + String floydPathMatrixStr = redis.getValue(RedisConstant.MAP_FLOYD_MATRIX_PATH_FLAG, String.valueOf(lev)); + String floydMatrixStr = redis.getValue(RedisConstant.MAP_FLOYD_MATRIX_FLAG, String.valueOf(lev)); - matrixHeader = new ArrayList<>(size); - adjacencyMatrix = new Double[size][size]; - pathMatrix = new int[size][size]; + if (!Cools.isEmpty(floydMatrixStr) && !Cools.isEmpty(floydPathMatrixStr) && !Cools.isEmpty(floydHeaderMatrixStr)) { + this.matrixHeader = JSON.parseObject(floydHeaderMatrixStr, new TypeReference<ArrayList<Long>>() {}); + this.pathMatrix = JSON.parseObject(floydPathMatrixStr, int[][].class); + this.floydMatrix = JSON.parseObject(floydMatrixStr, Double[][].class); + } else { - for (int i = 0; i < size; i++) { - Code startCode = codeList.get(i); - matrixHeader.add(startCode.getId()); - for (int j = 0; j < size; j++) { - Code endCode = codeList.get(j); - Route route = routeService.findByCodeOfBoth(startCode.getId(), endCode.getId()); - CodeGap codeGap = codeGapService.findByCodeOfBoth(startCode.getId(), endCode.getId()); + log.info("銆怓LOYD銆戞鍦ㄨ绠楃煩闃垫暟鎹�......"); + List<Code> codeList = codeService.list(new LambdaQueryWrapper<Code>().eq(Code::getStatus, 1).eq(Code::getDeleted, false)); - double distance = INF; - int path = -1; + int size = codeList.size(); - if (null != route && null != codeGap && codeGap.getDistance() > 0) { - if (i != j) { - distance = codeGap.getDistance(); + matrixHeader = new ArrayList<>(size); + adjacencyMatrix = new Double[size][size]; + pathMatrix = new int[size][size]; + + for (int i = 0; i < size; i++) { + Code startCode = codeList.get(i); + matrixHeader.add(startCode.getId()); + for (int j = 0; j < size; j++) { + Code endCode = codeList.get(j); + Route route = routeService.findByCodeOfBoth(startCode.getId(), endCode.getId()); + CodeGap codeGap = codeGapService.findByCodeOfBoth(startCode.getId(), endCode.getId()); + + double distance = INF; + int path = -1; + + if (null != route && null != codeGap && codeGap.getDistance() > 0) { + if (i != j) { + distance = codeGap.getDistance(); + } + path = i; } - path = i; + + + adjacencyMatrix[i][j] = distance; + + pathMatrix[i][j] = path; } - - - adjacencyMatrix[i][j] = distance; - - pathMatrix[i][j] = path; } - } - floydMatrix = this.floydAlgorithm(adjacencyMatrix); + floydMatrix = this.floydAlgorithm(adjacencyMatrix); + + redis.setValue(RedisConstant.MAP_FLOYD_MATRIX_HEADER_FLAG, String.valueOf(lev), JSON.toJSONString(matrixHeader)); + redis.setValue(RedisConstant.MAP_FLOYD_MATRIX_PATH_FLAG, String.valueOf(lev), JSON.toJSONString(pathMatrix)); + redis.setValue(RedisConstant.MAP_FLOYD_MATRIX_FLAG, String.valueOf(lev), JSON.toJSONString(floydMatrix)); + } } -- Gitblit v1.9.1