package org.openmuc.openiec61850; // //import com.alibaba.fastjson.JSON; //import com.beanit.openiec61850.*; //import com.beanit.rabbitmq.Producer; //import com.beanit.socket.Client; //import com.beanit.test.utils.*; //import com.beanit.test.view.MyTableRenderer; //import org.slf4j.Logger; //import org.slf4j.LoggerFactory; //import sun.misc.BASE64Encoder; // //import javax.swing.*; //import javax.swing.event.TableModelEvent; //import javax.swing.event.TableModelListener; //import javax.swing.table.DefaultTableModel; //import java.awt.*; //import java.awt.event.ActionEvent; //import java.awt.event.ActionListener; //import java.awt.event.WindowAdapter; //import java.awt.event.WindowEvent; //import java.io.IOException; //import java.net.InetAddress; //import java.net.UnknownHostException; //import java.util.*; //import java.util.List; //import java.util.Timer; ////电科院送检测试类 ///** // * @author LiBiChao // * @create 2019-08-06 // * @update 2020-10-20 // */ public class MyClient { // // private static final Logger logger = LoggerFactory.getLogger(MyClient.class); // // private Producer producer; // // private JTable mainTable; // private DefaultTableModel tableModel; // private String[] columnTitles = { "变电站", "IP地址", "端口", "上次采集时间"}; // private JScrollPane jsPane; // private Thread threads[]; // private Timer timers[]; // private Timer monitorTimer; // private Timer wakeUpTimer; // private Timer networkReviewTimer; // private JLabel labelTips; // private JTextField txtCollectDelay; // private JTextField txtSubstationDelay; // private JTextField txtSubstationList; // private JRadioButton radioCollectData = new JRadioButton("是"); // private JRadioButton radioNotCollectData = new JRadioButton("否"); // private JRadioButton radioCollectFile = new JRadioButton("是"); // private JRadioButton radioNotCollectFile = new JRadioButton("否"); // private JRadioButton radioDeleteRemote = new JRadioButton("是"); // private JRadioButton radioNotDeleteRemote = new JRadioButton("否"); // private boolean isCollectRemoteData = true; // private boolean isCollectRemoteFile = false; // private boolean isDeleteRemoteFile = false; // private static int CollectIntervalTimes = 1000 * 60 * 60 * 2; //同一站点采集两个小时 // private static int SubstaionIntervalTimes = 1000 * 60 * 3; //站点间采集间隔3分钟 // private JButton btnSetting; // private JButton btnStart; // private JButton btnDetail; // private boolean isRunning = false; // // private static String sendMessageMethod = "mq"; //可选mq和areaIII // private static Client client; // // public void ClientMain(){ // // logger.debug("ClientMain init..."); // // JFrame frm = new JFrame(); // frm.setLocation(100, 100); // frm.setSize(680, 610); // //frm.setBounds(100, 100, 300, 300); // 功能与上面相同 // frm.setTitle("云南电网变电在线监测采集系统 -【二区主站】"); // Container c = frm.getContentPane(); // frm中包含一个内容窗格, 需要获取内容窗格,再设置背景颜色,直接设置frm的背景颜色会被内容窗格挡住 // c.setBackground(new Color(230, 230, 230)); // frm.setLayout(null); // 如过不设置为null默认,按钮会充满整个内容框,挡住背景颜色 // // //配置信息-采集间隔 // JLabel labelCollect = new JLabel("采集间隔:"); // labelCollect.setLocation(50, 10); // labelCollect.setSize(70, 25); // frm.add(labelCollect); // txtCollectDelay = new JTextField(); // txtCollectDelay.setLocation(120, 10); // txtCollectDelay.setSize(50, 25); // txtCollectDelay.setText("120"); // txtCollectDelay.setEditable(false); // frm.add(txtCollectDelay); // JLabel collectUnit = new JLabel("分钟"); // collectUnit.setLocation(170, 10); // collectUnit.setSize(80, 25); // frm.add(collectUnit); // //配置信息-站点间隔 // JLabel labelSubstation = new JLabel("站点间隔:"); // labelSubstation.setLocation(220, 10); // labelSubstation.setSize(70, 25); // frm.add(labelSubstation); // txtSubstationDelay = new JTextField(); // txtSubstationDelay.setLocation(290, 10); // txtSubstationDelay.setSize(50, 25); // txtSubstationDelay.setText("5"); // txtSubstationDelay.setEditable(false); // frm.add(txtSubstationDelay); // JLabel substationUnit = new JLabel("分钟"); // substationUnit.setLocation(340, 10); // substationUnit.setSize(80, 25); // frm.add(substationUnit); // //配置信息-采集列表 // JLabel labelSubstationList = new JLabel("列表配置:"); // labelSubstationList.setLocation(390, 10); // labelSubstationList.setSize(70, 25); // frm.add(labelSubstationList); // txtSubstationList = new JTextField(); // txtSubstationList.setLocation(460, 10); // txtSubstationList.setSize(120, 25); // txtSubstationList.setText("substation_list.txt"); // txtSubstationList.setEditable(false); // frm.add(txtSubstationList); // //配置信息-采集数据 // JLabel labelCollectData = new JLabel("采集数据:"); // labelCollectData.setLocation(50, 40); // labelCollectData.setSize(70, 25); // frm.add(labelCollectData); // ButtonGroup collectDataBtnGroup = new ButtonGroup(); // collectDataBtnGroup.add(radioCollectData); // radioCollectData.setLocation(120, 40); // radioCollectData.setSize(40, 25); // radioCollectData.setSelected(true); // radioCollectData.setEnabled(false); // frm.add(radioCollectData); // collectDataBtnGroup.add(radioNotCollectData); // radioNotCollectData.setLocation(160, 40); // radioNotCollectData.setSize(40, 25); // radioNotCollectData.setEnabled(false); // frm.add(radioNotCollectData); // //配置信息-采集文件 // JLabel labelCollectFile = new JLabel("采集谱图:"); // labelCollectFile.setLocation(220, 40); // labelCollectFile.setSize(70, 25); // frm.add(labelCollectFile); // ButtonGroup collectFileBtnGroup = new ButtonGroup(); // collectFileBtnGroup.add(radioCollectFile); // radioCollectFile.setLocation(290, 40); // radioCollectFile.setSize(40, 25); // radioCollectFile.setEnabled(false); // frm.add(radioCollectFile); // collectFileBtnGroup.add(radioNotCollectFile); // radioNotCollectFile.setLocation(330, 40); // radioNotCollectFile.setSize(40, 25); // radioNotCollectFile.setSelected(true); // radioNotCollectFile.setEnabled(false); // frm.add(radioNotCollectFile); // //配置信息-删除远端文件 // JLabel labelDeleteRemote = new JLabel("采完删除:"); // labelDeleteRemote.setLocation(390, 40); // labelDeleteRemote.setSize(70, 25); // frm.add(labelDeleteRemote); // ButtonGroup deleteBtnGroup = new ButtonGroup(); // deleteBtnGroup.add(radioDeleteRemote); // radioDeleteRemote.setLocation(460, 40); // radioDeleteRemote.setSize(40, 25); // radioDeleteRemote.setEnabled(false); // frm.add(radioDeleteRemote); // deleteBtnGroup.add(radioNotDeleteRemote); // radioNotDeleteRemote.setLocation(500, 40); // radioNotDeleteRemote.setSize(40, 25); // radioNotDeleteRemote.setSelected(true); // radioNotDeleteRemote.setEnabled(false); // frm.add(radioNotDeleteRemote); // // //配置按钮 // btnSetting = new JButton("配置"); // btnSetting.setLocation(550, 80); // btnSetting.setSize(90, 30); // btnSetting.setBackground(new Color(224, 234, 244)); // btnSetting.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // //logger.debug(e.getActionCommand()); // if(isRunning){ // //logger.debug("请先停止采集再进行配置!#_#"); // labelTips("请先停止采集再进行配置!", "warning"); // return; // } // if(txtCollectDelay.isEditable()){ // int intCollectIntervalMinute = Integer.valueOf(txtCollectDelay.getText()); // CollectIntervalTimes = intCollectIntervalMinute * 60 * 1000; // int intSubstationIntervalMinute = Integer.valueOf(txtSubstationDelay.getText()); // SubstaionIntervalTimes = intSubstationIntervalMinute * 60 * 1000; // if(radioCollectData.isSelected()){ // isCollectRemoteData = true; // }else { // isCollectRemoteData = false; // } // if(radioCollectFile.isSelected()){ // isCollectRemoteFile = true; // }else { // isCollectRemoteFile = false; // } // if(radioDeleteRemote.isSelected()){ // isDeleteRemoteFile = true; // }else{ // isDeleteRemoteFile = false; // } // txtCollectDelay.setEditable(false); // txtSubstationDelay.setEditable(false); // txtSubstationList.setEditable(false); // radioCollectData.setEnabled(false); // radioNotCollectData.setEnabled(false); // radioCollectFile.setEnabled(false); // radioNotCollectFile.setEnabled(false); // radioDeleteRemote.setEnabled(false); // radioNotDeleteRemote.setEnabled(false); // //重新加载站点列表 // dataLoad(); // btnSetting.setText("配置"); // labelTips("配置保存成功!", ""); // }else { // txtCollectDelay.setEditable(true); // txtSubstationDelay.setEditable(true); // txtSubstationList.setEditable(true); // radioCollectData.setEnabled(true); // radioNotCollectData.setEnabled(true); // radioCollectFile.setEnabled(true); // radioNotCollectFile.setEnabled(true); // radioDeleteRemote.setEnabled(true); // radioNotDeleteRemote.setEnabled(true); // btnSetting.setText("保存"); // txtCollectDelay.requestFocus(); // labelTips("编辑配置...", ""); // } // } // }); // frm.add(btnSetting); // //采集详情 // btnDetail = new JButton("采集详情"); // btnDetail.setLocation(150, 80); // btnDetail.setSize(90, 30); // btnDetail.setBackground(new Color(224, 234, 244)); // btnDetail.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // logger.debug(e.getActionCommand()); // int rowIndex = mainTable.getSelectedRow(); // if(rowIndex < 0){ // //logger.debug("未选择站点!#_#"); // labelTips("未选择站点!", "warning"); // return; // } // MyClientGui myClientGui = new MyClientGui(); // myClientGui.setIpTextField(tableModel.getValueAt(rowIndex, 1).toString()); // myClientGui.setPortTextField(tableModel.getValueAt(rowIndex, 2).toString()); // //myClientGui.dispose(); // } // }); // frm.add(btnDetail); // // //确定按钮 // btnStart = new JButton("开始采集"); // btnStart.setLocation(50, 80); // btnStart.setSize(90, 30); // btnStart.setBackground(new Color(224, 234, 244)); // btnStart.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // if(tableModel.getRowCount() <= 0){ // //logger.warn("采集列表为空!"); // labelTips("采集列表为空!", "warning"); // return; // } // if(txtCollectDelay.isEditable()){ // //logger.warn("请先保存配置!"); // labelTips("请先保存配置!", "warning"); // return; // } // // if (ConfigUtil.isNetworkReview){ // if (!isRunning) { // startNetworkReview(); // isRunning = true; // btnStart.setText("停止检查"); // }else{ // networkReviewTimer.cancel(); // isRunning = false; // btnStart.setText("开始检查"); // } // return; // } // // if(!isRunning) { // //启动状态监视器 // monitorSchedule(); // //重连定时器 // wakeUpSchedule(); // isRunning = true; // btnStart.setText("停止采集"); // collectStart(); // }else{ // collectStop(); // //停止监视器 // monitorTimer.cancel(); // logger.debug("状态监视器已停止。"); // //停止重连器 // wakeUpTimer.cancel(); // logger.debug("重连定时器已停止。"); // isRunning = false; // btnStart.setText("开始采集"); // } // } // }); // frm.add(btnStart); // //站点增加按钮 // JButton btnAddRow = new JButton("增加站点"); // btnAddRow.setLocation(250, 80); // btnAddRow.setSize(90, 30); // btnAddRow.setBackground(new Color(224, 234, 244)); // btnAddRow.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // if(isRunning){ // logger.warn("采集中不能增加站点!"); // return; // } // //tableModel.setRowCount(tableModel.getDataVector().size() + 1); // tableModel.setRowCount(tableModel.getRowCount() + 1); // tableModel.setValueAt("null", tableModel.getRowCount() - 1, 0); // mainTable.changeSelection(tableModel.getRowCount() - 1, 0, true, false); // } // }); // frm.add(btnAddRow); // // //删除增加按钮 // JButton btnDelRow = new JButton("删除站点"); // btnDelRow.setLocation(350, 80); // btnDelRow.setSize(90, 30); // btnDelRow.setBackground(new Color(224, 234, 244)); // btnDelRow.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // if(isRunning){ // logger.warn("采集中不能删除站点!"); // labelTips("采集中不能删除站点!", "warning"); // return; // } // int rowIndex = mainTable.getSelectedRow(); // if(rowIndex < 0){ // logger.debug("未选择站点!#_#"); // labelTips("未选择站点#_#!", "warning"); // return; // } // boolean flag = ConfigUtil.delSubstation(txtSubstationList.getText(), rowIndex); // if (flag) { // tableModel.removeRow(rowIndex); // } // logger.debug("--------------- 删除:" + flag + "--------------------"); // } // }); // frm.add(btnDelRow); // // //JTable // tableModel = new DefaultTableModel(columnTitles, 0); // tableModel.addTableModelListener(new TableModelListener() { // @Override // public void tableChanged(TableModelEvent e) { // // if(e.getType() == TableModelEvent.UPDATE){ // if(e.getLastRow() >= 0){ // int rowIndex = e.getLastRow(); // int colIndex = e.getColumn(); // String strValue = tableModel.getValueAt(rowIndex, colIndex).toString(); // //System.out.println(" setSubstationValue: [" + rowIndex + ", " + colIndex + "]=>" + strValue); // boolean flag = ConfigUtil.setSubstationValue(txtSubstationList.getText(), rowIndex, colIndex, strValue); // //System.out.println(flag + " setSubstationValue: [" + rowIndex + ", " + colIndex + "]=>" + strValue); // } // } // } // }); // // mainTable = new JTable(tableModel); // //mainTable.getColumnModel().getColumn(1).setCellEditor(new MyRender());//设置编辑器 // //mainTable.getColumnModel().getColumn(1).setCellRenderer(new MyRender() ); // jsPane = new JScrollPane(mainTable); // jsPane.setSize(600, 400); // jsPane.setLocation(30, 130); // frm.add(jsPane); // mainTable.setDefaultRenderer(Object.class, new MyTableRenderer()); // // //底部提示信息 // JLabel labelTipsTitle = new JLabel("提示信息:"); // labelTipsTitle.setLocation(50, 530); // labelTipsTitle.setSize(70, 25); // frm.add(labelTipsTitle); // labelTips = new JLabel("welcome!"); // labelTips.setLocation(120, 530); // labelTips.setSize(500, 25); // frm.add(labelTips); // // dataLoad(); // // //frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // frm.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // frm.addWindowListener(new WindowAdapter() { // @Override // public void windowClosing(WindowEvent e) { // super.windowClosing(e); // int result = JOptionPane.showConfirmDialog(null, "确认退出?", "确认",JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE); // if (result == JOptionPane.OK_OPTION) { // // 退出 // System.exit(0); // } // } // }); // // if (ConfigUtil.isNetworkReview){ // btnStart.setText("开始检查"); // btnAddRow.setEnabled(false); // btnDelRow.setEnabled(false); // btnDetail.setEnabled(false); // btnSetting.setEnabled(false); // } // // frm.setVisible(true); // // // 三区服务连接 // //client = new Client(); // //client.init(); // //client.conn(); // // // //初始化消息队列 // if(ConfigUtil.isDebug){ // return; // } // try { // producer = new Producer("ztjc"); // logger.debug("消息队列初始化完成!^_^"); // } catch (IOException e) { // System.out.println("消息队列初始化失败!@_@"); // e.printStackTrace(); // } // } // // /** // * 状态监视器 // */ // private void monitorSchedule(){ // monitorTimer = new Timer(); // monitorTimer.schedule(new TimerTask() { // @Override // public void run() { // //刷新mainTabled的数据状态,可发送心跳 // //System.out.print("*"); // int rowIndex = mainTable.getSelectedRow(); // int colIndex = mainTable.getSelectedColumn(); // //logger.debug(rowIndex + " - " + colIndex); // mainTable.changeSelection(rowIndex, colIndex, true, false); // mainTable.changeSelection(rowIndex, colIndex, true, false); // } // }, 1000, 3000); // logger.debug("状态监视器已启动。"); // } // // /** // * 定时唤醒任务 // */ // private void wakeUpSchedule(){ // wakeUpTimer = new Timer(); // int substationCount = mainTable.getRowCount(); // long startTime = substationCount * SubstaionIntervalTimes; // wakeUpTimer.schedule(new TimerTask() { // @Override // public void run() { // logger.debug("重连定时器开始执行..."); // for (int i = 0; i < substationCount; i++){ // String name = tableModel.getValueAt(i,0).toString(); // String ip = tableModel.getValueAt(i,1).toString(); // int port = Integer.valueOf(tableModel.getValueAt(i,2).toString()); // String lastTime = tableModel.getValueAt(i,3).toString(); // if(lastTime != null && lastTime.length() == 19){ // long millisTime = SimpleUtils.DateTimeToMillisTime(lastTime); // if((System.currentTimeMillis() - 3 * 60 * 60 * 1000) > millisTime){ // logger.debug("重连定时器【" + (i + 1) + " - " + name + "】 开始连接至变电站 => " + ip + ":" + port // + " [" + SimpleUtils.CurrentDateTime() + "]"); // collectToSubstation(ip, port, i); // }else{ // continue; // } // }else{ // logger.debug("重连定时器【" + (i + 1) + " - " + name + "】 开始连接至变电站 => " + ip + ":" + port // + " [" + SimpleUtils.CurrentDateTime() + "]"); // collectToSubstation(ip, port, i); // } // } // } // }, startTime, 5 * 60 * 1000); // logger.debug("重连定时器" + Math.floor((startTime/60)/1000) + "分钟后启动。"); // } // // protected void collectToSubstation(String ip, int port, int rowIndex){ // String subStationName = mainTable.getValueAt(rowIndex, 0).toString(); // ClientSap clientSap = new ClientSap(); // //clientSap.setMaxMmsPduSize(6500000); // //logger.debug("MaxMmsPduSize: " + clientSap.getMaxMmsPduSize()); // InetAddress address; // try { // address = InetAddress.getByName(ip); // } catch (UnknownHostException e1) { // logger.error("【" + subStationName + "】 IP地址错误: " + "ip Address ERROR" ); // labelTips("【" + subStationName + "】 IP地址错误!", "error"); // e1.printStackTrace(); // return; // } // try { // if (port < 1 || port > 0xFFFF) { // throw new NumberFormatException("端口超出范围: " + "port must be in range [1, 65535]"); // } // } catch (NumberFormatException e) { // logger.error("【" + subStationName + "】 端口异常: " + "port ERROR"); // labelTips("【" + subStationName + "】 端口异常!", "error"); // e.printStackTrace(); // return; // } // // //clientSap.setTSelLocal(settingsFrame.getTselLocal()); // //clientSap.setTSelRemote(settingsFrame.getTselRemote()); // // ClientAssociation association; // try { // association = clientSap.associate(address, port, null, null); // } catch (IOException e) { // logger.debug("【" + subStationName + "】 连接失败: " + e.getMessage()); // labelTips("【" + subStationName + "】 连接失败!", "error"); //// if(ConfigUtil.isNetworkReview) { //// checkNet(ip, port); //// } // sendErrorLog(subStationName, ip, e.getMessage()); // checkNet(subStationName, ip, port); // return; // } // // //数据读取 // if(isCollectRemoteData) { // boolean flag = readData(association, ip, subStationName); // if(flag){ // String strDate = SimpleUtils.CurrentDateTime(); // tableModel.setValueAt(strDate, rowIndex, 3); // boolean flag2 = ConfigUtil.setSubstationValue(txtSubstationList.getText(), rowIndex, 3, strDate); // logger.debug("【" + subStationName + "】 本次采集任务完成!"); // labelTips("【" + subStationName + "】 完成一次采集任务!", ""); // }else{ // logger.debug("【" + subStationName + "】 本次采集任务结束,但存在异常*_*!"); // labelTips("【" + subStationName + "】 采集任务结束,存在异常!", "error"); // checkNet(subStationName, ip, port); // } // } // // if(!isCollectRemoteFile){ // association.disconnect(); // association.close(); // //logger.debug(association.isOpen() + ""); // return; // } // //文件读取 // String dirName = ""; // List fileList = null; // try { // fileList = association.getFileDirectory(dirName); // } catch (ServiceError serviceError) { // serviceError.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // for(int i = 0; i < fileList.size(); i++){ // FileInformation remoteFile = (FileInformation)fileList.get(i); // String fileName = remoteFile.getFilename(); // if(fileName.contains("COMTRADE")){ // dirName = fileName; // try { // fileList = association.getFileDirectory(dirName); // } catch (ServiceError serviceError) { // serviceError.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // break; // } // } // if(fileList == null){ // logger.debug("【" + subStationName + "】 远程文件目录读取失败"); // labelTips("【" + subStationName + "】 远程文件目录读取失败!", "error"); // } // //定义文件临时存储目录 // final String tempSavePath = "temp/tempSavePath/" + ip; // FileOption.creatDir(tempSavePath); //创建目录 // //定义文件采集日志目录 // final String tempLogFile = "log.txt"; // String lastLog = FileOption.readFileLastLine(tempSavePath, tempLogFile); // if(!FileOption.fileExist(tempSavePath + "/" + tempLogFile)){ // FileOption.createFile(tempSavePath, tempLogFile); //创建文件 // lastLog = "[sendCount:0, deleteCount:0]-Time " + "2019-09-01 00:00:00"; // FileOption.writeFile(lastLog, tempSavePath, tempLogFile); // } // logger.debug("【" + subStationName + "】 读取上次谱图采集日志: " + lastLog); // logger.debug("【" + subStationName + "】 读取远程文件数量: " + fileList.size()); // labelTips("【" + subStationName + "】 读取远程文件数量: " + fileList.size(), ""); // int sendCount = 0; // List deleteList = new ArrayList(); // for(int i = 0; i < fileList.size(); i++){ // //if(i > 2) continue; // //限制单次采集不超过5000个文件 // if(sendCount >= 5000){ // continue; // } // sendCount ++; // FileInformation remoteFile = (FileInformation)fileList.get(i); //// long fileMillisTime = remoteFile.getLastModified().getTimeInMillis(); //// //文件时间小于上次采集的时间则忽略 //// if(fileMillisTime < startDate){ //// continue; //// } // final String fileName = remoteFile.getFilename(); // //清理已存在的临时文件 // FileOption.deleteFile(tempSavePath, fileName); // logger.debug("\n开始采集文件:" + System.currentTimeMillis() + " => file-" + (i + 1) + ": " + fileName // + " Size: " + remoteFile.getFileSize()); // try { // association.getFile(fileName, new GetFileListener() { // @Override // public boolean dataReceived(byte[] fileData, boolean moreFollows) { // //logger.debug("开始写入临时文件前时间:" + System.currentTimeMillis()); // boolean isSaved = FileOption.writeBinaryFile(tempSavePath, fileName, fileData, true); // //logger.debug("完成写入临时文件后时间:" + System.currentTimeMillis()); // //logger.debug(tempSavePath + fileName + " save: " + isSaved); // //logger.debug("moreFollows:" + moreFollows); // while (moreFollows){ // return true; // } // //文件传输完成,打包文件 // //logger.debug("单个文件传输完成时间:" + System.currentTimeMillis()); // String strData = getFileCompressBase64(tempSavePath, fileName); // //logger.debug("生成数据时间:" + System.currentTimeMillis()); // //logger.debug("temp file temp saved: " + fileName); // //打包完成,删除文件 // boolean deleteFlag = FileOption.deleteFile(tempSavePath, fileName); // //boolean deleteFlag = false; // if(!deleteFlag){ // logger.debug("temp file delete: " + "failure"); // } // boolean complete = sendFileDate(ip, fileName, strData); // if(complete){ // deleteList.add(fileName); // } // return false; // } // }); // } catch (ServiceError serviceError) { // serviceError.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // } // //记录执行日志 // String newLogStr = "\n" + "[sendCount:" + sendCount + ", deleteCount:" + deleteList.size() + "]-Time " // + SimpleUtils.MillisToDateTime(System.currentTimeMillis()); // //更新采集时间 // String strDate = SimpleUtils.CurrentDateTime(); // tableModel.setValueAt(strDate, rowIndex, 3); // //记录采集日志 // FileOption.writeFile(newLogStr, tempSavePath, tempLogFile, true); // logger.debug("【" + subStationName + "】 谱图采集完成!"); // labelTips("【" + subStationName + "】 本次谱图采集完成!", ""); // if(!isDeleteRemoteFile){ // association.disconnect(); // association.close(); // return; // } // //删除远程文件 // for(int i = 0; i < deleteList.size(); i++){ // try { // association.deleteFile(deleteList.get(i)); // logger.debug("remote file delete: " + deleteList.get(i)); // } catch (ServiceError serviceError) { // serviceError.printStackTrace(); // logger.debug("remote file delete: " + "failure"); // } catch (IOException e) { // e.printStackTrace(); // logger.debug("remote file delete: " + "failure"); // } // } // logger.debug("【" + subStationName + "】 远程谱图文件删除完成!"); // association.disconnect(); // association.close(); // //logger.debug(association.isOpen() + ""); // //logger.debug("恭喜你!本次采集完成了!!!"); // } // // private boolean readData(ClientAssociation association, String ipAddress, String subStationName){ // ServerModel serverModel; // try { // logger.debug("【" + subStationName + "】 开始读取数据模型..."); // labelTips("【" + subStationName + "】 开始读取数据模型...", ""); // serverModel = association.retrieveModel(); // logger.debug("【" + subStationName + "】 数据模型读取成功^_^"); // logger.debug("【" + subStationName + "】 开始采集数据..."); // labelTips("【" + subStationName + "】 开始采集数据^_^...", ""); // association.getAllDataValues(); // // for(ModelNode modelNodeLD : serverModel.getChildren()) { // LogicalDevice logicalDevice = (LogicalDevice)modelNodeLD; // if (logicalDevice.getReference().toString().contains("_LD0")) {//过滤综合数据处理单元LD0 // continue; // } // for (ModelNode modelNodeLN : logicalDevice.getChildren()) { // LogicalNode logicalNode = (LogicalNode)modelNodeLN; // int start = logicalNode.getReference().toString().indexOf('/'); // String lnReference = logicalNode.getReference().toString().substring(start); // if(lnReference.contains("LLN0")// 综合数据处理单元LD下面LLN0 // | lnReference.contains("GGIO")// 综合数据处理单元LD下面GGIO // | lnReference.contains("LPHD")// 综合数据处理单元LD下面LPHD // | lnReference.contains("RDRE")) {// 综合数据处理单元LD下面RDRE // continue; // } // // logger.debug(logicalNode.getName()); // List doKeyList = new ArrayList<>(); // for (ModelNode modelNodeDO : logicalNode.getChildren()) { // if (!doKeyList.contains(modelNodeDO.getName())) { // doKeyList.add(modelNodeDO.getName()); // } else { // continue; // } // } // // if(!doKeyList.contains("NamPlt")){ // String errorMsg = "【" + subStationName + "】 " + logicalNode.getReference().toString() + "配置文件铭牌定义错误"; // logger.error(logicalNode.getReference().toString() + " not contain NamPlt!!!!"); // labelTips(errorMsg, "error"); // sendErrorLog(subStationName, ipAddress, errorMsg); // continue; // } // doKeyList.remove("NamPlt"); // // //Map mapId = new HashMap<>(); // ModelNode modelNodeId = logicalNode.getChild("NamPlt", Fc.DC); // Map mapId = getChildrenData(modelNodeId); // String strNamPltValue = ((Map)mapId.get("dU")).get("value").toString(); // //byte[] byteNamPltValue = strNamPltValue.getBytes(); // //String packageType = "Linux"; // //packageType = "Windows"; // //if(packageType.equals("Windows")){ // //strNamPltValue = new String(byteNamPltValue, "UTF-8"); // //} // String[] strNamPltValues = strNamPltValue.split("\\|"); // //logger.debug("" + NamPltValues.length); // // if(strNamPltValues.length < 5){ // String errorMsg = "【" + subStationName + "】 NamPlt:dU=>" + strNamPltValue + " ;描述错误!"; // logger.error(errorMsg); // labelTips("【" + subStationName + "】 配置文件铭牌dU值定义错误", "error"); // sendErrorLog(subStationName, ipAddress, errorMsg); // //continue; // } // //logger.debug(strNamPltValues[4].length() + ""); // if(strNamPltValues.length >= 5 && strNamPltValues[4].length() < 2){ // String errorMsg = "【" + subStationName + "】 NamPlt:dU=>" + strNamPltValue + " ;相位描述不完整!"; // logger.error(errorMsg); // labelTips("【" + subStationName + "】 配置文件铭牌dU值相位描述不完整", "error"); // sendErrorLog(subStationName, ipAddress, errorMsg); // //continue; // } // //logger.debug(JSON.toJSONString(mapId)); // logger.debug("【" + subStationName + "】 ------ [" + strNamPltValue + "] " + logicalNode.getReference().toString() + " 开始打包发送数据: " + doKeyList.size() +" 条 ------"); // for (String doKey : doKeyList){ // Map mapDo = new HashMap<>(); // for (Fc fc: SimpleUtils.FcList()){ // ModelNode modelNodeDo = logicalNode.getChild(doKey, fc); // if(modelNodeDo == null){ // continue; // } // Map mapDataChildren = getChildrenData(modelNodeDo); // if(mapDataChildren.get("t") != null){ // Map mapDataTime = (HashMap)mapDataChildren.get("t"); // long dataTime = SimpleUtils.DateTimeToMillisTime(mapDataTime.get("value").toString(), "yyyyMMddHHmmss"); // if(System.currentTimeMillis() - dataTime > 2 * 24 * 60 * 60 * 1000){ // //logger.debug(mapDataTime.get("value").toString()); // sendErrorLog(subStationName, ipAddress, logicalNode.getChild(doKey).getReference().toString() + ":" + mapDataTime.get("value").toString()); // } // } // mapDo.put(fc.toString(), getChildrenData(modelNodeDo)); // } // mapDo.put("ID", mapId); // Map mapData = new HashMap<>(); // mapData.put("type", "GC"); // if (ConfigUtil.isDebug) { // logger.debug(doKey); // logger.debug(logicalNode.getChild(doKey).getReference().toString()); // } // mapData.put(ipAddress + "$" + logicalNode.getChild(doKey).getReference().toString(), mapDo); // String data = JSON.toJSONString(mapData); // //logger.debug(data); // sendDataToMQ(data); // //sendDataToIII(data); // System.out.println(data); // } // } // } // } catch (ServiceError e) { // System.out.println("Service Error requesting model." + e.getMessage()); // String errorMsg = "Service Error requesting model." + e.getMessage().toString(); // sendErrorLog(subStationName, ipAddress, errorMsg); // association.close(); // return false; // } catch (IOException e) { // System.out.println("Fatal IOException requesting model." + e.getMessage()); // String errorMsg = "Fatal IOException requesting model." + e.getMessage().toString(); // sendErrorLog(subStationName, ipAddress, errorMsg); // return false; // } // // //ServerModelParser parser = new ServerModelParser(serverModel); // return true; // } // // private Map getChildrenData(ModelNode modelNode){ // //logger.debug(modelNode.getName()); // Map mapData = new HashMap<>(); // if(modelNode.getChildren() == null){ // try{ // mapData = getBasicData(modelNode); // }catch (Exception e){ // logger.error("数据解析出错!"); // e.printStackTrace(); // } // return mapData; // } // for (ModelNode modelNodeChild : modelNode.getChildren()) { // mapData.put(modelNodeChild.getName(), getChildrenData(modelNodeChild)); // } // return mapData; // } // // private Map getBasicData(ModelNode modelNode){ // Map map = new HashMap<>(); // BasicDataAttribute dataAttribute = (BasicDataAttribute)modelNode; // String dataReference = dataAttribute.getReference().toString(); // map.put("basicType", dataAttribute.getBasicType().toString()); // map.put("dchg", dataAttribute.getDchg()); // map.put("qchg", dataAttribute.getQchg()); // map.put("dupd", dataAttribute.getDupd()); // //logger.debug((dataAttribute).toString()); //// if((dataReference.length() + 2) == dataAttribute.toString().length()){ //// map.put("value", null); //// return map; //// } // switch (dataAttribute.getBasicType()) { // case BOOLEAN: // map.put("value", ((BdaBoolean)dataAttribute).getValue()); // break; // case ENTRY_TIME: // map.put("value", SimpleUtils.DataTimeParse(((BdaEntryTime)dataAttribute).getValueString())); // break; // case FLOAT32: // map.put("value", ((BdaFloat32)dataAttribute).getFloat().toString()); // break; // case FLOAT64: // map.put("value", ((BdaFloat64)dataAttribute).getDouble().toString()); // break; // case INT16: // map.put("value", ((BdaInt16)dataAttribute).getValue()); // break; // case INT16U: // map.put("value", ((BdaInt16U)dataAttribute).getValue()); // break; // case INT32: // map.put("value", ((BdaInt32)dataAttribute).getValue()); // break; // case INT32U: // map.put("value", ((BdaInt32U)dataAttribute).getValue()); // break; // case INT64: // map.put("value", ((BdaInt64)dataAttribute).getValue()); // break; // case INT8: // map.put("value", ((BdaInt8)dataAttribute).getValue()); // break; // case INT8U: // map.put("value", ((BdaInt8U)dataAttribute).getValue()); // break; // case OCTET_STRING: // map.put("maxLength", ((BdaOctetString)dataAttribute).getMaxLength()); // map.put("value", new String(((BdaOctetString)dataAttribute).getValue())); // break; // case TIMESTAMP: // map.put("value", SimpleUtils.DataTimeParse(((BdaTimestamp)dataAttribute).getValueString())); // break; // case UNICODE_STRING: // //logger.debug(((BdaUnicodeString)dataAttribute).toString()); // //logger.debug(new String(((BdaUnicodeString)dataAttribute).getValue())); // map.put("maxLength", ((BdaUnicodeString)dataAttribute).getMaxLength()); // map.put("value", new String(((BdaUnicodeString)dataAttribute).getValue())); // break; // case VISIBLE_STRING: // map.put("maxLength", ((BdaVisibleString)dataAttribute).getMaxLength()); // map.put("value", new String(((BdaVisibleString)dataAttribute).getValue())); // break; // case CHECK: // map.put("maxNumBits", ((BdaCheck)dataAttribute).getMaxNumBits()); // map.put("value", ((BdaCheck)dataAttribute).getValueString()); // break; // case DOUBLE_BIT_POS: // map.put("maxNumBits", ((BdaOptFlds)dataAttribute).getMaxNumBits()); // map.put("value", ((BdaDoubleBitPos)dataAttribute).getDoubleBitPos().toString()); // break; // case OPTFLDS: // map.put("maxNumBits", ((BdaOptFlds)dataAttribute).getMaxNumBits()); // map.put("value", ((BdaOptFlds)dataAttribute).getValueString()); // break; // case QUALITY: // //logger.debug(((BdaQuality)dataAttribute).toString()); // //logger.debug(((BdaQuality)dataAttribute).getValue().toString()); // //logger.debug(((BdaQuality)dataAttribute).getValidity().toString()); // //logger.debug(((BdaQuality)dataAttribute).getValidity().getIntValue() + ""); // map.put("maxNumBits", ((BdaQuality)dataAttribute).getMaxNumBits()); // if((dataReference.length() + 2) == dataAttribute.toString().length()) { // map.put("value", BdaQuality.Validity.GOOD); // break; // } // map.put("value", ((BdaQuality)dataAttribute).getValidity().toString()); // break; // case REASON_FOR_INCLUSION: // map.put("maxNumBits", ((BdaReasonForInclusion)dataAttribute).getMaxNumBits()); // map.put("value", ((BdaReasonForInclusion)dataAttribute).getValueString()); // break; // case TAP_COMMAND: // map.put("maxNumBits", ((BdaTapCommand)dataAttribute).getMaxNumBits()); // map.put("value", ((BdaTapCommand)dataAttribute).getTapCommand().toString()); // break; // case TRIGGER_CONDITIONS: // map.put("maxNumBits", ((BdaTriggerConditions)dataAttribute).getMaxNumBits()); // map.put("value", ((BdaTriggerConditions)dataAttribute).getValueString()); // break; // default: // logger.debug("BasicType " + dataAttribute.getBasicType() + " unknown"); // //map.put("value", ((BdaEntryTime)dataAttribute).getValue()); // //throw new IllegalArgumentException("BasicType " + dataAttribute.getBasicType() + " unknown"); // } // return map; // } // // private boolean sendDataToMQ(String data){ // if (ConfigUtil.isDebug) { // logger.debug("发送数据:" + data); // } // if(producer == null){ // if(!ConfigUtil.isDebug) { // //logger.error("消息队列初始化未完成"); // } // return false; // } // try { // producer.sendMessage(data); // } catch (IOException e) { // e.printStackTrace(); // return false; // } // return true; // } // // private boolean sendDataToIII(String data){ // // 检查/唤醒连接 // client.conn(); // try { // System.out.println("try socket client send"); // client.sendData(data); // } catch (Exception e) { // e.printStackTrace(); // return false; // } // return true; // } // // private boolean sendErrorLog(String substationName, String ipAddress, String data){ // Map errorMsgMap = new HashMap<>(); // if(ipAddress == null || ipAddress.length() < 7){ // return false; // } // errorMsgMap.put("type", "ERR_MSG"); // errorMsgMap.put("name", substationName); // errorMsgMap.put("ip", ipAddress); // errorMsgMap.put("data", data); // errorMsgMap.put("datetime", SimpleUtils.CurrentDateTime()); // sendDataToMQ(JSON.toJSONString(errorMsgMap)); // return true; // } // // private boolean sendFileDate(String ip, String fileName, String fileData) { // //logger.debug(fileName); // Map mapData = new HashMap<>(); // mapData.put("type", "WF");//type目前有GC、ZT、ZH,增加一个WF标记为谱图 // Map mapSubData = new HashMap<>(); // Map mapSubSubData = new HashMap<>(); // mapSubSubData.put("fileName", FileOption.trimPath(fileName)); // mapSubData.put("ID", mapSubSubData); // mapSubData.put("FD", fileData); // //mapData.put(ip + "$" + "BSCYB01HNZF2_ZT2202/PTRSIML1" + "." + "WaveFileNum", mapSubData); // mapData.put(ip + "$" + "WaveFileNum", mapSubData); // String data = JSON.toJSONString(mapData); // //logger.debug(jsonObject.toString()); // return sendDataToMQ(data); // } // // /** // * 读取文件进行压缩并编码 // * @param filePath // * @param fileName // * @return // */ // private String getFileCompressBase64(String filePath, String fileName) { // byte[] fileBytes = FileOption.readFileByByte(filePath, fileName); // //logger.debug("二进制长度 = " + fileBytes.length); // //压缩 // //logger.debug("压缩前时间:" + System.currentTimeMillis()); // byte[] compressBytes = GZIPUtils.compress(fileBytes); // //logger.debug("压缩后时间:" + System.currentTimeMillis()); // //logger.debug("二进制压缩后长度 = " + compressBytes.length); // //编码 // final BASE64Encoder encoder = new BASE64Encoder(); // //logger.debug("编码前时间:" + System.currentTimeMillis()); // final String encodedStr = encoder.encode(compressBytes); // //logger.debug("编码后时间:" + System.currentTimeMillis()); // //logger.debug("编码后字符串长度 = " + encodedStr.length()); // return encodedStr; // } // // protected void collectStart() { // threads = new Thread[tableModel.getRowCount()]; // timers = new Timer[tableModel.getRowCount()]; // logger.debug("初始化 " + tableModel.getRowCount() + " 个站点!"); // for(int i = 0; i < tableModel.getRowCount(); i++){ //// if(i != 0){ //// continue; //// } // final String name = tableModel.getValueAt(i,0).toString(); // final String ip = tableModel.getValueAt(i,1).toString(); // final int port = Integer.valueOf(tableModel.getValueAt(i,2).toString()); // final int threadIndex = i; // threads[i] = new Thread(new Runnable() { // @Override // public void run() { // timers[threadIndex] = new Timer(); // // TimerTask timerTask = new TimerTask() { // @Override // public void run() { // logger.debug("定时任务【" + (threadIndex + 1) + " - " + name + "】 开始连接至变电站 => " + ip + ":" + port // + " [" + SimpleUtils.CurrentDateTime() + "]"); // collectToSubstation(ip, port, threadIndex); // } // }; // timers[threadIndex].schedule(timerTask, threadIndex * SubstaionIntervalTimes, CollectIntervalTimes); // } // }); // threads[i].start(); // } // } // // protected void collectStop(){ // for(int i = 0; i < timers.length; i++){ // //logger.debug(threads[i].isAlive() + ""); // timers[i].cancel(); // } // logger.debug("停止 " + timers.length + " 个采集任务!"); // labelTips("停止 " + timers.length + " 个采集任务!", ""); // } // // protected void dataLoad(){ // tableModel.setDataVector(ConfigUtil.readSubstation(txtSubstationList.getText()), columnTitles); // //logger.debug("-- 站点列表加载完成 --"); // labelTips("站点列表加载完成^_^!", ""); // } // // private void labelTips(String msg, String msgType){ // msg = msg + "[" + SimpleUtils.CurrentDateTime() + "]"; // switch (msgType){ // case "error": // labelTips.setText(msg); // labelTips.setForeground(Color.RED); // break; // case "warning": // labelTips.setText(msg); // labelTips.setForeground(Color.PINK); // break; // default: // labelTips.setText(msg); // labelTips.setForeground(Color.BLACK); // } // } // // public void checkNet(String substationName, String ipAddress, int port){ // Map networkMsg = new HashMap<>(); // boolean pingResult = NetworkUtils.pingByLinuxCmd(ipAddress, 5 * 1000); // boolean telnetResult = NetworkUtils.telnet(ipAddress, port, 5 * 1000); // networkMsg.put("type", "NET"); // networkMsg.put("name", substationName); // networkMsg.put("ip", ipAddress); // networkMsg.put("port", 102); // networkMsg.put("ping", pingResult); // networkMsg.put("telnet", telnetResult); // networkMsg.put("datetime", SimpleUtils.CurrentDateTime()); // sendDataToMQ(JSON.toJSONString(networkMsg)); // } // // public void startNetworkReview(){ // networkReviewTimer = new Timer(); // networkReviewTimer.schedule(new TimerTask() { // @Override // public void run() { // logger.debug("开始检测网络..."); // String ipListFileStr = FileOption.readFileByString("myconfig/ip_list.txt", "UTF-8"); // String newIpListFileStr = ""; // String[] ipList = ipListFileStr.split("\n"); // for (String ip: ipList) { // logger.debug(ip); // Map networkMsg = new HashMap<>(); // if(ip == null || ip.length() < 7){ // continue; // } // String[] ipInfo = ip.split("-"); // if(ipInfo[1] == null){ // continue; // } // boolean pingResult = NetworkUtils.pingByLinuxCmd(ipInfo[1], 5 * 1000); // boolean telnetResult = NetworkUtils.telnet(ipInfo[1], 102, 5 * 1000); // //newIpListFileStr += ipInfo[0] + "-" + ipInfo[1] + "-" + pingResult + "-" + telnetResult + "-" + SimpleUtils.CurrentDateTime() + "\n"; // newIpListFileStr += ipInfo[1] + "-" + pingResult + "-" + telnetResult + "-" + SimpleUtils.CurrentDateTime() + "\n"; // networkMsg.put("type", "NET"); // networkMsg.put("name", ipInfo[0]); // networkMsg.put("ip", ipInfo[1]); // networkMsg.put("port", 102); // networkMsg.put("ping", pingResult); // networkMsg.put("telnet", telnetResult); // networkMsg.put("datetime", SimpleUtils.CurrentDateTime()); // sendDataToMQ(JSON.toJSONString(networkMsg)); // logger.debug(JSON.toJSONString(networkMsg)); // FileOption.writeFile(newIpListFileStr, "myconfig", "ip_list_result.txt"); // } // //FileOption.writeFile(newIpListFileStr, "myconfig", "ip_list_result.txt"); // logger.debug("检测完成!"); // } // }, 1000, 10 * 60 * 1000); // } // // public static void main(String[] args) { // // logger.debug("System starting..."); // MyClient clientGui = new MyClient(); // clientGui.ClientMain(); // } }