Compare commits
13 Commits
dev_1
...
b23820e873
| Author | SHA1 | Date | |
|---|---|---|---|
| b23820e873 | |||
| 7ca532da8f | |||
| 872bc3260c | |||
| b29e7d8634 | |||
| 367a3da5cb | |||
| 555bf95abe | |||
| aa1fdf5e9e | |||
| c920577d45 | |||
| 5d13f7cd01 | |||
| 1437989d5b | |||
| 859d52bf96 | |||
| 1cd87d2695 | |||
| b126b43e2c |
@@ -108,7 +108,11 @@
|
||||
"Skill(mcp-mysql-correct-db)",
|
||||
"Bash(git diff:*)",
|
||||
"Bash(git pull:*)",
|
||||
"Bash(git merge:*)"
|
||||
"Bash(git merge:*)",
|
||||
"mcp__chrome-devtools-mcp__take_snapshot",
|
||||
"mcp__chrome-devtools-mcp__fill",
|
||||
"mcp__chrome-devtools-mcp__click",
|
||||
"mcp__chrome-devtools-mcp__take_screenshot"
|
||||
]
|
||||
},
|
||||
"enabledMcpjsonServers": [
|
||||
|
||||
715
CLAUDE.md
715
CLAUDE.md
@@ -1,327 +1,528 @@
|
||||
# CLAUDE.md
|
||||
## 分析
|
||||
- 在进行需求分析类型的任务时,自动开启深度思考模式,输入 “think more”、“think a lot”、“think harder” 或 “think longer” 触发更深层的思考
|
||||
- 在进行需求分析与分解任务时,按照不同的模块分为不同的文件,创建模块名的文件夹并将对应文件保存在文件夹中,然后对模块的功能文件进行继续分解
|
||||
- 在使用/openspec:proposal时,自动开启深度思考模式,输入 “think more”、“think a lot”、“think harder” 或 “think longer” 触发更深层的思考
|
||||
- 在执行/openspec:apply后,使用code-simplifier 进行代码精简
|
||||
- 在分析生成需求文档时,每次都需要在doc目录下新建文件夹并以需求内容为命名
|
||||
|
||||
## Communication
|
||||
- 永远使用简体中文进行思考和对话
|
||||
|
||||
## Documentation
|
||||
- 编写 .md 文档时,也要用中文
|
||||
- 所有生成的文档都放在项目根目录下的doc文件中。
|
||||
|
||||
## 数据库规范
|
||||
- 新建表时,需要加上项目英文名首字母集合
|
||||
|
||||
|
||||
## Coding
|
||||
### Java Code Style
|
||||
- 新建模块命名方式为项目英文名首字母集合+主要功能
|
||||
- 新的功能代码与若依框架自带的代码分离,新建模块,controller层也要放在新建模块中
|
||||
- 使用 `@Data` 注解保证代码的简洁
|
||||
- 尽量使用 MyBatis Plus 进行 CRUD 操作(版本 3.5.10,Spring Boot 3 适配版)
|
||||
- 服务层中的使用@Resource注释,替代@Autowired
|
||||
- 实体类不继承BaseEntity,单独添加审计字段
|
||||
- 完成后端代码controller层代码生成测试后,在项目文件目录下生成API文档
|
||||
- 接口传参需要使用单独的DTO,不可以与entity混用
|
||||
- 需要单独的VO类,不可以与entity混用
|
||||
- 审计字段通过添加注释的方式实现自动插入
|
||||
- 简单的crud操作通过mybatis plus的方法实现,复杂的操作通过xml中写sql和mapper映射实现
|
||||
- 控制层所有接口需要正确的添加注释,确保在swagger-ui中正确展示。控制层中任何接口发生变动,及时同步到doc中的接口文档中
|
||||
- 控制层分页接口使用mybatis plus page,不要使用若依框架的分页
|
||||
|
||||
|
||||
### 前端代码
|
||||
- 在添加页面和组件后,注意与数据库中菜单表进行联动修改
|
||||
- 前端组件代码需要组件化,复杂的组件需要进行拆分为单独的文件
|
||||
|
||||
|
||||
## 运行
|
||||
- 使用mcp:ccdi_intermediary_blacklist进行数据库相关操作
|
||||
- 不要在命令行中启动后端进行测试
|
||||
- 测试方式为生成可执行的测试脚本
|
||||
- 测试脚本在运行完成后需要保存所有接口输出并生成测试用例报告
|
||||
- /login/test接口可以传入username和password获取token,用于测试验证接口的功能。
|
||||
用于测试的账号:username: admin password admin123
|
||||
- swagger-ui的地址为/swagger-ui/index.html
|
||||
- 在向doc文件夹添加文件时需要分门别类添加,根据
|
||||
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
## 快速参考
|
||||
|
||||
This is a **discipline preliminary check system** built on the **RuoYi (若依) v3.9.1** rapid development framework. It is an enterprise-grade management system using a front-end/back-end separated architecture.
|
||||
**启动项目:**
|
||||
- 后端: `mvn spring-boot:run` 或运行 `ry.bat`
|
||||
- 前端: `cd ruoyi-ui && npm run dev`
|
||||
|
||||
### Technology Stack
|
||||
**访问地址:**
|
||||
- 前端: http://localhost:80
|
||||
- 后端: http://localhost:8080
|
||||
- Swagger: http://localhost:8080/swagger-ui/index.html
|
||||
- Druid 监控: http://localhost:8080/druid/ (ruoyi/123456)
|
||||
|
||||
**Backend:**
|
||||
- Spring Boot 3.5.8
|
||||
- Spring Security + JWT (authentication)
|
||||
- MyBatis 3.0.5 (ORM)
|
||||
- MySQL 8.2.0
|
||||
- Redis (caching)
|
||||
- Quartz 2.5.2 (scheduled tasks)
|
||||
- SpringDoc 2.8.14 (API documentation)
|
||||
- Java 17
|
||||
|
||||
**Frontend:**
|
||||
- Vue 2.6.12
|
||||
- Element UI 2.15.14
|
||||
- Vuex 3.6.0 (state management)
|
||||
- Vue Router 3.4.9
|
||||
- Axios 0.28.1
|
||||
|
||||
## Common Commands
|
||||
|
||||
### Backend (Maven)
|
||||
**测试账号:**
|
||||
- 用户名: `admin`
|
||||
- 密码: `admin123`
|
||||
|
||||
**获取 Token:**
|
||||
```bash
|
||||
# Compile the project
|
||||
mvn clean compile
|
||||
|
||||
# Run the application (development)
|
||||
mvn spring-boot:run
|
||||
|
||||
# Package for deployment
|
||||
mvn clean package
|
||||
|
||||
# Run using startup scripts
|
||||
./ry.bat # Windows
|
||||
./ry.sh start # Linux/Mac
|
||||
POST http://localhost:8080/login/test?username=admin&password=admin123
|
||||
```
|
||||
|
||||
### Frontend (npm)
|
||||
---
|
||||
|
||||
## 项目概述
|
||||
|
||||
**纪检初核系统** - 基于 **若依管理系统 v3.9.1** 构建的企业级前后端分离管理系统,用于员工异常行为风险识别。
|
||||
|
||||
### 技术栈版本
|
||||
|
||||
| 后端技术 | 版本 | 前端技术 | 版本 |
|
||||
|-----------------------------|--------|------------|---------|
|
||||
| Spring Boot | 3.5.8 | Vue.js | 2.6.12 |
|
||||
| Java | 17 | Element UI | 2.15.14 |
|
||||
| MyBatis Spring Boot Starter | 3.0.5 | Vuex | 3.6.0 |
|
||||
| MySQL Connector | 8.2.0 | Vue Router | 3.4.9 |
|
||||
| SpringDoc OpenAPI | 2.8.14 | Axios | 0.28.1 |
|
||||
| EasyExcel | 3.3.4 | ECharts | 5.4.0 |
|
||||
| Quartz | 2.5.2 | Sass | 1.32.13 |
|
||||
|
||||
---
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 后端 (Maven)
|
||||
|
||||
```bash
|
||||
# 编译项目
|
||||
mvn clean compile
|
||||
|
||||
# 运行应用 (开发环境)
|
||||
mvn spring-boot:run
|
||||
|
||||
# 打包部署
|
||||
mvn clean package
|
||||
|
||||
# Windows 启动
|
||||
ry.bat
|
||||
|
||||
# Linux/Mac 启动
|
||||
./ry.sh start
|
||||
```
|
||||
|
||||
### 前端 (npm)
|
||||
|
||||
```bash
|
||||
cd ruoyi-ui
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
# 安装依赖 (推荐使用国内镜像)
|
||||
npm install --registry=https://registry.npmmirror.com
|
||||
|
||||
# Development server (runs on port 80 by default)
|
||||
# 开发服务器 (端口 80)
|
||||
npm run dev
|
||||
|
||||
# Production build
|
||||
# 生产构建
|
||||
npm run build:prod
|
||||
|
||||
# Staging build
|
||||
npm run build:stage
|
||||
|
||||
# Preview production build
|
||||
# 预览生产构建
|
||||
npm run preview
|
||||
```
|
||||
|
||||
### Database Initialization
|
||||
### 数据库初始化
|
||||
|
||||
```bash
|
||||
# Main database schema
|
||||
# 初始化若依框架基础表
|
||||
mysql -u root -p < sql/ry_20250522.sql
|
||||
|
||||
# Quartz scheduler tables
|
||||
# 初始化定时任务表
|
||||
mysql -u root -p < sql/quartz.sql
|
||||
|
||||
# 导入业务表(根据需要执行)
|
||||
mysql -u root -p ccdi < sql/dpc_employee.sql
|
||||
mysql -u root -p ccdi < sql/dpc_intermediary_blacklist.sql
|
||||
# ... 其他业务表脚本
|
||||
```
|
||||
|
||||
## Project Architecture
|
||||
**注意:**
|
||||
- 业务表脚本文件名以 `ccdi_` 或 `dpc_` 开头
|
||||
- 部分脚本包含菜单数据,需要按顺序执行
|
||||
- 数据库需要先创建(数据库名: `ccdi`)
|
||||
|
||||
### Module Structure
|
||||
---
|
||||
|
||||
## 模块架构
|
||||
|
||||
```
|
||||
discipline-prelim-check/
|
||||
├── ruoyi-admin/ # Main application entry point
|
||||
├── ruoyi-framework/ # Core framework (Security, config, filters)
|
||||
├── ruoyi-system/ # System management (Users, Roles, Menus, Depts)
|
||||
├── ruoyi-common/ # Common utilities (annotations, utils, constants)
|
||||
├── ruoyi-quartz/ # Scheduled task management
|
||||
├── ruoyi-generator/ # Code generator (CRUD scaffolding)
|
||||
├── ruoyi-ui/ # Frontend Vue application
|
||||
├── sql/ # Database scripts
|
||||
├── bin/ # Startup scripts
|
||||
└── openspec/ # OpenSpec specification workflow
|
||||
ccdi/
|
||||
├── ruoyi-admin/ # 主应用入口 (Spring Boot 启动类)
|
||||
├── ruoyi-framework/ # 核心框架 (Security, Config, Filters)
|
||||
├── ruoyi-system/ # 系统管理 (Users, Roles, Menus, Depts)
|
||||
├── ruoyi-common/ # 通用工具 (annotations, utils, constants)
|
||||
├── ruoyi-quartz/ # 定时任务
|
||||
├── ruoyi-generator/ # 代码生成器
|
||||
├── ruoyi-info-collection/ # 【核心业务模块】信息采集
|
||||
├── ruoyi-ui/ # 前端 Vue 应用
|
||||
├── sql/ # 数据库脚本
|
||||
├── bin/ # 启动脚本
|
||||
└── doc/ # 项目文档
|
||||
```
|
||||
|
||||
### Backend Architecture: MVC + Modular Design
|
||||
|
||||
The backend follows a standard MVC pattern with modular separation:
|
||||
### 模块依赖关系
|
||||
|
||||
```
|
||||
Controller Layer (ruoyi-admin/web/controller/)
|
||||
├── common/ # Common controllers (captcha, file upload)
|
||||
├── monitor/ # Monitoring controllers (cache, server, logs)
|
||||
├── system/ # System management (users, roles, menus)
|
||||
└── tool/ # Tools (code generator, swagger)
|
||||
|
||||
Service Layer (ruoyi-system/service/)
|
||||
├── ISysUserService.java
|
||||
├── ISysRoleService.java
|
||||
└── ...
|
||||
|
||||
Mapper Layer (ruoyi-system/mapper/)
|
||||
├── SysUserMapper.java
|
||||
├── SysRoleMapper.java
|
||||
└── ...
|
||||
|
||||
Domain Layer (ruoyi-system/domain/)
|
||||
├── SysUser.java # Entity
|
||||
├── vo/ # Value objects
|
||||
└── ...
|
||||
ruoyi-admin (启动模块)
|
||||
├── ruoyi-framework (核心安全配置)
|
||||
├── ruoyi-system (系统核心业务)
|
||||
├── ruoyi-common (共享工具)
|
||||
├── ruoyi-quartz (定时任务)
|
||||
├── ruoyi-generator (代码生成)
|
||||
└── ruoyi-info-collection (信息采集模块)
|
||||
└── 依赖 ruoyi-common
|
||||
```
|
||||
|
||||
### Frontend Architecture: Vue SPA
|
||||
**添加新业务模块:**
|
||||
1. 在根目录 `pom.xml` 的 `<modules>` 中添加新模块
|
||||
2. 在新模块的 `pom.xml` 中添加对 `ruoyi-common` 的依赖
|
||||
3. 在 `ruoyi-admin/pom.xml` 中添加对新模块的依赖
|
||||
4. 在新模块中按照分层规范创建 controller/service/mapper/domain 包
|
||||
|
||||
### ruoyi-info-collection 业务模块 (核心)
|
||||
|
||||
自定义业务模块,包含以下核心功能:
|
||||
|
||||
| 功能 | Controller | 实体类 |
|
||||
|----------|---------------------------------------|-----------------------------|
|
||||
| 员工基础信息 | CcdiBaseStaffController | CcdiBaseStaff |
|
||||
| 中介黑名单 | CcdiIntermediaryController | CcdiBizIntermediary |
|
||||
| 员工家庭关系 | CcdiStaffFmyRelationController | CcdiStaffFmyRelation |
|
||||
| 员工企业关系 | CcdiStaffEnterpriseRelationController | CcdiStaffEnterpriseRelation |
|
||||
| 信贷客户家庭关系 | CcdiCustFmyRelationController | CcdiCustFmyRelation |
|
||||
| 信贷客户企业关系 | CcdiCustEnterpriseRelationController | CcdiCustEnterpriseRelation |
|
||||
| 员工调动记录 | CcdiStaffTransferController | CcdiStaffTransfer |
|
||||
| 员工招聘记录 | CcdiStaffRecruitmentController | CcdiStaffRecruitment |
|
||||
| 采购交易 | CcdiPurchaseTransactionController | CcdiPurchaseTransaction |
|
||||
|
||||
**分层结构:**
|
||||
|
||||
- Controller: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/controller/`
|
||||
- Service: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/service/`
|
||||
- Mapper: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/`
|
||||
- Domain: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/domain/`
|
||||
- dto/: 数据传输对象
|
||||
- vo/: 视图对象
|
||||
- excel/: Excel导入导出实体
|
||||
- XML映射: `ruoyi-info-collection/src/main/resources/mapper/info/collection/`
|
||||
|
||||
---
|
||||
|
||||
## 后端开发规范
|
||||
|
||||
### 通用规范
|
||||
|
||||
- **新模块命名**: 项目英文名首字母集合 + 主要功能 (如 `ruoyi-info-collection`)
|
||||
- **代码分离**: 新功能代码与若依框架自带代码分离,Controller 放在新模块中
|
||||
- **审计字段**: 实体类不继承 BaseEntity,单独添加审计字段,通过注释实现自动插入
|
||||
|
||||
### Java 代码风格
|
||||
|
||||
```java
|
||||
// 使用 @Data 注解
|
||||
@Data
|
||||
public class CcdiBaseStaff {
|
||||
// 审计字段通过注释实现自动插入
|
||||
/** 创建者 */
|
||||
private String createBy;
|
||||
/** 创建时间 */
|
||||
private Date createTime;
|
||||
/** 更新者 */
|
||||
private String updateBy;
|
||||
/** 更新时间 */
|
||||
private Date updateTime;
|
||||
}
|
||||
|
||||
// 服务层使用 @Resource 注入
|
||||
@Resource
|
||||
private ICcdiBaseStaffService baseStaffService;
|
||||
```
|
||||
|
||||
### 分层规范
|
||||
|
||||
- **Controller**: 所有接口添加 Swagger 注释,分页使用 MyBatis Plus Page
|
||||
- **Service**: 简单 CRUD 用 MyBatis Plus 方法,复杂操作在 XML 写 SQL
|
||||
- **DTO/VO**: 接口传参使用独立 DTO,返回使用独立 VO,不与 entity 混用
|
||||
- **Mapper**: 简单操作继承 BaseMapper,复杂操作在 XML 中定义
|
||||
|
||||
### 禁止事项
|
||||
|
||||
- **禁止使用全限定类名**: 必须使用 `import` 语句导入类,不要在代码中使用 `java.util.List` 这样的全限定名
|
||||
- **禁止使用 `extends ServiceImpl<>`**: Service 接口和实现类分离定义
|
||||
- **禁止 Entity 混用**: DTO、VO、Excel 类必须独立,不与 Entity 混用
|
||||
- **禁止缺少 `@Resource`**: Service 注入必须使用 `@Resource` 注解
|
||||
|
||||
### API 响应格式
|
||||
|
||||
```java
|
||||
// 成功
|
||||
AjaxResult.success("操作成功", data);
|
||||
|
||||
// 错误
|
||||
AjaxResult.error("操作失败");
|
||||
|
||||
// 分页
|
||||
Page<CcdiBaseStaff> page = new Page<>(pageNum, pageSize);
|
||||
IPage<CcdiBaseStaff> result = baseStaffMapper.selectPage(page, queryWrapper);
|
||||
return AjaxResult.success(result);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 前端开发规范
|
||||
|
||||
### 目录结构
|
||||
|
||||
```
|
||||
ruoyi-ui/src/
|
||||
├── api/ # API request definitions
|
||||
├── assets/ # Static resources (images, styles)
|
||||
├── components/ # Reusable components
|
||||
├── layout/ # Main layout (Sidebar, Navbar, TagsView)
|
||||
├── router/ # Vue Router configuration
|
||||
├── store/ # Vuex state management
|
||||
├── utils/ # Utility functions
|
||||
├── views/ # Page components organized by feature
|
||||
│ ├── dashboard/
|
||||
│ ├── monitor/
|
||||
│ ├── system/
|
||||
│ └── tool/
|
||||
└── permission.js # Permission directives
|
||||
├── api/ # API 请求定义 (与后端 Controller 对应)
|
||||
├── views/ # 页面组件 (按功能模块组织)
|
||||
│ ├── ccdiBaseStaff/
|
||||
│ ├── ccdiIntermediary/
|
||||
│ └── ...
|
||||
├── components/ # 可复用组件 (复杂组件需拆分)
|
||||
├── router/ # 路由配置
|
||||
└── store/ # Vuex 状态管理
|
||||
```
|
||||
|
||||
### Module Dependencies
|
||||
|
||||
```
|
||||
ruoyi-admin (startup module)
|
||||
↓ depends on
|
||||
ruoyi-framework (core security & config)
|
||||
ruoyi-system (system core business)
|
||||
ruoyi-common (shared utilities)
|
||||
ruoyi-quartz (scheduled tasks)
|
||||
ruoyi-generator (code generation)
|
||||
```
|
||||
|
||||
## Key Development Patterns
|
||||
|
||||
### Code Generation Workflow
|
||||
|
||||
RuoYi provides a powerful code generator for rapid CRUD development:
|
||||
|
||||
1. **Create database table** - Design your table schema
|
||||
2. **Import table** - Use System Tools → Code Generation → Import
|
||||
3. **Configure** - Edit table info, generate info (module, function name, etc.)
|
||||
4. **Generate code** - Download the generated zip
|
||||
5. **Copy files** - Extract to appropriate directories:
|
||||
- Backend: `ruoyi-admin/web/controller/`, service, mapper files
|
||||
- Frontend: `ruoyi-ui/src/views/`, `ruoyi-ui/src/api/`
|
||||
|
||||
### Permission System
|
||||
|
||||
The permission system uses **Role-Menu-Button** hierarchy:
|
||||
|
||||
- **Menus**: Define navigation items and route permissions
|
||||
- **Roles**: Assign menu permissions to roles
|
||||
- **Users**: Assign roles to users
|
||||
- **Data Permissions**: Control data scope (all, custom, department, etc.)
|
||||
|
||||
Permission keys in code use format: `system:user:edit`, `system:user:remove`, etc.
|
||||
|
||||
### API Response Format
|
||||
|
||||
All API responses use `AjaxResult` wrapper:
|
||||
|
||||
```java
|
||||
// Success
|
||||
AjaxResult.success("操作成功", data);
|
||||
|
||||
// Error
|
||||
AjaxResult.error("操作失败");
|
||||
|
||||
// Custom
|
||||
AjaxResult.put("key", value);
|
||||
```
|
||||
|
||||
### Frontend API Calls
|
||||
|
||||
API calls are defined in `ruoyi-ui/src/api/`:
|
||||
### API 调用示例
|
||||
|
||||
```javascript
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listUser(query) {
|
||||
export function listStaff(query) {
|
||||
return request({
|
||||
url: '/system/user/list',
|
||||
url: '/ccdi/baseStaff/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
export function addUser(data) {
|
||||
return request({
|
||||
url: '/system/user',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
### 菜单联动
|
||||
|
||||
添加页面和组件后,需要同步修改数据库中的菜单表 (`sys_menu`)。
|
||||
|
||||
---
|
||||
|
||||
## 特殊功能
|
||||
|
||||
### 异步导入
|
||||
|
||||
支持大数据量异步 Excel 导入,通过 taskId 查询导入状态:
|
||||
|
||||
```java
|
||||
@PostMapping("/import")
|
||||
public AjaxResult asyncImport(@RequestParam("file") MultipartFile file) {
|
||||
String taskId = asyncImportService.startImport(file);
|
||||
return AjaxResult.success("导入任务已启动", taskId);
|
||||
}
|
||||
|
||||
@GetMapping("/import/status/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
return AjaxResult.success(asyncImportService.getStatus(taskId));
|
||||
}
|
||||
```
|
||||
|
||||
## OpenSpec Workflow
|
||||
**导入流程:**
|
||||
1. 前端上传 Excel 文件
|
||||
2. 后端异步处理,返回 taskId
|
||||
3. 前端轮询 `/import/status/{taskId}` 获取导入进度
|
||||
4. 导入完成后,可获取成功/失败数据统计
|
||||
|
||||
This project uses **OpenSpec** for specification-driven development. Always reference `openspec/AGENTS.md` when:
|
||||
**导入结果处理:**
|
||||
- 只返回导入失败的数据(含失败原因)
|
||||
- 成功数据不返回,减少响应体积
|
||||
- 支持批量插入,提高性能
|
||||
|
||||
- Planning or proposing new features
|
||||
- Making breaking changes
|
||||
- Modifying architecture
|
||||
- Handling ambiguous requirements
|
||||
### EasyExcel 字典下拉框
|
||||
|
||||
### Key OpenSpec Commands
|
||||
导入模板支持字典下拉框配置,提升数据录入准确性。使用 `DictDropdownWriteHandler` 实现。
|
||||
|
||||
### 权限控制
|
||||
|
||||
基于 Spring Security + JWT 的角色菜单权限系统:
|
||||
|
||||
- 权限格式: `system:user:edit`, `ccdi:staff:list`
|
||||
- 数据权限: 支持全部、自定义、部门等范围
|
||||
|
||||
---
|
||||
|
||||
## 测试与验证
|
||||
|
||||
### 测试账号
|
||||
|
||||
- **用户名**: `admin`
|
||||
- **密码**: `admin123`
|
||||
|
||||
### 登录获取 Token
|
||||
|
||||
```bash
|
||||
# List active changes
|
||||
openspec list
|
||||
|
||||
# List all specifications
|
||||
openspec list --specs
|
||||
|
||||
# View details
|
||||
openspec show [change-id or spec-id]
|
||||
|
||||
# Validate changes
|
||||
openspec validate [change-id] --strict --no-interactive
|
||||
|
||||
# Archive completed changes
|
||||
openspec archive <change-id>
|
||||
# 登录接口
|
||||
POST /login/test?username=admin&password=admin123
|
||||
```
|
||||
|
||||
### When to Create Proposals
|
||||
### API 文档
|
||||
|
||||
**Create proposal for:**
|
||||
- New features or capabilities
|
||||
- Breaking changes (API, schema)
|
||||
- Architecture changes
|
||||
- Performance optimizations that change behavior
|
||||
- **Swagger UI**: `/swagger-ui/index.html`
|
||||
- **API Docs**: `/v3/api-docs`
|
||||
|
||||
**Skip proposal for:**
|
||||
- Bug fixes (restoring intended behavior)
|
||||
- Typos, formatting, comments
|
||||
- Non-breaking dependency updates
|
||||
- Configuration changes
|
||||
### 测试规范
|
||||
|
||||
## Configuration Notes
|
||||
- 不在命令行启动后端进行测试
|
||||
- 生成可执行的测试脚本进行验证
|
||||
- 测试完成后保存接口输出并生成测试用例报告
|
||||
|
||||
- **Default Admin**: `admin/admin123`
|
||||
- **Backend Port**: 8080
|
||||
- **Frontend Dev Port**: 80
|
||||
- **API Base Path**: Configured in `ruoyi-ui/vue.config.js` proxy
|
||||
- **Database Config**: `ruoyi-admin/src/main/resources/application.yml`
|
||||
### 开发调试技巧
|
||||
|
||||
## Important File Locations
|
||||
**使用 Swagger 测试接口:**
|
||||
1. 访问 `/swagger-ui/index.html`
|
||||
2. 点击接口展开详情
|
||||
3. 点击 "Try it out" 进行测试
|
||||
4. 填写参数后点击 "Execute" 执行
|
||||
|
||||
| Purpose | Location |
|
||||
|---------|----------|
|
||||
| Main application entry | [ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java](ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java) |
|
||||
| Security configuration | [ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java](ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java) |
|
||||
| Database config | [ruoyi-admin/src/main/resources/application.yml](ruoyi-admin/src/main/resources/application.yml) |
|
||||
| MyBatis mappers | [ruoyi-system/src/main/resources/mapper/system/](ruoyi-system/src/main/resources/mapper/system/) |
|
||||
| Vue router | [ruoyi-ui/src/router/index.js](ruoyi-ui/src/router/index.js) |
|
||||
| Vuex store | [ruoyi-ui/src/store/](ruoyi-ui/src/store/) |
|
||||
**查看 SQL 执行日志:**
|
||||
- 在 `application.yml` 中设置日志级别: `com.ruoyi: debug`
|
||||
- 使用 Druid 监控台查看慢 SQL
|
||||
|
||||
**前端代理配置:**
|
||||
前端开发服务器通过代理转发请求到后端:
|
||||
- 前端地址: `http://localhost:80`
|
||||
- 后端地址: `http://localhost:8080`
|
||||
- 代理配置文件: `ruoyi-ui/vue.config.js`
|
||||
|
||||
---
|
||||
|
||||
## 配置说明
|
||||
|
||||
| 配置项 | 值 |
|
||||
|---------|-------------------|
|
||||
| 后端端口 | 8080 |
|
||||
| 前端开发端口 | 80 |
|
||||
| 默认管理员 | admin/admin123 |
|
||||
| JWT 有效期 | 30 分钟 |
|
||||
| 文件上传限制 | 单文件 10MB, 总计 20MB |
|
||||
|
||||
### 配置文件位置
|
||||
|
||||
| 配置 | 路径 |
|
||||
|----------|------------------------------------------------------|
|
||||
| 主配置 | `ruoyi-admin/src/main/resources/application.yml` |
|
||||
| 开发环境 | `ruoyi-admin/src/main/resources/application-dev.yml` |
|
||||
| 数据库连接 | `application-dev.yml` |
|
||||
| Redis 配置 | `application-dev.yml` |
|
||||
|
||||
### 数据源配置
|
||||
|
||||
项目使用 Druid 连接池,支持主从分离(默认关闭从库):
|
||||
|
||||
- **数据库连接**: `jdbc:mysql://host:3306/ccdi`
|
||||
- **初始连接数**: 5
|
||||
- **最小连接数**: 10
|
||||
- **最大连接数**: 20
|
||||
- **慢 SQL 记录**: 超过 1000ms 的 SQL 会被记录
|
||||
|
||||
### Redis 配置
|
||||
|
||||
- **默认端口**: 6379
|
||||
- **数据库索引**: 0
|
||||
- **连接超时**: 10s
|
||||
|
||||
### Druid 监控台
|
||||
|
||||
访问地址: `http://localhost:8080/druid/`
|
||||
- 用户名: `ruoyi`
|
||||
- 密码: `123456`
|
||||
|
||||
用于监控 SQL 执行情况、连接池状态等。
|
||||
|
||||
---
|
||||
|
||||
## 重要文件路径
|
||||
|
||||
| 用途 | 路径 |
|
||||
|---------------|--------------------------------------------------------------------------------|
|
||||
| 应用入口 | `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java` |
|
||||
| 安全配置 | `ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java` |
|
||||
| 业务 Controller | `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/controller/` |
|
||||
| 业务 Mapper XML | `ruoyi-info-collection/src/main/resources/mapper/info/collection/` |
|
||||
| Vue 路由 | `ruoyi-ui/src/router/index.js` |
|
||||
| Vuex Store | `ruoyi-ui/src/store/` |
|
||||
| 前端 API | `ruoyi-ui/src/api/` |
|
||||
|
||||
---
|
||||
|
||||
## 数据库规范
|
||||
|
||||
- **新建表名**: 需要加上项目英文名首字母集合前缀 `ccdi_` (如 `ccdi_base_staff`)
|
||||
|
||||
---
|
||||
|
||||
## 文档管理
|
||||
|
||||
- **文档语言**: 使用简体中文编写 .md 文档
|
||||
- **文档目录**: 所有生成的文档放在 `doc/` 目录下,按类型分类
|
||||
- **需求分析**: 在 `doc/` 目录下新建文件夹,以需求内容命名
|
||||
|
||||
### doc 目录结构
|
||||
|
||||
```
|
||||
doc/
|
||||
├── api-docs/ # API 文档
|
||||
├── database/ # 数据库相关
|
||||
├── design/ # 设计文档
|
||||
├── implementation/ # 实施文档
|
||||
├── requirements/ # 需求文档
|
||||
└── test-scripts/ # 测试脚本
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## OpenSpec 工作流
|
||||
|
||||
项目使用 OpenSpec 进行规范驱动开发,参考 `openspec/AGENTS.md`。
|
||||
|
||||
### 何时创建 Proposal
|
||||
|
||||
**需要创建:**
|
||||
|
||||
- 新功能或能力
|
||||
- 破坏性变更 (API, 数据库结构)
|
||||
- 架构变更
|
||||
- 改变行为的性能优化
|
||||
|
||||
**无需创建:**
|
||||
|
||||
- Bug 修复 (恢复预期行为)
|
||||
- 拼写错误、格式、注释
|
||||
- 非破坏性依赖更新
|
||||
- 配置变更
|
||||
|
||||
---
|
||||
|
||||
## 沟通规范
|
||||
|
||||
- 永远使用简体中文进行思考和对话
|
||||
|
||||
---
|
||||
|
||||
## 常见问题排查
|
||||
|
||||
### 数据库连接失败
|
||||
|
||||
**检查项:**
|
||||
1. 确认 MySQL 服务已启动
|
||||
2. 检查 `application-dev.yml` 中的数据库连接配置
|
||||
3. 确认数据库用户名和密码正确
|
||||
4. 检查数据库是否已创建(数据库名: `ccdi`)
|
||||
|
||||
### Redis 连接失败
|
||||
|
||||
**检查项:**
|
||||
1. 确认 Redis 服务已启动
|
||||
2. 检查 `application-dev.yml` 中的 Redis 配置
|
||||
3. 如果 Redis 不需要密码,将 `password` 配置注释掉
|
||||
|
||||
### 前端无法访问后端接口
|
||||
|
||||
**检查项:**
|
||||
1. 确认后端已启动(端口 8080)
|
||||
2. 检查前端代理配置(`ruoyi-ui/vue.config.js`)
|
||||
3. 确认后端接口路径正确(查看 Controller 的 `@RequestMapping`)
|
||||
|
||||
### 导入功能无响应
|
||||
|
||||
**检查项:**
|
||||
1. 检查文件大小是否超过限制(默认 10MB)
|
||||
2. 查看后端日志是否有异常
|
||||
3. 确认 Excel 模板格式正确
|
||||
4. 检查必填字段是否为空
|
||||
|
||||
---
|
||||
|
||||
## MyBatis Plus 分页使用
|
||||
|
||||
```java
|
||||
// Controller 层
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(QueryDTO queryDTO) {
|
||||
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||
Page<VO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||
Page<VO> result = service.selectPage(page, queryDTO);
|
||||
return getDataTable(result.getRecords(), result.getTotal());
|
||||
}
|
||||
|
||||
// Service 层
|
||||
Page<VO> selectPage(Page<VO> page, QueryDTO queryDTO);
|
||||
|
||||
// Mapper 层 (使用 XML)
|
||||
<select id="selectPage" resultType="VO">
|
||||
SELECT * FROM table_name
|
||||
<where>
|
||||
<if test="queryDTO.name != null">
|
||||
AND name LIKE CONCAT('%', #{queryDTO.name}, '%')
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
```
|
||||
|
||||
59
ccdi-project/pom.xml
Normal file
59
ccdi-project/pom.xml
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>ruoyi</artifactId>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<version>3.9.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ccdi-project</artifactId>
|
||||
|
||||
<description>
|
||||
纪检初核项目业务模块
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- 通用工具-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<!-- spring-doc -->
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.30</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.ruoyi.ccdi.project.controller;
|
||||
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiModelParamService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数配置Controller
|
||||
*/
|
||||
@Tag(name = "模型参数配置")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/modelParam")
|
||||
public class CcdiModelParamController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiModelParamService modelParamService;
|
||||
|
||||
/**
|
||||
* 查询模型列表
|
||||
*/
|
||||
@Operation(summary = "查询模型列表")
|
||||
@GetMapping("/modelList")
|
||||
public AjaxResult listModels(@RequestParam(required = false) Long projectId) {
|
||||
List<ModelListVO> list = modelParamService.selectModelList(projectId);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询模型参数列表
|
||||
*/
|
||||
@Operation(summary = "查询模型参数列表")
|
||||
@GetMapping("/list")
|
||||
public AjaxResult list(@Validated ModelParamQueryDTO queryDTO) {
|
||||
List<ModelParamVO> list = modelParamService.selectParamList(queryDTO);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存模型参数(只更新阈值)
|
||||
*/
|
||||
@Operation(summary = "保存模型参数")
|
||||
@Log(title = "模型参数配置", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/save")
|
||||
public AjaxResult save(@Validated @RequestBody ModelParamSaveDTO saveDTO) {
|
||||
modelParamService.saveParams(saveDTO);
|
||||
return success("保存成功");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.ruoyi.ccdi.project.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 模型参数配置 ccdi_model_param
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_model_param")
|
||||
public class CcdiModelParam {
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/** 项目ID(0表示默认参数) */
|
||||
private Long projectId;
|
||||
|
||||
/** 模型编码 */
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
private String modelName;
|
||||
|
||||
/** 参数编码 */
|
||||
private String paramCode;
|
||||
|
||||
/** 监测项名称 */
|
||||
private String paramName;
|
||||
|
||||
/** 参数描述 */
|
||||
private String paramDesc;
|
||||
|
||||
/** 参数值 */
|
||||
private String paramValue;
|
||||
|
||||
/** 参数单位 */
|
||||
private String paramUnit;
|
||||
|
||||
/** 排序号 */
|
||||
private Integer sortOrder;
|
||||
|
||||
/** 创建者 */
|
||||
private String createBy;
|
||||
|
||||
/** 创建时间 */
|
||||
private Date createTime;
|
||||
|
||||
/** 更新者 */
|
||||
private String updateBy;
|
||||
|
||||
/** 更新时间 */
|
||||
private Date updateTime;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.ruoyi.ccdi.project.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* 模型参数查询DTO
|
||||
*/
|
||||
@Data
|
||||
public class ModelParamQueryDTO {
|
||||
|
||||
/** 项目ID */
|
||||
private Long projectId;
|
||||
|
||||
/** 模型编码 */
|
||||
@NotBlank(message = "模型编码不能为空")
|
||||
private String modelCode;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.ruoyi.ccdi.project.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数保存DTO
|
||||
*/
|
||||
@Data
|
||||
public class ModelParamSaveDTO {
|
||||
|
||||
/** 项目ID */
|
||||
private Long projectId;
|
||||
|
||||
/** 模型编码 */
|
||||
@NotBlank(message = "模型编码不能为空")
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
@NotBlank(message = "模型名称不能为空")
|
||||
private String modelName;
|
||||
|
||||
/** 参数列表 */
|
||||
@NotNull(message = "参数列表不能为空")
|
||||
private List<ParamItem> params;
|
||||
|
||||
@Data
|
||||
public static class ParamItem {
|
||||
|
||||
/** 参数编码 */
|
||||
@NotBlank(message = "参数编码不能为空")
|
||||
private String paramCode;
|
||||
|
||||
/** 监测项名称 */
|
||||
private String paramName;
|
||||
|
||||
/** 参数描述 */
|
||||
private String paramDesc;
|
||||
|
||||
/** 参数值 - 唯一可修改字段 */
|
||||
@NotBlank(message = "参数值不能为空")
|
||||
private String paramValue;
|
||||
|
||||
/** 参数单位 */
|
||||
private String paramUnit;
|
||||
|
||||
/** 排序号 */
|
||||
private Integer sortOrder;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.ruoyi.ccdi.project.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 模型列表VO
|
||||
*/
|
||||
@Data
|
||||
public class ModelListVO {
|
||||
|
||||
/** 模型编码 */
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
private String modelName;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ruoyi.ccdi.project.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 模型参数VO
|
||||
*/
|
||||
@Data
|
||||
public class ModelParamVO {
|
||||
|
||||
/** 主键ID */
|
||||
private Long id;
|
||||
|
||||
/** 模型编码 */
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
private String modelName;
|
||||
|
||||
/** 参数编码 */
|
||||
private String paramCode;
|
||||
|
||||
/** 监测项名称 */
|
||||
private String paramName;
|
||||
|
||||
/** 参数描述 */
|
||||
private String paramDesc;
|
||||
|
||||
/** 参数值 */
|
||||
private String paramValue;
|
||||
|
||||
/** 参数单位 */
|
||||
private String paramUnit;
|
||||
|
||||
/** 排序号 */
|
||||
private Integer sortOrder;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.ruoyi.ccdi.project.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数Mapper
|
||||
*/
|
||||
public interface CcdiModelParamMapper extends BaseMapper<CcdiModelParam> {
|
||||
|
||||
/**
|
||||
* 查询指定项目和模型的参数列表
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @param modelCode 模型编码
|
||||
* @return 参数列表
|
||||
*/
|
||||
List<CcdiModelParam> selectByProjectAndModel(
|
||||
@Param("projectId") Long projectId,
|
||||
@Param("modelCode") String modelCode
|
||||
);
|
||||
|
||||
/**
|
||||
* 查询所有模型列表(去重)
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @return 模型列表
|
||||
*/
|
||||
List<CcdiModelParam> selectDistinctModels(@Param("projectId") Long projectId);
|
||||
|
||||
/**
|
||||
* 批量更新参数值(只更新param_value字段)
|
||||
*
|
||||
* @param list 参数列表
|
||||
* @return 更新数量
|
||||
*/
|
||||
int batchUpdateParamValues(@Param("list") List<CcdiModelParam> list);
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.ruoyi.ccdi.project.service;
|
||||
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数Service
|
||||
*/
|
||||
public interface ICcdiModelParamService {
|
||||
|
||||
/**
|
||||
* 查询模型列表
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @return 模型列表
|
||||
*/
|
||||
List<ModelListVO> selectModelList(Long projectId);
|
||||
|
||||
/**
|
||||
* 查询模型参数列表
|
||||
*
|
||||
* @param queryDTO 查询条件
|
||||
* @return 参数列表
|
||||
*/
|
||||
List<ModelParamVO> selectParamList(ModelParamQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 保存模型参数(只更新阈值)
|
||||
*
|
||||
* @param saveDTO 保存参数
|
||||
*/
|
||||
void saveParams(ModelParamSaveDTO saveDTO);
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
package com.ruoyi.ccdi.project.service.impl;
|
||||
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiModelParamMapper;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiModelParamService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 模型参数Service实现
|
||||
*/
|
||||
@Service
|
||||
public class CcdiModelParamServiceImpl implements ICcdiModelParamService {
|
||||
|
||||
@Resource
|
||||
private CcdiModelParamMapper modelParamMapper;
|
||||
|
||||
@Override
|
||||
public List<ModelListVO> selectModelList(Long projectId) {
|
||||
if (projectId == null) {
|
||||
projectId = 0L; // 默认查询系统级参数
|
||||
}
|
||||
|
||||
List<ModelListVO> result = new ArrayList<>();
|
||||
List<CcdiModelParam> params = modelParamMapper.selectDistinctModels(projectId);
|
||||
|
||||
params.forEach(param -> {
|
||||
ModelListVO vo = new ModelListVO();
|
||||
vo.setModelCode(param.getModelCode());
|
||||
vo.setModelName(param.getModelName());
|
||||
result.add(vo);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ModelParamVO> selectParamList(ModelParamQueryDTO queryDTO) {
|
||||
Long projectId = queryDTO.getProjectId();
|
||||
if (projectId == null) {
|
||||
projectId = 0L;
|
||||
}
|
||||
|
||||
List<CcdiModelParam> params = modelParamMapper.selectByProjectAndModel(
|
||||
projectId,
|
||||
queryDTO.getModelCode()
|
||||
);
|
||||
|
||||
List<ModelParamVO> result = new ArrayList<>();
|
||||
params.forEach(param -> {
|
||||
ModelParamVO vo = new ModelParamVO();
|
||||
BeanUtils.copyProperties(param, vo);
|
||||
result.add(vo);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveParams(ModelParamSaveDTO saveDTO) {
|
||||
Long projectId = saveDTO.getProjectId();
|
||||
if (projectId == null) {
|
||||
projectId = 0L;
|
||||
}
|
||||
|
||||
// 空列表校验
|
||||
if (saveDTO.getParams() == null || saveDTO.getParams().isEmpty()) {
|
||||
throw new ServiceException("参数列表不能为空");
|
||||
}
|
||||
|
||||
String username = SecurityUtils.getUsername();
|
||||
Date now = new Date();
|
||||
|
||||
// 查询现有参数
|
||||
List<CcdiModelParam> existingParams = modelParamMapper.selectByProjectAndModel(
|
||||
projectId,
|
||||
saveDTO.getModelCode()
|
||||
);
|
||||
|
||||
if (existingParams.isEmpty()) {
|
||||
throw new ServiceException("未找到模型参数配置");
|
||||
}
|
||||
|
||||
// 构建Map提升性能
|
||||
Map<String, CcdiModelParam> existingMap = existingParams.stream()
|
||||
.collect(Collectors.toMap(CcdiModelParam::getParamCode, p -> p));
|
||||
|
||||
// 准备更新列表 - 只更新 param_value 字段
|
||||
List<CcdiModelParam> updateList = new ArrayList<>();
|
||||
for (ModelParamSaveDTO.ParamItem item : saveDTO.getParams()) {
|
||||
CcdiModelParam existing = existingMap.get(item.getParamCode());
|
||||
|
||||
if (existing != null) {
|
||||
// ⚠️ 关键:只修改 param_value 字段
|
||||
CcdiModelParam updateParam = new CcdiModelParam();
|
||||
updateParam.setId(existing.getId());
|
||||
updateParam.setParamValue(item.getParamValue()); // 只更新阈值
|
||||
updateParam.setUpdateBy(username);
|
||||
updateParam.setUpdateTime(now);
|
||||
updateList.add(updateParam);
|
||||
}
|
||||
}
|
||||
|
||||
if (!updateList.isEmpty()) {
|
||||
modelParamMapper.batchUpdateParamValues(updateList);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.ccdi.project.mapper.CcdiModelParamMapper">
|
||||
|
||||
<resultMap id="ModelParamResult" type="com.ruoyi.ccdi.project.domain.CcdiModelParam">
|
||||
<id property="id" column="id"/>
|
||||
<result property="projectId" column="project_id"/>
|
||||
<result property="modelCode" column="model_code"/>
|
||||
<result property="modelName" column="model_name"/>
|
||||
<result property="paramCode" column="param_code"/>
|
||||
<result property="paramName" column="param_name"/>
|
||||
<result property="paramDesc" column="param_desc"/>
|
||||
<result property="paramValue" column="param_value"/>
|
||||
<result property="paramUnit" column="param_unit"/>
|
||||
<result property="sortOrder" column="sort_order"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectModelParamVo">
|
||||
select id, project_id, model_code, model_name, param_code, param_name, param_desc,
|
||||
param_value, param_unit, sort_order, create_by, create_time, update_by, update_time, remark
|
||||
from ccdi_model_param
|
||||
</sql>
|
||||
|
||||
<select id="selectByProjectAndModel" resultMap="ModelParamResult">
|
||||
<include refid="selectModelParamVo"/>
|
||||
where project_id = #{projectId} and model_code = #{modelCode}
|
||||
order by sort_order asc
|
||||
</select>
|
||||
|
||||
<select id="selectDistinctModels" resultMap="ModelParamResult">
|
||||
select distinct model_code, model_name
|
||||
from ccdi_model_param
|
||||
where project_id = #{projectId}
|
||||
order by model_code
|
||||
</select>
|
||||
|
||||
<!-- 关键:只更新 param_value 字段,使用 CASE WHEN 批量更新 -->
|
||||
<update id="batchUpdateParamValues">
|
||||
update ccdi_model_param
|
||||
<set>
|
||||
<trim prefix="param_value = case" suffix="end,">
|
||||
<foreach collection="list" item="item">
|
||||
when id = #{item.id} then #{item.paramValue}
|
||||
</foreach>
|
||||
</trim>
|
||||
<trim prefix="update_by = case" suffix="end,">
|
||||
<foreach collection="list" item="item">
|
||||
when id = #{item.id} then #{item.updateBy}
|
||||
</foreach>
|
||||
</trim>
|
||||
update_time = sysdate()
|
||||
</set>
|
||||
where id in
|
||||
<foreach collection="list" item="item" open="(" separator="," close=")">
|
||||
#{item.id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@@ -72,7 +72,7 @@ SHOW INDEX FROM ccdi_base_staff WHERE Key_name = 'idx_id_card';
|
||||
2026-02-11
|
||||
|
||||
### 执行内容
|
||||
修改文件: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java`
|
||||
修改文件: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java`
|
||||
|
||||
添加字段:
|
||||
```java
|
||||
@@ -98,7 +98,7 @@ private String personName;
|
||||
2026-02-11
|
||||
|
||||
### 执行内容
|
||||
修改文件: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
修改文件: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
|
||||
#### 1. 更新ResultMap
|
||||
添加字段映射:
|
||||
@@ -134,7 +134,7 @@ LEFT JOIN ccdi_base_staff bs ON ser.person_id = bs.id_card
|
||||
2026-02-11
|
||||
|
||||
### 执行内容
|
||||
修改文件: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
修改文件: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
|
||||
更新selectRelationById查询:
|
||||
```xml
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
2026-02-09
|
||||
|
||||
## 实现位置
|
||||
- 文件: `D:\ccdi\ccdi\ruoyi-ccdi\src\main\java\com\ruoyi\ccdi\service\impl\CcdiEmployeeImportServiceImpl.java`
|
||||
- 文件: `D:\ccdi\ccdi\ruoyi-info-collection\src\main\java\com\ruoyi\ccdi\service\impl\CcdiEmployeeImportServiceImpl.java`
|
||||
- 方法: `importEmployeeAsync` (第43-126行)
|
||||
|
||||
## 核心功能
|
||||
|
||||
@@ -20,7 +20,7 @@ Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationExceptio
|
||||
|
||||
### 1. 代码修改
|
||||
|
||||
**文件**:[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java)
|
||||
**文件**:[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-info-collection\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java)
|
||||
|
||||
**修改位置**:第 390-394 行
|
||||
|
||||
@@ -44,7 +44,7 @@ intermediary.setIntermediaryType("2");
|
||||
|
||||
### 2. 验证逻辑增强
|
||||
|
||||
**文件**:[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java)
|
||||
**文件**:[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-info-collection\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java)
|
||||
|
||||
**修改位置**:第 484-488 行
|
||||
|
||||
@@ -72,7 +72,7 @@ private void validateEntityIntermediaryData(CcdiIntermediaryEntityExcel excel) {
|
||||
|
||||
### 3. 批量更新 XML 配置优化
|
||||
|
||||
**文件**:[CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml)
|
||||
**文件**:[CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-info-collection\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml)
|
||||
|
||||
**修改位置**:第 125-127 行
|
||||
|
||||
@@ -151,8 +151,8 @@ WHERE intermediary_type = '2' AND certificate_no IS NULL AND corp_credit_code IS
|
||||
|
||||
## 修改文件列表
|
||||
|
||||
1. [CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java) - 服务层实现
|
||||
2. [CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml) - MyBatis 映射文件
|
||||
1. [CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-info-collection\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java) - 服务层实现
|
||||
2. [CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-info-collection\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml) - MyBatis 映射文件
|
||||
3. [test_import_fix.py](d:\discipline-prelim-check\discipline-prelim-check\doc\test-data\test_import_fix.py) - 测试脚本
|
||||
|
||||
## 版本历史
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
## 审查范围
|
||||
- 前端:`ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue`
|
||||
- 后端:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/` 相关文件
|
||||
- 后端:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/` 相关文件
|
||||
|
||||
## 严重问题(必须立即修复)
|
||||
|
||||
|
||||
@@ -360,20 +360,20 @@ VALUES
|
||||
|
||||
| 类型 | 文件路径 |
|
||||
|------|---------|
|
||||
| Controller | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiStaffEnterpriseRelationController.java` |
|
||||
| Service接口 | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffEnterpriseRelationService.java` |
|
||||
| Service实现 | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java` |
|
||||
| ImportService接口 | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffEnterpriseRelationImportService.java` |
|
||||
| ImportService实现 | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationImportServiceImpl.java` |
|
||||
| Mapper接口 | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffEnterpriseRelationMapper.java` |
|
||||
| Mapper XML | `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml` |
|
||||
| Entity | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiStaffEnterpriseRelation.java` |
|
||||
| DTO (Add) | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiStaffEnterpriseRelationAddDTO.java` |
|
||||
| DTO (Edit) | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiStaffEnterpriseRelationEditDTO.java` |
|
||||
| DTO (Query) | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiStaffEnterpriseRelationQueryDTO.java` |
|
||||
| VO | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java` |
|
||||
| Excel | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiStaffEnterpriseRelationExcel.java` |
|
||||
| ImportFailureVO | `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/StaffEnterpriseRelationImportFailureVO.java` |
|
||||
| Controller | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiStaffEnterpriseRelationController.java` |
|
||||
| Service接口 | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffEnterpriseRelationService.java` |
|
||||
| Service实现 | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java` |
|
||||
| ImportService接口 | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffEnterpriseRelationImportService.java` |
|
||||
| ImportService实现 | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationImportServiceImpl.java` |
|
||||
| Mapper接口 | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffEnterpriseRelationMapper.java` |
|
||||
| Mapper XML | `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml` |
|
||||
| Entity | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiStaffEnterpriseRelation.java` |
|
||||
| DTO (Add) | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiStaffEnterpriseRelationAddDTO.java` |
|
||||
| DTO (Edit) | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiStaffEnterpriseRelationEditDTO.java` |
|
||||
| DTO (Query) | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiStaffEnterpriseRelationQueryDTO.java` |
|
||||
| VO | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java` |
|
||||
| Excel | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiStaffEnterpriseRelationExcel.java` |
|
||||
| ImportFailureVO | `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/StaffEnterpriseRelationImportFailureVO.java` |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
### 修复1:后端强制设置默认状态
|
||||
|
||||
**修改文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java`
|
||||
**修改文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java`
|
||||
|
||||
**修改内容:**
|
||||
```java
|
||||
@@ -144,7 +144,7 @@ dicts: ['ccdi_relation_status', 'ccdi_data_source'],
|
||||
|
||||
### 修改文件清单
|
||||
|
||||
1. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java`
|
||||
1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java`
|
||||
2. `ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue`
|
||||
|
||||
### 数据库变更
|
||||
|
||||
@@ -258,7 +258,7 @@ python doc/test-data/intermediary/test_import_performance.py
|
||||
## 相关文件
|
||||
|
||||
### 后端文件
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java:245-488`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java:245-488`
|
||||
|
||||
### 数据库表
|
||||
- `ccdi_biz_intermediary` - 个人中介表
|
||||
|
||||
@@ -482,8 +482,8 @@ handleImportComplete(statusResult) {
|
||||
### 相关文件
|
||||
- **前端组件:** `ruoyi-ui/src/views/ccdiEmployee/index.vue`
|
||||
- **API定义:** `ruoyi-ui/src/api/ccdiEmployee.js`
|
||||
- **后端VO:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- **后端Controller:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
- **后端VO:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- **后端Controller:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
|
||||
### 测试文件
|
||||
- **浏览器测试:** `doc/员工导入状态持久化功能测试.html`
|
||||
|
||||
93
doc/plans/2026-02-24-module-rename-design.md
Normal file
93
doc/plans/2026-02-24-module-rename-design.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# ruoyi-ccdi 模块重命名设计文档
|
||||
|
||||
## 概述
|
||||
|
||||
将 `ruoyi-ccdi` 模块重命名为 `ruoyi-info-collection`,以更清晰地表达"信息采集"功能,同时保持与其他功能模块的命名一致性。
|
||||
|
||||
## 设计决策
|
||||
|
||||
### 方案选择:混合命名(方案 A)
|
||||
|
||||
| 项目 | 当前命名 | 目标命名 |
|
||||
|-----|---------|---------|
|
||||
| Maven 模块 | `ruoyi-ccdi` | `ruoyi-info-collection` |
|
||||
| Java 包名 | `com.ruoyi.ccdi` | `com.ruoyi.info.collection` |
|
||||
| 数据库表 | `ccdi_*` | `ccdi_*` (保持不变) |
|
||||
| API URL | `/ccdi/*` | `/ccdi/*` (保持不变) |
|
||||
| 权限标识 | `ccdi:*:*` | `ccdi:*:*` (保持不变) |
|
||||
| 前端文件 | `ccdi*` | `ccdi*` (保持不变) |
|
||||
|
||||
### 选择理由
|
||||
|
||||
1. **模块名和包名**:更清晰表达"信息采集"功能
|
||||
2. **保留 ccdi 前缀**:在 URL、表名、前端避免破坏性变更
|
||||
3. **数据库不变**:无需迁移数据,降低风险
|
||||
4. **API 不变**:前端调用无需修改
|
||||
|
||||
## 修改清单
|
||||
|
||||
### 1. Maven 模块重命名
|
||||
|
||||
| 文件 | 修改内容 |
|
||||
|-----|---------|
|
||||
| `pom.xml` (根目录) | `<module>ruoyi-ccdi</module>` → `<module>ruoyi-info-collection</module>` |
|
||||
| `pom.xml` (根目录) | `<artifactId>ruoyi-ccdi</artifactId>` → `<artifactId>ruoyi-info-collection</artifactId>` |
|
||||
| `ruoyi-ccdi/pom.xml` | 目录重命名为 `ruoyi-info-collection/`,`<artifactId>` 同步修改 |
|
||||
| `ruoyi-admin/pom.xml` | `<artifactId>ruoyi-ccdi</artifactId>` → `<artifactId>ruoyi-info-collection</artifactId>` |
|
||||
|
||||
### 2. Java 包名重命名
|
||||
|
||||
- **目录结构**:`com/ruoyi/ccdi/` → `com/ruoyi/info/collection/`
|
||||
- **涉及文件**:约 100+ 个 Java 文件
|
||||
- **修改内容**:
|
||||
- 所有 `package com.ruoyi.ccdi` → `package com.ruoyi.info.collection`
|
||||
- 所有 `import com.ruoyi.ccdi.*` → `import com.ruoyi.info.collection.*`
|
||||
|
||||
### 3. MyBatis XML 命名空间
|
||||
|
||||
- **涉及文件**:11 个 Mapper XML 文件
|
||||
- **修改内容**:命名空间从 `com.ruoyi.ccdi.mapper.*` 改为 `com.ruoyi.info.collection.mapper.*`
|
||||
|
||||
### 4. 项目文档修改
|
||||
|
||||
- **涉及文件**:`doc/` 目录下约 135 个文件
|
||||
- **修改内容**:将 `ruoyi-ccdi` 模块引用改为 `ruoyi-info-collection`
|
||||
|
||||
## 不修改的内容
|
||||
|
||||
- 数据库表名 (`ccdi_*`)
|
||||
- 数据库名 (`ccdi`)
|
||||
- API URL 路径 (`/ccdi/*`)
|
||||
- 权限标识 (`ccdi:*:*`)
|
||||
- 前端 API 文件和视图目录
|
||||
- 菜单配置数据
|
||||
|
||||
## 执行步骤
|
||||
|
||||
1. 重命名模块目录 `ruoyi-ccdi/` → `ruoyi-info-collection/`
|
||||
2. 修改 Maven 配置文件
|
||||
3. 批量修改 Java 包名
|
||||
4. 修改 MyBatis XML 命名空间
|
||||
5. 更新项目文档
|
||||
6. 验证编译 `mvn clean compile`
|
||||
|
||||
## 风险评估
|
||||
|
||||
- **风险等级**:中
|
||||
- **主要风险**:包名修改涉及大量文件,可能遗漏
|
||||
- **缓解措施**:
|
||||
- 使用 IDE 的重构功能
|
||||
- 编译验证确保无遗漏
|
||||
- 执行单元测试
|
||||
|
||||
## 验收标准
|
||||
|
||||
1. Maven 编译成功 (`mvn clean compile`)
|
||||
2. 所有 Java 文件包名正确
|
||||
3. MyBatis XML 命名空间正确
|
||||
4. 文档中模块名称已更新
|
||||
|
||||
---
|
||||
|
||||
**设计日期**:2026-02-24
|
||||
**设计状态**:已批准
|
||||
331
doc/plans/2026-02-24-module-rename-impl.md
Normal file
331
doc/plans/2026-02-24-module-rename-impl.md
Normal file
@@ -0,0 +1,331 @@
|
||||
# ruoyi-ccdi 模块重命名实施计划
|
||||
|
||||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||||
|
||||
**Goal:** 将 ruoyi-ccdi 模块重命名为 ruoyi-info-collection,同时将 Java 包名从 com.ruoyi.ccdi 改为 com.ruoyi.info.collection
|
||||
|
||||
**Architecture:** Maven 模块重命名 + Java 包结构重组 + MyBatis XML 命名空间更新。保留数据库表名、API URL、权限标识和前端文件中的 ccdi 前缀不变。
|
||||
|
||||
**Tech Stack:** Maven, Java 17, MyBatis Plus, Spring Boot 3
|
||||
|
||||
---
|
||||
|
||||
## Task 1: 重命名模块目录
|
||||
|
||||
**Files:**
|
||||
- Rename: `ruoyi-ccdi/` → `ruoyi-info-collection/`
|
||||
|
||||
**Step 1: 使用 git mv 重命名目录**
|
||||
|
||||
```bash
|
||||
git mv ruoyi-ccdi ruoyi-info-collection
|
||||
```
|
||||
|
||||
**Step 2: 验证目录已重命名**
|
||||
|
||||
Run: `ls -la | grep ruoyi-info-collection`
|
||||
Expected: 显示 `ruoyi-info-collection` 目录
|
||||
|
||||
---
|
||||
|
||||
## Task 2: 修改根 pom.xml 模块声明
|
||||
|
||||
**Files:**
|
||||
- Modify: `pom.xml`
|
||||
|
||||
**Step 1: 修改 module 声明**
|
||||
|
||||
找到 `<module>ruoyi-ccdi</module>` 并修改为:
|
||||
|
||||
```xml
|
||||
<module>ruoyi-info-collection</module>
|
||||
```
|
||||
|
||||
**Step 2: 修改 dependencyManagement 中的 artifactId**
|
||||
|
||||
找到 ruoyi-ccdi 的依赖声明并修改为:
|
||||
|
||||
```xml
|
||||
<!-- 信息采集模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-info-collection</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
**Step 3: 验证修改**
|
||||
|
||||
Run: `grep -n "ruoyi-info-collection" pom.xml`
|
||||
Expected: 显示 2 处匹配(module 和 dependency)
|
||||
|
||||
---
|
||||
|
||||
## Task 3: 修改 ruoyi-info-collection 模块 pom.xml
|
||||
|
||||
**Files:**
|
||||
- Modify: `ruoyi-info-collection/pom.xml`
|
||||
|
||||
**Step 1: 修改 artifactId 和 description**
|
||||
|
||||
```xml
|
||||
<artifactId>ruoyi-info-collection</artifactId>
|
||||
<description>信息采集模块</description>
|
||||
```
|
||||
|
||||
**Step 2: 验证修改**
|
||||
|
||||
Run: `grep -n "artifactId" ruoyi-info-collection/pom.xml | head -1`
|
||||
Expected: `<artifactId>ruoyi-info-collection</artifactId>`
|
||||
|
||||
---
|
||||
|
||||
## Task 4: 修改 ruoyi-admin 的依赖声明
|
||||
|
||||
**Files:**
|
||||
- Modify: `ruoyi-admin/pom.xml`
|
||||
|
||||
**Step 1: 修改依赖 artifactId**
|
||||
|
||||
找到 ruoyi-ccdi 依赖并修改为:
|
||||
|
||||
```xml
|
||||
<!-- 信息采集模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-info-collection</artifactId>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
**Step 2: 验证修改**
|
||||
|
||||
Run: `grep -n "ruoyi-info-collection" ruoyi-admin/pom.xml`
|
||||
Expected: 显示 1 处匹配
|
||||
|
||||
---
|
||||
|
||||
## Task 5: 创建新的包目录结构
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/`
|
||||
- Create: `ruoyi-info-collection/src/main/resources/mapper/info/collection/`
|
||||
|
||||
**Step 1: 创建 Java 包目录**
|
||||
|
||||
```bash
|
||||
mkdir -p ruoyi-info-collection/src/main/java/com/ruoyi/info/collection
|
||||
```
|
||||
|
||||
**Step 2: 创建 MyBatis mapper 目录**
|
||||
|
||||
```bash
|
||||
mkdir -p ruoyi-info-collection/src/main/resources/mapper/info/collection
|
||||
```
|
||||
|
||||
**Step 3: 验证目录创建**
|
||||
|
||||
Run: `ls -la ruoyi-info-collection/src/main/java/com/ruoyi/info/`
|
||||
Expected: 显示 `collection` 目录
|
||||
|
||||
---
|
||||
|
||||
## Task 6: 移动 Java 源码到新包结构
|
||||
|
||||
**Files:**
|
||||
- Move: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/*` → `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/`
|
||||
|
||||
**Step 1: 移动所有子目录**
|
||||
|
||||
```bash
|
||||
cd ruoyi-info-collection/src/main/java/com/ruoyi
|
||||
mv ccdi/* info/collection/
|
||||
```
|
||||
|
||||
**Step 2: 删除旧目录**
|
||||
|
||||
```bash
|
||||
rm -rf ccdi
|
||||
```
|
||||
|
||||
**Step 3: 验证新结构**
|
||||
|
||||
Run: `ls ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/`
|
||||
Expected: 显示 controller, domain, enums, mapper, service, utils 等目录
|
||||
|
||||
---
|
||||
|
||||
## Task 7: 批量修改 Java 文件包名声明
|
||||
|
||||
**Files:**
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/info/collection/**/*.java` (约 100+ 文件)
|
||||
|
||||
**Step 1: 批量替换 package 声明**
|
||||
|
||||
```bash
|
||||
find ruoyi-info-collection/src/main/java -name "*.java" -exec sed -i 's/package com\.ruoyi\.ccdi/package com.ruoyi.info.collection/g' {} +
|
||||
```
|
||||
|
||||
**Step 2: 批量替换 import 语句**
|
||||
|
||||
```bash
|
||||
find ruoyi-info-collection/src/main/java -name "*.java" -exec sed -i 's/import com\.ruoyi\.ccdi/import com.ruoyi.info.collection/g' {} +
|
||||
```
|
||||
|
||||
**Step 3: 验证包名修改**
|
||||
|
||||
Run: `grep -r "package com.ruoyi.ccdi" ruoyi-info-collection/src/main/java/`
|
||||
Expected: 无输出(所有旧的包名已替换)
|
||||
|
||||
---
|
||||
|
||||
## Task 8: 移动 MyBatis XML 文件
|
||||
|
||||
**Files:**
|
||||
- Move: `ruoyi-info-collection/src/main/resources/mapper/ccdi/*` → `ruoyi-info-collection/src/main/resources/mapper/info/collection/`
|
||||
|
||||
**Step 1: 移动 XML 文件**
|
||||
|
||||
```bash
|
||||
cd ruoyi-info-collection/src/main/resources/mapper
|
||||
mkdir -p info/collection
|
||||
mv ccdi/* info/collection/
|
||||
rm -rf ccdi
|
||||
```
|
||||
|
||||
**Step 2: 验证文件移动**
|
||||
|
||||
Run: `ls ruoyi-info-collection/src/main/resources/mapper/info/collection/`
|
||||
Expected: 显示 11 个 XML 文件
|
||||
|
||||
---
|
||||
|
||||
## Task 9: 修改 MyBatis XML 命名空间
|
||||
|
||||
**Files:**
|
||||
- Modify: `ruoyi-info-collection/src/main/resources/mapper/info/collection/*.xml` (11 文件)
|
||||
|
||||
**Step 1: 批量替换命名空间**
|
||||
|
||||
```bash
|
||||
find ruoyi-info-collection/src/main/resources/mapper -name "*.xml" -exec sed -i 's/com\.ruoyi\.ccdi/com.ruoyi.info.collection/g' {} +
|
||||
```
|
||||
|
||||
**Step 2: 验证命名空间修改**
|
||||
|
||||
Run: `grep -r "com.ruoyi.ccdi" ruoyi-info-collection/src/main/resources/mapper/`
|
||||
Expected: 无输出(所有旧的命名空间已替换)
|
||||
|
||||
---
|
||||
|
||||
## Task 10: 更新 CLAUDE.md 项目文档
|
||||
|
||||
**Files:**
|
||||
- Modify: `CLAUDE.md`
|
||||
|
||||
**Step 1: 更新模块架构描述**
|
||||
|
||||
将所有 `ruoyi-ccdi` 引用改为 `ruoyi-info-collection`,包括:
|
||||
- 模块架构图
|
||||
- 模块依赖关系
|
||||
- ruoyi-ccdi 业务模块描述
|
||||
- 重要文件路径
|
||||
|
||||
**Step 2: 验证修改**
|
||||
|
||||
Run: `grep "ruoyi-ccdi" CLAUDE.md`
|
||||
Expected: 无输出(所有引用已更新)
|
||||
|
||||
---
|
||||
|
||||
## Task 11: 更新 doc 目录下的文档
|
||||
|
||||
**Files:**
|
||||
- Modify: `doc/**/*.md` (约 135 文件)
|
||||
|
||||
**Step 1: 批量替换模块名引用**
|
||||
|
||||
```bash
|
||||
find doc -name "*.md" -exec sed -i 's/ruoyi-ccdi/ruoyi-info-collection/g' {} +
|
||||
```
|
||||
|
||||
**Step 2: 验证修改**
|
||||
|
||||
Run: `grep -r "ruoyi-ccdi" doc/`
|
||||
Expected: 仅在设计文档中保留历史记录
|
||||
|
||||
---
|
||||
|
||||
## Task 12: 验证 Maven 编译
|
||||
|
||||
**Files:**
|
||||
- None (验证步骤)
|
||||
|
||||
**Step 1: 清理并编译**
|
||||
|
||||
```bash
|
||||
mvn clean compile
|
||||
```
|
||||
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 2: 如果编译失败,检查错误**
|
||||
|
||||
常见的编译错误:
|
||||
- 遗漏的 import 语句
|
||||
- 遗漏的包名声明
|
||||
- MyBatis XML 命名空间不匹配
|
||||
|
||||
---
|
||||
|
||||
## Task 13: 提交更改
|
||||
|
||||
**Files:**
|
||||
- None (Git 操作)
|
||||
|
||||
**Step 1: 查看更改**
|
||||
|
||||
```bash
|
||||
git status
|
||||
git diff --stat
|
||||
```
|
||||
|
||||
**Step 2: 添加所有更改**
|
||||
|
||||
```bash
|
||||
git add -A
|
||||
```
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git commit -m "$(cat <<'EOF'
|
||||
refactor: 重命名 ruoyi-ccdi 模块为 ruoyi-info-collection
|
||||
|
||||
- Maven 模块从 ruoyi-ccdi 重命名为 ruoyi-info-collection
|
||||
- Java 包名从 com.ruoyi.ccdi 改为 com.ruoyi.info.collection
|
||||
- MyBatis XML 命名空间同步更新
|
||||
- 保留数据库表名、API URL、权限标识中的 ccdi 前缀
|
||||
- 更新项目文档中的模块引用
|
||||
EOF
|
||||
)"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 验收清单
|
||||
|
||||
- [ ] 模块目录已重命名为 `ruoyi-info-collection`
|
||||
- [ ] 所有 pom.xml 中的 artifactId 已更新
|
||||
- [ ] Java 包结构已重组为 `com.ruoyi.info.collection`
|
||||
- [ ] 所有 Java 文件的 package 声明已更新
|
||||
- [ ] 所有 Java 文件的 import 语句已更新
|
||||
- [ ] MyBatis XML 文件已移动到新目录
|
||||
- [ ] MyBatis XML 命名空间已更新
|
||||
- [ ] 项目文档已更新
|
||||
- [ ] Maven 编译成功
|
||||
- [ ] 更改已提交到 Git
|
||||
|
||||
---
|
||||
|
||||
**计划日期**: 2026-02-24
|
||||
**预计任务数**: 13
|
||||
@@ -80,7 +80,7 @@ CREATE TABLE `ccdi_staff_recruitment` (
|
||||
### 3.1 模块结构
|
||||
|
||||
```
|
||||
ruoyi-ccdi/
|
||||
ruoyi-info-collection/
|
||||
├── domain/
|
||||
│ ├── CcdiStaffRecruitment.java # 实体类
|
||||
│ ├── dto/
|
||||
|
||||
@@ -391,5 +391,5 @@ Element UI 的 MessageBox 组件有较高的CSS优先级,必须使用 `!import
|
||||
### 8.2 相关文件
|
||||
|
||||
- 前端组件: `ruoyi-ui/src/views/ccdiEmployee/index.vue`
|
||||
- 后端服务: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- 后端服务: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- API文档: `doc/api/ccdiEmployee.md`
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
## Task 1: 创建个人中介Entity实体类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java`
|
||||
|
||||
**Step 1: 创建CcdiBizIntermediary实体类**
|
||||
|
||||
@@ -116,7 +116,7 @@ public class CcdiBizIntermediary implements Serializable {
|
||||
**Step 2: 提交代码**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java
|
||||
git commit -m "feat: 添加个人中介实体类CcdiBizIntermediary"
|
||||
```
|
||||
|
||||
@@ -125,7 +125,7 @@ git commit -m "feat: 添加个人中介实体类CcdiBizIntermediary"
|
||||
## Task 2: 创建实体中介Entity实体类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java`
|
||||
|
||||
**Step 1: 创建CcdiEnterpriseBaseInfo实体类**
|
||||
|
||||
@@ -234,7 +234,7 @@ public class CcdiEnterpriseBaseInfo implements Serializable {
|
||||
**Step 2: 提交代码**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java
|
||||
git commit -m "feat: 添加实体中介实体类CcdiEnterpriseBaseInfo"
|
||||
```
|
||||
|
||||
@@ -243,8 +243,8 @@ git commit -m "feat: 添加实体中介实体类CcdiEnterpriseBaseInfo"
|
||||
## Task 3: 创建个人中介DTO
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java`
|
||||
|
||||
**Step 1: 创建个人中介新增DTO**
|
||||
|
||||
@@ -465,8 +465,8 @@ public class CcdiIntermediaryPersonEditDTO implements Serializable {
|
||||
**Step 3: 提交代码**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java
|
||||
git commit -m "feat: 添加个人中介DTO类"
|
||||
```
|
||||
|
||||
@@ -475,8 +475,8 @@ git commit -m "feat: 添加个人中介DTO类"
|
||||
## Task 4: 创建实体中介DTO
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java`
|
||||
|
||||
**Step 1: 创建实体中介新增DTO**
|
||||
|
||||
@@ -709,8 +709,8 @@ public class CcdiIntermediaryEntityEditDTO implements Serializable {
|
||||
**Step 3: 提交代码**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java
|
||||
git commit -m "feat: 添加实体中介DTO类"
|
||||
```
|
||||
|
||||
@@ -719,10 +719,10 @@ git commit -m "feat: 添加实体中介DTO类"
|
||||
## Task 5: 创建查询DTO和统一VO
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryVO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryVO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java`
|
||||
|
||||
**Step 1: 创建查询DTO**
|
||||
|
||||
@@ -999,10 +999,10 @@ public class CcdiIntermediaryEntityDetailVO implements Serializable {
|
||||
**Step 5: 提交代码**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryVO.java
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryVO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java
|
||||
git commit -m "feat: 添加中介查询DTO和VO类"
|
||||
```
|
||||
|
||||
@@ -1011,9 +1011,9 @@ git commit -m "feat: 添加中介查询DTO和VO类"
|
||||
## Task 6: 创建Mapper接口
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
- Create: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
- Create: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml`
|
||||
|
||||
**Step 1: 创建个人中介Mapper接口**
|
||||
|
||||
@@ -1121,9 +1121,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
**Step 4: 提交代码**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml
|
||||
git commit -m "feat: 添加中介Mapper接口和XML映射"
|
||||
```
|
||||
|
||||
@@ -1132,8 +1132,8 @@ git commit -m "feat: 添加中介Mapper接口和XML映射"
|
||||
## Task 7: 创建Service接口和实现类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryService.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryService.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
|
||||
**Step 1: 创建Service接口**
|
||||
|
||||
@@ -1316,7 +1316,7 @@ public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
|
||||
**Step 3: 提交Service框架**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/
|
||||
git commit -m "feat: 添加中介Service接口和实现类框架"
|
||||
```
|
||||
|
||||
@@ -1325,8 +1325,8 @@ git commit -m "feat: 添加中介Service接口和实现类框架"
|
||||
## Task 8: 创建Excel导入导出类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryPersonExcel.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryEntityExcel.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryPersonExcel.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryEntityExcel.java`
|
||||
|
||||
**Step 1: 创建个人中介Excel类**
|
||||
|
||||
@@ -1518,7 +1518,7 @@ public class CcdiIntermediaryEntityExcel implements Serializable {
|
||||
**Step 3: 提交Excel类**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/
|
||||
git commit -m "feat: 添加中介Excel导入导出类"
|
||||
```
|
||||
|
||||
@@ -1527,7 +1527,7 @@ git commit -m "feat: 添加中介Excel导入导出类"
|
||||
## Task 9: 创建Controller控制器
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 创建CcdiIntermediaryController**
|
||||
|
||||
@@ -1723,7 +1723,7 @@ public class CcdiIntermediaryController extends BaseController {
|
||||
**Step 2: 提交Controller**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: 添加中介黑名单Controller"
|
||||
```
|
||||
|
||||
@@ -1732,7 +1732,7 @@ git commit -m "feat: 添加中介黑名单Controller"
|
||||
## Task 10: 补充Service实现类的完整代码
|
||||
|
||||
**Files:**
|
||||
- Complete: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
- Complete: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
|
||||
完整的Service实现需要包含所有业务逻辑方法,包括:
|
||||
- UNION联合查询的分页实现
|
||||
@@ -1745,7 +1745,7 @@ git commit -m "feat: 添加中介黑名单Controller"
|
||||
**Step 1: 提交完整的Service实现**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
git commit -m "feat: 完善中介Service实现类"
|
||||
```
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
### 2.1 修复实体类字段映射
|
||||
|
||||
**文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java`
|
||||
**文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java`
|
||||
|
||||
**修改内容:**
|
||||
1. 删除了不存在的 `relationTypeField` 字段(第70行)
|
||||
@@ -31,7 +31,7 @@ private String dataSource;
|
||||
|
||||
### 2.2 创建联合查询Mapper接口
|
||||
|
||||
**新增文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java`
|
||||
**新增文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java`
|
||||
|
||||
**功能:**
|
||||
- 定义联合查询方法 `selectIntermediaryList()`
|
||||
@@ -40,7 +40,7 @@ private String dataSource;
|
||||
|
||||
### 2.3 创建MyBatis XML Mapper
|
||||
|
||||
**新增文件:** `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml`
|
||||
**新增文件:** `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml`
|
||||
|
||||
**SQL设计策略:**
|
||||
|
||||
@@ -69,7 +69,7 @@ private String dataSource;
|
||||
|
||||
### 2.4 优化Service层实现
|
||||
|
||||
**文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
**文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
|
||||
**修改内容:**
|
||||
|
||||
@@ -84,7 +84,7 @@ private String dataSource;
|
||||
|
||||
### 2.5 扩展查询DTO
|
||||
|
||||
**文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java`
|
||||
**文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java`
|
||||
|
||||
**新增字段:**
|
||||
```java
|
||||
@@ -144,17 +144,17 @@ OFFSET #{pageNum} * #{pageSize}
|
||||
## 五、文件清单
|
||||
|
||||
### 修改的文件
|
||||
1. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java` - 删除冗余字段,修复字段映射
|
||||
2. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java` - 重构查询逻辑
|
||||
3. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java` - 添加分页参数
|
||||
1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java` - 删除冗余字段,修复字段映射
|
||||
2. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java` - 重构查询逻辑
|
||||
3. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java` - 添加分页参数
|
||||
|
||||
### 新增的文件
|
||||
1. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java` - 联合查询Mapper接口
|
||||
2. `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml` - MyBatis XML Mapper
|
||||
1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java` - 联合查询Mapper接口
|
||||
2. `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml` - MyBatis XML Mapper
|
||||
3. `doc/test/scripts/test_union_query.sh` - 测试脚本
|
||||
|
||||
### 删除的文件
|
||||
1. `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml` - 旧的错误配置
|
||||
1. `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml` - 旧的错误配置
|
||||
|
||||
## 六、优势总结
|
||||
|
||||
@@ -204,7 +204,7 @@ chmod +x test_union_query.sh
|
||||
|
||||
如果新实现出现问题,可以通过Git回滚到之前的版本:
|
||||
```bash
|
||||
git checkout HEAD~1 -- ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
git checkout HEAD~1 -- ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
```
|
||||
|
||||
删除新增的Mapper文件即可恢复原状。
|
||||
|
||||
@@ -48,7 +48,7 @@ Page<CcdiEmployeeVO> selectEmployeePageWithDept(@Param("page") Page<CcdiEmployee
|
||||
### 3.2 核心改动
|
||||
|
||||
#### 1. Mapper接口方法签名
|
||||
**文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java`
|
||||
**文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java`
|
||||
|
||||
**修改前:**
|
||||
```java
|
||||
@@ -71,7 +71,7 @@ Page<CcdiIntermediaryVO> selectIntermediaryList(
|
||||
- 删除了单独的count查询方法
|
||||
|
||||
#### 2. XML Mapper文件
|
||||
**文件:** `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml`
|
||||
**文件:** `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml`
|
||||
|
||||
**修改前(v2.0):**
|
||||
```xml
|
||||
@@ -125,7 +125,7 @@ Page<CcdiIntermediaryVO> selectIntermediaryList(
|
||||
- MyBatis Plus分页插件会自动在ORDER BY后面注入分页SQL
|
||||
|
||||
#### 3. Service层实现
|
||||
**文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
**文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
|
||||
**修改前(v2.0):**
|
||||
```java
|
||||
@@ -162,7 +162,7 @@ public Page<CcdiIntermediaryVO> selectIntermediaryPage(Page<CcdiIntermediaryVO>
|
||||
- 无需手动计算分页参数
|
||||
|
||||
#### 4. QueryDTO清理
|
||||
**文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java`
|
||||
**文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java`
|
||||
|
||||
**删除字段:**
|
||||
```java
|
||||
@@ -237,11 +237,11 @@ mapper.selectList(page, queryDTO);
|
||||
## 五、文件清单
|
||||
|
||||
### 修改的文件
|
||||
1. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java` - 删除冗余字段,修复字段映射
|
||||
2. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java` - 删除分页参数
|
||||
3. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java` - 修改方法签名
|
||||
4. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java` - 简化分页逻辑
|
||||
5. `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml` - 重写SQL结构
|
||||
1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java` - 删除冗余字段,修复字段映射
|
||||
2. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java` - 删除分页参数
|
||||
3. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryMapper.java` - 修改方法签名
|
||||
4. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java` - 简化分页逻辑
|
||||
5. `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml` - 重写SQL结构
|
||||
|
||||
### 新增的文件
|
||||
1. `doc/test/scripts/test_union_query_mybatis_plus.sh` - 测试脚本
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
### Task 1.1:添加批量删除方法到 Mapper 接口
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
|
||||
**Step 1: 在 Mapper 接口中添加方法声明**
|
||||
|
||||
@@ -40,7 +40,7 @@ int deleteBatchByIdCard(@Param("list") List<String> idCards);
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java
|
||||
git commit -m "feat(employee): 添加批量删除方法声明"
|
||||
```
|
||||
|
||||
@@ -49,7 +49,7 @@ git commit -m "feat(employee): 添加批量删除方法声明"
|
||||
### Task 1.2:在 Mapper XML 中实现批量删除 SQL
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
- 修改:`ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
|
||||
**Step 1: 在 XML 文件中添加删除 SQL**
|
||||
|
||||
@@ -73,7 +73,7 @@ git commit -m "feat(employee): 添加批量删除方法声明"
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml
|
||||
git commit -m "feat(employee): 实现批量删除SQL"
|
||||
```
|
||||
|
||||
@@ -84,7 +84,7 @@ git commit -m "feat(employee): 实现批量删除SQL"
|
||||
- [x] **已完成** (commit: ebe4fd7)
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- 目标方法:`importEmployee` (第 172-311 行)
|
||||
|
||||
**Step 1: 备份原方法**
|
||||
@@ -183,7 +183,7 @@ public String importEmployee(List<CcdiEmployeeExcel> excelList, Boolean isUpdate
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java
|
||||
git commit -m "refactor(employee): 重构导入方法为先删后插模式"
|
||||
```
|
||||
|
||||
@@ -369,7 +369,7 @@ cd D:\ccdi\ccdi
|
||||
- [x] **已完成** (commit: ba8eedc)
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
|
||||
**Step 1: 在 Mapper 接口中添加方法声明**
|
||||
|
||||
@@ -386,7 +386,7 @@ int deleteBatchByPersonId(@Param("list") List<String> personIds);
|
||||
**Step 2: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
|
||||
git commit -m "feat(intermediary): 添加个人批量删除方法声明"
|
||||
```
|
||||
|
||||
@@ -395,7 +395,7 @@ git commit -m "feat(intermediary): 添加个人批量删除方法声明"
|
||||
### Task 2.2:在 Mapper XML 中实现批量删除 SQL
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml`
|
||||
- 修改:`ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml`
|
||||
|
||||
**Step 1: 在 XML 文件中添加删除 SQL**
|
||||
|
||||
@@ -413,7 +413,7 @@ git commit -m "feat(intermediary): 添加个人批量删除方法声明"
|
||||
**Step 2: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml
|
||||
git commit -m "feat(intermediary): 实现个人批量删除SQL"
|
||||
```
|
||||
|
||||
@@ -422,7 +422,7 @@ git commit -m "feat(intermediary): 实现个人批量删除SQL"
|
||||
### Task 2.3:重构中介库个人导入方法
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
- 目标方法:`importIntermediaryPerson`
|
||||
|
||||
**Step 1: 找到 `importIntermediaryPerson` 方法**
|
||||
@@ -511,7 +511,7 @@ public String importIntermediaryPerson(List<CcdiIntermediaryPersonExcel> excelLi
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
git commit -m "refactor(intermediary): 重构个人导入方法为先删后插模式"
|
||||
```
|
||||
|
||||
@@ -522,7 +522,7 @@ git commit -m "refactor(intermediary): 重构个人导入方法为先删后插
|
||||
### Task 3.1:添加批量删除方法到 Mapper 接口
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
|
||||
**Step 1: 在 Mapper 接口中添加方法声明**
|
||||
|
||||
@@ -539,7 +539,7 @@ int deleteBatchBySocialCreditCode(@Param("list") List<String> socialCreditCodes)
|
||||
**Step 2: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
|
||||
git commit -m "feat(intermediary): 添加实体批量删除方法声明"
|
||||
```
|
||||
|
||||
@@ -548,7 +548,7 @@ git commit -m "feat(intermediary): 添加实体批量删除方法声明"
|
||||
### Task 3.2:在 Mapper XML 中实现批量删除 SQL
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml`
|
||||
- 修改:`ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml`
|
||||
|
||||
**Step 1: 在 XML 文件中添加删除 SQL**
|
||||
|
||||
@@ -566,7 +566,7 @@ git commit -m "feat(intermediary): 添加实体批量删除方法声明"
|
||||
**Step 2: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml
|
||||
git commit -m "feat(intermediary): 实现实体批量删除SQL"
|
||||
```
|
||||
|
||||
@@ -575,7 +575,7 @@ git commit -m "feat(intermediary): 实现实体批量删除SQL"
|
||||
### Task 3.3:重构中介库实体导入方法
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
- 目标方法:`importIntermediaryEntity`
|
||||
|
||||
**Step 1: 找到 `importIntermediaryEntity` 方法**
|
||||
@@ -664,7 +664,7 @@ public String importIntermediaryEntity(List<CcdiIntermediaryEntityExcel> excelLi
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
|
||||
git commit -m "refactor(intermediary): 重构实体导入方法为先删后插模式"
|
||||
```
|
||||
|
||||
@@ -675,7 +675,7 @@ git commit -m "refactor(intermediary): 重构实体导入方法为先删后插
|
||||
### Task 4.1:添加批量删除方法到 Mapper 接口
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffRecruitmentMapper.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffRecruitmentMapper.java`
|
||||
|
||||
**Step 1: 在 Mapper 接口中添加方法声明**
|
||||
|
||||
@@ -692,7 +692,7 @@ int deleteBatchByRecruitId(@Param("list") List<String> recruitIds);
|
||||
**Step 2: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffRecruitmentMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffRecruitmentMapper.java
|
||||
git commit -m "feat(recruitment): 添加批量删除方法声明"
|
||||
```
|
||||
|
||||
@@ -701,7 +701,7 @@ git commit -m "feat(recruitment): 添加批量删除方法声明"
|
||||
### Task 4.2:在 Mapper XML 中实现批量删除 SQL
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffRecruitmentMapper.xml`
|
||||
- 修改:`ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffRecruitmentMapper.xml`
|
||||
|
||||
**Step 1: 在 XML 文件中添加删除 SQL**
|
||||
|
||||
@@ -719,7 +719,7 @@ git commit -m "feat(recruitment): 添加批量删除方法声明"
|
||||
**Step 2: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffRecruitmentMapper.xml
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffRecruitmentMapper.xml
|
||||
git commit -m "feat(recruitment): 实现批量删除SQL"
|
||||
```
|
||||
|
||||
@@ -728,7 +728,7 @@ git commit -m "feat(recruitment): 实现批量删除SQL"
|
||||
### Task 4.3:重构招聘信息导入方法
|
||||
|
||||
**文件:**
|
||||
- 修改:`ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentServiceImpl.java`
|
||||
- 修改:`ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentServiceImpl.java`
|
||||
- 目标方法:`importRecruitment`
|
||||
|
||||
**Step 1: 找到 `importRecruitment` 方法**
|
||||
@@ -817,7 +817,7 @@ public String importRecruitment(List<CcdiStaffRecruitmentExcel> excelList, Boole
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentServiceImpl.java
|
||||
git commit -m "refactor(recruitment): 重构导入方法为先删后插模式"
|
||||
```
|
||||
|
||||
|
||||
@@ -383,23 +383,23 @@ public String importXxx(List<XxxExcel> excelList, Boolean isUpdateSupport) {
|
||||
### 5.1 修改文件清单(11 个文件)
|
||||
|
||||
#### 员工信息管理模块
|
||||
1. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
2. `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
3. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
2. `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
3. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
|
||||
#### 中介库管理模块(个人和实体)
|
||||
4. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
5. `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml`
|
||||
6. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
7. `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml`
|
||||
8. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
4. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
5. `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml`
|
||||
6. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
7. `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml`
|
||||
8. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
- 修改 `importIntermediaryPerson` 方法
|
||||
- 修改 `importIntermediaryEntity` 方法
|
||||
|
||||
#### 员工招聘信息管理模块
|
||||
9. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffRecruitmentMapper.java`
|
||||
10. `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffRecruitmentMapper.xml`
|
||||
11. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentServiceImpl.java`
|
||||
9. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffRecruitmentMapper.java`
|
||||
10. `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffRecruitmentMapper.xml`
|
||||
11. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentServiceImpl.java`
|
||||
|
||||
### 5.2 实施步骤
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
#### 1. 实体层
|
||||
```
|
||||
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/
|
||||
├── domain/
|
||||
│ ├── CcdiPurchaseTransaction.java # 实体类 (36字段)
|
||||
│ ├── dto/
|
||||
@@ -50,7 +50,7 @@ ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
|
||||
#### 2. 持久层
|
||||
```
|
||||
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/
|
||||
├── mapper/
|
||||
│ ├── CcdiPurchaseTransactionMapper.java # Mapper接口
|
||||
│ └── resources/mapper/ccdi/
|
||||
@@ -59,7 +59,7 @@ ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
|
||||
#### 3. 服务层
|
||||
```
|
||||
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/
|
||||
├── service/
|
||||
│ ├── ICcdiPurchaseTransactionService.java # Service接口
|
||||
│ ├── ICcdiPurchaseTransactionImportService.java # 异步导入Service接口
|
||||
@@ -70,7 +70,7 @@ ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
|
||||
#### 4. 控制层
|
||||
```
|
||||
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/
|
||||
└── controller/
|
||||
└── CcdiPurchaseTransactionController.java # REST Controller (10接口)
|
||||
```
|
||||
@@ -159,14 +159,14 @@ WHERE menu_name = '采购交易管理';
|
||||
#### 方式A: 已有代码跳过 (推荐)
|
||||
```bash
|
||||
# 代码已存在于项目目录中,无需额外操作
|
||||
cd ruoyi-ccdi
|
||||
cd ruoyi-info-collection
|
||||
mvn clean compile # 验证编译
|
||||
```
|
||||
|
||||
#### 方式B: 从Git拉取
|
||||
```bash
|
||||
git pull origin dev
|
||||
cd ruoyi-ccdi
|
||||
cd ruoyi-info-collection
|
||||
mvn clean compile
|
||||
```
|
||||
|
||||
@@ -586,8 +586,8 @@ redis-cli KEYS "import:purchaseTransaction:*"
|
||||
- 查看Redis状态: `redis-cli monitor`
|
||||
|
||||
**关键文件位置**:
|
||||
- Controller: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
- 异步Service: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
|
||||
- Controller: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
- 异步Service: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
|
||||
- 前端页面: `ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue`
|
||||
|
||||
---
|
||||
|
||||
@@ -407,8 +407,8 @@ redisTemplate.expire(statusKey, 7, TimeUnit.DAYS);
|
||||
- 验证清单: `doc/plans/2026-02-06-ccdi_purchase_transaction-verification.md`
|
||||
|
||||
**关键文件**:
|
||||
- 后端Controller: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
- 异步Service: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
|
||||
- 后端Controller: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
- 异步Service: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
|
||||
- 前端页面: `ruoyi-ui/src/views/ccdiPurchaseTransaction/index.vue`
|
||||
|
||||
**测试账号**:
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
## 前置条件
|
||||
|
||||
### 参考文档
|
||||
- 员工招聘信息模块: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/**/CcdiStaffRecruitment*`
|
||||
- 员工异步导入实现: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeImportServiceImpl.java`
|
||||
- 员工招聘信息模块: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/**/CcdiStaffRecruitment*`
|
||||
- 员工异步导入实现: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeImportServiceImpl.java`
|
||||
- 数据库表定义: `doc/docs/ccdi_purchase_transaction.csv`
|
||||
|
||||
### 数据库表结构
|
||||
@@ -98,7 +98,7 @@ git commit -m "feat: 添加员工采购交易信息表"
|
||||
## Task 2: 创建实体类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiPurchaseTransaction.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiPurchaseTransaction.java`
|
||||
|
||||
**Step 1: 创建实体类**
|
||||
|
||||
@@ -247,7 +247,7 @@ public class CcdiPurchaseTransaction implements Serializable {
|
||||
**Step 2: 验证编译**
|
||||
|
||||
```bash
|
||||
cd ruoyi-ccdi
|
||||
cd ruoyi-info-collection
|
||||
mvn compile -pl . -am
|
||||
```
|
||||
|
||||
@@ -256,7 +256,7 @@ Expected: 编译成功,无错误
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiPurchaseTransaction.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/CcdiPurchaseTransaction.java
|
||||
git commit -m "feat: 添加采购交易信息实体类"
|
||||
```
|
||||
|
||||
@@ -265,7 +265,7 @@ git commit -m "feat: 添加采购交易信息实体类"
|
||||
## Task 3: 创建查询DTO
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionQueryDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionQueryDTO.java`
|
||||
|
||||
**Step 1: 创建查询DTO**
|
||||
|
||||
@@ -324,7 +324,7 @@ public class CcdiPurchaseTransactionQueryDTO implements Serializable {
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionQueryDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionQueryDTO.java
|
||||
git commit -m "feat: 添加采购交易查询DTO"
|
||||
```
|
||||
|
||||
@@ -333,7 +333,7 @@ git commit -m "feat: 添加采购交易查询DTO"
|
||||
## Task 4: 创建新增DTO
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionAddDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionAddDTO.java`
|
||||
|
||||
**Step 1: 创建新增DTO(包含验证注解)**
|
||||
|
||||
@@ -505,7 +505,7 @@ public class CcdiPurchaseTransactionAddDTO implements Serializable {
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionAddDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionAddDTO.java
|
||||
git commit -m "feat: 添加采购交易新增DTO"
|
||||
```
|
||||
|
||||
@@ -514,7 +514,7 @@ git commit -m "feat: 添加采购交易新增DTO"
|
||||
## Task 5: 创建编辑DTO
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionEditDTO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionEditDTO.java`
|
||||
|
||||
**Step 1: 创建编辑DTO**
|
||||
|
||||
@@ -523,7 +523,7 @@ git commit -m "feat: 添加采购交易新增DTO"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionEditDTO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiPurchaseTransactionEditDTO.java
|
||||
git commit -m "feat: 添加采购交易编辑DTO"
|
||||
```
|
||||
|
||||
@@ -532,7 +532,7 @@ git commit -m "feat: 添加采购交易编辑DTO"
|
||||
## Task 6: 创建VO类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiPurchaseTransactionVO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiPurchaseTransactionVO.java`
|
||||
|
||||
**Step 1: 创建VO类**
|
||||
|
||||
@@ -686,7 +686,7 @@ public class CcdiPurchaseTransactionVO implements Serializable {
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiPurchaseTransactionVO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiPurchaseTransactionVO.java
|
||||
git commit -m "feat: 添加采购交易VO类"
|
||||
```
|
||||
|
||||
@@ -695,7 +695,7 @@ git commit -m "feat: 添加采购交易VO类"
|
||||
## Task 7: 创建Excel导入导出类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java`
|
||||
|
||||
**Step 1: 创建Excel类**
|
||||
|
||||
@@ -704,7 +704,7 @@ git commit -m "feat: 添加采购交易VO类"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java
|
||||
git commit -m "feat: 添加采购交易Excel类"
|
||||
```
|
||||
|
||||
@@ -713,7 +713,7 @@ git commit -m "feat: 添加采购交易Excel类"
|
||||
## Task 8: 创建Mapper接口
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiPurchaseTransactionMapper.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiPurchaseTransactionMapper.java`
|
||||
|
||||
**Step 1: 创建Mapper接口**
|
||||
|
||||
@@ -763,7 +763,7 @@ public interface CcdiPurchaseTransactionMapper extends BaseMapper<CcdiPurchaseTr
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiPurchaseTransactionMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiPurchaseTransactionMapper.java
|
||||
git commit -m "feat: 添加采购交易Mapper接口"
|
||||
```
|
||||
|
||||
@@ -772,7 +772,7 @@ git commit -m "feat: 添加采购交易Mapper接口"
|
||||
## Task 9: 创建Mapper XML文件
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiPurchaseTransactionMapper.xml`
|
||||
- Create: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiPurchaseTransactionMapper.xml`
|
||||
|
||||
**Step 1: 创建XML映射文件**
|
||||
|
||||
@@ -785,7 +785,7 @@ git commit -m "feat: 添加采购交易Mapper接口"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiPurchaseTransactionMapper.xml
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiPurchaseTransactionMapper.xml
|
||||
git commit -m "feat: 添加采购交易Mapper XML"
|
||||
```
|
||||
|
||||
@@ -794,7 +794,7 @@ git commit -m "feat: 添加采购交易Mapper XML"
|
||||
## Task 10: 创建Service接口
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionService.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionService.java`
|
||||
|
||||
**Step 1: 创建Service接口**
|
||||
|
||||
@@ -811,7 +811,7 @@ git commit -m "feat: 添加采购交易Mapper XML"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionService.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionService.java
|
||||
git commit -m "feat: 添加采购交易Service接口"
|
||||
```
|
||||
|
||||
@@ -820,7 +820,7 @@ git commit -m "feat: 添加采购交易Service接口"
|
||||
## Task 11: 创建异步导入Service接口
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionImportService.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionImportService.java`
|
||||
|
||||
**Step 1: 创建异步导入Service接口**
|
||||
|
||||
@@ -832,7 +832,7 @@ git commit -m "feat: 添加采购交易Service接口"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionImportService.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiPurchaseTransactionImportService.java
|
||||
git commit -m "feat: 添加采购交易异步导入Service接口"
|
||||
```
|
||||
|
||||
@@ -841,7 +841,7 @@ git commit -m "feat: 添加采购交易异步导入Service接口"
|
||||
## Task 12: 创建Service实现类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionServiceImpl.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionServiceImpl.java`
|
||||
|
||||
**Step 1: 创建Service实现**
|
||||
|
||||
@@ -850,7 +850,7 @@ git commit -m "feat: 添加采购交易异步导入Service接口"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionServiceImpl.java
|
||||
git commit -m "feat: 添加采购交易Service实现"
|
||||
```
|
||||
|
||||
@@ -859,7 +859,7 @@ git commit -m "feat: 添加采购交易Service实现"
|
||||
## Task 13: 创建异步导入Service实现类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java`
|
||||
|
||||
**Step 1: 创建异步导入实现**
|
||||
|
||||
@@ -874,7 +874,7 @@ git commit -m "feat: 添加采购交易Service实现"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java
|
||||
git commit -m "feat: 添加采购交易异步导入Service实现"
|
||||
```
|
||||
|
||||
@@ -883,7 +883,7 @@ git commit -m "feat: 添加采购交易异步导入Service实现"
|
||||
## Task 14: 创建Controller控制器
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
|
||||
**Step 1: 创建Controller**
|
||||
|
||||
@@ -904,7 +904,7 @@ git commit -m "feat: 添加采购交易异步导入Service实现"
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java
|
||||
git commit -m "feat: 添加采购交易Controller"
|
||||
```
|
||||
|
||||
@@ -1204,7 +1204,7 @@ git commit -m "feat: 完成采购交易信息管理功能开发"
|
||||
|
||||
## 参考文件
|
||||
|
||||
- 员工招聘信息模块: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/**/CcdiStaffRecruitment*`
|
||||
- 员工异步导入: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeImportServiceImpl.java`
|
||||
- 员工招聘信息模块: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/**/CcdiStaffRecruitment*`
|
||||
- 员工异步导入: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeImportServiceImpl.java`
|
||||
- 前端页面: `ruoyi-ui/src/views/ccdiStaffRecruitment/index.vue`
|
||||
- 测试脚本: `test/test_employee_api.ps1`
|
||||
|
||||
@@ -725,15 +725,15 @@ import:employee:{taskId}:failures # 失败记录列表
|
||||
### C. 相关文件清单
|
||||
|
||||
**后端**:
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportResultVO.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportFailureVO.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
- `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportResultVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportFailureVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
- `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
|
||||
**前端**:
|
||||
- `ruoyi-ui/src/api/ccdiEmployee.js`
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
**目标:** 创建异步配置类,设置专用线程池处理导入任务
|
||||
|
||||
**文件:**
|
||||
- 创建: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java`
|
||||
- 创建: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java`
|
||||
|
||||
**步骤 1: 创建AsyncConfig配置类**
|
||||
|
||||
@@ -72,7 +72,7 @@ public class AsyncConfig {
|
||||
**步骤 3: 提交配置**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java
|
||||
git commit -m "feat: 添加异步配置类,配置导入任务专用线程池"
|
||||
```
|
||||
|
||||
@@ -83,9 +83,9 @@ git commit -m "feat: 添加异步配置类,配置导入任务专用线程池"
|
||||
**目标:** 创建导入结果、状态和失败记录的VO类
|
||||
|
||||
**文件:**
|
||||
- 创建: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportResultVO.java`
|
||||
- 创建: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- 创建: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportFailureVO.java`
|
||||
- 创建: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportResultVO.java`
|
||||
- 创建: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- 创建: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportFailureVO.java`
|
||||
|
||||
**步骤 1: 创建ImportResultVO**
|
||||
|
||||
@@ -207,7 +207,7 @@ public class ImportFailureVO {
|
||||
**步骤 4: 提交VO类**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/
|
||||
git commit -m "feat: 添加导入相关VO类(ImportResultVO, ImportStatusVO, ImportFailureVO)"
|
||||
```
|
||||
|
||||
@@ -270,8 +270,8 @@ git commit -m "feat: 添加员工表柜员号唯一索引,支持批量更新"
|
||||
**目标:** 在Mapper接口和XML中添加批量查询和批量插入更新的方法
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
- 修改: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
|
||||
**步骤 1: 在Mapper接口中添加方法**
|
||||
|
||||
@@ -319,8 +319,8 @@ int insertOrUpdateBatch(@Param("list") List<CcdiEmployee> list);
|
||||
**步骤 3: 提交Mapper变更**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml
|
||||
git commit -m "feat: 添加批量插入或更新员工信息方法"
|
||||
```
|
||||
|
||||
@@ -331,8 +331,8 @@ git commit -m "feat: 添加批量插入或更新员工信息方法"
|
||||
**目标:** 实现异步导入逻辑,包括数据分类、批量操作、Redis存储
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java`
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
|
||||
**步骤 1: 在Service接口中添加方法声明**
|
||||
|
||||
@@ -625,7 +625,7 @@ public List<ImportFailureVO> getImportFailures(String taskId) {
|
||||
**步骤 6: 提交Service层代码**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/
|
||||
git commit -m "feat: 实现员工信息异步导入服务"
|
||||
```
|
||||
|
||||
@@ -636,7 +636,7 @@ git commit -m "feat: 实现员工信息异步导入服务"
|
||||
**目标:** 修改导入接口为异步,添加状态查询和失败记录查询接口
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
|
||||
**步骤 1: 添加Resource注入**
|
||||
|
||||
@@ -722,7 +722,7 @@ public TableDataInfo getImportFailures(
|
||||
**步骤 5: 提交Controller变更**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java
|
||||
git commit -m "feat: 修改导入接口为异步,添加状态和失败记录查询接口"
|
||||
```
|
||||
|
||||
@@ -1411,15 +1411,15 @@ git push origin v1.x.x
|
||||
### A. 相关文件清单
|
||||
|
||||
**后端:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportResultVO.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/ImportFailureVO.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
- `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/config/AsyncConfig.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportResultVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportStatusVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/ImportFailureVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEmployeeMapper.java`
|
||||
- `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEmployeeMapper.xml`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java`
|
||||
|
||||
**前端:**
|
||||
- `ruoyi-ui/src/api/ccdiEmployee.js`
|
||||
|
||||
@@ -869,19 +869,19 @@ private void updateImportStatus(String taskType, String taskId, String status, I
|
||||
|
||||
| 文件路径 | 说明 |
|
||||
|---------|------|
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java` | 个人中介导入失败记录VO |
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java` | 实体中介导入失败记录VO |
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java` | 个人中介异步导入Service接口 |
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java` | 实体中介异步导入Service接口 |
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java` | 个人中介异步导入Service实现 |
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java` | 实体中介异步导入Service实现 |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java` | 个人中介导入失败记录VO |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java` | 实体中介导入失败记录VO |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java` | 个人中介异步导入Service接口 |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java` | 实体中介异步导入Service接口 |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java` | 个人中介异步导入Service实现 |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java` | 实体中介异步导入Service实现 |
|
||||
| `test/test_intermediary_import.py` | 测试脚本 |
|
||||
|
||||
### 5.2 修改文件
|
||||
|
||||
| 文件路径 | 修改内容 |
|
||||
|---------|---------|
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java` | 修改导入接口,添加状态查询和失败记录查询接口(个人+实体共6个接口) |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java` | 修改导入接口,添加状态查询和失败记录查询接口(个人+实体共6个接口) |
|
||||
| `ruoyi-ui/src/api/ccdiIntermediary.js` | 添加导入状态和失败记录查询API(4个新方法) |
|
||||
| `ruoyi-ui/src/views/ccdiIntermediary/index.vue` | 添加轮询逻辑、失败记录UI(两套独立组件) |
|
||||
| `doc/api/ccdi_intermediary_api.md` | 更新API文档(新增导入相关接口文档) |
|
||||
@@ -904,20 +904,20 @@ private void updateImportStatus(String taskType, String taskId, String status, I
|
||||
#### 步骤1: 创建失败记录VO类
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java`
|
||||
|
||||
#### 步骤2: 创建Service接口
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java`
|
||||
|
||||
#### 步骤3: 实现Service
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java`
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java`
|
||||
|
||||
**操作:**
|
||||
- 实现`ICcdiIntermediaryPersonImportService`接口
|
||||
@@ -931,7 +931,7 @@ private void updateImportStatus(String taskType, String taskId, String status, I
|
||||
#### 步骤4: 修改Controller
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**操作:**
|
||||
- 注入两个导入Service
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
|
||||
**参考资料:**
|
||||
- 设计文档: `doc/plans/2026-02-06-intermediary-async-import-design.md`
|
||||
- 员工导入实现: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeImportServiceImpl.java`
|
||||
- 招聘导入实现: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentImportServiceImpl.java`
|
||||
- 员工导入实现: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeImportServiceImpl.java`
|
||||
- 招聘导入实现: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentImportServiceImpl.java`
|
||||
|
||||
**关键依赖:**
|
||||
- `ImportResultVO` - 导入结果VO(已存在,复用)
|
||||
@@ -32,7 +32,7 @@
|
||||
## Task 1: 创建个人中介导入失败记录VO
|
||||
|
||||
**文件:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java`
|
||||
|
||||
**Step 1: 创建VO类**
|
||||
|
||||
@@ -84,13 +84,13 @@ public class IntermediaryPersonImportFailureVO implements Serializable {
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryPersonImportFailureVO.java
|
||||
git commit -m "feat: 添加个人中介导入失败记录VO"
|
||||
```
|
||||
|
||||
@@ -99,7 +99,7 @@ git commit -m "feat: 添加个人中介导入失败记录VO"
|
||||
## Task 2: 创建实体中介导入失败记录VO
|
||||
|
||||
**文件:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java`
|
||||
|
||||
**Step 1: 创建VO类**
|
||||
|
||||
@@ -152,13 +152,13 @@ public class IntermediaryEntityImportFailureVO implements Serializable {
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/IntermediaryEntityImportFailureVO.java
|
||||
git commit -m "feat: 添加实体中介导入失败记录VO"
|
||||
```
|
||||
|
||||
@@ -167,7 +167,7 @@ git commit -m "feat: 添加实体中介导入失败记录VO"
|
||||
## Task 3: 创建个人中介导入Service接口
|
||||
|
||||
**文件:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java`
|
||||
|
||||
**Step 1: 创建Service接口**
|
||||
|
||||
@@ -222,13 +222,13 @@ public interface ICcdiIntermediaryPersonImportService {
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryPersonImportService.java
|
||||
git commit -m "feat: 添加个人中介异步导入Service接口"
|
||||
```
|
||||
|
||||
@@ -237,7 +237,7 @@ git commit -m "feat: 添加个人中介异步导入Service接口"
|
||||
## Task 4: 创建实体中介导入Service接口
|
||||
|
||||
**文件:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java`
|
||||
|
||||
**Step 1: 创建Service接口**
|
||||
|
||||
@@ -292,13 +292,13 @@ public interface ICcdiIntermediaryEntityImportService {
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryEntityImportService.java
|
||||
git commit -m "feat: 添加实体中介异步导入Service接口"
|
||||
```
|
||||
|
||||
@@ -307,7 +307,7 @@ git commit -m "feat: 添加实体中介异步导入Service接口"
|
||||
## Task 5: 实现个人中介异步导入Service
|
||||
|
||||
**文件:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java`
|
||||
|
||||
**Step 1: 创建Service实现类**
|
||||
|
||||
@@ -515,13 +515,13 @@ public class CcdiIntermediaryPersonImportServiceImpl implements ICcdiIntermediar
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java
|
||||
git commit -m "feat: 实现个人中介异步导入Service"
|
||||
```
|
||||
|
||||
@@ -530,7 +530,7 @@ git commit -m "feat: 实现个人中介异步导入Service"
|
||||
## Task 6: 实现实体中介异步导入Service
|
||||
|
||||
**文件:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java`
|
||||
- Create: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java`
|
||||
|
||||
**Step 1: 创建Service实现类**
|
||||
|
||||
@@ -737,13 +737,13 @@ public class CcdiIntermediaryEntityImportServiceImpl implements ICcdiIntermediar
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java
|
||||
git commit -m "feat: 实现实体中介异步导入Service"
|
||||
```
|
||||
|
||||
@@ -752,7 +752,7 @@ git commit -m "feat: 实现实体中介异步导入Service"
|
||||
## Task 7: 修改Controller - 注入Service和添加辅助方法
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 添加导入Service注入**
|
||||
|
||||
@@ -801,13 +801,13 @@ private RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
**Step 4: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 5: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: Controller添加导入Service注入和辅助方法"
|
||||
```
|
||||
|
||||
@@ -816,7 +816,7 @@ git commit -m "feat: Controller添加导入Service注入和辅助方法"
|
||||
## Task 8: 修改Controller - 改造个人中介导入接口为异步
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 修改importPersonData方法**
|
||||
|
||||
@@ -865,13 +865,13 @@ public AjaxResult importPersonData(MultipartFile file,
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: 改造个人中介导入接口为异步"
|
||||
```
|
||||
|
||||
@@ -880,7 +880,7 @@ git commit -m "feat: 改造个人中介导入接口为异步"
|
||||
## Task 9: 修改Controller - 添加个人中介状态查询接口
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 添加getPersonImportStatus方法**
|
||||
|
||||
@@ -903,13 +903,13 @@ public AjaxResult getPersonImportStatus(@PathVariable String taskId) {
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: 添加个人中介导入状态查询接口"
|
||||
```
|
||||
|
||||
@@ -918,7 +918,7 @@ git commit -m "feat: 添加个人中介导入状态查询接口"
|
||||
## Task 10: 修改Controller - 添加个人中介失败记录查询接口
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 添加getPersonImportFailures方法**
|
||||
|
||||
@@ -949,13 +949,13 @@ public TableDataInfo getPersonImportFailures(
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: 添加个人中介导入失败记录查询接口"
|
||||
```
|
||||
|
||||
@@ -964,7 +964,7 @@ git commit -m "feat: 添加个人中介导入失败记录查询接口"
|
||||
## Task 11: 修改Controller - 改造实体中介导入接口为异步
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 修改importEntityData方法**
|
||||
|
||||
@@ -1013,13 +1013,13 @@ public AjaxResult importEntityData(MultipartFile file,
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: 改造实体中介导入接口为异步"
|
||||
```
|
||||
|
||||
@@ -1028,7 +1028,7 @@ git commit -m "feat: 改造实体中介导入接口为异步"
|
||||
## Task 12: 修改Controller - 添加实体中介状态查询接口
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 添加getEntityImportStatus方法**
|
||||
|
||||
@@ -1051,13 +1051,13 @@ public AjaxResult getEntityImportStatus(@PathVariable String taskId) {
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: 添加实体中介导入状态查询接口"
|
||||
```
|
||||
|
||||
@@ -1066,7 +1066,7 @@ git commit -m "feat: 添加实体中介导入状态查询接口"
|
||||
## Task 13: 修改Controller - 添加实体中介失败记录查询接口
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
- Modify: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**Step 1: 添加getEntityImportFailures方法**
|
||||
|
||||
@@ -1097,13 +1097,13 @@ public TableDataInfo getEntityImportFailures(
|
||||
|
||||
**Step 2: 编译验证**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Run: `mvn compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
|
||||
git commit -m "feat: 添加实体中介导入失败记录查询接口"
|
||||
```
|
||||
|
||||
@@ -1924,7 +1924,7 @@ git commit -m "test: 添加中介导入测试脚本"
|
||||
|
||||
**Step 1: 编译后端**
|
||||
|
||||
Run: `mvn clean compile -pl ruoyi-ccdi`
|
||||
Run: `mvn clean compile -pl ruoyi-info-collection`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 2: 检查前端语法**
|
||||
|
||||
@@ -695,7 +695,7 @@ methods: {
|
||||
#### 步骤1: 创建VO类
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/RecruitmentImportFailureVO.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/RecruitmentImportFailureVO.java`
|
||||
|
||||
**操作:**
|
||||
- 创建`RecruitmentImportFailureVO`类
|
||||
@@ -705,7 +705,7 @@ methods: {
|
||||
#### 步骤2: 创建Service接口
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffRecruitmentImportService.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffRecruitmentImportService.java`
|
||||
|
||||
**操作:**
|
||||
- 创建Service接口
|
||||
@@ -714,7 +714,7 @@ methods: {
|
||||
#### 步骤3: 实现Service
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentImportServiceImpl.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentImportServiceImpl.java`
|
||||
|
||||
**操作:**
|
||||
- 实现`ICcdiStaffRecruitmentImportService`接口
|
||||
@@ -727,7 +727,7 @@ methods: {
|
||||
#### 步骤4: 修改Controller
|
||||
|
||||
**文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiStaffRecruitmentController.java`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiStaffRecruitmentController.java`
|
||||
|
||||
**操作:**
|
||||
- 注入`ICcdiStaffRecruitmentImportService`
|
||||
@@ -807,16 +807,16 @@ git commit -m "feat: 实现招聘信息异步导入功能"
|
||||
|
||||
| 文件路径 | 说明 |
|
||||
|---------|------|
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/RecruitmentImportFailureVO.java` | 招聘信息导入失败记录VO |
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffRecruitmentImportService.java` | 招聘信息异步导入Service接口 |
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentImportServiceImpl.java` | 招聘信息异步导入Service实现 |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/RecruitmentImportFailureVO.java` | 招聘信息导入失败记录VO |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffRecruitmentImportService.java` | 招聘信息异步导入Service接口 |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffRecruitmentImportServiceImpl.java` | 招聘信息异步导入Service实现 |
|
||||
| `test/test_recruitment_import.py` | 测试脚本 |
|
||||
|
||||
### 7.2 修改文件
|
||||
|
||||
| 文件路径 | 修改内容 |
|
||||
|---------|---------|
|
||||
| `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiStaffRecruitmentController.java` | 修改导入接口,添加状态查询和失败记录查询接口 |
|
||||
| `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiStaffRecruitmentController.java` | 修改导入接口,添加状态查询和失败记录查询接口 |
|
||||
| `ruoyi-ui/src/api/ccdiStaffRecruitment.js` | 添加导入状态和失败记录查询API |
|
||||
| `ruoyi-ui/src/views/ccdiStaffRecruitment/index.vue` | 添加轮询逻辑和失败记录UI |
|
||||
| `doc/api/ccdi_staff_recruitment_api.md` | 更新API文档 |
|
||||
|
||||
@@ -60,7 +60,7 @@ ALTER TABLE cdi_biz_intermediary ADD UNIQUE KEY uk_person_id (person_id);
|
||||
### Task 1: 添加个人中介批量导入方法接口
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
|
||||
|
||||
**Step 1: 添加方法签名到接口**
|
||||
|
||||
@@ -81,7 +81,7 @@ void importPersonBatch(@Param("list") List<CcdiBizIntermediary> list);
|
||||
|
||||
```bash
|
||||
cd .worktrees/intermediary-import-upsert
|
||||
mvn compile -pl ruoyi-ccdi -am
|
||||
mvn compile -pl ruoyi-info-collection -am
|
||||
```
|
||||
|
||||
预期: 编译成功,无错误
|
||||
@@ -89,7 +89,7 @@ mvn compile -pl ruoyi-ccdi -am
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
|
||||
git commit -m "feat: 添加个人中介批量导入方法签名
|
||||
|
||||
添加importPersonBatch方法到Mapper接口,用于支持ON DUPLICATE KEY UPDATE的批量导入操作。
|
||||
@@ -102,7 +102,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 2: 实现个人中介批量导入SQL
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml`
|
||||
- 修改: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml`
|
||||
|
||||
**Step 1: 在XML文件中添加SQL实现**
|
||||
|
||||
@@ -137,7 +137,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
|
||||
```bash
|
||||
# 检查XML格式是否正确
|
||||
xmllint --noout ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml
|
||||
xmllint --noout ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml
|
||||
```
|
||||
|
||||
预期: 无输出表示格式正确
|
||||
@@ -145,7 +145,7 @@ xmllint --noout ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMap
|
||||
**Step 3: 验证编译**
|
||||
|
||||
```bash
|
||||
mvn compile -pl ruoyi-ccdi -am
|
||||
mvn compile -pl ruoyi-info-collection -am
|
||||
```
|
||||
|
||||
预期: 编译成功
|
||||
@@ -153,7 +153,7 @@ mvn compile -pl ruoyi-ccdi -am
|
||||
**Step 4: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiBizIntermediaryMapper.xml
|
||||
git commit -m "feat: 实现个人中介批量导入ON DUPLICATE KEY UPDATE SQL
|
||||
|
||||
使用INSERT ... ON DUPLICATE KEY UPDATE实现单次SQL完成插入或更新操作。
|
||||
@@ -169,7 +169,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 3: 添加实体中介批量导入方法接口
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
|
||||
|
||||
**Step 1: 添加方法签名到接口**
|
||||
|
||||
@@ -185,13 +185,13 @@ void importEntityBatch(@Param("list") List<CcdiEnterpriseBaseInfo> list);
|
||||
**Step 2: 验证编译**
|
||||
|
||||
```bash
|
||||
mvn compile -pl ruoyi-ccdi -am
|
||||
mvn compile -pl ruoyi-info-collection -am
|
||||
```
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
|
||||
git commit -m "feat: 添加实体中介批量导入方法签名
|
||||
|
||||
添加importEntityBatch方法到Mapper接口。
|
||||
@@ -204,7 +204,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 4: 实现实体中介批量导入SQL
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml`
|
||||
- 修改: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml`
|
||||
|
||||
**Step 1: 在XML文件中添加SQL实现**
|
||||
|
||||
@@ -237,19 +237,19 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
**Step 2: 验证XML语法**
|
||||
|
||||
```bash
|
||||
xmllint --noout ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml
|
||||
xmllint --noout ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml
|
||||
```
|
||||
|
||||
**Step 3: 验证编译**
|
||||
|
||||
```bash
|
||||
mvn compile -pl ruoyi-ccdi -am
|
||||
mvn compile -pl ruoyi-info-collection -am
|
||||
```
|
||||
|
||||
**Step 4: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml
|
||||
git add ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiEnterpriseBaseInfoMapper.xml
|
||||
git commit -m "feat: 实现实体中介批量导入ON DUPLICATE KEY UPDATE SQL
|
||||
|
||||
使用INSERT ... ON DUPLICATE KEY UPDATE实现单次SQL完成插入或更新操作。
|
||||
@@ -266,7 +266,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 5: 重构个人中介导入Service - 更新模式
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java`
|
||||
|
||||
**Step 1: 修改 importPersonAsync 方法的核心导入逻辑**
|
||||
|
||||
@@ -361,13 +361,13 @@ private CcdiIntermediaryPersonExcel convertToExcel(CcdiBizIntermediary entity) {
|
||||
**Step 4: 验证编译**
|
||||
|
||||
```bash
|
||||
mvn compile -pl ruoyi-ccdi -am
|
||||
mvn compile -pl ruoyi-info-collection -am
|
||||
```
|
||||
|
||||
**Step 5: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl.java
|
||||
git commit -m "refactor: 重构个人中介导入Service使用ON DUPLICATE KEY UPDATE
|
||||
|
||||
主要变更:
|
||||
@@ -384,7 +384,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 6: 重构实体中介导入Service - 更新模式
|
||||
|
||||
**文件:**
|
||||
- 修改: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java`
|
||||
- 修改: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java`
|
||||
|
||||
**Step 1: 修改 importEntityAsync 方法的核心导入逻辑**
|
||||
|
||||
@@ -475,13 +475,13 @@ private CcdiIntermediaryEntityExcel convertToExcel(CcdiEnterpriseBaseInfo entity
|
||||
**Step 4: 验证编译**
|
||||
|
||||
```bash
|
||||
mvn compile -pl ruoyi-ccdi -am
|
||||
mvn compile -pl ruoyi-info-collection -am
|
||||
```
|
||||
|
||||
**Step 5: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java
|
||||
git add ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl.java
|
||||
git commit -m "refactor: 重构实体中介导入Service使用ON DUPLICATE KEY UPDATE
|
||||
|
||||
与个人中介导入保持一致的实现方式。
|
||||
@@ -496,7 +496,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 7: 编写个人中介导入单元测试
|
||||
|
||||
**文件:**
|
||||
- 创建: `ruoyi-ccdi/src/test/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapperTest.java`
|
||||
- 创建: `ruoyi-info-collection/src/test/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapperTest.java`
|
||||
|
||||
**Step 1: 创建测试类**
|
||||
|
||||
@@ -643,7 +643,7 @@ class CcdiBizIntermediaryMapperTest {
|
||||
**Step 2: 运行测试**
|
||||
|
||||
```bash
|
||||
mvn test -pl ruoyi-ccdi -Dtest=CcdiBizIntermediaryMapperTest
|
||||
mvn test -pl ruoyi-info-collection -Dtest=CcdiBizIntermediaryMapperTest
|
||||
```
|
||||
|
||||
预期: 所有测试通过 (3 tests, 0 failures)
|
||||
@@ -651,7 +651,7 @@ mvn test -pl ruoyi-ccdi -Dtest=CcdiBizIntermediaryMapperTest
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/test/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapperTest.java
|
||||
git add ruoyi-info-collection/src/test/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapperTest.java
|
||||
git commit -m "test: 添加个人中介批量导入单元测试
|
||||
|
||||
覆盖场景:
|
||||
@@ -668,7 +668,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 8: 编写实体中介导入单元测试
|
||||
|
||||
**文件:**
|
||||
- 创建: `ruoyi-ccdi/src/test/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapperTest.java`
|
||||
- 创建: `ruoyi-info-collection/src/test/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapperTest.java`
|
||||
|
||||
**Step 1: 创建测试类**
|
||||
|
||||
@@ -797,7 +797,7 @@ class CcdiEnterpriseBaseInfoMapperTest {
|
||||
**Step 2: 运行测试**
|
||||
|
||||
```bash
|
||||
mvn test -pl ruoyi-ccdi -Dtest=CcdiEnterpriseBaseInfoMapperTest
|
||||
mvn test -pl ruoyi-info-collection -Dtest=CcdiEnterpriseBaseInfoMapperTest
|
||||
```
|
||||
|
||||
预期: 所有测试通过
|
||||
@@ -805,7 +805,7 @@ mvn test -pl ruoyi-ccdi -Dtest=CcdiEnterpriseBaseInfoMapperTest
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/test/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapperTest.java
|
||||
git add ruoyi-info-collection/src/test/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapperTest.java
|
||||
git commit -m "test: 添加实体中介批量导入单元测试
|
||||
|
||||
覆盖场景与个人中介测试一致。
|
||||
@@ -818,7 +818,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### Task 9: 集成测试 - 使用真实Excel文件
|
||||
|
||||
**文件:**
|
||||
- 创建: `ruoyi-ccdi/src/test/java/com/ruoyi/ccdi/service/CcdiIntermediaryImportIntegrationTest.java`
|
||||
- 创建: `ruoyi-info-collection/src/test/java/com/ruoyi/ccdi/service/CcdiIntermediaryImportIntegrationTest.java`
|
||||
|
||||
**Step 1: 创建集成测试**
|
||||
|
||||
@@ -927,13 +927,13 @@ class CcdiIntermediaryImportIntegrationTest {
|
||||
**Step 2: 运行集成测试**
|
||||
|
||||
```bash
|
||||
mvn test -pl ruoyi-ccdi -Dtest=CcdiIntermediaryImportIntegrationTest
|
||||
mvn test -pl ruoyi-info-collection -Dtest=CcdiIntermediaryImportIntegrationTest
|
||||
```
|
||||
|
||||
**Step 3: 提交**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/test/java/com/ruoyi/ccdi/service/CcdiIntermediaryImportIntegrationTest.java
|
||||
git add ruoyi-info-collection/src/test/java/com/ruoyi/ccdi/service/CcdiIntermediaryImportIntegrationTest.java
|
||||
git commit -m "test: 添加中介导入集成测试
|
||||
|
||||
测试端到端的导入流程,包括:
|
||||
@@ -1011,7 +1011,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
|
||||
```bash
|
||||
cd .worktrees/intermediary-import-upsert
|
||||
mvn test -pl ruoyi-ccdi
|
||||
mvn test -pl ruoyi-info-collection
|
||||
```
|
||||
|
||||
预期: 所有测试通过,包括新增的测试和现有的回归测试
|
||||
@@ -1019,10 +1019,10 @@ mvn test -pl ruoyi-ccdi
|
||||
**Step 2: 检查测试覆盖率(可选)**
|
||||
|
||||
```bash
|
||||
mvn jacoco:report -pl ruoyi-ccdi
|
||||
mvn jacoco:report -pl ruoyi-info-collection
|
||||
```
|
||||
|
||||
查看覆盖率报告: `ruoyi-ccdi/target/site/jacoco/index.html`
|
||||
查看覆盖率报告: `ruoyi-info-collection/target/site/jacoco/index.html`
|
||||
|
||||
**Step 3: 记录测试结果**
|
||||
|
||||
@@ -1082,7 +1082,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
|
||||
```bash
|
||||
# 运行代码检查(如果项目配置了checkstyle或spotbugs)
|
||||
mvn checkstyle:check -pl ruoyi-ccdi
|
||||
mvn checkstyle:check -pl ruoyi-info-collection
|
||||
```
|
||||
|
||||
**Step 2: 检查未使用的导入**
|
||||
@@ -1096,7 +1096,7 @@ mvn checkstyle:check -pl ruoyi-ccdi
|
||||
**Step 4: 最终构建验证**
|
||||
|
||||
```bash
|
||||
mvn clean package -pl ruoyi-ccdi -am -DskipTests
|
||||
mvn clean package -pl ruoyi-info-collection -am -DskipTests
|
||||
```
|
||||
|
||||
预期: 构建成功,生成jar文件
|
||||
@@ -1174,10 +1174,10 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
|
||||
### 影响范围
|
||||
|
||||
**影响的模块:**
|
||||
- `ruoyi-ccdi/mapper/CcdiBizIntermediaryMapper`
|
||||
- `ruoyi-ccdi/mapper/CcdiEnterpriseBaseInfoMapper`
|
||||
- `ruoyi-ccdi/service/impl/CcdiIntermediaryPersonImportServiceImpl`
|
||||
- `ruoyi-ccdi/service/impl/CcdiIntermediaryEntityImportServiceImpl`
|
||||
- `ruoyi-info-collection/mapper/CcdiBizIntermediaryMapper`
|
||||
- `ruoyi-info-collection/mapper/CcdiEnterpriseBaseInfoMapper`
|
||||
- `ruoyi-info-collection/service/impl/CcdiIntermediaryPersonImportServiceImpl`
|
||||
- `ruoyi-info-collection/service/impl/CcdiIntermediaryEntityImportServiceImpl`
|
||||
|
||||
**不影响:**
|
||||
- Controller层 (无变更)
|
||||
@@ -1318,7 +1318,7 @@ git worktree remove .worktrees/intermediary-import-upsert
|
||||
|
||||
**实施完成后,请在worktree中运行:**
|
||||
```bash
|
||||
mvn clean package -pl ruoyi-ccdi -am
|
||||
mvn clean package -pl ruoyi-info-collection -am
|
||||
```
|
||||
|
||||
验证构建成功后,即可合并分支或创建Pull Request。
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
修改 `CcdiPurchaseTransactionExcel.java`,将数值字段类型从 String 改为 BigDecimal
|
||||
|
||||
**修改文件**:
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java:52-82`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java:52-82`
|
||||
|
||||
**修改内容**:
|
||||
```java
|
||||
@@ -59,7 +59,7 @@ private BigDecimal bidAmount;
|
||||
4. 使用 `getDataTable()` 方法返回分页格式
|
||||
|
||||
**修改文件**:
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java:173-196`
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java:173-196`
|
||||
|
||||
**修改内容**:
|
||||
```java
|
||||
@@ -197,11 +197,11 @@ protected TableDataInfo getDataTable(List<?> list, long total) {
|
||||
## 附录:相关文件
|
||||
|
||||
### 修改的文件
|
||||
1. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java`
|
||||
2. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiPurchaseTransactionExcel.java`
|
||||
2. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiPurchaseTransactionController.java`
|
||||
|
||||
### 参考文件
|
||||
1. `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java` (员工信息管理,作为参考)
|
||||
1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java` (员工信息管理,作为参考)
|
||||
|
||||
### 测试文件
|
||||
1. `doc/test-data/purchase_transaction/generate-test-data.js` (测试数据生成脚本)
|
||||
|
||||
@@ -268,7 +268,7 @@ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
||||
|
||||
```bash
|
||||
cd D:\ccdi\ccdi\.worktrees\intermediary-import-upsert
|
||||
mvn compile -pl ruoyi-ccdi -am -q
|
||||
mvn compile -pl ruoyi-info-collection -am -q
|
||||
```
|
||||
|
||||
**结果:** ✅ 编译成功,无错误无警告
|
||||
|
||||
@@ -130,7 +130,7 @@ Controller解析Excel
|
||||
|
||||
#### 文件1: CcdiIntermediaryServiceImpl.java
|
||||
|
||||
**路径**: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
**路径**: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
|
||||
|
||||
**需要添加的依赖注入**:
|
||||
```java
|
||||
@@ -200,7 +200,7 @@ public String importIntermediaryPerson(List<CcdiIntermediaryPersonExcel> list,
|
||||
|
||||
#### 文件2: CcdiIntermediaryController.java
|
||||
|
||||
**路径**: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
**路径**: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
|
||||
|
||||
**需要添加的依赖注入**:
|
||||
```java
|
||||
@@ -614,7 +614,7 @@ ab -n 100 -c 10 -T "multipart/form-data; boundary=----WebKitFormBoundary" \
|
||||
2. **编译打包**
|
||||
```bash
|
||||
# 后端
|
||||
cd ruoyi-ccdi
|
||||
cd ruoyi-info-collection
|
||||
mvn clean package
|
||||
|
||||
# 前端
|
||||
|
||||
@@ -528,7 +528,7 @@ CREATE TABLE ccdi_transaction_category (
|
||||
### 3.1 后端模块划分
|
||||
|
||||
```
|
||||
ruoyi-ccdi/ (新建模块)
|
||||
ruoyi-info-collection/ (新建模块)
|
||||
├── controller/
|
||||
│ ├── CcdiProjectController.java # 项目管理
|
||||
│ ├── CcdiDataUploadController.java # 数据上传
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
### CcdiStaffEnterpriseRelationVO.java
|
||||
|
||||
文件位置: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java`
|
||||
文件位置: `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java`
|
||||
|
||||
| 检查项 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
@@ -29,7 +29,7 @@ private String personName;
|
||||
|
||||
### CcdiStaffEnterpriseRelationMapper.xml
|
||||
|
||||
文件位置: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
文件位置: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
|
||||
| 检查项 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
@@ -295,8 +295,8 @@ eec2f8c feat(staff-enterprise-relation): Task 6完成后端编译验证
|
||||
### 文件变更统计
|
||||
|
||||
**后端文件:**
|
||||
- `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java` (添加personName字段)
|
||||
- `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml` (添加LEFT JOIN和ResultMap映射)
|
||||
- `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java` (添加personName字段)
|
||||
- `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml` (添加LEFT JOIN和ResultMap映射)
|
||||
|
||||
**前端文件:**
|
||||
- `ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue` (添加员工姓名列)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
**审查日期:** 2026-02-11
|
||||
**审查人:** Code Review Agent
|
||||
**修复提交:** af7ec6f43dc1c8a80fe23cb5a437eef27ea5002d
|
||||
**审查文件:** `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationImportServiceImpl.java`
|
||||
**审查文件:** `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationImportServiceImpl.java`
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
```bash
|
||||
# 在采购交易导入服务中搜索身份证号存在性检查
|
||||
grep -n "CcdiBaseStaff\|existingPersonIds\|身份证.*存在" \
|
||||
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java
|
||||
ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java
|
||||
|
||||
# 结果:No matches found
|
||||
```
|
||||
@@ -251,4 +251,4 @@ if (!addDTO.getPersonId().matches("^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0
|
||||
|
||||
- [员工实体关系信息维护功能设计文档](../design/staff-enterprise-relation/员工实体关系信息维护功能设计文档.md)
|
||||
- [2026-02-11 员工实体关系导入代码审查报告(修复后复审)](./2026-02-11-staff-relation-import-fix-review.md)
|
||||
- [采购交易管理功能实现](../../ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java)
|
||||
- [采购交易管理功能实现](../../ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiPurchaseTransactionImportServiceImpl.java)
|
||||
|
||||
@@ -374,12 +374,12 @@ ccdi_base_staff.name → 映射为 VO.personName
|
||||
### 8.1 项目内参考实现
|
||||
|
||||
1. **员工亲属关系模块** (正确实现):
|
||||
- 文件: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffFmyRelationMapper.xml`
|
||||
- 文件: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffFmyRelationMapper.xml`
|
||||
- 提交: 历史提交记录
|
||||
- 特点: 完整实现personName字段的查询和映射
|
||||
|
||||
2. **员工调动模块** (正确实现):
|
||||
- 文件: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffTransferMapper.xml`
|
||||
- 文件: `ruoyi-info-collection/src/main/resources/mapper/ccdi/CcdiStaffTransferMapper.xml`
|
||||
- 特点: 类似的staffName字段实现
|
||||
|
||||
### 8.2 数据库文档
|
||||
|
||||
325
doc/test-scripts/后端功能测试报告.md
Normal file
325
doc/test-scripts/后端功能测试报告.md
Normal file
@@ -0,0 +1,325 @@
|
||||
# 后端功能测试报告
|
||||
|
||||
## 测试环境
|
||||
- 后端地址: http://localhost:8080
|
||||
- Swagger 地址: http://localhost:8080/swagger-ui/index.html
|
||||
- 数据库: 116.62.17.81:3306/ccdi
|
||||
- 测试时间: 2026-02-26 02:03:10 (UTC)
|
||||
|
||||
## 测试账号
|
||||
- 用户名: admin
|
||||
- 密码: admin123
|
||||
- Token: `eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiOTJjODUzYWUtNDZjNi00ZmQ3LWExMDEtYTA5NzRmMzlmOGNkIn0.AUiHT2p-wcETEN1rZtgP8oSdx1kHWpYUT-TZmfjECON6T-p0M94mvwN1ySJmC4yeozu4VCZm13cRvkqwzH7Teg`
|
||||
|
||||
---
|
||||
|
||||
## 测试结果
|
||||
|
||||
### 1. 登录接口测试
|
||||
|
||||
**接口:** `POST /login/test`
|
||||
|
||||
**请求:**
|
||||
```bash
|
||||
curl -X POST "http://localhost:8080/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"admin123"}'
|
||||
```
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200,
|
||||
"token": "eyJhbGciOiJIUzUxMiJ9..."
|
||||
}
|
||||
```
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
---
|
||||
|
||||
### 2. 查询模型列表接口
|
||||
|
||||
**接口:** `GET /ccdi/modelParam/modelList`
|
||||
|
||||
**请求:**
|
||||
```bash
|
||||
curl -X GET "http://localhost:8080/ccdi/modelParam/modelList" \
|
||||
-H "Authorization: Bearer {token}"
|
||||
```
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200,
|
||||
"data": [
|
||||
{
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型"
|
||||
},
|
||||
{
|
||||
"modelCode": "SUSPICIOUS_FOREIGN_EXCHANGE",
|
||||
"modelName": "可疑外汇交易模型"
|
||||
},
|
||||
{
|
||||
"modelCode": "SUSPICIOUS_PART_TIME",
|
||||
"modelName": "可疑兼职模型"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**验证点:**
|
||||
- ✅ 返回3个模型
|
||||
- ✅ 包含预期的模型代码和名称
|
||||
- ✅ 响应格式正确
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
---
|
||||
|
||||
### 3. 查询模型参数列表接口
|
||||
|
||||
#### 3.1 大额交易模型参数查询
|
||||
|
||||
**接口:** `GET /ccdi/modelParam/list?modelCode=LARGE_TRANSACTION`
|
||||
|
||||
**响应数据摘要:**
|
||||
| 参数代码 | 参数名称 | 参数值 | 单位 |
|
||||
|---------|---------|--------|------|
|
||||
| SINGLE_TRANSACTION_AMOUNT | 单笔交易额 | 50000 | 元 |
|
||||
| CUMULATIVE_TRANSACTION_AMOUNT | 累计交易额 | 5000000 | 元 |
|
||||
| LARGE_CASH_DEPOSIT | 大额存现 | 200000 | 元 |
|
||||
| FREQUENT_CASH_DEPOSIT | 短时多次存现 | 100000 | 元/4小时 |
|
||||
| FREQUENT_TRANSFER | 频繁转账 | 10 | 次/日 |
|
||||
| TRANSFER_FREQUENCY | 转账频率 | 1000000 | 元/日 |
|
||||
|
||||
**验证点:**
|
||||
- ✅ 返回6个参数
|
||||
- ✅ 所有参数字段完整
|
||||
- ✅ 排序正确(sortOrder: 1-6)
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
#### 3.2 可疑外汇交易模型参数查询
|
||||
|
||||
**接口:** `GET /ccdi/modelParam/list?modelCode=SUSPICIOUS_FOREIGN_EXCHANGE`
|
||||
|
||||
**响应数据摘要:**
|
||||
| 参数代码 | 参数名称 | 参数值 | 单位 |
|
||||
|---------|---------|--------|------|
|
||||
| SINGLE_PURCHASE_AMOUNT | 单笔购汇金额 | 50000 | 美元/笔 |
|
||||
| SINGLE_SETTLEMENT_AMOUNT | 单笔结汇金额 | 50000 | 美元/笔 |
|
||||
| CROSS_BORDER_REMITTANCE | 跨境汇款金额 | 200000 | 美元/笔 |
|
||||
| MONTHLY_PURCHASE_TOTAL | 月度购汇总额 | 100000 | 美元/月 |
|
||||
| MONTHLY_SETTLEMENT_TOTAL | 月度结汇总额 | 100000 | 美元/月 |
|
||||
| FREQUENT_FOREX_TRADE | 频繁外汇交易 | 5 | 次/日 |
|
||||
|
||||
**验证点:**
|
||||
- ✅ 返回6个参数
|
||||
- ✅ 所有参数字段完整
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
#### 3.3 可疑兼职模型参数查询
|
||||
|
||||
**接口:** `GET /ccdi/modelParam/list?modelCode=SUSPICIOUS_PART_TIME`
|
||||
|
||||
**响应数据摘要:**
|
||||
| 参数代码 | 参数名称 | 参数值 | 单位 |
|
||||
|---------|---------|--------|------|
|
||||
| MONTHLY_FIXED_INCOME | 月度固定收入 | 5000 | 元/月 |
|
||||
| FIXED_COUNTERPARTY_TRANSFER | 固定对手转入 | 15000 | 元/季 |
|
||||
| SUSPICIOUS_TIME_TRANSACTION | 非工作时间交易 | 20 | 次/月 |
|
||||
|
||||
**验证点:**
|
||||
- ✅ 返回3个参数
|
||||
- ✅ 所有参数字段完整
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
---
|
||||
|
||||
### 4. 保存参数配置接口
|
||||
|
||||
#### 4.1 正常保存测试
|
||||
|
||||
**接口:** `POST /ccdi/modelParam/save`
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"projectId": 0,
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型",
|
||||
"params": [
|
||||
{
|
||||
"paramCode": "SINGLE_TRANSACTION_AMOUNT",
|
||||
"paramName": "单笔交易额",
|
||||
"paramDesc": "单笔超过该金额视为大额交易",
|
||||
"paramValue": "60000",
|
||||
"paramUnit": "元",
|
||||
"sortOrder": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"msg": "保存成功",
|
||||
"code": 200
|
||||
}
|
||||
```
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
---
|
||||
|
||||
### 5. 数据库验证
|
||||
|
||||
#### 5.1 第一次更新验证
|
||||
|
||||
**SQL:**
|
||||
```sql
|
||||
SELECT param_value, update_by, update_time
|
||||
FROM ccdi_model_param
|
||||
WHERE model_code = 'LARGE_TRANSACTION'
|
||||
AND param_code = 'SINGLE_TRANSACTION_AMOUNT';
|
||||
```
|
||||
|
||||
**结果:**
|
||||
| param_value | update_by | update_time |
|
||||
|-------------|-----------|-------------|
|
||||
| 60000 | admin | 2026-02-25 18:03:10 |
|
||||
|
||||
**验证点:**
|
||||
- ✅ param_value 已更新为 60000
|
||||
- ✅ update_by 有值 (admin)
|
||||
- ✅ update_time 有值
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
---
|
||||
|
||||
### 6. 安全性验证
|
||||
|
||||
#### 6.1 尝试修改其他字段
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"projectId": 0,
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型(恶意修改)",
|
||||
"params": [
|
||||
{
|
||||
"paramCode": "SINGLE_TRANSACTION_AMOUNT",
|
||||
"paramName": "单笔交易额(恶意修改)",
|
||||
"paramDesc": "恶意修改描述",
|
||||
"paramValue": "70000",
|
||||
"paramUnit": "美元",
|
||||
"sortOrder": 99
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**数据库验证结果:**
|
||||
| 字段 | 预期值 | 实际值 | 结果 |
|
||||
|------|--------|--------|------|
|
||||
| param_name | 单笔交易额 | 单笔交易额 | ✅ 未被修改 |
|
||||
| param_desc | 单笔超过该金额视为大额交易 | 单笔超过该金额视为大额交易 | ✅ 未被修改 |
|
||||
| param_value | 70000 | 70000 | ✅ 正确更新 |
|
||||
| param_unit | 元 | 元 | ✅ 未被修改 |
|
||||
| sort_order | 1 | 1 | ✅ 未被修改 |
|
||||
| update_by | admin | admin | ✅ 有值 |
|
||||
| update_time | 有值 | 2026-02-25 18:03:33 | ✅ 有值 |
|
||||
|
||||
**结论:**
|
||||
- ✅ 只有 param_value 字段被更新
|
||||
- ✅ 其他字段(param_name、param_desc、param_unit、sort_order)保持不变
|
||||
- ✅ 安全性验证通过
|
||||
|
||||
**状态:** ✅ 通过
|
||||
|
||||
---
|
||||
|
||||
## 接口汇总
|
||||
|
||||
| 序号 | 接口 | 方法 | 路径 | 状态 |
|
||||
|------|------|------|------|------|
|
||||
| 1 | 登录获取Token | POST | /login/test | ✅ 通过 |
|
||||
| 2 | 查询模型列表 | GET | /ccdi/modelParam/modelList | ✅ 通过 |
|
||||
| 3 | 查询模型参数(大额交易) | GET | /ccdi/modelParam/list?modelCode=LARGE_TRANSACTION | ✅ 通过 |
|
||||
| 4 | 查询模型参数(外汇交易) | GET | /ccdi/modelParam/list?modelCode=SUSPICIOUS_FOREIGN_EXCHANGE | ✅ 通过 |
|
||||
| 5 | 查询模型参数(兼职) | GET | /ccdi/modelParam/list?modelCode=SUSPICIOUS_PART_TIME | ✅ 通过 |
|
||||
| 6 | 保存参数配置 | POST | /ccdi/modelParam/save | ✅ 通过 |
|
||||
|
||||
---
|
||||
|
||||
## 测试统计
|
||||
|
||||
- **通过:** 9 个测试
|
||||
- **失败:** 0 个测试
|
||||
- **总计:** 9 个测试
|
||||
|
||||
---
|
||||
|
||||
## 结论
|
||||
|
||||
✅ **所有测试通过**
|
||||
|
||||
后端功能完全符合预期:
|
||||
1. 所有接口响应正常
|
||||
2. 数据库更新正确
|
||||
3. 审计字段自动填充
|
||||
4. 安全性验证通过(只更新 param_value 字段)
|
||||
5. 三种模型的参数查询均返回正确数据
|
||||
|
||||
---
|
||||
|
||||
## 附录: 测试命令汇总
|
||||
|
||||
```bash
|
||||
# 1. 获取Token
|
||||
curl -X POST "http://localhost:8080/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"admin123"}'
|
||||
|
||||
# 2. 查询模型列表
|
||||
curl -X GET "http://localhost:8080/ccdi/modelParam/modelList" \
|
||||
-H "Authorization: Bearer {token}"
|
||||
|
||||
# 3. 查询模型参数
|
||||
curl -X GET "http://localhost:8080/ccdi/modelParam/list?modelCode=LARGE_TRANSACTION" \
|
||||
-H "Authorization: Bearer {token}"
|
||||
|
||||
# 4. 保存参数配置
|
||||
curl -X POST "http://localhost:8080/ccdi/modelParam/save" \
|
||||
-H "Authorization: Bearer {token}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"projectId": 0,
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型",
|
||||
"params": [
|
||||
{
|
||||
"paramCode": "SINGLE_TRANSACTION_AMOUNT",
|
||||
"paramName": "单笔交易额",
|
||||
"paramDesc": "单笔超过该金额视为大额交易",
|
||||
"paramValue": "60000",
|
||||
"paramUnit": "元",
|
||||
"sortOrder": 1
|
||||
}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**测试人员:** Claude Code Agent
|
||||
**报告生成时间:** 2026-02-26 02:05:00 (UTC)
|
||||
20
doc/参数配置功能/.gitignore
vendored
Normal file
20
doc/参数配置功能/.gitignore
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# Worktrees
|
||||
.worktrees/
|
||||
|
||||
# IDE
|
||||
.idea/
|
||||
.vscode/
|
||||
*.iml
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Build
|
||||
target/
|
||||
*.class
|
||||
*.jar
|
||||
*.war
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
450
doc/参数配置功能/01-数据库设计与后端实体类创建.md
Normal file
450
doc/参数配置功能/01-数据库设计与后端实体类创建.md
Normal file
@@ -0,0 +1,450 @@
|
||||
# 模型参数配置功能 - 后端实体类创建
|
||||
|
||||
## 任务概述
|
||||
|
||||
**任务编号:** 01
|
||||
**任务名称:** 数据库设计与后端实体类创建
|
||||
**前置任务:** 无
|
||||
**预计工时:** 1.5小时
|
||||
|
||||
## 任务目标
|
||||
|
||||
创建模型参数配置功能的数据库表和初始化数据,以及所有后端实体类、DTO、VO和Maven模块配置。
|
||||
|
||||
---
|
||||
|
||||
## 开发步骤
|
||||
|
||||
### 1. 创建 Maven 模块
|
||||
|
||||
#### 1.1 创建模块目录
|
||||
|
||||
在项目根目录下创建 `ccdi-project` 模块:
|
||||
|
||||
```
|
||||
ccdi-project/
|
||||
├── pom.xml
|
||||
└── src/main/
|
||||
├── java/
|
||||
└── resources/
|
||||
```
|
||||
|
||||
#### 1.2 编写 pom.xml
|
||||
|
||||
**文件路径:** `ccdi-project/pom.xml`
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>ccdi</artifactId>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ccdi-project</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<!-- 通用工具 -->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
```
|
||||
|
||||
#### 1.3 修改根 pom.xml
|
||||
|
||||
**文件路径:** `pom.xml` (项目根目录)
|
||||
|
||||
在 `<modules>` 标签中添加:
|
||||
|
||||
```xml
|
||||
<modules>
|
||||
...
|
||||
<module>ccdi-project</module>
|
||||
</modules>
|
||||
```
|
||||
|
||||
#### 1.4 修改 ruoyi-admin/pom.xml
|
||||
|
||||
**文件路径:** `ruoyi-admin/pom.xml`
|
||||
|
||||
在 `<dependencies>` 标签中添加:
|
||||
|
||||
```xml
|
||||
<!-- 项目管理模块 -->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ccdi-project</artifactId>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 创建数据库脚本
|
||||
|
||||
#### 2.1 编写建表脚本
|
||||
|
||||
**文件路径:** `sql/ccdi_model_param.sql`
|
||||
|
||||
```sql
|
||||
-- ----------------------------
|
||||
-- 1. 创建模型参数配置表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `ccdi_model_param`;
|
||||
CREATE TABLE `ccdi_model_param` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`project_id` bigint DEFAULT 0 COMMENT '项目ID(0表示默认参数,其他值为具体项目ID)',
|
||||
`model_code` varchar(100) NOT NULL COMMENT '模型编码',
|
||||
`model_name` varchar(100) NOT NULL COMMENT '模型名称',
|
||||
`param_code` varchar(100) NOT NULL COMMENT '参数编码',
|
||||
`param_name` varchar(100) NOT NULL COMMENT '监测项名称',
|
||||
`param_desc` varchar(500) DEFAULT NULL COMMENT '参数描述',
|
||||
`param_value` varchar(200) NOT NULL COMMENT '参数值',
|
||||
`param_unit` varchar(50) DEFAULT NULL COMMENT '参数单位',
|
||||
`sort_order` int DEFAULT 0 COMMENT '排序号(参数展示顺序)',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_project_model_param` (`project_id`, `model_code`, `param_code`) COMMENT '同一项目下模型参数唯一',
|
||||
KEY `idx_project_id` (`project_id`) COMMENT '项目ID索引',
|
||||
KEY `idx_model_code` (`model_code`) COMMENT '模型编码索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模型参数配置表';
|
||||
|
||||
-- ----------------------------
|
||||
-- 2. 初始化大额交易模型参数
|
||||
-- ----------------------------
|
||||
INSERT INTO ccdi_model_param (project_id, model_code, model_name, param_code, param_name, param_desc, param_value, param_unit, sort_order, create_by, remark) VALUES
|
||||
(0, 'LARGE_TRANSACTION', '大额交易模型', 'SINGLE_TRANSACTION_AMOUNT', '单笔交易额', '单笔超过该金额视为大额交易', '50000', '元', 1, 'admin', '系统默认参数'),
|
||||
(0, 'LARGE_TRANSACTION', '大额交易模型', 'CUMULATIVE_TRANSACTION_AMOUNT', '累计交易额', '年累计交易额超过该金额', '5000000', '元', 2, 'admin', '系统默认参数'),
|
||||
(0, 'LARGE_TRANSACTION', '大额交易模型', 'LARGE_CASH_DEPOSIT', '大额存现', '单笔存现金额超过', '200000', '元', 3, 'admin', '系统默认参数'),
|
||||
(0, 'LARGE_TRANSACTION', '大额交易模型', 'FREQUENT_CASH_DEPOSIT', '短时多次存现', '24小时内累计存现超过', '100000', '元/4小时', 4, 'admin', '系统默认参数'),
|
||||
(0, 'LARGE_TRANSACTION', '大额交易模型', 'FREQUENT_TRANSFER', '频繁转账', '单日转账次数超过', '10', '次/日', 5, 'admin', '系统默认参数'),
|
||||
(0, 'LARGE_TRANSACTION', '大额交易模型', 'TRANSFER_FREQUENCY', '转账频率', '单日累计转账金额超过', '1000000', '元/日', 6, 'admin', '系统默认参数');
|
||||
|
||||
-- ----------------------------
|
||||
-- 3. 初始化可疑兼职模型参数
|
||||
-- ----------------------------
|
||||
INSERT INTO ccdi_model_param (project_id, model_code, model_name, param_code, param_name, param_desc, param_value, param_unit, sort_order, create_by, remark) VALUES
|
||||
(0, 'SUSPICIOUS_PART_TIME', '可疑兼职模型', 'MONTHLY_FIXED_INCOME', '月度固定收入', '除本行工资外,每月固定收入超过', '5000', '元/月', 1, 'admin', '系统默认参数'),
|
||||
(0, 'SUSPICIOUS_PART_TIME', '可疑兼职模型', 'FIXED_COUNTERPARTY_TRANSFER', '固定对手转入', '每季从固定交易对手转入金额', '15000', '元/季', 2, 'admin', '系统默认参数'),
|
||||
(0, 'SUSPICIOUS_PART_TIME', '可疑兼职模型', 'SUSPICIOUS_TIME_TRANSACTION', '非工作时间交易', '非工作时间(22:00-06:00)交易次数', '20', '次/月', 3, 'admin', '系统默认参数');
|
||||
|
||||
-- ----------------------------
|
||||
-- 4. 初始化可疑外汇交易模型参数
|
||||
-- ----------------------------
|
||||
INSERT INTO ccdi_model_param (project_id, model_code, model_name, param_code, param_name, param_desc, param_value, param_unit, sort_order, create_by, remark) VALUES
|
||||
(0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'SINGLE_PURCHASE_AMOUNT', '单笔购汇金额', '单笔购汇超过该金额', '50000', '美元/笔', 1, 'admin', '系统默认参数'),
|
||||
(0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'SINGLE_SETTLEMENT_AMOUNT', '单笔结汇金额', '单笔结汇超过该金额', '50000', '美元/笔', 2, 'admin', '系统默认参数'),
|
||||
(0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'CROSS_BORDER_REMITTANCE', '跨境汇款金额', '跨境汇款金额超过', '200000', '美元/笔', 3, 'admin', '系统默认参数'),
|
||||
(0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'MONTHLY_PURCHASE_TOTAL', '月度购汇总额', '月度购汇总额超过', '100000', '美元/月', 4, 'admin', '系统默认参数'),
|
||||
(0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'MONTHLY_SETTLEMENT_TOTAL', '月度结汇总额', '月度结汇总额超过', '100000', '美元/月', 5, 'admin', '系统默认参数'),
|
||||
(0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'FREQUENT_FOREX_TRADE', '频繁外汇交易', '单日外汇交易次数超过', '5', '次/日', 6, 'admin', '系统默认参数');
|
||||
```
|
||||
|
||||
#### 2.2 执行数据库脚本
|
||||
|
||||
**使用MCP连接数据库执行:**
|
||||
|
||||
```bash
|
||||
# 通过MCP工具连接数据库并执行SQL脚本
|
||||
# 注意:不使用命令行的mysql,使用MCP连接项目配置文件中的数据库
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 创建实体类
|
||||
|
||||
#### 3.1 创建包结构
|
||||
|
||||
```
|
||||
ccdi-project/src/main/java/com/ruoyi/ccdi/project/
|
||||
├── domain/
|
||||
│ ├── CcdiModelParam.java
|
||||
│ ├── dto/
|
||||
│ └── vo/
|
||||
```
|
||||
|
||||
#### 3.2 创建 Entity
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/CcdiModelParam.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 模型参数配置 ccdi_model_param
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_model_param")
|
||||
public class CcdiModelParam {
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/** 项目ID(0表示默认参数) */
|
||||
private Long projectId;
|
||||
|
||||
/** 模型编码 */
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
private String modelName;
|
||||
|
||||
/** 参数编码 */
|
||||
private String paramCode;
|
||||
|
||||
/** 监测项名称 */
|
||||
private String paramName;
|
||||
|
||||
/** 参数描述 */
|
||||
private String paramDesc;
|
||||
|
||||
/** 参数值 */
|
||||
private String paramValue;
|
||||
|
||||
/** 参数单位 */
|
||||
private String paramUnit;
|
||||
|
||||
/** 排序号 */
|
||||
private Integer sortOrder;
|
||||
|
||||
/** 创建者 */
|
||||
private String createBy;
|
||||
|
||||
/** 创建时间 */
|
||||
private Date createTime;
|
||||
|
||||
/** 更新者 */
|
||||
private String updateBy;
|
||||
|
||||
/** 更新时间 */
|
||||
private Date updateTime;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 创建 DTO
|
||||
|
||||
#### 4.1 查询 DTO
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/ModelParamQueryDTO.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* 模型参数查询DTO
|
||||
*/
|
||||
@Data
|
||||
public class ModelParamQueryDTO {
|
||||
|
||||
/** 项目ID */
|
||||
private Long projectId;
|
||||
|
||||
/** 模型编码 */
|
||||
@NotBlank(message = "模型编码不能为空")
|
||||
private String modelCode;
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.2 保存 DTO
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/ModelParamSaveDTO.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数保存DTO
|
||||
*/
|
||||
@Data
|
||||
public class ModelParamSaveDTO {
|
||||
|
||||
/** 项目ID */
|
||||
private Long projectId;
|
||||
|
||||
/** 模型编码 */
|
||||
@NotBlank(message = "模型编码不能为空")
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
@NotBlank(message = "模型名称不能为空")
|
||||
private String modelName;
|
||||
|
||||
/** 参数列表 */
|
||||
@NotNull(message = "参数列表不能为空")
|
||||
private List<ParamItem> params;
|
||||
|
||||
@Data
|
||||
public static class ParamItem {
|
||||
|
||||
/** 参数编码 */
|
||||
@NotBlank(message = "参数编码不能为空")
|
||||
private String paramCode;
|
||||
|
||||
/** 监测项名称 */
|
||||
private String paramName;
|
||||
|
||||
/** 参数描述 */
|
||||
private String paramDesc;
|
||||
|
||||
/** 参数值 - 唯一可修改字段 */
|
||||
@NotBlank(message = "参数值不能为空")
|
||||
private String paramValue;
|
||||
|
||||
/** 参数单位 */
|
||||
private String paramUnit;
|
||||
|
||||
/** 排序号 */
|
||||
private Integer sortOrder;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 创建 VO
|
||||
|
||||
#### 5.1 参数 VO
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/ModelParamVO.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 模型参数VO
|
||||
*/
|
||||
@Data
|
||||
public class ModelParamVO {
|
||||
|
||||
/** 主键ID */
|
||||
private Long id;
|
||||
|
||||
/** 模型编码 */
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
private String modelName;
|
||||
|
||||
/** 参数编码 */
|
||||
private String paramCode;
|
||||
|
||||
/** 监测项名称 */
|
||||
private String paramName;
|
||||
|
||||
/** 参数描述 */
|
||||
private String paramDesc;
|
||||
|
||||
/** 参数值 */
|
||||
private String paramValue;
|
||||
|
||||
/** 参数单位 */
|
||||
private String paramUnit;
|
||||
|
||||
/** 排序号 */
|
||||
private Integer sortOrder;
|
||||
}
|
||||
```
|
||||
|
||||
#### 5.2 模型列表 VO
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/ModelListVO.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 模型列表VO
|
||||
*/
|
||||
@Data
|
||||
public class ModelListVO {
|
||||
|
||||
/** 模型编码 */
|
||||
private String modelCode;
|
||||
|
||||
/** 模型名称 */
|
||||
private String modelName;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 验证清单
|
||||
|
||||
完成以下验证后,本任务才算完成:
|
||||
|
||||
**数据库部分:**
|
||||
|
||||
- [ ] sql/ccdi_model_param.sql 脚本创建完成
|
||||
- [ ] 数据库表创建成功
|
||||
- [ ] 初始化数据插入成功(3个模型共15条参数)
|
||||
|
||||
**后端部分:**
|
||||
|
||||
- [ ] ccdi-project 模块创建成功
|
||||
- [ ] 根 pom.xml 已添加模块
|
||||
- [ ] ruoyi-admin/pom.xml 已添加依赖
|
||||
- [ ] CcdiModelParam 实体类创建完成
|
||||
- [ ] ModelParamQueryDTO 创建完成
|
||||
- [ ] ModelParamSaveDTO 创建完成
|
||||
- [ ] ModelParamVO 创建完成
|
||||
- [ ] ModelListVO 创建完成
|
||||
- [ ] 项目编译无错误: `mvn clean compile`
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
**数据库部分:**
|
||||
|
||||
1. **执行顺序**: 必须先创建数据库表,再创建实体类
|
||||
2. **使用MCP**: 使用MCP连接数据库执行SQL,不使用命令行mysql
|
||||
3. **数据验证**: 执行后验证3个模型的15条参数数据是否正确插入
|
||||
|
||||
**后端部分:**
|
||||
|
||||
1. **包名规范**: 必须使用 `com.ruoyi.ccdi.project` 作为基础包名
|
||||
2. **注解使用**: 实体类使用 `@Data` 注解,不继承 BaseEntity
|
||||
3. **字段验证**: DTO 中必须添加验证注解 `@NotBlank`、`@NotNull`
|
||||
4. **注释完整**: 所有字段必须添加注释说明
|
||||
5. **导入语句**: 禁止使用全限定类名,必须使用 import 语句
|
||||
|
||||
---
|
||||
|
||||
## 下一步
|
||||
|
||||
完成本任务后,进入下一个任务: **02-后端业务逻辑开发.md**
|
||||
420
doc/参数配置功能/02-后端业务逻辑开发.md
Normal file
420
doc/参数配置功能/02-后端业务逻辑开发.md
Normal file
@@ -0,0 +1,420 @@
|
||||
# 模型参数配置功能 - 后端业务逻辑开发
|
||||
|
||||
## 任务概述
|
||||
|
||||
**任务编号:** 02
|
||||
**任务名称:** 后端业务逻辑开发
|
||||
**前置任务:** 01-后端实体类创建
|
||||
**预计工时:** 2小时
|
||||
|
||||
## 任务目标
|
||||
|
||||
开发模型参数配置功能的 Mapper 层、Service 层和 Controller 层,实现查询模型列表、查询参数列表、保存参数配置三个核心接口。
|
||||
|
||||
---
|
||||
|
||||
## 开发步骤
|
||||
|
||||
### 1. 创建 Mapper 接口
|
||||
|
||||
#### 1.1 创建 Mapper 接口
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiModelParamMapper.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数Mapper
|
||||
*/
|
||||
public interface CcdiModelParamMapper extends BaseMapper<CcdiModelParam> {
|
||||
|
||||
/**
|
||||
* 查询指定项目和模型的参数列表
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @param modelCode 模型编码
|
||||
* @return 参数列表
|
||||
*/
|
||||
List<CcdiModelParam> selectByProjectAndModel(
|
||||
@Param("projectId") Long projectId,
|
||||
@Param("modelCode") String modelCode
|
||||
);
|
||||
|
||||
/**
|
||||
* 查询所有模型列表(去重)
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @return 模型列表
|
||||
*/
|
||||
List<CcdiModelParam> selectDistinctModels(@Param("projectId") Long projectId);
|
||||
|
||||
/**
|
||||
* 批量更新参数值(只更新param_value字段)
|
||||
*
|
||||
* @param list 参数列表
|
||||
* @return 更新数量
|
||||
*/
|
||||
int batchUpdateParamValues(@Param("list") List<CcdiModelParam> list);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 创建 Mapper XML
|
||||
|
||||
#### 2.1 创建资源目录
|
||||
|
||||
```
|
||||
ccdi-project/src/main/resources/
|
||||
└── mapper/
|
||||
└── ccdi/
|
||||
└── project/
|
||||
```
|
||||
|
||||
#### 2.2 编写 Mapper XML
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiModelParamMapper.xml`
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.ccdi.project.mapper.CcdiModelParamMapper">
|
||||
|
||||
<resultMap id="ModelParamResult" type="com.ruoyi.ccdi.project.domain.CcdiModelParam">
|
||||
<id property="id" column="id"/>
|
||||
<result property="projectId" column="project_id"/>
|
||||
<result property="modelCode" column="model_code"/>
|
||||
<result property="modelName" column="model_name"/>
|
||||
<result property="paramCode" column="param_code"/>
|
||||
<result property="paramName" column="param_name"/>
|
||||
<result property="paramDesc" column="param_desc"/>
|
||||
<result property="paramValue" column="param_value"/>
|
||||
<result property="paramUnit" column="param_unit"/>
|
||||
<result property="sortOrder" column="sort_order"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectModelParamVo">
|
||||
select id, project_id, model_code, model_name, param_code, param_name, param_desc,
|
||||
param_value, param_unit, sort_order, create_by, create_time, update_by, update_time, remark
|
||||
from ccdi_model_param
|
||||
</sql>
|
||||
|
||||
<select id="selectByProjectAndModel" resultMap="ModelParamResult">
|
||||
<include refid="selectModelParamVo"/>
|
||||
where project_id = #{projectId} and model_code = #{modelCode}
|
||||
order by sort_order asc
|
||||
</select>
|
||||
|
||||
<select id="selectDistinctModels" resultMap="ModelParamResult">
|
||||
select distinct model_code, model_name
|
||||
from ccdi_model_param
|
||||
where project_id = #{projectId}
|
||||
order by model_code
|
||||
</select>
|
||||
|
||||
<!-- 关键:只更新 param_value 字段 -->
|
||||
<update id="batchUpdateParamValues">
|
||||
<foreach collection="list" item="item" separator=";">
|
||||
update ccdi_model_param
|
||||
set param_value = #{item.paramValue},
|
||||
update_by = #{item.updateBy},
|
||||
update_time = sysdate()
|
||||
where id = #{item.id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 创建 Service 接口
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiModelParamService.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.service;
|
||||
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数Service
|
||||
*/
|
||||
public interface ICcdiModelParamService {
|
||||
|
||||
/**
|
||||
* 查询模型列表
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @return 模型列表
|
||||
*/
|
||||
List<ModelListVO> selectModelList(Long projectId);
|
||||
|
||||
/**
|
||||
* 查询模型参数列表
|
||||
*
|
||||
* @param queryDTO 查询条件
|
||||
* @return 参数列表
|
||||
*/
|
||||
List<ModelParamVO> selectParamList(ModelParamQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 保存模型参数(只更新阈值)
|
||||
*
|
||||
* @param saveDTO 保存参数
|
||||
*/
|
||||
void saveParams(ModelParamSaveDTO saveDTO);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 创建 Service 实现
|
||||
|
||||
#### 4.1 创建实现类目录
|
||||
|
||||
```
|
||||
ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/
|
||||
└── impl/
|
||||
```
|
||||
|
||||
#### 4.2 编写 Service 实现
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImpl.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.ccdi.project.domain.CcdiModelParam;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import com.ruoyi.ccdi.project.mapper.CcdiModelParamMapper;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiModelParamService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数Service实现
|
||||
*/
|
||||
@Service
|
||||
public class CcdiModelParamServiceImpl implements ICcdiModelParamService {
|
||||
|
||||
@Resource
|
||||
private CcdiModelParamMapper modelParamMapper;
|
||||
|
||||
@Override
|
||||
public List<ModelListVO> selectModelList(Long projectId) {
|
||||
if (projectId == null) {
|
||||
projectId = 0L; // 默认查询系统级参数
|
||||
}
|
||||
|
||||
List<ModelListVO> result = new ArrayList<>();
|
||||
List<CcdiModelParam> params = modelParamMapper.selectDistinctModels(projectId);
|
||||
|
||||
params.forEach(param -> {
|
||||
ModelListVO vo = new ModelListVO();
|
||||
vo.setModelCode(param.getModelCode());
|
||||
vo.setModelName(param.getModelName());
|
||||
result.add(vo);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ModelParamVO> selectParamList(ModelParamQueryDTO queryDTO) {
|
||||
Long projectId = queryDTO.getProjectId();
|
||||
if (projectId == null) {
|
||||
projectId = 0L;
|
||||
}
|
||||
|
||||
List<CcdiModelParam> params = modelParamMapper.selectByProjectAndModel(
|
||||
projectId,
|
||||
queryDTO.getModelCode()
|
||||
);
|
||||
|
||||
List<ModelParamVO> result = new ArrayList<>();
|
||||
params.forEach(param -> {
|
||||
ModelParamVO vo = new ModelParamVO();
|
||||
BeanUtils.copyProperties(param, vo);
|
||||
result.add(vo);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveParams(ModelParamSaveDTO saveDTO) {
|
||||
Long projectId = saveDTO.getProjectId();
|
||||
if (projectId == null) {
|
||||
projectId = 0L;
|
||||
}
|
||||
|
||||
String username = SecurityUtils.getUsername();
|
||||
Date now = new Date();
|
||||
|
||||
// 查询现有参数
|
||||
List<CcdiModelParam> existingParams = modelParamMapper.selectByProjectAndModel(
|
||||
projectId,
|
||||
saveDTO.getModelCode()
|
||||
);
|
||||
|
||||
if (existingParams.isEmpty()) {
|
||||
throw new ServiceException("未找到模型参数配置");
|
||||
}
|
||||
|
||||
// 准备更新列表 - 只更新 param_value 字段
|
||||
List<CcdiModelParam> updateList = new ArrayList<>();
|
||||
for (ModelParamSaveDTO.ParamItem item : saveDTO.getParams()) {
|
||||
CcdiModelParam existing = existingParams.stream()
|
||||
.filter(p -> p.getParamCode().equals(item.getParamCode()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (existing != null) {
|
||||
// ⚠️ 关键:只修改 param_value 字段
|
||||
CcdiModelParam updateParam = new CcdiModelParam();
|
||||
updateParam.setId(existing.getId());
|
||||
updateParam.setParamValue(item.getParamValue()); // 只更新阈值
|
||||
updateParam.setUpdateBy(username);
|
||||
updateParam.setUpdateTime(now);
|
||||
updateList.add(updateParam);
|
||||
}
|
||||
}
|
||||
|
||||
if (!updateList.isEmpty()) {
|
||||
modelParamMapper.batchUpdateParamValues(updateList);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 创建 Controller
|
||||
|
||||
**文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiModelParamController.java`
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.project.controller;
|
||||
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamQueryDTO;
|
||||
import com.ruoyi.ccdi.project.domain.dto.ModelParamSaveDTO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelListVO;
|
||||
import com.ruoyi.ccdi.project.domain.vo.ModelParamVO;
|
||||
import com.ruoyi.ccdi.project.service.ICcdiModelParamService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 模型参数配置Controller
|
||||
*/
|
||||
@Tag(name = "模型参数配置")
|
||||
@RestController
|
||||
@RequestMapping("/ccdi/modelParam")
|
||||
public class CcdiModelParamController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private ICcdiModelParamService modelParamService;
|
||||
|
||||
/**
|
||||
* 查询模型列表
|
||||
*/
|
||||
@Operation(summary = "查询模型列表")
|
||||
@GetMapping("/modelList")
|
||||
public AjaxResult listModels(@RequestParam(required = false) Long projectId) {
|
||||
List<ModelListVO> list = modelParamService.selectModelList(projectId);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询模型参数列表
|
||||
*/
|
||||
@Operation(summary = "查询模型参数列表")
|
||||
@GetMapping("/list")
|
||||
public AjaxResult list(@Validated ModelParamQueryDTO queryDTO) {
|
||||
List<ModelParamVO> list = modelParamService.selectParamList(queryDTO);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存模型参数(只更新阈值)
|
||||
*/
|
||||
@Operation(summary = "保存模型参数")
|
||||
@Log(title = "模型参数配置", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/save")
|
||||
public AjaxResult save(@Validated @RequestBody ModelParamSaveDTO saveDTO) {
|
||||
modelParamService.saveParams(saveDTO);
|
||||
return success("保存成功");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 验证清单
|
||||
|
||||
完成以下验证后,本任务才算完成:
|
||||
|
||||
- [ ] CcdiModelParamMapper 接口创建完成
|
||||
- [ ] CcdiModelParamMapper.xml 创建完成
|
||||
- [ ] ICcdiModelParamService 接口创建完成
|
||||
- [ ] CcdiModelParamServiceImpl 实现类创建完成
|
||||
- [ ] CcdiModelParamController 创建完成
|
||||
- [ ] 所有类使用 import 导入,无全限定类名
|
||||
- [ ] Service 使用 @Resource 注入
|
||||
- [ ] Controller 添加了 Swagger 注解
|
||||
- [ ] 项目编译无错误: `mvn clean compile`
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **Mapper XML 位置**: 必须放在 `resources/mapper/ccdi/project/` 目录下
|
||||
2. **批量更新**: 使用 `separator=";"` 实现批量更新
|
||||
3. **只更新阈值**: UPDATE 语句只更新 `param_value` 字段
|
||||
4. **事务管理**: Service 实现类必须添加 `@Transactional` 注解
|
||||
5. **异常处理**: 使用 `ServiceException` 抛出业务异常
|
||||
6. **Swagger 文档**: Controller 必须添加 `@Tag` 和 `@Operation` 注解
|
||||
|
||||
---
|
||||
|
||||
## 下一步
|
||||
|
||||
完成本任务后,进入下一个任务: **03-后端功能测试.md**
|
||||
353
doc/参数配置功能/03-后端功能测试.md
Normal file
353
doc/参数配置功能/03-后端功能测试.md
Normal file
@@ -0,0 +1,353 @@
|
||||
# 模型参数配置功能 - 后端功能测试
|
||||
|
||||
## 任务概述
|
||||
|
||||
**任务编号:** 03
|
||||
**任务名称:** 后端功能测试
|
||||
**前置任务:** 02-后端业务逻辑开发
|
||||
**预计工时:** 1小时
|
||||
|
||||
## 任务目标
|
||||
|
||||
启动后端服务,使用 Swagger 测试所有接口,确保功能正常。
|
||||
|
||||
---
|
||||
|
||||
## 开发步骤
|
||||
|
||||
### 1. 启动后端服务
|
||||
|
||||
#### 1.1 编译项目
|
||||
|
||||
```bash
|
||||
# 在项目根目录执行
|
||||
mvn clean compile
|
||||
```
|
||||
|
||||
#### 1.2 启动应用
|
||||
|
||||
**方式一:使用 Maven**
|
||||
|
||||
```bash
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
**方式二:使用启动脚本**
|
||||
|
||||
```bash
|
||||
# Windows
|
||||
ry.bat
|
||||
|
||||
# Linux/Mac
|
||||
./ry.sh start
|
||||
```
|
||||
|
||||
#### 1.3 验证启动成功
|
||||
|
||||
访问: http://localhost:8080
|
||||
|
||||
看到若依登录页面即表示启动成功。
|
||||
|
||||
---
|
||||
|
||||
### 2. 获取测试 Token
|
||||
|
||||
#### 2.1 登录获取 Token
|
||||
|
||||
**请求地址:**
|
||||
|
||||
```
|
||||
POST http://localhost:8080/login/test?username=admin&password=admin123
|
||||
```
|
||||
|
||||
**使用 curl:**
|
||||
|
||||
```bash
|
||||
curl -X POST "http://localhost:8080/login/test?username=admin&password=admin123"
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200,
|
||||
"data": {
|
||||
"token": "eyJhbGciOiJIUzUxMiJ9..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**记录 Token:** 将返回的 token 值保存,后续测试需要使用。
|
||||
|
||||
---
|
||||
|
||||
### 3. Swagger 接口测试
|
||||
|
||||
#### 3.1 访问 Swagger UI
|
||||
|
||||
浏览器访问: http://localhost:8080/swagger-ui/index.html
|
||||
|
||||
#### 3.2 配置 Authorization
|
||||
|
||||
1. 点击右上角 "Authorize" 按钮
|
||||
2. 在弹出框中输入: `Bearer <你的token>`
|
||||
3. 点击 "Authorize" 确认
|
||||
|
||||
#### 3.3 测试接口1: 查询模型列表
|
||||
|
||||
**接口路径:** `GET /ccdi/modelParam/modelList`
|
||||
|
||||
**测试步骤:**
|
||||
|
||||
1. 在 Swagger UI 中找到 "模型参数配置" 分组
|
||||
2. 点击 `GET /ccdi/modelParam/modelList` 接口
|
||||
3. 点击 "Try it out"
|
||||
4. 参数 `projectId` 留空(默认查询系统参数)
|
||||
5. 点击 "Execute"
|
||||
|
||||
**预期响应:**
|
||||
|
||||
```json
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200,
|
||||
"data": [
|
||||
{
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型"
|
||||
},
|
||||
{
|
||||
"modelCode": "SUSPICIOUS_FOREIGN_EXCHANGE",
|
||||
"modelName": "可疑外汇交易模型"
|
||||
},
|
||||
{
|
||||
"modelCode": "SUSPICIOUS_PART_TIME",
|
||||
"modelName": "可疑兼职模型"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.4 测试接口2: 查询模型参数列表
|
||||
|
||||
**接口路径:** `GET /ccdi/modelParam/list`
|
||||
|
||||
**测试步骤:**
|
||||
|
||||
1. 点击 `GET /ccdi/modelParam/list` 接口
|
||||
2. 点击 "Try it out"
|
||||
3. 参数填写:
|
||||
- `modelCode`: `LARGE_TRANSACTION`
|
||||
- `projectId`: 留空
|
||||
4. 点击 "Execute"
|
||||
|
||||
**预期响应:**
|
||||
|
||||
```json
|
||||
{
|
||||
"msg": "操作成功",
|
||||
"code": 200,
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型",
|
||||
"paramCode": "SINGLE_TRANSACTION_AMOUNT",
|
||||
"paramName": "单笔交易额",
|
||||
"paramDesc": "单笔超过该金额视为大额交易",
|
||||
"paramValue": "50000",
|
||||
"paramUnit": "元",
|
||||
"sortOrder": 1
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.5 测试接口3: 保存参数配置
|
||||
|
||||
**接口路径:** `POST /ccdi/modelParam/save`
|
||||
|
||||
**测试步骤:**
|
||||
|
||||
1. 点击 `POST /ccdi/modelParam/save` 接口
|
||||
2. 点击 "Try it out"
|
||||
3. 在 Request body 中填写:
|
||||
|
||||
```json
|
||||
{
|
||||
"projectId": 0,
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型",
|
||||
"params": [
|
||||
{
|
||||
"paramCode": "SINGLE_TRANSACTION_AMOUNT",
|
||||
"paramName": "单笔交易额",
|
||||
"paramDesc": "单笔超过该金额视为大额交易",
|
||||
"paramValue": "60000",
|
||||
"paramUnit": "元",
|
||||
"sortOrder": 1
|
||||
},
|
||||
{
|
||||
"paramCode": "CUMULATIVE_TRANSACTION_AMOUNT",
|
||||
"paramName": "累计交易额",
|
||||
"paramDesc": "年累计交易额超过该金额",
|
||||
"paramValue": "6000000",
|
||||
"paramUnit": "元",
|
||||
"sortOrder": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
4. 点击 "Execute"
|
||||
|
||||
**预期响应:**
|
||||
|
||||
```json
|
||||
{
|
||||
"msg": "保存成功",
|
||||
"code": 200
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.6 验证数据已更新
|
||||
|
||||
再次调用 `GET /ccdi/modelParam/list` 接口,确认参数值已更新为 60000 和 6000000。
|
||||
|
||||
---
|
||||
|
||||
### 4. 数据库验证
|
||||
|
||||
#### 4.1 查询参数数据
|
||||
|
||||
```sql
|
||||
-- 查询大额交易模型的参数
|
||||
SELECT id, model_code, param_name, param_value, update_by, update_time
|
||||
FROM ccdi_model_param
|
||||
WHERE model_code = 'LARGE_TRANSACTION'
|
||||
ORDER BY sort_order;
|
||||
```
|
||||
|
||||
**预期结果:**
|
||||
|
||||
```
|
||||
id | model_code | param_name | param_value | update_by | update_time
|
||||
---|---------------------|-------------------------|-------------|-----------|------------------
|
||||
1 | LARGE_TRANSACTION | 单笔交易额 | 60000 | admin | 2026-02-26 10:30:00
|
||||
2 | LARGE_TRANSACTION | 累计交易额 | 6000000 | admin | 2026-02-26 10:30:00
|
||||
3 | LARGE_TRANSACTION | 大额存现 | 200000 | NULL | 2026-02-26 09:00:00
|
||||
4 | LARGE_TRANSACTION | 短时多次存现 | 100000 | NULL | 2026-02-26 09:00:00
|
||||
5 | LARGE_TRANSACTION | 频繁转账 | 10 | NULL | 2026-02-26 09:00:00
|
||||
6 | LARGE_TRANSACTION | 转账频率 | 1000000 | NULL | 2026-02-26 09:00:00
|
||||
```
|
||||
|
||||
验证点:
|
||||
|
||||
- ✅ 只有被修改的参数有 `update_by` 和 `update_time`
|
||||
- ✅ 参数值已更新为提交的值
|
||||
- ✅ 其他未修改的参数保持原值
|
||||
|
||||
---
|
||||
|
||||
### 5. 安全性验证
|
||||
|
||||
#### 5.1 验证只能修改阈值
|
||||
|
||||
尝试在保存接口中修改其他字段(如 param_name):
|
||||
|
||||
```json
|
||||
{
|
||||
"projectId": 0,
|
||||
"modelCode": "LARGE_TRANSACTION",
|
||||
"modelName": "大额交易模型",
|
||||
"params": [
|
||||
{
|
||||
"paramCode": "SINGLE_TRANSACTION_AMOUNT",
|
||||
"paramName": "修改后的名称", // 尝试修改名称
|
||||
"paramValue": "70000",
|
||||
"paramUnit": "修改后的单位", // 尝试修改单位
|
||||
"sortOrder": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**验证数据库:**
|
||||
|
||||
```sql
|
||||
SELECT param_name, param_unit, param_value
|
||||
FROM ccdi_model_param
|
||||
WHERE param_code = 'SINGLE_TRANSACTION_AMOUNT';
|
||||
```
|
||||
|
||||
**预期结果:**
|
||||
|
||||
- ✅ `param_value` 已更新为 70000
|
||||
- ✅ `param_name` 仍为 "单笔交易额" (未改变)
|
||||
- ✅ `param_unit` 仍为 "元" (未改变)
|
||||
|
||||
---
|
||||
|
||||
## 测试清单
|
||||
|
||||
完成以下测试后,本任务才算完成:
|
||||
|
||||
- [ ] 后端服务启动成功
|
||||
- [ ] 获取 Token 成功
|
||||
- [ ] Swagger 测试:查询模型列表接口正常
|
||||
- [ ] Swagger 测试:查询参数列表接口正常
|
||||
- [ ] Swagger 测试:保存参数接口正常
|
||||
- [ ] 数据库验证:数据已正确更新
|
||||
- [ ] 安全性验证:只能修改阈值字段
|
||||
|
||||
---
|
||||
|
||||
## 测试报告模板
|
||||
|
||||
完成测试后,请填写以下测试报告:
|
||||
|
||||
### 测试报告
|
||||
|
||||
**测试日期:** 2026-02-26
|
||||
**测试人员:** ___________
|
||||
**测试环境:**
|
||||
|
||||
- 数据库地址: ___________
|
||||
- 后端地址: http://localhost:8080
|
||||
|
||||
**测试结果:**
|
||||
|
||||
| 测试项 | 预期结果 | 实际结果 | 是否通过 |
|
||||
|----------|--------|------|------|
|
||||
| 查询模型列表 | 返回3个模型 | | |
|
||||
| 查询大额交易参数 | 返回6个参数 | | |
|
||||
| 保存参数配置 | 返回成功 | | |
|
||||
| 数据更新验证 | 数据已更新 | | |
|
||||
| 安全性验证 | 只更新阈值 | | |
|
||||
|
||||
**发现问题:**
|
||||
|
||||
- (如有问题请记录)
|
||||
|
||||
**结论:**
|
||||
|
||||
- [ ] 通过
|
||||
- [ ] 不通过
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **测试顺序**: 必须按照测试步骤的顺序执行
|
||||
2. **Token 有效期**: Token 有效期 30 分钟,过期需重新获取
|
||||
3. **数据库连接**: 确保数据库连接配置正确
|
||||
4. **端口占用**: 确保 8080 端口未被占用
|
||||
5. **日志查看**: 如遇问题,查看后端日志排查
|
||||
|
||||
---
|
||||
|
||||
## 下一步
|
||||
|
||||
完成本任务后,进入下一个任务: **04-前端代码开发.md**
|
||||
549
doc/参数配置功能/04-前端代码开发.md
Normal file
549
doc/参数配置功能/04-前端代码开发.md
Normal file
@@ -0,0 +1,549 @@
|
||||
# 模型参数配置功能 - 前端代码开发
|
||||
|
||||
## 任务概述
|
||||
|
||||
**任务编号:** 04
|
||||
**任务名称:** 前端代码开发
|
||||
**前置任务:** 03-后端功能测试
|
||||
**预计工时:** 2小时
|
||||
|
||||
## 任务目标
|
||||
|
||||
开发模型参数配置功能的前端页面,包括 API 请求文件和 Vue 页面组件,实现模型选择、参数查询、参数修改、保存配置等功能。
|
||||
|
||||
---
|
||||
|
||||
## 开发步骤
|
||||
|
||||
### 1. 创建 API 文件
|
||||
|
||||
#### 1.1 创建 API 目录
|
||||
|
||||
```
|
||||
ruoyi-ui/src/api/
|
||||
└── ccdi/
|
||||
```
|
||||
|
||||
#### 1.2 编写 API 文件
|
||||
|
||||
**文件路径:** `ruoyi-ui/src/api/ccdi/modelParam.js`
|
||||
|
||||
```javascript
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 查询模型列表
|
||||
* @param {Object} query - 查询参数
|
||||
* @param {Number} query.projectId - 项目ID
|
||||
*/
|
||||
export function listModels(query) {
|
||||
return request({
|
||||
url: '/ccdi/modelParam/modelList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询模型参数列表
|
||||
* @param {Object} query - 查询参数
|
||||
* @param {Number} query.projectId - 项目ID
|
||||
* @param {String} query.modelCode - 模型编码
|
||||
*/
|
||||
export function listParams(query) {
|
||||
return request({
|
||||
url: '/ccdi/modelParam/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存模型参数
|
||||
* @param {Object} data - 保存数据
|
||||
*/
|
||||
export function saveParams(data) {
|
||||
return request({
|
||||
url: '/ccdi/modelParam/save',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 创建页面组件
|
||||
|
||||
#### 2.1 创建页面目录
|
||||
|
||||
```
|
||||
ruoyi-ui/src/views/
|
||||
└── ccdi/
|
||||
└── modelParam/
|
||||
```
|
||||
|
||||
#### 2.2 编写页面组件
|
||||
|
||||
**文件路径:** `ruoyi-ui/src/views/ccdi/modelParam/index.vue`
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 顶部标题 -->
|
||||
<div class="header">
|
||||
<span class="title">模型参数管理</span>
|
||||
<router-link :to="{ path: '/project/manage' }" class="link">
|
||||
<i class="el-icon-arrow-left"></i> 返回项目管理
|
||||
</router-link>
|
||||
</div>
|
||||
|
||||
<!-- 查询筛选区 -->
|
||||
<div class="filter-container">
|
||||
<el-form :inline="true" :model="queryParams" ref="queryForm">
|
||||
<el-form-item label="模型名称" prop="modelCode">
|
||||
<el-select v-model="queryParams.modelCode" placeholder="请选择模型">
|
||||
<el-option
|
||||
v-for="model in modelList"
|
||||
:key="model.modelCode"
|
||||
:label="model.modelName"
|
||||
:value="model.modelCode"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleQuery">
|
||||
查询
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<!-- 参数配置表格 -->
|
||||
<div class="table-container">
|
||||
<h3 class="table-title">阈值参数配置</h3>
|
||||
<el-table :data="paramList" border style="width: 100%">
|
||||
<el-table-column label="监测项" prop="paramName" width="200" />
|
||||
<el-table-column label="描述" prop="paramDesc" />
|
||||
<el-table-column label="阈值设置" width="200">
|
||||
<template #default="{ row }">
|
||||
<el-input
|
||||
v-model="row.paramValue"
|
||||
placeholder="请输入阈值"
|
||||
@input="markAsModified(row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位" prop="paramUnit" width="120" />
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<div class="button-container">
|
||||
<el-button type="primary" @click="handleSave" :loading="saving">
|
||||
保存配置
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listModels, listParams, saveParams } from "@/api/ccdi/modelParam";
|
||||
|
||||
export default {
|
||||
name: "ModelParam",
|
||||
data() {
|
||||
return {
|
||||
// 模型列表
|
||||
modelList: [],
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
modelCode: undefined,
|
||||
projectId: 0, // 默认查询系统级参数
|
||||
},
|
||||
// 参数列表
|
||||
paramList: [],
|
||||
// 保存中状态
|
||||
saving: false,
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getModelList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询模型列表 */
|
||||
getModelList() {
|
||||
listModels({ projectId: this.queryParams.projectId }).then((response) => {
|
||||
this.modelList = response.data;
|
||||
if (this.modelList.length > 0) {
|
||||
this.queryParams.modelCode = this.modelList[0].modelCode;
|
||||
this.handleQuery();
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 查询参数列表 */
|
||||
handleQuery() {
|
||||
if (!this.queryParams.modelCode) {
|
||||
this.$message.warning("请选择模型");
|
||||
return;
|
||||
}
|
||||
listParams(this.queryParams).then((response) => {
|
||||
this.paramList = response.data;
|
||||
});
|
||||
},
|
||||
/** 标记参数为已修改 */
|
||||
markAsModified(row) {
|
||||
row.modified = true;
|
||||
},
|
||||
/** 保存配置 */
|
||||
handleSave() {
|
||||
if (!this.queryParams.modelCode) {
|
||||
this.$message.warning("请选择模型");
|
||||
return;
|
||||
}
|
||||
|
||||
// 只保存修改过的参数值
|
||||
const modifiedParams = this.paramList.filter((item) => item.modified);
|
||||
if (modifiedParams.length === 0) {
|
||||
this.$message.info("没有需要保存的修改");
|
||||
return;
|
||||
}
|
||||
|
||||
const saveDTO = {
|
||||
projectId: this.queryParams.projectId,
|
||||
modelCode: this.queryParams.modelCode,
|
||||
modelName: this.modelList.find(
|
||||
(m) => m.modelCode === this.queryParams.modelCode
|
||||
)?.modelName,
|
||||
params: modifiedParams.map((item) => ({
|
||||
paramCode: item.paramCode,
|
||||
paramName: item.paramName,
|
||||
paramDesc: item.paramDesc,
|
||||
paramValue: item.paramValue,
|
||||
paramUnit: item.paramUnit,
|
||||
sortOrder: item.sortOrder,
|
||||
})),
|
||||
};
|
||||
|
||||
this.saving = true;
|
||||
saveParams(saveDTO)
|
||||
.then((response) => {
|
||||
this.$modal.msgSuccess("保存成功");
|
||||
// 清除修改标记
|
||||
this.paramList.forEach((item) => {
|
||||
item.modified = false;
|
||||
});
|
||||
})
|
||||
.finally(() => {
|
||||
this.saving = false;
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.app-container {
|
||||
padding: 20px;
|
||||
background-color: #f5f5f5;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
padding: 15px;
|
||||
background: #fff;
|
||||
border-radius: 4px;
|
||||
|
||||
.title {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.link {
|
||||
color: #1890ff;
|
||||
text-decoration: none;
|
||||
font-size: 14px;
|
||||
|
||||
i {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.filter-container {
|
||||
padding: 15px;
|
||||
background: #fff;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.table-container {
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.table-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin: 0 0 15px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.button-container {
|
||||
padding: 15px;
|
||||
background: #fff;
|
||||
border-radius: 4px;
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 配置路由(可选)
|
||||
|
||||
如果需要独立访问路径,可以配置路由。
|
||||
|
||||
#### 3.1 查找路由配置文件
|
||||
|
||||
**文件路径:** `ruoyi-ui/src/router/index.js`
|
||||
|
||||
#### 3.2 添加路由配置(如需要)
|
||||
|
||||
```javascript
|
||||
{
|
||||
path: '/ccdi/modelParam',
|
||||
component: Layout,
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
name: 'ModelParam',
|
||||
component: () => import('@/views/ccdi/modelParam/index'),
|
||||
meta: { title: '模型参数管理', icon: 'setting' }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**注意:** 若依框架通常通过数据库菜单表动态生成路由,可以不配置静态路由。
|
||||
|
||||
---
|
||||
|
||||
### 4. 添加菜单(通过数据库)
|
||||
|
||||
#### 4.1 准备菜单数据
|
||||
|
||||
```sql
|
||||
-- 添加模型参数管理菜单
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
|
||||
('模型参数管理', 0, 10, 'modelParam', 'ccdi/modelParam/index', 1, 0, 'C', '0', '0', 'ccdi:modelParam:list', 'setting', 'admin', sysdate(), '模型参数管理菜单');
|
||||
```
|
||||
|
||||
#### 4.2 执行 SQL
|
||||
|
||||
```bash
|
||||
mysql -h<数据库地址> -u<用户名> -p<密码> ccdi < sql/ccdi_model_param_menu.sql
|
||||
```
|
||||
|
||||
**注意:** 具体的 parent_id 需要根据实际的父菜单ID调整。
|
||||
|
||||
---
|
||||
|
||||
### 5. 前端测试
|
||||
|
||||
#### 5.1 启动前端服务
|
||||
|
||||
```bash
|
||||
cd ruoyi-ui
|
||||
npm run dev
|
||||
```
|
||||
|
||||
#### 5.2 访问页面
|
||||
|
||||
浏览器访问: http://localhost:80
|
||||
|
||||
登录后,在菜单中找到"模型参数管理"并点击。
|
||||
|
||||
#### 5.3 功能测试清单
|
||||
|
||||
**测试1: 页面加载**
|
||||
|
||||
- [ ] 页面正常加载,显示标题"模型参数管理"
|
||||
- [ ] 模型下拉框自动加载模型列表
|
||||
- [ ] 默认选中第一个模型
|
||||
- [ ] 自动加载第一个模型的参数
|
||||
|
||||
**测试2: 模型切换**
|
||||
|
||||
- [ ] 切换模型下拉框选择"可疑兼职模型"
|
||||
- [ ] 点击"查询"按钮
|
||||
- [ ] 参数列表正确显示可疑兼职模型的参数
|
||||
|
||||
**测试3: 参数修改**
|
||||
|
||||
- [ ] 在"阈值设置"输入框中修改数值
|
||||
- [ ] 只能修改阈值列,其他列只读
|
||||
- [ ] 修改后可以继续编辑其他参数
|
||||
|
||||
**测试4: 保存配置**
|
||||
|
||||
- [ ] 点击"保存配置"按钮
|
||||
- [ ] 按钮显示 loading 状态
|
||||
- [ ] 保存成功后显示"保存成功"提示
|
||||
- [ ] 页面刷新后数据已更新
|
||||
|
||||
**测试5: 未修改提示**
|
||||
|
||||
- [ ] 不修改任何参数
|
||||
- [ ] 点击"保存配置"按钮
|
||||
- [ ] 显示"没有需要保存的修改"提示
|
||||
|
||||
**测试6: 验证只能修改阈值**
|
||||
|
||||
- [ ] 尝试点击"监测项"、"描述"、"单位"列
|
||||
- [ ] 确认这些列无法编辑
|
||||
- [ ] 只有"阈值设置"列可以编辑
|
||||
|
||||
---
|
||||
|
||||
### 6. 样式调整
|
||||
|
||||
#### 6.1 检查页面样式
|
||||
|
||||
确保页面样式与设计稿一致:
|
||||
|
||||
- [ ] 背景色为 #f5f5f5
|
||||
- [ ] 卡片背景色为 #fff
|
||||
- [ ] 标题颜色为 #333
|
||||
- [ ] 链接颜色为 #1890ff
|
||||
- [ ] 边框圆角为 4px
|
||||
- [ ] 表格边框清晰
|
||||
|
||||
#### 6.2 响应式适配(可选)
|
||||
|
||||
如需支持移动端,可以添加响应式样式:
|
||||
|
||||
```scss
|
||||
@media screen and (max-width: 768px) {
|
||||
.app-container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.header {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.el-table {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 验证清单
|
||||
|
||||
完成以下验证后,本任务才算完成:
|
||||
|
||||
- [ ] API 文件创建完成
|
||||
- [ ] 页面组件创建完成
|
||||
- [ ] 页面可以正常访问
|
||||
- [ ] 模型列表加载正常
|
||||
- [ ] 参数列表查询正常
|
||||
- [ ] 参数修改功能正常
|
||||
- [ ] 保存配置功能正常
|
||||
- [ ] 只有阈值列可编辑
|
||||
- [ ] 样式与设计稿一致
|
||||
- [ ] 所有功能测试通过
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 问题1: 跨域错误
|
||||
|
||||
**现象:** 浏览器控制台显示 CORS 错误
|
||||
|
||||
**解决:**
|
||||
检查 `ruoyi-ui/vue.config.js` 中的代理配置:
|
||||
|
||||
```javascript
|
||||
proxy: {
|
||||
[process.env.VUE_APP_BASE_API]: {
|
||||
target: 'http://localhost:8080',
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
['^' + process.env.VUE_APP_BASE_API]: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 问题2: Token 过期
|
||||
|
||||
**现象:** 接口返回 401 未授权
|
||||
|
||||
**解决:**
|
||||
重新登录获取新 Token,或清除浏览器缓存。
|
||||
|
||||
### 问题3: 菜单不显示
|
||||
|
||||
**现象:** 登录后看不到"模型参数管理"菜单
|
||||
|
||||
**解决:**
|
||||
|
||||
1. 检查菜单 SQL 是否执行成功
|
||||
2. 检查当前用户是否有该菜单权限
|
||||
3. 清除浏览器缓存并重新登录
|
||||
|
||||
---
|
||||
|
||||
## 优化建议(可选)
|
||||
|
||||
### 1. 输入验证
|
||||
|
||||
为阈值输入框添加数值验证:
|
||||
|
||||
```vue
|
||||
<el-input
|
||||
v-model.number="row.paramValue"
|
||||
type="number"
|
||||
placeholder="请输入阈值"
|
||||
@input="markAsModified(row)"
|
||||
/>
|
||||
```
|
||||
|
||||
### 2. 批量修改
|
||||
|
||||
添加"批量修改"功能,一次性修改多个模型的参数。
|
||||
|
||||
### 3. 修改历史记录
|
||||
|
||||
显示参数的修改历史,包括修改时间、修改人、修改前后的值。
|
||||
|
||||
---
|
||||
|
||||
## 下一步
|
||||
|
||||
完成本任务后,整个模型参数配置功能开发完成!
|
||||
|
||||
**总结:**
|
||||
|
||||
- ✅ 后端实体类创建完成
|
||||
- ✅ 后端业务逻辑开发完成
|
||||
- ✅ 后端功能测试通过
|
||||
- ✅ 前端代码开发完成
|
||||
|
||||
**功能已上线,可以进行功能验收。**
|
||||
BIN
doc/参数配置功能/ScreenShot_2026-02-25_162807_126.png
Normal file
BIN
doc/参数配置功能/ScreenShot_2026-02-25_162807_126.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
BIN
doc/参数配置功能/ScreenShot_2026-02-25_162819_927.png
Normal file
BIN
doc/参数配置功能/ScreenShot_2026-02-25_162819_927.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
BIN
doc/参数配置功能/ScreenShot_2026-02-25_162831_473.png
Normal file
BIN
doc/参数配置功能/ScreenShot_2026-02-25_162831_473.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
0
doc/参数配置功能/task.md
Normal file
0
doc/参数配置功能/task.md
Normal file
348
doc/参数配置功能/设计文档.md
Normal file
348
doc/参数配置功能/设计文档.md
Normal file
@@ -0,0 +1,348 @@
|
||||
# 模型参数配置功能 - 设计文档
|
||||
|
||||
## 1. 功能概述
|
||||
|
||||
### 1.1 功能定位
|
||||
|
||||
模型参数配置管理功能,用于配置风险监测模型的阈值参数,支持多模型参数管理,为未来的项目级自定义参数预留扩展能力。
|
||||
|
||||
### 1.2 核心能力
|
||||
|
||||
- ✅ 支持多模型参数配置(大额交易、可疑兼职、可疑外汇等)
|
||||
- ✅ 参数持久化存储到数据库
|
||||
- ✅ 按模型查询和修改参数
|
||||
- ✅ 只允许修改阈值,其他信息只读
|
||||
- ✅ 为未来项目级配置预留扩展能力
|
||||
|
||||
### 1.3 用户场景
|
||||
|
||||
1. **系统管理员** 选择需要配置的模型
|
||||
2. **系统管理员** 修改模型的阈值参数
|
||||
3. **系统管理员** 保存配置,参数立即生效
|
||||
|
||||
---
|
||||
|
||||
## 2. 需求分析
|
||||
|
||||
### 2.1 业务需求
|
||||
|
||||
根据需求截图,系统需要支持多个风险监测模型的参数配置:
|
||||
|
||||
**模型清单:**
|
||||
|
||||
- 大额交易模型
|
||||
- 可疑兼职模型
|
||||
- 可疑外汇交易模型
|
||||
- (未来可能新增其他模型)
|
||||
|
||||
**参数特征:**
|
||||
|
||||
- 每个模型有固定数量的参数项(3-6个不等)
|
||||
- 每个参数包含:监测项名称、描述、阈值设置、单位
|
||||
- 只有阈值可以修改,其他信息只读
|
||||
|
||||
### 2.2 功能需求
|
||||
|
||||
| 需求项 | 说明 |
|
||||
|-------|------------------------|
|
||||
| 数据存储 | 参数配置需要持久化存储到数据库 |
|
||||
| 参数项管理 | 参数项固定,在开发时确定,后期不频繁增减 |
|
||||
| 新增模型 | 需要开发介入,通过代码和数据库脚本实现 |
|
||||
| 权限控制 | 统一权限控制,有菜单权限即可修改所有模型参数 |
|
||||
| 修改历史 | 不需要记录修改历史,只保存当前状态 |
|
||||
| 恢复默认 | 不需要开发恢复默认功能 |
|
||||
| 其他功能 | 只需要基本的查询、修改、保存功能 |
|
||||
|
||||
### 2.3 非功能需求
|
||||
|
||||
| 需求项 | 说明 |
|
||||
|------|-----------------------------|
|
||||
| 性能 | 单表查询,响应时间 < 500ms |
|
||||
| 安全性 | 后端只能修改阈值字段,其他字段不可修改 |
|
||||
| 可扩展性 | 预留 project_id 字段,支持未来的项目级配置 |
|
||||
| 易用性 | 界面简洁,操作直观 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 架构设计
|
||||
|
||||
### 3.1 模块架构
|
||||
|
||||
**新建模块:** `ccdi-project`
|
||||
|
||||
**模块定位:** 项目相关功能模块,包含参数配置等项目管理功能
|
||||
|
||||
**依赖关系:**
|
||||
|
||||
```
|
||||
ruoyi-admin (启动模块)
|
||||
├── ruoyi-framework
|
||||
├── ruoyi-system
|
||||
├── ruoyi-common
|
||||
├── ccdi-project (新建模块) ⭐
|
||||
│ └── ruoyi-common
|
||||
└── ruoyi-info-collection
|
||||
```
|
||||
|
||||
### 3.2 分层架构
|
||||
|
||||
```
|
||||
前端 (Vue.js)
|
||||
↓ HTTP请求
|
||||
Controller (CcdiModelParamController)
|
||||
↓ 调用
|
||||
Service (ICcdiModelParamService)
|
||||
↓ 调用
|
||||
Mapper (CcdiModelParamMapper)
|
||||
↓ SQL
|
||||
Database (ccdi_model_param)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 数据库设计
|
||||
|
||||
### 4.1 表结构
|
||||
|
||||
**表名:** `ccdi_model_param`
|
||||
|
||||
```sql
|
||||
CREATE TABLE `ccdi_model_param` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`project_id` bigint DEFAULT 0 COMMENT '项目ID(0表示默认参数,其他值为具体项目ID)',
|
||||
`model_code` varchar(100) NOT NULL COMMENT '模型编码',
|
||||
`model_name` varchar(100) NOT NULL COMMENT '模型名称',
|
||||
`param_code` varchar(100) NOT NULL COMMENT '参数编码',
|
||||
`param_name` varchar(100) NOT NULL COMMENT '监测项名称',
|
||||
`param_desc` varchar(500) DEFAULT NULL COMMENT '参数描述',
|
||||
`param_value` varchar(200) NOT NULL COMMENT '参数值',
|
||||
`param_unit` varchar(50) DEFAULT NULL COMMENT '参数单位',
|
||||
`sort_order` int DEFAULT 0 COMMENT '排序号(参数展示顺序)',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_project_model_param` (`project_id`, `model_code`, `param_code`) COMMENT '同一项目下模型参数唯一',
|
||||
KEY `idx_project_id` (`project_id`) COMMENT '项目ID索引',
|
||||
KEY `idx_model_code` (`model_code`) COMMENT '模型编码索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模型参数配置表';
|
||||
```
|
||||
|
||||
### 4.2 字段说明
|
||||
|
||||
| 字段名 | 类型 | 说明 | 是否可修改 |
|
||||
|-----------------|--------------|-------------|-------------|
|
||||
| id | bigint | 主键ID | ❌ |
|
||||
| project_id | bigint | 项目ID(0=默认) | ❌ |
|
||||
| model_code | varchar(100) | 模型编码 | ❌ |
|
||||
| model_name | varchar(100) | 模型名称 | ❌ |
|
||||
| param_code | varchar(100) | 参数编码 | ❌ |
|
||||
| param_name | varchar(100) | 监测项名称 | ❌ |
|
||||
| param_desc | varchar(500) | 参数描述 | ❌ |
|
||||
| **param_value** | varchar(200) | **参数值(阈值)** | ✅ **唯一可修改** |
|
||||
| param_unit | varchar(50) | 参数单位 | ❌ |
|
||||
| sort_order | int | 排序号 | ❌ |
|
||||
| create_by | varchar(64) | 创建者 | ❌ |
|
||||
| create_time | datetime | 创建时间 | ❌ |
|
||||
| update_by | varchar(64) | 更新者 | 自动 |
|
||||
| update_time | datetime | 更新时间 | 自动 |
|
||||
| remark | varchar(500) | 备注 | ❌ |
|
||||
|
||||
### 4.3 索引设计
|
||||
|
||||
| 索引名 | 索引类型 | 字段 | 用途 |
|
||||
|------------------------|------|------------------------------------|---------|
|
||||
| PRIMARY | 主键 | id | 主键索引 |
|
||||
| uk_project_model_param | 唯一索引 | project_id, model_code, param_code | 保证参数唯一性 |
|
||||
| idx_project_id | 普通索引 | project_id | 加速项目查询 |
|
||||
| idx_model_code | 普通索引 | model_code | 加速模型查询 |
|
||||
|
||||
### 4.4 初始化数据
|
||||
|
||||
参见开发计划文档中的数据初始化脚本。
|
||||
|
||||
---
|
||||
|
||||
## 5. 后端设计
|
||||
|
||||
### 5.1 模块结构
|
||||
|
||||
```
|
||||
ccdi-project/
|
||||
├── pom.xml
|
||||
└── src/main/
|
||||
├── java/com/ruoyi/ccdi/project/
|
||||
│ ├── controller/
|
||||
│ │ └── CcdiModelParamController.java
|
||||
│ ├── service/
|
||||
│ │ ├── ICcdiModelParamService.java
|
||||
│ │ └── impl/
|
||||
│ │ └── CcdiModelParamServiceImpl.java
|
||||
│ ├── mapper/
|
||||
│ │ └── CcdiModelParamMapper.java
|
||||
│ └── domain/
|
||||
│ ├── CcdiModelParam.java
|
||||
│ ├── dto/
|
||||
│ │ ├── ModelParamQueryDTO.java
|
||||
│ │ └── ModelParamSaveDTO.java
|
||||
│ └── vo/
|
||||
│ ├── ModelParamVO.java
|
||||
│ └── ModelListVO.java
|
||||
└── resources/
|
||||
└── mapper/ccdi/project/
|
||||
└── CcdiModelParamMapper.xml
|
||||
```
|
||||
|
||||
### 5.2 核心接口
|
||||
|
||||
| 接口路径 | 方法 | 说明 |
|
||||
|----------------------------|------|---------------|
|
||||
| /ccdi/modelParam/modelList | GET | 查询模型列表 |
|
||||
| /ccdi/modelParam/list | GET | 查询指定模型的参数列表 |
|
||||
| /ccdi/modelParam/save | POST | 保存参数配置(只更新阈值) |
|
||||
|
||||
### 5.3 安全保障
|
||||
|
||||
**三层防护确保只能修改阈值:**
|
||||
|
||||
1. **Mapper XML 层**
|
||||
```xml
|
||||
<update id="batchUpdateParamValues">
|
||||
update ccdi_model_param
|
||||
set param_value = #{item.paramValue}, <!-- 只更新这个字段 -->
|
||||
update_by = #{item.updateBy},
|
||||
update_time = sysdate()
|
||||
where id = #{item.id}
|
||||
</update>
|
||||
```
|
||||
|
||||
2. **Service 层**
|
||||
```java
|
||||
// 只设置需要更新的字段
|
||||
updateParam.setParamValue(item.getParamValue());
|
||||
updateParam.setUpdateBy(username);
|
||||
updateParam.setUpdateTime(now);
|
||||
// 其他字段不设置
|
||||
```
|
||||
|
||||
3. **前端层**
|
||||
```vue
|
||||
<!-- 表格只有"阈值设置"列使用 el-input -->
|
||||
<el-table-column label="阈值设置" width="200">
|
||||
<template #default="{ row }">
|
||||
<el-input v-model="row.paramValue" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 前端设计
|
||||
|
||||
### 6.1 页面布局
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 模型参数管理 ← 返回项目管理 │
|
||||
├─────────────────────────────────────┤
|
||||
│ 模型名称: [下拉选择] [查询] │
|
||||
├─────────────────────────────────────┤
|
||||
│ 阈值参数配置 │
|
||||
│ ┌─────┬──────┬────────┬────┐ │
|
||||
│ │监测项│ 描述 │阈值设置 │单位│ │
|
||||
│ ├─────┼──────┼────────┼────┤ │
|
||||
│ │单笔 │单笔超│[输入框] │ 元 │ │
|
||||
│ │交易额│该金额│ │ │ │
|
||||
│ └─────┴──────┴────────┴────┘ │
|
||||
├─────────────────────────────────────┤
|
||||
│ [保存配置] │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 6.2 交互流程
|
||||
|
||||
1. 用户选择模型 → 点击"查询"
|
||||
2. 系统加载该模型的参数列表
|
||||
3. 用户修改阈值(只有这一列可编辑)
|
||||
4. 用户点击"保存配置"
|
||||
5. 系统提交修改的参数值
|
||||
6. 保存成功后显示提示
|
||||
|
||||
### 6.3 用户体验优化
|
||||
|
||||
- 修改跟踪:只提交变更的参数
|
||||
- 防重复提交:保存中禁用按钮
|
||||
- 成功提示:保存成功后清空修改标记
|
||||
|
||||
---
|
||||
|
||||
## 7. 实施计划
|
||||
|
||||
本功能拆分为以下3个子任务,每个子任务有独立的开发计划:
|
||||
|
||||
1. **数据库设计与后端实体类创建** - 参见 `01-数据库设计与后端实体类创建.md`
|
||||
2. **后端业务逻辑开发** - 参见 `02-后端业务逻辑开发.md`
|
||||
3. **后端功能测试** - 参见 `03-后端功能测试.md`
|
||||
4. **前端代码开发** - 参见 `04-前端代码开发.md`
|
||||
|
||||
---
|
||||
|
||||
## 8. 风险与应对
|
||||
|
||||
| 风险 | 影响 | 应对措施 |
|
||||
|-----------|----|---------------------|
|
||||
| 参数值格式不统一 | 中 | 前端验证输入格式,后端也做校验 |
|
||||
| 并发修改冲突 | 低 | 使用乐观锁或最后修改覆盖策略 |
|
||||
| 新增模型需要改代码 | 低 | 符合设计预期,通过数据库脚本和代码发布 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 未来扩展
|
||||
|
||||
### 9.1 项目级参数配置
|
||||
|
||||
通过 `project_id` 字段预留了扩展能力:
|
||||
|
||||
- `project_id = 0`: 系统默认参数
|
||||
- `project_id > 0`: 具体项目的自定义参数
|
||||
|
||||
**扩展步骤:**
|
||||
|
||||
1. 添加项目管理界面
|
||||
2. 允许用户为具体项目复制默认参数
|
||||
3. 修改参数时指定 `project_id`
|
||||
|
||||
### 9.2 参数修改历史
|
||||
|
||||
如需添加审计功能:
|
||||
|
||||
1. 创建 `ccdi_model_param_history` 表
|
||||
2. 在更新参数前先插入历史记录
|
||||
3. 提供历史查询界面
|
||||
|
||||
---
|
||||
|
||||
## 10. 附录
|
||||
|
||||
### 10.1 参考文档
|
||||
|
||||
- 若依框架官方文档
|
||||
- 项目 CLAUDE.md 规范文档
|
||||
- 需求截图(见 doc/参数配置功能/ 目录)
|
||||
|
||||
### 10.2 术语说明
|
||||
|
||||
| 术语 | 说明 |
|
||||
|------------|-------------------------|
|
||||
| 模型 | 风险监测模型,如大额交易模型、可疑兼职模型等 |
|
||||
| 参数 | 模型的阈值配置项,如单笔交易额、累计交易额等 |
|
||||
| 阈值 | 参数的具体数值,是唯一可修改的字段 |
|
||||
| project_id | 项目ID,用于区分系统默认参数和项目自定义参数 |
|
||||
|
||||
---
|
||||
|
||||
**文档版本:** v1.0
|
||||
**创建日期:** 2026-02-26
|
||||
**创建人:** Claude Code
|
||||
@@ -129,7 +129,7 @@ doc/数据库文档/员工调动记录/04_add_unique_index.sql
|
||||
|
||||
### Java源码
|
||||
```
|
||||
ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/
|
||||
ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/
|
||||
├── domain/dto/
|
||||
│ └── TransferUniqueKey.java [新增]
|
||||
├── mapper/
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
### 2. 后端代码 ✓
|
||||
|
||||
**文件位置**: `D:\ccdi\ccdi\ruoyi-ccdi\src\main\java\com\ruoyi\ccdi\`
|
||||
**文件位置**: `D:\ccdi\ccdi\ruoyi-info-collection\src\main\java\com\ruoyi\ccdi\`
|
||||
|
||||
#### 2.1 实体类 (1个)
|
||||
- `CcdiStaffTransfer.java` - 员工调动记录实体
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,962 +0,0 @@
|
||||
# 信贷客户家庭关系维护功能实施计划
|
||||
|
||||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||||
|
||||
**目标:** 开发信贷客户家庭关系维护功能,实现对信贷客户家庭成员信息的完整CRUD操作
|
||||
|
||||
**架构:** 完全复用员工亲属关系维护功能的实现逻辑,创建独立模块 `CustFamilyRelation`,新建独立表 `ccdi_cust_fmy_relation`
|
||||
|
||||
**技术栈:** Spring Boot 3.5.8 + MyBatis Plus 3.5.10 + Vue 2.6.12 + Element UI 2.15.14 + EasyExcel + Redis
|
||||
|
||||
---
|
||||
|
||||
## 前置准备
|
||||
|
||||
### Task 0: 创建数据库表
|
||||
|
||||
**Files:**
|
||||
- Create: `sql/ccdi_cust_fmy_relation.sql`
|
||||
|
||||
**Step 1: 创建建表SQL文件**
|
||||
|
||||
```sql
|
||||
-- 信贷客户家庭关系表
|
||||
CREATE TABLE `ccdi_cust_fmy_relation` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`person_id` VARCHAR(50) NOT NULL COMMENT '信贷客户身份证号',
|
||||
`relation_type` VARCHAR(50) NOT NULL COMMENT '关系类型',
|
||||
`relation_name` VARCHAR(100) NOT NULL COMMENT '关系人姓名',
|
||||
`gender` CHAR(1) DEFAULT NULL COMMENT '性别:M-男,F-女,O-其他',
|
||||
`birth_date` DATE DEFAULT NULL COMMENT '关系人出生日期',
|
||||
`relation_cert_type` VARCHAR(50) NOT NULL COMMENT '证件类型',
|
||||
`relation_cert_no` VARCHAR(50) NOT NULL COMMENT '证件号码',
|
||||
`mobile_phone1` VARCHAR(20) DEFAULT NULL COMMENT '手机号码1',
|
||||
`mobile_phone2` VARCHAR(20) DEFAULT NULL COMMENT '手机号码2',
|
||||
`wechat_no1` VARCHAR(50) DEFAULT NULL COMMENT '微信名称1',
|
||||
`wechat_no2` VARCHAR(50) DEFAULT NULL COMMENT '微信名称2',
|
||||
`wechat_no3` VARCHAR(50) DEFAULT NULL COMMENT '微信名称3',
|
||||
`contact_address` VARCHAR(500) DEFAULT NULL COMMENT '详细联系地址',
|
||||
`relation_desc` VARCHAR(500) DEFAULT NULL COMMENT '关系详细描述',
|
||||
`status` INT NOT NULL DEFAULT 1 COMMENT '状态:0-无效,1-有效',
|
||||
`effective_date` DATETIME DEFAULT NULL COMMENT '关系生效日期',
|
||||
`invalid_date` DATETIME DEFAULT NULL COMMENT '关系失效日期',
|
||||
`remark` TEXT COMMENT '备注信息',
|
||||
`data_source` VARCHAR(50) DEFAULT NULL COMMENT '数据来源:MANUAL-手动录入,IMPORT-批量导入',
|
||||
`is_emp_family` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否是员工的家庭关系:0-否',
|
||||
`is_cust_family` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否是信贷客户的家庭关系:1-是',
|
||||
`created_by` VARCHAR(50) NOT NULL COMMENT '记录创建人',
|
||||
`updated_by` VARCHAR(50) DEFAULT NULL COMMENT '记录更新人',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
|
||||
`update_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_person_id` (`person_id`),
|
||||
KEY `idx_relation_cert_no` (`relation_cert_no`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='信贷客户家庭关系表';
|
||||
```
|
||||
|
||||
**Step 2: 执行SQL创建表**
|
||||
|
||||
Run: 连接数据库并执行 `sql/ccdi_cust_fmy_relation.sql`
|
||||
Expected: 表创建成功
|
||||
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add sql/ccdi_cust_fmy_relation.sql
|
||||
git commit -m "feat: 创建信贷客户家庭关系表"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 后端开发
|
||||
|
||||
### Task 1: 创建实体类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiCustFmyRelation.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiStaffFmyRelation.java:1-108`
|
||||
|
||||
**Step 1: 创建实体类**
|
||||
|
||||
复制 `CcdiStaffFmyRelation.java`,修改以下内容:
|
||||
- 类名: `CcdiCustFmyRelation`
|
||||
- 注释: `信贷客户家庭关系对象 ccdi_cust_fmy_relation`
|
||||
- 表名: `@TableName("ccdi_cust_fmy_relation")`
|
||||
- JavaDoc: 全部替换"员工"为"信贷客户"
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系对象 ccdi_cust_fmy_relation
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@TableName("ccdi_cust_fmy_relation")
|
||||
public class CcdiCustFmyRelation implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
private String relationName;
|
||||
|
||||
/** 性别:M-男,F-女,O-其他 */
|
||||
private String gender;
|
||||
|
||||
/** 出生日期 */
|
||||
private Date birthDate;
|
||||
|
||||
/** 关系人证件类型 */
|
||||
private String relationCertType;
|
||||
|
||||
/** 关系人证件号码 */
|
||||
private String relationCertNo;
|
||||
|
||||
/** 手机号码1 */
|
||||
private String mobilePhone1;
|
||||
|
||||
/** 手机号码2 */
|
||||
private String mobilePhone2;
|
||||
|
||||
/** 微信名称1 */
|
||||
private String wechatNo1;
|
||||
|
||||
/** 微信名称2 */
|
||||
private String wechatNo2;
|
||||
|
||||
/** 微信名称3 */
|
||||
private String wechatNo3;
|
||||
|
||||
/** 详细联系地址 */
|
||||
private String contactAddress;
|
||||
|
||||
/** 关系详细描述 */
|
||||
private String relationDesc;
|
||||
|
||||
/** 状态:0-无效,1-有效 */
|
||||
private Integer status;
|
||||
|
||||
/** 生效日期 */
|
||||
private Date effectiveDate;
|
||||
|
||||
/** 失效日期 */
|
||||
private Date invalidDate;
|
||||
|
||||
/** 备注 */
|
||||
private String remark;
|
||||
|
||||
/** 数据来源:MANUAL-手工录入,IMPORT-导入 */
|
||||
private String dataSource;
|
||||
|
||||
/** 是否是员工亲属:0-否 */
|
||||
private Boolean isEmpFamily;
|
||||
|
||||
/** 是否是客户亲属:1-是 */
|
||||
private Boolean isCustFamily;
|
||||
|
||||
/** 创建时间 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/** 更新时间 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private String createdBy;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private String updatedBy;
|
||||
}
|
||||
```
|
||||
|
||||
**Step 2: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiCustFmyRelation.java
|
||||
git commit -m "feat: 添加信贷客户家庭关系实体类"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 2: 创建DTO类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiCustFmyRelationAddDTO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiCustFmyRelationEditDTO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiCustFmyRelationQueryDTO.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiStaffFmyRelationAddDTO.java`
|
||||
|
||||
**Step 1: 创建AddDTO**
|
||||
|
||||
复制 `CcdiStaffFmyRelationAddDTO.java`,修改:
|
||||
- 类名: `CcdiCustFmyRelationAddDTO`
|
||||
- 注释中"员工" → "信贷客户"
|
||||
- personId字段注释: `@Schema(description = "信贷客户身份证号")`
|
||||
- 验证消息: "员工身份证号" → "信贷客户身份证号"
|
||||
|
||||
**Step 2: 创建EditDTO**
|
||||
|
||||
复制 `CcdiStaffFmyRelationEditDTO.java`,修改:
|
||||
- 类名: `CcdiCustFmyRelationEditDTO`
|
||||
- 注释中"员工" → "信贷客户"
|
||||
- 添加 `id` 字段和 `@NotNull` 验证
|
||||
|
||||
**Step 3: 创建QueryDTO(简化版)**
|
||||
|
||||
```java
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 信贷客户家庭关系查询DTO
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-02-11
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "信贷客户家庭关系查询")
|
||||
public class CcdiCustFmyRelationQueryDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 信贷客户身份证号 */
|
||||
@Schema(description = "信贷客户身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 关系类型 */
|
||||
@Schema(description = "关系类型")
|
||||
private String relationType;
|
||||
|
||||
/** 关系人姓名 */
|
||||
@Schema(description = "关系人姓名")
|
||||
private String relationName;
|
||||
}
|
||||
```
|
||||
|
||||
**Step 4: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 5: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/
|
||||
git commit -m "feat: 添加信贷客户家庭关系DTO类"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 3: 创建VO类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiCustFmyRelationVO.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CustFmyRelationImportFailureVO.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffFmyRelationVO.java`
|
||||
|
||||
**Step 1: 创建主VO**
|
||||
|
||||
复制 `CcdiStaffFmyRelationVO.java`,修改:
|
||||
- 类名: `CcdiCustFmyRelationVO`
|
||||
- 移除 `personName` 字段(不关联其他表)
|
||||
- 注释中"员工" → "信贷客户"
|
||||
|
||||
**Step 2: 创建导入失败VO**
|
||||
|
||||
复制 `StaffFmyRelationImportFailureVO.java`,修改:
|
||||
- 类名: `CustFmyRelationImportFailureVO`
|
||||
- 注释中"员工" → "信贷客户"
|
||||
|
||||
**Step 3: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/
|
||||
git commit -m "feat: 添加信贷客户家庭关系VO类"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 4: 创建Excel类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiCustFmyRelationExcel.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiStaffFmyRelationExcel.java`
|
||||
|
||||
**Step 1: 创建Excel类**
|
||||
|
||||
复制 `CcdiStaffFmyRelationExcel.java`,修改:
|
||||
- 类名: `CcdiCustFmyRelationExcel`
|
||||
- 注释: `信贷客户家庭关系Excel导入导出对象`
|
||||
- personId字段: `@ExcelProperty(value = "信贷客户身份证号*", index = 0)`
|
||||
- 其他保持不变
|
||||
|
||||
**Step 2: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiCustFmyRelationExcel.java
|
||||
git commit -m "feat: 添加信贷客户家庭关系Excel类"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 5: 创建Mapper接口
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiCustFmyRelationMapper.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiStaffFmyRelationMapper.java`
|
||||
|
||||
**Step 1: 创建Mapper接口**
|
||||
|
||||
复制 `CcdiStaffFmyRelationMapper.java`,修改:
|
||||
- 包名和导入: 全部 `Staff` → `Cust`
|
||||
- 类名: `CcdiCustFmyRelationMapper`
|
||||
- 泛型: `CcdiCustFmyRelation`
|
||||
- DTO: `CcdiCustFmyRelationQueryDTO`
|
||||
- VO: `CcdiCustFmyRelationVO`
|
||||
- 方法注释: "员工" → "信贷客户"
|
||||
|
||||
**Step 2: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiCustFmyRelationMapper.java
|
||||
git commit -m "feat: 添加信贷客户家庭关系Mapper接口"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 6: 创建Mapper XML映射
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiCustFmyRelationMapper.xml`
|
||||
- Reference: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffFmyRelationMapper.xml`
|
||||
|
||||
**Step 1: 创建XML映射文件**
|
||||
|
||||
复制 `CcdiStaffFmyRelationMapper.xml`,修改:
|
||||
- namespace: `com.ruoyi.ccdi.mapper.CcdiCustFmyRelationMapper`
|
||||
- resultMap: `CcdiCustFmyRelationVOResult`
|
||||
- type: `com.ruoyi.ccdi.domain.vo.CcdiCustFmyRelationVO`
|
||||
- 表名: `ccdi_cust_fmy_relation`
|
||||
- **移除 LEFT JOIN**(不关联员工表)
|
||||
- WHERE条件: `r.is_cust_family = 1`
|
||||
- **移除 personName 相关字段**
|
||||
|
||||
```xml
|
||||
<!-- 关键修改:移除LEFT JOIN和person_name -->
|
||||
<select id="selectRelationPage" resultMap="CcdiCustFmyRelationVOResult">
|
||||
SELECT
|
||||
r.id, r.person_id, r.relation_type, r.relation_name,
|
||||
r.gender, r.birth_date, r.relation_cert_type, r.relation_cert_no,
|
||||
r.mobile_phone1, r.mobile_phone2, r.wechat_no1, r.wechat_no2, r.wechat_no3,
|
||||
r.contact_address, r.relation_desc, r.effective_date, r.invalid_date,
|
||||
r.status, r.remark, r.data_source, r.is_emp_family, r.is_cust_family,
|
||||
r.created_by, r.create_time, r.updated_by, r.update_time
|
||||
FROM ccdi_cust_fmy_relation r
|
||||
<where>
|
||||
r.is_cust_family = 1
|
||||
<if test="query.personId != null and query.personId != ''">
|
||||
AND r.person_id = #{query.personId}
|
||||
</if>
|
||||
<if test="query.relationType != null and query.relationType != ''">
|
||||
AND r.relation_type = #{query.relationType}
|
||||
</if>
|
||||
<if test="query.relationName != null and query.relationName != ''">
|
||||
AND r.relation_name LIKE CONCAT('%', #{query.relationName}, '%')
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY r.create_time DESC
|
||||
</select>
|
||||
```
|
||||
|
||||
- selectExistingRelations: `is_cust_family = 1`
|
||||
|
||||
**Step 2: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiCustFmyRelationMapper.xml
|
||||
git commit -m "feat: 添加信贷客户家庭关系Mapper XML映射"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 7: 创建Service接口
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiCustFmyRelationService.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiCustFmyRelationImportService.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiStaffFmyRelationService.java`
|
||||
|
||||
**Step 1: 创建主Service接口**
|
||||
|
||||
复制 `ICcdiStaffFmyRelationService.java`,修改:
|
||||
- 接口名: `ICcdiCustFmyRelationService`
|
||||
- 泛型: `CcdiCustFmyRelationVO`, `CcdiCustFmyRelationQueryDTO`, `CcdiCustFmyRelationAddDTO`, `CcdiCustFmyRelationEditDTO`, `CcdiCustFmyRelationExcel`
|
||||
|
||||
**Step 2: 创建导入Service接口**
|
||||
|
||||
复制 `ICcdiStaffFmyRelationImportService.java`,修改:
|
||||
- 接口名: `ICcdiCustFmyRelationImportService`
|
||||
- 泛型: `CcdiCustFmyRelationExcel`, `CustFmyRelationImportFailureVO`
|
||||
|
||||
**Step 3: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/
|
||||
git commit -m "feat: 添加信贷客户家庭关系Service接口"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 8: 创建Service实现类
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiCustFmyRelationServiceImpl.java`
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiCustFmyRelationImportServiceImpl.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffFmyRelationServiceImpl.java`
|
||||
|
||||
**Step 1: 创建主Service实现类**
|
||||
|
||||
复制 `CcdiStaffFmyRelationServiceImpl.java`,修改:
|
||||
- 类名: `CcdiCustFmyRelationServiceImpl`
|
||||
- Mapper注入: `CcdiCustFmyRelationMapper`
|
||||
- ImportService注入: `ICcdiCustFmyRelationImportService`
|
||||
- 泛型: `CcdiCustFmyRelationVO`, `CcdiCustFmyRelationQueryDTO` 等
|
||||
- **关键修改**:
|
||||
- `relation.setIsEmpFamily(false);`
|
||||
- `relation.setIsCustFamily(true);`
|
||||
- Redis Key: `import:custFmyRelation:`
|
||||
|
||||
**Step 2: 创建导入Service实现类**
|
||||
|
||||
复制 `CcdiStaffFmyRelationImportServiceImpl.java`,修改:
|
||||
- 类名: `CcdiCustFmyRelationImportServiceImpl`
|
||||
- Mapper注入: `CcdiCustFmyRelationMapper`
|
||||
- 泛型: `CcdiCustFmyRelationExcel`, `CustFmyRelationImportFailureVO`
|
||||
- Redis Key: `import:custFmyRelation:`
|
||||
- 错误消息: "信贷客户身份证号"
|
||||
|
||||
**Step 3: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 4: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/
|
||||
git commit -m "feat: 添加信贷客户家庭关系Service实现类"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 9: 创建Controller
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiCustFmyRelationController.java`
|
||||
- Reference: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiStaffFmyRelationController.java`
|
||||
|
||||
**Step 1: 创建Controller**
|
||||
|
||||
复制 `CcdiStaffFmyRelationController.java`,修改:
|
||||
- 类名: `CcdiCustFmyRelationController`
|
||||
- Tag: `@Tag(name = "信贷客户家庭关系管理")`
|
||||
- RequestMapping: `/ccdi/custFmyRelation`
|
||||
- Service注入: `ICcdiCustFmyRelationService`, `ICcdiCustFmyRelationImportService`
|
||||
- DTO/VO: 对应的 `CcdiCust...` 类型
|
||||
- 权限标识: `ccdi:custFmyRelation:*`
|
||||
- 注释: "员工" → "信贷客户"
|
||||
|
||||
**Step 2: Compile**
|
||||
|
||||
Run: `mvn compile -pl ruoyi-ccdi`
|
||||
Expected: BUILD SUCCESS
|
||||
|
||||
**Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiCustFmyRelationController.java
|
||||
git commit -m "feat: 添加信贷客户家庭关系Controller"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 前端开发
|
||||
|
||||
### Task 10: 创建API接口文件
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ui/src/api/ccdiCustFmyRelation.js`
|
||||
- Reference: `ruoyi-ui/src/api/ccdiStaffFmyRelation.js`
|
||||
|
||||
**Step 1: 创建API文件**
|
||||
|
||||
复制 `ccdiStaffFmyRelation.js`,修改:
|
||||
- url路径: `/ccdi/custFmyRelation`
|
||||
- 移除 `getStaffList` 方法(不需要)
|
||||
|
||||
```javascript
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询信贷客户家庭关系列表
|
||||
export function listRelation(query) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询信贷客户家庭关系详细
|
||||
export function getRelation(id) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增信贷客户家庭关系
|
||||
export function addRelation(data) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改信贷客户家庭关系
|
||||
export function updateRelation(data) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除信贷客户家庭关系
|
||||
export function delRelation(ids) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/' + ids,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出信贷客户家庭关系
|
||||
export function exportRelation(query) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/export',
|
||||
method: 'post',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 下载导入模板
|
||||
export function importTemplate() {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/importTemplate',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 导入信贷客户家庭关系
|
||||
export function importData(file) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/importData',
|
||||
method: 'post',
|
||||
data: formData
|
||||
})
|
||||
}
|
||||
|
||||
// 查询导入状态
|
||||
export function getImportStatus(taskId) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/importStatus/' + taskId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询导入失败记录
|
||||
export function getImportFailures(taskId, pageNum, pageSize) {
|
||||
return request({
|
||||
url: '/ccdi/custFmyRelation/importFailures/' + taskId,
|
||||
method: 'get',
|
||||
params: { pageNum, pageSize }
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ui/src/api/ccdiCustFmyRelation.js
|
||||
git commit -m "feat: 添加信贷客户家庭关系API接口"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 11: 创建主页面组件
|
||||
|
||||
**Files:**
|
||||
- Create: `ruoyi-ui/src/views/ccdiCustFmyRelation/index.vue`
|
||||
- Reference: `ruoyi-ui/src/views/ccdiStaffFmyRelation/index.vue`
|
||||
|
||||
**Step 1: 创建页面组件**
|
||||
|
||||
复制 `ccdiStaffFmyRelation/index.vue`,修改:
|
||||
|
||||
1. **查询条件**(简化版):
|
||||
```vue
|
||||
<!-- 移除员工姓名输入框,只保留personId、relationType、relationName -->
|
||||
<el-form-item label="信贷客户身份证号" prop="personId">
|
||||
<el-input
|
||||
v-model="queryParams.personId"
|
||||
placeholder="请输入信贷客户身份证号"
|
||||
clearable
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="关系类型" prop="relationType">
|
||||
<el-select v-model="queryParams.relationType" placeholder="请选择关系类型" clearable style="width: 240px">
|
||||
<el-option
|
||||
v-for="dict in dict.type.ccdi_relation_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关系人姓名" prop="relationName">
|
||||
<el-input
|
||||
v-model="queryParams.relationName"
|
||||
placeholder="请输入关系人姓名"
|
||||
clearable
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 移除状态下拉框 -->
|
||||
```
|
||||
|
||||
2. **列表列**(移除personName):
|
||||
```vue
|
||||
<el-table-column label="信贷客户身份证号" align="center" prop="personId" width="180"/>
|
||||
<!-- 移除员工姓名列 -->
|
||||
```
|
||||
|
||||
3. **表单**(使用普通输入框):
|
||||
```vue
|
||||
<!-- 信贷客户身份证号改为普通输入框,不使用远程搜索 -->
|
||||
<el-form-item label="信贷客户身份证号" prop="personId">
|
||||
<el-input
|
||||
v-model="form.personId"
|
||||
placeholder="请输入信贷客户身份证号"
|
||||
:disabled="!isAdd"
|
||||
maxlength="18"
|
||||
/>
|
||||
</el-form-item>
|
||||
```
|
||||
|
||||
4. **权限标识**:全部 `staffFmyRelation` → `custFmyRelation`
|
||||
|
||||
5. **导入localStorage**:
|
||||
```javascript
|
||||
const STORAGE_KEY = 'cust_fmy_relation_import_last_task';
|
||||
```
|
||||
|
||||
6. **字典类型**:
|
||||
```vue
|
||||
<dict-tag :options="dict.type.ccdi_relation_type" :value="scope.row.relationType"/>
|
||||
<dict-tag :options="dict.type.ccdi_indiv_gender" :value="scope.row.gender"/>
|
||||
```
|
||||
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ui/src/views/ccdiCustFmyRelation/index.vue
|
||||
git commit -m "feat: 添加信贷客户家庭关系页面组件"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 系统配置
|
||||
|
||||
### Task 12: 创建菜单权限SQL
|
||||
|
||||
**Files:**
|
||||
- Create: `sql/ccdi_cust_fmy_relation_menu.sql`
|
||||
- Reference: `sql/ccdi_staff_fmy_relation_menu.sql`
|
||||
|
||||
**Step 1: 创建菜单SQL**
|
||||
|
||||
```sql
|
||||
-- 信贷客户家庭关系菜单
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES
|
||||
('信贷客户家庭关系', (SELECT menu_id FROM sys_menu WHERE menu_name = '信息维护' LIMIT 1), 5, 'custFmyRelation', 'ccdiCustFmyRelation/index', 1, 0, 'C', '0', '0', 'ccdi:custFmyRelation:list', 'peoples', 'admin', NOW(), '', NULL, '信贷客户家庭关系菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @parent_id = LAST_INSERT_ID();
|
||||
|
||||
-- 添加按钮权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES
|
||||
('信贷客户家庭关系查询', @parent_id, 1, '#', '', 1, 0, 'F', '0', '0', 'ccdi:custFmyRelation:query', '#', 'admin', NOW(), '', NULL, ''),
|
||||
('信贷客户家庭关系新增', @parent_id, 2, '#', '', 1, 0, 'F', '0', '0', 'ccdi:custFmyRelation:add', '#', 'admin', NOW(), '', NULL, ''),
|
||||
('信贷客户家庭关系修改', @parent_id, 3, '#', '', 1, 0, 'F', '0', '0', 'ccdi:custFmyRelation:edit', '#', 'admin', NOW(), '', NULL, ''),
|
||||
('信贷客户家庭关系删除', @parent_id, 4, '#', '', 1, 0, 'F', '0', '0', 'ccdi:custFmyRelation:remove', '#', 'admin', NOW(), '', NULL, ''),
|
||||
('信贷客户家庭关系导出', @parent_id, 5, '#', '', 1, 0, 'F', '0', '0', 'ccdi:custFmyRelation:export', '#', 'admin', NOW(), '', NULL, ''),
|
||||
('信贷客户家庭关系导入', @parent_id, 6, '#', '', 1, 0, 'F', '0', '0', 'ccdi:custFmyRelation:import', '#', 'admin', NOW(), '', NULL, '');
|
||||
```
|
||||
|
||||
**Step 2: Commit**
|
||||
|
||||
```bash
|
||||
git add sql/ccdi_cust_fmy_relation_menu.sql
|
||||
git commit -m "feat: 添加信贷客户家庭关系菜单权限"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 13: 配置字典数据
|
||||
|
||||
**Files:**
|
||||
- Modify: 通过系统管理界面配置
|
||||
|
||||
**Step 1: 确认字典存在**
|
||||
|
||||
登录系统 → 系统管理 → 字典管理,确认以下字典类型已存在:
|
||||
- `ccdi_relation_type`:关系类型
|
||||
- `ccdi_indiv_gender`:性别
|
||||
- `ccdi_certificate_type`:证件类型
|
||||
|
||||
如不存在,参考员工亲属关系的字典数据添加。
|
||||
|
||||
---
|
||||
|
||||
## 测试验证
|
||||
|
||||
### Task 14: 后端接口测试
|
||||
|
||||
**Files:**
|
||||
- Create: `doc/reviews/cust-fmy-relation-api-test.md`
|
||||
|
||||
**Step 1: 启动后端服务**
|
||||
|
||||
Run: `mvn spring-boot:run -pl ruoyi-admin`
|
||||
Expected: 服务启动成功,访问 http://localhost:8080/swagger-ui/index.html
|
||||
|
||||
**Step 2: 测试登录获取token**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
curl -X POST "http://localhost:8080/login" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"admin123"}'
|
||||
```
|
||||
Expected: 返回token
|
||||
|
||||
**Step 3: 测试查询列表接口**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
curl -X GET "http://localhost:8080/ccdi/custFmyRelation/list?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer <token>"
|
||||
```
|
||||
Expected: 返回空列表(无数据)
|
||||
|
||||
**Step 4: 测试新增接口**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
curl -X POST "http://localhost:8080/ccdi/custFmyRelation" \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"personId": "110101199001011234",
|
||||
"relationType": "配偶",
|
||||
"relationName": "张三",
|
||||
"gender": "M",
|
||||
"relationCertType": "身份证",
|
||||
"relationCertNo": "110101199001015678"
|
||||
}'
|
||||
```
|
||||
Expected: 返回成功
|
||||
|
||||
**Step 5: 测试查询详情接口**
|
||||
|
||||
Run:
|
||||
```bash
|
||||
curl -X GET "http://localhost:8080/ccdi/custFmyRelation/1" \
|
||||
-H "Authorization: Bearer <token>"
|
||||
```
|
||||
Expected: 返回刚插入的记录
|
||||
|
||||
---
|
||||
|
||||
### Task 15: 前端功能测试
|
||||
|
||||
**Step 1: 启动前端服务**
|
||||
|
||||
Run: `cd ruoyi-ui && npm run dev`
|
||||
Expected: 服务启动成功,访问 http://localhost
|
||||
|
||||
**Step 2: 登录系统**
|
||||
|
||||
用户名: admin
|
||||
密码: admin123
|
||||
|
||||
**Step 3: 导航到信贷客户家庭关系页面**
|
||||
|
||||
路径: 信息维护 → 信贷客户家庭关系
|
||||
|
||||
**Step 4: 测试新增功能**
|
||||
|
||||
1. 点击"新增"按钮
|
||||
2. 填写表单:
|
||||
- 信贷客户身份证号: `110101199001011234`
|
||||
- 关系类型: `配偶`
|
||||
- 关系人姓名: `张三`
|
||||
- 性别: `男`
|
||||
- 证件类型: `身份证`
|
||||
- 证件号码: `110101199001015678`
|
||||
3. 点击"确定"
|
||||
Expected: 新增成功,列表显示新记录
|
||||
|
||||
**Step 5: 测试编辑功能**
|
||||
|
||||
1. 点击"编辑"按钮
|
||||
2. 修改关系人姓名为 `张三丰`
|
||||
3. 点击"确定"
|
||||
Expected: 修改成功,列表显示更新
|
||||
|
||||
**Step 6: 测试删除功能**
|
||||
|
||||
1. 勾选记录
|
||||
2. 点击"删除"按钮
|
||||
3. 确认删除
|
||||
Expected: 删除成功,列表不再显示该记录
|
||||
|
||||
**Step 7: 测试导出功能**
|
||||
|
||||
1. 添加几条测试数据
|
||||
2. 点击"导出"按钮
|
||||
Expected: 下载Excel文件,数据正确
|
||||
|
||||
**Step 8: 测试导入功能**
|
||||
|
||||
1. 点击"导入"按钮
|
||||
2. 下载模板
|
||||
3. 填写数据后上传
|
||||
4. 等待异步导入完成
|
||||
Expected: 导入成功,显示结果通知
|
||||
|
||||
---
|
||||
|
||||
### Task 16: API文档生成
|
||||
|
||||
**Step 1: 访问Swagger文档**
|
||||
|
||||
URL: http://localhost:8080/swagger-ui/index.html
|
||||
Expected: 看到"信贷客户家庭关系管理"分组,所有接口正常显示
|
||||
|
||||
**Step 2: 导出API文档**
|
||||
|
||||
使用 Swagger 导出功能,保存到: `doc/api-docs/cust-fmy-relation-api.md`
|
||||
|
||||
---
|
||||
|
||||
## 完成检查清单
|
||||
|
||||
- [ ] 数据库表创建成功
|
||||
- [ ] 后端所有类编译通过
|
||||
- [ ] Controller所有接口在Swagger正常显示
|
||||
- [ ] 前端页面正常加载
|
||||
- [ ] 增删改查功能正常
|
||||
- [ ] 导入导出功能正常
|
||||
- [ ] 权限控制生效
|
||||
- [ ] 字典数据正确显示
|
||||
- [ ] 测试文档完整
|
||||
|
||||
---
|
||||
|
||||
## 预期结果
|
||||
|
||||
完成后,系统将具备以下功能:
|
||||
|
||||
1. **信贷客户家庭关系管理页面**
|
||||
- 列表展示(分页)
|
||||
- 简化查询(身份证号、关系类型、关系人姓名)
|
||||
- 新增/编辑/删除/详情
|
||||
|
||||
2. **导入导出功能**
|
||||
- 带字典下拉框的Excel模板
|
||||
- 异步导入,实时状态查询
|
||||
- 失败记录查看
|
||||
|
||||
3. **权限控制**
|
||||
- 完整的CRUD权限
|
||||
- 按钮级权限控制
|
||||
|
||||
4. **数据隔离**
|
||||
- 独立表 `ccdi_cust_fmy_relation`
|
||||
- `is_cust_family = 1`
|
||||
@@ -1,373 +0,0 @@
|
||||
# 信贷客户家庭关系导入功能对齐方案
|
||||
|
||||
## 概述
|
||||
|
||||
本文档描述了如何将**信贷客户家庭关系**功能的导入实现完全对齐到**员工亲属关系**的成熟模式。
|
||||
|
||||
**参考模板**: `CcdiStaffEnterpriseRelationImportServiceImpl`
|
||||
**修改对象**: `CcdiCustFmyRelationImportServiceImpl`
|
||||
|
||||
## 设计目标
|
||||
|
||||
1. 提升代码质量和可维护性
|
||||
2. 优化性能,避免 N+1 查询问题
|
||||
3. 改善用户体验,提供详细的导入进度和状态反馈
|
||||
4. 统一日志记录和错误处理机制
|
||||
|
||||
## 架构调整
|
||||
|
||||
### 1. 引入导入工具类
|
||||
|
||||
复用 `ImportLogUtils` 进行统一的日志记录:
|
||||
- 导入开始/结束日志
|
||||
- 批量查询日志
|
||||
- 进度跟踪日志
|
||||
- 验证错误日志
|
||||
- 批量操作日志
|
||||
|
||||
### 2. Redis 状态管理升级
|
||||
|
||||
**现状**: 简单 String 值存储状态
|
||||
```
|
||||
"COMPLETED:10:5"
|
||||
```
|
||||
|
||||
**优化**: Hash 结构存储详细状态
|
||||
```java
|
||||
{
|
||||
"taskId": "uuid",
|
||||
"status": "SUCCESS" | "PARTIAL_SUCCESS" | "PROCESSING",
|
||||
"totalCount": 100,
|
||||
"successCount": 95,
|
||||
"failureCount": 5,
|
||||
"progress": 100,
|
||||
"startTime": 1234567890,
|
||||
"endTime": 1234567900,
|
||||
"message": "成功95条,失败5条"
|
||||
}
|
||||
```
|
||||
|
||||
- 过期时间: 7 天
|
||||
- 失败记录: 单独 Key, JSON 序列化, 7 天过期
|
||||
|
||||
### 3. 批量查询优化
|
||||
|
||||
**实现 `batchExistsByCombinations` 方法**:
|
||||
- 提取所有 `person_id + relation_type + relation_cert_no` 组合
|
||||
- 一次性批量查询已存在的组合
|
||||
- 避免循环查询导致的 N+1 问题
|
||||
|
||||
### 4. 导入结果封装
|
||||
|
||||
创建/复用统一的 VO:
|
||||
- `ImportStatusVO`: 导入状态详情
|
||||
- `ImportResultVO`: 导入提交结果
|
||||
- `CustFmyRelationImportFailureVO`: 失败记录详情
|
||||
|
||||
## 数据验证逻辑
|
||||
|
||||
### 唯一性检查
|
||||
|
||||
**优化前**: 每条记录单独查询
|
||||
```java
|
||||
for (excel : excels) {
|
||||
CcdiCustFmyRelation existing = mapper.selectExistingRelations(...);
|
||||
// N 次数据库查询
|
||||
}
|
||||
```
|
||||
|
||||
**优化后**: 批量查询
|
||||
```java
|
||||
Set<String> existingCombinations = getExistingCombinations(excels);
|
||||
// 1 次数据库查询
|
||||
|
||||
for (excel : excels) {
|
||||
String combination = excel.getPersonId() + "|" + ...;
|
||||
if (existingCombinations.contains(combination)) {
|
||||
throw new RuntimeException("该关系已存在");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Excel 内部重复检查
|
||||
|
||||
```java
|
||||
Set<String> processedCombinations = new HashSet<>();
|
||||
|
||||
for (excel : excels) {
|
||||
String combination = ...;
|
||||
|
||||
if (processedCombinations.contains(combination)) {
|
||||
throw new RuntimeException("该关系在导入文件中重复");
|
||||
}
|
||||
|
||||
processedCombinations.add(combination);
|
||||
}
|
||||
```
|
||||
|
||||
### 验证规则
|
||||
|
||||
**必填字段**:
|
||||
- 信贷客户身份证号
|
||||
- 关系类型
|
||||
- 关系人姓名
|
||||
- 关系人证件类型
|
||||
- 关系人证件号码
|
||||
|
||||
**格式验证**:
|
||||
- 身份证号: 18位有效格式
|
||||
- 证件号码: 根据证件类型验证
|
||||
|
||||
**长度限制**:
|
||||
- 关系人姓名: ≤ 50
|
||||
- 关系类型: ≤ 20
|
||||
- 证件号码: ≤ 50
|
||||
|
||||
## 批量操作优化
|
||||
|
||||
### 分批插入策略
|
||||
|
||||
```java
|
||||
private void saveBatch(List<CcdiCustFmyRelation> list, int batchSize) {
|
||||
for (int i = 0; i < list.size(); i += batchSize) {
|
||||
int end = Math.min(i + batchSize, list.size());
|
||||
List<CcdiCustFmyRelation> subList = list.subList(i, end);
|
||||
mapper.insertBatch(subList);
|
||||
}
|
||||
}
|
||||
|
||||
// 调用: 每 500 条为一批
|
||||
saveBatch(newRecords, 500);
|
||||
```
|
||||
|
||||
### 批量操作日志
|
||||
|
||||
```
|
||||
开始批量插入: 总批次数=5, 每批大小=500
|
||||
批量插入完成: 成功=2500, 耗时=1234ms
|
||||
```
|
||||
|
||||
## 失败记录处理
|
||||
|
||||
### 失败记录数据结构
|
||||
|
||||
```java
|
||||
public class CustFmyRelationImportFailureVO {
|
||||
private Integer rowNum; // Excel 行号
|
||||
private String personId; // 信贷客户身份证号
|
||||
private String relationType; // 关系类型
|
||||
private String relationName; // 关系人姓名
|
||||
private String errorMessage; // 错误消息
|
||||
}
|
||||
```
|
||||
|
||||
### Redis 存储优化
|
||||
|
||||
**Key**: `import:custFmyRelation:{taskId}:failures`
|
||||
**序列化**: JSON
|
||||
**过期时间**: 7 天
|
||||
**反序列化**:
|
||||
```java
|
||||
return JSON.parseArray(
|
||||
JSON.toJSONString(failuresObj),
|
||||
CustFmyRelationImportFailureVO.class
|
||||
);
|
||||
```
|
||||
|
||||
## Controller 层调整
|
||||
|
||||
### 导入接口
|
||||
|
||||
```java
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(@RequestParam("file") MultipartFile file) {
|
||||
List<CcdiCustFmyRelationExcel> excels =
|
||||
EasyExcelUtil.importExcel(file.getInputStream(), ...);
|
||||
|
||||
if (excels == null || excels.isEmpty()) {
|
||||
return error("至少需要一条数据");
|
||||
}
|
||||
|
||||
String taskId = relationService.importRelations(excels);
|
||||
|
||||
ImportResultVO result = new ImportResultVO();
|
||||
result.setTaskId(taskId);
|
||||
result.setStatus("PROCESSING");
|
||||
result.setMessage("导入任务已提交,正在后台处理");
|
||||
|
||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||
}
|
||||
```
|
||||
|
||||
### 导入状态查询
|
||||
|
||||
```java
|
||||
@GetMapping("/importStatus/{taskId}")
|
||||
public AjaxResult getImportStatus(@PathVariable String taskId) {
|
||||
ImportStatusVO statusVO = relationImportService.getImportStatus(taskId);
|
||||
return success(statusVO);
|
||||
}
|
||||
```
|
||||
|
||||
### 失败记录查询
|
||||
|
||||
```java
|
||||
@GetMapping("/importFailures/{taskId}")
|
||||
public TableDataInfo getImportFailures(
|
||||
@PathVariable String taskId,
|
||||
@RequestParam(defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(defaultValue = "10") Integer pageSize
|
||||
) {
|
||||
List<CustFmyRelationImportFailureVO> failures =
|
||||
relationImportService.getImportFailures(taskId);
|
||||
|
||||
// 手动分页
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, failures.size());
|
||||
|
||||
if (fromIndex >= failures.size()) {
|
||||
return getDataTable(new ArrayList<>(), failures.size());
|
||||
}
|
||||
|
||||
List<CustFmyRelationImportFailureVO> pageData =
|
||||
failures.subList(fromIndex, toIndex);
|
||||
|
||||
return getDataTable(pageData, failures.size());
|
||||
}
|
||||
```
|
||||
|
||||
## 导入模板改进
|
||||
|
||||
### 使用字典下拉框
|
||||
|
||||
```java
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
EasyExcelUtil.importTemplateWithDictDropdown(
|
||||
response,
|
||||
CcdiCustFmyRelationExcel.class,
|
||||
"信贷客户家庭关系"
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Excel 实体注解增强
|
||||
|
||||
```java
|
||||
@DictDropdown(type = "ccdi_relation_type")
|
||||
private String relationType;
|
||||
|
||||
@DictDropdown(type = "ccdi_cert_type")
|
||||
private String relationCertType;
|
||||
```
|
||||
|
||||
## 修改文件清单
|
||||
|
||||
### 1. Service 层
|
||||
- `CcdiCustFmyRelationImportServiceImpl.java` - 核心导入逻辑重构
|
||||
- `CcdiCustFmyRelationServiceImpl.java` - 导入入口方法调整
|
||||
|
||||
### 2. Controller 层
|
||||
- `CcdiCustFmyRelationController.java` - 接口返回值优化
|
||||
|
||||
### 3. Mapper 层
|
||||
- `CcdiCustFmyRelationMapper.java` - 添加批量查询方法
|
||||
- Mapper XML - 实现批量查询 SQL
|
||||
|
||||
### 4. VO 类
|
||||
- 检查/创建 `ImportStatusVO.java`
|
||||
- 检查/创建 `ImportResultVO.java`
|
||||
- 优化 `CustFmyRelationImportFailureVO.java`
|
||||
|
||||
### 5. Excel 实体
|
||||
- `CcdiCustFmyRelationExcel.java` - 添加字典注解
|
||||
|
||||
### 6. 工具类
|
||||
- 复用 `ImportLogUtils.java`
|
||||
- 复用 `EasyExcelUtil.java`
|
||||
|
||||
## 关键代码片段
|
||||
|
||||
### Mapper 批量查询
|
||||
|
||||
```java
|
||||
// Mapper 接口
|
||||
List<String> batchExistsByCombinations(
|
||||
@Param("combinations") List<String> combinations
|
||||
);
|
||||
|
||||
// XML 实现
|
||||
<select id="batchExistsByCombinations" resultType="string">
|
||||
SELECT CONCAT(person_id, '|', relation_type, '|', relation_cert_no)
|
||||
FROM ccdi_cust_fmy_relation
|
||||
WHERE CONCAT(person_id, '|', relation_type, '|', relation_cert_no) IN
|
||||
<foreach collection="combinations" item="combo" open="(" separator="," close=")">
|
||||
#{combo}
|
||||
</foreach>
|
||||
</select>
|
||||
```
|
||||
|
||||
### 异步导入方法
|
||||
|
||||
```java
|
||||
@Async
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void importRelationsAsync(
|
||||
List<CcdiCustFmyRelationExcel> excels,
|
||||
String taskId,
|
||||
String userName // 新增参数,用于审计
|
||||
) {
|
||||
// 实现逻辑...
|
||||
}
|
||||
```
|
||||
|
||||
## 实施步骤
|
||||
|
||||
1. **添加 Mapper 批量查询方法**
|
||||
- 在 Mapper 接口添加 `batchExistsByCombinations`
|
||||
- 在 XML 实现 SQL
|
||||
|
||||
2. **重构 ImportServiceImpl**
|
||||
- 引入 `ImportLogUtils`
|
||||
- 实现批量查询逻辑
|
||||
- 添加 Excel 内部重复检查
|
||||
- 优化 Redis 状态管理
|
||||
- 改进失败记录存储
|
||||
|
||||
3. **创建/优化 VO 类**
|
||||
- 检查并复用已有的 `ImportStatusVO`
|
||||
- 检查并复用已有的 `ImportResultVO`
|
||||
- 优化失败记录 VO
|
||||
|
||||
4. **调整 Controller**
|
||||
- 修改导入接口返回值
|
||||
- 优化状态查询接口
|
||||
- 优化失败记录查询接口
|
||||
|
||||
5. **更新 Excel 实体**
|
||||
- 添加 `@DictDropdown` 注解
|
||||
|
||||
6. **测试验证**
|
||||
- 单元测试
|
||||
- 集成测试
|
||||
- 性能对比测试
|
||||
|
||||
## 预期效果
|
||||
|
||||
### 性能提升
|
||||
- 批量查询: 从 N 次减少到 1 次
|
||||
- 导入 1000 条数据预计提升 50-70%
|
||||
|
||||
### 用户体验
|
||||
- 实时进度反馈
|
||||
- 详细的错误信息
|
||||
- 清晰的成功/失败统计
|
||||
|
||||
### 代码质量
|
||||
- 统一的日志记录
|
||||
- 完善的错误处理
|
||||
- 更好的可维护性
|
||||
|
||||
## 创建日期
|
||||
|
||||
2026-02-11
|
||||
14
pom.xml
14
pom.xml
@@ -201,10 +201,17 @@
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 纪检初核系统模块-->
|
||||
<!-- 信息采集模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-ccdi</artifactId>
|
||||
<artifactId>ruoyi-info-collection</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 纪检初核项目业务模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ccdi-project</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
@@ -218,7 +225,8 @@
|
||||
<module>ruoyi-quartz</module>
|
||||
<module>ruoyi-generator</module>
|
||||
<module>ruoyi-common</module>
|
||||
<module>ruoyi-ccdi</module>
|
||||
<module>ruoyi-info-collection</module>
|
||||
<module>ccdi-project</module>
|
||||
</modules>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
|
||||
@@ -54,10 +54,16 @@
|
||||
<artifactId>ruoyi-generator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 纪检初核系统模块-->
|
||||
<!-- 信息采集模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-ccdi</artifactId>
|
||||
<artifactId>ruoyi-info-collection</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 纪检初核项目业务模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ccdi-project</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
103
ruoyi-admin/src/main/resources/application-local.yml
Normal file
103
ruoyi-admin/src/main/resources/application-local.yml
Normal file
@@ -0,0 +1,103 @@
|
||||
# 开发环境配置
|
||||
server:
|
||||
# 服务器的HTTP端口,默认为8080
|
||||
port: 8080
|
||||
servlet:
|
||||
# 应用的访问路径
|
||||
context-path: /
|
||||
tomcat:
|
||||
# tomcat的URI编码
|
||||
uri-encoding: UTF-8
|
||||
# 连接数满后的排队数,默认为100
|
||||
accept-count: 1000
|
||||
threads:
|
||||
# tomcat最大线程数,默认为200
|
||||
max: 800
|
||||
# Tomcat启动初始化的线程数,默认值10
|
||||
min-spare: 100
|
||||
|
||||
|
||||
# 数据源配置
|
||||
spring:
|
||||
datasource:
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
druid:
|
||||
# 主库数据源
|
||||
master:
|
||||
url: jdbc:mysql://192.168.0.111:40627/ccdi?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: Kfcx@1234
|
||||
# 从库数据源
|
||||
slave:
|
||||
# 从数据源开关/默认关闭
|
||||
enabled: false
|
||||
url:
|
||||
username:
|
||||
password:
|
||||
# 初始连接数
|
||||
initialSize: 5
|
||||
# 最小连接池数量
|
||||
minIdle: 10
|
||||
# 最大连接池数量
|
||||
maxActive: 20
|
||||
# 配置获取连接等待超时的时间
|
||||
maxWait: 60000
|
||||
# 配置连接超时时间
|
||||
connectTimeout: 30000
|
||||
# 配置网络超时时间
|
||||
socketTimeout: 60000
|
||||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
# 配置一个连接在池中最小生存的时间,单位是毫秒
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
# 配置一个连接在池中最大生存的时间,单位是毫秒
|
||||
maxEvictableIdleTimeMillis: 900000
|
||||
# 配置检测连接是否有效
|
||||
validationQuery: SELECT 1 FROM DUAL
|
||||
testWhileIdle: true
|
||||
testOnBorrow: false
|
||||
testOnReturn: false
|
||||
webStatFilter:
|
||||
enabled: true
|
||||
statViewServlet:
|
||||
enabled: true
|
||||
# 设置白名单,不填则允许所有访问
|
||||
allow:
|
||||
url-pattern: /druid/*
|
||||
# 控制台管理用户名和密码
|
||||
login-username: ruoyi
|
||||
login-password: 123456
|
||||
filter:
|
||||
stat:
|
||||
enabled: true
|
||||
# 慢SQL记录
|
||||
log-slow-sql: true
|
||||
slow-sql-millis: 1000
|
||||
merge-sql: true
|
||||
wall:
|
||||
config:
|
||||
multi-statement-allow: true
|
||||
data:
|
||||
# redis 配置
|
||||
redis:
|
||||
# 地址
|
||||
host: 192.168.0.111
|
||||
# 端口,默认为6379
|
||||
port: 44565
|
||||
# 数据库索引
|
||||
database: 0
|
||||
# 密码
|
||||
password: Kfcx@1234
|
||||
# 连接超时时间
|
||||
timeout: 10s
|
||||
lettuce:
|
||||
pool:
|
||||
# 连接池中的最小空闲连接
|
||||
min-idle: 0
|
||||
# 连接池中的最大空闲连接
|
||||
max-idle: 8
|
||||
# 连接池的最大数据库连接数
|
||||
max-active: 8
|
||||
# #连接池最大阻塞等待时间(使用负值表示没有限制)
|
||||
max-wait: -1ms
|
||||
@@ -83,11 +83,6 @@ springdoc:
|
||||
enabled: true
|
||||
path: /swagger-ui.html
|
||||
tags-sorter: alpha
|
||||
group-configs:
|
||||
- group: 'default'
|
||||
display-name: '纪检模块'
|
||||
paths-to-match: '/**'
|
||||
packages-to-scan: com.ruoyi.dpc.controller
|
||||
|
||||
# 防盗链配置
|
||||
referer:
|
||||
|
||||
@@ -9,10 +9,10 @@
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ruoyi-ccdi</artifactId>
|
||||
<artifactId>ruoyi-info-collection</artifactId>
|
||||
|
||||
<description>
|
||||
纪检初核系统模块
|
||||
信息采集模块
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.ruoyi.ccdi.annotation;
|
||||
package com.ruoyi.info.collection.annotation;
|
||||
|
||||
import com.ruoyi.ccdi.validation.EnumValidator;
|
||||
import com.ruoyi.info.collection.validation.EnumValidator;
|
||||
import jakarta.validation.Constraint;
|
||||
import jakarta.validation.Payload;
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiBaseStaffAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiBaseStaffEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiBaseStaffQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiBaseStaffExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.*;
|
||||
import com.ruoyi.ccdi.service.ICcdiBaseStaffImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiBaseStaffService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiBaseStaffQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiBaseStaffExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.*;
|
||||
import com.ruoyi.info.collection.service.ICcdiBaseStaffImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiBaseStaffService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustEnterpriseRelationAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustEnterpriseRelationEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustEnterpriseRelationQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiCustEnterpriseRelationExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiCustEnterpriseRelationVO;
|
||||
import com.ruoyi.ccdi.domain.vo.CustEnterpriseRelationImportFailureVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.service.ICcdiCustEnterpriseRelationImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiCustEnterpriseRelationService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustEnterpriseRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustEnterpriseRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustEnterpriseRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiCustEnterpriseRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiCustEnterpriseRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.CustEnterpriseRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustEnterpriseRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustEnterpriseRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustFmyRelationAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustFmyRelationEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiCustFmyRelationQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiCustFmyRelationExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiCustFmyRelationVO;
|
||||
import com.ruoyi.ccdi.domain.vo.CustFmyRelationImportFailureVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.service.ICcdiCustFmyRelationImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiCustFmyRelationService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiCustFmyRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiCustFmyRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.CustFmyRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustFmyRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiCustFmyRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.ruoyi.ccdi.domain.vo.EnumOptionVO;
|
||||
import com.ruoyi.ccdi.enums.*;
|
||||
import com.ruoyi.info.collection.domain.vo.EnumOptionVO;
|
||||
import com.ruoyi.info.collection.enums.*;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.*;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryEntityExcel;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryPersonExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.*;
|
||||
import com.ruoyi.ccdi.service.ICcdiIntermediaryEntityImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiIntermediaryPersonImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiIntermediaryService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.*;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryEntityExcel;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiIntermediaryPersonExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.*;
|
||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryEntityImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryPersonImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiIntermediaryService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiPurchaseTransactionAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiPurchaseTransactionEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiPurchaseTransactionQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiPurchaseTransactionExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiPurchaseTransactionVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.domain.vo.PurchaseTransactionImportFailureVO;
|
||||
import com.ruoyi.ccdi.service.ICcdiPurchaseTransactionImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiPurchaseTransactionService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiPurchaseTransactionExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiPurchaseTransactionVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.PurchaseTransactionImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiPurchaseTransactionImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiPurchaseTransactionService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffEnterpriseRelationAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffEnterpriseRelationEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffEnterpriseRelationQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiStaffEnterpriseRelationExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiStaffEnterpriseRelationVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.domain.vo.StaffEnterpriseRelationImportFailureVO;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffEnterpriseRelationImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffEnterpriseRelationService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffEnterpriseRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffEnterpriseRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffEnterpriseRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.StaffEnterpriseRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffEnterpriseRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffEnterpriseRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffFmyRelationAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffFmyRelationEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffFmyRelationQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiStaffFmyRelationExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiStaffFmyRelationVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.domain.vo.StaffFmyRelationImportFailureVO;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffFmyRelationImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffFmyRelationService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffFmyRelationQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffFmyRelationExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffFmyRelationVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.StaffFmyRelationImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffFmyRelationService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffRecruitmentAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffRecruitmentEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiStaffRecruitmentExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiStaffRecruitmentVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.domain.vo.RecruitmentImportFailureVO;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffRecruitmentImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffRecruitmentService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.RecruitmentImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.ruoyi.ccdi.controller;
|
||||
package com.ruoyi.info.collection.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffTransferAddDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffTransferEditDTO;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffTransferQueryDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiStaffTransferExcel;
|
||||
import com.ruoyi.ccdi.domain.vo.CcdiStaffTransferVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.domain.vo.StaffTransferImportFailureVO;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffTransferImportService;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffTransferService;
|
||||
import com.ruoyi.ccdi.utils.EasyExcelUtil;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferAddDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferEditDTO;
|
||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferQueryDTO;
|
||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffTransferExcel;
|
||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffTransferVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.info.collection.domain.vo.StaffTransferImportFailureVO;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffTransferImportService;
|
||||
import com.ruoyi.info.collection.service.ICcdiStaffTransferService;
|
||||
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain;
|
||||
package com.ruoyi.info.collection.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.ccdi.domain.dto;
|
||||
package com.ruoyi.info.collection.domain.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user