package com.zt.life.modules.mainPart.taskReliability.controller; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; 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; 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.dto.*; 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; 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.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; /** * simulat_assess * * @author zt generator * @since 1.0.0 2024-03-20 */ @RestController @RequestMapping("/taskReliability/SimulatAssess/") @Api(tags = "simulat_assess") public class SimulatAssessController { private static final Logger logger = LoggerFactory.getLogger(SimulatAssessController.class); @Autowired private RedisTemplate redisTemplate; @Autowired private SimulatAssessService simulatAssessService; @GetMapping("{id}") @ApiOperation("信息") public Result get(@PathVariable("id") Long id) { SimulatAssess data = simulatAssessService.get(id); return Result.ok(data); } @GetMapping("getSimulatList") @ApiOperation("信息") public Result> getSimulatList(Long taskModelId) { List data = simulatAssessService.getList(taskModelId); return Result.ok(data); } @GetMapping("getSimulatParams") @ApiOperation("信息") public Result getSimulatParams(Long id, Long taskModelId) { SimulatAssess data = simulatAssessService.getParams(id, taskModelId); return Result.ok(data); } @GetMapping("verify") public Result verify(Long taskId) { String result = simulatAssessService.verify(taskId); result = result.replaceAll("\n", "
"); return Result.ok(result); } @PostMapping("analyze") public Result analyze(@RequestBody SimulatAssess simulatAssess) { //效验数据 // Result result = pythonLib.callPython(simulatAssess); List result = simulatAssessService.simulateChecK(simulatAssess); if (result != null) { return Result.ok(result); } Boolean result2 = simulatAssessService.simulate(simulatAssess); // Boolean result2 = simulatAssessService.mySimulate(simulatAssess); if (result2) return Result.ok(); else 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 process(@ApiIgnore @QueryParam QueryFilter queryFilter) { List page = simulatAssessService.process(queryFilter); return PageResult.ok(page); } @PostMapping("getResultXML") public Result getResultXML(@RequestBody SimulatAssess simulatAssess) { SimulaDataDto data = simulatAssessService.getResultXML(simulatAssess); return Result.ok(data); } @PostMapping("getResultData") public Result getData(@RequestBody SimulatAssess simulatAssess) { SimulaDataDto data = simulatAssessService.getResultData(simulatAssess); return Result.ok(data); } @GetMapping("getStatus") public Result getTimeDiagram(Long productId, Long taskId, Long fzId, double smallWidth, double minPointNum) { TimeDiagramDto data = simulatAssessService.getTimeDiagram(productId, taskId, fzId, smallWidth, minPointNum); return Result.ok(data); } @GetMapping("getDiagram") @ApiOperation("查询流程图") @LogOperation("查询流程图") public Result getDiagram(String projectId, String diagramId, String showType, String isShow, String digramParams, String majorId, Integer winWidth, Integer winHeight) throws Exception { if (StringUtils.isBlank(diagramId)) diagramId = projectId; TimeDiagram diagram = simulatAssessService.getDiagram(projectId, diagramId, showType, isShow, digramParams, majorId, winWidth, winHeight); return Result.ok(diagram); } @PutMapping("saveDiagram") @ApiOperation("查询流程图") @LogOperation("查询流程图") public Result saveDiagram(@RequestBody TimeDiagram diagram) { // 效验数据 //ValidatorUtils.validateEntity(project.getProject(), UpdateGroup.class, DefaultGroup.class); if (diagram.getConfigChange() == null) diagram.setConfigChange(0); diagram.setSaveStatus(2); simulatAssessService.updateDiagram(diagram); //simulatAssessService.combineDiagram(diagram); return Result.ok(); } @GetMapping("getCalcProgress") public Result getCalcProgress(@RequestParam("taskList[]") Long[] taskList) { Integer progress = 0; String progress2 = ""; String key = null; if (taskList.length == 1) { 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) { 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); 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; } 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") public Result> getReliabilityWeakness(Long fzId, Long taskId, Long productId) { List data = simulatAssessService.getReliabilityWeakness(fzId, taskId, productId); return Result.ok(data); } @GetMapping("SchemeCompar") public Result SchemeCompar(@RequestParam("taskList[]") String[] taskList, Long showProductId, Integer samplPeriod, Integer simulatFrequency) { SimulatResult data = simulatAssessService.SchemeCompar(taskList, showProductId, samplPeriod, simulatFrequency); return Result.ok(data); } @GetMapping("getEcharts") public Result getEcharts(@RequestParam("taskList[]") String[] taskList, Long showProductId) { SchemeComparDto data = simulatAssessService.getEcharts(taskList, showProductId); return Result.ok(data); } @GetMapping("killProcess") public Result 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(); } @GetMapping("downloadXml") public void downloadXml(HttpServletRequest request, HttpServletResponse response, String type,Long id,Integer xml) { simulatAssessService.downloadXml(request, response,type,id,xml); } @PutMapping @ApiOperation("修改") @LogOperation("修改") public Result update(@RequestBody SimulatAssess simulatAssess) { //效验数据 ValidatorUtils.validateEntity(simulatAssess, UpdateGroup.class, DefaultGroup.class); simulatAssessService.update(simulatAssess); return Result.ok(); } @DeleteMapping @ApiOperation("删除") @LogOperation("删除") public Result delete(@RequestBody Long[] ids) { //效验数据 AssertUtils.isArrayEmpty(ids, "id"); simulatAssessService.delete(ids); return Result.ok(); } }