package org.example.controller; import org.example.entity.HospitalBed; import org.example.service.HospitalBedService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RestController @RequestMapping("/api/beds") public class HospitalBedController { @Autowired private HospitalBedService hospitalBedService; /** * 获取所有床位列表(支持按名称模糊查询和启用状态筛选) * @param code 床位代码(精确匹配) * @param name 床位名称(模糊匹配) * @param belongDept 所属科室(模糊匹配) * @param belongWard 所属病区(模糊匹配) * @param enabled 是否启用 * @return 床位列表 */ @GetMapping public Map getAllBeds(@RequestParam(required = false) String code, @RequestParam(required = false) String name, @RequestParam(required = false) String belongDept, @RequestParam(required = false) String belongWard, @RequestParam(required = false) Boolean enabled) { Map result = new HashMap<>(); try { List allBeds = hospitalBedService.findAll(); // 如果提供了床位代码参数,则进行精确匹配 if (code != null && !code.isEmpty()) { allBeds = allBeds.stream() .filter(bed -> bed.getCode() != null && bed.getCode().equals(code)) .collect(Collectors.toList()); } // 如果提供了名称参数,则进行模糊匹配 if (name != null && !name.isEmpty()) { allBeds = allBeds.stream() .filter(bed -> bed.getName() != null && bed.getName().contains(name)) .collect(Collectors.toList()); } // 如果提供了所属科室参数,则进行模糊匹配 if (belongDept != null && !belongDept.isEmpty()) { allBeds = allBeds.stream() .filter(bed -> bed.getBelongDept() != null && bed.getBelongDept().contains(belongDept)) .collect(Collectors.toList()); } // 如果提供了所属病区参数,则进行模糊匹配 if (belongWard != null && !belongWard.isEmpty()) { allBeds = allBeds.stream() .filter(bed -> bed.getBelongWard() != null && bed.getBelongWard().contains(belongWard)) .collect(Collectors.toList()); } // 如果提供了启用状态参数,则进行筛选 if (enabled != null) { allBeds = allBeds.stream() .filter(bed -> enabled.equals(bed.getEnabled())) .collect(Collectors.toList()); } result.put("success", true); result.put("data", allBeds); } catch (Exception e) { result.put("success", false); result.put("message", "获取床位列表失败: " + e.getMessage()); } return result; } /** * 根据床位代码获取床位信息 * @param code 床位代码 * @return 床位信息 */ @GetMapping("/{code}") public Map getBedByCode(@PathVariable String code) { Map result = new HashMap<>(); try { HospitalBed bed = hospitalBedService.findByCode(code); if (bed != null) { result.put("success", true); result.put("data", bed); } else { result.put("success", false); result.put("message", "未找到该床位信息"); } } catch (Exception e) { result.put("success", false); result.put("message", "获取床位信息失败: " + e.getMessage()); } return result; } /** * 添加新床位 * @param bed 床位信息 * @return 操作结果 */ @PostMapping public Map addBed(@RequestBody HospitalBed bed) { Map result = new HashMap<>(); try { // 检查代码是否已存在 if (hospitalBedService.findByCode(bed.getCode()) != null) { result.put("success", false); result.put("message", "床位代码已存在"); return result; } hospitalBedService.addBed(bed); result.put("success", true); result.put("message", "床位添加成功"); } catch (Exception e) { result.put("success", false); result.put("message", "床位添加失败: " + e.getMessage()); } return result; } /** * 更新床位信息 * @param code 床位代码 * @param bed 床位信息 * @return 操作结果 */ @PutMapping("/{code}") public Map updateBed(@PathVariable String code, @RequestBody HospitalBed bed) { Map result = new HashMap<>(); try { // 检查新代码是否已存在(仅当代码确实改变时) if (!code.equals(bed.getCode())) { boolean exists = hospitalBedService.existsByCodeExcluding(bed.getCode(), code); if (exists) { result.put("success", false); result.put("message", "床位代码已存在"); return result; } } // 更新床位信息 hospitalBedService.updateBed(code, bed); result.put("success", true); result.put("message", "床位更新成功"); } catch (Exception e) { e.printStackTrace(); // 打印异常堆栈以便调试 result.put("success", false); result.put("message", "床位更新失败: " + e.getMessage()); } return result; } /** * 删除床位 * @param code 床位代码 * @return 操作结果 */ @DeleteMapping("/{code}") public Map deleteBed(@PathVariable String code) { Map result = new HashMap<>(); try { hospitalBedService.deleteBed(code); result.put("success", true); result.put("message", "床位删除成功"); } catch (Exception e) { result.put("success", false); result.put("message", "床位删除失败: " + e.getMessage()); } return result; } }