package com.example.client.service;
|
|
import com.example.client.dto.ColumnDto;
|
import com.example.client.utils.*;
|
import com.example.server.progressTrack.Dto.DiagramNodeDto;
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel1;
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List;
|
import com.example.server.progressTrack.service.DjJdgzNetworkLevel2ListService;
|
import com.mxgraph.view.mxGraph;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.ss.usermodel.Row;
|
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.jdesktop.swingx.JXDatePicker;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.swing.*;
|
import javax.swing.event.ChangeEvent;
|
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.TableCellRenderer;
|
import javax.swing.tree.DefaultMutableTreeNode;
|
import javax.swing.tree.TreePath;
|
import java.awt.*;
|
import java.awt.datatransfer.DataFlavor;
|
import java.awt.datatransfer.Transferable;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.io.File;
|
import java.text.DateFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.List;
|
import java.util.logging.Logger;
|
|
|
@Service
|
public class ImportLevel2Service {
|
private JTable table;
|
private JFrame frame;
|
@Value("${data.imgDir}")
|
private String imgPath;
|
private File selectedFiles;
|
@Autowired
|
private DjJdgzNetworkLevel2ListService level2ListService;
|
|
public void FileUpload(Long netWorkId, List<ColumnDto> columnDto, JTable subTable, JPanel jPanel, mxGraph graph) {
|
frame = new JFrame("导入");
|
frame.setSize(900, 400);
|
frame.setResizable(true);
|
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
frame.setLocationRelativeTo(null);
|
frame.setVisible(true);
|
GridBagLayout layout = new GridBagLayout();
|
frame.setLayout(layout);
|
|
table = new JTable();
|
table.setRowHeight(40);
|
DefaultTableModel model = new DefaultTableModel();
|
String[] columnIdentifiers = {"文件地址", "操作"};//表头
|
|
|
JScrollPane scrolltable = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
|
|
scrolltable.setViewportView(table);
|
scrolltable.getViewport().setBackground(Color.WHITE);
|
|
JButton browseButton = new JButton("选择文件");
|
JButton uploadButton = new JButton("上传文件");
|
|
frame.add(browseButton, new GBC(0, 0, 1, 1).setWeight(0, 1).setInsets(5));
|
frame.add(scrolltable, new GBC(1, 0, 3, 1).setFill(GBC.BOTH).setWeight(0, 1).setInsets(5));
|
|
frame.add(uploadButton, new GBC(0, 1, 4, 1).setWeight(1, 0));
|
|
browseButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
Boolean flag = true;
|
// 保存当前的外观设置
|
LookAndFeel savedLookAndFeel = UIManager.getLookAndFeel();
|
|
// 设置文件选择器外观
|
try {
|
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
} catch (Exception ex) {
|
ex.printStackTrace();
|
}
|
|
JFileChooser fileChooser = new JFileChooser();
|
|
fileChooser.setDialogTitle("选择文件");
|
fileChooser.setPreferredSize(new Dimension(800, 500));
|
|
|
fileChooser.setMultiSelectionEnabled(true);
|
|
//恢复外观,避免改变所有组件外观
|
try {
|
UIManager.setLookAndFeel(savedLookAndFeel);
|
} catch (UnsupportedLookAndFeelException ed) {
|
ed.printStackTrace();
|
}
|
|
int result = fileChooser.showOpenDialog(frame);
|
if (result == JFileChooser.FILES_ONLY) {
|
selectedFiles = fileChooser.getSelectedFile();
|
|
Integer oldNum = model.getRowCount();
|
String[][] data = new String[oldNum + 1][2];
|
for (int i = 0; i < oldNum; i++) {
|
data[i][0] = model.getValueAt(i, 0).toString();
|
}
|
|
String suffix = selectedFiles.getName().substring(selectedFiles.getName().lastIndexOf("."));
|
if (suffix.equals(".xlsx") || suffix.equals(".xls")) {
|
data[oldNum][0] = selectedFiles.getPath();
|
} else {
|
flag = false;
|
|
}
|
|
if (!flag) {
|
JOptionPane.showMessageDialog(null, "只能上传.xlsx或.xls的文件,且不超过2G", "提示", JOptionPane.WARNING_MESSAGE);
|
return;
|
}
|
|
model.setDataVector(data, columnIdentifiers);
|
table.setModel(model);
|
table.getColumnModel().getColumn(0).setPreferredWidth(600);
|
table.getColumnModel().getColumn(1).setPreferredWidth(100);
|
|
|
table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
|
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
|
table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null,null));
|
|
} else {
|
Object[] options = {"OK ", "CANCEL "};
|
JOptionPane.showOptionDialog(null, "选择的文件不正确 ", "提示", JOptionPane.DEFAULT_OPTION,
|
JOptionPane.WARNING_MESSAGE, null, options, options[0]);
|
}
|
}
|
});
|
uploadButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
// 创建旋转等待框的实例(假设WaitUtil是一个自定义的Swing组件)
|
final WaitUtil waitUtil = new WaitUtil(imgPath, "文件正在导入,请稍候");
|
|
// 开始上传文件的异步任务
|
SwingWorker<String, Void> sw = new SwingWorker<String, Void>() {
|
@Override
|
protected String doInBackground() throws Exception {
|
// 上传文件的逻辑
|
StringBuilder result = new StringBuilder();
|
|
// 从第一列(索引为0)获取数据
|
String data = model.getValueAt(0, 0).toString();
|
// 将数据和换行符拼接到StringBuilder中
|
result.append(data);
|
|
|
String filePath = result.toString();
|
String flag = level2ListService.importDiagramFromExcel(filePath, netWorkId);
|
return flag;
|
}
|
|
@Override
|
protected void done() {
|
try {
|
// 获取上传结果(在这个例子中,我们假设上传方法返回Boolean类型)
|
String uploadSucceeded = get();
|
|
// 刷新表格数据(如果上传成功)
|
if (uploadSucceeded.equals("true")) {
|
waitUtil.dispose();
|
frame.dispose();
|
List<DjJdgzNetworkLevel2List> list = level2ListService.getList(netWorkId);
|
CommonTable.refreshTable(list,columnDto,subTable);
|
level2ListService.save(netWorkId,jPanel,graph);
|
System.out.println("导入成功时间" + new Date());
|
} else {
|
waitUtil.dispose();
|
JOptionPane.showMessageDialog(null, uploadSucceeded, "提示", JOptionPane.ERROR_MESSAGE);
|
}
|
|
} catch (Exception ex) {
|
ex.printStackTrace();
|
waitUtil.dispose();
|
}
|
}
|
};
|
// 执行异步任务
|
sw.execute();
|
waitUtil.setVisible(true);
|
}
|
});
|
|
scrolltable.setTransferHandler(new TransferHandler() {
|
private static final long serialVersionUID = 1L;
|
|
@Override
|
public boolean importData(JComponent comp, Transferable t) {
|
try {
|
Boolean flag = true;
|
Object o = t.getTransferData(DataFlavor.javaFileListFlavor);
|
String filepath = o.toString();
|
if (filepath.startsWith("[")) {
|
filepath = filepath.substring(1);
|
}
|
if (filepath.endsWith("]")) {
|
filepath = filepath.substring(0, filepath.length() - 1);
|
}
|
String[] filepathArr = filepath.split(", ");
|
Integer oldNum = model.getRowCount();
|
String[][] data = new String[oldNum + filepathArr.length][2];
|
for (int i = 0; i < oldNum; i++) {
|
data[i][0] = model.getValueAt(i, 0).toString();
|
}
|
for (int i = 0; i < filepathArr.length; i++) {
|
if (filepathArr[i].contains(".xlsx") || filepathArr[i].contains(".xls")) {
|
data[i + oldNum][0] = filepathArr[i];
|
} else {
|
flag = false;
|
break;
|
}
|
}
|
if (!flag) {
|
JOptionPane.showMessageDialog(null, "只能上传.xlsx或.xls的文件,且不超过2G\"", "提示", JOptionPane.WARNING_MESSAGE);
|
return flag;
|
}
|
model.setDataVector(data, columnIdentifiers);
|
table.setModel(model);
|
table.getColumnModel().getColumn(0).setPreferredWidth(650);
|
table.getColumnModel().getColumn(1).setPreferredWidth(80);
|
|
table.getColumnModel().getColumn(0).setCellRenderer(new TableViewRenderer());
|
table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererButton());
|
table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditorButton(null,null));
|
return true;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
@Override
|
public boolean canImport(JComponent comp, DataFlavor[] flavors) {
|
for (int i = 0; i < flavors.length; i++) {
|
if (DataFlavor.javaFileListFlavor.equals(flavors[i])) {
|
return true;
|
}
|
}
|
return false;
|
}
|
});
|
}
|
|
}
|