$ show YunaiV/ruoyi-vue-pro
ruoyi-vue-pro (芋道) is a large-scale, multi-module enterprise rapid development platform built on Spring Boot 2.7, MyBatis-Plus, and Vue 3. It provides a comprehensive backend infrastructure for building business applications such as ERP, CRM, HRM, MES, WMS, OA, BPM (Flowable), IoT, AI, IM, Pay, Mall, and more. The codebase is structured around a reusable framework layer (`yudao-framework`) with many Spring Boot starters for security, data permission, multi-tenancy, WebSocket, Excel, monitoring, and protection (rate limiting, idempotency). Business modules follow a consistent layered pattern (DO → Mapper → Service → Controller → VO) with MapStruct converters. The system supports MySQL, PostgreSQL, Oracle, SQL Server, and Dameng databases, and integrates with Redis, RabbitMQ, Kafka, RocketMQ for messaging. It includes a code generator, a workflow designer, and AI chat/image/mind-map capabilities. The architecture is modular and well-organized, though the sheer number of modules (20+) introduces some duplication and complexity. Overall, it is a mature, actively maintained project with strong adherence to common enterprise patterns.
The LLM identified 6 files worth highlighting for reuse:
Interface for data permission rules that can be plugged into the MyBatis query interceptor. It is a clean abstraction allowing custom rules (e.g., department-based, user-based) to be applied transparently. Highly reusable outside this project.
An annotation-based idempotency enforcement using Redis. Supports multiple key resolvers (default, expression, user). Demonstrates a non-obvious pattern for ensuring API idempotency with minimal developer effort.
Abstract base class for slider-based desensitization (e.g., ID card, phone). Provides a reusable template for specifying prefix/suffix length to keep visible characters. Easily extensible for new types.
A servlet filter that captures API access logs (request/response, duration, user info) without polluting business code. Uses a worker pool for async logging to avoid performance impact. Demonstrates structured logging pattern.
Implements a WebSocket message sender that broadcasts messages via Kafka to all server instances. Enables cross-instance WebSocket communication in a clustered deployment. Decouples message sending from session management.
MyBatis-Plus interceptor that automatically appends tenant ID to SQL queries. Handles isolation at the database layer with minimal code changes. Supports both 'tenant_id' column filtering and separate database schemas.