|  |  | 
 |  |  | 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); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } |