From aaeb6ab9982484021a7f6c81d2c5e8ed8590bf7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=AA=20Th=C3=A0nh=20=C4=90=E1=BA=A1t?= <91755733+lds217@users.noreply.github.com> Date: Wed, 18 Jun 2025 01:42:13 +0700 Subject: [PATCH] [update] Revise medical invoice format with updated patient details and service costs. Enhance CheckUpPage by integrating order information retrieval, updating dialog initialization for existing prescriptions, and improving data handling in service and medicine dialogs for better user experience. --- medical_invoice.pdf | Bin 25403 -> 24164 bytes .../ui/component/CheckUpPage/CheckUpPage.java | 35 ++++- .../MedicineDialog/MedicineDialog.java | 24 +++- .../ServiceDialog/ServiceDialog.java | 39 +++--- .../packet/req/GetOrderInfoByCheckupReq.java | 13 ++ .../packet/res/GetOrderInfoByCheckupRes.java | 14 ++ .../BsK/common/packet/res/SaveCheckupRes.java | 14 ++ .../server/network/handler/ServerHandler.java | 126 +++++++++++++++++- src/main/resources/database/BSK.db | Bin 1171456 -> 1171456 bytes 9 files changed, 236 insertions(+), 29 deletions(-) create mode 100644 src/main/java/BsK/common/packet/req/GetOrderInfoByCheckupReq.java create mode 100644 src/main/java/BsK/common/packet/res/GetOrderInfoByCheckupRes.java create mode 100644 src/main/java/BsK/common/packet/res/SaveCheckupRes.java diff --git a/medical_invoice.pdf b/medical_invoice.pdf index f98e23ac364710198910e6ce295cdc3ac6f6f40f..1a1915e3c49009505e59e056d26741c3250be460 100644 GIT binary patch delta 21291 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 delta 22496 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 G#Qy<5>#9uv 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 ec27195..2e7f09e 100644 --- a/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java +++ b/src/main/java/BsK/client/ui/component/CheckUpPage/CheckUpPage.java @@ -116,6 +116,7 @@ public class CheckUpPage extends JPanel { private final ResponseListener districtResponseListener = this::handleGetDistrictResponse; private final ResponseListener wardResponseListener = this::handleGetWardResponse; private final ResponseListener callPatientResponseListener = this::handleCallPatientResponse; + private final ResponseListener orderInfoByCheckupListener = this::handleGetOrderInfoByCheckupResponse; private JTextField checkupIdField, customerLastNameField, customerFirstNameField,customerAddressField, customerPhoneField, customerIdField; private JTextArea suggestionField, diagnosisField, conclusionField; // Changed symptomsField to suggestionField private JTextPane notesField; @@ -272,6 +273,7 @@ public class CheckUpPage extends JPanel { ClientHandler.addResponseListener(GetCheckUpQueueResponse.class, checkUpQueueListener); ClientHandler.addResponseListener(GetCheckUpQueueUpdateResponse.class, checkUpQueueUpdateListener); ClientHandler.addResponseListener(GetPatientHistoryResponse.class, patientHistoryListener); + ClientHandler.addResponseListener(GetOrderInfoByCheckupRes.class, orderInfoByCheckupListener); ClientHandler.addResponseListener(GetDistrictResponse.class, districtResponseListener); ClientHandler.addResponseListener(GetWardResponse.class, wardResponseListener); ClientHandler.addResponseListener(CallPatientResponse.class, callPatientResponseListener); @@ -1235,9 +1237,7 @@ public class CheckUpPage extends JPanel { private void handleActionPanelClick(String name) { switch (name) { case "service": - if(serDialog == null) { - serDialog = new ServiceDialog(mainFrame); - } + serDialog = new ServiceDialog(mainFrame, this.servicePrescription); serDialog.setVisible(true); saved = false; servicePrescription = serDialog.getServicePrescription(); @@ -1257,9 +1257,7 @@ public class CheckUpPage extends JPanel { callingStatusLabel.setForeground(new Color(0, 100, 0)); break; case "medicine": - if(medDialog == null) { - medDialog = new MedicineDialog(mainFrame); - } + medDialog = new MedicineDialog(mainFrame, this.medicinePrescription); medDialog.setVisible(true); saved = false; medicinePrescription = medDialog.getMedicinePrescription(); @@ -1478,7 +1476,7 @@ public class CheckUpPage extends JPanel { checkupTypeComboBox.setSelectedItem(selectedPatient.getCheckupType()); NetworkUtil.sendPacket(ClientHandler.ctx.channel(), new GetPatientHistoryRequest(Integer.parseInt(selectedPatient.getCustomerId()))); - + NetworkUtil.sendPacket(ClientHandler.ctx.channel(), new GetOrderInfoByCheckupReq(selectedPatient.getCheckupId())); String fullAddress = selectedPatient.getCustomerAddress(); String[] addressParts = fullAddress.split(", "); if (addressParts.length > 0) customerAddressField.setText(addressParts[0]); @@ -1714,6 +1712,29 @@ public class CheckUpPage extends JPanel { callingStatusLabel.setBackground(new Color(217, 83, 79)); // Red background for calling } + private void handleGetOrderInfoByCheckupResponse(GetOrderInfoByCheckupRes response) { + log.info("Received order info for checkup."); + + // Ensure UI updates are on the Event Dispatch Thread + SwingUtilities.invokeLater(() -> { + this.medicinePrescription = response.getMedicinePrescription() != null ? response.getMedicinePrescription() : new String[0][0]; + this.servicePrescription = response.getServicePrescription() != null ? response.getServicePrescription() : new String[0][0]; + + // Pass the updated prescriptions to the dialogs if they exist + if (medDialog != null) { + // Assuming MedicineDialog has a method to update its data + // medDialog.setPrescription(this.medicinePrescription); + } + if (serDialog != null) { + // Assuming ServiceDialog has a method to update its data + // serDialog.setPrescription(this.servicePrescription); + } + + // Update the UI tree display + updatePrescriptionTree(); + }); + } + private JPanel createImageGalleryViewPanel() { JPanel panel = new JPanel(new BorderLayout(5, 5)); panel.setBorder(BorderFactory.createCompoundBorder( diff --git a/src/main/java/BsK/client/ui/component/CheckUpPage/MedicineDialog/MedicineDialog.java b/src/main/java/BsK/client/ui/component/CheckUpPage/MedicineDialog/MedicineDialog.java index 01fcc30..1068149 100644 --- a/src/main/java/BsK/client/ui/component/CheckUpPage/MedicineDialog/MedicineDialog.java +++ b/src/main/java/BsK/client/ui/component/CheckUpPage/MedicineDialog/MedicineDialog.java @@ -84,8 +84,24 @@ public class MedicineDialog extends JDialog { NetworkUtil.sendPacket(ClientHandler.ctx.channel(), new GetMedInfoRequest()); } - public MedicineDialog(Frame parent) { - super(parent, "Thêm thuốc", true); + public MedicineDialog(final Frame parent) { + super(parent, "Đơn thuốc", true); + this.medicinePrescription = new String[0][0]; + init(parent); + } + + public MedicineDialog(final Frame parent, String[][] existingPrescription) { + super(parent, "Đơn thuốc", true); + this.medicinePrescription = existingPrescription != null ? existingPrescription : new String[0][0]; + init(parent); + if (existingPrescription != null) { + for (String[] row : existingPrescription) { + selectedTableModel.addRow(row); + } + } + } + + private void init(final Frame parent) { setDefaultCloseOperation(DISPOSE_ON_CLOSE); setSize(1100, 600); setLocationRelativeTo(parent); @@ -112,9 +128,6 @@ public class MedicineDialog extends JDialog { } }); - // Initialize medicinePrescription as empty array - medicinePrescription = new String[0][0]; - // Add response listener and send request for medicine data ClientHandler.addResponseListener(GetMedInfoResponse.class, getMedInfoResponseListener); sendGetMedInfoRequest(); @@ -472,7 +485,6 @@ public class MedicineDialog extends JDialog { }); cancelButton.addActionListener(e -> { - medicinePrescription = null; dispose(); }); } diff --git a/src/main/java/BsK/client/ui/component/CheckUpPage/ServiceDialog/ServiceDialog.java b/src/main/java/BsK/client/ui/component/CheckUpPage/ServiceDialog/ServiceDialog.java index e12bf5a..43bd5d3 100644 --- a/src/main/java/BsK/client/ui/component/CheckUpPage/ServiceDialog/ServiceDialog.java +++ b/src/main/java/BsK/client/ui/component/CheckUpPage/ServiceDialog/ServiceDialog.java @@ -71,6 +71,22 @@ public class ServiceDialog extends JDialog { public ServiceDialog(Frame parent) { super(parent, "Thêm dịch vụ", true); + this.servicePrescription = new String[0][0]; + initUI(parent); + } + + public ServiceDialog(Frame parent, String[][] existingPrescription) { + super(parent, "Thêm dịch vụ", true); + this.servicePrescription = existingPrescription != null ? existingPrescription : new String[0][0]; + initUI(parent); + if (existingPrescription != null) { + for (String[] row : existingPrescription) { + selectedTableModel.addRow(row); + } + } + } + + private void initUI(Frame parent) { setDefaultCloseOperation(DISPOSE_ON_CLOSE); setSize(1100, 600); setLocationRelativeTo(parent); @@ -97,9 +113,6 @@ public class ServiceDialog extends JDialog { } }); - // Initialize servicePrescription as empty array - servicePrescription = new String[0][0]; - // Add response listener and send request for service data ClientHandler.addResponseListener(GetSerInfoResponse.class, getSerInfoResponseListener); sendGetSerInfoRequest(); @@ -372,7 +385,6 @@ public class ServiceDialog extends JDialog { }); cancelButton.addActionListener(e -> { - servicePrescription = null; dispose(); }); } @@ -523,19 +535,16 @@ public class ServiceDialog extends JDialog { private void collectPrescriptionData() { int rowCount = selectedTableModel.getRowCount(); - if (rowCount == 0) { - servicePrescription = new String[0][0]; - return; - } - servicePrescription = new String[rowCount][6]; + List prescriptionList = new ArrayList<>(); for (int i = 0; i < rowCount; i++) { - servicePrescription[i][0] = selectedTableModel.getValueAt(i, 0).toString(); - servicePrescription[i][1] = selectedTableModel.getValueAt(i, 1).toString(); - servicePrescription[i][2] = selectedTableModel.getValueAt(i, 2).toString(); - servicePrescription[i][3] = selectedTableModel.getValueAt(i, 3).toString(); - servicePrescription[i][4] = selectedTableModel.getValueAt(i, 4).toString(); - servicePrescription[i][5] = selectedTableModel.getValueAt(i, 5).toString(); + String[] rowData = new String[selectedTableModel.getColumnCount()]; + for (int j = 0; j < selectedTableModel.getColumnCount(); j++) { + Object value = selectedTableModel.getValueAt(i, j); + rowData[j] = (value != null) ? value.toString() : ""; + } + prescriptionList.add(rowData); } + this.servicePrescription = prescriptionList.toArray(new String[0][]); } @Override diff --git a/src/main/java/BsK/common/packet/req/GetOrderInfoByCheckupReq.java b/src/main/java/BsK/common/packet/req/GetOrderInfoByCheckupReq.java new file mode 100644 index 0000000..a14a17e --- /dev/null +++ b/src/main/java/BsK/common/packet/req/GetOrderInfoByCheckupReq.java @@ -0,0 +1,13 @@ +package BsK.common.packet.req; + +import BsK.common.packet.Packet; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@AllArgsConstructor +@Data +public class GetOrderInfoByCheckupReq implements Packet{ + String checkupId; +} diff --git a/src/main/java/BsK/common/packet/res/GetOrderInfoByCheckupRes.java b/src/main/java/BsK/common/packet/res/GetOrderInfoByCheckupRes.java new file mode 100644 index 0000000..4ddbba5 --- /dev/null +++ b/src/main/java/BsK/common/packet/res/GetOrderInfoByCheckupRes.java @@ -0,0 +1,14 @@ +package BsK.common.packet.res; + +import BsK.common.packet.Packet; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@AllArgsConstructor +@Data +public class GetOrderInfoByCheckupRes implements Packet { + String[][] medicinePrescription; + String[][] servicePrescription; +} diff --git a/src/main/java/BsK/common/packet/res/SaveCheckupRes.java b/src/main/java/BsK/common/packet/res/SaveCheckupRes.java new file mode 100644 index 0000000..f8255bb --- /dev/null +++ b/src/main/java/BsK/common/packet/res/SaveCheckupRes.java @@ -0,0 +1,14 @@ +package BsK.common.packet.res; + +import BsK.common.packet.Packet; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@AllArgsConstructor +@Data +public class SaveCheckupRes implements Packet { + boolean success; + String message; +} diff --git a/src/main/java/BsK/server/network/handler/ServerHandler.java b/src/main/java/BsK/server/network/handler/ServerHandler.java index 8fb40aa..5e42e04 100644 --- a/src/main/java/BsK/server/network/handler/ServerHandler.java +++ b/src/main/java/BsK/server/network/handler/ServerHandler.java @@ -757,7 +757,19 @@ public class ServerHandler extends SimpleChannelInboundHandler 0 && prescriptionId != null) { @@ -842,7 +854,15 @@ public class ServerHandler extends SimpleChannelInboundHandler 0) { @@ -877,7 +897,7 @@ public class ServerHandler extends SimpleChannelInboundHandler medList = new ArrayList<>(); + while(medRs.next()) { + String[] med = new String[10]; + med[0] = medRs.getString("med_id"); + med[1] = medRs.getString("med_name"); + med[2] = medRs.getString("quantity_ordered"); + med[3] = medRs.getString("med_unit"); + + // Parse dosage: "Sáng 1, Trưa 1, Chiều 1" + String dosage = medRs.getString("dosage"); + String morning = "0", noon = "0", evening = "0"; + if (dosage != null && !dosage.isEmpty()) { + String[] parts = dosage.split(", "); + for (String part : parts) { + String[] dosagePart = part.split(" "); + if (dosagePart.length == 2) { + if ("Sáng".equals(dosagePart[0])) morning = dosagePart[1]; + else if ("Trưa".equals(dosagePart[0])) noon = dosagePart[1]; + else if ("Chiều".equals(dosagePart[0])) evening = dosagePart[1]; + } + } + } + med[4] = morning; + med[5] = noon; + med[6] = evening; + + med[7] = medRs.getString("price_per_unit"); + med[8] = medRs.getString("total_price"); + med[9] = medRs.getString("notes"); + medList.add(med); + } + medicinePrescription = medList.toArray(new String[0][]); + + } catch (SQLException e) { + log.error("Error getting medicine prescription for checkupId: " + checkupId, e); + } + + // Get Service Prescription + try { + PreparedStatement serStmt = Server.connection.prepareStatement( + """ + SELECT + S.service_id, + S.service_name, + CS.quantity, + S.service_cost, + CS.total_cost + FROM CheckupService CS + JOIN Service S ON CS.service_id = S.service_id + WHERE CS.checkup_id = ? + """ + ); + serStmt.setString(1, checkupId); + ResultSet serRs = serStmt.executeQuery(); + + ArrayList serList = new ArrayList<>(); + while(serRs.next()) { + String[] ser = new String[6]; + ser[0] = serRs.getString("service_id"); + ser[1] = serRs.getString("service_name"); + ser[2] = serRs.getString("quantity"); + ser[3] = serRs.getString("service_cost"); + ser[4] = serRs.getString("total_cost"); + ser[5] = ""; // Notes - not available in CheckupService table + serList.add(ser); + } + servicePrescription = serList.toArray(new String[0][]); + + } catch (SQLException e) { + log.error("Error getting service prescription for checkupId: " + checkupId, e); + } + + UserUtil.sendPacket(currentUser.getSessionId(), new GetOrderInfoByCheckupRes(medicinePrescription, servicePrescription)); + log.info("Sent order info for checkup {} to client", checkupId); + } } } diff --git a/src/main/resources/database/BSK.db b/src/main/resources/database/BSK.db index 707351372273f085b600efd78033b6eacb99549a..0514555378a7baf3b42a53e82bcdb7476961cc8c 100644 GIT binary patch delta 831 zcmaKpO=uHA7=~vyJDY5hnJ-hD*pj+#u|2hQ(?VJ(;tx@x6ic;H<3$N1)P%4|Fb5Ia z8Wi;)#CX_~Xb}-Sh$Y}6Ml4uFQMBfu0VN>4NIj@{(}RwR8f@Cb!@xZ6yu&v$Jr|vx zixz`8ez7A$;%MXK!P#WYz)-$xjOZ-{x)9XhCgflQx>%J}%RE$Jm#T;MZtGS&ofxZ_ z2HPne2n~e$LW6z%Lqu_prOag7oY-d`O{A0Eq-ji6+~w5aD_b>6GYDS73}j&lB=&?A z*#V}}&vc$zG$XFtNvC?igArCE6k|-uauogF%gC{C_qaRyoVQX2QG^#$6**c!NoqZSL{B! z&MvTHY!5RS&`)%M&e9UiiK#cyDXq;V9vG>PV8iP=I);m5J4Uzf8jY@7E4=!jmrkGi zqXWye@=t6271OKne&RsLz}g;H02j zvs)LqNq9jcj3A61c|R(g+|cf~9@qI6+019N*7q8J?h7cwtJsn9!*74Q&IhfpHD0wV YuX#+CSjKL7%j1#^yU`8Xtn(870ncvLp8x;= delta 591 zcmaKoL1+^}6o%*R>}0b|XWnkw6wKDRdX(1P1U1rAB`rauvFNHjDS?CB*>vq9EFX7onmAT!H}$f*=ZNK^|e(!eSbV{stm&qxP<30kD7X|n(Cy= z$Yr@qt!~IG`9uPkW)`FYkczR!v6oBXteYKigZir{<@HD5OzqqAs~6quINVvUyBZIw z7v`w<0S14A;`0A;=0=X=9Od$6A20xKyJ3Jn-x_)Rv24>{N#$wy9pB+Iyoc8oEejkm zAb-kL8uOu?$)w^t0hr01&2?}-Jl33^EKM9L71M(ox|Z71hd66b94Sqv2exYd-hW!; zW#9zR!s23aVF%3jbL=tvjX$u5y~uLm4I)ivfxsBuak5@t^MKF@PUwUnVuV4&36tm} z5=1{C2}K}bMQfhzJV2wv@P+x-=%B6I>TERl-VQ~}^~bcRvuX#rhEq}Uvpu8fQ!y!` J@QZy5{s39SpQiu-