Add AI business blueprint drafts

This commit is contained in:
王鹏
2026-05-23 12:00:28 +08:00
parent 2c8b74ea8a
commit 37358dc779
18 changed files with 918 additions and 8 deletions

View File

@@ -0,0 +1,147 @@
# Business Blueprint Draft Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Add a safe business blueprint draft flow so AI can return business actions such as borrow and return alongside generated table design.
**Architecture:** Extend the existing `DatabaseDesignResponse` draft contract with `businessActions`, normalize and validate action metadata in the backend, persist it on `front_project`, expose it to the Vue workbench, and pass it into generated project Velocity context. The MVP stores blueprint JSON on the project draft and keeps actual code expansion template-ready rather than hardcoding generated business methods in this pass.
**Tech Stack:** Java 8, Spring Boot, MyBatis, Fastjson2/Jackson, JUnit 4/Mockito, Vue 3, Element Plus, Velocity.
---
## File Structure
- `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/BusinessActionDesign.java`: new DTO for one business action draft.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/BusinessActionEffectDesign.java`: new DTO for normalized effects such as update/insert/status change.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/DatabaseDesignResponse.java`: add `List<BusinessActionDesign> businessActions`.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/FrontProject.java`: add `businessBlueprint`.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenProject.java`: add transient `businessActions`.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiBusinessBlueprintValidator.java`: new validator for action codes, table references, request fields, rule/effect limits, and safe strings.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiGenerateServiceImpl.java`: prompt for business actions, parse aliases, normalize actions, validate blueprint, and persist JSON.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectServiceImpl.java`: save/load blueprint JSON with database draft.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectConverter.java`: copy business actions into `GenProject`.
- `ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java`: expose `businessActions` to project-level templates.
- `ruoyi-generator/src/main/resources/mapper/front/FrontProjectMapper.xml`: map `business_blueprint`.
- `sql/front_workbench.sql` and `sql/db.sql`: add `business_blueprint longtext`.
- `easycode-web/src/views/GenerateView.vue`: show business blueprint draft returned by AI and saved with the database design.
- Backend tests in `AiGenerateServiceImplTest`, `FrontProjectServiceImplTest`, `FrontProjectPreviewServiceImplTest`.
---
### Task 1: Backend Blueprint DTO And Validation
**Files:**
- Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/BusinessActionDesign.java`
- Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/BusinessActionEffectDesign.java`
- Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/dto/DatabaseDesignResponse.java`
- Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/AiBusinessBlueprintValidator.java`
- Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/AiGenerateServiceImplTest.java`
- [ ] **Step 1: Write failing tests**
Add tests asserting AI returns `businessActions`, unsafe action codes are normalized, and actions referencing missing tables are rejected.
- [ ] **Step 2: Run tests and verify RED**
Run: `mvn -pl ruoyi-generator -Dtest=AiGenerateServiceImplTest test`
Expected: compile/test failure because `getBusinessActions()` and validator classes do not exist.
- [ ] **Step 3: Add DTOs and validator**
Add action fields: `code`, `name`, `ownerTable`, `method`, `path`, `transaction`, `requestFields`, `rules`, `effects`.
Add effect fields: `type`, `targetTable`, `targetField`, `value`, `description`.
Validator rules: max 12 actions, code/path safe, owner table exists, request fields exist in any table, effect tables exist, rule/effect text length bounded.
- [ ] **Step 4: Run tests and verify GREEN**
Run: `mvn -pl ruoyi-generator -Dtest=AiGenerateServiceImplTest test`
Expected: PASS.
### Task 2: Persist And Reload Blueprint Draft
**Files:**
- Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/front/FrontProject.java`
- Modify: `ruoyi-generator/src/main/resources/mapper/front/FrontProjectMapper.xml`
- Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectServiceImpl.java`
- Modify: `sql/front_workbench.sql`
- Modify: `sql/db.sql`
- Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/FrontProjectServiceImplTest.java`
- [ ] **Step 1: Write failing tests**
Add tests asserting `saveDatabase()` writes `businessBlueprint` JSON and `getDatabase()` returns `businessActions`.
- [ ] **Step 2: Run tests and verify RED**
Run: `mvn -pl ruoyi-generator -Dtest=FrontProjectServiceImplTest test`
Expected: failure because `businessBlueprint` is not mapped or returned.
- [ ] **Step 3: Implement persistence**
Add `business_blueprint longtext` to front project SQL, map it in MyBatis, add `FrontProject.businessBlueprint`, serialize `request.getBusinessActions()` on save, and deserialize on get.
- [ ] **Step 4: Run tests and verify GREEN**
Run: `mvn -pl ruoyi-generator -Dtest=FrontProjectServiceImplTest test`
Expected: PASS.
### Task 3: Expose Blueprint To Preview Generation
**Files:**
- Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenProject.java`
- Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontProjectConverter.java`
- Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java`
- Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/FrontProjectPreviewServiceImplTest.java`
- [ ] **Step 1: Write failing test**
Add a test that converts a front draft with one business action and asserts `GenProject.businessActions` is passed into the generation service and project Velocity context can read it.
- [ ] **Step 2: Run test and verify RED**
Run: `mvn -pl ruoyi-generator -Dtest=FrontProjectPreviewServiceImplTest test`
Expected: compile/test failure because `GenProject.getBusinessActions()` does not exist.
- [ ] **Step 3: Implement conversion and Velocity context**
Add transient `businessActions` to `GenProject`, copy it in `FrontProjectConverter`, and put `businessActions` plus `hasBusinessActions` into `VelocityUtils.prepareContextProject`.
- [ ] **Step 4: Run test and verify GREEN**
Run: `mvn -pl ruoyi-generator -Dtest=FrontProjectPreviewServiceImplTest test`
Expected: PASS.
### Task 4: Show Blueprint Draft In Workbench
**Files:**
- Modify: `easycode-web/src/views/GenerateView.vue`
- [ ] **Step 1: Add frontend normalization**
Extend `normalizeDatabase()` with `businessActions: Array.isArray(data.businessActions) ? data.businessActions : []`.
- [ ] **Step 2: Add compact UI**
Add a full-width panel under database design that lists action name, method, path, owner table, rules, and effects. Keep it read-only for this MVP.
- [ ] **Step 3: Build frontend**
Run: use the existing Node build command for `easycode-web` if dependencies are available.
Expected: build passes, or dependency/network blocker is reported.
### Task 5: Full Verification
**Files:**
- No new files.
- [ ] **Step 1: Run focused backend tests**
Run: `mvn -pl ruoyi-generator -Dtest=AiGenerateServiceImplTest,FrontProjectServiceImplTest,FrontProjectPreviewServiceImplTest test`
Expected: PASS.
- [ ] **Step 2: Run final status check**
Run: `git status --short`
Expected: only intended files modified.