From c9ba63a6aabf64e3ebabf8994f4047f7f1172c47 Mon Sep 17 00:00:00 2001
From: Chen Mingyuan <ChenM53@cardiff.ac.uk>
Date: Wed, 11 Dec 2024 12:03:36 +0000
Subject: [PATCH] Connect to the database nurse form and display nurse data
 normally.

---
 .../admin/CommonAdminHospitalController.java  |  11 ++
 .../mapper/CommonAdminHospitalMapper.java     |  47 +++---
 .../service/CommonAdminHospitalService.java   |   9 +
 .../imp/CommonAdminHospitalServiceImp.java    |  57 +++----
 src/main/resources/static/html/admin.html     | 156 ++++++++++--------
 5 files changed, 155 insertions(+), 125 deletions(-)

diff --git a/src/main/java/com/cardiff/client_project/controller/admin/CommonAdminHospitalController.java b/src/main/java/com/cardiff/client_project/controller/admin/CommonAdminHospitalController.java
index 4abd467..fa50874 100644
--- a/src/main/java/com/cardiff/client_project/controller/admin/CommonAdminHospitalController.java
+++ b/src/main/java/com/cardiff/client_project/controller/admin/CommonAdminHospitalController.java
@@ -1,6 +1,7 @@
 package com.cardiff.client_project.controller.admin;
 
 import com.cardiff.client_project.pojo.dto.HospitalDTO;
+import com.cardiff.client_project.pojo.vo.NurseVO;
 import com.cardiff.client_project.service.CommonAdminHospitalService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -59,4 +60,14 @@ public class CommonAdminHospitalController {
                     .body("Failed to delete hospital: " + e.getMessage());
         }
     }
+
+    @GetMapping("/nurses")
+    public List<NurseVO> getNurses(@RequestParam(value = "name", required = false) String name,
+                                   @RequestParam(value = "hospitalId", required = false) Integer hospitalId) {
+        if (name == null && hospitalId == null) {
+            return commonAdminHospitalService.getAllNurses();
+        }
+        return commonAdminHospitalService.searchNurses(name, hospitalId);
+    }
+
 }
diff --git a/src/main/java/com/cardiff/client_project/mapper/CommonAdminHospitalMapper.java b/src/main/java/com/cardiff/client_project/mapper/CommonAdminHospitalMapper.java
index 86871f0..eecf39f 100644
--- a/src/main/java/com/cardiff/client_project/mapper/CommonAdminHospitalMapper.java
+++ b/src/main/java/com/cardiff/client_project/mapper/CommonAdminHospitalMapper.java
@@ -1,6 +1,7 @@
 package com.cardiff.client_project.mapper;
 
 import com.cardiff.client_project.pojo.dto.HospitalDTO;
