package com.example.client.service; import com.example.client.dto.ColumnDto; import com.example.client.dto.JComboBoxItem; import com.example.client.model.TableButton; import com.example.client.utils.CommonTable; import com.example.server.cabin.service.CabinService; import com.example.server.progressTrack.model.*; import com.example.server.progressTrack.service.DjJdgzNetworkLevel1Service; import com.example.server.progressTrack.service.DjJdgzNetworkLevel3Service; import com.example.server.progressTrack.service.DjJdgzShipService; import com.example.server.progressTrack.service.DjJdgzTrackRecordService; import com.example.server.teamGroup.service.SysTeamGroupClassService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.swing.*; import javax.swing.event.TableModelEvent; import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class TrackRecordManageService { @Autowired private ProgressPromptService progressPromptService; @Autowired private DjJdgzTrackRecordService djJdgzTrackRecordService; @Autowired private DjJdgzNetworkLevel1Service level1Service; @Autowired private DjJdgzNetworkLevel3Service level3Service; @Autowired private StatisReportsService statistReportsService; @Autowired private ExportTrackRecordService exportTrackRecordService; @Autowired private ImportTrackRecordService importTrackRecordService; @Autowired private TrackRecordAddOrUpdate addOrUpdate; // 注入 AddOrupdate 实例 @Autowired private SysTeamGroupClassService sysTeamGroupClassService; @Autowired private CabinService cabinService; private JTable table; private List list; private List columnDto; public JPanel createTable(Integer width, Integer height, JFrame jFrame) { JPanel panel = new JPanel(); JPanel topJpanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); topJpanel.setPreferredSize(new Dimension(width, 37)); topJpanel.setBackground(Color.WHITE); JPanel centerJpanel = new JPanel(); centerJpanel.setPreferredSize(new Dimension(width - 20, height - 100)); centerJpanel.setBackground(Color.WHITE); panel.add(topJpanel, BorderLayout.NORTH); panel.add(centerJpanel, BorderLayout.CENTER); JComboBoxItem[] projectList = level1Service.getProjectList(); JComboBoxItem[] cabinList = cabinService.getList(); JComboBoxItem[] deptList = sysTeamGroupClassService.getDeptList(); JComboBoxItem[] statusList = { new JComboBoxItem(0L, "进行中"), new JComboBoxItem(1L, "已完成") }; JButton btnTj = new JButton("统计报表"); JButton btnJc = new JButton("周进度检查表"); JButton btnExport = new JButton("导出跟踪报表"); JButton btnImport = new JButton("导入跟踪报表"); JComboBox comboBox = new JComboBox<>(projectList); JComboBox comboBox2 = new JComboBox<>(statusList); JComboBoxItem selectedItem = (JComboBoxItem) comboBox.getSelectedItem(); JComboBoxItem selectedItem2 = (JComboBoxItem) comboBox2.getSelectedItem(); comboBox.addItemListener(new ItemListener() { public void itemStateChanged(final ItemEvent event) { JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem(); JComboBoxItem selectedItem2Now = (JComboBoxItem) comboBox2.getSelectedItem(); Long level1Id = selectedItemNow.getId(); Long Status = selectedItem2Now.getId(); list = djJdgzTrackRecordService.getList(level1Id, Math.toIntExact(Status)); CommonTable.refreshTable(list, columnDto, table); table.setRowHeight(25); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tableModelListener(table, jFrame,list); } }); comboBox2.addItemListener(new ItemListener() { public void itemStateChanged(final ItemEvent event) { JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem(); JComboBoxItem selectedItem2Now = (JComboBoxItem) comboBox2.getSelectedItem(); Long level1Id = selectedItemNow.getId(); Long Status = selectedItem2Now.getId(); list = djJdgzTrackRecordService.getList(level1Id, Math.toIntExact(Status)); CommonTable.refreshTable(list, columnDto, table); table.setRowHeight(25); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tableModelListener(table, jFrame,list); } }); btnImport.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem(); importTrackRecordService.FileUpload(columnDto,table,jFrame); } }); topJpanel.add(btnTj); topJpanel.add(btnJc); topJpanel.add(btnExport); topJpanel.add(btnImport); topJpanel.add(comboBox); topJpanel.add(comboBox2); comboBox.setPreferredSize(new Dimension(300, 28)); comboBox2.setPreferredSize(new Dimension(300, 28)); list = djJdgzTrackRecordService.getList(selectedItem.getId(), Math.toIntExact(selectedItem2.getId())); List buttonList = new ArrayList<>(); buttonList.add(new TableButton("edit", "编辑")); columnDto = new ArrayList<>(); //columnDto.add(new ColumnDto("ID", "id", -1, null,false)); columnDto.add(new ColumnDto("序号", "", 50, "autoCreate", false, null, null)); columnDto.add(new ColumnDto("部门", "deptId", 120, "dict", false, null, deptList)); columnDto.add(new ColumnDto("专业", "teamgroupName", 120, null, false, null, null)); columnDto.add(new ColumnDto("舱室", "cabinId", 100, "dict", false, null, cabinList)); columnDto.add(new ColumnDto("类别", "type", 100, null, false, null, null)); columnDto.add(new ColumnDto("一级节点", "level1NodeName", 120, null, false, null, null)); columnDto.add(new ColumnDto("二级节点", "level2NodeName", 120, null, false, null, null)); columnDto.add(new ColumnDto("设备名称", "level3NetworkName", 120, null, false, null, null)); columnDto.add(new ColumnDto("当前节点", "level3NodeName", 120, null, false, null, null)); columnDto.add(new ColumnDto("计划完成时间", "requiredCompletionTime", 200, null, false, null, null)); columnDto.add(new ColumnDto("总承修单位", "generalRepair", 180, null, false, null, null)); columnDto.add(new ColumnDto("分承修单位", "repair", 180, null, false, null, null)); columnDto.add(new ColumnDto("跟踪记录", "", 100, "", true, buttonList, null)); columnDto.add(new ColumnDto("历史记录", "trackNum", 100, null, false, null, null)); columnDto.add(new ColumnDto("完成时间", "actualCompletion", 200, null, false, null, null)); columnDto.add(new ColumnDto("附件", "fileName", 200, null, false, null, null)); columnDto.add(new ColumnDto("备注", "remark", 120, null, false, null, null)); table = CommonTable.createCommonTable(list, columnDto); table.setRowHeight(25); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // if (historyCalled[0]) return; // 获取点击的行和列 int row = table.rowAtPoint(e.getPoint()); int column = table.columnAtPoint(e.getPoint()); // 检查是否点击了有效单元格 if (row >= 0 && column >= 0) { if (column == 13) { // 列索引从0开始 // 获取该单元格的值 Object cellValue = table.getValueAt(row, column); Integer value = Integer.parseInt(cellValue.toString()); if (value > 0) { DjJdgzTrackRecord djJdgzTrackRecord = list.get(row); history(jFrame, djJdgzTrackRecord.getLevel3NodeId()); } } } } }); btnTj.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem(); statistReportsService.createTable(jFrame, selectedItemNow.getId()); } }); btnJc.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JComboBoxItem selectedItemNow = (JComboBoxItem) comboBox.getSelectedItem(); progressPromptService.createTable(jFrame, selectedItemNow.getId()); } }); btnExport.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { exportTrackRecordService.openDialog(jFrame); } }); tableModelListener(table, jFrame,list); JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setViewportView(table); scrollPane.getViewport().setBackground(Color.WHITE); scrollPane.setPreferredSize(new Dimension(width - 20, height - 130)); centerJpanel.add(scrollPane); return panel; } public void history(JFrame jFrame, Long level3NodeId) { jFrame.setEnabled(false); JFrame frame1 = new JFrame("历史跟踪记录"); frame1.setSize(1500, 800); frame1.setResizable(true); frame1.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); frame1.setLocationRelativeTo(null); frame1.addWindowListener(new WindowAdapter() { //添加第二个界面的关闭事件: public void windowClosing(WindowEvent e) { //添加事件: jFrame.setEnabled(true);//将主界面再设置为可操作的 } }); List columnDto = new ArrayList<>(); List list = djJdgzTrackRecordService.getHistory(level3NodeId); JComboBoxItem[] trackList = { new JComboBoxItem(0L, "线下"), new JComboBoxItem(1L, "电话"), }; JComboBoxItem[] statusList = { new JComboBoxItem(0L, "进行中"), new JComboBoxItem(1L, "已完成"), }; JComboBoxItem[] hasDelayRiskList = { new JComboBoxItem(0L, "无"), new JComboBoxItem(1L, "有"), }; columnDto.add(new ColumnDto("序号", "", 50, "autoCreate", false, null, null)); columnDto.add(new ColumnDto("跟踪方式", "trackMethod", 80, "dict", false, null, trackList)); columnDto.add(new ColumnDto("跟踪地点", "trackLocation", 160, null, false, null, null)); columnDto.add(new ColumnDto("助修人及其联系方式", "trackPerson", 160, null, false, null, null)); columnDto.add(new ColumnDto("厂方及其联系方式", "trackedPerson", 160, null, false, null, null)); columnDto.add(new ColumnDto("总承修单位", "generalRepair", 160, null, false, null, null)); columnDto.add(new ColumnDto("分承修单位", "repair", 160, null, false, null, null)); columnDto.add(new ColumnDto("节点进展", "currentStatus", 100, "dict", false, null, statusList)); columnDto.add(new ColumnDto("有无脱期风险", "hasDelayRisk", 50, "dict", false, null, hasDelayRiskList)); columnDto.add(new ColumnDto("预计完成时间", "estimatedCompletionTime", 120, "selectDate", false, null, null)); columnDto.add(new ColumnDto("存在问题", "problem", 120, null, false, null, null)); columnDto.add(new ColumnDto("后续计划", "followupPlan", 120, null, false, null, null)); columnDto.add(new ColumnDto("备注", "remark", 120, null, false, null, null)); JTable subTable = CommonTable.createCommonTable(list, columnDto); subTable.setRowHeight(25); subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); JScrollPane scrollPane = new JScrollPane(subTable, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setViewportView(subTable); scrollPane.getViewport().setBackground(Color.WHITE); //scrollPane.setPreferredSize(new Dimension(width - 20, height - 100)); frame1.add(scrollPane); frame1.setVisible(true); } public void tableModelListener(JTable table, JFrame jFrame,List recordList) { table.getModel().addTableModelListener(e -> { // 检查事件类型 if (e.getType() == TableModelEvent.UPDATE) { // 获取变化的行和列 int row = e.getFirstRow(); int column = e.getColumn(); // 获取新的值 Object newValue = table.getModel().getValueAt(row, column); // 输出变化信息 if (newValue.equals("edit")) { DjJdgzTrackRecord data = recordList.get(row); Long level1Id = data.getLevel1NetworkId(); data.setProcessName(data.getLevel3NodeName()); Boolean isUpdate = data.getIsUpdate(); if (data.getId() != null) { data = djJdgzTrackRecordService.get(data.getId()); data.setLevel1NetworkId(level1Id); data.setIsUpdate(isUpdate); }else{ DjJdgzNetworkLevel3 level3 = level3Service.get(data.getLevel3NetworkId()); data.setGeneralRepairUnit(level3.getGeneralRepairUnit()); data.setGeneralRepairUnitDirector(level3.getGeneralRepairUnitDirector()); data.setGeneralRepairUnitContact(level3.getGeneralRepairUnitContact()); data.setRepairUnit(level3.getRepairUnit()); data.setRepairUnitDirector(level3.getRepairUnitDirector()); data.setRepairUnitContact(level3.getRepairUnitContact()); } addOrUpdate.openDialog(data, jFrame, level1Id, columnDto, table); jFrame.setEnabled(false); } else { } System.out.println("单元格变化: 行=" + row + ", 列=" + column + ", 新值=" + newValue); } }); } }