gugu 1 deň pred
rodič
commit
ec1f628ce9

+ 183 - 0
src/main/java/org/example/controller/HospitalBedController.java

@@ -0,0 +1,183 @@
+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<String, Object> 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<String, Object> result = new HashMap<>();
+        try {
+            List<HospitalBed> 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<String, Object> getBedByCode(@PathVariable String code) {
+        Map<String, Object> 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<String, Object> addBed(@RequestBody HospitalBed bed) {
+        Map<String, Object> 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<String, Object> updateBed(@PathVariable String code, @RequestBody HospitalBed bed) {
+        Map<String, Object> 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<String, Object> deleteBed(@PathVariable String code) {
+        Map<String, Object> 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;
+    }
+}

+ 14 - 0
src/main/java/org/example/controller/HospitalRoomController.java

@@ -98,6 +98,13 @@ public class HospitalRoomController {
     public Map<String, Object> addRoom(@RequestBody HospitalRoom room) {
         Map<String, Object> result = new HashMap<>();
         try {
+            // 检查同一病区下是否已存在相同的病房代码
+            if (hospitalRoomService.existsByCodeAndWard(room.getCode(), room.getBelongWard())) {
+                result.put("success", false);
+                result.put("message", "该病区下已存在相同代码的病房");
+                return result;
+            }
+            
             hospitalRoomService.addRoom(room);
             result.put("success", true);
             result.put("message", "病房添加成功");
@@ -118,6 +125,13 @@ public class HospitalRoomController {
     public Map<String, Object> updateRoom(@PathVariable String code, @RequestBody HospitalRoom room) {
         Map<String, Object> result = new HashMap<>();
         try {
+            // 检查同一病区下是否已存在相同的病房代码(排除自身)
+            if (hospitalRoomService.existsByCodeAndWardExcluding(room.getCode(), room.getBelongWard(), code)) {
+                result.put("success", false);
+                result.put("message", "该病区下已存在相同代码的病房");
+                return result;
+            }
+            
             hospitalRoomService.updateRoom(code, room);
             result.put("success", true);
             result.put("message", "病房更新成功");

+ 162 - 0
src/main/java/org/example/entity/HospitalBed.java

@@ -0,0 +1,162 @@
+package org.example.entity;
+
+public class HospitalBed {
+    private String code;              // 床位代码
+    private String outBed;            // 床位外部代码
+    private String name;              // 床位名称
+    private String type;              // 床位类型(对应数据库bed_type字段)
+    private String belongDept;        // 所属科室
+    private String belongWard;        // 所属病区
+    private String belongRoom;        // 所属病房
+    private String doctor;            // 管床医生
+    private String nurse;             // 管床护士
+    private String used;              // 使用状态
+    private Integer sort;             // 排序号
+    private Boolean enabled;          // 是否启用
+    private String remark;            // 备注
+
+    // Constructors
+    public HospitalBed() {}
+
+    public HospitalBed(String code, String outBed, String name, String type, String belongDept,
+                       String belongWard, String belongRoom, String doctor, String nurse, String used,
+                       Integer sort, Boolean enabled, String remark) {
+        this.code = code;
+        this.outBed = outBed;
+        this.name = name;
+        this.type = type;
+        this.belongDept = belongDept;
+        this.belongWard = belongWard;
+        this.belongRoom = belongRoom;
+        this.doctor = doctor;
+        this.nurse = nurse;
+        this.used = used;
+        this.sort = sort;
+        this.enabled = enabled;
+        this.remark = remark;
+    }
+
+    // Getters and Setters
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getOutBed() {
+        return outBed;
+    }
+
+    public void setOutBed(String outBed) {
+        this.outBed = outBed;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getBelongDept() {
+        return belongDept;
+    }
+
+    public void setBelongDept(String belongDept) {
+        this.belongDept = belongDept;
+    }
+
+    public String getBelongWard() {
+        return belongWard;
+    }
+
+    public void setBelongWard(String belongWard) {
+        this.belongWard = belongWard;
+    }
+
+    public String getBelongRoom() {
+        return belongRoom;
+    }
+
+    public void setBelongRoom(String belongRoom) {
+        this.belongRoom = belongRoom;
+    }
+
+    public String getDoctor() {
+        return doctor;
+    }
+
+    public void setDoctor(String doctor) {
+        this.doctor = doctor;
+    }
+
+    public String getNurse() {
+        return nurse;
+    }
+
+    public void setNurse(String nurse) {
+        this.nurse = nurse;
+    }
+
+    public String getUsed() {
+        return used;
+    }
+
+    public void setUsed(String used) {
+        this.used = used;
+    }
+
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
+    public Boolean getEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(Boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "HospitalBed{" +
+                "code='" + code + '\'' +
+                ", outBed='" + outBed + '\'' +
+                ", name='" + name + '\'' +
+                ", type='" + type + '\'' +
+                ", belongDept='" + belongDept + '\'' +
+                ", belongWard='" + belongWard + '\'' +
+                ", belongRoom='" + belongRoom + '\'' +
+                ", doctor='" + doctor + '\'' +
+                ", nurse='" + nurse + '\'' +
+                ", used='" + used + '\'' +
+                ", sort=" + sort +
+                ", enabled=" + enabled +
+                ", remark='" + remark + '\'' +
+                '}';
+    }
+}

+ 104 - 0
src/main/java/org/example/mapper/HospitalBedMapper.java

@@ -0,0 +1,104 @@
+package org.example.mapper;
+
+import org.apache.ibatis.annotations.*;
+import org.example.entity.HospitalBed;
+
+import java.util.List;
+
+@Mapper
+public interface HospitalBedMapper {
+    
+    /**
+     * 查询所有床位
+     * @return 床位列表
+     */
+    @Select("SELECT code, out_code AS outBed, name, bed_type AS type, belong_dept AS belongDept, belong_ward AS belongWard, belong_room AS belongRoom, doctor, nurse, used, sort, enabled, remark FROM tb_hospital_bed")
+    List<HospitalBed> findAll();
+    
+    /**
+     * 根据床位代码查询床位
+     * @param code 床位代码
+     * @return 床位信息
+     */
+    @Select("SELECT code, out_code AS outBed, name, bed_type AS type, belong_dept AS belongDept, belong_ward AS belongWard, belong_room AS belongRoom, doctor, nurse, used, sort, enabled, remark FROM tb_hospital_bed WHERE code = #{code} LIMIT 1")
+    HospitalBed findByCode(String code);
+    
+    /**
+     * 根据床位名称模糊查询床位列表
+     * @param name 床位名称
+     * @return 床位列表
+     */
+    @Select("SELECT code, out_code AS outBed, name, bed_type AS type, belong_dept AS belongDept, belong_ward AS belongWard, belong_room AS belongRoom, doctor, nurse, used, sort, enabled, remark FROM tb_hospital_bed WHERE name LIKE CONCAT('%', #{name}, '%')")
+    List<HospitalBed> findByNameContaining(String name);
+    
+    /**
+     * 根据所属科室模糊查询床位列表
+     * @param belongDept 所属科室
+     * @return 床位列表
+     */
+    @Select("SELECT code, out_code AS outBed, name, bed_type AS type, belong_dept AS belongDept, belong_ward AS belongWard, belong_room AS belongRoom, doctor, nurse, used, sort, enabled, remark FROM tb_hospital_bed WHERE belong_dept LIKE CONCAT('%', #{belongDept}, '%')")
+    List<HospitalBed> findByBelongDeptContaining(String belongDept);
+    
+    /**
+     * 根据所属病区模糊查询床位列表
+     * @param belongWard 所属病区
+     * @return 床位列表
+     */
+    @Select("SELECT code, out_code AS outBed, name, bed_type AS type, belong_dept AS belongDept, belong_ward AS belongWard, belong_room AS belongRoom, doctor, nurse, used, sort, enabled, remark FROM tb_hospital_bed WHERE belong_ward LIKE CONCAT('%', #{belongWard}, '%')")
+    List<HospitalBed> findByBelongWardContaining(String belongWard);
+    
+    /**
+     * 根据启用状态查询床位列表
+     * @param enabled 是否启用
+     * @return 床位列表
+     */
+    @Select("SELECT code, out_code AS outBed, name, bed_type AS type, belong_dept AS belongDept, belong_ward AS belongWard, belong_room AS belongRoom, doctor, nurse, used, sort, enabled, remark FROM tb_hospital_bed WHERE enabled = #{enabled}")
+    List<HospitalBed> findByEnabled(Boolean enabled);
+    
+    /**
+     * 检查是否存在指定代码的床位(用于唯一性检查)
+     * @param code 床位代码
+     * @param excludeCode 要排除的代码(更新时使用)
+     * @return 床位列表
+     */
+    @Select("SELECT code, out_code AS outBed, name, bed_type AS type, belong_dept AS belongDept, belong_ward AS belongWard, belong_room AS belongRoom, doctor, nurse, used, sort, enabled, remark FROM tb_hospital_bed WHERE code = #{code} AND code != #{excludeCode}")
+    List<HospitalBed> findByCodeExcluding(String code, String excludeCode);
+    
+    /**
+     * 插入新床位
+     * @param bed 床位信息
+     */
+    @Insert("INSERT INTO tb_hospital_bed(code, out_code, name, bed_type, belong_dept, belong_ward, belong_room, doctor, nurse, used, sort, enabled, remark) " +
+            "VALUES(#{code}, #{outBed}, #{name}, #{type}, #{belongDept}, #{belongWard}, #{belongRoom}, #{doctor}, #{nurse}, #{used}, #{sort}, #{enabled}, #{remark})")
+    void insert(HospitalBed bed);
+    
+    /**
+     * 更新床位信息
+     * @param bed 床位信息
+     */
+    @Update({"<script>",
+            "UPDATE tb_hospital_bed",
+            "SET code = #{bed.code}",
+            "<if test='bed.outBed != null'>, out_code = #{bed.outBed}</if>",
+            "<if test='bed.name != null'>, name = #{bed.name}</if>",
+            "<if test='bed.type != null'>, bed_type = #{bed.type}</if>",
+            "<if test='bed.belongDept != null'>, belong_dept = #{bed.belongDept}</if>",
+            "<if test='bed.belongWard != null'>, belong_ward = #{bed.belongWard}</if>",
+            "<if test='bed.belongRoom != null'>, belong_room = #{bed.belongRoom}</if>",
+            "<if test='bed.doctor != null'>, doctor = #{bed.doctor}</if>",
+            "<if test='bed.nurse != null'>, nurse = #{bed.nurse}</if>",
+            "<if test='bed.used != null'>, used = #{bed.used}</if>",
+            "<if test='bed.sort != null'>, sort = #{bed.sort}</if>",
+            "<if test='bed.enabled != null'>, enabled = #{bed.enabled}</if>",
+            "<if test='bed.remark != null'>, remark = #{bed.remark}</if>",
+            "WHERE code = #{originCode}",
+            "</script>"})
+    void update(@Param("bed") HospitalBed bed, @Param("originCode") String originCode);
+    
+    /**
+     * 根据床位代码删除床位
+     * @param code 床位代码
+     */
+    @Delete("DELETE FROM tb_hospital_bed WHERE code = #{code}")
+    void deleteByCode(String code);
+}

+ 19 - 0
src/main/java/org/example/mapper/HospitalRoomMapper.java

@@ -46,6 +46,25 @@ public interface HospitalRoomMapper {
     @Select("SELECT code, out_code AS outCode, name, bed_count AS bedCount, belong_dept AS belongDept, belong_ward AS belongWard, sort, enabled, remark FROM tb_hospital_room WHERE code = #{code} LIMIT 1")
     HospitalRoom findByCode(String code);
     
+    /**
+     * 根据病房代码和所属病区查询病房数量
+     * @param code 病房代码
+     * @param belongWard 所属病区
+     * @return 符合条件的病房数量
+     */
+    @Select("SELECT COUNT(*) FROM tb_hospital_room WHERE code = #{code} AND belong_ward = #{belongWard}")
+    int countByCodeAndWard(@Param("code") String code, @Param("belongWard") String belongWard);
+    
+    /**
+     * 根据病房代码和所属病区查询病房数量(排除指定病房)
+     * @param code 病房代码
+     * @param belongWard 所属病区
+     * @param excludeCode 要排除的病房代码
+     * @return 符合条件的病房数量
+     */
+    @Select("SELECT COUNT(*) FROM tb_hospital_room WHERE code = #{code} AND belong_ward = #{belongWard} AND code != #{excludeCode}")
+    int countByCodeAndWardExcluding(@Param("code") String code, @Param("belongWard") String belongWard, @Param("excludeCode") String excludeCode);
+    
     /**
      * 根据病房代码删除病房
      * @param code 病房代码

+ 104 - 0
src/main/java/org/example/service/HospitalBedService.java

@@ -0,0 +1,104 @@
+package org.example.service;
+
+import org.example.entity.HospitalBed;
+import org.example.mapper.HospitalBedMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class HospitalBedService {
+    
+    @Autowired
+    private HospitalBedMapper hospitalBedMapper;
+    
+    /**
+     * 获取所有床位列表
+     * @return 床位列表
+     */
+    public List<HospitalBed> findAll() {
+        return hospitalBedMapper.findAll();
+    }
+    
+    /**
+     * 根据床位代码获取床位信息
+     * @param code 床位代码
+     * @return 床位信息
+     */
+    public HospitalBed findByCode(String code) {
+        return hospitalBedMapper.findByCode(code);
+    }
+    
+    /**
+     * 检查除了指定代码外,是否还存在其他相同的代码
+     * @param code 床位代码
+     * @param excludeCode 要排除的代码
+     * @return 是否存在
+     */
+    public boolean existsByCodeExcluding(String code, String excludeCode) {
+        List<HospitalBed> beds = hospitalBedMapper.findByCodeExcluding(code, excludeCode);
+        return beds != null && !beds.isEmpty();
+    }
+    
+    /**
+     * 根据床位名称模糊查询床位列表
+     * @param name 床位名称
+     * @return 床位列表
+     */
+    public List<HospitalBed> findByNameContaining(String name) {
+        return hospitalBedMapper.findByNameContaining(name);
+    }
+    
+    /**
+     * 根据所属科室模糊查询床位列表
+     * @param belongDept 所属科室
+     * @return 床位列表
+     */
+    public List<HospitalBed> findByBelongDeptContaining(String belongDept) {
+        return hospitalBedMapper.findByBelongDeptContaining(belongDept);
+    }
+    
+    /**
+     * 根据所属病区模糊查询床位列表
+     * @param belongWard 所属病区
+     * @return 床位列表
+     */
+    public List<HospitalBed> findByBelongWardContaining(String belongWard) {
+        return hospitalBedMapper.findByBelongWardContaining(belongWard);
+    }
+    
+    /**
+     * 根据启用状态查询床位列表
+     * @param enabled 是否启用
+     * @return 床位列表
+     */
+    public List<HospitalBed> findByEnabled(Boolean enabled) {
+        return hospitalBedMapper.findByEnabled(enabled);
+    }
+    
+    /**
+     * 添加新床位
+     * @param bed 床位信息
+     */
+    public void addBed(HospitalBed bed) {
+        hospitalBedMapper.insert(bed);
+    }
+    
+    /**
+     * 更新床位信息
+     * @param originCode 原始床位代码
+     * @param bed 床位信息
+     */
+    public void updateBed(String originCode, HospitalBed bed) {
+        hospitalBedMapper.update(bed, originCode);
+    }
+    
+    /**
+     * 删除床位
+     * @param code 床位代码
+     */
+    public void deleteBed(String code) {
+        hospitalBedMapper.deleteByCode(code);
+    }
+}

+ 21 - 0
src/main/java/org/example/service/HospitalRoomService.java

@@ -42,6 +42,27 @@ public class HospitalRoomService {
         return hospitalRoomMapper.findByCode(code);
     }
     
+    /**
+     * 检查指定病区下是否存在相同的病房代码
+     * @param code 病房代码
+     * @param belongWard 所属病区
+     * @return 是否存在
+     */
+    public boolean existsByCodeAndWard(String code, String belongWard) {
+        return hospitalRoomMapper.countByCodeAndWard(code, belongWard) > 0;
+    }
+    
+    /**
+     * 检查指定病区下是否存在相同的病房代码(排除自身)
+     * @param code 病房代码
+     * @param belongWard 所属病区
+     * @param excludeCode 要排除的病房代码
+     * @return 是否存在
+     */
+    public boolean existsByCodeAndWardExcluding(String code, String belongWard, String excludeCode) {
+        return hospitalRoomMapper.countByCodeAndWardExcluding(code, belongWard, excludeCode) > 0;
+    }
+    
     /**
      * 添加新病房
      * @param room 病房信息

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1576 - 269
src/main/resources/static/home.html


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov