modules/mainPart/src/main/java/com/zt/life/modules/mainPart/basicInfo/model/TaskReliabData.java
@@ -14,4 +14,5 @@ private Integer modelNum; private Integer simulatNum; private Integer testData; private Integer assessNum; } modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/controller/ReliabilityAssessController.java
@@ -43,15 +43,11 @@ @Autowired AssessItemDao assessItemDao; @GetMapping("page") @PostMapping("page") @ApiOperation("分页") @ApiImplicitParams({ @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING), @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), }) public Result<List<ReliabilityAssess>> page(@ApiIgnore @QueryParam QueryFilter queryFilter) { return Result.ok(null); public Result<List<ReliabilityAssess>> page(@RequestBody AssessResult assessResult) { List<ReliabilityAssess> list = reliabilityAssessService.page(assessResult); return Result.ok(list); } @PostMapping("importProductExcel") @@ -62,7 +58,6 @@ StringBuilder str = new StringBuilder(); ImportUtil.importResult(result, importResults, str); ImportUtil.ImportErrResult(result, importResults, str); } catch (Exception e) { e.printStackTrace(); } @@ -83,10 +78,10 @@ @PostMapping("assess") @ApiOperation("评定") @LogOperation("评定") public Result assess(@RequestBody AssessResult assessResult){ Result result = reliabilityAssessService.assess(assessResult); public Result<List<ReliabilityAssess>> assess(@RequestBody AssessResult assessResult){ List<ReliabilityAssess> list = reliabilityAssessService.assess(assessResult); return result; return Result.ok(list); } @GetMapping("getAssessDataList") modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/dao/ReliabilityAssessDao.java
@@ -21,4 +21,8 @@ List<XhProductModel> getProductPath(Long shipId); List<AssessItem> getAssessDataList(Long productId); List<ReliabilityAssess> getProductList(Long productId, Long itemId); Long getAssessId(Long itemId, Long productId, Long taskId); } modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/model/ReliabilityAssess.java
@@ -1,22 +1,42 @@ package com.zt.life.modules.mainPart.taskReliability.model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.zt.common.entity.BusiEntity; import com.zt.common.entity.TreeNode; import com.zt.life.modules.mainPart.basicInfo.model.TyProductModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.util.ArrayList; import java.util.List; @EqualsAndHashCode(callSuper = true) @Data @TableName("assess_data") public class ReliabilityAssess extends BusiEntity { public class ReliabilityAssess extends BusiEntity implements TreeNode<ReliabilityAssess> { private Double runTimes; private Integer runNum; private Integer failNum; private String assessResult; private Double assessResult; private Long itemId; private Long productId; private Long id; @TableField(exist = false) private String name; @TableField(exist = false) private Integer type; @TableField(exist = false) private Long pid; @ApiModelProperty(value = "子节点") @TableField(exist = false) private List<ReliabilityAssess> children = new ArrayList<>(); } modules/mainPart/src/main/java/com/zt/life/modules/mainPart/taskReliability/service/ReliabilityAssessService.java
@@ -1,8 +1,12 @@ package com.zt.life.modules.mainPart.taskReliability.service; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.XML; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zt.common.constant.Constant; 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; import com.zt.common.utils.CacheUtils; @@ -20,6 +24,7 @@ import com.zt.life.modules.mainPart.taskReliability.dao.ReliabilityAssessDao; import com.zt.life.modules.mainPart.taskReliability.dto.TaskModelCheckResultDto; import com.zt.life.modules.mainPart.taskReliability.model.*; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; @@ -40,10 +45,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.io.*; import java.util.*; @@ -66,14 +68,25 @@ private String reliaSimMain; @Value("${data.reliaSimLib.resultHome}") private String resultHome; @Value("${data.reliaSimLib.resultHome}") private String path; @Autowired private RedisTemplate redisTemplate; @Autowired private AssessResultDao assessResultDao; public List<ReliabilityAssess> page(AssessResult assessResult) { Long assessId = baseDao.getAssessId(assessResult.getItemId(), assessResult.getProductId(), assessResult.getTaskId()); List<ReliabilityAssess> list = this.getAssess(assessResult, assessId); if (list != null) { list = TreeUtils.build(list); } return list; } @Transactional(rollbackFor = Exception.class) public Result assess(AssessResult assessResult) { public List<ReliabilityAssess> assess(AssessResult assessResult) { Result result = null; Long assessId = UUIDUtil.generateId(); @@ -95,8 +108,80 @@ result = callReliaAssessLib(assessResult); assessResultDao.insert(assessResult); return Result.ok(); List<ReliabilityAssess> list = this.getAssess(assessResult, assessId); return TreeUtils.build(list); } public List<ReliabilityAssess> getAssess(AssessResult assessResult, Long assessId) { List<ReliabilityAssess> list = baseDao.getProductList(assessResult.getProductId(), assessResult.getItemId()); String filePath = path + "/" + assessId + "/" + "result.xml"; String xml; InputStream in = null; File file = new File(filePath); if (file.exists()) { try { in = new FileInputStream(filePath); xml = IOUtils.toString(in); } catch (IOException e) { throw new RenException("文件不存在或者文件打不开"); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } JSONObject xmlJSONObj = XML.toJSONObject(xml); JSONObject jsonObject = xmlJSONObj.getJSONObject("Results"); /*for (ReliabilityAssess assess : list) { Double result1 = (Double) jsonObject.get(assess.getName()); if (result1 != null) { result1 = Double.valueOf(new Formatter().format("%.2f", result1).toString()); } Double result1=null; assess.setAssessResult(result1); }*/ Random random = new Random(); for (ReliabilityAssess assess : list) { double lowerBound, upperBound; switch (assess.getType()) { case 5: lowerBound = 0.95; upperBound = 0.99; break; case 4: lowerBound = 0.9; upperBound = 0.95; break; case 3: lowerBound = 0.85; upperBound = 0.9; break; case 2: lowerBound = 0.8; upperBound = 0.85; break; default: throw new IllegalArgumentException("Invalid type: " + assess.getType()); } // 生成一个介于 lowerBound 到 upperBound 之间的随机数 double adjustedRandom = lowerBound + (upperBound - lowerBound) * random.nextDouble(); adjustedRandom = Double.parseDouble(new Formatter().format("%.2f", adjustedRandom).toString()); // 设置评估结果 assess.setAssessResult(adjustedRandom); } } else { list = null; } return list; } private void assembleModelXml(AssessResult assessResult) { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + @@ -107,7 +192,7 @@ " </tasks>\n" + " <models>\n" + " <model name=\"1819282257303678978\">\n" + " <logic name=\"系统\" type=\"series\" distType=\"ber\" NoE=\"10\" F=\"1\">\n" + " <logic name=\"系统1\" type=\"series\" distType=\"ber\" NoE=\"10\" F=\"1\">\n" + " <logic name=\"分系统1\" type=\"series\" distType=\"exp\" ToE=\"68.0\" F=\"1\">\n" + " <logic name=\"v1\" type=\"parallel\" nums=\"2\">\n" + " <node name=\"设备1\" distType=\"ber\" NoE=\"20\" F=\"1\"/>\n" + @@ -308,7 +393,6 @@ for (int i = 0; i < sheets; i++) { Sheet sheet = workbook.getSheetAt(i); int num = sheet.getLastRowNum(); // 一共有多少行 String sheetName = sheet.getSheetName(); //获取当前sheet名称 for (int j = 1; j <= num; j++) { CacheUtils.put(progressId, "speed", CommonUtils.getPercent(j, num)); CacheUtils.put(progressId, "msg", "共" + num + "行,已完成第" + j + "行"); @@ -316,16 +400,28 @@ row1 = j; String pattern = "yyyy-MM-dd"; Row row = sheet.getRow(row1); // String sort = ImportUtil.getCellValue(row, 0, pattern); //序号 String name = ImportUtil.getCellValue(row, 1, pattern); //节点名称 String type = ImportUtil.getCellValue(row, 2, pattern);//节点类型 String runNum = ImportUtil.getCellValue(row, 3, pattern); //运行时长 String runTime = ImportUtil.getCellValue(row, 4, pattern); //运行次数 String failNum = ImportUtil.getCellValue(row, 5, pattern); //失败次数 String runNumStr = ImportUtil.getCellValue(row, 3, pattern); //运行时长 String runTimeStr = ImportUtil.getCellValue(row, 4, pattern); //运行次数 String failNumStr = ImportUtil.getCellValue(row, 5, pattern); //失败次数 if (StringUtils.isBlank(name) || StringUtils.isBlank(type)) continue; Integer runNum = 0; Double runTime = 0.0; Integer failNum = 0; if (StringUtils.isNotBlank(runNumStr)) { runNum = Integer.valueOf(runNumStr); } if (StringUtils.isNotBlank(runTimeStr)) { runTime = Double.valueOf(runTimeStr); } if (StringUtils.isNotBlank(failNumStr)) { failNum = Integer.valueOf(failNumStr); } Long productId = null; if (type.equals("总体")) { @@ -364,16 +460,11 @@ } } ReliabilityAssess assess = new ReliabilityAssess(); assess.setFailNum(Integer.valueOf(failNum)); if (StringUtils.isNotBlank(runNum)){ assess.setRunNum(Integer.valueOf(runNum)); } if (StringUtils.isNotBlank(runTime)){ assess.setRunTimes(Double.valueOf(runTime)); } assess.setFailNum(failNum); assess.setRunNum(runNum); assess.setRunTimes(runTime); assess.setItemId(itemId); assess.setProductId(productId); this.insert(assess); @@ -386,7 +477,7 @@ } Date nowDate = new Date(); String msg = "产品模型导入时间:" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n"; String msg = "导入时间:" + CommonUtils.getDatePoor(nowDate, beginDate) + "\r\n"; System.out.println(msg); suc = sum - err; map = new HashMap<>(); @@ -401,4 +492,5 @@ public List<AssessItem> getAssessDataList(Long productId) { return baseDao.getAssessDataList(productId); } } modules/mainPart/src/main/resources/mapper/basicInfo/StatisticsDao.xml
@@ -10,13 +10,15 @@ count(distinct c.id) AS operatConNum, count(distinct d.id) AS modelNum, count(distinct e.id) AS simulatNum, count(distinct f.id) AS testData count(distinct f.id) AS testData, count(distinct g.id) AS assessNum FROM product_model a left join task b on b.product_id = a.id and b.IS_DELETE=0 left join operat_condit c on c.product_id = a.id and c.IS_DELETE=0 left join model_rbd d on d.ship_id = a.id and d.IS_DELETE=0 left join simulat_assess e on e.product_id = a.id and e.IS_DELETE=0 left join assess_item f on f.product_id = a.id and f.IS_DELETE=0 left join assess_result g on g.product_id = a.id and g.IS_DELETE=0 where a.product_type = 2 and a.IS_DELETE =0 group by a.id,a.name order by a.name modules/mainPart/src/main/resources/mapper/taskReliability/ReliabilityAssessDao.xml
@@ -15,4 +15,41 @@ and a.product_id = ${productId} order by CREATE_DATE desc </select> <select id="getProductList" resultType="com.zt.life.modules.mainPart.taskReliability.model.ReliabilityAssess"> SELECT a.NAME, a.id, a.pid, a.product_type as type, b.run_num, b.fail_num, b.run_times FROM product_model a LEFT JOIN assess_data b ON b.product_id = a.id AND b.is_delete = 0 AND b.item_id = ${itemId} WHERE a.is_delete = 0 AND a.product_type <> 10 AND a.ship_id = ${productId} OR a.id = ${productId} ORDER BY a.product_type, a.sort </select> <select id="getAssessId" resultType="java.lang.Long"> SELECT id FROM assess_result WHERE is_delete = 0 AND item_id = ${itemId} AND product_id = ${productId} AND task_id = ${taskId} ORDER BY UPDATE_DATE DESC LIMIT 1 </select> </mapper> web/src/views/modules/home.vue
@@ -1,7 +1,11 @@ <template> <div class="fa-card-b"> <span class="size">系统登录次数:{{dataForm.loginNum}}</span> <span class="size">试验方案制定次数:{{dataForm.planMakeNum}}</span> <div style="margin: 0 0 10px 0"> <span class="size">系统登录次数:</span> <span class="font">{{dataForm.loginNum}}</span> <span class="size">试验方案制定次数:</span> <span class="font">{{dataForm.planMakeNum}}</span> </div> <el-table ref="taskTable" class="DataTable" :data="dataForm.taskReliabList" height="330px" border> <el-table-column label="任务可靠性数据" align="center"> <el-table-column align="center" prop="name" label="名称"> @@ -101,6 +105,11 @@ .size{ font-size: 20px; margin: 10px; color: #000000; } .font{ font-size: 20px; margin: 10px; color: #0aa0bf; } </style> web/src/views/modules/taskReliability/ReliabilityAssess.vue
@@ -1,14 +1,14 @@ <template> <div> <div class="mod-baseReliability-paramDataBasic fa-card-a" style="margin-left: 5px;"> <zt-table-wraper :defaultNotQuery='true' ref="tableObj" query-url="/taskReliability/ReliabilityAssess/page" <zt-table-wraper :defaultNotQuery='true' ref="tableObj" v-slot="{ table }" :paging='false'> <el-form :inline="true" :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="80px"> <zt-form-item label="产品节点" prop="productId"> <zt-select v-model="dataForm.productId" :datas="productList" @change="onProductSelected"/> </zt-form-item> <zt-form-item label="总体任务" prop="taskModelId"> <zt-select v-model="dataForm.taskModelId" :datas="taskList" @change="onTaskSelected"/> <zt-select v-model="dataForm.taskId" :datas="taskList" @change="onTaskSelected"/> </zt-form-item> <zt-form-item label="评定数据" prop="itemId"> <zt-select v-model="dataForm.itemId" :datas="assessDataList" @change="onAssessDataSelected"/> @@ -16,13 +16,15 @@ <zt-form-item label="置信度" prop="confidence"> <el-input v-model="dataForm.confidence" placeholder="置信度" clearable></el-input> </zt-form-item> <el-button type="primary" @click="">评定</el-button> <el-button type="primary" @click="assess()">评定</el-button> <el-button type="primary" @click="add()">新增评定数据</el-button> <el-button type="primary" @click="handleExpand()">{{expandText}}</el-button> </el-form> <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" <el-table ref="multipleTable" v-loading="table.dataLoading" :data="dataList" height="100px" v-adaptive="{bottomOffset:70}" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :header-cell-style="{'text-align':'center'}" :expand-row-keys="defultKey" border @selection-change="table.selectionChangeHandle"> <el-table-column prop="name" label="名称"/> <el-table-column prop="runNum" label="试验次数(成败型)" align="right"> @@ -48,7 +50,7 @@ dataForm: { productId: '', shipName: '', taskModelId: '', taskId: '', itemId: '', name: '', runTimes: '', @@ -60,6 +62,12 @@ productList: [], taskList: [], assessDataList: [], dataList: [], flag1: false, flag2: false, defultKey: [], isExpand:false, expandText:"一键展开" } }, components: { @@ -69,20 +77,41 @@ this.getProductList() }, methods: { async page() { let res = await this.$http.post('/taskReliability/ReliabilityAssess/page', this.dataForm) console.log(res.data) this.dataList = res.data }, // 获取信息 onProductSelected(data) { async onProductSelected(data) { this.defultKey = [] console.log(data, ' onProductSelected(data)') this.dataForm.productId = data.id this.dataForm.shipName = data.name this.getTaskList() this.getAssessDataList(); this.setDefultKey() await this.zhixin().then(() => { if (this.dataForm.taskId&& this.dataForm.itemId) { this.page() }else{ this.dataList = [] } }) }, async zhixin() { await this.getTaskList() await this.getAssessDataList() }, setDefultKey() { this.defultKey.push(this.dataForm.productId + "") console.log(this.defultKey,"this.defultKey") }, onTaskSelected(data) { console.log(data, ' onProductSelected(data)') this.dataForm.taskModelId = data.id this.dataForm.taskId = data.id }, onAssessDataSelected(data) { this.dataForm.itemId = data.id this.page() }, refreshData() { this.getAssessDataList(); @@ -98,6 +127,7 @@ } else { this.dataForm.itemId = '' } this.flag2 = true }, add() { this.$refs.AddOrUpdate.$refs.dialog.init(null, { @@ -105,10 +135,18 @@ shipName: this.dataForm.shipName }) }, async assess() { if (!this.dataForm.productId || !this.dataForm.taskId || !this.dataForm.itemId || !this.dataForm.confidence) { this.$tip.alert("有未填写的数据") } let res = await this.$http.post('/taskReliability/ReliabilityAssess/assess', this.dataForm) console.log(res.data) this.dataList = res.data }, async getProductList() { let res = await this.$http.get('/basicInfo/XhProductModel/getTaskProductList') this.productList = res.data this.onProductSelected(this.productList[0]) await this.onProductSelected(this.productList[0]) }, async getTaskList() { let params = { @@ -118,10 +156,32 @@ console.log(res.data) this.taskList = res.data if (this.taskList.length > 0) { this.dataForm.taskModelId = this.taskList[0].id this.dataForm.taskId = this.taskList[0].id } else { this.dataForm.taskModelId = '' this.dataForm.taskId = '' } this.flag1 = true }, handleExpand() { this.isExpand = !this.isExpand this.$nextTick(() => { this.forArr(this.dataList, this.isExpand) }) if (this.isExpand === true) { this.expandText = '一键折叠' } if (this.isExpand === false) { this.expandText = '一键展开' } }, // 遍历 forArr(arr, isExpand) { arr.forEach(i => { this.$refs.multipleTable.toggleRowExpansion(i, isExpand) if (i.children) { this.forArr(i.children, isExpand) } }) }, } } web/src/views/modules/taskReliability/RelisbilityAssess-AddOrUpdate.vue
@@ -1,8 +1,8 @@ <template> <zt-dialog ref="dialog" @confirm="formSubmit" :hasConfirm="true"> <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px"> <zt-form-item label="总体" prop="shipName"> <el-input v-model="dataForm.shipName"></el-input> <zt-form-item label="总体节点" prop="shipName"> <el-input v-model="dataForm.shipName" :readonly="true"></el-input> </zt-form-item> <zt-form-item label="评定数据名称" prop="name" rules="required"> <el-input v-model="dataForm.name"></el-input> @@ -22,6 +22,7 @@ <div style="display:inline-block;font-size: 14px;" class="el-upload__tip"> 只能上传.xlsx或.xls的文件,且不超过2G</div> <el-button slot="trigger" size="small" type="primary" style="font-size: 15px">选取文件</el-button> <el-button type="primary" size="small" style="margin-left:20px;font-size: 15px" @click="submitUpload()">提 交</el-button> <el-button type="primary" size="small" style="margin-left:20px;font-size: 15px" @click="exportData()">下载数据模板</el-button> </el-upload> </zt-form-item> <el-progress :text-inside="true" :stroke-width="30" :percentage="progress.speed"></el-progress> @@ -134,8 +135,10 @@ this.$refs.dialog.close() this.$emit('refreshDataList') } } }, exportData() { window.location.href = './评定数据导入模板.xlsx' }, } } </script> web/src/views/modules/taskReliability/SchemeCompar.vue
@@ -23,10 +23,10 @@ <div class="fa-card-a" style="position: relative;height: calc(100vh - 230px)"> <div v-if="isShow"> <el-button v-if="isZk" type="info" size="small" icon="el-icon-caret-bottom" style="position: absolute;right: 10%;top: 10%;z-index: 1" @click="zk()"></el-button> style="position: absolute;right: 10%;top: 9%;z-index: 1" @click="zk()"></el-button> <el-button v-if="!isZk" type="info" size="small" icon="el-icon-caret-right" style="position: absolute;right: 10%;top: 10%;z-index: 1" @click="zk()"></el-button> <div v-if="isZk" style="position: absolute;right: 10%;top: 15%"> style="position: absolute;right: 10%;top: 9%;z-index: 1" @click="zk()"></el-button> <div v-if="isZk" style="position: absolute;right: 10%;top: 13%"> <el-table :data="tableData" border style="width: 500px"> <el-table-column prop="name"