From 725dfa421f7d2a6795a756951c0773a47ff5cc35 Mon Sep 17 00:00:00 2001
From: lethanhdat <91755733+ldss13@users.noreply.github.com>
Date: Thu, 2 Jan 2025 22:59:27 -0600
Subject: [PATCH] [add] read doctors list on dashboard
---
pom.xml | 8 ++
.../ui/component/CheckUpPage/CheckUpPage.java | 125 ++++++++++++------
.../component/common/DateLabelFormatter.java | 31 +++++
.../packet/req/GetDoctorGeneralInfo.java | 6 +
.../res/GetDoctorGeneralInfoResponse.java | 13 ++
.../server/network/handler/ServerHandler.java | 37 +++++-
6 files changed, 177 insertions(+), 43 deletions(-)
create mode 100644 src/main/java/BsK/client/ui/component/common/DateLabelFormatter.java
create mode 100644 src/main/java/BsK/common/packet/req/GetDoctorGeneralInfo.java
create mode 100644 src/main/java/BsK/common/packet/res/GetDoctorGeneralInfoResponse.java
diff --git a/pom.xml b/pom.xml
index 3a52d4c..d22f155 100644
--- a/pom.xml
+++ b/pom.xml
@@ -104,5 +104,13 @@
sqlite-jdbc
3.47.1.0
+
+
+ org.jdatepicker
+ jdatepicker
+ 1.3.4
+
+
+
diff --git a/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java b/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java
index 743dc95..b44fc3b 100644
--- a/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java
+++ b/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java
@@ -3,18 +3,29 @@ package BsK.client.ui.component.CheckUpPage;
import BsK.client.LocalStorage;
import BsK.client.network.handler.ClientHandler;
import BsK.client.ui.component.MainFrame;
+import BsK.client.ui.component.common.DateLabelFormatter;
import BsK.client.ui.component.common.RoundedPanel;
import BsK.common.packet.req.GetCheckUpQueueRequest;
+import BsK.common.packet.req.GetDoctorGeneralInfo;
import BsK.common.packet.res.ErrorResponse;
import BsK.common.packet.res.GetCheckUpQueueResponse;
+import BsK.common.packet.res.GetDoctorGeneralInfoResponse;
import BsK.common.util.network.NetworkUtil;
import lombok.extern.slf4j.Slf4j;
+import org.jdatepicker.impl.JDatePanelImpl;
+import org.jdatepicker.impl.JDatePickerImpl;
+import org.jdatepicker.impl.UtilDateModel;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Properties;
@Slf4j
public class CheckUpPage extends JPanel {
@@ -30,11 +41,21 @@ public class CheckUpPage extends JPanel {
NetworkUtil.sendPacket(ClientHandler.ctx.channel(), new GetCheckUpQueueRequest());
}
+ private String[] doctorOptions;
+
+ public void getDoctors() {
+ // listener
+ ClientHandler.addResponseListener(GetDoctorGeneralInfoResponse.class, this::handleGetDoctorGeneralInfoResponse);
+ ClientHandler.addResponseListener(ErrorResponse.class, this::handleErrorResponse);
+
+ NetworkUtil.sendPacket(ClientHandler.ctx.channel(), new GetDoctorGeneralInfo());
+ }
+
public CheckUpPage(MainFrame mainFrame) {
setLayout(new BorderLayout());
updateQueue();
-
+ getDoctors();
// Sidebar panel
JPanel sidebar = new JPanel() {
@Override
@@ -133,7 +154,7 @@ public class CheckUpPage extends JPanel {
rightPanel.add(titleText2, BorderLayout.NORTH);
rightPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 10));
- 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"};
+ String[] columns = {"Mã khám bệnh", "Ngày Tháng", "Họ", "Tên", "Bác Sĩ", "Triệu chứng", "Chẩn đoán", "Ghi chú", "Trạng thái"};
this.queue = new String[][]{}; // Initialize with empty data
model = new DefaultTableModel(this.queue, columns) {
@@ -156,60 +177,72 @@ public class CheckUpPage extends JPanel {
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);
+ JPanel inputPanel = new JPanel();
inputPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(5, 5, 5, 5); // Add some padding between components
+ gbc.fill = GridBagConstraints.HORIZONTAL;
- // Username label and text field
- gbc.gridx = 0;
gbc.gridy = 0;
- gbc.anchor = GridBagConstraints.WEST;
- inputPanel.add(new JLabel("Ngày tháng:"), gbc);
+ gbc.gridwidth = 1;
+ gbc.anchor = GridBagConstraints.NORTHWEST;
+
+ inputPanel.add(new JLabel("Mã khám bệnh:"), gbc);
gbc.gridx = 1;
- JTextField usernameField = new JTextField(20);
- inputPanel.add(usernameField, gbc);
+ JTextField checkupIdField = new JTextField();
+ checkupIdField.setEditable(false);
+ inputPanel.add(checkupIdField, gbc);
+
+ UtilDateModel model = new UtilDateModel();
+ Properties p = new Properties();
+ p.put("text.today", "Today");
+ p.put("text.month", "Month");
+ p.put("text.year", "Year");
+ JDatePanelImpl datePanel = new JDatePanelImpl(model, p);
+ JDatePickerImpl datePicker = new JDatePickerImpl(datePanel, new DateLabelFormatter());
+ datePicker.setPreferredSize(new Dimension(150, 30));
+
+ gbc.gridx = 2;
+ inputPanel.add(new JLabel("Ngày tháng:"), gbc);
+
+ gbc.gridx = 3;
+ inputPanel.add(datePicker, gbc);
+
- // Sex label and option field
gbc.gridx = 0;
gbc.gridy++;
inputPanel.add(new JLabel("Họ"), gbc);
+
gbc.gridx = 1;
- JTextField customerLastNameField = new JTextField(20);
+ JTextField customerLastNameField = new JTextField(5);
inputPanel.add(customerLastNameField, gbc);
- gbc.gridx = 0;
- gbc.gridy++;
+ gbc.gridx = 2;
inputPanel.add(new JLabel("Tên"), gbc);
- gbc.gridx = 1;
- JTextField customerFirstNameField = new JTextField(20);
+ gbc.gridx = 3;
+ JTextField customerFirstNameField = new JTextField(5);
inputPanel.add(customerFirstNameField, gbc);
+ gbc.gridwidth = 4;
gbc.gridx = 0;
gbc.gridy++;
- inputPanel.add(new JLabel("Tên BS"), gbc);
+ inputPanel.add(new JLabel("Bác Sĩ"), gbc);
gbc.gridx = 1;
- JTextField doctorFirstNameField = new JTextField(20);
- inputPanel.add(doctorFirstNameField, gbc);
+ JComboBox doctorComboBox = new JComboBox<>(doctorOptions);
+ inputPanel.add(doctorComboBox, gbc);
- gbc.gridx = 0;
- gbc.gridy++;
- inputPanel.add(new JLabel("Họ BS"), gbc);
- gbc.gridx = 1;
- JTextField doctorLastNameField = new JTextField(20);
- 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(20);
+ JTextArea symptomsField = new JTextArea(3, 20);
inputPanel.add(symptomsField, gbc);
gbc.gridx = 0;
@@ -217,7 +250,7 @@ public class CheckUpPage extends JPanel {
inputPanel.add(new JLabel("Chẩn đoán"), gbc);
gbc.gridx = 1;
- JTextField diagnosisField = new JTextField(20);
+ JTextArea diagnosisField = new JTextArea(3, 20);
inputPanel.add(diagnosisField, gbc);
gbc.gridx = 0;
@@ -225,7 +258,7 @@ public class CheckUpPage extends JPanel {
inputPanel.add(new JLabel("Ghi chú"), gbc);
gbc.gridx = 1;
- JTextField notesField = new JTextField(20);
+ JTextArea notesField = new JTextArea(3, 20);
inputPanel.add(notesField, gbc);
gbc.gridx = 0;
@@ -243,27 +276,40 @@ public class CheckUpPage extends JPanel {
public void mouseClicked(MouseEvent e) {
int selectedRow = table1.getSelectedRow();
if (selectedRow != -1) {
- 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 checkupId = (String) table1.getValueAt(selectedRow, 0);
+ String date = (String) table1.getValueAt(selectedRow, 1);
+ String customerLastName = (String) table1.getValueAt(selectedRow, 2);
+ String customerFirstName = (String) table1.getValueAt(selectedRow, 3);
+ String doctor = (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);
+ checkupIdField.setText(checkupId);
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+ try {
+ Date parsedDate = dateFormat.parse(date);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(parsedDate);
+ datePicker.getModel().setDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
+ datePicker.getModel().setSelected(true);
+ } catch (ParseException exception) {
+ exception.printStackTrace();
+ }
+
customerLastNameField.setText(customerLastName);
customerFirstNameField.setText(customerFirstName);
- doctorFirstNameField.setText(doctorFirstName);
- doctorLastNameField.setText(doctorLastName);
+ doctorComboBox.setSelectedItem(doctor);
symptomsField.setText(symptoms);
diagnosisField.setText(diagnosis);
notesField.setText(notes);
statusComboBox.setSelectedItem(status);
}
}
+
+
});
JPanel iconPanel = new JPanel();
@@ -333,8 +379,6 @@ public class CheckUpPage extends JPanel {
add(sidebarScrollPane, BorderLayout.WEST);
add(topbar, BorderLayout.NORTH);
add(splitPane, BorderLayout.CENTER);
-
-
}
@Override
@@ -345,10 +389,15 @@ public class CheckUpPage extends JPanel {
ClientHandler.removeResponseListener(ErrorResponse.class, this::handleErrorResponse);
}
+ private void handleGetDoctorGeneralInfoResponse(GetDoctorGeneralInfoResponse response) {
+ log.info("Received doctor general info");
+ this.doctorOptions = response.getDoctorsName();
+ }
+
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"});
+ model.setDataVector(this.queue, new String[]{"Mã khám bệnh", "Ngày Tháng", "Họ", "Tên", "Bác Sĩ", "Triệu chứng", "Chẩn đoán", "Ghi chú", "Trạng thái"});
}
private void handleErrorResponse(ErrorResponse response) {
diff --git a/src/main/java/BsK/client/ui/component/common/DateLabelFormatter.java b/src/main/java/BsK/client/ui/component/common/DateLabelFormatter.java
new file mode 100644
index 0000000..00670a8
--- /dev/null
+++ b/src/main/java/BsK/client/ui/component/common/DateLabelFormatter.java
@@ -0,0 +1,31 @@
+package BsK.client.ui.component.common;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Locale;
+
+import org.jdatepicker.*;
+
+import javax.swing.*;
+
+public class DateLabelFormatter extends JFormattedTextField.AbstractFormatter {
+
+ private String datePattern = "dd/MM/yyyy";
+ private SimpleDateFormat dateFormatter = new SimpleDateFormat(datePattern, Locale.ENGLISH);
+
+ @Override
+ public Object stringToValue(String text) throws ParseException {
+ return dateFormatter.parseObject(text);
+ }
+
+ @Override
+ public String valueToString(Object value) throws ParseException {
+ if (value != null) {
+ Calendar cal = (Calendar) value;
+ return dateFormatter.format(cal.getTime());
+ }
+
+ return "";
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/BsK/common/packet/req/GetDoctorGeneralInfo.java b/src/main/java/BsK/common/packet/req/GetDoctorGeneralInfo.java
new file mode 100644
index 0000000..e61956b
--- /dev/null
+++ b/src/main/java/BsK/common/packet/req/GetDoctorGeneralInfo.java
@@ -0,0 +1,6 @@
+package BsK.common.packet.req;
+
+import BsK.common.packet.Packet;
+
+public class GetDoctorGeneralInfo implements Packet {
+}
diff --git a/src/main/java/BsK/common/packet/res/GetDoctorGeneralInfoResponse.java b/src/main/java/BsK/common/packet/res/GetDoctorGeneralInfoResponse.java
new file mode 100644
index 0000000..555bcbe
--- /dev/null
+++ b/src/main/java/BsK/common/packet/res/GetDoctorGeneralInfoResponse.java
@@ -0,0 +1,13 @@
+package BsK.common.packet.res;
+
+import BsK.common.packet.Packet;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@AllArgsConstructor
+@Data
+
+public class GetDoctorGeneralInfoResponse implements Packet {
+ String[] doctorsName;
+}
diff --git a/src/main/java/BsK/server/network/handler/ServerHandler.java b/src/main/java/BsK/server/network/handler/ServerHandler.java
index c92e561..ac75596 100644
--- a/src/main/java/BsK/server/network/handler/ServerHandler.java
+++ b/src/main/java/BsK/server/network/handler/ServerHandler.java
@@ -3,6 +3,7 @@ package BsK.server.network.handler;
import BsK.common.packet.Packet;
import BsK.common.packet.PacketSerializer;
import BsK.common.packet.req.GetCheckUpQueueRequest;
+import BsK.common.packet.req.GetDoctorGeneralInfo;
import BsK.common.packet.req.LoginRequest;
import BsK.common.packet.req.RegisterRequest;
import BsK.common.packet.res.*;
@@ -69,13 +70,12 @@ public class ServerHandler extends SimpleChannelInboundHandler resultList = new ArrayList<>();
while (rs.next()) {
+ String checkupId = rs.getString("checkup_id");
String checkupDate = rs.getString("checkup_date");
long checkupDateLong = Long.parseLong(checkupDate);
Timestamp timestamp = new Timestamp(checkupDateLong);
@@ -99,9 +100,9 @@ public class ServerHandler extends SimpleChannelInboundHandler resultList = new ArrayList<>();
+ while (rs.next()) {
+ String doctorName = rs.getString(1);
+ resultList.add(doctorName);
+ }
+ String[] resultString = resultList.toArray(new String[0]);
+ UserUtil.sendPacket(user.getSessionId(), new GetDoctorGeneralInfoResponse(resultString));
+ }
+ }
+ catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
}