故障树功能和树导入功能更新

This commit is contained in:
zhangjunwen 2024-04-18 18:45:32 +08:00
parent 9d1e272dac
commit 7ed4513eef
2 changed files with 192 additions and 2 deletions

View File

@ -0,0 +1,177 @@
package com.inspur.industrial.component;
import com.inspur.common.utils.spring.SpringUtils;
import com.inspur.equip.domain.IpcEquipInfo;
import com.inspur.equip.service.IIpcEquipInfoService;
import com.inspur.industrial.domain.IpcFaultTreeConfig;
import com.inspur.industrial.service.IIpcFaultTreeConfigService;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author zhangjunwen
* @create 2024/4/18
*/
@Component("faultTask")
public class IPCFaultTreeTask{
public void taskRun() {
try {
faultExcelProcess();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private void faultExcelProcess() throws IOException {
TreeNode treeNode = new TreeNode();
POIFSFileSystem fs = new POIFSFileSystem(Files.newInputStream(Paths.get("C:\\Users\\zhangjunwen\\Desktop\\故障树.xls")));
HSSFWorkbook wb = new HSSFWorkbook(fs);
//2. 获取工作表
//sheets.getSheet(); 根据选项卡名称即工作表名称
//根据索引获取工作表
// XSSFSheet sheetAt = sheets.getSheetAt(0);
HSSFSheet sheetAt = wb.getSheetAt(1);
int columnNum = 0;
if(sheetAt.getRow(0) != null){
columnNum = sheetAt.getRow(0).getLastCellNum() - sheetAt.getRow(0).getFirstCellNum();
}
// 初始化一些计数器
int id = 0; // 遍历赋值连续ID
int level = 0;// 记录层级
int rowNumber = 0;// 记录行号
treeNode.setId("-2");
treeNode.setName("关系图");
treeNode.setChild(new ArrayList<TreeNode>());
// 初始化一个缓存map , 用于缓存最新的父类
HashMap<Integer, TreeNode> map = new HashMap<Integer, TreeNode>();
map.put(-2, treeNode);
// 开始遍历
if (columnNum > 0) {
for (Row row : sheetAt) {
level = 0;
rowNumber++;
// 跳过前两行
if (rowNumber < 2) {
continue;
}
String[] singleRow = new String[columnNum];
for (int i = 0; i < columnNum; i++) {
// 查询到有信息的行
Cell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
if(cell.getCellType() == CellType.BLANK || i % 2 != 0){
continue;
}
id++;
TreeNode treeNodeTmp = new TreeNode();
treeNodeTmp.setId("" + id);
treeNodeTmp.setName(cell.getStringCellValue());
treeNodeTmp.setChild(new ArrayList<TreeNode>());
treeNodeTmp.setType(sheetAt.getRow(row.getRowNum()).getCell(i + 1) == null ? "" : sheetAt.getRow(row.getRowNum()).getCell(i + 1).getStringCellValue());
TreeNode pTreeNode = map.get(i - 2);
pTreeNode.getChild().add(treeNodeTmp);
map.put(i, treeNodeTmp);
}
}
}
// System.err.println(treeNode);
insertNode(treeNode.getChild().get(0), 1L);
//5. 释放资源
wb.close();
}
private void insertNode(TreeNode node, Long parentId){
// 1. 插入当前节点到数据库
IIpcFaultTreeConfigService ipcFaultTreeConfigService = SpringUtils.getBean(IIpcFaultTreeConfigService.class);
IIpcEquipInfoService ipcEquipInfoService = SpringUtils.getBean(IIpcEquipInfoService.class);
IpcFaultTreeConfig ipcFaultTreeConfig = new IpcFaultTreeConfig();
ipcFaultTreeConfig.setNodeName(node.getName());
ipcFaultTreeConfig.setParentId(parentId);
List<IpcEquipInfo> equipInfos = ipcEquipInfoService.selectIpcEquipInfoList(null);
ipcFaultTreeConfig.setEquipId(equipInfos.stream().filter(data -> data.getEquipNum().equals("KKZGG-T-001")).collect(Collectors.toList()).get(0).getId());
ipcFaultTreeConfig.setNodeDefaultColor("green");
ipcFaultTreeConfig.setNodeAlarmColor("red");
ipcFaultTreeConfig.setStatus("0");
ipcFaultTreeConfig.setDelFlag("0");
if(node.getType().equals("") || node.getType().startsWith("条件或")) {
ipcFaultTreeConfig.setNodeShapeType("rectangle");
ipcFaultTreeConfig.setIconCls("icon-huomen");
}else if(node.getType().equals("")) {
ipcFaultTreeConfig.setNodeShapeType("rectangle");
ipcFaultTreeConfig.setIconCls("icon-yumen");
}
ipcFaultTreeConfig.setCreateTime(new Date());
ipcFaultTreeConfigService.insertIpcFaultTreeConfig(ipcFaultTreeConfig);
List<IpcFaultTreeConfig> faults = ipcFaultTreeConfigService.selectIpcFaultTreeConfigList(ipcFaultTreeConfig);
if(node.getChild() == null){
return;
}
// 3. 递归处理子节点
for (TreeNode child : node.getChild()) {
insertNode(child, faults.get(0).getNodeId());
}
}
}
class TreeNode {
private String name;// 名称
private String id;// id
private String pid;//父ID
private String type;
private List<TreeNode> child;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<TreeNode> getChild() {
return child;
}
public void setChild(List<TreeNode> child) {
this.child = child;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}

View File

@ -27,9 +27,11 @@
<vue-okr-tree
:loading="loading"
:data="objToList(tree)"
node-key="nodeId"
direction="horizontal"
show-collapsable
default-expand-all
:node-btn-content="renderContent"
:default-expanded-keys="expKeys"
></vue-okr-tree>
</div>
</div>
@ -55,6 +57,7 @@ export default {
equipList: [],
equipId: "",
treeData: [],
expKeys: [],
};
},
created() {
@ -67,10 +70,14 @@ export default {
},
getList() {
this.loading = true;
this.expKeys = [];
getFaultTreeShow(this.equipId).then((response) => {
const nodes = this.handleTree(response.data, "nodeId", "parentId");
console.log("nodes:", nodes);
this.expKeys.push(nodes[0].children[0].nodeId);
this.updateParentStatusBasedOnLogic(nodes);
this.treeData = nodes[0].children;
const datalist = response.data;
this.loading = false;
});
},
@ -159,6 +166,9 @@ export default {
}
}
node.label = node.nodeName;
if (node.isAlarm === "1") {
this.expKeys.push(node.nodeId);
}
node.nodeBorderColor =
node.isAlarm === "1" ? node.nodeAlarmColor : node.nodeDefaultColor;
node.nodeFontColor =
@ -169,7 +179,7 @@ export default {
};
</script>
<style>
<style scoped>
.org-chart-node-label .org-chart-node-btn {
border-color: transparent !important;
box-shadow: none !important;
@ -200,5 +210,8 @@ export default {
color: #909090;
z-index: 2;
}
.el-scrollbar__view el-select-dropdown__list {
height: 150px;
}
</style>