modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/PythonResult.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
starter/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
web/packages/views/pages/generator.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
modules/mainPart/src/main/java/com/zt/life/modules/mainPart/async/PythonLib.java
New file @@ -0,0 +1,102 @@ package com.zt.life.modules.mainPart.async; import com.alibaba.fastjson.JSONObject; import com.zt.common.servlet.Result; import com.zt.life.modules.mainPart.taskReliability.model.PythonResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; @Component public class PythonLib { private static final Logger logger = LoggerFactory.getLogger(PythonLib.class); @Value("${spring.redis.host}") private String redisHost; @Value("${spring.redis.port}") private String redisPort; private Long taskId = 123L; private String taskFlag = "relia"; @Autowired private RedisTemplate redisTemplate; public Result callPython() { Result result = null; InputStream is = null; BufferedReader br = null; try { Process process = null; String command = "python D:\\work\\python\\relia_calc.py"; command += " " + redisHost + " " + redisPort; command += " " + taskFlag + " " + taskId.toString(); logger.info("cmd命令为:" + command); if(System.getProperty("os.name").toLowerCase().indexOf("windows") > -1){ process = Runtime.getRuntime().exec(new String[]{"cmd", "/c", command}); }else if(System.getProperty("os.name").toLowerCase().indexOf("linux") > -1){ process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command}); }else{ throw new Exception("暂不支持该操作系统,进行启动python计算!"); } is = process.getInputStream(); // 以命令行方式调用python时,返回的结果是GBK编码的,而非utf-8 br = new BufferedReader(new InputStreamReader(is,"gb2312")); String line = br.readLine(); logger.info("python返回结果:" + line); int exitCode = process.waitFor(); if (exitCode == 0) { logger.info("启动python计算成功"); if (line != null) { PythonResult rtn = JSONObject.parseObject(line, PythonResult.class); if ("0".equals(rtn.getCode())) { result = Result.ok(); } else { String errorMsg = rtn.getErrorMsg(); throw new RuntimeException("启动python计算失败: errorMsg=" + errorMsg); } } } else { logger.error("启动python计算失败: exitCode=" + exitCode); throw new RuntimeException("启动python计算失败: exitCode=" + exitCode); } } catch (Exception e) { logger.error("启动python计算时发生Exception:", e); e.printStackTrace(); result = Result.error(e.getMessage()); } finally { if (is == null) { try { is.close(); } catch (Exception e) { e.printStackTrace(); } } if (br == null) { try { br.close(); } catch (Exception e) { e.printStackTrace(); } } } return result; } public String getPythonCalcResult() { String key = taskFlag + taskId.toString(); logger.info("redis key:" + key); String progress = (String)redisTemplate.opsForValue().get(key); if (progress==null) progress = "0"; return progress; } } modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ModelLineController.java
@@ -12,6 +12,7 @@ import com.zt.common.validator.group.AddGroup; import com.zt.common.validator.group.DefaultGroup; import com.zt.common.validator.group.UpdateGroup; import com.zt.life.modules.mainPart.async.PythonLib; import com.zt.life.modules.mainPart.taskReliability.model.ModelLine; import com.zt.life.modules.mainPart.taskReliability.model.ModelRbd; import com.zt.life.modules.mainPart.taskReliability.service.ModelLineService; @@ -42,16 +43,15 @@ @Autowired private ModelLineService modelLineService; // @Autowired // private PythonLib pythonLib; @Autowired private PythonLib pythonLib; /* @GetMapping("callPythonCalc") @ApiOperation("信息") public Result callPythonCalc() { pythonLib.callPython(); Result result = pythonLib.callPython(); return Result.ok(); return result; } @GetMapping("getPythonCalcResult") @@ -61,7 +61,6 @@ return Result.ok(result); } */ @GetMapping("page") @ApiOperation("分页") modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/PythonResult.java
New file @@ -0,0 +1,13 @@ package com.zt.life.modules.mainPart.taskReliability.model; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class PythonResult { @ApiModelProperty(value = "code") private String code; @ApiModelProperty(value = "errorMsg") private String errorMsg; } starter/src/main/resources/application.yml
@@ -17,10 +17,8 @@ datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver #url: jdbc:mysql://127.0.0.1:3306/csiczb?allowMultiQueries=true&hive.exec.orc.split.strategy=ETL&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 #url: jdbc:mysql://127.0.0.1:3306/test_project?allowMultiQueries=true&hive.exec.orc.split.strategy=ETL&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 url: jdbc:mysql://192.168.31.26:3366/reliability_simulat?allowMultiQueries=true&hive.exec.orc.split.strategy=ETL&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 #url: jdbc:mysql://127.0.0.1:3306/zhpt_djxl?serverTimezone=GMT&allowMultiQueries=true&hive.exec.orc.split.strategy=ETL&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 # url: jdbc:mysql://127.0.0.1:3305/reliability_simulat?allowMultiQueries=true&hive.exec.orc.split.strategy=ETL&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 username: root password: root #password: 123456 web/packages/views/pages/generator.vue
@@ -10,6 +10,11 @@ <el-button @click="getTableInfo()">查询</el-button> </el-form-item> </el-form> <el-form> <el-button type="primary" @click="callPythonCalc()">启动python计算</el-button> <!-- <el-button type="primary" @click="getPythonCalcResult()">获取python计算进度</el-button>--> <el-tag>仿真进度:{{progress}}%</el-tag> </el-form> <el-table :data="dataForm.tableData" height="320" stripe style="width: 100%"> <el-table-column prop="columnName" label="CODE"></el-table-column> <el-table-column prop="remarks" label="名称"> @@ -114,8 +119,9 @@ isExport: false, tableData: [], tableList:[] } }, progress: 0, timer: null, } }, @@ -151,6 +157,28 @@ this.getInfo() }, methods: { async callPythonCalc() { // 启动python计算 let res = await this.$http.get('/taskReliability/ModelLine/callPythonCalc') if (res.success) { this.$alert('启动python计算成功!') // 定时获取python计算进度 this.timer = setInterval(this.getPythonCalcResult, 5000) } }, async getPythonCalcResult() { // setTimeout(() => { let res = await this.$http.get('/taskReliability/ModelLine/getPythonCalcResult') if (res.success) { this.progress = res.data if (this.progress==='100') { clearInterval(this.timer) } } // }, 5000) }, // 获取信息 async getInfo() { let res = await this.$http.get(`/sys/generator/properties`)