package com.example.client.service;
|
|
import com.example.client.dto.ColumnDto;
|
import com.example.client.dto.JComboBoxItem;
|
import com.example.client.utils.*;
|
import com.example.server.cabin.service.CabinService;
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel3;
|
import com.example.server.progressTrack.service.*;
|
import com.example.server.teamGroup.service.SysTeamGroupClassService;
|
import com.example.server.user.model.SysUser;
|
import com.example.server.utils.UserAndSiteUtils;
|
import com.example.server.utils.DownLoadTmpFile;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import javax.swing.*;
|
import javax.swing.table.DefaultTableModel;
|
import java.awt.*;
|
import java.awt.datatransfer.DataFlavor;
|
import java.awt.datatransfer.Transferable;
|
import java.awt.event.*;
|
import java.io.File;
|
import java.util.Date;
|
import java.util.List;
|
|
|
@Service
|
public class ImportLevel3Service {
|
private JTable table;
|
private JFrame frame;
|
@Value("${data.imgDir}")
|
private String imgPath;
|
private File selectedFiles;
|
@Autowired
|
private Level3ManageService level3ManageService;
|
@Autowired
|
private DjJdgzNetworkLevel3Service level3Service;
|
@Autowired
|
private DjJdgzNetworkLevel2ListService level2ListService;
|
@Autowired
|
private DjJdgzNetworkLevel2Service level2Service;
|
@Autowired
|
private SysTeamGroupClassService sysTeamGroupClassService;
|
@Autowired
|
private CabinService cabinService;
|
@Autowired
|
private DjJdgzNetworkLevel1Service level1Service;
|
@Value("${data.tmp-path}")
|
private String tmpPath;
|
|
public void FileUpload(List<ColumnDto> columnDto, JTable subTable, JFrame jFrame) {
|
frame = new JFrame("导入三级网络图");
|
frame.setSize(900, 600);
|
frame.setResizable(true);
|
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
frame.setLocationRelativeTo(null);
|
frame.setVisible(true);
|
frame.addWindowListener(new WindowAdapter() {
|
//添加第二个界面的关闭事件:
|
public void windowClosing(WindowEvent e) {
|
//添加事件:
|
jFrame.setEnabled(true);//将主界面再设置为可操作的
|
}
|
});
|
GridBagLayout layout = new GridBagLayout();
|
frame.setLayout(layout);
|
|
table = new JTable();
|
table.setRowHeight(40);
|
DefaultTableModel model = new DefaultTableModel();
|
String[] columnIdentifiers = {"文件地址", "操作"};//表头
|
|
final Long[] level1Id = {null};
|
final Long[] level2Id = {null};
|
final Long[] level2NodeId = {null};
|
|
JComboBoxItem[] projectList = level1Service.getProjectList();
|
JComboBoxItem[] level2List = level2Service.getLevel2List(projectList[0].getId());
|
JComboBoxItem[] level2NodeList = level2ListService.getNode(level2List[0].getId());
|
level1Id[0] = projectList[0].getId();
|
level2Id[0] = level2List[0].getId();
|
level2NodeId[0] = level2NodeList[0].getId();
|
|
JLabel label0 = new JLabel("工程");
|
JComboBox<JComboBoxItem> comboBox0 = new JComboBox<>(projectList);
|
|
JLabel label1 = new JLabel("一级网络图节点");
|
JComboBox<JComboBoxItem> comboBox1 = new JComboBox<>();
|
comboBox1.setModel(new DefaultComboBoxModel<>(level2List));
|
|
JLabel label2 = new JLabel("二级网络图节点");
|
JComboBox<JComboBoxItem> comboBox2 = new JComboBox<>(level2NodeList);
|
comboBox2.setRenderer(new DefaultListCellRenderer() {
|
@Override
|
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
if(value!=null){
|
setText(truncateText(value.toString(), 15)); // 截断文本
|
}else{
|
setText("");
|
}
|
return this;
|
}
|
|
private String truncateText(String text, int maxLength) {
|
if (text.length() > maxLength) {
|
return text.substring(0, maxLength - 3) + "...";
|
}
|
return text;
|
}
|
});
|
|
JButton downloadbtn = new JButton("三级网络图模板下载");
|
|
comboBox0.addItemListener(new ItemListener() {
|
@Override
|
public void itemStateChanged(ItemEvent e) {
|
if (e.getStateChange() == ItemEvent.SELECTED) {
|
JComboBoxItem selectedItem = (JComboBoxItem) comboBox0.getSelectedItem();
|
if (selectedItem != null) {
|
long selectedId = selectedItem.getId();
|
level1Id[0] = selectedId;
|
|
JComboBoxItem[] level2List = level2Service.getLevel2List(selectedId);
|
comboBox1.setModel(new DefaultComboBoxModel<>(level2List));
|
comboBox2.setModel(new DefaultComboBoxModel<>());
|
}
|
}
|
}
|
});
|
comboBox1.addItemListener(new ItemListener() {
|
@Override
|
public void itemStateChanged(ItemEvent e) {
|
if (e.getStateChange() == ItemEvent.SELECTED) {
|
JComboBoxItem selectedItem = (JComboBoxItem) comboBox1.getSelectedItem();
|
if (selectedItem != null) {
|
long selectedId = selectedItem.getId();
|
level2Id[0] = selectedId;
|
|
JComboBoxItem[] level2NodeList = level2ListService.getNode(selectedId);
|
comboBox2.setModel(new DefaultComboBoxModel<>(level2NodeList));
|
}
|
}
|
}
|
});
|
|
comboBox2.addItemListener(new ItemListener() {
|
@Override
|
public void itemStateChanged(ItemEvent e) {
|
if (e.getStateChange() == ItemEvent.SELECTED) {
|
JComboBoxItem selectedItem = (JComboBoxItem) comboBox2.getSelectedItem();
|
if (selectedItem != null) {
|
long selectedId = selectedItem.getId();
|
level2NodeId[0] = selectedId;
|
}
|
}
|
}
|
});
|
|
downloadbtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
DownLoadTmpFile.down(tmpPath + "三级网络图导入模板.xlsx", frame);
|
}
|
});
|
|
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(label0, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
|
frame.add(comboBox0, new GBC(1, 0, 2, 1).setAnchor(GBC.SOUTHWEST).setFill(GBC.BOTH).setInsets(5));
|
|
frame.add(label1, new GBC(0, 1, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
|
frame.add(comboBox1, new GBC(1, 1, 2, 1).setAnchor(GBC.SOUTHWEST).setFill(GBC.BOTH).setInsets(5));
|
|
frame.add(label2, new GBC(0, 2, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
|
frame.add(comboBox2, new GBC(1, 2, 2, 1).setAnchor(GBC.SOUTHWEST).setFill(GBC.BOTH).setInsets(5));
|
|
frame.add(downloadbtn, new GBC(0, 3, 2, 1).setFill(GBC.BOTH).setInsets(5));
|
|
frame.add(browseButton, new GBC(0, 4, 1, 1).setWeight(0, 1).setInsets(5));
|
frame.add(scrolltable, new GBC(1, 4, 3, 1).setFill(GBC.BOTH).setWeight(0, 1).setInsets(5));
|
|
frame.add(uploadButton, new GBC(0, 5, 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;
|
}
|
|
SysUser user = (SysUser) UserAndSiteUtils.get("user","user");
|
if (user==null){
|
JOptionPane.showMessageDialog(null, "用户失效请退出并重新登录", "提示", JOptionPane.WARNING_MESSAGE);
|
return;
|
}
|
|
model.setDataVector(data, columnIdentifiers);
|
table.setModel(model);
|
table.getColumnModel().getColumn(0).setPreferredWidth(550);
|
table.getColumnModel().getColumn(1).setPreferredWidth(150);
|
|
|
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 = level3Service.importDiagramFromExcel(filePath, level1Id[0], level2Id[0], level2NodeId[0]);
|
return flag;
|
}
|
|
@Override
|
protected void done() {
|
try {
|
// 获取上传结果(在这个例子中,我们假设上传方法返回Boolean类型)
|
String uploadSucceeded = get();
|
|
// 刷新表格数据(如果上传成功)
|
if (uploadSucceeded.equals("true")) {
|
waitUtil.dispose();
|
frame.dispose();
|
jFrame.setEnabled(true);//将主界面再设置为可操作的
|
JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList();
|
JComboBoxItem[] teamList = sysTeamGroupClassService.getTeamList(null);
|
JComboBoxItem[] cabinList = cabinService.getList();
|
String[] typeList = new String[]{
|
"","改装", "加装", "换装", "修理","改进性修理"
|
};
|
List<DjJdgzNetworkLevel3> list = level3Service.getList(null, deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0],0,null);
|
CommonTable.refreshTable(list, columnDto, subTable);
|
level3ManageService.tableModelListener(list, subTable, jFrame);
|
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;
|
}
|
|
SysUser user = (SysUser) UserAndSiteUtils.get("user","user");
|
if (user==null){
|
flag = false;
|
JOptionPane.showMessageDialog(null, "用户失效请退出并重新登录", "提示", 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;
|
}
|
});
|
}
|
|
}
|