JeecgBoot/jeecg-boot/CLAUDE.md
2026-04-29 17:45:27 +08:00

143 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
> You should always answer questions in Simplified Chinese first, unless the user explicitly requests another language.
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
JeecgBoot 3.9.2 — a Java low-code development platform built on **Spring Boot 3.5.5**, **Java 17** (also supports 21, 24). It runs as a monolithic app by default, with an optional Spring Cloud microservices mode. Uses `jakarta` namespace (not `javax`) throughout.
## Build & Run Commands
```bash
# Full build (tests are skipped by default via surefire config)
mvn clean package
# Build with tests
mvn clean package -DskipTests=false
# Run the standalone application (port 8080, context-path: /jeecg-boot)
cd jeecg-module-system/jeecg-system-start
mvn spring-boot:run
# Build a specific module (with dependencies)
mvn clean package -pl jeecg-boot-base-core -am
# Run a single test class
mvn test -DskipTests=false -pl <module> -Dtest=<TestClassName>
# Build with microservices modules included
mvn clean package -P SpringCloud
# Docker startup
./start-docker-compose.sh # or start-docker-compose.bat on Windows
```
## Module Architecture
```
jeecg-boot-parent (root pom)
├── jeecg-boot-base-core # Core framework: Shiro/JWT auth, MyBatis-Plus config,
│ # common utilities, AOP aspects, base controllers
├── jeecg-module-system # System management (users, roles, permissions, dicts, menus)
│ ├── jeecg-system-api # API interfaces (local-api vs cloud-api for mono/micro switch)
│ │ ├── jeecg-system-local-api # Direct method calls (monolithic)
│ │ └── jeecg-system-cloud-api # Feign clients (microservices)
│ ├── jeecg-system-biz # Business logic, entities, mappers, services
│ └── jeecg-system-start # Main entry point (JeecgSystemApplication), all configs
├── jeecg-boot-module # Business feature modules
│ ├── jeecg-module-demo # Demo/example code
│ ├── jeecg-boot-module-airag # AI/RAG integration
│ ├── jeecg-boot-module-easyoa # Simple OA module
│ ├── jeecg-boot-module-joa-flowable # OA + Flowable workflow
│ ├── jeecg-boot-module-pay # Payment module
│ └── jeecg-boot-module-wps # WPS document integration
└── jeecg-boot-platform # Low-code platform modules
├── jeecg-boot-module-bpm-flowable # BPM workflow engine
├── jeecg-boot-module-airag-flow # AI RAG flow
├── jeecg-boot-module-bigscreen # Big screen/dashboard designer
├── jeecg-boot-module-desform # Form designer
├── jeecg-boot-module-drag # Drag-and-drop report designer
├── jeecg-boot-module-lowapp # Low-code application engine
├── jeecg-boot-module-mindesflow-flowable # Simple flow designer
└── jeecg-boot-module-online # Online code generator & forms
```
Optional microservices modules (activated via `-P SpringCloud`):
- `jeecg-server-cloud/` — Gateway (port 9999), Nacos (8848), cloud service starters, monitoring (9111), XXL-Job (9080), Sentinel (9000)
## Key Technology Stack
| Layer | Technology |
|-------|-----------|
| ORM | MyBatis-Plus 3.5.12 (`BaseMapper<T>`, `ServiceImpl<M,T>`) |
| Auth | Apache Shiro 2.0.5 + JWT 4.5.0, Redis-backed sessions |
| DB Pool | Druid 1.2.24 with dynamic datasource support |
| DB Migration | Flyway (scripts in `jeecg-system-start/src/main/resources/flyway/sql/mysql/`) |
| JSON | FastJSON 2 |
| Excel | AutoPoi (`autopoi-spring-boot-3-starter`) |
| API Docs | Knife4j 4.5.0 (OpenAPI v3, `@Schema` annotations) |
| Scheduled Jobs | Quartz (JDBC store, clustered) |
| File Storage | MinIO / Aliyun OSS / Qiniu (controlled by `jeecg.uploadType` config) |
| Microservices | Spring Cloud 2025.0.0 + Alibaba (Nacos, Gateway, Sentinel) |
## Code Conventions & Patterns
**Package structure:** `org.jeecg.modules.<module-name>.{controller,entity,mapper,mapper.xml,service,service.impl,vo}`
**Naming conventions:**
- Entities: `Sys` prefix for system entities (e.g., `SysUser`, `SysRole`). Use `@TableName`, `@TableId(type = IdType.ASSIGN_ID)`
- Controllers: `<Entity>Controller extends JeecgController<Entity, IService>` — base class provides standard CRUD + Excel import/export
- Services: Interface `I<Entity>Service extends IService<Entity>`, impl `<Entity>ServiceImpl extends ServiceImpl<Mapper, Entity>`
- Mappers: `<Entity>Mapper extends BaseMapper<Entity>`, with XML in `mapper/xml/`
**Common annotations on entities:** `@Data`, `@EqualsAndHashCode(callSuper = false)`, `@Accessors(chain = true)`, `@TableName`
**API response wrapper:** `Result<T>` (from `org.jeecg.common.api.vo.Result`) — use `Result.OK(data)`, `Result.OK(msg, data)`, `Result.error(msg)`. The `result` field holds data, `success`/`code`/`message` hold status.
**Auto query building:** `QueryGenerator.initQueryWrapper(entity, request.getParameterMap())` auto-builds `QueryWrapper` from HTTP request params, supporting fuzzy match, range queries, etc.
**Monolithic ↔ Microservices switch:** The `jeecg-system-api` module has two implementations (`local-api` for direct calls, `cloud-api` for Feign). Switching is done by changing the dependency in the startup module, not by modifying business code.
**代码修改痕迹日志:** 所有新增或修改的代码块必须用 `update-begin` / `update-end` 注释包裹,格式如下:
```java
//update-begin---author:作者 ---date:YYYY-MM-DD for【bug号/需求号】修改说明-----------
// 新增或修改的代码
//update-end---author:作者 ---date:YYYY-MM-DD for【bug号/需求号】修改说明-----------
```
规则:
- `author` 填实际修改人,`date` 填修改日期(格式 `YYYY-MM-DD``for` 填 bug 号或需求号 + 简要说明
- 新增方法:`update-begin` 放在方法声明前,`update-end` 放在方法结束 `}`
- 修改已有方法中的代码:`update-begin` / `update-end` 只包裹被修改的代码段,不包裹整个方法
- 用户未提供 bug 号时,需要主动询问
## Database
**Supported:** MySQL 8.0+ (default), PostgreSQL, Oracle 11g+, SQL Server 2017+, MariaDB, DM8 (达梦), KingBase ES. Database-specific configs are in `application-{dbtype}.yml` profiles.
**Initial setup:** Import `db/jeecgboot-mysql-5.7.sql` for the base schema. Flyway handles incremental migrations (scripts organized by date folders like `202512/`).
**Flyway note:** In dev mode, `spring.main.lazy-initialization=true` is enabled for startup speed, which can interfere with Flyway auto-config. Flyway auto-config is explicitly excluded and managed separately.
## Configuration
Main config files are in `jeecg-module-system/jeecg-system-start/src/main/resources/`:
- `application.yml` — profile selector (active profile set by Maven: dev/test/prod/docker)
- `application-dev.yml` — development config (port 8080, lazy-init enabled)
- Dev environment requires: MySQL, Redis. Optional: MongoDB, RabbitMQ
Key config namespace: `jeecg.*` in YAML controls platform features (upload type, firewall settings, AI config, MinIO, shiro excludes, etc.).
## Docker Services (docker-compose.yml)
MySQL (port 13306), Redis, PostgreSQL+pgvector, MongoDB, and the application container (port 8080).
## Online 低代码模块 (jeecg-boot-module-online)
Online 模块采用**元数据驱动**架构,通过数据库配置表(`onl_cgform_*`)实现运行时 CRUD无需生成代码。配置存在数据库中而非文件系统Claude Code 无法直接读取具体表单配置,需用户提供 JSON 导出或截图。
**完整的配置 Schema、控件类型、默认值语法、增强机制等详见: [online-form-schema.md](online-form-schema.md)**