中介库管理
This commit is contained in:
441
openspec/changes/add-intermediary-blacklist/design.md
Normal file
441
openspec/changes/add-intermediary-blacklist/design.md
Normal file
@@ -0,0 +1,441 @@
|
||||
# Design: 中介人员黑名单管理模块
|
||||
|
||||
## 数据库设计
|
||||
|
||||
### 表:dpc_intermediary_blacklist
|
||||
|
||||
中介人员/机构黑名单主表。
|
||||
|
||||
```sql
|
||||
CREATE TABLE `dpc_intermediary_blacklist` (
|
||||
`intermediary_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '中介ID',
|
||||
`name` VARCHAR(100) NOT NULL COMMENT '姓名/机构名称',
|
||||
`certificate_no` VARCHAR(50) DEFAULT NULL COMMENT '证件号',
|
||||
`intermediary_type` CHAR(1) NOT NULL DEFAULT '1' COMMENT '中介类型(1个人 2机构)',
|
||||
`status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
||||
`create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者',
|
||||
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`intermediary_id`),
|
||||
KEY `idx_name` (`name`),
|
||||
KEY `idx_certificate_no` (`certificate_no`),
|
||||
KEY `idx_intermediary_type` (`intermediary_type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='中介人员黑名单表';
|
||||
```
|
||||
|
||||
### 字段说明
|
||||
|
||||
| 字段名 | 类型 | 说明 | 必填 | 默认值 |
|
||||
|-------|------|------|-----|-------|
|
||||
| intermediary_id | BIGINT | 中介ID(主键) | 是 | 自增 |
|
||||
| name | VARCHAR(100) | 姓名/机构名称 | 是 | - |
|
||||
| certificate_no | VARCHAR(50) | 证件号 | 否 | NULL |
|
||||
| intermediary_type | CHAR(1) | 中介类型(1个人 2机构) | 是 | '1' |
|
||||
| status | CHAR(1) | 状态(0正常 1停用) | 是 | '0' |
|
||||
| remark | VARCHAR(500) | 备注 | 否 | NULL |
|
||||
| create_by | VARCHAR(64) | 创建者 | 是 | - |
|
||||
| create_time | DATETIME | 创建时间 | 是 | - |
|
||||
| update_by | VARCHAR(64) | 更新者 | 否 | '' |
|
||||
| update_time | DATETIME | 更新时间 | 否 | NULL |
|
||||
|
||||
### 索引设计
|
||||
|
||||
- 主键索引:`intermediary_id`
|
||||
- 普通索引:`name`(支持按名称搜索)
|
||||
- 普通索引:`certificate_no`(支持按证件号精确匹配)
|
||||
- 普通索引:`intermediary_type`(支持按类型筛选)
|
||||
|
||||
## 后端设计
|
||||
|
||||
### 模块结构
|
||||
|
||||
```
|
||||
ruoyi-dpc/
|
||||
├── src/main/java/com/ruoyi/dpc/
|
||||
│ ├── controller/
|
||||
│ │ └── DpcIntermediaryBlacklistController.java
|
||||
│ ├── domain/
|
||||
│ │ ├── DpcIntermediaryBlacklist.java
|
||||
│ │ ├── dto/
|
||||
│ │ │ ├── DpcIntermediaryBlacklistAddDTO.java
|
||||
│ │ │ ├── DpcIntermediaryBlacklistEditDTO.java
|
||||
│ │ │ └── DpcIntermediaryBlacklistQueryDTO.java
|
||||
│ │ └── vo/
|
||||
│ │ └── DpcIntermediaryBlacklistVO.java
|
||||
│ ├── mapper/
|
||||
│ │ └── DpcIntermediaryBlacklistMapper.java
|
||||
│ └── service/
|
||||
│ ├── IDpcIntermediaryBlacklistService.java
|
||||
│ └── impl/
|
||||
│ └── DpcIntermediaryBlacklistServiceImpl.java
|
||||
└── src/main/resources/mapper/dpc/
|
||||
└── DpcIntermediaryBlacklistMapper.xml
|
||||
```
|
||||
|
||||
### Controller 层设计
|
||||
|
||||
**DpcIntermediaryBlacklistController**
|
||||
|
||||
```java
|
||||
@RestController
|
||||
@RequestMapping("/dpc/intermediary")
|
||||
public class DpcIntermediaryBlacklistController extends BaseController {
|
||||
|
||||
/**
|
||||
* 查询中介黑名单列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('dpc:intermediary:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(DpcIntermediaryBlacklistQueryDTO queryDTO) {
|
||||
// 分页查询逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出中介黑名单列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('dpc:intermediary:export')")
|
||||
@Log(title = "中介黑名单", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, DpcIntermediaryBlacklistQueryDTO queryDTO) {
|
||||
// 导出逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取中介黑名单详细信息
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('dpc:intermediary:query')")
|
||||
@GetMapping(value = "/{intermediaryId}")
|
||||
public AjaxResult getInfo(@PathVariable Long intermediaryId) {
|
||||
// 查询详情逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增中介黑名单
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('dpc:intermediary:add')")
|
||||
@Log(title = "中介黑名单", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody DpcIntermediaryBlacklistAddDTO addDTO) {
|
||||
// 新增逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改中介黑名单
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('dpc:intermediary:edit')")
|
||||
@Log(title = "中介黑名单", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody DpcIntermediaryBlacklistEditDTO editDTO) {
|
||||
// 修改逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除中介黑名单
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('dpc:intermediary:remove')")
|
||||
@Log(title = "中介黑名单", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{intermediaryIds}")
|
||||
public AjaxResult remove(@PathVariable Long[] intermediaryIds) {
|
||||
// 删除逻辑
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载导入模板
|
||||
*/
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
// 生成 Excel 模板
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入中介黑名单
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('dpc:intermediary:import')")
|
||||
@Log(title = "中介黑名单", businessType = BusinessType.IMPORT)
|
||||
@PostMapping("/importData")
|
||||
public AjaxResult importData(MultipartFile file) {
|
||||
// 导入逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Service 层设计
|
||||
|
||||
**IDpcIntermediaryBlacklistService**
|
||||
|
||||
```java
|
||||
public interface IDpcIntermediaryBlacklistService {
|
||||
|
||||
/**
|
||||
* 查询中介黑名单列表
|
||||
*/
|
||||
List<DpcIntermediaryBlacklistVO> selectIntermediaryList(DpcIntermediaryBlacklistQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 查询中介黑名单详细信息
|
||||
*/
|
||||
DpcIntermediaryBlacklistVO selectIntermediaryById(Long intermediaryId);
|
||||
|
||||
/**
|
||||
* 新增中介黑名单
|
||||
*/
|
||||
int insertIntermediary(DpcIntermediaryBlacklistAddDTO addDTO);
|
||||
|
||||
/**
|
||||
* 修改中介黑名单
|
||||
*/
|
||||
int updateIntermediary(DpcIntermediaryBlacklistEditDTO editDTO);
|
||||
|
||||
/**
|
||||
* 批量删除中介黑名单
|
||||
*/
|
||||
int deleteIntermediaryByIds(Long[] intermediaryIds);
|
||||
|
||||
/**
|
||||
* 导入中介黑名单数据
|
||||
*/
|
||||
String importIntermediary(List<DpcIntermediaryBlacklistAddDTO> addDTOList, boolean isUpdateSupport);
|
||||
}
|
||||
```
|
||||
|
||||
### Domain 层设计
|
||||
|
||||
**实体类注解**
|
||||
|
||||
```java
|
||||
public class DpcIntermediaryBlacklist {
|
||||
|
||||
/** 中介ID */
|
||||
private Long intermediaryId;
|
||||
|
||||
/** 姓名/机构名称 */
|
||||
@Excel(name = "姓名/机构名称")
|
||||
private String name;
|
||||
|
||||
/** 证件号 */
|
||||
@Excel(name = "证件号")
|
||||
private String certificateNo;
|
||||
|
||||
/** 中介类型 */
|
||||
@Excel(name = "中介类型", readConverterExp = "1=个人,2=机构")
|
||||
private String intermediaryType;
|
||||
|
||||
/** 状态 */
|
||||
@Excel(name = "状态", readConverterExp = "0=正常,1=停用")
|
||||
private String status;
|
||||
|
||||
/** 备注 */
|
||||
@Excel(name = "备注")
|
||||
private String remark;
|
||||
|
||||
/** 创建者 */
|
||||
private String createBy;
|
||||
|
||||
/** 创建时间 */
|
||||
private Date createTime;
|
||||
|
||||
/** 更新者 */
|
||||
private String updateBy;
|
||||
|
||||
/** 更新时间 */
|
||||
private Date updateTime;
|
||||
}
|
||||
```
|
||||
|
||||
## 前端设计
|
||||
|
||||
### 页面结构
|
||||
|
||||
```
|
||||
ruoyi-ui/src/views/dpcIntermediary/
|
||||
├── index.vue # 主页面(列表 + 搜索)
|
||||
└── components/
|
||||
└── form-dialog.vue # 新增/编辑对话框
|
||||
```
|
||||
|
||||
### 主要功能组件
|
||||
|
||||
**1. 搜索区**
|
||||
- 按姓名/机构名称搜索(模糊)
|
||||
- 按证件号搜索(精确)
|
||||
- 按中介类型筛选(下拉:全部/个人/机构)
|
||||
- 按状态筛选(下拉:全部/正常/停用)
|
||||
|
||||
**2. 操作按钮区**
|
||||
- 新增按钮
|
||||
- 导入按钮
|
||||
- 导出按钮
|
||||
- 下载模板按钮
|
||||
|
||||
**3. 数据表格**
|
||||
- 列:姓名/机构名称、证件号、中介类型、状态、创建时间、操作
|
||||
- 操作列:编辑、删除
|
||||
|
||||
**4. 新增/编辑对话框**
|
||||
- 姓名/机构名称(必填)
|
||||
- 证件号(选填)
|
||||
- 中介类型(必填,单选:个人/机构)
|
||||
- 状态(必填,单选:正常/停用)
|
||||
- 备注(选填,文本域)
|
||||
|
||||
**5. 导入对话框**
|
||||
- 上传 Excel 文件
|
||||
- 显示导入结果(成功/失败数量)
|
||||
- 显示错误详情(如有)
|
||||
|
||||
### API 设计
|
||||
|
||||
**dpcIntermediary.js**
|
||||
|
||||
```javascript
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询中介黑名单列表
|
||||
export function listIntermediary(query) {
|
||||
return request({
|
||||
url: '/dpc/intermediary/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询中介黑名单详细
|
||||
export function getIntermediary(intermediaryId) {
|
||||
return request({
|
||||
url: '/dpc/intermediary/' + intermediaryId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增中介黑名单
|
||||
export function addIntermediary(data) {
|
||||
return request({
|
||||
url: '/dpc/intermediary',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改中介黑名单
|
||||
export function updateIntermediary(data) {
|
||||
return request({
|
||||
url: '/dpc/intermediary',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除中介黑名单
|
||||
export function delIntermediary(intermediaryIds) {
|
||||
return request({
|
||||
url: '/dpc/intermediary/' + intermediaryIds,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出中介黑名单
|
||||
export function exportIntermediary(query) {
|
||||
return request({
|
||||
url: '/dpc/intermediary/export',
|
||||
method: 'post',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 下载导入模板
|
||||
export function importTemplate() {
|
||||
return request({
|
||||
url: '/dpc/intermediary/importTemplate',
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 导入中介黑名单
|
||||
export function importData(data) {
|
||||
return request({
|
||||
url: '/dpc/intermediary/importData',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
## Excel 导入导出设计
|
||||
|
||||
### Excel 模板格式
|
||||
|
||||
| 姓名/机构名称 | 证件号 | 中介类型 | 状态 | 备注 |
|
||||
|-------------|-------|---------|------|------|
|
||||
| 张三 | 110101199001011234 | 个人 | 正常 | 测试数据 |
|
||||
| XX中介公司 | 91110000XXXXXXXXXX | 机构 | 正常 | - |
|
||||
|
||||
### 导入数据验证规则
|
||||
|
||||
1. **姓名/机构名称**:必填,长度 1-100 字符
|
||||
2. **证件号**:选填,长度不超过 50 字符
|
||||
3. **中介类型**:必填,只能填"个人"或"机构"
|
||||
4. **状态**:必填,只能填"正常"或"停用"
|
||||
5. **备注**:选填,长度不超过 500 字符
|
||||
|
||||
### 导入错误处理
|
||||
|
||||
- 记录每一行的错误信息
|
||||
- 返回导入结果统计(成功数、失败数)
|
||||
- 失败数据不写入数据库
|
||||
- 支持更新模式(可选)
|
||||
|
||||
## 权限设计
|
||||
|
||||
| 权限标识 | 说明 | 对应接口 |
|
||||
|---------|------|---------|
|
||||
| dpc:intermediary:list | 查询中介黑名单列表 | GET /dpc/intermediary/list |
|
||||
| dpc:intermediary:query | 查询中介黑名单详情 | GET /dpc/intermediary/{id} |
|
||||
| dpc:intermediary:add | 新增中介黑名单 | POST /dpc/intermediary |
|
||||
| dpc:intermediary:edit | 修改中介黑名单 | PUT /dpc/intermediary |
|
||||
| dpc:intermediary:remove | 删除中介黑名单 | DELETE /dpc/intermediary/{ids} |
|
||||
| dpc:intermediary:export | 导出中介黑名单 | POST /dpc/intermediary/export |
|
||||
| dpc:intermediary:import | 导入中介黑名单 | POST /dpc/intermediary/importData |
|
||||
|
||||
## 菜单设计
|
||||
|
||||
在系统菜单表中添加以下菜单记录:
|
||||
|
||||
```sql
|
||||
-- 一级菜单:信息维护
|
||||
INSERT INTO sys_menu VALUES (
|
||||
2000, '信息维护', NULL, 1, 0, 'dpc', NULL, 1, 0, 'M', '0', '0', '', 'example', 'admin', NOW(), '', NULL, '信息维护目录'
|
||||
);
|
||||
|
||||
-- 二级菜单:中介库管理
|
||||
INSERT INTO sys_menu VALUES (
|
||||
2001, '中介库管理', 2000, 1, 0, 'intermediary', 'dpcIntermediary/index', 1, 0, 'C', '0', '0', 'dpc:intermediary:list', 'user', 'admin', NOW(), '', NULL, '中介库管理菜单'
|
||||
);
|
||||
|
||||
-- 中介库管理按钮权限
|
||||
INSERT INTO sys_menu VALUES (2002, '中介查询', 2001, 1, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:query', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2003, '中介新增', 2001, 2, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:add', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2004, '中介修改', 2001, 3, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:edit', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2005, '中介删除', 2001, 4, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:remove', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2006, '中介导出', 2001, 5, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:export', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2007, '中介导入', 2001, 6, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:import', '#', 'admin', NOW(), '', NULL, '');
|
||||
```
|
||||
|
||||
## 字典数据设计
|
||||
|
||||
### 中介类型(dpc_intermediary_type)
|
||||
|
||||
| 字典值 | 字典标签 | 排序 | 状态 |
|
||||
|-------|---------|-----|------|
|
||||
| 1 | 个人 | 1 | 正常 |
|
||||
| 2 | 机构 | 2 | 正常 |
|
||||
|
||||
## 技术约束
|
||||
|
||||
1. **后端框架**:Spring Boot 3.5.8
|
||||
2. **ORM 框架**:MyBatis 3.0.5
|
||||
3. **Excel 处理**:EasyExcel 3.3.4(依赖 `replace-poi-with-easyexcel` change)
|
||||
4. **前端框架**:Vue 2.6.12 + Element UI 2.15.14
|
||||
5. **数据库**:MySQL 8.2.0
|
||||
6. **字符编码**:UTF-8(utf8mb4)
|
||||
124
openspec/changes/add-intermediary-blacklist/proposal.md
Normal file
124
openspec/changes/add-intermediary-blacklist/proposal.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# Proposal: 添加中介人员黑名单管理模块
|
||||
|
||||
## Change ID
|
||||
`add-intermediary-blacklist`
|
||||
|
||||
## Summary
|
||||
添加中介人员黑名单管理模块,实现外部中介人员/机构黑名单库的建立和维护。该模块支持 Excel 模板下载、批量导入、增删改查等功能,是系统中信息维护模块的核心子功能之一。
|
||||
|
||||
## Motivation
|
||||
目前系统缺少中介人员黑名单管理功能。用户需要:
|
||||
1. 建立并维护外部中介人员/机构黑名单库
|
||||
2. 通过 Excel 批量导入中介名单数据
|
||||
3. 对中介名单进行增、删、改、查操作
|
||||
4. 支持按姓名、证件号、机构名称等条件查询
|
||||
5. 在项目工作台中选择确认后的可疑名单
|
||||
6. 当员工交易对手命中该库时,系统自动产生高风险预警
|
||||
|
||||
## Scope
|
||||
本提案实现以下功能:
|
||||
|
||||
### 包含的功能
|
||||
- **3.1.1 名单导入**
|
||||
- Excel 模板下载(包含必填字段示例)
|
||||
- Excel 批量导入中介名单
|
||||
- 导入数据验证与错误提示
|
||||
|
||||
- **3.1.2 名单维护**
|
||||
- 新增中介信息(个人/机构)
|
||||
- 编辑中介信息
|
||||
- 删除中介信息(带使用检查)
|
||||
- 批量删除
|
||||
|
||||
- **3.1.3 名单查询**
|
||||
- 按姓名/机构名称模糊搜索
|
||||
- 按证件号精确搜索
|
||||
- 按中介类型筛选(个人/机构)
|
||||
- 按状态筛选(有效/失效)
|
||||
|
||||
- **3.1.4 名单导出**
|
||||
- 导出当前查询结果为 Excel
|
||||
|
||||
### 明确排除
|
||||
- **3.1.5 名单选择**(在项目工作台中选择名单的功能,属于项目工作台模块)
|
||||
- **3.1.6 自动预警**(命中黑名单产生预警的功能,属于风险分析模块)
|
||||
|
||||
## Proposed Design
|
||||
详见 [design.md](./design.md)
|
||||
|
||||
## Alternatives Considered
|
||||
|
||||
### 选项1:使用若依代码生成器
|
||||
**优点**:
|
||||
- 快速生成标准 CRUD 代码
|
||||
- 自动生成前端页面和 API
|
||||
- 符合项目基本规范
|
||||
|
||||
**缺点**:
|
||||
- 需要手动调整 Excel 导入导出逻辑
|
||||
- 需要手动添加数据验证规则
|
||||
- 需要手动处理个人/机构两种类型的差异显示
|
||||
|
||||
**决定**:部分采用。使用代码生成器生成基础 CRUD 代码,然后手动添加 Excel 导入导出和业务验证逻辑。
|
||||
|
||||
### 选项2:完全自定义开发
|
||||
**优点**:
|
||||
- 完全控制实现细节
|
||||
- 可以根据业务需求灵活定制
|
||||
|
||||
**缺点**:
|
||||
- 开发周期较长
|
||||
- 需要确保代码风格与若依框架一致
|
||||
|
||||
**决定**:不采用。中介黑名单管理是标准 CRUD 功能,使用代码生成器可提高开发效率。
|
||||
|
||||
## Impact
|
||||
|
||||
### 后端影响
|
||||
- 新建 `ruoyi-dpc` 模块(如果不存在),与若依框架代码分离
|
||||
- 新增表:`dpc_intermediary_blacklist`(中介黑名单主表)
|
||||
- 新增权限:`dpc:intermediary:list`, `dpc:intermediary:query`, `dpc:intermediary:add`, `dpc:intermediary:edit`, `dpc:intermediary:remove`, `dpc:intermediary:export`, `dpc:intermediary:import`
|
||||
- Controller 层:`ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcIntermediaryBlacklistController.java`
|
||||
|
||||
### 前端影响
|
||||
- 新增视图:`ruoyi-ui/src/views/dpcIntermediary/`
|
||||
- 新增 API:`ruoyi-ui/src/api/dpcIntermediary.js`
|
||||
- 新增菜单:信息维护 > 中介库管理(注意与数据库中菜单表进行联动修改)
|
||||
|
||||
### 数据库影响
|
||||
- 新增表:`dpc_intermediary_blacklist`
|
||||
|
||||
## Dependencies
|
||||
- 依赖 EasyExcel 进行 Excel 导入导出(参考 `replace-poi-with-easyexcel` change)
|
||||
- 依赖若依框架的文件上传功能
|
||||
- 依赖若依框架的权限系统
|
||||
|
||||
## Related Changes
|
||||
- `replace-poi-with-easyexcel` - 依赖 EasyExcel 替换完成后的 Excel 工具
|
||||
|
||||
## Open Questions
|
||||
1. **证件号校验**:
|
||||
- 是否需要添加格式校验?
|
||||
- 建议:添加基本格式校验,但不强制要求(可能是历史数据)
|
||||
|
||||
2. **删除前的使用检查**:
|
||||
- 如何判断中介信息是否在项目中使用?
|
||||
- 建议:暂时不实现使用检查,允许直接删除(可在后续版本中添加关联表)
|
||||
|
||||
3. **中介类型的数据结构**:
|
||||
- 个人和机构是否分开存储?
|
||||
- 建议:使用同一张表,通过 `intermediary_type` 字段区分
|
||||
|
||||
## Success Criteria
|
||||
- [ ] 用户可以下载 Excel 导入模板
|
||||
- [ ] 用户可以通过 Excel 批量导入中介名单
|
||||
- [ ] 用户可以新增中介信息(个人/机构)
|
||||
- [ ] 用户可以编辑中介信息
|
||||
- [ ] 用户可以删除中介信息
|
||||
- [ ] 用户可以按多种条件查询中介名单
|
||||
- [ ] 用户可以导出查询结果为 Excel
|
||||
- [ ] 导入时进行数据验证并提示错误
|
||||
|
||||
## References
|
||||
- [模块设计文档](../../../doc/modules/03-信息维护模块.md)
|
||||
- [若依开发文档](https://doc.ruoyi.vip/)
|
||||
@@ -0,0 +1,388 @@
|
||||
# Spec: 中介人员黑名单管理
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 系统SHALL支持查询中介黑名单列表
|
||||
|
||||
系统MUST提供查询功能,允许用户查询系统中已维护的中介人员/机构黑名单列表,以便了解当前黑名单库的内容。
|
||||
|
||||
#### Scenario: 分页查询中介黑名单列表
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:list` 权限
|
||||
**When** 用户访问中介库管理页面
|
||||
**Then** 系统应显示中介黑名单列表,支持分页展示
|
||||
|
||||
#### Scenario: 按名称模糊搜索中介黑名单
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:list` 权限
|
||||
**And** 系统中存在姓名为"张三"的中介人员
|
||||
**When** 用户在搜索框输入"张"并点击搜索
|
||||
**Then** 系统应返回所有姓名中包含"张"的中介记录
|
||||
|
||||
#### Scenario: 按证件号精确搜索中介黑名单
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:list` 权限
|
||||
**And** 系统中存在证件号为"110101199001011234"的中介人员
|
||||
**When** 用户在搜索框输入"110101199001011234"并点击搜索
|
||||
**Then** 系统应返回该证件号对应的中介记录
|
||||
|
||||
#### Scenario: 按中介类型筛选中介黑名单
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:list` 权限
|
||||
**And** 系统中存在个人和机构两种类型的中介记录
|
||||
**When** 用户选择中介类型为"个人"并点击搜索
|
||||
**Then** 系统应仅返回中介类型为"个人"的记录
|
||||
|
||||
#### Scenario: 按状态筛选中介黑名单
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:list` 权限
|
||||
**And** 系统中存在正常和停用两种状态的中介记录
|
||||
**When** 用户选择状态为"正常"并点击搜索
|
||||
**Then** 系统应仅返回状态为"正常"的记录
|
||||
|
||||
#### Scenario: 组合条件查询中介黑名单
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:list` 权限
|
||||
**When** 用户同时输入名称"张"、选择中介类型为"个人"、选择状态为"正常"并点击搜索
|
||||
**Then** 系统应返回同时满足所有条件的记录
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL支持新增中介黑名单
|
||||
|
||||
系统MUST提供新增功能,允许用户手动添加中介人员或机构到黑名单中,以建立和维护黑名单库。
|
||||
|
||||
#### Scenario: 新增个人类型的中介黑名单
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户点击"新增"按钮
|
||||
**And** 填写姓名为"张三"
|
||||
**And** 填写证件号为"110101199001011234"
|
||||
**And** 选择中介类型为"个人"
|
||||
**And** 选择状态为"正常"
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应保存中介信息并提示"操作成功"
|
||||
**And** 列表中应显示新增的记录
|
||||
|
||||
#### Scenario: 新增机构类型的中介黑名单
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户点击"新增"按钮
|
||||
**And** 填写机构名称为"XX中介公司"
|
||||
**And** 填写证件号为"91110000XXXXXXXXXX"
|
||||
**And** 选择中介类型为"机构"
|
||||
**And** 选择状态为"正常"
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应保存中介信息并提示"操作成功"
|
||||
**And** 列表中应显示新增的记录
|
||||
|
||||
#### Scenario: 新增时不填写证件号
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户点击"新增"按钮
|
||||
**And** 仅填写姓名为"张三"
|
||||
**And** 不填写证件号
|
||||
**And** 选择中介类型为"个人"
|
||||
**And** 选择状态为"正常"
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应保存中介信息并提示"操作成功"
|
||||
|
||||
#### Scenario: 新增时姓名为空应校验失败
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户点击"新增"按钮
|
||||
**And** 不填写姓名
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应提示"姓名/机构名称不能为空"
|
||||
**And** 不保存数据
|
||||
|
||||
#### Scenario: 新增时姓名超过100字符应校验失败
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户点击"新增"按钮
|
||||
**And** 填写姓名为101个字符的字符串
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应提示"姓名/机构名称长度不能超过100个字符"
|
||||
**And** 不保存数据
|
||||
|
||||
#### Scenario: 新增时填写备注信息
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户点击"新增"按钮
|
||||
**And** 填写必填信息
|
||||
**And** 填写备注为"涉及多起违规交易"
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应保存中介信息及备注
|
||||
**And** 列表中应显示新增的记录
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL支持编辑中介黑名单
|
||||
|
||||
系统MUST提供编辑功能,允许用户修改已存在的中介黑名单信息,以更新或纠正数据。
|
||||
|
||||
#### Scenario: 编辑中介黑名单的基本信息
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:edit` 权限
|
||||
**And** 系统中存在一条中介记录
|
||||
**When** 用户点击该记录的"编辑"按钮
|
||||
**And** 修改姓名为"李四"
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应更新中介信息并提示"操作成功"
|
||||
**And** 列表中应显示更新后的姓名
|
||||
|
||||
#### Scenario: 编辑中介黑名单的证件号
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:edit` 权限
|
||||
**And** 系统中存在一条中介记录
|
||||
**When** 用户点击该记录的"编辑"按钮
|
||||
**And** 修改证件号为"110101199001011235"
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应更新证件号并提示"操作成功"
|
||||
|
||||
#### Scenario: 编辑中介黑名单的状态为停用
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:edit` 权限
|
||||
**And** 系统中存在一条状态为"正常"的中介记录
|
||||
**When** 用户点击该记录的"编辑"按钮
|
||||
**And** 修改状态为"停用"
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应更新状态并提示"操作成功"
|
||||
**And** 该记录在列表中应显示为"停用"状态
|
||||
|
||||
#### Scenario: 编辑时姓名为空应校验失败
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:edit` 权限
|
||||
**And** 系统中存在一条中介记录
|
||||
**When** 用户点击该记录的"编辑"按钮
|
||||
**And** 清空姓名字段
|
||||
**And** 点击"确定"按钮
|
||||
**Then** 系统应提示"姓名/机构名称不能为空"
|
||||
**And** 不更新数据
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL支持删除中介黑名单
|
||||
|
||||
系统MUST提供删除功能,允许用户删除不再需要的中介黑名单记录,以保持黑名单库的准确性。
|
||||
|
||||
#### Scenario: 删除单条中介黑名单记录
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:remove` 权限
|
||||
**And** 系统中存在一条中介记录
|
||||
**When** 用户点击该记录的"删除"按钮
|
||||
**And** 确认删除操作
|
||||
**Then** 系统应删除该记录并提示"操作成功"
|
||||
**And** 列表中不再显示该记录
|
||||
|
||||
#### Scenario: 批量删除中介黑名单记录
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:remove` 权限
|
||||
**And** 系统中存在多条中介记录
|
||||
**When** 用户勾选3条记录
|
||||
**And** 点击"删除"按钮
|
||||
**And** 确认删除操作
|
||||
**Then** 系统应删除选中的3条记录并提示"操作成功"
|
||||
**And** 列表中不再显示这3条记录
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL支持导出中介黑名单
|
||||
|
||||
系统MUST提供导出功能,允许用户将查询结果导出为 Excel 文件,以便进行离线分析或备份。
|
||||
|
||||
#### Scenario: 导出所有中介黑名单数据
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:export` 权限
|
||||
**And** 系统中存在100条中介记录
|
||||
**When** 用户点击"导出"按钮
|
||||
**And** 不设置任何筛选条件
|
||||
**Then** 系统应生成包含100条记录的 Excel 文件并下载
|
||||
|
||||
#### Scenario: 导出筛选后的中介黑名单数据
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:export` 权限
|
||||
**And** 系统中存在个人和机构两种类型的中介记录
|
||||
**When** 用户筛选中介类型为"个人"
|
||||
**And** 点击"导出"按钮
|
||||
**Then** 系统应生成仅包含个人类型记录的 Excel 文件并下载
|
||||
|
||||
#### Scenario: 导出的 Excel 文件格式正确
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:export` 权限
|
||||
**When** 用户点击"导出"按钮
|
||||
**Then** Excel 文件应包含以下列:姓名/机构名称、证件号、中介类型、状态、备注、创建时间
|
||||
**And** 表头应使用中文显示
|
||||
**And** 数据应正确显示(中介类型、状态应显示中文而非数字)
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL支持下载 Excel 导入模板
|
||||
|
||||
系统MUST提供模板下载功能,允许用户下载标准的 Excel 导入模板,以便按照模板格式准备数据后批量导入。
|
||||
|
||||
#### Scenario: 下载导入模板
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**When** 用户点击"下载模板"按钮
|
||||
**Then** 系统应生成 Excel 模板文件并下载
|
||||
**And** 模板应包含示例数据行
|
||||
**And** 模板应包含以下列:姓名/机构名称、证件号、中介类型、状态、备注
|
||||
|
||||
#### Scenario: 模板中的示例数据正确
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**When** 用户下载导入模板
|
||||
**Then** 模板应包含至少一行示例数据
|
||||
**And** 示例数据应展示正确的填写格式
|
||||
**And** 中介类型示例应为"个人"或"机构"
|
||||
**And** 状态示例应为"正常"或"停用"
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL支持通过 Excel 批量导入中介黑名单
|
||||
|
||||
系统MUST提供批量导入功能,允许用户通过 Excel 文件批量导入中介黑名单数据,以提高数据录入效率。
|
||||
|
||||
#### Scenario: 导入包含有效数据的 Excel 文件
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**And** 用户已准备好包含10条有效数据的 Excel 文件
|
||||
**When** 用户点击"导入"按钮
|
||||
**And** 选择准备好的 Excel 文件
|
||||
**And** 点击"确定"
|
||||
**Then** 系统应导入10条记录并提示"成功导入10条数据"
|
||||
**And** 列表中应显示这10条新增记录
|
||||
|
||||
#### Scenario: 导入时部分数据格式错误
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**And** 用户准备的 Excel 文件包含10条数据
|
||||
**And** 其中2条数据的姓名字段为空
|
||||
**When** 用户点击"导入"按钮
|
||||
**And** 选择 Excel 文件
|
||||
**And** 点击"确定"
|
||||
**Then** 系统应仅导入8条有效数据
|
||||
**And** 提示"成功导入8条数据,失败2条数据"
|
||||
**And** 显示失败行的错误详情
|
||||
|
||||
#### Scenario: 导入时中介类型值不在允许范围内
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**And** 用户准备的 Excel 文件中某条记录的中介类型填写为"未知"
|
||||
**When** 用户点击"导入"按钮
|
||||
**And** 选择 Excel 文件
|
||||
**And** 点击"确定"
|
||||
**Then** 系统应提示该行数据"中介类型只能填写'个人'或'机构'"
|
||||
**And** 该行数据不被导入
|
||||
|
||||
#### Scenario: 导入时状态值不在允许范围内
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**And** 用户准备的 Excel 文件中某条记录的状态填写为"未知"
|
||||
**When** 用户点击"导入"按钮
|
||||
**And** 选择 Excel 文件
|
||||
**And** 点击"确定"
|
||||
**Then** 系统应提示该行数据"状态只能填写'正常'或'停用'"
|
||||
**And** 该行数据不被导入
|
||||
|
||||
#### Scenario: 导入时证件号超过50字符
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**And** 用户准备的 Excel 文件中某条记录的证件号为51个字符
|
||||
**When** 用户点击"导入"按钮
|
||||
**And** 选择 Excel 文件
|
||||
**And** 点击"确定"
|
||||
**Then** 系统应提示该行数据"证件号长度不能超过50个字符"
|
||||
**And** 该行数据不被导入
|
||||
|
||||
#### Scenario: 导入时备注超过500字符
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**And** 用户准备的 Excel 文件中某条记录的备注为501个字符
|
||||
**When** 用户点击"导入"按钮
|
||||
**And** 选择 Excel 文件
|
||||
**And** 点击"确定"
|
||||
**Then** 系统应提示该行数据"备注长度不能超过500个字符"
|
||||
**And** 该行数据不被导入
|
||||
|
||||
#### Scenario: 导入时选择更新支持模式
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**And** 系统中已存在一条证件号为"110101199001011234"的记录
|
||||
**And** 用户准备的 Excel 文件包含相同证件号的记录但姓名不同
|
||||
**When** 用户点击"导入"按钮
|
||||
**And** 选择 Excel 文件
|
||||
**And** 勾选"更新已存在数据"选项
|
||||
**And** 点击"确定"
|
||||
**Then** 系统应更新该证件号对应的记录
|
||||
**And** 提示包含更新成功的消息
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL验证用户权限
|
||||
|
||||
系统MUST根据用户的角色和权限控制其对中介黑名单功能的访问,确保未授权用户无法执行相应操作。
|
||||
|
||||
#### Scenario: 无权限用户访问列表应被拒绝
|
||||
|
||||
**Given** 用户已登录系统
|
||||
**And** 该用户不具有 `dpc:intermediary:list` 权限
|
||||
**When** 用户尝试访问中介库管理页面
|
||||
**Then** 系统应提示"您没有权限执行此操作"
|
||||
**And** 不显示列表数据
|
||||
|
||||
#### Scenario: 无权限用户尝试新增应被拒绝
|
||||
|
||||
**Given** 用户已登录系统
|
||||
**And** 该用户不具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户尝试点击"新增"按钮
|
||||
**Then** 系统应隐藏或禁用"新增"按钮
|
||||
|
||||
#### Scenario: 无权限用户尝试导出应被拒绝
|
||||
|
||||
**Given** 用户已登录系统
|
||||
**And** 该用户不具有 `dpc:intermediary:export` 权限
|
||||
**When** 用户尝试点击"导出"按钮
|
||||
**Then** 系统应隐藏或禁用"导出"按钮
|
||||
|
||||
#### Scenario: 无权限用户尝试导入应被拒绝
|
||||
|
||||
**Given** 用户已登录系统
|
||||
**And** 该用户不具有 `dpc:intermediary:import` 权限
|
||||
**When** 用户尝试点击"导入"按钮
|
||||
**Then** 系统应隐藏或禁用"导入"按钮
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 系统SHALL记录操作日志
|
||||
|
||||
系统MUST记录用户对中介黑名单的关键操作,包括新增、修改、删除、导入等操作,以便审计和追溯。
|
||||
|
||||
#### Scenario: 新增操作应记录日志
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:add` 权限
|
||||
**When** 用户成功新增一条中介记录
|
||||
**Then** 系统应在操作日志中记录
|
||||
**And** 日志应包含:操作人、操作时间、操作类型、操作内容
|
||||
|
||||
#### Scenario: 修改操作应记录日志
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:edit` 权限
|
||||
**When** 用户成功修改一条中介记录
|
||||
**Then** 系统应在操作日志中记录
|
||||
**And** 日志应包含:操作人、操作时间、操作类型、修改内容
|
||||
|
||||
#### Scenario: 删除操作应记录日志
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:remove` 权限
|
||||
**When** 用户成功删除一条中介记录
|
||||
**Then** 系统应在操作日志中记录
|
||||
**And** 日志应包含:操作人、操作时间、操作类型、删除的记录ID
|
||||
|
||||
#### Scenario: 导入操作应记录日志
|
||||
|
||||
**Given** 用户已登录系统且具有 `dpc:intermediary:import` 权限
|
||||
**When** 用户成功导入中介数据
|
||||
**Then** 系统应在操作日志中记录
|
||||
**And** 日志应包含:操作人、操作时间、操作类型、导入数量
|
||||
219
openspec/changes/add-intermediary-blacklist/tasks.md
Normal file
219
openspec/changes/add-intermediary-blacklist/tasks.md
Normal file
@@ -0,0 +1,219 @@
|
||||
# Tasks: 添加中介人员黑名单管理模块
|
||||
|
||||
## 环境准备
|
||||
|
||||
- [ ] 1.1 确认 `replace-poi-with-easyexcel` change 已完成(EasyExcel 依赖可用)
|
||||
- [ ] 1.2 创建 `ruoyi-dpc` 模块目录结构(如果不存在)
|
||||
- [ ] 1.3 在父 pom.xml 中添加 `ruoyi-dpc` 模块声明(如果不存在)
|
||||
|
||||
## 数据库设计
|
||||
|
||||
- [ ] 2.1 编写数据库建表 SQL
|
||||
- [ ] 2.1.1 创建 `dpc_intermediary_blacklist` 表
|
||||
- [ ] 2.1.2 添加索引(name, id_card, intermediary_type)
|
||||
- [ ] 2.1.3 添加表注释和字段注释
|
||||
|
||||
- [ ] 2.2 编写菜单权限 SQL
|
||||
- [ ] 2.2.1 添加"信息维护"一级菜单(menu_id: 2000)
|
||||
- [ ] 2.2.2 添加"中介库管理"二级菜单(menu_id: 2001)
|
||||
- [ ] 2.2.3 添加按钮权限(查询、新增、修改、删除、导出、导入)
|
||||
|
||||
- [ ] 2.3 编写字典数据 SQL
|
||||
- [ ] 2.3.1 添加"中介类型"字典(dpc_intermediary_type)
|
||||
- [ ] 2.3.2 添加"风险等级"字典(dpc_risk_level)
|
||||
|
||||
- [ ] 2.4 执行 SQL 脚本初始化数据
|
||||
|
||||
## 后端开发
|
||||
|
||||
- [ ] 3.1 创建 Domain 层
|
||||
- [ ] 3.1.1 创建 `DpcIntermediaryBlacklist.java` 实体类
|
||||
- [ ] 3.1.2 创建 `DpcIntermediaryBlacklistAddDTO.java` 新增 DTO
|
||||
- [ ] 3.1.3 创建 `DpcIntermediaryBlacklistEditDTO.java` 编辑 DTO
|
||||
- [ ] 3.1.4 创建 `DpcIntermediaryBlacklistQueryDTO.java` 查询 DTO
|
||||
- [ ] 3.1.5 创建 `DpcIntermediaryBlacklistVO.java` 视图对象
|
||||
- [ ] 3.1.6 添加 `@Excel` 注解支持导入导出
|
||||
|
||||
- [ ] 3.2 创建 Mapper 层
|
||||
- [ ] 3.2.1 创建 `DpcIntermediaryBlacklistMapper.java` 接口
|
||||
- [ ] 3.2.2 创建 `DpcIntermediaryBlacklistMapper.xml` 映射文件
|
||||
- [ ] 3.2.3 实现 `selectIntermediaryList` 方法(支持条件查询)
|
||||
- [ ] 3.2.4 实现 `selectIntermediaryById` 方法
|
||||
- [ ] 3.2.5 实现 `insertIntermediary` 方法
|
||||
- [ ] 3.2.6 实现 `updateIntermediary` 方法
|
||||
- [ ] 3.2.7 实现 `deleteIntermediaryByIds` 方法
|
||||
|
||||
- [ ] 3.3 创建 Service 层
|
||||
- [ ] 3.3.1 创建 `IDpcIntermediaryBlacklistService.java` 接口
|
||||
- [ ] 3.3.2 创建 `DpcIntermediaryBlacklistServiceImpl.java` 实现类
|
||||
- [ ] 3.3.3 实现查询列表业务逻辑(分页)
|
||||
- [ ] 3.3.4 实现查询详情业务逻辑
|
||||
- [ ] 3.3.5 实现新增业务逻辑(含数据校验)
|
||||
- [ ] 3.3.6 实现修改业务逻辑(含数据校验)
|
||||
- [ ] 3.3.7 实现删除业务逻辑
|
||||
- [ ] 3.3.8 实现导出业务逻辑
|
||||
- [ ] 3.3.9 实现导入业务逻辑(含数据验证)
|
||||
|
||||
- [ ] 3.4 创建 Controller 层
|
||||
- [ ] 3.4.1 创建 `DpcIntermediaryBlacklistController.java`
|
||||
- [ ] 3.4.2 实现 `list` 接口(查询列表)
|
||||
- [ ] 3.4.3 实现 `getInfo` 接口(查询详情)
|
||||
- [ ] 3.4.4 实现 `add` 接口(新增)
|
||||
- [ ] 3.4.5 实现 `edit` 接口(修改)
|
||||
- [ ] 3.4.6 实现 `remove` 接口(删除)
|
||||
- [ ] 3.4.7 实现 `export` 接口(导出 Excel)
|
||||
- [ ] 3.4.8 实现 `importTemplate` 接口(下载模板)
|
||||
- [ ] 3.4.9 实现 `importData` 接口(导入 Excel)
|
||||
- [ ] 3.4.10 添加 `@PreAuthorize` 权限注解
|
||||
- [ ] 3.4.11 添加 `@Log` 操作日志注解
|
||||
|
||||
- [ ] 3.5 实现数据验证逻辑
|
||||
- [ ] 3.5.1 姓名必填校验
|
||||
- [ ] 3.5.2 姓名长度校验(1-100字符)
|
||||
- [ ] 3.5.3 身份证号长度校验(最大50字符)
|
||||
- [ ] 3.5.4 中介类型枚举校验(1=个人,2=机构)
|
||||
- [ ] 3.5.5 风险等级枚举校验(1=高,2=中,3=低)
|
||||
- [ ] 3.5.6 状态枚举校验(0=正常,1=停用)
|
||||
- [ ] 3.5.7 备注长度校验(最大500字符)
|
||||
|
||||
- [ ] 3.6 实现 Excel 导入导出功能
|
||||
- [ ] 3.6.1 生成导入模板(带示例数据)
|
||||
- [ ] 3.6.2 实现 Excel 数据读取
|
||||
- [ ] 3.6.3 实现导入数据验证
|
||||
- [ ] 3.6.4 实现导入错误提示
|
||||
- [ ] 3.6.5 实现批量插入数据
|
||||
- [ ] 3.6.6 实现 Excel 数据导出
|
||||
- [ ] 3.6.7 支持按查询条件导出
|
||||
|
||||
## 前端开发
|
||||
|
||||
- [ ] 4.1 创建 API 接口文件
|
||||
- [ ] 4.1.1 创建 `ruoyi-ui/src/api/dpcIntermediary.js`
|
||||
- [ ] 4.1.2 定义 `listIntermediary` 接口
|
||||
- [ ] 4.1.3 定义 `getIntermediary` 接口
|
||||
- [ ] 4.1.4 定义 `addIntermediary` 接口
|
||||
- [ ] 4.1.5 定义 `updateIntermediary` 接口
|
||||
- [ ] 4.1.6 定义 `delIntermediary` 接口
|
||||
- [ ] 4.1.7 定义 `exportIntermediary` 接口
|
||||
- [ ] 4.1.8 定义 `importTemplate` 接口
|
||||
- [ ] 4.1.9 定义 `importData` 接口
|
||||
|
||||
- [ ] 4.2 创建主页面
|
||||
- [ ] 4.2.1 创建 `ruoyi-ui/src/views/dpcIntermediary/index.vue`
|
||||
- [ ] 4.2.2 实现搜索表单区域
|
||||
- [ ] 4.2.3 实现操作按钮区域(新增、导入、导出、下载模板)
|
||||
- [ ] 4.2.4 实现数据表格(展示列表数据)
|
||||
- [ ] 4.2.5 实现分页组件
|
||||
- [ ] 4.2.6 实现新增/编辑对话框
|
||||
- [ ] 4.2.7 实现导入对话框
|
||||
- [ ] 4.2.8 实现表单验证规则
|
||||
- [ ] 4.2.9 实现字典数据回显(中介类型、风险等级、状态)
|
||||
|
||||
- [ ] 4.3 实现前端功能细节
|
||||
- [ ] 4.3.1 搜索条件组合查询
|
||||
- [ ] 4.3.2 新增/编辑表单提交
|
||||
- [ ] 4.3.3 单条/批量删除确认
|
||||
- [ ] 4.3.4 Excel 文件上传
|
||||
- [ ] 4.3.5 导入结果展示(成功/失败数量)
|
||||
- [ ] 4.3.6 导入错误详情展示
|
||||
- [ ] 4.3.7 权限按钮显示控制(v-hasPermi)
|
||||
|
||||
## 测试
|
||||
|
||||
- [ ] 5.1 后端单元测试
|
||||
- [ ] 5.1.1 测试查询列表功能
|
||||
- [ ] 5.1.2 测试查询详情功能
|
||||
- [ ] 5.1.3 测试新增功能(含边界条件)
|
||||
- [ ] 5.1.4 测试修改功能
|
||||
- [ ] 5.1.5 测试删除功能
|
||||
- [ ] 5.1.6 测试数据校验逻辑
|
||||
- [ ] 5.1.7 测试 Excel 导入功能(含异常数据)
|
||||
- [ ] 5.1.8 测试 Excel 导出功能
|
||||
|
||||
- [ ] 5.2 后端集成测试
|
||||
- [ ] 5.2.1 测试 Controller 层接口
|
||||
- [ ] 5.2.2 测试权限验证
|
||||
- [ ] 5.2.3 测试操作日志记录
|
||||
|
||||
- [ ] 5.3 前端功能测试
|
||||
- [ ] 5.3.1 测试页面加载和列表展示
|
||||
- [ ] 5.3.2 测试搜索功能(各种条件组合)
|
||||
- [ ] 5.3.3 测试新增功能
|
||||
- [ ] 5.3.4 测试编辑功能
|
||||
- [ ] 5.3.5 测试删除功能(单条和批量)
|
||||
- [ ] 5.3.6 测试 Excel 模板下载
|
||||
- [ ] 5.3.7 测试 Excel 导入(正常和异常数据)
|
||||
- [ ] 5.3.8 测试 Excel 导出
|
||||
- [ ] 5.3.9 测试权限控制
|
||||
|
||||
- [ ] 5.4 生成测试脚本
|
||||
- [ ] 5.4.1 编写自动化测试脚本
|
||||
- [ ] 5.4.2 生成测试数据
|
||||
- [ ] 5.4.3 执行测试并验证结果
|
||||
|
||||
## 文档编写
|
||||
|
||||
- [ ] 6.1 生成 API 文档
|
||||
- [ ] 6.1.1 生成 Swagger 接口文档
|
||||
- [ ] 6.1.2 编写接口使用说明
|
||||
|
||||
- [ ] 6.2 编写用户手册
|
||||
- [ ] 6.2.1 功能概述
|
||||
- [ ] 6.2.2 操作步骤说明
|
||||
- [ ] 6.2.3 常见问题解答
|
||||
|
||||
## 验收
|
||||
|
||||
- [ ] 7.1 功能完整性验收
|
||||
- [ ] 7.1.1 所有 CRUD 功能正常
|
||||
- [ ] 7.1.2 Excel 导入导出功能正常
|
||||
- [ ] 7.1.3 数据验证功能正常
|
||||
- [ ] 7.1.4 权限控制功能正常
|
||||
- [ ] 7.1.5 操作日志记录正常
|
||||
|
||||
- [ ] 7.2 性能验收
|
||||
- [ ] 7.2.1 列表查询响应时间 < 1秒(1000条数据)
|
||||
- [ ] 7.2.2 Excel 导入 1000 条数据耗时 < 10秒
|
||||
- [ ] 7.2.3 Excel 导出 1000 条数据耗时 < 5秒
|
||||
|
||||
- [ ] 7.3 兼容性验收
|
||||
- [ ] 7.3.1 支持 Chrome 浏览器
|
||||
- [ ] 7.3.2 支持 Edge 浏览器
|
||||
- [ ] 7.3.3 支持 Firefox 浏览器
|
||||
|
||||
## 依赖关系
|
||||
|
||||
```
|
||||
1. 环境准备
|
||||
↓
|
||||
2. 数据库设计
|
||||
↓
|
||||
3. 后端开发(Domain → Mapper → Service → Controller)
|
||||
↓
|
||||
4. 前端开发(API → 页面 → 功能)
|
||||
↓
|
||||
5. 测试
|
||||
↓
|
||||
6. 文档编写
|
||||
↓
|
||||
7. 验收
|
||||
```
|
||||
|
||||
## 并行任务
|
||||
|
||||
以下任务可以并行执行:
|
||||
- 3.2(Mapper 层)可与 3.3(Service 层)部分并行(先定义接口)
|
||||
- 4.1(API 接口)可与 3.4(Controller 层)并行
|
||||
- 5.1(单元测试)可与 5.2(集成测试)部分并行
|
||||
|
||||
## 验收标准
|
||||
|
||||
所有任务完成后,必须满足:
|
||||
1. 所有接口功能正常,无 Bug
|
||||
2. Excel 导入导出功能完整可用
|
||||
3. 数据验证规则正确执行
|
||||
4. 权限控制有效
|
||||
5. 操作日志正确记录
|
||||
6. 前端页面交互流畅
|
||||
7. 通过所有测试用例
|
||||
8. API 文档完整准确
|
||||
Reference in New Issue
Block a user