Skip to content
Snippets Groups Projects
Commit a093b6b2 authored by Yulong Wang's avatar Yulong Wang
Browse files

Merge branch...

Merge branch '19-as-a-commonadmin-i-hope-i-can-hava-page-to-show-the-hospital-and-nursing-staff-information-so' into 'main'

Connect to the database nurse form and display nurse data normally.

Closes #19

See merge request !76
parents 4e2f3953 c9ba63a6
No related branches found
No related tags found
1 merge request!76Connect to the database nurse form and display nurse data normally.
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;
......@@ -31,7 +32,7 @@ public class CommonAdminHospitalController {
commonAdminHospitalService.addHospital(hospital);
return ResponseEntity.ok("Hospital added successfully!");
} catch (Exception e) {
e.printStackTrace();
e.printStackTrace(); // Print error log
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Error adding hospital: " + e.getMessage());
}
......@@ -45,13 +46,8 @@ public class CommonAdminHospitalController {
@PutMapping("/update")
public ResponseEntity<String> updateHospital(@RequestBody HospitalDTO hospital) {
try {
commonAdminHospitalService.updateHospital(hospital);
return ResponseEntity.ok("Hospital updated successfully!");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Error updating hospital: " + e.getMessage());
}
commonAdminHospitalService.updateHospital(hospital);
return ResponseEntity.ok("Hospital updated successfully!");
}
@DeleteMapping("/delete/{id}")
......@@ -64,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);
}
}
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;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
......@@ -14,25 +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, location, phone, totalBeds, availableBeds, occupancyRate) VALUES (?, ?, ?, ?, ?, ?)";
return jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), 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=?, location=?, phone=?, totalBeds=?, availableBeds=?, occupancyRate=? WHERE id=?";
return jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), 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");
List<Object> params = new ArrayList<>();
if (name != null && !name.isEmpty()) {
sql.append(" AND name LIKE ?");
params.add("%" + name + "%");
}
if (hospitalId != null) {
sql.append(" AND hospitalId = ?");
params.add(hospitalId);
}
return jdbcTemplate.query(sql.toString(), params.toArray(), new BeanPropertyRowMapper<>(NurseVO.class));
}
}
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);
}
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;
......@@ -15,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,19 +29,21 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
@Override
public List<HospitalDTO> searchHospitals(String name, String location) {
String sql = "SELECT * FROM hospital WHERE 1=1";
StringBuilder sql = new StringBuilder("SELECT * FROM hospital WHERE 1=1");
if (name != null && !name.isEmpty()) {
sql += " AND name LIKE '%" + name + "%'";
sql.append(" AND name LIKE ?");
}
if (location != null && !location.isEmpty()) {
sql += " AND location LIKE '%" + location + "%'";
sql.append(" AND address LIKE ?");
}
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(HospitalDTO.class));
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.");
......@@ -48,18 +56,22 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
hospital.getTotalBeds(), hospital.getAvailableBeds(), occupancyRate);
}
@Override
public Result add(Object entity) {
return null;
}
@Override
public void updateHospital(HospitalDTO hospital) {
if (hospital.getId() <= 0 || hospital.getName() == null || hospital.getLocation() == null ||
if (hospital.getId() <= 0 || 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.");
}
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.getLocation(), hospital.getPhone(),
int rowsUpdated = jdbcTemplate.update(sql, hospital.getName(), hospital.getAddress(), hospital.getPhone(),
hospital.getTotalBeds(), hospital.getAvailableBeds(), occupancyRate, hospital.getId());
if (rowsUpdated == 0) {
......@@ -69,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);
}
}
......@@ -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">
......@@ -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" />
......@@ -84,19 +85,50 @@
<th>Name</th>
<th>Address</th>
<th>Phone</th>
<th>Total Beds</th>
<th>Available Beds</th>
<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';
......@@ -120,8 +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, 10),
availableBeds: parseInt(document.getElementById('modal-availableBeds').value, 10),
totalBeds: parseInt(document.getElementById('modal-totalBeds').value.trim()),
availableBeds: parseInt(document.getElementById('modal-availableBeds').value.trim())
};
if (!hospitalData.name || !hospitalData.address || !hospitalData.phone ||
......@@ -153,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 => {
......@@ -163,8 +195,6 @@
<td>${hospital.name}</td>
<td>${hospital.address}</td>
<td>${hospital.phone}</td>
<td>${hospital.totalBeds}</td>
<td>${hospital.availableBeds}</td>
<td>
<button class="editButton" data-id="${hospital.id}">Edit</button>
<button class="deleteButton" data-id="${hospital.id}">Delete</button>
......@@ -172,103 +202,85 @@
`;
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('modal-totalBeds').value = hospital.totalBeds;
document.getElementById('modal-availableBeds').value = hospital.availableBeds;
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(),
totalBeds: parseInt(document.getElementById('modal-totalBeds').value, 10),
availableBeds: parseInt(document.getElementById('modal-availableBeds').value, 10),
};
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();
const address = document.getElementById('searchAddress').value.trim();
const filters = {};
if (name) filters.name = name;
if (address) filters.location = address;
loadHospitals(filters);
});
document.getElementById('allButton').addEventListener('click', () => {
loadHospitals();
});
// Add close button event listener
document.getElementById('close-hospital-modal').addEventListener('click', closeHospitalModal);
}
function bindRowEvents() {
document.querySelectorAll('.deleteButton').forEach(button => {
button.addEventListener('click', handleDeleteHospital);
function bindNursingToolbarEvents() {
document.getElementById('searchNurseButton').addEventListener('click', () => {
const name = document.getElementById('searchNurseName').value.trim();
const hospitalId = document.getElementById('searchNurseHospitalId').value.trim();
const filters = {};
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();
}
});
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment