diff --git a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java index 7b858432f..6a4387649 100644 --- a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java +++ b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java @@ -96,6 +96,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; import java.net.HttpURLConnection; import java.time.LocalDate; import java.time.LocalDateTime; @@ -3698,305 +3699,339 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple List pqsTerminalPushLogDTOList = new ArrayList<>(); List addAndDelteId = new ArrayList<>(); + //异常标志 + Boolean exFlag= false; if (!CollectionUtils.isEmpty(list)) { - //前置层修改 - List list1 = list.stream().filter(temp -> temp.getTerminalDescribe().contains("终端所属前置机由")).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(list1)) { - for (PqsTerminalLogs temp : list1) { - String temLos = "%s终端所属前置机由 %s 改为> %s;"; - List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); - String node1 = strings.get(1); // 第一个前置 - String node2 = strings.get(2); // 第二个前置 - if (deviceProcesseMap.containsKey(temp.getObjIndex())) { - Integer processNum = deviceProcesseMap.get(temp.getObjIndex()); - PqsTerminalPushLogDTO pqsTerminalPushLogDTO = new PqsTerminalPushLogDTO(); - pqsTerminalPushLogDTO.setId(temp.getId()); - String deviceId = temp.getObjIndex(); - pqsTerminalPushLogDTO.setDevId(deviceId); - pqsTerminalPushLogDTO.setDevName(lineMap.containsKey(deviceId) ? lineMap.get(deviceId).getName() : "删除设备"); - pqsTerminalPushLogDTO.setNodeId(node1); - pqsTerminalPushLogDTO.setNodeName(nodeMap.get(node1).getName()); - pqsTerminalPushLogDTO.setProcessUpdateFlag(true); - pqsTerminalPushLogDTO.setProcessNum(processNum); - pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO); - - PqsTerminalPushLogDTO pqsTerminalPushLogDTO2 = new PqsTerminalPushLogDTO(); - pqsTerminalPushLogDTO2.setId(temp.getId()); - pqsTerminalPushLogDTO2.setDevId(deviceId); - pqsTerminalPushLogDTO2.setDevName(lineMap.containsKey(deviceId) ? lineMap.get(deviceId).getName() : "删除设备"); - pqsTerminalPushLogDTO2.setNodeId(node2); - pqsTerminalPushLogDTO2.setNodeName(nodeMap.get(node2).getName()); - pqsTerminalPushLogDTO2.setProcessUpdateFlag(true); - pqsTerminalPushLogDTO2.setProcessNum(processNum); - pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO2); - - } - } - } - - list.removeAll(list1); - if (!CollectionUtils.isEmpty(list)) { - //终端层面和检测点层面修改 - list.forEach(temp -> { - PqsTerminalPushLogDTO pqsTerminalPushLogDTO = new PqsTerminalPushLogDTO(); - if (Objects.equals(temp.getTerminalType(), 6)) { - pqsTerminalPushLogDTO.setId(temp.getId()); - String deviceId; - //如果不存在该设备id,说明监测点删除 - if (!lineDeviceMap.containsKey(temp.getObjIndex())) { - String temLos = "%s监测点名称: %s"; - List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); - String[] lineName = strings.get(1).split("->"); - List devList = lineById.stream().filter(line -> Objects.equals(line.getName(), lineName[1])).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(devList)) { - //如果不存在该设备说明设备也被删除,直接走下边删除设备逻辑; - return; - } else { - Line sub = lineById.stream().filter(line -> Objects.equals(line.getName(), lineName[0])).collect(Collectors.toList()).get(0); - Line tempDev = devList.stream().filter(dev -> dev.getPid().equals(sub.getId())).collect(Collectors.toList()).get(0); - deviceId = tempDev.getId(); - } - - } else { - deviceId = lineDeviceMap.get(temp.getObjIndex()); - - } - - pqsTerminalPushLogDTO.setDevId(deviceId); - pqsTerminalPushLogDTO.setDevName(lineMap.get(deviceId).getName()); - String nodeId = deviceMap.get(deviceId).getNodeId(); - pqsTerminalPushLogDTO.setNodeId(nodeId); - //如果前置删了直接返回 - if (!nodeMap.containsKey(nodeId)) { - return; - } - pqsTerminalPushLogDTO.setNodeName(nodeMap.get(nodeId).getName()); - pqsTerminalPushLogDTO.setProcessUpdateFlag(false); - if (deviceProcesseMap.containsKey(deviceId)) { - pqsTerminalPushLogDTO.setProcessNum(deviceProcesseMap.get(deviceId)); - } else { - throw new BusinessException("存在终端未设置进程号,请在前置管理页面设置进程号在进行此操作"); - } - pqsTerminalPushLogDTO.setOperateType(DeviceRebootType.LEDGER_MODIFY); - pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO); - - } else if (Objects.equals(temp.getTerminalType(), 4)) { - //如果是修改进程操作记录2个进程日志; - if (temp.getLogsType().equals(dataDic.getId())) { - String temLos = "%s进行更新终端进程操作;终端名称 :%s,由进程%s修改成进程%s"; - List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); - String num1 = strings.get(2); // 第一个进程 - String num2 = strings.get(3); // 第二个进程 - int processId1 = Integer.parseInt(num1); - int processId2 = Integer.parseInt(num2); + List list1 = new ArrayList<>(); + try { + //前置层修改 + list1 = list.stream().filter(temp -> temp.getTerminalDescribe().contains("终端所属前置机由")).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(list1)) { + for (PqsTerminalLogs temp : list1) { + String temLos = "%s终端所属前置机由 %s 改为> %s;"; + List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); + String node1 = strings.get(1); // 第一个前置 + String node2 = strings.get(2); // 第二个前置 + if (deviceProcesseMap.containsKey(temp.getObjIndex())) { + Integer processNum = deviceProcesseMap.get(temp.getObjIndex()); + PqsTerminalPushLogDTO pqsTerminalPushLogDTO = new PqsTerminalPushLogDTO(); pqsTerminalPushLogDTO.setId(temp.getId()); String deviceId = temp.getObjIndex(); pqsTerminalPushLogDTO.setDevId(deviceId); pqsTerminalPushLogDTO.setDevName(lineMap.containsKey(deviceId) ? lineMap.get(deviceId).getName() : "删除设备"); + pqsTerminalPushLogDTO.setNodeId(node1); + pqsTerminalPushLogDTO.setNodeName(nodeMap.get(node1).getName()); + pqsTerminalPushLogDTO.setProcessUpdateFlag(true); + pqsTerminalPushLogDTO.setProcessNum(processNum); + pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO); + + PqsTerminalPushLogDTO pqsTerminalPushLogDTO2 = new PqsTerminalPushLogDTO(); + pqsTerminalPushLogDTO2.setId(temp.getId()); + pqsTerminalPushLogDTO2.setDevId(deviceId); + pqsTerminalPushLogDTO2.setDevName(lineMap.containsKey(deviceId) ? lineMap.get(deviceId).getName() : "删除设备"); + pqsTerminalPushLogDTO2.setNodeId(node2); + pqsTerminalPushLogDTO2.setNodeName(nodeMap.get(node2).getName()); + pqsTerminalPushLogDTO2.setProcessUpdateFlag(true); + pqsTerminalPushLogDTO2.setProcessNum(processNum); + pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO2); + + } + } + } + + list.removeAll(list1); + if (!CollectionUtils.isEmpty(list)) { + //终端层面和检测点层面修改 + list.forEach(temp -> { + PqsTerminalPushLogDTO pqsTerminalPushLogDTO = new PqsTerminalPushLogDTO(); + if (Objects.equals(temp.getTerminalType(), 6)) { + pqsTerminalPushLogDTO.setId(temp.getId()); + String deviceId; + //如果不存在该设备id,说明监测点删除 + if (!lineDeviceMap.containsKey(temp.getObjIndex())) { + String temLos = "%s监测点名称: %s"; + List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); + String[] lineName = strings.get(1).split("->"); + List devList = lineById.stream().filter(line -> Objects.equals(line.getName(), lineName[1])).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(devList)) { + //如果不存在该设备说明设备也被删除,直接走下边删除设备逻辑; + return; + } else { + Line sub = lineById.stream().filter(line -> Objects.equals(line.getName(), lineName[0])).collect(Collectors.toList()).get(0); + Line tempDev = devList.stream().filter(dev -> dev.getPid().equals(sub.getId())).collect(Collectors.toList()).get(0); + deviceId = tempDev.getId(); + } + + } else { + deviceId = lineDeviceMap.get(temp.getObjIndex()); + + } + + pqsTerminalPushLogDTO.setDevId(deviceId); + pqsTerminalPushLogDTO.setDevName(lineMap.get(deviceId).getName()); String nodeId = deviceMap.get(deviceId).getNodeId(); pqsTerminalPushLogDTO.setNodeId(nodeId); + //如果前置删了直接返回 + if (!nodeMap.containsKey(nodeId)) { + return; + } pqsTerminalPushLogDTO.setNodeName(nodeMap.get(nodeId).getName()); - pqsTerminalPushLogDTO.setProcessUpdateFlag(true); - pqsTerminalPushLogDTO.setProcessNum(processId1); - pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO); - PqsTerminalPushLogDTO pqsTerminalPushLogDTO1 = new PqsTerminalPushLogDTO(); - - pqsTerminalPushLogDTO1.setId(temp.getId()); - pqsTerminalPushLogDTO1.setDevId(deviceId); - pqsTerminalPushLogDTO1.setDevName(lineMap.get(deviceId).getName()); - pqsTerminalPushLogDTO1.setNodeId(nodeId); - pqsTerminalPushLogDTO1.setNodeName(nodeMap.get(nodeId).getName()); - pqsTerminalPushLogDTO1.setProcessUpdateFlag(true); - pqsTerminalPushLogDTO1.setProcessNum(processId2); - pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO1); - - } else { - pqsTerminalPushLogDTO.setId(temp.getId()); - String deviceId = temp.getObjIndex(); - pqsTerminalPushLogDTO.setDevId(deviceId); - //区分删除操作,新增和其他操作 - String operate = DeviceRebootType.LEDGER_MODIFY; - - if (Objects.equals(temp.getOperateType(), Param.DEL)) { - operate = DeviceRebootType.DELETE_TERMINAL; - - - } else if (Objects.equals(temp.getOperateType(), Param.ADD)) { - operate = DeviceRebootType.ADD_TERMINAL; - - } - //设备删除找不到设备名称,重日志截取 - if (Objects.equals(temp.getOperateType(), Param.DEL)) { - String temLos = "%s名称:%s;前置信息:%s"; - List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); - String devName = strings.get(1); // 设备名称 - String nodeName = strings.get(2); // 进程名称 - pqsTerminalPushLogDTO.setDevName(devName); - String nodeId = nodeNameMap.get(nodeName).getId(); - pqsTerminalPushLogDTO.setNodeId(nodeId); - pqsTerminalPushLogDTO.setNodeName(nodeName); - } else { - //如果存在说明设备未被删除,不存在说明有一条删除日志,直接return; - if (lineMap.containsKey(deviceId)) { - pqsTerminalPushLogDTO.setDevName(lineMap.get(deviceId).getName()); - } else { - pqsTerminalPushLogDTO.setDevName("删除设备"); - - } - //如果新增的没有,说明该新增设备在本次也删除了, - if (deviceMap.containsKey(deviceId)) { - String nodeId = deviceMap.get(deviceId).getNodeId(); - pqsTerminalPushLogDTO.setNodeId(nodeId); - pqsTerminalPushLogDTO.setNodeName(nodeMap.get(nodeId).getName()); - } else { - addAndDelteId.add(deviceId); - return; - } - - - } - pqsTerminalPushLogDTO.setProcessUpdateFlag(false); if (deviceProcesseMap.containsKey(deviceId)) { pqsTerminalPushLogDTO.setProcessNum(deviceProcesseMap.get(deviceId)); } else { throw new BusinessException("存在终端未设置进程号,请在前置管理页面设置进程号在进行此操作"); } - - pqsTerminalPushLogDTO.setOperateType(operate); + pqsTerminalPushLogDTO.setOperateType(DeviceRebootType.LEDGER_MODIFY); pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO); + + } else if (Objects.equals(temp.getTerminalType(), 4)) { + String deviceId = temp.getObjIndex(); + if(!deviceMap.containsKey(deviceId)){ + //说明设备被删除 + String temLos = "%s名称:%s;前置信息:%s"; + List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); + String devName = strings.get(1); // 设备名称 + String nodeName = strings.get(2); // 进程名称 + pqsTerminalPushLogDTO.setDevName(devName); + //如果前置删了直接返回 + if(!nodeNameMap.containsKey(nodeName)){ + return; + } + String nodeId = nodeNameMap.get(nodeName).getId(); + pqsTerminalPushLogDTO.setNodeId(nodeId); + pqsTerminalPushLogDTO.setNodeName(nodeName); + } + + //如果是修改进程操作记录2个进程日志; + if (temp.getLogsType().equals(dataDic.getId())) { + String temLos = "%s进行更新终端进程操作;终端名称 :%s,由进程%s修改成进程%s"; + List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); + String num1 = strings.get(2); // 第一个进程 + String num2 = strings.get(3); // 第二个进程 + int processId1 = Integer.parseInt(num1); + int processId2 = Integer.parseInt(num2); + pqsTerminalPushLogDTO.setId(temp.getId()); +// String deviceId = temp.getObjIndex(); + pqsTerminalPushLogDTO.setDevId(deviceId); + pqsTerminalPushLogDTO.setDevName(lineMap.containsKey(deviceId) ? lineMap.get(deviceId).getName() : "删除设备"); + String nodeId = deviceMap.get(deviceId).getNodeId(); + pqsTerminalPushLogDTO.setNodeId(nodeId); + pqsTerminalPushLogDTO.setNodeName(nodeMap.get(nodeId).getName()); + pqsTerminalPushLogDTO.setProcessUpdateFlag(true); + pqsTerminalPushLogDTO.setProcessNum(processId1); + pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO); + PqsTerminalPushLogDTO pqsTerminalPushLogDTO1 = new PqsTerminalPushLogDTO(); + + pqsTerminalPushLogDTO1.setId(temp.getId()); + pqsTerminalPushLogDTO1.setDevId(deviceId); + pqsTerminalPushLogDTO1.setDevName(lineMap.get(deviceId).getName()); + pqsTerminalPushLogDTO1.setNodeId(nodeId); + pqsTerminalPushLogDTO1.setNodeName(nodeMap.get(nodeId).getName()); + pqsTerminalPushLogDTO1.setProcessUpdateFlag(true); + pqsTerminalPushLogDTO1.setProcessNum(processId2); + pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO1); + + } else { + pqsTerminalPushLogDTO.setId(temp.getId()); +// String deviceId = temp.getObjIndex(); + pqsTerminalPushLogDTO.setDevId(deviceId); + //区分删除操作,新增和其他操作 + String operate = DeviceRebootType.LEDGER_MODIFY; + + if (Objects.equals(temp.getOperateType(), Param.DEL)) { + operate = DeviceRebootType.DELETE_TERMINAL; + + + } else if (Objects.equals(temp.getOperateType(), Param.ADD)) { + operate = DeviceRebootType.ADD_TERMINAL; + + } + //设备删除找不到设备名称,重日志截取 + if (Objects.equals(temp.getOperateType(), Param.DEL)) { + String temLos = "%s名称:%s;前置信息:%s"; + List strings = this.parseTemplateValues(temLos, temp.getTerminalDescribe()); + String devName = strings.get(1); // 设备名称 + String nodeName = strings.get(2); // 进程名称 + pqsTerminalPushLogDTO.setDevName(devName); + String nodeId = nodeNameMap.get(nodeName).getId(); + pqsTerminalPushLogDTO.setNodeId(nodeId); + pqsTerminalPushLogDTO.setNodeName(nodeName); + } else { + //如果存在说明设备未被删除,不存在说明有一条删除日志,直接return; + if (lineMap.containsKey(deviceId)) { + pqsTerminalPushLogDTO.setDevName(lineMap.get(deviceId).getName()); + } else { + pqsTerminalPushLogDTO.setDevName("删除设备"); + + } + //如果新增的没有,说明该新增设备在本次也删除了, + if (deviceMap.containsKey(deviceId)) { + String nodeId = deviceMap.get(deviceId).getNodeId(); + pqsTerminalPushLogDTO.setNodeId(nodeId); + pqsTerminalPushLogDTO.setNodeName(nodeMap.containsKey(nodeId)?nodeMap.get(nodeId).getName():"删除前置"); + } else { + addAndDelteId.add(deviceId); + return; + } + + + } + + pqsTerminalPushLogDTO.setProcessUpdateFlag(false); + if (deviceProcesseMap.containsKey(deviceId)) { + pqsTerminalPushLogDTO.setProcessNum(deviceProcesseMap.get(deviceId)); + } else { + throw new BusinessException("存在终端未设置进程号,请在前置管理页面设置进程号在进行此操作"); + } + + pqsTerminalPushLogDTO.setOperateType(operate); + pqsTerminalPushLogDTOList.add(pqsTerminalPushLogDTO); + } + + } - - } - - }); - } + }); + } - Map>> collect2 = pqsTerminalPushLogDTOList.stream().filter(temp -> !addAndDelteId.contains(temp.getDevId())).collect(Collectors.groupingBy(PqsTerminalPushLogDTO::getNodeId, Collectors.groupingBy(PqsTerminalPushLogDTO::getProcessNum))); - collect2.forEach((nodeId, pqsTerminalPushLogDTOMap) -> { - pqsTerminalPushLogDTOMap.forEach((processId, tempPqsTerminalPushLogDTOList) -> { + Map>> collect2 = pqsTerminalPushLogDTOList.stream().filter(temp -> !addAndDelteId.contains(temp.getDevId())).collect(Collectors.groupingBy(PqsTerminalPushLogDTO::getNodeId, Collectors.groupingBy(PqsTerminalPushLogDTO::getProcessNum))); + collect2.forEach((nodeId, pqsTerminalPushLogDTOMap) -> { + pqsTerminalPushLogDTOMap.forEach((processId, tempPqsTerminalPushLogDTOList) -> { - PqsTerminalPushLogDTO pqsTerminalPushLogDTO = tempPqsTerminalPushLogDTOList.get(0); - //如果存在终端变更进程的记录直接重启进程 - boolean processUpdateFlag = tempPqsTerminalPushLogDTOList.stream().map(PqsTerminalPushLogDTO::getProcessUpdateFlag).anyMatch(b -> b != null && b); - if (processUpdateFlag) { - PreCommandDTO preCommandDTO = new PreCommandDTO(); - String guid = IdUtil.simpleUUID(); - String command = "重启前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId; - preCommandDTO.setGuid(guid); - preCommandDTO.setCommand(command); - preCommandDTO.setResult("2"); - //调用重启进程接口 - this.askRestartProcess(guid, pqsTerminalPushLogDTO.getNodeId(), processId, "delete", "all"); - preCommandDTOList.add(preCommandDTO); - } else { - List deviceIds = tempPqsTerminalPushLogDTOList.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); - //如果一个进程上涉及10个以上的设备修改,直接重启进程,否则重启设备 - if (CollectionUtil.isNotEmpty(deviceIds) && deviceIds.size() > 10) { + PqsTerminalPushLogDTO pqsTerminalPushLogDTO = tempPqsTerminalPushLogDTOList.get(0); + //如果存在终端变更进程的记录直接重启进程 + boolean processUpdateFlag = tempPqsTerminalPushLogDTOList.stream().map(PqsTerminalPushLogDTO::getProcessUpdateFlag).anyMatch(b -> b != null && b); + if (processUpdateFlag) { PreCommandDTO preCommandDTO = new PreCommandDTO(); String guid = IdUtil.simpleUUID(); String command = "重启前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId; preCommandDTO.setGuid(guid); preCommandDTO.setCommand(command); preCommandDTO.setResult("2"); - //调用重启进程接口 this.askRestartProcess(guid, pqsTerminalPushLogDTO.getNodeId(), processId, "delete", "all"); preCommandDTOList.add(preCommandDTO); - } else { - //调用重启设备接口先删除设备,在新增,在修改在重启设备 - List deleteDevIds = new ArrayList<>(); - List addDevIds = new ArrayList<>(); - List modifyDevIds = new ArrayList<>(); - Map> collect = tempPqsTerminalPushLogDTOList.stream().collect(Collectors.groupingBy(PqsTerminalPushLogDTO::getOperateType)); - if (collect.containsKey(DeviceRebootType.DELETE_TERMINAL)) { - List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.DELETE_TERMINAL); - deleteDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); - } - if (collect.containsKey(DeviceRebootType.ADD_TERMINAL)) { - List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.ADD_TERMINAL); - addDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); - } - if (collect.containsKey(DeviceRebootType.LEDGER_MODIFY)) { - List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.LEDGER_MODIFY); - modifyDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); - } - if (collect.containsKey(DeviceRebootType.DELETE_TERMINAL)) { - List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.DELETE_TERMINAL); - List finalAddDevIds = addDevIds; - //过滤本次新增的设备,因为前置那边还没有新增该装备 - pqsTerminalPushLogDTOList1 = pqsTerminalPushLogDTOList1.stream().filter(temp -> !finalAddDevIds.contains(temp.getDevId())).distinct().collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(pqsTerminalPushLogDTOList1)) { - String devNameString = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevName).distinct().collect(Collectors.joining(",")); - List resultDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); - PreCommandDTO preCommandDTO = new PreCommandDTO(); - String guid = IdUtil.simpleUUID(); + List deviceIds = tempPqsTerminalPushLogDTOList.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); + //如果一个进程上涉及10个以上的设备修改,直接重启进程,否则重启设备 + if (CollectionUtil.isNotEmpty(deviceIds) && deviceIds.size() > 10) { + PreCommandDTO preCommandDTO = new PreCommandDTO(); + String guid = IdUtil.simpleUUID(); + String command = "重启前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId; + preCommandDTO.setGuid(guid); + preCommandDTO.setCommand(command); + preCommandDTO.setResult("2"); - String command = "删除前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId + "下终端" + devNameString; - preCommandDTO.setGuid(guid); - preCommandDTO.setCommand(command); - preCommandDTO.setResult("2"); + //调用重启进程接口 + this.askRestartProcess(guid, pqsTerminalPushLogDTO.getNodeId(), processId, "delete", "all"); + preCommandDTOList.add(preCommandDTO); + + } else { + //调用重启设备接口先删除设备,在新增,在修改在重启设备 + List deleteDevIds = new ArrayList<>(); + List addDevIds = new ArrayList<>(); + List modifyDevIds = new ArrayList<>(); + Map> collect = tempPqsTerminalPushLogDTOList.stream().collect(Collectors.groupingBy(PqsTerminalPushLogDTO::getOperateType)); + if (collect.containsKey(DeviceRebootType.DELETE_TERMINAL)) { + List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.DELETE_TERMINAL); + deleteDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); + } + if (collect.containsKey(DeviceRebootType.ADD_TERMINAL)) { + List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.ADD_TERMINAL); + addDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); + } + if (collect.containsKey(DeviceRebootType.LEDGER_MODIFY)) { + List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.LEDGER_MODIFY); + modifyDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); + } + if (collect.containsKey(DeviceRebootType.DELETE_TERMINAL)) { + List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.DELETE_TERMINAL); + List finalAddDevIds = addDevIds; + //过滤本次新增的设备,因为前置那边还没有新增该装备 + pqsTerminalPushLogDTOList1 = pqsTerminalPushLogDTOList1.stream().filter(temp -> !finalAddDevIds.contains(temp.getDevId())).distinct().collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(pqsTerminalPushLogDTOList1)) { + String devNameString = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevName).distinct().collect(Collectors.joining(",")); + List resultDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); + PreCommandDTO preCommandDTO = new PreCommandDTO(); + String guid = IdUtil.simpleUUID(); + + String command = "删除前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId + "下终端" + devNameString; + preCommandDTO.setGuid(guid); + preCommandDTO.setCommand(command); + preCommandDTO.setResult("2"); + + //调用重启设备接口 + this.askRestartDevice(guid, pqsTerminalPushLogDTO.getNodeId(), resultDevIds, DeviceRebootType.DELETE_TERMINAL, processId); + preCommandDTOList.add(preCommandDTO); + } + + + } + if (collect.containsKey(DeviceRebootType.ADD_TERMINAL)) { + List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.ADD_TERMINAL); + List finalDeleteDevIds = deleteDevIds; + pqsTerminalPushLogDTOList1 = pqsTerminalPushLogDTOList1.stream().filter(temp -> !finalDeleteDevIds.contains(temp.getDevId())).distinct().collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(pqsTerminalPushLogDTOList1)) { + String devNameString = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevName).distinct().collect(Collectors.joining(",")); + List resultDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); + PreCommandDTO preCommandDTO = new PreCommandDTO(); + String guid = IdUtil.simpleUUID(); + String command = "新增前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId + "下终端" + devNameString; + preCommandDTO.setGuid(guid); + preCommandDTO.setCommand(command); + preCommandDTO.setResult("2"); + + //调用重启进程接口 + this.askRestartDevice(guid, pqsTerminalPushLogDTO.getNodeId(), resultDevIds, DeviceRebootType.ADD_TERMINAL, processId); + + preCommandDTOList.add(preCommandDTO); + } + + } + if (collect.containsKey(DeviceRebootType.LEDGER_MODIFY)) { + List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.LEDGER_MODIFY); + List finalDeleteDevIds1 = deleteDevIds; + List finalAddDevIds1 = addDevIds; + pqsTerminalPushLogDTOList1 = pqsTerminalPushLogDTOList1.stream().filter(temp -> !finalDeleteDevIds1.contains(temp.getDevId()) && !finalAddDevIds1.contains(temp.getDevId())).distinct().collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(pqsTerminalPushLogDTOList1)) { + String devNameString = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevName).distinct().collect(Collectors.joining(",")); + List resultDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); + PreCommandDTO preCommandDTO = new PreCommandDTO(); + String guid = IdUtil.simpleUUID(); + String command = "修改前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId + "下终端" + devNameString; + preCommandDTO.setGuid(guid); + preCommandDTO.setCommand(command); + preCommandDTO.setResult("2"); + //调用重启进程接口 + this.askRestartDevice(guid, pqsTerminalPushLogDTO.getNodeId(), resultDevIds, DeviceRebootType.LEDGER_MODIFY, processId); + preCommandDTOList.add(preCommandDTO); + } - //调用重启设备接口 - this.askRestartDevice(guid, pqsTerminalPushLogDTO.getNodeId(), resultDevIds, DeviceRebootType.DELETE_TERMINAL, processId); - preCommandDTOList.add(preCommandDTO); } } - if (collect.containsKey(DeviceRebootType.ADD_TERMINAL)) { - List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.ADD_TERMINAL); - List finalDeleteDevIds = deleteDevIds; - pqsTerminalPushLogDTOList1 = pqsTerminalPushLogDTOList1.stream().filter(temp -> !finalDeleteDevIds.contains(temp.getDevId())).distinct().collect(Collectors.toList()); - - if (!CollectionUtils.isEmpty(pqsTerminalPushLogDTOList1)) { - String devNameString = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevName).distinct().collect(Collectors.joining(",")); - List resultDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); - PreCommandDTO preCommandDTO = new PreCommandDTO(); - String guid = IdUtil.simpleUUID(); - String command = "新增前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId + "下终端" + devNameString; - preCommandDTO.setGuid(guid); - preCommandDTO.setCommand(command); - preCommandDTO.setResult("2"); - - //调用重启进程接口 - this.askRestartDevice(guid, pqsTerminalPushLogDTO.getNodeId(), resultDevIds, DeviceRebootType.ADD_TERMINAL, processId); - - preCommandDTOList.add(preCommandDTO); - } - - } - if (collect.containsKey(DeviceRebootType.LEDGER_MODIFY)) { - List pqsTerminalPushLogDTOList1 = collect.get(DeviceRebootType.LEDGER_MODIFY); - List finalDeleteDevIds1 = deleteDevIds; - List finalAddDevIds1 = addDevIds; - pqsTerminalPushLogDTOList1 = pqsTerminalPushLogDTOList1.stream().filter(temp -> !finalDeleteDevIds1.contains(temp.getDevId()) && !finalAddDevIds1.contains(temp.getDevId())).distinct().collect(Collectors.toList()); - - if (!CollectionUtils.isEmpty(pqsTerminalPushLogDTOList1)) { - String devNameString = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevName).distinct().collect(Collectors.joining(",")); - List resultDevIds = pqsTerminalPushLogDTOList1.stream().map(PqsTerminalPushLogDTO::getDevId).distinct().collect(Collectors.toList()); - PreCommandDTO preCommandDTO = new PreCommandDTO(); - String guid = IdUtil.simpleUUID(); - String command = "修改前置机:" + pqsTerminalPushLogDTO.getNodeName() + "下进程:" + processId + "下终端" + devNameString; - preCommandDTO.setGuid(guid); - preCommandDTO.setCommand(command); - preCommandDTO.setResult("2"); - //调用重启进程接口 - this.askRestartDevice(guid, pqsTerminalPushLogDTO.getNodeId(), resultDevIds, DeviceRebootType.LEDGER_MODIFY, processId); - preCommandDTOList.add(preCommandDTO); - } - - } - - } - } + }); }); - }); + } catch (Exception e) { + //出现异常,直接重启整个前置 + exFlag=true; + for (Node node : nodes) { + RestartParam restartParam = new RestartParam(); + restartParam.setDeviceRebootType("1"); + restartParam.setNodeId(node.getId()); + + askRestartProcess(restartParam); + } + + } + if (!CollectionUtils.isEmpty(list1)) { list1.forEach(temp -> { temp.setIsPush(1); @@ -4016,6 +4051,10 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple } else { throw new BusinessException("暂无变动的装置测点推送"); } + if(exFlag){ + throw new BusinessException("存在未知错误,重启前置"); + + } if (CollectionUtils.isEmpty(preCommandDTOList)) { throw new BusinessException("暂无变动的装置测点推送"); } @@ -4166,7 +4205,21 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple subName = subMap.get(line.getPids().split(StrUtil.COMMA)[SUB_LEVEL.getCode()]).getName(); String temLos = "%s进行%s%s操作;详细信息: %s名称: %s"; if (line.getLevel().equals(LINE_LEVEL.getCode())) { - String devName = this.getById(line.getPids().split(StrUtil.COMMA)[DEVICE_LEVEL.getCode()]).getName(); + String devId=line.getPids().split(StrUtil.COMMA)[DEVICE_LEVEL.getCode()]; + Line byId = this.getById(devId); + String devName=""; + //设备已删除 + if(Objects.nonNull(byId)){ + devName= byId.getName(); + }else{ + List device = logsList.stream().filter(temp -> Objects.equals(temp.getId(), devId)).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(device)){ + devName =device.get(0).getName(); + }else { + devName = "已删除设备"; + + } + } tem = String.format(temLos, name, op, levelOperate, levelOperate, subName + "->" + devName + "->" + line.getName() + nodeName); } else { tem = String.format(temLos, name, op, levelOperate, levelOperate, subName + "->" + line.getName() + nodeName);