|  |  |  | 
|---|
|  |  |  | package com.zy.acs.fake.service; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.zy.acs.fake.config.RedisProperties; | 
|---|
|  |  |  | import com.zy.acs.fake.domain.DynamicNode; | 
|---|
|  |  |  | import com.zy.acs.framework.common.Cools; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.core.io.ClassPathResource; | 
|---|
|  |  |  | import org.springframework.core.io.Resource; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  | import org.springframework.util.StopWatch; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.io.BufferedReader; | 
|---|
|  |  |  | import java.io.File; | 
|---|
|  |  |  | import java.io.InputStream; | 
|---|
|  |  |  | import java.io.InputStreamReader; | 
|---|
|  |  |  | import java.nio.file.Files; | 
|---|
|  |  |  | import java.nio.file.StandardCopyOption; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MapDataDispatcher mapDataDispatcher; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisProperties redisProperties; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized void unlockPath0(String agvNo, String codeData) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Resource resource = new ClassPathResource("unlock.py"); | 
|---|
|  |  |  | File tempScript = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | InputStream is = resource.getInputStream(); | 
|---|
|  |  |  | tempScript = File.createTempFile("unlock", ".py"); | 
|---|
|  |  |  | tempScript.deleteOnExit(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Files.copy(is, tempScript.toPath(), StandardCopyOption.REPLACE_EXISTING); | 
|---|
|  |  |  | tempScript.setExecutable(true); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ProcessBuilder processBuilder = new ProcessBuilder( | 
|---|
|  |  |  | "python" | 
|---|
|  |  |  | , tempScript.getAbsolutePath() | 
|---|
|  |  |  | , redisProperties.getHost() | 
|---|
|  |  |  | , redisProperties.getPassword() | 
|---|
|  |  |  | , String.valueOf(redisProperties.getPort()) | 
|---|
|  |  |  | , String.valueOf(redisProperties.getIndex()) | 
|---|
|  |  |  | , agvNo | 
|---|
|  |  |  | , codeData | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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 (Exception e) { | 
|---|
|  |  |  | log.error("MapService.unlockPath", e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public synchronized void unlockPath(String agvNo, String codeData) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | long startTime = System.currentTimeMillis(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Cools.isEmpty(agvNo, codeData)) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DynamicNode dynamicNode = dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]]; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer serial = dynamicNode.getSerial(); | 
|---|
|  |  |  | long time = dynamicNode.getTime(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<String> resetCodeList = new ArrayList<>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (int i = 0; i < dynamicMatrix.length; i++) { | 
|---|
|  |  |  | for (int j = 0; j < dynamicMatrix[i].length; j++) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (i == codeMatrixIdx[0] && j == codeMatrixIdx[1]) { continue; } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DynamicNode node = dynamicMatrix[i][j]; | 
|---|
|  |  |  | if (node.getVehicle().equals(agvNo) && node.getSerial() < serial) { | 
|---|
|  |  |  | resetCodeList.add(codeMatrix[i][j]); | 
|---|
|  |  |  | if (node.getVehicle().equals(agvNo)) { | 
|---|
|  |  |  | if (node.getSerial() < serial || node.getTime() != time) { | 
|---|
|  |  |  | resetCodeList.add(codeMatrix[i][j]); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | mapDataDispatcher.clearDynamicMatrixByCodeList(lev, resetCodeList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | log.info("解锁路径函数花费时间为:{}毫秒......", System.currentTimeMillis() - startTime); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("TrafficService.unlockPath", e); | 
|---|
|  |  |  | log.error("MapService.unlockPath", e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|