[add] read checkup queue from sql

This commit is contained in:
lethanhdat committed 2025-01-01 19:56:50 -06:00
1 parent faa7aa7ea6
commit 8a549cd089
5 files changed
+132 -97

No files matched your search

@@ -53,14 +53,11 @@ public class ClientHandler extends SimpleChannelInboundHandler<TextWebSocketFram
log.info("Handshake complete");
ClientHandler.ctx = ctx;
ClientHandler.frame = frame;
UIHandler.INSTANCE.showUI();
// When the handshake is complete, the UI is shown
return; // No further processing needed for handshake response
}
log.info("Size of listeners: {}", listeners.size());
// Process other packets
List<ResponseListener<?>> responseListeners = listeners.get(packet.getClass());
if (responseListeners != null) {
@@ -7,45 +7,34 @@ import BsK.client.ui.component.common.RoundedPanel;
import BsK.common.packet.req.GetCheckUpQueueRequest;
import BsK.common.packet.res.ErrorResponse;
import BsK.common.packet.res.GetCheckUpQueueResponse;
import BsK.common.packet.res.LoginSuccessResponse;
import BsK.common.util.network.NetworkUtil;
import lombok.extern.slf4j.Slf4j;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.table.DefaultTableModel;
import static BsK.client.network.handler.ClientHandler.frame;
@Slf4j
public class CheckUpPage extends JPanel {
// update checkup queue
private String[][] queue;
private DefaultTableModel model;
private JTable table1;
public void updateQueue() {
ClientHandler.addResponseListener(GetCheckUpQueueResponse.class, response -> {
log.info("Received update queue: {}", frame.text());
});
ClientHandler.addResponseListener(ErrorResponse.class, response -> {
log.error("Error response: {}", response.getError());
});
ClientHandler.addResponseListener(GetCheckUpQueueResponse.class, this::handleGetCheckUpQueueResponse);
ClientHandler.addResponseListener(ErrorResponse.class, this::handleErrorResponse);
NetworkUtil.sendPacket(ClientHandler.ctx.channel(), new GetCheckUpQueueRequest());
}
public CheckUpPage(MainFrame mainFrame) {
setLayout(new BorderLayout());
updateQueue();
setLayout(new BorderLayout());
// Sidebar panel
JPanel sidebar = new JPanel() {
@Override
@@ -65,9 +54,9 @@ public class CheckUpPage extends JPanel {
sidebar.setLayout(new GridLayout(15, 1));
sidebar.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
String[] sidebarItems = {"Thống kê","Thăm khám", "Dữ liệu bệnh nhân", "Kho", "Người dùng", "Thông tin"};
String[] destination = {"DashboardPage","CheckUpPage", "PatientDataPage", "InventoryPage", "UserPage", "InfoPage"};
for(int i = 0; i < sidebarItems.length; i++) {
String[] sidebarItems = {"Thống kê", "Thăm khám", "Dữ liệu bệnh nhân", "Kho", "Người dùng", "Thông tin"};
String[] destination = {"DashboardPage", "CheckUpPage", "PatientDataPage", "InventoryPage", "UserPage", "InfoPage"};
for (int i = 0; i < sidebarItems.length; i++) {
String item = sidebarItems[i];
String dest = destination[i];
JLabel label = new JLabel(item);
@@ -82,7 +71,6 @@ public class CheckUpPage extends JPanel {
public void mouseClicked(java.awt.event.MouseEvent e) {
// Handle the click event
mainFrame.showPage(dest);
// JOptionPane.showMessageDialog(null, item + " clicked!");
}
@Override
@@ -121,10 +109,8 @@ public class CheckUpPage extends JPanel {
userInfo.setHorizontalAlignment(SwingConstants.RIGHT);
topbar.add(userInfo, BorderLayout.EAST);
// Data table inside a RoundedPanel
RoundedPanel leftPanel = new RoundedPanel(20, Color.WHITE, false);
RoundedPanel rightPanel = new RoundedPanel(20, Color.WHITE, false);
JLabel titleText1 = new JLabel();
@@ -143,24 +129,24 @@ public class CheckUpPage extends JPanel {
leftPanel.add(titleText1, BorderLayout.NORTH);
leftPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 10)); // Adjust padding for better appearance
rightPanel.setLayout(new BorderLayout());
rightPanel.add(titleText2, BorderLayout.NORTH);
rightPanel.setLayout(new GridBagLayout());
GridBagConstraints gbcRightPanel = new GridBagConstraints();
gbcRightPanel.insets = new Insets(5, 5, 5, 5);
gbcRightPanel.gridx = 0;
gbcRightPanel.gridy = 0;
rightPanel.add(titleText2, gbcRightPanel);
rightPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 10));
String[] columns = {"Name", "Gender", "Age"};
String[][] data = {
{"John", "Male", "20"},
{"Dara", "Male", "20"},
{"Bora", "Male", "21"},
};
String[] columns = {"Ngày Tháng", "Họ", "Tên", "Tên BS", "Họ BS", "Triệu chứng", "Chẩn đoán", "Ghi chú", "Trạng thái"};
this.queue = new String[][]{}; // Initialize with empty data
DefaultTableModel model = new DefaultTableModel(data, columns) {
model = new DefaultTableModel(this.queue, columns) {
@Override
public boolean isCellEditable(int row, int column) {
return false; // All cells are non-editable
}
};
JTable table1 = new JTable(model);
table1 = new JTable(model);
// Set preferred size for the table
table1.setPreferredScrollableViewportSize(new Dimension(400, 200));
@@ -173,7 +159,7 @@ public class CheckUpPage extends JPanel {
JScrollPane tableScroll1 = new JScrollPane(table1);
tableScroll1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Inner padding
leftPanel.add(tableScroll1, BorderLayout.CENTER);
// "Ngày Tháng", "Họ", "Tên", "Ten BS", "Họ BS", "Triệu chứng", "Chẩn đoán", "Ghi chú", "Trạng thái"
RoundedPanel inputPanel = new RoundedPanel(20, Color.WHITE, false);
inputPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
@@ -183,7 +169,7 @@ public class CheckUpPage extends JPanel {
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
inputPanel.add(new JLabel("Username:"), gbc);
inputPanel.add(new JLabel("Ngày tháng:"), gbc);
gbc.gridx = 1;
JTextField usernameField = new JTextField(10);
@@ -191,22 +177,70 @@ public class CheckUpPage extends JPanel {
// Sex label and option field
gbc.gridx = 0;
gbc.gridy = 1;
inputPanel.add(new JLabel("Sex:"), gbc);
gbc.gridy++;
inputPanel.add(new JLabel("Họ"), gbc);
gbc.gridx = 1;
String[] sexOptions = {"Male", "Female"};
JComboBox<String> sexComboBox = new JComboBox<>(sexOptions);
inputPanel.add(sexComboBox, gbc);
JTextField customerLastNameField = new JTextField(10);
inputPanel.add(customerLastNameField, gbc);
// Age label and number field
gbc.gridx = 0;
gbc.gridy = 2;
inputPanel.add(new JLabel("Age:"), gbc);
gbc.gridy++;
inputPanel.add(new JLabel("Tên"), gbc);
gbc.gridx = 1;
JSpinner ageSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 120, 1));
inputPanel.add(ageSpinner, gbc);
JTextField customerFirstNameField = new JTextField(10);
inputPanel.add(customerFirstNameField, gbc);
gbc.gridx = 0;
gbc.gridy++;
inputPanel.add(new JLabel("Tên BS"), gbc);
gbc.gridx = 1;
JTextField doctorFirstNameField = new JTextField(10);
inputPanel.add(doctorFirstNameField, gbc);
gbc.gridx = 0;
gbc.gridy++;
inputPanel.add(new JLabel("Họ BS"), gbc);
gbc.gridx = 1;
JTextField doctorLastNameField = new JTextField(10);
inputPanel.add(doctorLastNameField, gbc);
gbc.gridx = 0;
gbc.gridy++;
inputPanel.add(new JLabel("Triệu chứng"), gbc);
gbc.gridx = 1;
JTextField symptomsField = new JTextField(10);
inputPanel.add(symptomsField, gbc);
gbc.gridx = 0;
gbc.gridy++;
inputPanel.add(new JLabel("Chẩn đoán"), gbc);
gbc.gridx = 1;
JTextField diagnosisField = new JTextField(10);
inputPanel.add(diagnosisField, gbc);
gbc.gridx = 0;
gbc.gridy++;
inputPanel.add(new JLabel("Ghi chú"), gbc);
gbc.gridx = 1;
JTextField notesField = new JTextField(10);
inputPanel.add(notesField, gbc);
gbc.gridx = 0;
gbc.gridy++;
inputPanel.add(new JLabel("Trạng thái"), gbc);
gbc.gridx = 1;
JTextField statusField = new JTextField(10);
inputPanel.add(statusField, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
table1.addMouseListener(new MouseAdapter() {
@@ -214,15 +248,26 @@ public class CheckUpPage extends JPanel {
public void mouseClicked(MouseEvent e) {
int selectedRow = table1.getSelectedRow();
if (selectedRow != -1) {
// Get the data from the selected row
String name = (String) table1.getValueAt(selectedRow, 0);
String gender = (String) table1.getValueAt(selectedRow, 1);
String age = (String) table1.getValueAt(selectedRow, 2);
String date = (String) table1.getValueAt(selectedRow, 0);
String customerLastName = (String) table1.getValueAt(selectedRow, 1);
String customerFirstName = (String) table1.getValueAt(selectedRow, 2);
String doctorFirstName = (String) table1.getValueAt(selectedRow, 3);
String doctorLastName = (String) table1.getValueAt(selectedRow, 4);
String symptoms = (String) table1.getValueAt(selectedRow, 5);
String diagnosis = (String) table1.getValueAt(selectedRow, 6);
String notes = (String) table1.getValueAt(selectedRow, 7);
String status = (String) table1.getValueAt(selectedRow, 8);
usernameField.setText(date);
customerLastNameField.setText(customerLastName);
customerFirstNameField.setText(customerFirstName);
doctorFirstNameField.setText(doctorFirstName);
doctorLastNameField.setText(doctorLastName);
symptomsField.setText(symptoms);
diagnosisField.setText(diagnosis);
notesField.setText(notes);
statusField.setText(status);
// Transfer the data to the inputPanel fields
usernameField.setText(name);
sexComboBox.setSelectedItem(gender);
ageSpinner.setValue(Integer.parseInt(age));
}
}
});
@@ -259,20 +304,6 @@ public class CheckUpPage extends JPanel {
if (option == JOptionPane.NO_OPTION) {
return;
}
int selectedRow = table1.getSelectedRow();
if (selectedRow != -1) {
// Get the data from the input fields
String name = usernameField.getText();
String gender = (String) sexComboBox.getSelectedItem();
int age = (Integer) ageSpinner.getValue();
// Update the data in the selected row
table1.setValueAt(name, selectedRow, 0);
table1.setValueAt(gender, selectedRow, 1);
table1.setValueAt(String.valueOf(age), selectedRow, 2);
} else
JOptionPane.showMessageDialog(null, "Please select a row to save changes");
break;
}
case "delete":
@@ -297,37 +328,38 @@ public class CheckUpPage extends JPanel {
iconPanel.add(iconLabel);
}
rightPanel.add(inputPanel, BorderLayout.CENTER);
rightPanel.add(iconPanel, BorderLayout.SOUTH);
gbcRightPanel.gridy++;
rightPanel.add(inputPanel, gbcRightPanel);
gbcRightPanel.gridy++;
rightPanel.add(iconPanel, gbcRightPanel);
UIManager.getDefaults().put("SplitPane.border", BorderFactory.createEmptyBorder()); // Remove border
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel);
splitPane.setResizeWeight(0.5); // Split
splitPane.setResizeWeight(0.8); // Split
splitPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Remove border
add(sidebarScrollPane, BorderLayout.WEST);
add(topbar, BorderLayout.NORTH);
add(splitPane , BorderLayout.CENTER);
add(splitPane, BorderLayout.CENTER);
}
@Override
public void removeNotify() {
super.removeNotify();
// Remove listeners to avoid memory leaks
ClientHandler.removeResponseListener(GetCheckUpQueueResponse.class, this::handleGetCheckUpQueueResponse);
ClientHandler.removeResponseListener(ErrorResponse.class, this::handleErrorResponse);
}
private void handleGetCheckUpQueueResponse(GetCheckUpQueueResponse response) {
log.info("Received checkup queue");
this.queue = response.getQueue();
model.setDataVector(this.queue, new String[]{"Ngày Tháng", "Họ", "Tên", "Ten BS", "Họ BS", "Triệu chứng", "Chẩn đoán", "Ghi chú", "Trạng thái"});
}
// @Override
// public void removeNotify() {
// super.removeNotify();
// // Remove listeners to avoid memory leaks
// ClientHandler.removeResponseListener(GetCheckUpQueueResponse.class, this::handleGetCheckUpQueueResponse);
// ClientHandler.removeResponseListener(ErrorResponse.class, this::handleErrorResponse);
// }
//
// private void handleGetCheckUpQueueResponse(GetCheckUpQueueResponse response) {
// log.debug("Received checkup queue: {}", frame.text());
// }
//
// private void handleErrorResponse(ErrorResponse response) {
// log.error("Error response: {}", response.getError());
// }
private void handleErrorResponse(ErrorResponse response) {
log.error("Error response: {}", response.getError());
}
}
@@ -24,7 +24,7 @@ public class MainFrame extends JFrame {
// Add pages to the main panel
mainPanel.add(new LandingPage(this), "LandingPage");
// mainPanel.add(new CheckUpPage(this), "CheckUpPage");
// mainPanel.add(new CheckUpPage(this), "CheckUpPage");
add(mainPanel);
}
@@ -19,7 +19,9 @@ import io.netty.handler.timeout.IdleStateEvent;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import lombok.extern.slf4j.Slf4j;
@@ -72,7 +74,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<TextWebSocketFram
"join customer as c on a.customer_id = c.customer_id " +
"join Doctor D on a.doctor_id = D.doctor_id " +
"where a.status = 'PROCESSING' " +
"order by checkup_id"
"order by a.checkup_date"
);
if (!rs.isBeforeFirst()) {
@@ -81,6 +83,10 @@ public class ServerHandler extends SimpleChannelInboundHandler<TextWebSocketFram
ArrayList<String> resultList = new ArrayList<>();
while (rs.next()) {
String checkupDate = rs.getString("checkup_date");
long checkupDateLong = Long.parseLong(checkupDate);
Timestamp timestamp = new Timestamp(checkupDateLong);
Date date = new Date(timestamp.getTime());
checkupDate = date.toString();
String customerLastName = rs.getString("customer_last_name");
String customerFirstName = rs.getString("customer_first_name");
String doctorFirstName = rs.getString("doctor_first_name");
@@ -91,7 +97,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<TextWebSocketFram
String status = rs.getString("status");
String result = String.join(", ",
String result = String.join("|",
checkupDate, customerLastName, customerFirstName,
doctorFirstName, doctorLastName, symptoms,
diagnosis, notes, status
@@ -103,7 +109,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<TextWebSocketFram
String[] resultString = resultList.toArray(new String[0]);
String[][] resultArray = new String[resultString.length][];
for (int i = 0; i < resultString.length; i++) {
resultArray[i] = resultString[i].split(", ");
resultArray[i] = resultString[i].split("\\|");
}
UserUtil.sendPacket(user.getSessionId(), new GetCheckUpQueueResponse(resultArray));
Binary file not shown.