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.DjJdgzTrackRecord; 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.apache.commons.lang3.StringUtils; 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; import java.util.Set; @Service public class ImportTrackRecordService { private JTable table; private JFrame frame; @Value("${data.imgDir}") private String imgPath; private File selectedFiles; @Autowired private Level3ManageService level3ManageService; @Autowired private TrackRecordManageService trackRecordManageService; @Autowired private DjJdgzNetworkLevel2ListService level2ListService; @Autowired private DjJdgzNetworkLevel2Service level2Service; @Autowired private SysTeamGroupClassService sysTeamGroupClassService; @Autowired private CabinService cabinService; @Autowired private DjJdgzNetworkLevel1Service level1Service; @Autowired private DjJdgzTrackRecordService djJdgzTrackRecordService; @Value("${data.tmp-path}") private String tmpPath; public void FileUpload(List 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); GridBagLayout layout = new GridBagLayout(); frame.setLayout(layout); frame.addWindowListener(new WindowAdapter() { //添加第二个界面的关闭事件: public void windowClosing(WindowEvent e) { //添加事件: jFrame.setEnabled(true);//将主界面再设置为可操作的 } }); 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 comboBox0 = new JComboBox<>(projectList); JLabel label1 = new JLabel("一级网络图节点"); JComboBox comboBox1 = new JComboBox<>(); comboBox1.setModel(new DefaultComboBoxModel<>(level2List)); JLabel label2 = new JLabel("二级网络图节点"); JComboBox 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; } }); JComboBoxItem[] teamList1 = sysTeamGroupClassService.getTeamList(null); JLabel JLabel5 = new JLabel("专业"); MultiSelectComboBox comboBox4 = new MultiSelectComboBox(teamList1); comboBox4.setPreferredSize(new Dimension(185, 28)); 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) { JComboBoxItem selectedItem0 = (JComboBoxItem) comboBox0.getSelectedItem(); JComboBoxItem selectedItem1 = (JComboBoxItem) comboBox1.getSelectedItem(); JComboBoxItem selectedItem2 = (JComboBoxItem) comboBox2.getSelectedItem(); Long level1Id = selectedItem0 == null? null:selectedItem0.getId(); Long level2Id = selectedItem1 == null? null:selectedItem1.getId(); Long level2NodeId = selectedItem2 == null? null:selectedItem2.getId(); Set selectedItems = comboBox4.getSelectedItems(); StringBuilder selectedIds = new StringBuilder(); for (JComboBoxItem item : selectedItems) { selectedIds.append(item.getId()).append(","); } if (StringUtils.isNotBlank(selectedIds)){ selectedIds.deleteCharAt(selectedIds.length()-1); } List list = djJdgzTrackRecordService.getListByImport(level1Id,level2Id,level2NodeId,selectedIds.toString()); DownLoadTmpFile.buildTrack(list,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(JLabel5, new GBC(0, 3, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5)); frame.add(comboBox4, new GBC(1, 3, 3, 1).setAnchor(GBC.SOUTHWEST).setInsets(5)); frame.add(downloadbtn, new GBC(0, 4, 2, 1).setFill(GBC.BOTH).setInsets(5)); frame.add(browseButton, new GBC(0, 5, 1, 1).setWeight(0, 1).setInsets(5)); frame.add(scrolltable, new GBC(1, 5, 3, 1).setFill(GBC.BOTH).setWeight(0, 1).setInsets(5)); frame.add(uploadButton, new GBC(0, 6, 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 sw = new SwingWorker() { @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 = djJdgzTrackRecordService.importDiagramFromExcel(filePath); 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 list = djJdgzTrackRecordService.getList(level1Id[0], deptList[0].getId(), teamList[0].getId(), cabinList[0].getId(), typeList[0], 0,0, null); CommonTable.refreshTable(list, columnDto, subTable); trackRecordManageService.tableModelListener(subTable, jFrame, list); 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; } }); } }