档案管理系统库房管理规定的技术实现与操作全流程

一、管理规定向技术需求的映射

档案库房管理规定的核心在于“八防”要求及出入库控制。作为技术人员,我们需要将这些文字规定转化为代码逻辑。本文将使用 Java Spring Boot + MySQL 技术栈,构建一套符合标准的库房管理系统后端。开发环境需准备:JDK 1.8+、Maven 3.6+、MySQL 8.0+、IDEA 或 VSCode。

我们将重点实现以下三个核心规定的技术落地:

  • 温湿度监控:规定温度 14℃-24℃,湿度 45%-60%,超标需报警。
  • 出入库实名制:规定谁进、谁出、干什么、带走了什么,必须全流程留痕。
  • 库房状态锁定:规定非工作时间或盘点期间,禁止未经授权的入库操作。

二、基础环境搭建与依赖配置

创建 Spring Boot 项目。在 pom.xml 中引入必要的依赖。请直接复制以下配置覆盖你的依赖文件,确保版本一致性,避免兼容性问题:

```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java runtime org.projectlombok lombok true ```

接下来配置数据库连接。在 src/main/resources/application.yml 中填入以下配置。请确保你的本地 MySQL 已经创建了名为 archive_db 的数据库,字符集编码设为 utf8mb4

```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/archive_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: 123456 请修改为你的实际数据库密码 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update 自动更新表结构 show-sql: true 打印SQL语句便于调试 ```

三、数据库表结构设计(DDL)

为了满足管理规定,我们需要设计三张核心表。虽然 JPA 可以自动建表,但为了精准控制字段长度和索引,建议手动执行以下 SQL 脚本进行初始化:

