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 4abd467ba61016c39ef3237814fb1112b272bf64..fa508744974e4506fd77f441badc79d5c4aba29c 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 86871f04d92fa10f1440af80f7655e107cd24608..eecf39fc96f45a64b2c82731548776e9b199308f 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 7dd5503128c07b5f0134fb9bb64c5107b75d54e4..9bce53158e34312afcd7e585641a29a02cd5affc 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 d37f8cd658cab05d6f07b59d275a915f28b45dbe..535199c8949f1fd2011910a681d5bbf53a931b30 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 3c67705cd97cd96ab7e432911899c21463baae56..10ec49f919d25b1c79c652f9fd0b46aff99ec539 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(); } }); });