# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview This is a full-stack banking management system (数字支行辅助管理系统) built on the RuoYi framework v3.8.8. It provides grid-based customer relationship management, customer grouping, visit tracking, and performance statistics for banking institutions. - **Backend**: Spring Boot 2.5.14 + MyBatis + MySQL + Redis + JWT - **Frontend**: Vue 2.6.12 + Element UI 2.15.14 - **Java Version**: 1.8 ## Architecture ### Backend Module Structure The backend is a multi-module Maven project with the following modules: ``` ruoyi/ ├── ruoyi-admin/ # Web entry point, main application (RuoYiApplication) ├── ruoyi-framework/ # Core framework (security, config, interceptors) ├── ruoyi-system/ # System management (users, roles, menus, depts) ├── ruoyi-common/ # Common utilities, annotations, domain classes ├── ruoyi-quartz/ # Scheduled task management ├── ruoyi-generator/ # Code generation tools ├── ibs/ # Main business module: grid customer management (网格营销) └── ibs-group/ # Customer group management module (客户分组) ``` ### Business Domain Structure Each business module (e.g., `ibs`, `ibs-group`) follows this package structure: ``` com.ruoyi./ ├── controller/ # REST controllers (handle HTTP requests) ├── service/ # Business logic layer ├── mapper/ # MyBatis mappers (database access) ├── domain/ │ ├── entity/ # Database entities │ ├── dto/ # Data Transfer Objects (request) │ └── vo/ # View Objects (response) └── handler/ # Custom MyBatis type handlers ``` ### Frontend Structure ``` ruoyi-ui/ ├── src/ │ ├── api/ # API request modules (organized by feature) │ ├── views/ # Page components │ ├── components/ # Reusable components │ ├── store/ # Vuex state management │ ├── router/ # Vue Router configuration │ ├── utils/ # Utility functions │ └── directive/ # Custom Vue directives ``` ## Build and Run Commands ### Backend (Maven) ```bash # Clean build artifacts cd bin && clean.bat # Package the project (creates JAR in ruoyi-admin/target/) cd bin && package.bat # Run the backend server (requires packaged JAR) cd bin && run.bat # Or run directly with Maven from ruoyi-admin/ mvn spring-boot:run # The main class is: com.ruoyi.RuoYiApplication # Default port: 8080 ``` ### Frontend (npm/Vue CLI) ```bash cd ruoyi-ui # Development server (runs on port 80) npm run dev # For older Node.js versions with OpenSSL issues npm run dev_t # Build for production npm run build:prod # Build for staging npm run build:stage # Build for pre-production npm run build:pre # Lint code npm run lint ``` ## Development Configuration ### Application Profiles Backend uses Spring profiles located in `ruoyi-admin/src/main/resources/`: - `application.yml` - Base configuration - `application-dev.yml` - Development environment - `application-uat.yml` - UAT environment - `application-pre.yml` - Pre-production - `application-pro.yml` - Production Active profile is set in `application.yml` (default: `dev`). ### Frontend API Proxy The Vue dev server proxies API requests to `http://localhost:8080`: - Frontend dev server: `http://localhost:80` - API requests: `/dev-api/*` → `http://localhost:8080/*` ## Key Patterns and Conventions ### Backend Code Patterns 1. **Controller-Service-Mapper Layering** - Controllers handle HTTP requests/responses, use `@RestController` - Services contain business logic, use `@Service` - Mappers use MyBatis annotations or XML files in `resources/mapper/` 2. **DTO/VO Pattern** - DTOs (Data Transfer Objects) for incoming requests - VOs (View Objects) for outgoing responses - Entities map directly to database tables 3. **Security & Authentication** - JWT-based authentication via `TokenService` - Role-based access: `head`, `branch`, `outlet`, `manager` - Use `SecurityUtils` for current user context: `SecurityUtils.getUsername()`, `SecurityUtils.getDeptId()`, `SecurityUtils.userRole()` 4. **Pagination** - Uses `PageHelper` for database pagination - Controllers return `TableDataInfo` with `total` and `rows` 5. **Caching** - Uses `RedisCache` for Redis operations - Cache keys often follow pattern: `{module}:{feature}:{key}` ### Frontend Code Patterns 1. **API Modules** - Each feature has a dedicated API file in `src/api/` - Uses `request()` wrapper around axios - API base URL is configured in `src/utils/request.js` 2. **Vuex Store** - Modules in `src/store/modules/`: user, app, permission, settings, tagsView - State persists via `vuex-persistedstate` 3. **Permission Directives** - `v-hasPermi` for button-level permissions - `v-hasRole` for role-based display ## Common Business Concepts - **网格**: Grid-based territory management for customer assignment - **客户经理**: Relationship managers assigned to customers - **客户星级**: Customer rating levels (5星, 4星, 3星, 2星, 1星, 基础, 长尾) - **AUM (Asset Under Management)**: Customer assets, tracked with monthly averages - **PAD走访**: Mobile visit records for customer interactions ## MyBatis Configuration - Mapper XML files: `classpath*:mapper/**/*Mapper.xml` - Type aliases: `com.ruoyi.**.domain` - Custom type handlers: `com.ruoyi.ibs.handler` - Pagination: `pagehelper` with MySQL dialect ## Notes - The project uses Chinese comments and variable names in many places - Scheduled tasks use Quartz via `ruoyi-quartz` module - File upload path configured in `application.yml`: `ruoyi.profile` - Swagger/Knife4j API docs available when running