#
luxiaotao1123
2024-12-18 93d8a38f9fd0746b9ce6ac7541bf2b8b48f7c63c
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AvoidWaveCalculator.java
@@ -85,6 +85,26 @@
        });
    }
    private File pythonFile = null;
    private File loadPythonFile() {
        File scriptFile = null;
        try {
            Resource resource = new ClassPathResource("agv.py");
            InputStream is = resource.getInputStream();
            scriptFile = File.createTempFile("agv", ".py");
            scriptFile.deleteOnExit();
            Files.copy(is, scriptFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
            scriptFile.setExecutable(true);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return scriptFile;
    }
    public void calcWaveScope() {
        Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV;
        boolean lockAcquired = false;
@@ -102,76 +122,51 @@
            AgvModel agvModel = agvModelService.selectByType(AgvModelType.CTU_BOX_TRANSPORT_AGV.toString());    // can be optimized
            Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(agvModel.getDiameter(), MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR);
            long startTime = System.currentTimeMillis();
            Resource resource = new ClassPathResource("agv.py");
            File tempScript = null;
            try {
                InputStream is = resource.getInputStream();
                tempScript = File.createTempFile("agv", ".py");
                tempScript.deleteOnExit();
                Files.copy(is, tempScript.toPath(), StandardCopyOption.REPLACE_EXISTING);
                tempScript.setExecutable(true);
                ProcessBuilder processBuilder = new ProcessBuilder(
                        "python" // 或者 "python3" 取决于系统配置
                        , tempScript.getAbsolutePath()
                        , String.valueOf(avoidDistance)
                        , redisProperties.getHost()
                        , redisProperties.getPassword()
                        , String.valueOf(redisProperties.getPort())
                        , String.valueOf(redisProperties.getIndex())
                );
                processBuilder.redirectErrorStream(true);
//            File file = resource.getFile();
//            ProcessBuilder processBuilder = new ProcessBuilder(
//                    "python"
//                    , file.getAbsolutePath()
//                    , String.valueOf(avoidDistance)
//                    , redisProperties.getHost()
//                    , redisProperties.getPassword()
//                    , String.valueOf(redisProperties.getPort())
//                    , String.valueOf(redisProperties.getIndex())
//            );
//            processBuilder.redirectErrorStream(true);
                Process process = processBuilder.start();
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line;
                StringBuilder builder = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
                int exitCode = process.waitFor();
                if (exitCode != 0) {
                    log.error("Python script exited with error code: {}", exitCode);
                    log.error("python error:{}", builder.toString());
                    return;
                }
                reader.close();
                if (builder.length() <= 0) {
                    return;
                }
                String result = builder.toString();
                if (!Cools.isEmpty(result)) {
                    if (!"1".equals(result)) {
                        log.error("Fail python");
                    }
                }
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            if (null == pythonFile) {
                pythonFile = loadPythonFile();
            }
            log.error("python finish {}", System.currentTimeMillis() - startTime);
            ProcessBuilder processBuilder = new ProcessBuilder(
                    "python" // 或者 "python3" 取决于系统配置
                    , pythonFile.getAbsolutePath()
                    , String.valueOf(avoidDistance)
                    , redisProperties.getHost()
                    , redisProperties.getPassword()
                    , String.valueOf(redisProperties.getPort())
                    , String.valueOf(redisProperties.getIndex())
            );
            processBuilder.redirectErrorStream(true);
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            StringBuilder builder = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            int exitCode = process.waitFor();
            if (exitCode != 0) {
                log.error("Python script exited with error code: {}", exitCode);
                log.error("python error:{}", builder.toString());
                return;
            }
            reader.close();
            if (builder.length() <= 0) {
                return;
            }
            String result = builder.toString();
            if (!Cools.isEmpty(result)) {
                if (!"1".equals(result)) {
                    log.error("Failed to call python");
                }
            }
//            log.error("python finish {}", System.currentTimeMillis() - startTime);
            // java
//            String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(lev);