本方案采用前后端分离架构,后端使用Spring Boot 3.x,前端使用Vue 3.x,数据库使用PostgreSQL 14.x。这种组合保证了系统的稳定性、可维护性和扩展性。
开发环境需要安装以下软件,版本必须严格匹配:
创建数据库和基础表结构,执行以下SQL命令:
```sql CREATE DATABASE urban_archive; \c urban_archive; CREATE TABLE archive_category ( id SERIAL PRIMARY KEY, category_code VARCHAR(20) UNIQUE NOT NULL, category_name VARCHAR(100) NOT NULL, parent_id INTEGER REFERENCES archive_category(id), sort_order INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE archive_file ( id SERIAL PRIMARY KEY, file_number VARCHAR(50) UNIQUE NOT NULL, project_name VARCHAR(200) NOT NULL, archive_category_id INTEGER REFERENCES archive_category(id), storage_location VARCHAR(500), file_status VARCHAR(20) DEFAULT 'active', created_by VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ```使用Spring Initializr创建项目,pom.xml关键依赖配置:
```xml在application.yml中配置数据库连接:
```yaml spring: datasource: url: jdbc:postgresql://localhost:5432/urban_archive username: postgres password: your_password driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: update show-sql: true properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect ```创建档案文件实体类:
```java @Entity @Table(name = "archive_file") @Data public class ArchiveFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "file_number", unique = true, nullable = false) private String fileNumber; @Column(name = "project_name", nullable = false) private String projectName; @ManyToOne @JoinColumn(name = "archive_category_id") private ArchiveCategory category; @Column(name = "storage_location") private String storageLocation; @Column(name = "file_status") private String fileStatus = "active"; @Column(name = "created_by") private String createdBy; @Column(name = "created_at") private LocalDateTime createdAt = LocalDateTime.now(); @Column(name = "updated_at") private LocalDateTime updatedAt = LocalDateTime.now(); } ```创建Repository接口:
```java @Repository public interface ArchiveFileRepository extends JpaRepository创建档案管理服务:
```java @Service @Transactional public class ArchiveFileService { @Autowired private ArchiveFileRepository archiveFileRepository; public ArchiveFile createArchiveFile(ArchiveFileDTO dto) { ArchiveFile file = new ArchiveFile(); file.setFileNumber(generateFileNumber()); file.setProjectName(dto.getProjectName()); file.setStorageLocation(dto.getStorageLocation()); file.setCreatedBy(dto.getCreatedBy()); return archiveFileRepository.save(file); } private String generateFileNumber() { String datePart = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String randomPart = String.format("%04d", new Random().nextInt(10000)); return "AR" + datePart + randomPart; } } ```创建REST API控制器:
```java @RestController @RequestMapping("/api/archive-files") public class ArchiveFileController { @Autowired private ArchiveFileService archiveFileService; @PostMapping public ResponseEntity创建Vue项目并安装必要依赖:
```bash npm create vue@latest urban-archive-frontend cd urban-archive-frontend npm install axios element-plus ```创建档案列表组件:
```vue
创建档案录入组件:
```vue创建文件上传控制器:
```java @RestController @RequestMapping("/api/files") public class FileUploadController { @Value("${file.upload-dir}") private String uploadDir; @PostMapping("/upload") public ResponseEntity