From 85e8c7af0a03795490e1bba458018fe9e90499f8 Mon Sep 17 00:00:00 2001 From: xyc <jc_xiong@hotmail.com> Date: 星期一, 28 十月 2024 13:08:14 +0800 Subject: [PATCH] 新增可靠性仿真评估算法库进程管理功能 --- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java | 21 ++ modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/ProcessUtils.java | 78 +++++++++++ modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/Kernel32.java | 9 + modules/mainPart/pom.xml | 5 web/src/views/modules/taskReliability/Process.vue | 87 ++++++++++++ modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java | 97 ++++++++++++- modules/mainPart/src/main/resources/mapper/taskReliability/SimulatAssessDao.xml | 11 + web/src/views/modules/taskReliability/SchemeCompar.vue | 35 ++-- web/src/views/modules/taskReliability/SimulatAssess.vue | 48 ++++-- modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/SimulatAssessDao.java | 2 modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java | 24 ++ 11 files changed, 370 insertions(+), 47 deletions(-) diff --git a/modules/mainPart/pom.xml b/modules/mainPart/pom.xml index 19f2f48..98ed760 100644 --- a/modules/mainPart/pom.xml +++ b/modules/mainPart/pom.xml @@ -47,6 +47,11 @@ <artifactId>batik-all</artifactId> <version>1.16</version> </dependency> + <dependency> + <groupId>net.java.dev.jna</groupId> + <artifactId>jna</artifactId> + <version>4.1.0</version> + </dependency> </dependencies> <!-- pom.xml --> diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java index ee2d484..f0cc214 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/SimulatAssessController.java @@ -6,6 +6,11 @@ import cn.hutool.json.XML; import com.fasterxml.jackson.databind.ObjectMapper; import com.zt.common.annotation.LogOperation; +import com.zt.common.annotation.QueryParam; +import com.zt.common.constant.Constant; +import com.zt.common.db.query.QueryFilter; +import com.zt.common.exception.RenException; +import com.zt.common.servlet.PageResult; import com.zt.common.servlet.Result; import com.zt.common.validator.AssertUtils; import com.zt.common.validator.ValidatorUtils; @@ -16,7 +21,10 @@ import com.zt.life.modules.mainPart.taskReliability.model.*; import com.zt.life.modules.mainPart.taskReliability.service.SimulatAssessService; import com.zt.life.modules.mainPart.taskReliability.service.TaskService; +import com.zt.life.modules.mainPart.utils.OSUtils.ProcessUtils; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -26,6 +34,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; import java.io.File; import java.io.FileInputStream; @@ -95,8 +104,21 @@ if (result2) return Result.ok(); else - return Result.error(); + return Result.error("绠楁硶搴撹绠楀け璐ワ紒"); } + + @GetMapping("process") + @ApiOperation("鑾峰彇绠楁硶搴撹繘绋嬩俊鎭�") + @ApiImplicitParams({ + @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT), + @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT), + @ApiImplicitParam(name = "isAlive", value = "瀛樻椿", dataType = Constant.QT.Boolean), + }) + public PageResult<SimulatAssess> process(@ApiIgnore @QueryParam QueryFilter queryFilter) { + List<SimulatAssess> page = simulatAssessService.process(queryFilter); + return PageResult.ok(page); + } + @PostMapping("getResultXML") public Result<SimulaDataDto> getResultXML(@RequestBody SimulatAssess simulatAssess) { @@ -146,26 +168,77 @@ String progress2 = ""; String key = null; if (taskList.length == 1) { - key = taskList[0].toString() + simulatAssessService.RELIA_SIM_TASK_TYPE_PROGRESS; + Long taskId = taskList[0]; + SimulatAssess simulatAssess = simulatAssessService.get(taskId); + boolean isProcessAlive = ProcessUtils.isProcessAlive(simulatAssess.getPid()); + key = taskId.toString() + simulatAssessService.RELIA_SIM_TASK_TYPE_PROGRESS; progress2 = (String) redisTemplate.opsForValue().get(key); + if (progress2 == null) progress2 = "0"; progress = Integer.parseInt(progress2); if (progress == null) progress = 0; + updateSimulateAssess(simulatAssess, isProcessAlive, progress); + if (progress < 100 && !isProcessAlive) { + logger.error("绠楁硶搴撹繘绋嬪湪璁$畻閫斾腑寮傚父缁堟浜嗭細taskId="+taskId+" pid="+simulatAssess.getPid()+" progress="+progress); + simulatAssessService.deleteSimInfoInRedis(taskId); + return Result.error("绠楁硶搴撹繘绋嬪湪璁$畻閫斾腑寮傚父缁堟浜嗭紒"); + } if (progress == 100) { - //simulatAssessService.deleteSimInfoInRedis(taskId); + try { + Thread.sleep(1000); + } catch (Exception e) { + e.printStackTrace(); + } + isProcessAlive = ProcessUtils.isProcessAlive(simulatAssess.getPid()); + simulatAssess.setProcessIsAlive(isProcessAlive); + simulatAssessService.update(simulatAssess); +// simulatAssessService.deleteSimInfoInRedis(taskId); } } else { for (Long taskId : taskList) { + int progTmp = 0; + SimulatAssess simulatAssess = simulatAssessService.get(taskId); + boolean isProcessAlive = ProcessUtils.isProcessAlive(simulatAssess.getPid()); key = taskId.toString() + simulatAssessService.RELIA_SIM_TASK_TYPE_PROGRESS; progress2 = (String) redisTemplate.opsForValue().get(key); - progress = progress + Integer.parseInt(progress2); + if (progress2 == null) progress2 = "0"; + progTmp = Integer.parseInt(progress2); + updateSimulateAssess(simulatAssess, isProcessAlive, progTmp); + if (progTmp < 100 && !isProcessAlive) { + logger.error("绠楁硶搴撹繘绋嬪湪璁$畻閫斾腑寮傚父缁堟浜嗭細taskId="+taskId+" pid="+simulatAssess.getPid()+" progress="+progTmp); +// simulatAssessService.deleteSimInfoInRedis(taskId); + return Result.error("绠楁硶搴撹繘绋嬪湪璁$畻閫斾腑寮傚父缁堟浜嗭紒"); + } + if (progTmp == 100) { + try { + Thread.sleep(500); + } catch (Exception e) { + e.printStackTrace(); + } + isProcessAlive = ProcessUtils.isProcessAlive(simulatAssess.getPid()); + simulatAssess.setProcessIsAlive(isProcessAlive); + simulatAssessService.update(simulatAssess); +// simulatAssessService.deleteSimInfoInRedis(taskId); + } + progress = progress + progTmp; } progress = progress / taskList.length; - if (progress == 100) { - //simulatAssessService.deleteSimInfoInRedis(taskId); - } } return Result.ok(progress.toString()); + } + + private void updateSimulateAssess(SimulatAssess simulatAssess, boolean isProcessAlive, int progress) { + if (!isProcessAlive) { + simulatAssess.setProcessIsAlive(false); + simulatAssess.setProgress(progress); + simulatAssess.setProcessEndTime(new Date()); + simulatAssessService.update(simulatAssess); + } else { + if (simulatAssess.getProgress() != progress) { + simulatAssess.setProgress(progress); + simulatAssessService.update(simulatAssess); + } + } } @GetMapping("ReliabilityWeakness") @@ -186,6 +259,16 @@ return Result.ok(data); } + @GetMapping("killProcess") + public Result<SchemeComparDto> killProcess(@RequestParam("taskId") Long taskId) { + SimulatAssess simulatAssess = simulatAssessService.get(taskId); + ProcessUtils.killProcess(simulatAssess.getPid()); + boolean isProcessAlive = ProcessUtils.isProcessAlive(simulatAssess.getPid()); + simulatAssess.setProcessIsAlive(isProcessAlive); + simulatAssessService.update(simulatAssess); + return Result.ok(); + } + @PutMapping @ApiOperation("淇敼") @LogOperation("淇敼") diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/SimulatAssessDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/SimulatAssessDao.java index eb69acb..5fd96a5 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/SimulatAssessDao.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/SimulatAssessDao.java @@ -47,4 +47,6 @@ List<verifyDto> getNode(Long modelId); Integer getVoteNum(Long id); + + List<SimulatAssess> getProcessList(Map<String, Object> params); } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java index 061828e..730e7c9 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/SimulatAssess.java @@ -2,9 +2,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import com.zt.common.constant.Bool; import com.zt.common.entity.BusiEntity; -import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -23,9 +21,11 @@ public class SimulatAssess extends BusiEntity { private static final long serialVersionUID = 1L; - @ApiModelProperty(value = "浜у搧鑺傜偣ID") private Long productId; + + @ApiModelProperty(value = "鍚嶇О") + private String name; @ApiModelProperty(value = "鎬讳綋浠诲姟妯″瀷ID") private Long taskModelId; @@ -51,5 +51,21 @@ @ApiModelProperty(value = "浼犵粰绠楁硶搴撶殑xml") private String xml; - private String name; + @ApiModelProperty(value = "绠楁硶搴撹繘绋婭D") + private Long pid; + + @ApiModelProperty(value = "绠楁硶搴撹繘绋嬫槸鍚﹀瓨娲�") + private Boolean processIsAlive; + + @ApiModelProperty(value = "鍚姩鍛戒护琛�") + private String commandLine; + + @ApiModelProperty(value = "璁$畻杩涘害") + private Integer progress; + + @ApiModelProperty(value = "绠楁硶搴撹繘绋嬪惎鍔ㄦ椂闂�") + private Date processStartTime; + + @ApiModelProperty(value = "绠楁硶搴撹繘绋嬬粓姝㈡椂闂�") + private Date processEndTime; } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java index 0829c56..8f6baca 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/SimulatAssessService.java @@ -5,6 +5,7 @@ import cn.hutool.json.XML; import com.fasterxml.jackson.databind.ObjectMapper; import com.spire.pdf.tables.table.convert.Convert; +import com.zt.common.db.query.QueryFilter; import com.zt.common.exception.RenException; import com.zt.common.service.BaseService; import com.zt.common.servlet.Result; @@ -24,6 +25,7 @@ import com.zt.life.modules.mainPart.taskReliability.dto.TaskPhaseConstraintDto; import com.zt.life.modules.mainPart.taskReliability.model.*; import com.zt.life.modules.mainPart.utils.GetStringSpace; +import com.zt.life.modules.mainPart.utils.OSUtils.ProcessUtils; import io.swagger.models.auth.In; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -115,7 +117,6 @@ Map<Integer, String> templetsStrMap2 = new HashMap<>(); private JSONObject xmlJSONObj; - /** * 鍒嗛〉鏌ヨ @@ -655,7 +656,6 @@ return result; } - @Transactional(rollbackFor = Exception.class) public Boolean simulate(SimulatAssess simulatAssess) { Boolean result = false; // 2. 缁勮渚涚畻娉曞簱浠跨湡鐨勬ā鍨媥ml @@ -665,6 +665,11 @@ result = callReliaSimLib(simulatAssess); return result; + } + + public List<SimulatAssess> process(QueryFilter queryFilter) { + List<SimulatAssess> page = baseDao.getProcessList(queryFilter.getParams()); + return queryFilter.getPageList(page); } private Boolean callReliaSimLib(SimulatAssess simulatAssess) { @@ -690,6 +695,8 @@ } else { throw new RenException("鏆備笉鏀寔璇ユ搷浣滅郴缁燂紝杩涜鍚姩绠楁硶搴撹绠楋紒"); } + long pid = ProcessUtils.getProcessId(process); + logger.info("绠楁硶搴揚ID锛�" + pid); is = process.getInputStream(); // 浠ュ懡浠よ鏂瑰紡璋冪敤绠楁硶搴撴椂锛屾帴鍙g害瀹氳繑鍥炵殑缁撴灉鏄痷tf-8缂栫爜 br = new BufferedReader(new InputStreamReader(is, "utf-8")); @@ -700,6 +707,8 @@ ReliaSimLibResult rtn = com.alibaba.fastjson.JSONObject.parseObject(line, ReliaSimLibResult.class); if ("0".equals(rtn.getCode())) { logger.info("鍚姩鍙潬鎬т豢鐪熻瘎浼扮畻娉曞簱鎴愬姛銆�"); + newProcess(simulatAssess, pid, command); + update(simulatAssess); result = true; } else { String errorMsg = rtn.getErrorMsg(); @@ -730,6 +739,14 @@ return result; } + public void newProcess(SimulatAssess simulatAssess, long pid, String command) { + simulatAssess.setPid(pid); + simulatAssess.setCommandLine(command); + simulatAssess.setProcessIsAlive(true); + simulatAssess.setProcessStartTime(new Date()); + simulatAssess.setProgress(0); + } + private void setParamToRedis(SimulatAssess simulatAssess) { String key = simulatAssess.getId().toString() + RELIA_SIM_TASK_TYPE_SIMULATION; logger.info("redis key锛�" + key); diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/Kernel32.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/Kernel32.java new file mode 100644 index 0000000..f06c109 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/Kernel32.java @@ -0,0 +1,9 @@ +package com.zt.life.modules.mainPart.utils.OSUtils; + +import com.sun.jna.Library; +import com.sun.jna.Native; + +public interface Kernel32 extends Library{ + public static Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class); + public long GetProcessId(Long hProcess); +} \ No newline at end of file diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/ProcessUtils.java b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/ProcessUtils.java new file mode 100644 index 0000000..5249d08 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/mainPart/utils/OSUtils/ProcessUtils.java @@ -0,0 +1,78 @@ +package com.zt.life.modules.mainPart.utils.OSUtils; + +import com.zt.common.exception.RenException; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class ProcessUtils { + public static long getProcessId(Process process) { + long pid = -1; + java.lang.reflect.Field field = null; + try { + if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) { + field = process.getClass().getDeclaredField("handle"); + } else if (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1) { + field = process.getClass().getDeclaredField("pid"); + } else { + throw new RenException("鏆備笉鏀寔璇ユ搷浣滅郴缁燂細鑾峰彇杩涚▼鍙�"); + } + field.setAccessible(true); + pid = Kernel32.INSTANCE.GetProcessId((Long)field.get(process)); + } catch (Exception e) { + e.printStackTrace(); + } + + return pid; + } + + public static void killProcess(long pid) { + try { + Process process = null; + if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) { + process = Runtime.getRuntime().exec(new String[]{"cmd", "/c", "taskkill /PID "+pid+" /T /F"}); + } else if (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1) { + process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "kill -9 "+pid}); + } else { + throw new RenException("鏆備笉鏀寔璇ユ搷浣滅郴缁燂細缁堟杩涚▼锛�"); + } + int exitCode = process.waitFor(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static boolean isProcessAlive(long pid) { + boolean isAlive = false; + try { + // 鏍规嵁涓嶅悓鐨勬搷浣滅郴缁燂紝鏋勯�犱笉鍚岀殑鍛戒护 + String os = System.getProperty("os.name").toLowerCase(); + String command; + if (os.contains("win")) { + // Windows 绯荤粺 + command = "tasklist /FI \"PID eq " + pid + "\""; + } else { + // Unix-like 绯荤粺 + command = "ps -p " + pid; + } + + Process process = Runtime.getRuntime().exec(command); + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + + // 鍒ゆ柇杈撳嚭涓槸鍚﹀寘鍚繘绋嬩俊鎭� + while ((line = reader.readLine()) != null) { + if (line.contains(String.valueOf(pid))) { + isAlive = true; + break; + } + } + + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return isAlive; + } + +} diff --git a/modules/mainPart/src/main/resources/mapper/taskReliability/SimulatAssessDao.xml b/modules/mainPart/src/main/resources/mapper/taskReliability/SimulatAssessDao.xml index 870c6b1..7544e90 100644 --- a/modules/mainPart/src/main/resources/mapper/taskReliability/SimulatAssessDao.xml +++ b/modules/mainPart/src/main/resources/mapper/taskReliability/SimulatAssessDao.xml @@ -233,4 +233,15 @@ and vote_num is not null limit 1 </select> + + <select id="getProcessList" resultType="com.zt.life.modules.mainPart.taskReliability.model.SimulatAssess"> + select * + from simulat_assess + where IS_DELETE = 0 + and pid is not null + <if test="isAlive"> + and process_is_alive=1 + </if> + order by process_start_time desc + </select> </mapper> diff --git a/web/src/views/modules/taskReliability/Process.vue b/web/src/views/modules/taskReliability/Process.vue new file mode 100644 index 0000000..45ae396 --- /dev/null +++ b/web/src/views/modules/taskReliability/Process.vue @@ -0,0 +1,87 @@ +<template> + <zt-dialog ref="dialog" title="绠楁硶搴撹繘绋嬭鎯�" append-to-body column="3" @close="close" :editAble="false"> + <zt-table-wraper :dataForm="queryForm" ref="tableObj" v-slot="{ table }" + :page-size="20" :paging="true" + @dataLoaded="dataLoaded" + query-url="/taskReliability/SimulatAssess/process"> + <el-form :inline="true" :model="queryForm" @keyup.enter.native="table.query()"> + <el-form-item prop="isAlive" label-width="150px" style="margin-left: 20px"> + <el-checkbox v-model="queryForm.isAlive">鍙湅瀛樻椿</el-checkbox> + </el-form-item> + </el-form> + <el-table ref="table" v-adaptive="{bottomOffset:30}" height="100px" + style="font-size: 18px" + v-loading="table.dataLoading" + :data="table.dataList" + border + highlight-current-row + @selection-change="table.selectionChangeHandle"> + <el-table-column align="center" label="搴忓彿" prop="index" width="60"> + <template slot-scope="scope"> + <span v-html="indexFormat(scope.$index)"></span> + </template> + </el-table-column> + <el-table-column prop="pid" label="杩涚▼ID" align="center" width="100"/> + <el-table-column prop="processIsAlive" label="瀛樻椿鐘舵��" align="center" width="100"> + <template v-slot="{ row }"> + <span v-if="row.processIsAlive" style="">瀛樻椿</span> + <span v-else>缁堟</span> + </template> + </el-table-column> + <el-table-column prop="commandLine" label="鍚姩鍛戒护琛�" align="center"/> + <el-table-column prop="progress" label="浠跨湡杩涘害" align="center" width="100"/> + <el-table-column prop="processStartTime" label="鐢熸垚鏃堕棿" align="center" width="200"/> + <el-table-column prop="processEndTime" label="缁堟鏃堕棿" align="center" width="200"/> + <el-table-column width="150" class="han" align="center" :table="table" label="鎿嶄綔"> + <template v-slot="{ row }"> + <zt-table-button v-if="row.processIsAlive" style="font-size: 18px" type="warning" @click="killProcess(row.id)">寮哄埗缁堟</zt-table-button> + </template> + </el-table-column> + </el-table> + </zt-table-wraper> + </zt-dialog> +</template> + +<script> + + export default { + data() { + return { + queryForm: { + isAlive: false, + }, + } + }, + watch: { + 'queryForm.isAlive'() { + this.$refs.tableObj.query() + }, + }, + components: { + }, + mounted() { + this.$refs.tableObj.query() + }, + methods: { + init() { + }, + indexFormat(index) { + let page = this.$refs.tableObj.page + let limit = this.$refs.tableObj.limit + let indexs = limit * (page - 1) + index + 1 + return '<span>' + indexs + '</span>' + }, + async killProcess(id) { + if (id) { + let param = { + taskId: id + } + let res = await this.$http.get(`/taskReliability/SimulatAssess/killProcess`, {params: param}) + this.$refs.tableObj.query() + } + }, + }, + } +</script> +<style> +</style> diff --git a/web/src/views/modules/taskReliability/SchemeCompar.vue b/web/src/views/modules/taskReliability/SchemeCompar.vue index e255b9a..718307c 100644 --- a/web/src/views/modules/taskReliability/SchemeCompar.vue +++ b/web/src/views/modules/taskReliability/SchemeCompar.vue @@ -156,11 +156,11 @@ ProductModelTree, }, watch: { - percentage() { - if (this.percentage === 100) { - this.getEcharts(); - } - } + // percentage() { + // if (this.percentage === 100) { + // this.getEcharts(); + // } + // } }, methods: { onTreeSelected(data) { @@ -205,18 +205,20 @@ console.log(res.data) this.schemeList = res.data }, - getStroke() { - if (this.percentage < 100) { - let param = { - taskList: this.fzIdList - } - this.$http.get(`/taskReliability/SimulatAssess/getCalcProgress`, {params: param}).then( - res => { - if (res.data) { - this.percentage = parseFloat(res.data) - } + async getStroke() { + let param = { + taskList: this.fzIdList + } + let res = await this.$http.get(`/taskReliability/SimulatAssess/getCalcProgress`, {params: param}) + if (res.success) { + if (res.data) { + this.percentage = parseFloat(res.data) + if (this.percentage >= 100) { + clearInterval(this.timers) + this.percentage = 0 + await this.getEcharts(); } - ) + } } else { clearInterval(this.timers) this.percentage = 0 @@ -233,6 +235,7 @@ simulatFrequency: this.dataForm.simulatFrequency } console.log(this.dataForm.taskModelId, 'this.dataForm.taskModelId') + this.percentage = 0 let res = await this.$http.get('/taskReliability/SimulatAssess/SchemeCompar', {params: params}) console.log(res.data, "res") if (res.success) { diff --git a/web/src/views/modules/taskReliability/SimulatAssess.vue b/web/src/views/modules/taskReliability/SimulatAssess.vue index 915cb2e..de15fbc 100644 --- a/web/src/views/modules/taskReliability/SimulatAssess.vue +++ b/web/src/views/modules/taskReliability/SimulatAssess.vue @@ -24,6 +24,9 @@ <zt-form-item style="margin-left: 20px"> <zt-button @click="analyze()">浠跨湡鍒嗘瀽</zt-button> </zt-form-item> + <zt-form-item style="margin-left: 20px"> + <zt-button @click="displayProcess()">鏌ョ湅绠楁硶搴撹繘绋�</zt-button> + </zt-form-item> </el-form> <el-progress v-if="isShow" :percentage="percentage"></el-progress> <el-col :span="4"> @@ -55,18 +58,20 @@ <el-button type="primary" @click="dialogVisible = false">鍏� 闂�</el-button> </div> </el-dialog> + <Process ref="process"></Process> </div> </template> <script> import SimulatCurve from "./SimulatCurve"; import ProductModelTree from "../basicInfo/ProductModelTree"; + import Process from "./Process"; export default { data() { return { - timers: '', + timers: null, isSelect: false, isShow: false, percentage: 0, @@ -94,15 +99,16 @@ this.getProductList() }, watch: { - percentage() { - if (this.percentage === 100) { - this.$refs.SimulatCurve.initEcharts(this.dataForm); - } - } + // percentage() { + // if (this.percentage === 100) { + // this.$refs.SimulatCurve.initEcharts(this.dataForm); + // } + // } }, components: { ProductModelTree, SimulatCurve, + Process, }, methods: { @@ -141,18 +147,20 @@ console.log(res.data) this.taskList = res.data }, - getStroke() { - if (this.percentage < 100) { - let param = { - taskList: [this.dataForm.id] - } - this.$http.get(`/taskReliability/SimulatAssess/getCalcProgress`, {params: param}).then( - res => { - if (res.data) { - this.percentage = parseFloat(res.data) - } + async getStroke() { + let param = { + taskList: [this.dataForm.id] + } + let res = await this.$http.get(`/taskReliability/SimulatAssess/getCalcProgress`, {params: param}) + if (res.success) { + if (res.data) { + this.percentage = parseFloat(res.data) + if (this.percentage >= 100) { + clearInterval(this.timers) + this.percentage = 0 + this.$refs.SimulatCurve.initEcharts(this.dataForm); } - ) + } } else { clearInterval(this.timers) this.percentage = 0 @@ -164,9 +172,10 @@ this.isShow = true let result = await this.$http.get(`/basicInfo/TyProductModel/getUuid`) this.dataForm.id = result.data + this.percentage = 0 let res = await this.$http.post('/taskReliability/SimulatAssess/analyze', this.dataForm) if (res.success) { - console.log(res.data) + console.log(res.data, 'res.data') if (res.data && res.data.length > 0) { this.modelCheckResult = res.data this.dialogVisible = true @@ -174,6 +183,9 @@ this.timers = window.setInterval(this.getStroke, 1000) } } + }, + displayProcess() { + this.$refs.process.$refs.dialog.init() } } } -- Gitblit v1.9.1