package com.example.client.service;
|
|
import com.example.client.dto.ColumnDto;
|
import com.example.client.model.TableButton;
|
import com.example.client.utils.CommonTable;
|
import com.example.client.utils.GBC;
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel1;
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel1List;
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel2;
|
import com.example.server.progressTrack.model.DjJdgzNetworkLevel2List;
|
import com.example.server.progressTrack.service.*;
|
import com.mxgraph.swing.mxGraphComponent;
|
import com.mxgraph.view.mxGraph;
|
import org.apache.commons.lang3.StringUtils;
|
import org.jdesktop.swingx.JXDatePicker;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.swing.*;
|
import javax.swing.event.TableModelEvent;
|
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.TableCellEditor;
|
import javax.swing.table.TableModel;
|
import java.awt.*;
|
import java.awt.event.*;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
@Service
|
public class Level2AddOrUpdate {
|
@Autowired
|
private NetWorkDiagramService netWorkDiagramService;
|
@Autowired
|
private DjJdgzNetworkLevel1Service level1Service;
|
@Autowired
|
private DjJdgzNetworkLevel2ListService level2ListService;
|
@Autowired
|
private DjJdgzNetworkLevel2Service level2Service;
|
@Autowired
|
private ImportLevel2Service importService;
|
|
public void openDialog(DjJdgzNetworkLevel2 data, JFrame jFrame) {
|
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);//将主界面再设置为可操作的
|
}
|
});
|
|
JPanel jLeft = new JPanel(new BorderLayout());
|
JPanel topJpanel = new JPanel(new FlowLayout());
|
topJpanel.setPreferredSize(new Dimension(510,100));
|
JPanel diagram = new JPanel(new BorderLayout());
|
|
JSpinner timeSpinner = new JSpinner(new SpinnerDateModel());
|
JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(timeSpinner, "yyyy-MM-dd");
|
timeSpinner.setEditor(timeEditor);
|
|
JButton btnInsert = new JButton("新增");
|
JButton btnImport = new JButton("导入数据");
|
JButton btnSave= new JButton("保存");
|
|
/* JLabel label1 = new JLabel("起始时间");
|
JXDatePicker beginDate = new JXDatePicker();
|
beginDate.setPreferredSize(new Dimension(180, 28));
|
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd");
|
beginDate.setFormats(sdFormat);
|
Date parse = new Date();
|
try {
|
parse = sdFormat.parse(data.getStartDate());
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
beginDate.setDate(parse);
|
|
JLabel label2 = new JLabel("网络图宽度");
|
JTextField diagramWidth = new JTextField(6);
|
if (data.getDiagramWidth()!=null){
|
diagramWidth.setText(String.valueOf(data.getDiagramWidth()));
|
}else{
|
diagramWidth.setText("5000");
|
}
|
|
JLabel label3 = new JLabel("线上节点数");
|
JTextField lineNum = new JTextField(6);
|
if (data.getLineNodeNum()!=null){
|
lineNum.setText(String.valueOf(data.getLineNodeNum()));
|
}else{
|
lineNum.setText("10");
|
}*/
|
|
topJpanel.add(btnInsert, new GBC(0, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
|
topJpanel.add(btnImport, new GBC(1, 0, 1, 1).setAnchor(GBC.SOUTHEAST).setInsets(5));
|
topJpanel.add(btnSave, new GBC(2, 0, 2, 1).setAnchor(GBC.SOUTHWEST).setInsets(5));
|
|
// 创建子表格
|
List<ColumnDto> columnDto = new ArrayList<>();
|
List<DjJdgzNetworkLevel2List> list = level2ListService.getList(data.getId());
|
//columnDto.add(new ColumnDto("ID", "id", -1, null,false));
|
|
/* List<TableButton> buttonList = new ArrayList<>();
|
buttonList.add(new TableButton("del", "删除"));*/
|
List<TableButton> buttonList = new ArrayList<>();
|
buttonList.add(new TableButton("del", "删除"));
|
|
columnDto.add(new ColumnDto("序号", "", 50, "autoCreate", true, null,null));
|
//columnDto.add(new ColumnDto("工程专业", "majorName", 180, null, false, null,null));
|
columnDto.add(new ColumnDto("节点名称", "ProcessName", 160, null, true, null,null));
|
columnDto.add(new ColumnDto("要求完成时间", "requiredCompletionTime", 120, "selectDate", true, null,null));
|
columnDto.add(new ColumnDto("操作", "", 85, "", true, buttonList,null));
|
|
JTable subTable = CommonTable.createCommonTable(list, columnDto);
|
subTable.setRowHeight(25);
|
subTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
|
|
subTable.getModel().addTableModelListener(e -> {
|
// 检查事件类型
|
if (e.getType() == TableModelEvent.UPDATE) {
|
// 获取变化的行和列
|
int row = e.getFirstRow();
|
int column = e.getColumn();
|
|
// 获取新的值
|
Object newValue = subTable.getModel().getValueAt(row, column);
|
// 输出变化信息
|
if (newValue.equals("del")) {
|
DefaultTableModel model = (DefaultTableModel) subTable.getModel();
|
model.removeRow(row);
|
DjJdgzNetworkLevel2List djJdgzNetworkLevel2List = list.get(row);
|
level2ListService.deleteLogic(djJdgzNetworkLevel2List.getId());
|
list.remove(row);
|
} else {
|
|
}
|
System.out.println("单元格变化: 行=" + row + ", 列=" + column + ", 新值=" + newValue);
|
}
|
});
|
|
JScrollPane scrollTable = new JScrollPane(subTable);
|
jLeft.add(topJpanel, BorderLayout.NORTH);
|
jLeft.add(scrollTable, BorderLayout.CENTER);
|
|
// 创建水平分割面板
|
JSplitPane hSplitPane = new JSplitPane(
|
JSplitPane.HORIZONTAL_SPLIT,
|
jLeft,
|
diagram
|
);
|
hSplitPane.setDividerLocation(510);
|
hSplitPane.setDividerSize(10);
|
hSplitPane.setOneTouchExpandable(true);
|
hSplitPane.setContinuousLayout(true);
|
|
frame1.add(hSplitPane, BorderLayout.CENTER);
|
frame1.setVisible(true);
|
|
mxGraph graph = new mxGraph();
|
DjJdgzNetworkLevel2 djJdgzNetworkLevel2 = level2Service.get(data.getId());
|
graph = netWorkDiagramService.getCsDiagram(graph,djJdgzNetworkLevel2.getContent(),null,diagram.getWidth(),diagram.getHeight());
|
mxGraphComponent graphComponent = new mxGraphComponent(graph);
|
graphComponent.setConnectable(false);
|
graphComponent.setDragEnabled(false);
|
graphComponent.zoomTo(1, true);
|
diagram.add(graphComponent);
|
|
mxGraph finalGraph = graph;
|
graphComponent.getViewport().addMouseWheelListener(new MouseWheelListener() {
|
@Override
|
public void mouseWheelMoved(MouseWheelEvent e) {
|
int notches = e.getWheelRotation();
|
double zoomFactor = 1.1; // 缩放因子
|
Point pt = e.getPoint();
|
double zoom = finalGraph.getView().getScale() * (notches < 0 ? zoomFactor : 1 / zoomFactor);
|
graphComponent.zoomTo(zoom, true); // 缩放视图
|
}
|
});
|
|
btnInsert.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
TableModel model = subTable.getModel();
|
DefaultTableModel defaultModel = (DefaultTableModel) model;
|
int columnCount = subTable.getColumnCount();
|
Object[] emptyRow = new Object[columnCount];
|
defaultModel.addRow(emptyRow);
|
list.add(new DjJdgzNetworkLevel2List());
|
}
|
});
|
|
btnSave.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
if (subTable.isEditing()) {
|
subTable.getCellEditor().stopCellEditing();
|
}
|
CommonTable.saveTableList(list,subTable,columnDto);
|
level2ListService.save(list,data.getId(),diagram, finalGraph);
|
}
|
});
|
|
btnImport.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
importService.FileUpload(data.getId(),columnDto,subTable,diagram,finalGraph);
|
}
|
});
|
}
|
}
|