```sql -- 1. 档案库房信息表(存储库房环境阈值) CREATE TABLE `repo_room` ( `id` bigint NOT NULL AUTO_INCREMENT, `room_name` varchar(50) NOT NULL COMMENT '库房名称', `max_temp` int DEFAULT 24 COMMENT '允许最高温度', `min_temp` int DEFAULT 14 COMMENT '允许最低温度', `max_humidity` int DEFAULT 60 COMMENT '允许最高湿度', `min_humidity` int DEFAULT 45 COMMENT '允许最低湿度', `status` tinyint DEFAULT 1 COMMENT '状态:1-正常,0-锁定', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 2. 出入库记录表(落实管理规定中的实名制) CREATE TABLE `access_record` ( `id` bigint NOT NULL AUTO_INCREMENT, `person_name` varchar(20) NOT NULL COMMENT '操作人姓名', `person_id_card` varchar(18) NOT NULL COMMENT '操作人身份证号', `action_type` varchar(10) NOT NULL COMMENT '操作类型:IN-入库,OUT-出库', `box_code` varchar(50) COMMENT '档案盒编号', `access_time` datetime NOT NULL COMMENT '操作时间', `remark` varchar(255) COMMENT '备注/事由', PRIMARY KEY (`id`), KEY `idx_person_id` (`person_id_card`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 3. 环境监控日志表 CREATE TABLE `env_log` ( `id` bigint NOT NULL AUTO_INCREMENT, `room_id` bigint NOT NULL, `temperature` decimal(4,1) NOT NULL, `humidity` decimal(4,1) NOT NULL, `is_normal` tinyint DEFAULT 1 COMMENT '是否正常:1-正常,0-报警', `log_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```

四、核心业务逻辑实现

创建实体类 RepoRoom.java,对应库房表:

```java package com.archive.entity; import lombok.Data; import javax.persistence.; @Data @Entity @Table(name = "repo_room") public class RepoRoom { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String roomName; private Integer maxTemp; private Integer minTemp; private Integer maxHumidity; private Integer minHumidity; @Column(name = "status") private Integer status; // 1: 正常, 0: 锁定 } ```

创建实体类 AccessRecord.java,对应出入库记录表:

```java package com.archive.entity; import lombok.Data; import javax.persistence.; import java.time.LocalDateTime; @Data @Entity @Table(name = "access_record") public class AccessRecord { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String personName; private String personIdCard; private String actionType; // IN, OUT private String boxCode; @Column(name = "access_time") private LocalDateTime accessTime; private String remark; } ```

创建 Service 层 RepoService.java,实现核心的校验逻辑。这里体现了“管理规定”的技术强制力:

```java package com.archive.service; import com.archive.entity.RepoRoom; import com.archive.repository.RepoRoomRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Map; @Service public class RepoService { @Autowired private RepoRoomRepository repoRoomRepository; / 校验环境数据是否符合管理规定 / public Map checkEnvironment(Long roomId, Double temp, Double humidity) { Map result = new HashMap<>(); RepoRoom room = repoRoomRepository.findById(roomId).orElseThrow(() -> new RuntimeException("库房不存在")); boolean isNormal = true; String message = "环境正常"; // 规定:温度必须在 14-24 之间 if (temp < room.getMinTemp() || temp > room.getMaxTemp()) { isNormal = false; message = "报警:温度超出规定范围 [" + room.getMinTemp() + "-" + room.getMaxTemp() + "]"; } // 规定:湿度必须在 45%-60% 之间 if (humidity < room.getMinHumidity() || humidity > room.getMaxHumidity()) { isNormal = false; message = "报警:湿度超出规定范围 [" + room.getMinHumidity() + "-" + room.getMaxHumidity() + "]"; } result.put("isNormal", isNormal); result.put("message", message); return result; } } ```

五、接口层开发与测试

创建 Controller 层 ArchiveController.java,提供对外 API。这里包含环境上报出入库登记两个核心接口:

```java package com.archive.controller; import com.archive.entity.AccessRecord; import com.archive.entity.EnvLog; import com.archive.repository.AccessRecordRepository; import com.archive.repository.EnvLogRepository; import com.archive.repository.RepoRoomRepository; import com.archive.service.RepoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.; import java.time.LocalDateTime; import java.util.Map; @RestController @RequestMapping("/api/archive") public class ArchiveController { @Autowired private RepoService repoService; @Autowired private RepoRoomRepository repoRoomRepository; @Autowired private AccessRecordRepository accessRecordRepository; @Autowired private EnvLogRepository envLogRepository; / 接口1:环境数据上报(模拟传感器定时推送) / @PostMapping("/env/report") public String reportEnv(@RequestParam Long roomId, @RequestParam Double temp, @RequestParam Double humidity) { // 1. 调用Service进行规则校验 Map checkResult = repoService.checkEnvironment(roomId, temp, humidity); // 2. 记录日志 EnvLog log = new EnvLog(); log.setRoomId(roomId); log.setTemperature(temp); log.setHumidity(humidity); log.setLogTime(LocalDateTime.now()); log.setIsNormal((Boolean) checkResult.get("isNormal") ? 1 : 0); envLogRepository.save(log); return (String) checkResult.get("message"); } / 接口2:出入库登记(落实实名制管理) / @PostMapping("/access/register") public String registerAccess(@RequestParam String personName, @RequestParam String idCard, @RequestParam String actionType, @RequestParam(required = false) String boxCode, @RequestParam Long roomId) { // 1. 检查库房状态(规定:锁定状态下禁止入库) var roomOpt = repoRoomRepository.findById(roomId); if (roomOpt.isEmpty()) return "库房不存在"; if (roomOpt.get().getStatus() == 0 && "IN".equals(actionType)) { return "操作失败:当前库房处于盘点锁定状态,禁止入库"; } // 2. 校验身份证号格式(简单正则) if (!idCard.matches("^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$")) { return "操作失败:身份证号格式不合法"; } // 3. 保存记录 AccessRecord record = new AccessRecord(); record.setPersonName(personName); record.setPersonIdCard(idCard); record.setActionType(actionType); record.setBoxCode(boxCode); record.setAccessTime(LocalDateTime.now()); record.setRemark("系统自动登记"); accessRecordRepository.save(record); return "登记成功:" + personName + " 于 " + LocalDateTime.now() + " 执行 " + actionType + " 操作"; } } ```

六、系统启动与验证

档案管理系统库房管理规定的技术实现与操作全流程

所有代码已就绪,现在进行实际操作验证。

步骤1:初始化数据
启动项目前,先在数据库插入一条默认库房记录,以便后续接口调用:

```sql INSERT INTO repo_room (room_name, max_temp, min_temp, max_humidity, min_humidity, status) VALUES ('一号库房', 24, 14, 60, 45, 1); ```

步骤2:启动服务
在 IDE 中运行 ArchiveApplication.javamain 方法。看到控制台输出 Started ArchiveApplication 即表示启动成功。

步骤3:测试环境报警逻辑
打开 Postman 或使用 curl 命令,模拟温度超标情况。我们传入 30度,超过规定的 24度:

```bash curl -X POST "http://localhost:8080/api/archive/env/report?roomId=1&temp=30&humidity=50" ```

预期返回:报警:温度超出规定范围 [14-24]。同时查询数据库 env_log 表,会看到一条 is_normal 为 0 的记录。

步骤4:测试出入库实名制
模拟一个入库操作,身份证号故意写错格式:

```bash curl -X POST "http://localhost:8080/api/archive/access/register?personName=张三&idCard=123&actionType=IN&roomId=1" ```

预期返回:操作失败:身份证号格式不合法

修正身份证号后再次尝试:

```bash curl -X POST "http://localhost:8080/api/archive/access/register?personName=张三&idCard=110101199003077173&actionType=IN&boxCode=A-001&roomId=1" ```

预期返回:登记成功:张三 于 [当前时间] 执行 IN 操作。查询 access_record 表可确认数据已落库。

通过以上步骤,我们不仅实现了档案库房的基本管理功能,更将“温湿度范围控制”、“实名制留痕”、“非工作时间锁定”等抽象的管理规定,转化为了不可绕过的代码逻辑。这就是技术赋能管理的实际落地操作。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统