mirror of
https://github.com/tiennm99/BSK-All-in-One-Clinic-Management-System.git
synced 2026-10-15 22:14:48 +00:00
[add] read checkup queue from sql
This commit is contained in:
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.
Reference in new issue
Block a user