+import com.cardiff.client_project.pojo.vo.NurseVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -15,40 +16,38 @@ public class CommonAdminHospitalMapper {
     @Autowired
     JdbcTemplate jdbcTemplate;
 
-    // Query all hospital information
-    public List<HospitalDTO> findAll() {
-        String sql = "SELECT * FROM hospital";
-        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(HospitalDTO.class));
+    // 更新医院信息
+    public int update(HospitalDTO hospital) {
+        String sql = "UPDATE hospital SET name=?, address=?, phone=?, totalBeds=?, availableBeds=?, occupancyRate=? WHERE id=?";
+        return jdbcTemplate.update(sql, hospital.getName(), hospital.getAddress(), hospital.getPhone(),
+                hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate(), hospital.getId());
     }
 
-    // Add Hospital Information
-    public int save(HospitalDTO hospital) {
-        String sql = "INSERT INTO hospital (name, address, phone, totalBeds, availableBeds, occupancyRate) VALUES (?, ?, ?, ?, ?, ?)";
-        return jdbcTemplate.update(sql, hospital.getName(), hospital.getAddress(), hospital.getPhone(), hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate());
+    public List<NurseVO> findAllNurses() {
+        String sql = "SELECT id, name, status, " +
+                "CASE WHEN status = 1 THEN 'Active' ELSE 'Inactive' END AS status_str, " +
+                "hospitalId, type AS gender, age, address, email, phone " +
+                "FROM nurse";
+        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(NurseVO.class));
     }
 
-    // Update Hospital Information
-    public int update(HospitalDTO hospital) {
-        String sql = "UPDATE hospital SET name=?, address=?, phone=?, totalBeds=?, availableBeds=?, occupancyRate=? WHERE id=?";
-        return jdbcTemplate.update(sql, hospital.getName(), hospital.getAddress(), hospital.getPhone(), hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate(), hospital.getId());
-    }
+    public List<NurseVO> searchNurses(String name, Integer hospitalId) {
+        StringBuilder sql = new StringBuilder("SELECT id, name, status, ");
+        sql.append("CASE WHEN status = 1 THEN 'Active' ELSE 'Inactive' END AS status_str, ");
+        sql.append("hospitalId, type AS gender, age, address, email, phone ");
+        sql.append("FROM nurse WHERE 1=1");
 
-    public List<HospitalDTO> searchHospitals(String name, String address) {
-        StringBuilder sql = new StringBuilder("SELECT * FROM hospital WHERE 1=1");
         List<Object> params = new ArrayList<>();
-
-        if (name != null && !name.trim().isEmpty()) {
+        if (name != null && !name.isEmpty()) {
             sql.append(" AND name LIKE ?");
-            params.add("%" + name.trim() + "%");
+            params.add("%" + name + "%");
         }
-        if (address != null && !address.trim().isEmpty()) {
-            sql.append(" AND address LIKE ?");
-            params.add("%" + address.trim() + "%");
+        if (hospitalId != null) {
+            sql.append(" AND hospitalId = ?");
+            params.add(hospitalId);
         }
 
-        return jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(HospitalDTO.class), params.toArray());
+        return jdbcTemplate.query(sql.toString(), params.toArray(), new BeanPropertyRowMapper<>(NurseVO.class));
     }
 
-
-
 }
diff --git a/src/main/java/com/cardiff/client_project/service/CommonAdminHospitalService.java b/src/main/java/com/cardiff/client_project/service/CommonAdminHospitalService.java
index 7dd5503..9bce531 100644
--- a/src/main/java/com/cardiff/client_project/service/CommonAdminHospitalService.java
+++ b/src/main/java/com/cardiff/client_project/service/CommonAdminHospitalService.java
@@ -1,6 +1,9 @@
 package com.cardiff.client_project.service;
 
+import com.cardiff.client_project.pojo.dto.SelectDTO;
 import com.cardiff.client_project.pojo.dto.HospitalDTO;
+import com.cardiff.client_project.pojo.vo.NurseVO;
+import com.cardiff.client_project.utils.Result;
 
 import java.util.List;
 
@@ -11,7 +14,13 @@ public interface CommonAdminHospitalService {
 
     void addHospital(HospitalDTO hospital);
 
+    Result add(Object entity);
+
     void updateHospital(HospitalDTO hospital);
 
     void deleteHospital(int id);
+
+    List<NurseVO> getAllNurses();
+    List<NurseVO> searchNurses(String name, Integer hospitalId);
+
 }
diff --git a/src/main/java/com/cardiff/client_project/service/imp/CommonAdminHospitalServiceImp.java b/src/main/java/com/cardiff/client_project/service/imp/CommonAdminHospitalServiceImp.java
index d37f8cd..535199c 100644
--- a/src/main/java/com/cardiff/client_project/service/imp/CommonAdminHospitalServiceImp.java
+++ b/src/main/java/com/cardiff/client_project/service/imp/CommonAdminHospitalServiceImp.java
@@ -1,13 +1,15 @@
 package com.cardiff.client_project.service.imp;
 
+import com.cardiff.client_project.mapper.CommonAdminHospitalMapper;
 import com.cardiff.client_project.pojo.dto.HospitalDTO;
+import com.cardiff.client_project.pojo.vo.NurseVO;
 import com.cardiff.client_project.service.CommonAdminHospitalService;
+import com.cardiff.client_project.utils.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -16,6 +18,9 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
     @Autowired
     private JdbcTemplate jdbcTemplate;
 
+    @Autowired
+    private CommonAdminHospitalMapper commonAdminHospitalMapper;
+
     @Override
     public List<HospitalDTO> getAllHospitals() {
         String sql = "SELECT * FROM hospital";
@@ -23,26 +28,22 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
     }
 
     @Override
-    public List<HospitalDTO> searchHospitals(String name, String address) {
+    public List<HospitalDTO> searchHospitals(String name, String location) {
         StringBuilder sql = new StringBuilder("SELECT * FROM hospital WHERE 1=1");
-        List<Object> params = new ArrayList<>();
-
-        if (name != null && !name.trim().isEmpty()) {
+        if (name != null && !name.isEmpty()) {
             sql.append(" AND name LIKE ?");
-            params.add("%" + name.trim() + "%");
         }
-        if (address != null && !address.trim().isEmpty()) {
+        if (location != null && !location.isEmpty()) {
             sql.append(" AND address LIKE ?");
-            params.add("%" + address.trim() + "%");
         }
-
-        return jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(HospitalDTO.class), params.toArray());
+        return jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(HospitalDTO.class),
+                name != null ? "%" + name + "%" : null,
+                location != null ? "%" + location + "%" : null);
     }
 
-
     @Override
     public void addHospital(HospitalDTO hospital) {
-        if (hospital.getName() == null || hospital.getAddress() == null || // 修改为 address
+        if (hospital.getName() == null || hospital.getAddress() == null ||
                 hospital.getPhone() == null || hospital.getTotalBeds() <= 0 ||
                 hospital.getAvailableBeds() < 0) {
             throw new IllegalArgumentException("Invalid hospital data: Missing or incorrect fields.");
@@ -55,8 +56,10 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
                 hospital.getTotalBeds(), hospital.getAvailableBeds(), occupancyRate);
     }
 
-
-
+    @Override
+    public Result add(Object entity) {
+        return null;
+    }
 
     @Override
     public void updateHospital(HospitalDTO hospital) {
@@ -65,7 +68,7 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
             throw new IllegalArgumentException("Invalid hospital data: Missing or incorrect fields.");
         }
 
-        String sql = "UPDATE hospital SET name = ?, location = ?, phone = ?, totalBeds = ?, availableBeds = ?, occupancyRate = ? WHERE id = ?";
+        String sql = "UPDATE hospital SET name = ?, address = ?, phone = ?, totalBeds = ?, availableBeds = ?, occupancyRate = ? WHERE id = ?";
         double occupancyRate = 1.0 - (double) hospital.getAvailableBeds() / hospital.getTotalBeds();
 
         int rowsUpdated = jdbcTemplate.update(sql, hospital.getName(), hospital.getAddress(), hospital.getPhone(),
@@ -78,21 +81,19 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
 
     @Override
     public void deleteHospital(int id) {
-        // Delete the specified record.
-        String deleteSql = "DELETE FROM hospital WHERE id = ?";
-        jdbcTemplate.update(deleteSql, id);
-
-        // Reorder ID
-        String reorderSql = "SET @new_id = 0; " +
-                "UPDATE hospital SET id = (@new_id := @new_id + 1); " +
-                "ALTER TABLE hospital AUTO_INCREMENT = 1;";
-        for (String sql : reorderSql.split(";")) {
-            if (!sql.trim().isEmpty()) {
-                jdbcTemplate.execute(sql.trim());
-            }
-        }
+        String sql = "DELETE FROM hospital WHERE id = ?";
+        jdbcTemplate.update(sql, id);
     }
 
 
+    @Override
+    public List<NurseVO> getAllNurses() {
+        return commonAdminHospitalMapper.findAllNurses();
+    }
+
+    @Override
+    public List<NurseVO> searchNurses(String name, Integer hospitalId) {
+        return commonAdminHospitalMapper.searchNurses(name, hospitalId);
+    }
 
 }
diff --git a/src/main/resources/static/html/admin.html b/src/main/resources/static/html/admin.html
index 3c67705..10ec49f 100644
--- a/src/main/resources/static/html/admin.html
+++ b/src/main/resources/static/html/admin.html
@@ -10,7 +10,7 @@
 <nav class="sidebar">
     <div class="text-lg font-semibold">System</div>
     <a href="#" data-content="hospital">Hospital</a>
-    <a href="#" data-content="patient">Nursing staff</a>
+    <a href="#" data-content="nursing">Nursing Staff</a>
     <a><div onclick="chooseOut()">Sign Out</div></a>
 </nav>
 <div class="content">
@@ -31,7 +31,7 @@
         <input type="text" id="modal-address" placeholder="Enter address" />
         <label for="modal-phone">Phone</label>
         <input type="text" id="modal-phone" placeholder="Enter phone number" />
-        <label for="modal-totalBeds">Email</label>
+        <label for="modal-totalBeds">Total Beds</label>
         <input type="number" id="modal-totalBeds" placeholder="Enter total beds" />
         <label for="modal-availableBeds">Available Beds</label>
         <input type="number" id="modal-availableBeds" placeholder="Enter available beds" />
@@ -68,6 +68,7 @@
 
     function loadHospitalInterface() {
         dynamicContent.innerHTML = `
+            <h2>Hospital Management</h2>
             <div id="toolbar">
                 <label for="searchName">Name</label>
                 <input type="text" id="searchName" placeholder="Search by name" />
@@ -87,14 +88,47 @@
                         <th>Actions</th>
                     </tr>
                 </thead>
-                <tbody id="table-body"></tbody>
+                <tbody id="hospital-table-body"></tbody>
             </table>
         `;
 
-        bindToolbarEvents();
+        bindHospitalToolbarEvents();
         loadHospitals();
     }
 
+    function loadNursingStaffInterface() {
+        dynamicContent.innerHTML = `
+            <h2>Nursing Staff</h2>
+            <div id="toolbar">
+                <label for="searchNurseName">Name</label>
+                <input type="text" id="searchNurseName" placeholder="Search by name" />
+                <label for="searchNurseHospitalId">Hospital ID</label>
+                <input type="number" id="searchNurseHospitalId" placeholder="Search by Hospital ID" />
+                <button id="searchNurseButton">Search</button>
+                <button id="allNurseButton">All</button>
+            </div>
+            <table>
+                <thead>
+                    <tr>
+                        <th>ID</th>
+                        <th>Name</th>
+                        <th>Status</th>
+                        <th>Hospital ID</th>
+                        <th>Age</th>
+                        <th>Address</th>
+                        <th>Email</th>
+                        <th>Phone</th>
+                    </tr>
+                </thead>
+                <tbody id="nursing-table-body"></tbody>
+            </table>
+
+        `;
+
+        bindNursingToolbarEvents();
+        loadNurses();
+    }
+
     function openAddHospitalModal() {
         document.getElementById('modal-title').innerText = "Add New Hospital";
         document.getElementById('hospital-modal').style.display = 'flex';
@@ -103,6 +137,8 @@
         document.getElementById('modal-name').value = '';
         document.getElementById('modal-address').value = '';
         document.getElementById('modal-phone').value = '';
+        document.getElementById('modal-totalBeds').value = '';
+        document.getElementById('modal-availableBeds').value = '';
 
         document.getElementById('save-hospital-btn').onclick = saveHospital;
     }
@@ -116,6 +152,8 @@
             name: document.getElementById('modal-name').value.trim(),
             address: document.getElementById('modal-address').value.trim(),
             phone: document.getElementById('modal-phone').value.trim(),
+            totalBeds: parseInt(document.getElementById('modal-totalBeds').value.trim()),
+            availableBeds: parseInt(document.getElementById('modal-availableBeds').value.trim())
         };
 
         if (!hospitalData.name || !hospitalData.address || !hospitalData.phone ||
@@ -147,7 +185,7 @@
         fetch(`/commonAdmin/hospital/all?${query}`)
             .then(response => response.json())
             .then(data => {
-                const tableBody = document.getElementById('table-body');
+                const tableBody = document.getElementById('hospital-table-body');
                 tableBody.innerHTML = '';
 
                 data.forEach(hospital => {
@@ -164,79 +202,40 @@
                     `;
                     tableBody.appendChild(row);
                 });
-
-                bindRowEvents();
             })
             .catch(error => console.error("Error loading hospitals:", error));
     }
 
-    function handleDeleteHospital(event) {
-        const id = event.target.getAttribute('data-id');
-
-        if (confirm(`Are you sure you want to delete the hospital with ID ${id}?`)) {
-            fetch(`/commonAdmin/hospital/delete/${id}`, { method: 'DELETE' })
-                .then(response => {
-                    if (response.ok) {
-                        alert("Deleted successfully!");
-                        loadHospitals();
-                    } else {
-                        throw new Error("Failed to delete hospital.");
-                    }
-                })
-                .catch(error => console.error("Error deleting hospital:", error));
-        }
-    }
-
-    function handleEditHospital(event) {
-        const id = event.target.getAttribute('data-id');
-
-        fetch(`/commonAdmin/hospital/${id}`)
+    function loadNurses(filters = {}) {
+        const query = new URLSearchParams(filters).toString();
+        fetch(`/commonAdmin/hospital/nurses?${query}`)
             .then(response => response.json())
-            .then(hospital => {
-                document.getElementById('modal-title').innerText = "Edit Hospital";
-                document.getElementById('modal-name').value = hospital.name;
-                document.getElementById('modal-address').value = hospital.address;
-                document.getElementById('modal-phone').value = hospital.phone;
-                document.getElementById('hospital-modal').style.display = 'flex';
-
-                document.getElementById('save-hospital-btn').onclick = () => updateHospital(id);
+            .then(data => {
+                const tableBody = document.getElementById('nursing-table-body');
+                tableBody.innerHTML = '';
+
+                data.forEach(nurse => {
+                    const row = document.createElement('tr');
+                    row.innerHTML = `
+                    <td>${nurse.id}</td>
+                    <td>${nurse.name}</td>
+                    <td>${nurse.status_str}</td>
+                    <td>${nurse.hospitalId}</td>
+                    <td>${nurse.age}</td>
+                    <td>${nurse.address}</td>
+                    <td>${nurse.email}</td>
+                    <td>${nurse.phone}</td>
+                `;
+                    tableBody.appendChild(row);
+                });
             })
-            .catch(error => console.error("Error fetching hospital details:", error));
+            .catch(error => console.error("Error loading nurses:", error));
     }
 
-    function updateHospital(id) {
-        const hospitalData = {
-            id,
-            name: document.getElementById('modal-name').value.trim(),
-            address: document.getElementById('modal-address').value.trim(),
-            phone: document.getElementById('modal-phone').value.trim(),
-        };
 
-        if (!hospitalData.name || !hospitalData.address || !hospitalData.phone ||
-            isNaN(hospitalData.totalBeds) || isNaN(hospitalData.availableBeds)) {
-            alert("All fields are required!");
-            return;
-        }
 
-        fetch('/commonAdmin/hospital/update', {
-            method: 'PUT',
-            headers: { 'Content-Type': 'application/json' },
-            body: JSON.stringify(hospitalData),
-        }).then(response => {
-            if (response.ok) {
-                alert("Hospital updated successfully!");
-                closeHospitalModal();
-                loadHospitals();
-            } else {
-                return response.text().then(text => { throw new Error(text); });
-            }
-        }).catch(error => {
-            console.error("Error updating hospital:", error);
-            alert("Failed to update hospital: " + error.message);
-        });
-    }
 
-    function bindToolbarEvents() {
+    function bindHospitalToolbarEvents() {
         document.getElementById('addHospitalButton').addEventListener('click', openAddHospitalModal);
         document.getElementById('searchButton').addEventListener('click', () => {
             const name = document.getElementById('searchName').value.trim();
@@ -251,26 +250,37 @@
         document.getElementById('allButton').addEventListener('click', () => {
             loadHospitals();
         });
+
+        // Add close button event listener
+        document.getElementById('close-hospital-modal').addEventListener('click', closeHospitalModal);
     }
 
+    function bindNursingToolbarEvents() {
+        document.getElementById('searchNurseButton').addEventListener('click', () => {
+            const name = document.getElementById('searchNurseName').value.trim();
+            const hospitalId = document.getElementById('searchNurseHospitalId').value.trim();
+            const filters = {};
 
-    function bindRowEvents() {
-        document.querySelectorAll('.deleteButton').forEach(button => {
-            button.addEventListener('click', handleDeleteHospital);
+            if (name) filters.name = name;
+            if (hospitalId) filters.hospitalId = hospitalId;
+
+            loadNurses(filters);
         });
 
-        document.querySelectorAll('.editButton').forEach(button => {
-            button.addEventListener('click', handleEditHospital);
+        document.getElementById('allNurseButton').addEventListener('click', () => {
+            loadNurses();
         });
     }
 
-    document.getElementById('close-hospital-modal').addEventListener('click', closeHospitalModal);
+
     document.querySelectorAll(".sidebar a").forEach(link => {
         link.addEventListener("click", function(event) {
             event.preventDefault();
             const contentKey = this.getAttribute("data-content");
             if (contentKey === "hospital") {
                 loadHospitalInterface();
+            } else if (contentKey === "nursing") {
+                loadNursingStaffInterface();
             }
         });
     });
-- 
GitLab