文件夹整理
This commit is contained in:
124
doc/api-docs/api/ccdi-employee-import-api.md
Normal file
124
doc/api-docs/api/ccdi-employee-import-api.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# 员工信息导入相关接口文档
|
||||
|
||||
## 1. 导入员工信息(异步)
|
||||
|
||||
**接口地址:** `POST /ccdi/employee/importData`
|
||||
|
||||
**权限标识:** `ccdi:employee:import`
|
||||
|
||||
**请求参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| file | File | 是 | Excel文件 |
|
||||
| updateSupport | boolean | 否 | 是否更新已存在的数据,默认false |
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "导入任务已提交,正在后台处理",
|
||||
"data": {
|
||||
"taskId": "uuid-string",
|
||||
"status": "PROCESSING",
|
||||
"message": "导入任务已提交,正在后台处理"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 2. 查询导入状态
|
||||
|
||||
**接口地址:** `GET /ccdi/employee/importStatus/{taskId}`
|
||||
|
||||
**权限标识:** 无
|
||||
|
||||
**路径参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| taskId | String | 是 | 任务ID |
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"taskId": "uuid-string",
|
||||
"status": "SUCCESS",
|
||||
"totalCount": 100,
|
||||
"successCount": 95,
|
||||
"failureCount": 5,
|
||||
"progress": 100,
|
||||
"startTime": 1707225600000,
|
||||
"endTime": 1707225900000,
|
||||
"message": "导入完成"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**状态说明:**
|
||||
|
||||
| 状态值 | 说明 |
|
||||
|--------|------|
|
||||
| PROCESSING | 处理中 |
|
||||
| SUCCESS | 全部成功 |
|
||||
| PARTIAL_SUCCESS | 部分成功 |
|
||||
| FAILED | 全部失败 |
|
||||
|
||||
## 3. 查询导入失败记录
|
||||
|
||||
**接口地址:** `GET /ccdi/employee/importFailures/{taskId}`
|
||||
|
||||
**权限标识:** 无
|
||||
|
||||
**路径参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| taskId | String | 是 | 任务ID |
|
||||
|
||||
**查询参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| pageNum | Integer | 否 | 页码,默认1 |
|
||||
| pageSize | Integer | 否 | 每页条数,默认10 |
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"rows": [
|
||||
{
|
||||
"employeeId": "1234567",
|
||||
"name": "张三",
|
||||
"idCard": "110101199001011234",
|
||||
"deptId": 100,
|
||||
"phone": "13800138000",
|
||||
"status": "0",
|
||||
"hireDate": "2020-01-01",
|
||||
"errorMessage": "身份证号格式错误"
|
||||
}
|
||||
],
|
||||
"total": 5
|
||||
}
|
||||
```
|
||||
|
||||
## 使用流程
|
||||
|
||||
1. 前端调用导入接口上传Excel文件
|
||||
2. 后端立即返回taskId
|
||||
3. 前端每2秒轮询查询导入状态
|
||||
4. 导入完成后显示结果
|
||||
5. 如有失败,显示"查看导入失败记录"按钮
|
||||
6. 用户点击按钮查看失败记录详情
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. Redis中存储的导入状态和失败记录保留7天
|
||||
2. taskId如果过期或不存在,查询接口会返回错误
|
||||
3. 导入是异步处理,大量数据导入不会阻塞HTTP请求
|
||||
4. 失败记录只保存失败的数据,成功的数据不会存储
|
||||
790
doc/api-docs/api/ccdi_purchase_transaction_api.md
Normal file
790
doc/api-docs/api/ccdi_purchase_transaction_api.md
Normal file
@@ -0,0 +1,790 @@
|
||||
# 采购交易信息管理 - API接口文档
|
||||
|
||||
## 文档信息
|
||||
- **模块名称**: 采购交易信息管理
|
||||
- **Controller**: `CcdiPurchaseTransactionController`
|
||||
- **Base Path**: `/ccdi/purchaseTransaction`
|
||||
- **Swagger**: http://localhost:8080/swagger-ui/index.html
|
||||
- **生成时间**: 2026-02-06
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
1. [接口列表](#接口列表)
|
||||
2. [接口详情](#接口详情)
|
||||
3. [数据模型](#数据模型)
|
||||
4. [错误码说明](#错误码说明)
|
||||
5. [接口示例](#接口示例)
|
||||
|
||||
---
|
||||
|
||||
## 接口列表
|
||||
|
||||
| 序号 | 接口名称 | HTTP方法 | 路径 | 权限标识 | 说明 |
|
||||
|------|---------|----------|------|----------|------|
|
||||
| 1 | 查询采购交易列表 | GET | /list | ccdi:purchaseTransaction:list | 分页查询采购交易信息 |
|
||||
| 2 | 获取采购交易详情 | GET | /{purchaseId} | ccdi:purchaseTransaction:query | 根据ID获取详细信息 |
|
||||
| 3 | 新增采购交易 | POST | / | ccdi:purchaseTransaction:add | 新增采购交易记录 |
|
||||
| 4 | 修改采购交易 | PUT | / | ccdi:purchaseTransaction:edit | 修改采购交易记录 |
|
||||
| 5 | 删除采购交易 | DELETE | /{purchaseIds} | ccdi:purchaseTransaction:remove | 删除采购交易记录 |
|
||||
| 6 | 导出采购交易 | POST | /export | ccdi:purchaseTransaction:export | 导出Excel文件 |
|
||||
| 7 | 下载导入模板 | POST | /importTemplate | 无 | 下载带下拉框的模板 |
|
||||
| 8 | 导入采购交易 | POST | /importData | ccdi:purchaseTransaction:import | 异步导入Excel数据 |
|
||||
| 9 | 查询导入状态 | GET | /importStatus/{taskId} | ccdi:purchaseTransaction:import | 查询异步导入进度 |
|
||||
| 10 | 查询导入失败记录 | GET | /importFailures/{taskId} | ccdi:purchaseTransaction:import | 查询导入失败详情 |
|
||||
|
||||
---
|
||||
|
||||
## 接口详情
|
||||
|
||||
### 1. 查询采购交易列表
|
||||
|
||||
**接口描述**: 分页查询采购交易信息列表,支持多条件查询
|
||||
|
||||
**请求方式**: `GET`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/list`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:list`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| pageNum | Integer | 否 | 页码,默认1 | 1 |
|
||||
| pageSize | Integer | 否 | 每页条数,默认10 | 10 |
|
||||
| projectName | String | 否 | 项目名称(模糊查询) | 办公设备采购 |
|
||||
| subjectName | String | 否 | 标的物名称(模糊查询) | 电脑 |
|
||||
| applicantName | String | 否 | 申请人姓名(模糊查询) | 张三 |
|
||||
| params[beginApplyDate] | String | 否 | 申请日期起始 | 2025-01-01 |
|
||||
| params[endApplyDate] | String | 否 | 申请日期结束 | 2025-12-31 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "查询成功",
|
||||
"rows": [
|
||||
{
|
||||
"purchaseId": "PO20250206001",
|
||||
"purchaseCategory": "货物类",
|
||||
"projectName": "办公设备采购项目",
|
||||
"subjectName": "笔记本电脑",
|
||||
"subjectDesc": "高性能办公笔记本",
|
||||
"purchaseQty": 50.00,
|
||||
"budgetAmount": 500000.00,
|
||||
"bidAmount": 450000.00,
|
||||
"actualAmount": 455000.00,
|
||||
"contractAmount": 450000.00,
|
||||
"settlementAmount": 455000.00,
|
||||
"purchaseMethod": "公开招标",
|
||||
"supplierName": "某某科技有限公司",
|
||||
"contactPerson": "李四",
|
||||
"contactPhone": "13800138000",
|
||||
"supplierUscc": "91110000MA000000XX",
|
||||
"supplierBankAccount": "1234567890123456789",
|
||||
"applyDate": "2025-01-01",
|
||||
"planApproveDate": "2025-01-05",
|
||||
"announceDate": "2025-01-10",
|
||||
"bidOpenDate": "2025-01-15",
|
||||
"contractSignDate": "2025-01-20",
|
||||
"expectedDeliveryDate": "2025-02-01",
|
||||
"actualDeliveryDate": "2025-02-01",
|
||||
"acceptanceDate": "2025-02-05",
|
||||
"settlementDate": "2025-02-10",
|
||||
"applicantId": "E001001",
|
||||
"applicantName": "张三",
|
||||
"applyDepartment": "信息技术部",
|
||||
"purchaseLeaderId": "E002001",
|
||||
"purchaseLeaderName": "王五",
|
||||
"purchaseDepartment": "采购部",
|
||||
"createTime": "2025-02-06 10:00:00",
|
||||
"updateTime": "2025-02-06 10:00:00",
|
||||
"createdBy": "admin",
|
||||
"updatedBy": "admin"
|
||||
}
|
||||
],
|
||||
"total": 100
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. 获取采购交易详情
|
||||
|
||||
**接口描述**: 根据采购事项ID获取详细信息
|
||||
|
||||
**请求方式**: `GET`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/{purchaseId}`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:query`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| purchaseId | String | 是 | 采购事项ID | PO20250206001 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"purchaseId": "PO20250206001",
|
||||
"purchaseCategory": "货物类",
|
||||
"projectName": "办公设备采购项目",
|
||||
"subjectName": "笔记本电脑",
|
||||
"subjectDesc": "高性能办公笔记本",
|
||||
"purchaseQty": 50.00,
|
||||
"budgetAmount": 500000.00,
|
||||
"bidAmount": 450000.00,
|
||||
"actualAmount": 455000.00,
|
||||
"contractAmount": 450000.00,
|
||||
"settlementAmount": 455000.00,
|
||||
"purchaseMethod": "公开招标",
|
||||
"supplierName": "某某科技有限公司",
|
||||
"contactPerson": "李四",
|
||||
"contactPhone": "13800138000",
|
||||
"supplierUscc": "91110000MA000000XX",
|
||||
"supplierBankAccount": "1234567890123456789",
|
||||
"applyDate": "2025-01-01",
|
||||
"planApproveDate": "2025-01-05",
|
||||
"announceDate": "2025-01-10",
|
||||
"bidOpenDate": "2025-01-15",
|
||||
"contractSignDate": "2025-01-20",
|
||||
"expectedDeliveryDate": "2025-02-01",
|
||||
"actualDeliveryDate": "2025-02-01",
|
||||
"acceptanceDate": "2025-02-05",
|
||||
"settlementDate": "2025-02-10",
|
||||
"applicantId": "E001001",
|
||||
"applicantName": "张三",
|
||||
"applyDepartment": "信息技术部",
|
||||
"purchaseLeaderId": "E002001",
|
||||
"purchaseLeaderName": "王五",
|
||||
"purchaseDepartment": "采购部",
|
||||
"createTime": "2025-02-06 10:00:00",
|
||||
"updateTime": "2025-02-06 10:00:00",
|
||||
"createdBy": "admin",
|
||||
"updatedBy": "admin"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 新增采购交易
|
||||
|
||||
**接口描述**: 新增采购交易记录
|
||||
|
||||
**请求方式**: `POST`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:add`
|
||||
|
||||
**请求头**:
|
||||
```
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
|
||||
**请求体** (`CcdiPurchaseTransactionAddDTO`):
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| purchaseId | String | 是 | 采购事项ID(最大32字符) | PO20250206001 |
|
||||
| purchaseCategory | String | 否 | 采购类别(最大50字符) | 货物类 |
|
||||
| projectName | String | 否 | 项目名称(最大200字符) | 办公设备采购项目 |
|
||||
| subjectName | String | 否 | 标的物名称(最大200字符) | 笔记本电脑 |
|
||||
| subjectDesc | String | 否 | 标的物描述(最大500字符) | 高性能办公笔记本 |
|
||||
| purchaseQty | BigDecimal | 否 | 采购数量 | 50.00 |
|
||||
| budgetAmount | BigDecimal | 否 | 预算金额 | 500000.00 |
|
||||
| bidAmount | BigDecimal | 否 | 中标金额 | 450000.00 |
|
||||
| actualAmount | BigDecimal | 否 | 实际采购金额 | 455000.00 |
|
||||
| contractAmount | BigDecimal | 否 | 合同金额 | 450000.00 |
|
||||
| settlementAmount | BigDecimal | 否 | 结算金额 | 455000.00 |
|
||||
| purchaseMethod | String | 否 | 采购方式(最大50字符) | 公开招标 |
|
||||
| supplierName | String | 否 | 供应商名称(最大200字符) | 某某科技有限公司 |
|
||||
| supplierUscc | String | 否 | 供应商统一信用代码(最大18字符) | 91110000MA000000XX |
|
||||
| contactPerson | String | 否 | 供应商联系人(最大50字符) | 李四 |
|
||||
| contactPhone | String | 否 | 供应商联系电话(最大20字符) | 13800138000 |
|
||||
| supplierBankAccount | String | 否 | 供应商银行账户(最大50字符) | 1234567890123456789 |
|
||||
| applyDate | String | 否 | 采购申请日期(yyyy-MM-dd) | 2025-01-01 |
|
||||
| planApproveDate | String | 否 | 采购计划批准日期(yyyy-MM-dd) | 2025-01-05 |
|
||||
| announceDate | String | 否 | 采购公告发布日期(yyyy-MM-dd) | 2025-01-10 |
|
||||
| bidOpenDate | String | 否 | 开标日期(yyyy-MM-dd) | 2025-01-15 |
|
||||
| contractSignDate | String | 否 | 合同签订日期(yyyy-MM-dd) | 2025-01-20 |
|
||||
| expectedDeliveryDate | String | 否 | 预计交货日期(yyyy-MM-dd) | 2025-02-01 |
|
||||
| actualDeliveryDate | String | 否 | 实际交货日期(yyyy-MM-dd) | 2025-02-01 |
|
||||
| acceptanceDate | String | 否 | 验收日期(yyyy-MM-dd) | 2025-02-05 |
|
||||
| settlementDate | String | 否 | 结算日期(yyyy-MM-dd) | 2025-02-10 |
|
||||
| applicantId | String | 否 | 申请人工号(最大20字符) | E001001 |
|
||||
| applicantName | String | 否 | 申请人姓名(最大50字符) | 张三 |
|
||||
| applyDepartment | String | 否 | 申请部门(最大100字符) | 信息技术部 |
|
||||
| purchaseLeaderId | String | 否 | 采购负责人工号(最大20字符) | E002001 |
|
||||
| purchaseLeaderName | String | 否 | 采购负责人姓名(最大50字符) | 王五 |
|
||||
| purchaseDepartment | String | 否 | 采购部门(最大100字符) | 采购部 |
|
||||
|
||||
**请求示例**:
|
||||
```json
|
||||
{
|
||||
"purchaseId": "PO20250206001",
|
||||
"purchaseCategory": "货物类",
|
||||
"projectName": "办公设备采购项目",
|
||||
"subjectName": "笔记本电脑",
|
||||
"subjectDesc": "高性能办公笔记本",
|
||||
"purchaseQty": 50.00,
|
||||
"budgetAmount": 500000.00,
|
||||
"bidAmount": 450000.00,
|
||||
"actualAmount": 455000.00,
|
||||
"contractAmount": 450000.00,
|
||||
"settlementAmount": 455000.00,
|
||||
"purchaseMethod": "公开招标",
|
||||
"supplierName": "某某科技有限公司",
|
||||
"supplierUscc": "91110000MA000000XX",
|
||||
"contactPerson": "李四",
|
||||
"contactPhone": "13800138000",
|
||||
"supplierBankAccount": "1234567890123456789",
|
||||
"applyDate": "2025-01-01",
|
||||
"planApproveDate": "2025-01-05",
|
||||
"announceDate": "2025-01-10",
|
||||
"bidOpenDate": "2025-01-15",
|
||||
"contractSignDate": "2025-01-20",
|
||||
"expectedDeliveryDate": "2025-02-01",
|
||||
"actualDeliveryDate": "2025-02-01",
|
||||
"acceptanceDate": "2025-02-05",
|
||||
"settlementDate": "2025-02-10",
|
||||
"applicantId": "E001001",
|
||||
"applicantName": "张三",
|
||||
"applyDepartment": "信息技术部",
|
||||
"purchaseLeaderId": "E002001",
|
||||
"purchaseLeaderName": "王五",
|
||||
"purchaseDepartment": "采购部"
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 修改采购交易
|
||||
|
||||
**接口描述**: 修改采购交易记录
|
||||
|
||||
**请求方式**: `PUT`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:edit`
|
||||
|
||||
**请求头**:
|
||||
```
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
|
||||
**请求体** (`CcdiPurchaseTransactionEditDTO`):
|
||||
|
||||
参数同新增接口,但purchaseId为必填且不可修改。
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 删除采购交易
|
||||
|
||||
**接口描述**: 删除采购交易记录(支持批量删除)
|
||||
|
||||
**请求方式**: `DELETE`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/{purchaseIds}`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:remove`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| purchaseIds | String[] | 是 | 采购事项ID数组,多个用逗号分隔 | PO20250206001,PO20250206002 |
|
||||
|
||||
**请求示例**:
|
||||
```
|
||||
DELETE /ccdi/purchaseTransaction/PO20250206001,PO20250206002
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 导出采购交易
|
||||
|
||||
**接口描述**: 导出采购交易信息到Excel文件
|
||||
|
||||
**请求方式**: `POST`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/export`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:export`
|
||||
|
||||
**请求参数**: 同查询接口,支持条件导出
|
||||
|
||||
**响应**: Excel文件流
|
||||
|
||||
**请求示例**:
|
||||
```bash
|
||||
curl -X POST "http://localhost:8080/ccdi/purchaseTransaction/export" \
|
||||
-H "Authorization: Bearer {token}" \
|
||||
-d "projectName=办公设备&applicantName=张三"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 下载导入模板
|
||||
|
||||
**接口描述**: 下载带字典下拉框的Excel导入模板
|
||||
|
||||
**请求方式**: `POST`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/importTemplate`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应**: Excel模板文件流(包含数据验证下拉框)
|
||||
|
||||
**请求示例**:
|
||||
```bash
|
||||
curl -X POST "http://localhost:8080/ccdi/purchaseTransaction/importTemplate" \
|
||||
-H "Authorization: Bearer {token}" \
|
||||
-o purchase_transaction_template.xlsx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. 导入采购交易
|
||||
|
||||
**接口描述**: 异步导入Excel数据
|
||||
|
||||
**请求方式**: `POST`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/importData?updateSupport={updateSupport}`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:import`
|
||||
|
||||
**请求头**:
|
||||
```
|
||||
Content-Type: multipart/form-data
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| updateSupport | boolean | 是 | 是否更新已存在数据 | true/false |
|
||||
|
||||
**表单参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| file | File | 是 | Excel文件(.xlsx或.xls) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "导入任务已提交,任务ID:task-20250206-123456789"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 9. 查询导入状态
|
||||
|
||||
**接口描述**: 查询异步导入任务的执行状态
|
||||
|
||||
**请求方式**: `GET`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/importStatus/{taskId}`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:import`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| taskId | String | 是 | 任务ID | task-20250206-123456789 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"taskId": "task-20250206-123456789",
|
||||
"status": "completed",
|
||||
"total": 1000,
|
||||
"successCount": 980,
|
||||
"failureCount": 20,
|
||||
"errorMsg": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**状态说明**:
|
||||
- `pending`: 等待执行
|
||||
- `running`: 正在执行
|
||||
- `completed`: 执行完成
|
||||
- `failed`: 执行失败
|
||||
|
||||
---
|
||||
|
||||
### 10. 查询导入失败记录
|
||||
|
||||
**接口描述**: 查询导入任务中失败的记录详情
|
||||
|
||||
**请求方式**: `GET`
|
||||
|
||||
**请求路径**: `/ccdi/purchaseTransaction/importFailures/{taskId}`
|
||||
|
||||
**权限要求**: `ccdi:purchaseTransaction:import`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| taskId | String | 是 | 任务ID | task-20250206-123456789 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{
|
||||
"purchaseId": "PO20250206001",
|
||||
"rowNum": 5,
|
||||
"errorMessage": "采购事项ID已存在"
|
||||
},
|
||||
{
|
||||
"purchaseId": "PO20250206002",
|
||||
"rowNum": 12,
|
||||
"errorMessage": "预算金额格式错误"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### CcdiPurchaseTransactionVO (查询返回对象)
|
||||
|
||||
采购交易信息的视图对象,用于列表查询和详情展示。
|
||||
|
||||
### CcdiPurchaseTransactionAddDTO (新增请求对象)
|
||||
|
||||
新增采购交易时的请求参数对象。
|
||||
|
||||
### CcdiPurchaseTransactionEditDTO (修改请求对象)
|
||||
|
||||
修改采购交易时的请求参数对象。
|
||||
|
||||
### CcdiPurchaseTransactionQueryDTO (查询请求对象)
|
||||
|
||||
查询条件参数对象。
|
||||
|
||||
### CcdiPurchaseTransactionExcel (导入导出对象)
|
||||
|
||||
Excel导入导出使用的数据对象,支持字典下拉框。
|
||||
|
||||
### ImportStatusVO (导入状态对象)
|
||||
|
||||
异步导入任务的状态信息。
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| taskId | String | 任务ID |
|
||||
| status | String | 状态:pending/running/completed/failed |
|
||||
| total | Integer | 总记录数 |
|
||||
| successCount | Integer | 成功数量 |
|
||||
| failureCount | Integer | 失败数量 |
|
||||
| errorMsg | String | 错误信息(失败时) |
|
||||
|
||||
### PurchaseTransactionImportFailureVO (导入失败记录对象)
|
||||
|
||||
导入失败的记录详情。
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| purchaseId | String | 采购事项ID |
|
||||
| rowNum | Integer | 行号 |
|
||||
| errorMessage | String | 错误信息 |
|
||||
|
||||
---
|
||||
|
||||
## 错误码说明
|
||||
|
||||
### HTTP状态码
|
||||
|
||||
| 状态码 | 说明 |
|
||||
|--------|------|
|
||||
| 200 | 请求成功 |
|
||||
| 401 | 未授权,token无效或过期 |
|
||||
| 403 | 无权限访问 |
|
||||
| 404 | 资源不存在 |
|
||||
| 500 | 服务器内部错误 |
|
||||
|
||||
### 业务错误码
|
||||
|
||||
| code | msg | 说明 |
|
||||
|------|-----|------|
|
||||
| 200 | 操作成功 | 请求成功处理 |
|
||||
| 500 | 操作失败 | 服务器处理失败 |
|
||||
| 401 | 请先登录 | 未登录或token过期 |
|
||||
| 403 | 无权限访问 | 权限不足 |
|
||||
|
||||
---
|
||||
|
||||
## 接口示例
|
||||
|
||||
### 1. 完整的CRUD流程
|
||||
|
||||
```bash
|
||||
# 1. 登录获取token
|
||||
TOKEN=$(curl -s -X POST "http://localhost:8080/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"admin123"}' \
|
||||
| jq -r '.token')
|
||||
|
||||
# 2. 查询列表
|
||||
curl -X GET "http://localhost:8080/ccdi/purchaseTransaction/list?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer $TOKEN"
|
||||
|
||||
# 3. 新增记录
|
||||
curl -X POST "http://localhost:8080/ccdi/purchaseTransaction" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"purchaseId": "PO20250206001",
|
||||
"projectName": "办公设备采购项目",
|
||||
"subjectName": "笔记本电脑",
|
||||
"budgetAmount": 500000.00
|
||||
}'
|
||||
|
||||
# 4. 获取详情
|
||||
curl -X GET "http://localhost:8080/ccdi/purchaseTransaction/PO20250206001" \
|
||||
-H "Authorization: Bearer $TOKEN"
|
||||
|
||||
# 5. 修改记录
|
||||
curl -X PUT "http://localhost:8080/ccdi/purchaseTransaction" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"purchaseId": "PO20250206001",
|
||||
"projectName": "办公设备采购项目(修改)",
|
||||
"subjectName": "笔记本电脑",
|
||||
"budgetAmount": 550000.00
|
||||
}'
|
||||
|
||||
# 6. 删除记录
|
||||
curl -X DELETE "http://localhost:8080/ccdi/purchaseTransaction/PO20250206001" \
|
||||
-H "Authorization: Bearer $TOKEN"
|
||||
```
|
||||
|
||||
### 2. 导入导出流程
|
||||
|
||||
```bash
|
||||
# 1. 下载模板
|
||||
curl -X POST "http://localhost:8080/ccdi/purchaseTransaction/importTemplate" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-o template.xlsx
|
||||
|
||||
# 2. 填写数据后导入
|
||||
curl -X POST "http://localhost:8080/ccdi/purchaseTransaction/importData?updateSupport=false" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-F "file=@data.xlsx"
|
||||
|
||||
# 响应: {"code":200,"msg":"导入任务已提交,任务ID:task-xxx"}
|
||||
|
||||
# 3. 查询导入状态
|
||||
curl -X GET "http://localhost:8080/ccdi/purchaseTransaction/importStatus/task-xxx" \
|
||||
-H "Authorization: Bearer $TOKEN"
|
||||
|
||||
# 4. 如果有失败,查询失败记录
|
||||
curl -X GET "http://localhost:8080/ccdi/purchaseTransaction/importFailures/task-xxx" \
|
||||
-H "Authorization: Bearer $TOKEN"
|
||||
|
||||
# 5. 导出数据
|
||||
curl -X POST "http://localhost:8080/ccdi/purchaseTransaction/export" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-d "projectName=办公设备" \
|
||||
-o export_data.xlsx
|
||||
```
|
||||
|
||||
### 3. Postman测试步骤
|
||||
|
||||
1. **创建环境变量**:
|
||||
- `base_url`: http://localhost:8080
|
||||
- `token`: (登录后获取)
|
||||
|
||||
2. **创建Pre-request Script**:
|
||||
```javascript
|
||||
// 自动设置token
|
||||
if (!pm.environment.get("token")) {
|
||||
const loginRequest = {
|
||||
url: pm.environment.get("base_url") + "/login/test",
|
||||
method: "POST",
|
||||
header: {"Content-Type": "application/json"},
|
||||
body: {
|
||||
mode: "raw",
|
||||
raw: JSON.stringify({username: "admin", password: "admin123"})
|
||||
}
|
||||
};
|
||||
pm.sendRequest(loginRequest, (err, res) => {
|
||||
pm.environment.set("token", res.json().token);
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
3. **设置Authorization**:
|
||||
- Type: Bearer Token
|
||||
- Token: `{{token}}`
|
||||
|
||||
4. **执行测试**:
|
||||
- 按接口顺序执行
|
||||
- 查看响应结果
|
||||
- 验证数据正确性
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### A. 数据库表结构
|
||||
|
||||
表名: `ccdi_purchase_transaction`
|
||||
|
||||
| 字段名 | 类型 | 说明 | 备注 |
|
||||
|--------|------|------|------|
|
||||
| purchase_id | varchar(32) | 采购事项ID | 主键 |
|
||||
| purchase_category | varchar(50) | 采购类别 | |
|
||||
| project_name | varchar(200) | 项目名称 | |
|
||||
| subject_name | varchar(200) | 标的物名称 | |
|
||||
| subject_desc | varchar(500) | 标的物描述 | |
|
||||
| purchase_qty | decimal(10,2) | 采购数量 | |
|
||||
| budget_amount | decimal(15,2) | 预算金额 | |
|
||||
| bid_amount | decimal(15,2) | 中标金额 | |
|
||||
| actual_amount | decimal(15,2) | 实际采购金额 | |
|
||||
| contract_amount | decimal(15,2) | 合同金额 | |
|
||||
| settlement_amount | decimal(15,2) | 结算金额 | |
|
||||
| purchase_method | varchar(50) | 采购方式 | |
|
||||
| supplier_name | varchar(200) | 中标供应商名称 | |
|
||||
| contact_person | varchar(50) | 供应商联系人 | |
|
||||
| contact_phone | varchar(20) | 供应商联系电话 | |
|
||||
| supplier_uscc | varchar(18) | 供应商统一信用代码 | |
|
||||
| supplier_bank_account | varchar(50) | 供应商银行账户 | |
|
||||
| apply_date | date | 采购申请日期 | |
|
||||
| plan_approve_date | date | 采购计划批准日期 | |
|
||||
| announce_date | date | 采购公告发布日期 | |
|
||||
| bid_open_date | date | 开标日期 | |
|
||||
| contract_sign_date | date | 合同签订日期 | |
|
||||
| expected_delivery_date | date | 预计交货日期 | |
|
||||
| actual_delivery_date | date | 实际交货日期 | |
|
||||
| acceptance_date | date | 验收日期 | |
|
||||
| settlement_date | date | 结算日期 | |
|
||||
| applicant_id | varchar(20) | 申请人工号 | |
|
||||
| applicant_name | varchar(50) | 申请人姓名 | |
|
||||
| apply_department | varchar(100) | 申请部门 | |
|
||||
| purchase_leader_id | varchar(20) | 采购负责人工号 | |
|
||||
| purchase_leader_name | varchar(50) | 采购负责人姓名 | |
|
||||
| purchase_department | varchar(100) | 采购部门 | |
|
||||
| create_time | datetime | 创建时间 | 自动填充 |
|
||||
| update_time | datetime | 更新时间 | 自动填充 |
|
||||
| created_by | varchar(64) | 创建人 | 自动填充 |
|
||||
| updated_by | varchar(64) | 更新人 | 自动填充 |
|
||||
|
||||
### B. 菜单权限配置
|
||||
|
||||
执行以下SQL配置菜单权限:
|
||||
|
||||
```sql
|
||||
-- 文件路径: sql/ccdi_purchase_transaction_menu.sql
|
||||
-- 执行此文件以配置菜单和权限
|
||||
source sql/ccdi_purchase_transaction_menu.sql;
|
||||
```
|
||||
|
||||
### C. 前端API文件
|
||||
|
||||
前端API定义文件: `ruoyi-ui/src/api/ccdiPurchaseTransaction.js`
|
||||
|
||||
---
|
||||
|
||||
## 导入功能交互说明
|
||||
|
||||
### 前端交互流程
|
||||
|
||||
1. **上传文件**
|
||||
- 用户点击"导入"按钮
|
||||
- 选择Excel文件
|
||||
- 点击"确定"上传
|
||||
- **导入对话框立即关闭**
|
||||
|
||||
2. **后台处理**
|
||||
- 右上角显示通知:"导入任务已提交,正在后台处理中,处理完成后将通知您"
|
||||
- 系统每2秒轮询一次导入状态
|
||||
|
||||
3. **导入完成**
|
||||
- 全部成功:显示绿色通知"导入完成!全部成功!共导入N条数据"
|
||||
- 部分失败:显示橙色通知"导入完成!成功N条,失败M条"
|
||||
- 如果有失败记录,操作栏显示"查看导入失败记录"按钮
|
||||
|
||||
4. **查看失败记录**
|
||||
- 点击"查看导入失败记录"按钮
|
||||
- 打开对话框显示分页的失败记录
|
||||
- 包含字段:采购事项ID、项目名称、标的物名称、失败原因
|
||||
- 支持清除历史记录
|
||||
|
||||
### 状态持久化
|
||||
|
||||
- 导入状态保存在localStorage中
|
||||
- 刷新页面后仍可查看上次导入结果
|
||||
- 状态保留7天,过期自动清除
|
||||
|
||||
### 与员工信息导入的对比
|
||||
|
||||
采购交易导入完全复用了员工信息导入的逻辑,两者的交互方式完全一致。
|
||||
|
||||
---
|
||||
|
||||
## 版本历史
|
||||
|
||||
| 版本 | 日期 | 说明 | 作者 |
|
||||
|------|------|------|------|
|
||||
| 1.0.0 | 2026-02-06 | 初始版本,采购交易信息管理接口 | ruoyi |
|
||||
| 1.1.0 | 2026-02-08 | 添加导入功能交互说明 | ruoyi |
|
||||
|
||||
---
|
||||
|
||||
## 联系方式
|
||||
|
||||
如有问题,请联系开发团队。
|
||||
430
doc/api-docs/api/ccdi_staff_recruitment_api.md
Normal file
430
doc/api-docs/api/ccdi_staff_recruitment_api.md
Normal file
@@ -0,0 +1,430 @@
|
||||
# 员工招聘信息管理 API文档
|
||||
|
||||
**模块名称:** ccdi-staff-recruitment
|
||||
**版本:** 1.0
|
||||
**生成日期:** 2025-02-05
|
||||
**基础路径:** `/ccdi/staffRecruitment`
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [查询接口](#1-查询接口)
|
||||
2. [操作接口](#2-操作接口)
|
||||
3. [导入导出接口](#3-导入导出接口)
|
||||
4. [数据模型](#4-数据模型)
|
||||
5. [错误码说明](#5-错误码说明)
|
||||
|
||||
---
|
||||
|
||||
## 1. 查询接口
|
||||
|
||||
### 1.1 分页查询招聘信息列表
|
||||
|
||||
**接口描述:** 分页查询员工招聘信息列表,支持多条件筛选
|
||||
|
||||
**请求方式:** `GET`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment/list`
|
||||
|
||||
**权限标识:** `ccdi:staffRecruitment:list`
|
||||
|
||||
**请求参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|-------|------|------|------|--------|
|
||||
| pageNum | Integer | 否 | 页码,默认1 | 1 |
|
||||
| pageSize | Integer | 否 | 每页条数,默认10 | 10 |
|
||||
| recruitName | String | 否 | 招聘项目名称(模糊查询) | 2025春季招聘 |
|
||||
| posName | String | 否 | 职位名称(模糊查询) | 软件工程师 |
|
||||
| candName | String | 否 | 候选人姓名(模糊查询) | 张三 |
|
||||
| candId | String | 否 | 证件号码(精确查询) | 110101199001011234 |
|
||||
| admitStatus | String | 否 | 录用状态(精确查询) | 录用/未录用/放弃 |
|
||||
| interviewerName | String | 否 | 面试官姓名(模糊查询,查询面试官1或2) | 李四 |
|
||||
| interviewerId | String | 否 | 面试官工号(精确查询,查询面试官1或2) | 10001 |
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "查询成功",
|
||||
"rows": [
|
||||
{
|
||||
"recruitId": "REC20250205001",
|
||||
"recruitName": "2025春季校园招聘",
|
||||
"posName": "Java开发工程师",
|
||||
"posCategory": "技术类",
|
||||
"posDesc": "负责后端系统开发",
|
||||
"candName": "张三",
|
||||
"candEdu": "本科",
|
||||
"candId": "110101199001011234",
|
||||
"candSchool": "清华大学",
|
||||
"candMajor": "计算机科学与技术",
|
||||
"candGrad": "202506",
|
||||
"admitStatus": "录用",
|
||||
"admitStatusDesc": "已录用该候选人",
|
||||
"interviewerName1": "李四",
|
||||
"interviewerId1": "10001",
|
||||
"interviewerName2": "王五",
|
||||
"interviewerId2": "10002",
|
||||
"createdBy": "admin",
|
||||
"createTime": "2025-02-05 10:00:00",
|
||||
"updatedBy": null,
|
||||
"updateTime": null
|
||||
}
|
||||
],
|
||||
"total": 100
|
||||
}
|
||||
```
|
||||
|
||||
### 1.2 查询招聘信息详情
|
||||
|
||||
**接口描述:** 根据招聘项目编号查询详细信息
|
||||
|
||||
**请求方式:** `GET`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment/{recruitId}`
|
||||
|
||||
**权限标识:** `ccdi:staffRecruitment:query`
|
||||
|
||||
**路径参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|-------|------|------|------|--------|
|
||||
| recruitId | String | 是 | 招聘项目编号 | REC20250205001 |
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"recruitId": "REC20250205001",
|
||||
"recruitName": "2025春季校园招聘",
|
||||
"posName": "Java开发工程师",
|
||||
"posCategory": "技术类",
|
||||
"posDesc": "负责后端系统开发,要求熟悉Spring Boot、MyBatis Plus等框架",
|
||||
"candName": "张三",
|
||||
"candEdu": "本科",
|
||||
"candId": "110101199001011234",
|
||||
"candSchool": "清华大学",
|
||||
"candMajor": "计算机科学与技术",
|
||||
"candGrad": "202506",
|
||||
"admitStatus": "录用",
|
||||
"admitStatusDesc": "已录用该候选人",
|
||||
"interviewerName1": "李四",
|
||||
"interviewerId1": "10001",
|
||||
"interviewerName2": "王五",
|
||||
"interviewerId2": "10002",
|
||||
"createdBy": "admin",
|
||||
"createTime": "2025-02-05 10:00:00",
|
||||
"updatedBy": null,
|
||||
"updateTime": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 操作接口
|
||||
|
||||
### 2.1 新增招聘信息
|
||||
|
||||
**接口描述:** 新增一条员工招聘信息
|
||||
|
||||
**请求方式:** `POST`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment`
|
||||
|
||||
**权限标识:** `ccdi:staffRecruitment:add`
|
||||
|
||||
**请求体:**
|
||||
|
||||
```json
|
||||
{
|
||||
"recruitId": "REC20250205001",
|
||||
"recruitName": "2025春季校园招聘",
|
||||
"posName": "Java开发工程师",
|
||||
"posCategory": "技术类",
|
||||
"posDesc": "负责后端系统开发",
|
||||
"candName": "张三",
|
||||
"candEdu": "本科",
|
||||
"candId": "110101199001011234",
|
||||
"candSchool": "清华大学",
|
||||
"candMajor": "计算机科学与技术",
|
||||
"candGrad": "202506",
|
||||
"admitStatus": "录用",
|
||||
"interviewerName1": "李四",
|
||||
"interviewerId1": "10001",
|
||||
"interviewerName2": "王五",
|
||||
"interviewerId2": "10002"
|
||||
}
|
||||
```
|
||||
|
||||
**字段校验规则:**
|
||||
|
||||
| 字段 | 校验规则 | 错误提示 |
|
||||
|-----|---------|---------|
|
||||
| recruitId | @NotBlank, @Size(max=32) | 招聘项目编号不能为空/长度不能超过32 |
|
||||
| recruitName | @NotBlank, @Size(max=100) | 招聘项目名称不能为空/长度不能超过100 |
|
||||
| posName | @NotBlank, @Size(max=100) | 职位名称不能为空/长度不能超过100 |
|
||||
| posCategory | @NotBlank, @Size(max=50) | 职位类别不能为空/长度不能超过50 |
|
||||
| posDesc | @NotBlank | 职位描述不能为空 |
|
||||
| candName | @NotBlank, @Size(max=20) | 应聘人员姓名不能为空/长度不能超过20 |
|
||||
| candEdu | @NotBlank, @Size(max=20) | 应聘人员学历不能为空/长度不能超过20 |
|
||||
| candId | @NotBlank, @Pattern(身份证正则) | 证件号码不能为空/格式不正确 |
|
||||
| candSchool | @NotBlank, @Size(max=50) | 应聘人员毕业院校不能为空/长度不能超过50 |
|
||||
| candMajor | @NotBlank, @Size(max=30) | 应聘人员专业不能为空/长度不能超过30 |
|
||||
| candGrad | @NotBlank, @Pattern(YYYYMM) | 毕业年月不能为空/格式不正确 |
|
||||
| admitStatus | @NotBlank, @EnumValid | 录用情况不能为空/状态值不合法 |
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
### 2.2 修改招聘信息
|
||||
|
||||
**接口描述:** 修改已有的员工招聘信息
|
||||
|
||||
**请求方式:** `PUT`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment`
|
||||
|
||||
**权限标识:** `ccdi:staffRecruitment:edit`
|
||||
|
||||
**请求体:**
|
||||
|
||||
```json
|
||||
{
|
||||
"recruitId": "REC20250205001",
|
||||
"recruitName": "2025春季校园招聘",
|
||||
"posName": "Java开发工程师",
|
||||
"posCategory": "技术类",
|
||||
"posDesc": "负责后端系统开发,负责核心模块设计",
|
||||
"candName": "张三",
|
||||
"candEdu": "本科",
|
||||
"candId": "110101199001011234",
|
||||
"candSchool": "清华大学",
|
||||
"candMajor": "计算机科学与技术",
|
||||
"candGrad": "202506",
|
||||
"admitStatus": "录用",
|
||||
"interviewerName1": "李四",
|
||||
"interviewerId1": "10001",
|
||||
"interviewerName2": "王五",
|
||||
"interviewerId2": "10002"
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
### 2.3 删除招聘信息
|
||||
|
||||
**接口描述:** 批量删除员工招聘信息
|
||||
|
||||
**请求方式:** `DELETE`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment/{recruitIds}`
|
||||
|
||||
**权限标识:** `ccdi:staffRecruitment:remove`
|
||||
|
||||
**路径参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|-------|------|------|------|--------|
|
||||
| recruitIds | String[] | 是 | 招聘项目编号数组,多个用逗号分隔 | REC20250205001,REC20250205002 |
|
||||
|
||||
**响应示例:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 导入导出接口
|
||||
|
||||
### 3.1 下载导入模板
|
||||
|
||||
**接口描述:** 下载Excel导入模板
|
||||
|
||||
**请求方式:** `POST`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment/importTemplate`
|
||||
|
||||
**权限标识:** 无
|
||||
|
||||
**响应:** Excel文件流
|
||||
|
||||
**模板字段顺序:**
|
||||
|
||||
| 序号 | 字段名 | 说明 | 必填 |
|
||||
|-----|--------|------|------|
|
||||
| 1 | 招聘项目编号 | 唯一标识 | 是 |
|
||||
| 2 | 招聘项目名称 | - | 是 |
|
||||
| 3 | 职位名称 | - | 是 |
|
||||
| 4 | 职位类别 | - | 是 |
|
||||
| 5 | 职位描述 | - | 是 |
|
||||
| 6 | 应聘人员姓名 | - | 是 |
|
||||
| 7 | 应聘人员学历 | - | 是 |
|
||||
| 8 | 应聘人员证件号码 | 身份证号 | 是 |
|
||||
| 9 | 应聘人员毕业院校 | - | 是 |
|
||||
| 10 | 应聘人员专业 | - | 是 |
|
||||
| 11 | 应聘人员毕业年月 | 格式:YYYYMM | 是 |
|
||||
| 12 | 录用情况 | 录用/未录用/放弃 | 是 |
|
||||
| 13 | 面试官1姓名 | - | 否 |
|
||||
| 14 | 面试官1工号 | - | 否 |
|
||||
| 15 | 面试官2姓名 | - | 否 |
|
||||
| 16 | 面试官2工号 | - | 否 |
|
||||
|
||||
### 3.2 批量导入
|
||||
|
||||
**接口描述:** 通过Excel批量导入招聘信息
|
||||
|
||||
**请求方式:** `POST`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment/importData?updateSupport={updateSupport}`
|
||||
|
||||
**权限标识:** `ccdi:staffRecruitment:import`
|
||||
|
||||
**请求参数:**
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|-------|------|------|------|--------|
|
||||
| updateSupport | Boolean | 否 | 是否更新已存在的数据 | true |
|
||||
| file | File | 是 | Excel文件 | - |
|
||||
|
||||
**请求类型:** `multipart/form-data`
|
||||
|
||||
**响应示例 (成功):**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "恭喜您,数据已全部导入成功!共 10 条,数据类型:新增 8 条,更新 2 条"
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例 (部分失败):**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"msg": "很抱歉,导入完成!成功 8 条,失败 2 条,错误如下:<br/>1、招聘项目编号 REC001 导入失败:该招聘项目编号已存在<br/>2、招聘项目编号 REC002 导入失败:证件号码格式不正确"
|
||||
}
|
||||
```
|
||||
|
||||
### 3.3 导出
|
||||
|
||||
**接口描述:** 导出招聘信息到Excel
|
||||
|
||||
**请求方式:** `POST`
|
||||
|
||||
**接口路径:** `/ccdi/staffRecruitment/export`
|
||||
|
||||
**权限标识:** `ccdi:staffRecruitment:export`
|
||||
|
||||
**请求参数:** 与分页查询接口相同的查询条件
|
||||
|
||||
**响应:** Excel文件流
|
||||
|
||||
---
|
||||
|
||||
## 4. 数据模型
|
||||
|
||||
### 4.1 录用状态枚举 (AdmitStatus)
|
||||
|
||||
| 枚举值 | 说明 |
|
||||
|--------|------|
|
||||
| 录用 | 已录用该候选人 |
|
||||
| 未录用 | 未录用该候选人 |
|
||||
| 放弃 | 候选人放弃 |
|
||||
|
||||
### 4.2 CcdiStaffRecruitmentVO
|
||||
|
||||
招聘信息返回对象,包含所有字段及状态描述。
|
||||
|
||||
### 4.3 CcdiStaffRecruitmentExcel
|
||||
|
||||
Excel导入导出对象,使用EasyExcel注解。
|
||||
|
||||
---
|
||||
|
||||
## 5. 错误码说明
|
||||
|
||||
| 错误码 | 说明 |
|
||||
|--------|------|
|
||||
| 200 | 操作成功 |
|
||||
| 400 | 参数校验失败 |
|
||||
| 401 | 未授权,请先登录 |
|
||||
| 403 | 无权限访问 |
|
||||
| 404 | 资源不存在 |
|
||||
| 409 | 主键冲突 |
|
||||
| 500 | 服务器内部错误 |
|
||||
|
||||
### 常见业务错误
|
||||
|
||||
| 错误信息 | 说明 |
|
||||
|---------|------|
|
||||
| 该招聘项目编号已存在 | 新增时recruitId重复 |
|
||||
| 招聘项目编号不能为空 | recruitId字段为空 |
|
||||
| 证件号码格式不正确 | 身份证号格式验证失败 |
|
||||
| 毕业年月格式不正确 | candGrad不是YYYYMM格式 |
|
||||
| 录用情况状态值不合法 | admitStatus不是枚举值之一 |
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### Swagger UI
|
||||
|
||||
访问地址: `/swagger-ui/index.html`
|
||||
|
||||
### 测试账号
|
||||
|
||||
- 用户名: admin
|
||||
- 密码: admin123
|
||||
|
||||
### Token获取
|
||||
|
||||
**接口:** POST `/login`
|
||||
|
||||
**请求体:**
|
||||
|
||||
```json
|
||||
{
|
||||
"username": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
```
|
||||
|
||||
**响应:**
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"token": "Bearer eyJhbGciOiJIUzUxMiJ9..."
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档生成时间:** 2025-02-05
|
||||
**文档版本:** 1.0
|
||||
610
doc/api-docs/api/中介黑名单管理API文档-v2.0.md
Normal file
610
doc/api-docs/api/中介黑名单管理API文档-v2.0.md
Normal file
@@ -0,0 +1,610 @@
|
||||
# 中介黑名单管理 API 文档 v2.0
|
||||
|
||||
## 概述
|
||||
|
||||
中介黑名单管理模块提供个人和实体两类中介信息的增删改查、类型化模板下载和批量导入导出功能。
|
||||
|
||||
**基础路径**: `/ccdi/intermediary`
|
||||
|
||||
**权限标识前缀**: `ccdi:intermediary`
|
||||
|
||||
**文档版本**: v2.0
|
||||
|
||||
**更新日期**: 2026-02-04
|
||||
|
||||
---
|
||||
|
||||
## API 接口列表
|
||||
|
||||
### 1. 查询中介列表
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/list`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:list`
|
||||
|
||||
**请求参数** (Query Params):
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| name | String | 否 | 姓名/机构名称(模糊查询) |
|
||||
| certificateNo | String | 否 | 证件号/统一社会信用代码(精确查询) |
|
||||
| intermediaryType | String | 否 | 中介类型(1=个人, 2=实体) |
|
||||
| pageNum | Integer | 否 | 页码(默认1) |
|
||||
| pageSize | Integer | 否 | 每页数量(默认10) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"rows": [
|
||||
{
|
||||
"bizId": "I202602040001",
|
||||
"name": "张三",
|
||||
"certificateNo": "110101199001011234",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"remark": "测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| bizId | String | 业务ID |
|
||||
| name | String | 姓名/机构名称 |
|
||||
| certificateNo | String | 证件号/统一社会信用代码 |
|
||||
| intermediaryType | String | 中介类型(1=个人, 2=实体) |
|
||||
| intermediaryTypeName | String | 中介类型名称 |
|
||||
| status | String | 状态(0=正常, 1=停用) |
|
||||
| statusName | String | 状态名称 |
|
||||
| remark | String | 备注 |
|
||||
| createBy | String | 创建人 |
|
||||
| createTime | String | 创建时间 |
|
||||
|
||||
---
|
||||
|
||||
### 2. 查询个人中介详情
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/person/{bizId}`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:query`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| bizId | String | 是 | 业务ID |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"bizId": "I202602040001",
|
||||
"name": "张三",
|
||||
"certificateNo": "110101199001011234",
|
||||
"intermediaryType": "1",
|
||||
"intermediaryTypeName": "个人",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"personType": "中介",
|
||||
"personSubType": "本人",
|
||||
"relationType": "正常",
|
||||
"gender": "M",
|
||||
"genderName": "男",
|
||||
"idType": "身份证",
|
||||
"personId": "110101199001011234",
|
||||
"mobile": "13800138000",
|
||||
"wechatNo": "zhangsan",
|
||||
"contactAddress": "北京市朝阳区",
|
||||
"company": "XX公司",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"position": "经纪人",
|
||||
"relatedNumId": "",
|
||||
"relation": "",
|
||||
"remark": "测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 查询实体中介详情
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/entity/{socialCreditCode}`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:query`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| socialCreditCode | String | 是 | 统一社会信用代码 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"bizId": "I202602040002",
|
||||
"name": "XX中介公司",
|
||||
"certificateNo": "91110000123456789X",
|
||||
"intermediaryType": "2",
|
||||
"intermediaryTypeName": "实体",
|
||||
"status": "0",
|
||||
"statusName": "正常",
|
||||
"enterpriseName": "XX中介公司",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"enterpriseType": "有限责任公司",
|
||||
"enterpriseNature": "民企",
|
||||
"industryClass": "房地产",
|
||||
"industryName": "房地产业",
|
||||
"establishDate": "2020-01-01",
|
||||
"registerAddress": "北京市朝阳区",
|
||||
"legalRepresentative": "张三",
|
||||
"legalCertType": "身份证",
|
||||
"legalCertNo": "110101199001011234",
|
||||
"shareholder1": "李四",
|
||||
"shareholder2": "王五",
|
||||
"shareholder3": "",
|
||||
"shareholder4": "",
|
||||
"shareholder5": "",
|
||||
"remark": "测试数据",
|
||||
"createBy": "admin",
|
||||
"createTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 新增个人中介
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/person`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:add`
|
||||
|
||||
**请求体** (application/json):
|
||||
```json
|
||||
{
|
||||
"name": "张三",
|
||||
"personType": "中介",
|
||||
"personSubType": "本人",
|
||||
"relationType": "正常",
|
||||
"gender": "M",
|
||||
"idType": "身份证",
|
||||
"personId": "110101199001011234",
|
||||
"mobile": "13800138000",
|
||||
"wechatNo": "zhangsan",
|
||||
"contactAddress": "北京市朝阳区",
|
||||
"company": "XX公司",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"position": "经纪人",
|
||||
"relatedNumId": "",
|
||||
"relation": "",
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| name | String | 是 | 姓名(最大100字符) |
|
||||
| personId | String | 是 | 证件号码(最大50字符) |
|
||||
| personType | String | 否 | 人员类型 |
|
||||
| personSubType | String | 否 | 人员子类型 |
|
||||
| relationType | String | 否 | 关系类型 |
|
||||
| gender | String | 否 | 性别(M=男, F=女, O=其他) |
|
||||
| idType | String | 否 | 证件类型 |
|
||||
| mobile | String | 否 | 手机号码(最大20字符) |
|
||||
| wechatNo | String | 否 | 微信号(最大50字符) |
|
||||
| contactAddress | String | 否 | 联系地址(最大200字符) |
|
||||
| company | String | 否 | 所在公司(最大200字符) |
|
||||
| socialCreditCode | String | 否 | 企业统一信用码(最大50字符) |
|
||||
| position | String | 否 | 职位(最大100字符) |
|
||||
| relatedNumId | String | 否 | 关联人员ID(最大50字符) |
|
||||
| relation | String | 否 | 关联关系(最大50字符) |
|
||||
| remark | String | 否 | 备注(最大500字符) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 新增实体中介
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/entity`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:add`
|
||||
|
||||
**请求体** (application/json):
|
||||
```json
|
||||
{
|
||||
"enterpriseName": "XX中介公司",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"enterpriseType": "有限责任公司",
|
||||
"enterpriseNature": "民企",
|
||||
"industryClass": "房地产",
|
||||
"industryName": "房地产业",
|
||||
"establishDate": "2020-01-01",
|
||||
"registerAddress": "北京市朝阳区",
|
||||
"legalRepresentative": "张三",
|
||||
"legalCertType": "身份证",
|
||||
"legalCertNo": "110101199001011234",
|
||||
"shareholder1": "李四",
|
||||
"shareholder2": "王五",
|
||||
"shareholder3": "",
|
||||
"shareholder4": "",
|
||||
"shareholder5": "",
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| enterpriseName | String | 是 | 机构名称(最大200字符) |
|
||||
| socialCreditCode | String | 否 | 统一社会信用代码(最大50字符) |
|
||||
| enterpriseType | String | 否 | 主体类型(最大50字符) |
|
||||
| enterpriseNature | String | 否 | 企业性质(最大50字符) |
|
||||
| industryClass | String | 否 | 行业分类(最大100字符) |
|
||||
| industryName | String | 否 | 所属行业(最大100字符) |
|
||||
| establishDate | Date | 否 | 成立日期 |
|
||||
| registerAddress | String | 否 | 注册地址(最大500字符) |
|
||||
| legalRepresentative | String | 否 | 法定代表人(最大100字符) |
|
||||
| legalCertType | String | 否 | 法定代表人证件类型(最大50字符) |
|
||||
| legalCertNo | String | 否 | 法定代表人证件号码(最大50字符) |
|
||||
| shareholder1-5 | String | 否 | 股东信息(每个最大100字符) |
|
||||
| remark | String | 否 | 备注(最大500字符) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 修改个人中介
|
||||
|
||||
**接口地址**: `PUT /ccdi/intermediary/person`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:edit`
|
||||
|
||||
**请求体** (application/json):
|
||||
```json
|
||||
{
|
||||
"bizId": "I202602040001",
|
||||
"name": "张三",
|
||||
"personType": "中介",
|
||||
"personSubType": "本人",
|
||||
"relationType": "正常",
|
||||
"gender": "M",
|
||||
"idType": "身份证",
|
||||
"personId": "110101199001011234",
|
||||
"mobile": "13800138000",
|
||||
"wechatNo": "zhangsan",
|
||||
"contactAddress": "北京市朝阳区",
|
||||
"company": "XX公司",
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"position": "经纪人",
|
||||
"relatedNumId": "",
|
||||
"relation": "",
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**: 与新增个人中介相同,bizId为必填项
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 修改实体中介
|
||||
|
||||
**接口地址**: `PUT /ccdi/intermediary/entity`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:edit`
|
||||
|
||||
**请求体** (application/json):
|
||||
```json
|
||||
{
|
||||
"socialCreditCode": "91110000123456789X",
|
||||
"enterpriseName": "XX中介公司",
|
||||
"enterpriseType": "有限责任公司",
|
||||
"enterpriseNature": "民企",
|
||||
"industryClass": "房地产",
|
||||
"industryName": "房地产业",
|
||||
"establishDate": "2020-01-01",
|
||||
"registerAddress": "北京市朝阳区",
|
||||
"legalRepresentative": "张三",
|
||||
"legalCertType": "身份证",
|
||||
"legalCertNo": "110101199001011234",
|
||||
"shareholder1": "李四",
|
||||
"shareholder2": "王五",
|
||||
"shareholder3": "",
|
||||
"shareholder4": "",
|
||||
"shareholder5": "",
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**: 与新增实体中介相同,socialCreditCode为必填项
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. 删除中介
|
||||
|
||||
**接口地址**: `DELETE /ccdi/intermediary/{ids}`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:remove`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| ids | String[] | 是 | 业务ID数组(逗号分隔) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 9. 校验人员ID唯一性
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/checkPersonIdUnique`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| personId | String | 是 | 证件号码 |
|
||||
| bizId | String | 否 | 排除的业务ID(修改时使用) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": true
|
||||
}
|
||||
```
|
||||
|
||||
**data字段说明**: true=唯一可用, false=已存在
|
||||
|
||||
---
|
||||
|
||||
### 10. 校验统一社会信用代码唯一性
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/checkSocialCreditCodeUnique`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| socialCreditCode | String | 是 | 统一社会信用代码 |
|
||||
| excludeId | String | 否 | 排除的ID(修改时使用) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": true
|
||||
}
|
||||
```
|
||||
|
||||
**data字段说明**: true=唯一可用, false=已存在
|
||||
|
||||
---
|
||||
|
||||
### 11. 下载个人中介导入模板
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/importPersonTemplate`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应**: Excel模板文件下载
|
||||
|
||||
**Excel格式说明**:
|
||||
|
||||
**Sheet1: 个人中介信息**
|
||||
| 姓名 | 人员类型 | 人员子类型 | 关系类型 | 性别▼ | 证件类型▼ | 证件号码 | 手机号码 | 微信号 | 联系地址 | 所在公司 | 企业统一信用码 | 职位 | 关联人员ID | 关联关系 | 备注 |
|
||||
|------|---------|-----------|---------|-------|-----------|---------|---------|--------|---------|---------|--------------|-----|-----------|---------|------|
|
||||
| 张三 | 中介 | 本人 | 正常 | 男 | 身份证 | 110101199001011234 | 13800138000 | zhangsan | 北京市朝阳区 | XX公司 | 91110000XXXXXXXXXX | 经纪人 | - | - | 测试 |
|
||||
|
||||
**注**: 带▼标记的列包含下拉框,选项来自字典
|
||||
|
||||
---
|
||||
|
||||
### 12. 下载实体中介导入模板
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/importEntityTemplate`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应**: Excel模板文件下载
|
||||
|
||||
**Excel格式说明**:
|
||||
|
||||
**Sheet1: 实体中介信息**
|
||||
| 机构名称 | 统一社会信用代码 | 主体类型▼ | 企业性质▼ | 行业分类 | 所属行业 | 成立日期 | 注册地址 | 法定代表人 | 法定代表人证件类型 | 法定代表人证件号码 | 股东1 | 股东2 | 股东3 | 股东4 | 股东5 | 备注 |
|
||||
|---------|-----------------|-----------|-----------|---------|---------|---------|---------|-----------|-------------------|-------------------|-------|-------|-------|-------|-------|------|
|
||||
| XX公司 | 91110000XXXXXXXXXX | 有限责任公司 | 民企 | 房地产 | 房地产业 | 2020-01-01 | 北京市朝阳区 | 张三 | 身份证 | 110101199001011234 | 李四 | 王五 | - | - | - | - |
|
||||
|
||||
---
|
||||
|
||||
### 13. 导入个人中介数据
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/importPersonData`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:import`
|
||||
|
||||
**请求参数** (multipart/form-data):
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| file | File | 是 | Excel文件 |
|
||||
| updateSupport | Boolean | 否 | 是否更新已存在数据(默认false) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "恭喜您,数据已全部导入成功!共10条"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 14. 导入实体中介数据
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/importEntityData`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:import`
|
||||
|
||||
**请求参数** (multipart/form-data):
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| file | File | 是 | Excel文件 |
|
||||
| updateSupport | Boolean | 否 | 是否更新已存在数据(默认false) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "恭喜您,数据已全部导入成功!共10条"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 字典数据说明
|
||||
|
||||
导入模板中的下拉框选项来自系统字典管理,相关字典类型:
|
||||
|
||||
| 字典类型 | 字典名称 | 用途 |
|
||||
|---------|---------|------|
|
||||
| ccdi_indiv_gender | 个人中介性别 | 个人中介模板性别下拉框 |
|
||||
| ccdi_certificate_type | 证件类型 | 个人中介模板证件类型下拉框 |
|
||||
| ccdi_entity_type | 主体类型 | 机构中介模板主体类型下拉框 |
|
||||
| ccdi_enterprise_nature | 企业性质 | 机构中介模板企业性质下拉框 |
|
||||
| ccdi_data_source | 数据来源 | 数据来源字段映射 |
|
||||
|
||||
---
|
||||
|
||||
## 错误码说明
|
||||
|
||||
| HTTP状态码 | 错误码 | 说明 |
|
||||
|-----------|--------|------|
|
||||
| 200 | 200 | 操作成功 |
|
||||
| 401 | 401 | 未授权,请先登录 |
|
||||
| 403 | 403 | 无权限访问 |
|
||||
| 500 | 500 | 服务器内部错误 |
|
||||
|
||||
---
|
||||
|
||||
## 业务错误信息
|
||||
|
||||
| 错误信息 | 说明 |
|
||||
|----------|------|
|
||||
| 姓名不能为空 | 个人中介新增/修改时姓名为空 |
|
||||
| 机构名称不能为空 | 实体中介新增/修改时机构名称为空 |
|
||||
| 证件号码不能为空 | 个人中介新增/修改时证件号码为空 |
|
||||
| 该证件号已存在 | 新增/导入时证件号重复 |
|
||||
| 该统一社会信用代码已存在 | 新增/导入时信用代码重复 |
|
||||
| 姓名长度不能超过100个字符 | 姓名超长 |
|
||||
| 证件号码长度不能超过50个字符 | 证件号码超长 |
|
||||
| 机构名称长度不能超过200个字符 | 机构名称超长 |
|
||||
|
||||
---
|
||||
|
||||
## 测试账号
|
||||
|
||||
- 用户名: `admin`
|
||||
- 密码: `admin123`
|
||||
|
||||
测试前请先调用 `/login/test` 接口获取Token。
|
||||
|
||||
---
|
||||
|
||||
## 更新日志
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| 1.0.0 | 2026-01-29 | 初始版本,支持个人和机构分类管理 |
|
||||
| 1.1.0 | 2026-01-29 | 添加字典下拉框功能,分离个人/机构模板 |
|
||||
| 1.2.0 | 2026-01-29 | 修改接口分离:新增个人/机构专用修改接口,修复中介类型修改问题 |
|
||||
| 1.3.0 | 2026-01-29 | 新增接口分离:新增个人/机构专用新增接口,统一接口设计 |
|
||||
| 2.0.0 | 2026-02-04 | 重构版本:使用MyBatis Plus,分离DTO/VO,统一业务ID(bizId),优化查询接口 |
|
||||
|
||||
---
|
||||
|
||||
## 主要变更说明 (v2.0)
|
||||
|
||||
### 架构变更
|
||||
- 使用MyBatis Plus替代原生MyBatis
|
||||
- 分离DTO(请求)和VO(响应)对象
|
||||
- 统一使用业务ID(bizId)作为主键
|
||||
|
||||
### 接口变更
|
||||
- 查询详情接口分离为个人和实体两个接口
|
||||
- 新增接口分离为个人和实体两个接口
|
||||
- 修改接口分离为个人和实体两个接口
|
||||
- 新增唯一性校验接口
|
||||
|
||||
### 数据模型变更
|
||||
- 个人中介使用`personId`作为证件号字段
|
||||
- 实体中介使用`socialCreditCode`作为统一社会信用代码字段
|
||||
- 删除了`intermediaryId`,统一使用`bizId`
|
||||
|
||||
### 查询功能增强
|
||||
- 支持按中介类型查询
|
||||
- 支持按姓名/机构名称模糊查询
|
||||
- 支持按证件号/统一社会信用代码精确查询
|
||||
726
doc/api-docs/api/中介黑名单管理API文档.md
Normal file
726
doc/api-docs/api/中介黑名单管理API文档.md
Normal file
@@ -0,0 +1,726 @@
|
||||
# 中介黑名单管理 API 文档 v2.0
|
||||
|
||||
## 概述
|
||||
|
||||
中介黑名单管理模块提供个人和机构两类中介信息的增删改查、类型化模板下载和批量导入导出功能。
|
||||
|
||||
**基础路径**: `/ccdi/intermediary`
|
||||
|
||||
**权限标识前缀**: `ccdi:intermediary`
|
||||
|
||||
**技术栈**: Spring Boot 3 + MyBatis Plus + MySQL
|
||||
|
||||
---
|
||||
|
||||
## API 接口列表
|
||||
|
||||
### 1. 查询中介黑名单列表
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/list`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:list`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| name | String | 否 | 姓名/机构名称(模糊查询) |
|
||||
| certificateNo | String | 否 | 证件号/统一社会信用代码(精确查询) |
|
||||
| intermediaryType | String | 否 | 中介类型(1=个人, 2=机构) |
|
||||
| pageNum | Integer | 否 | 页码(默认1) |
|
||||
| pageSize | Integer | 否 | 每页数量(默认10) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"rows": [
|
||||
{
|
||||
"id": "abc123",
|
||||
"name": "张三",
|
||||
"certificateNo": "110101199001011234",
|
||||
"intermediaryType": "1",
|
||||
"personType": "中介",
|
||||
"company": "XX公司",
|
||||
"dataSource": "MANUAL",
|
||||
"createTime": "2026-02-04 10:00:00",
|
||||
"updateTime": "2026-02-05 14:30:00"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| id | String | ID(个人为bizId,实体为socialCreditCode) |
|
||||
| name | String | 姓名/机构名称 |
|
||||
| certificateNo | String | 证件号/统一社会信用代码 |
|
||||
| intermediaryType | String | 中介类型(1=个人, 2=实体) |
|
||||
| personType | String | 人员类型/实体 |
|
||||
| company | String | 公司/机构名称 |
|
||||
| dataSource | String | 数据来源(MANUAL=手动, IMPORT=导入, API=接口) |
|
||||
| createTime | Date | 创建时间 |
|
||||
| updateTime | Date | 修改时间 |
|
||||
|
||||
---
|
||||
|
||||
### 2. 查询个人中介详情
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/person/{bizId}`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:query`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| bizId | String | 是 | 人员业务ID |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"bizId": "abc123xyz456",
|
||||
"intermediaryType": "1",
|
||||
"name": "张三",
|
||||
"personType": "房产中介",
|
||||
"personSubType": "本人",
|
||||
"gender": "M",
|
||||
"idType": "身份证",
|
||||
"personId": "110101199001011234",
|
||||
"mobile": "13800138000",
|
||||
"wechatNo": "zhangsan_wx",
|
||||
"contactAddress": "北京市朝阳区XX路XX号",
|
||||
"company": "XX房产中介公司",
|
||||
"position": "经纪人",
|
||||
"socialCreditCode": "91110000XXXXXXXXXX",
|
||||
"relatedNumId": "rel123",
|
||||
"relationType": "配偶",
|
||||
"dataSource": "MANUAL",
|
||||
"remark": "测试数据",
|
||||
"createTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| bizId | String | 人员业务ID |
|
||||
| intermediaryType | String | 中介类型(固定为"1") |
|
||||
| name | String | 姓名 |
|
||||
| personType | String | 人员类型(房产中介、贷款中介等) |
|
||||
| personSubType | String | 人员子类型(本人、配偶、父亲等) |
|
||||
| gender | String | 性别(M=男, F=女, O=其他) |
|
||||
| idType | String | 证件类型(身份证、护照等) |
|
||||
| personId | String | 证件号码 |
|
||||
| mobile | String | 手机号码 |
|
||||
| wechatNo | String | 微信号 |
|
||||
| contactAddress | String | 联系地址 |
|
||||
| company | String | 所在公司 |
|
||||
| position | String | 职位 |
|
||||
| socialCreditCode | String | 企业统一信用码 |
|
||||
| relatedNumId | String | 关联人员ID |
|
||||
| relationType | String | 关联关系(配偶、父子、母女等) |
|
||||
| dataSource | String | 数据来源 |
|
||||
| remark | String | 备注 |
|
||||
| createTime | Date | 创建时间 |
|
||||
|
||||
---
|
||||
|
||||
### 3. 查询实体中介详情
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/entity/{socialCreditCode}`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:query`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| socialCreditCode | String | 是 | 统一社会信用代码 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"socialCreditCode": "91110000XXXXXXXXXX",
|
||||
"intermediaryType": "2",
|
||||
"enterpriseName": "XX中介公司",
|
||||
"enterpriseType": "有限责任公司",
|
||||
"enterpriseNature": "民企",
|
||||
"industryClass": "房地产",
|
||||
"industryName": "房地产业",
|
||||
"establishDate": "2020-01-01",
|
||||
"registerAddress": "北京市朝阳区XX路XX号",
|
||||
"legalRepresentative": "张三",
|
||||
"legalCertType": "身份证",
|
||||
"legalCertNo": "110101199001011234",
|
||||
"shareholder1": "李四",
|
||||
"shareholder2": "王五",
|
||||
"shareholder3": "赵六",
|
||||
"shareholder4": null,
|
||||
"shareholder5": null,
|
||||
"dataSource": "MANUAL",
|
||||
"remark": "测试数据",
|
||||
"createTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| socialCreditCode | String | 统一社会信用代码 |
|
||||
| intermediaryType | String | 中介类型(固定为"2") |
|
||||
| enterpriseName | String | 机构名称 |
|
||||
| enterpriseType | String | 主体类型 |
|
||||
| enterpriseNature | String | 企业性质 |
|
||||
| industryClass | String | 行业分类 |
|
||||
| industryName | String | 所属行业 |
|
||||
| establishDate | Date | 成立日期 |
|
||||
| registerAddress | String | 注册地址 |
|
||||
| legalRepresentative | String | 法定代表人 |
|
||||
| legalCertType | String | 法定代表人证件类型 |
|
||||
| legalCertNo | String | 法定代表人证件号码 |
|
||||
| shareholder1-5 | String | 股东信息 |
|
||||
| dataSource | String | 数据来源 |
|
||||
| remark | String | 备注 |
|
||||
| createTime | Date | 创建时间 |
|
||||
|
||||
---
|
||||
|
||||
### 4. 新增个人中介
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/person`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:add`
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"name": "张三",
|
||||
"personType": "房产中介",
|
||||
"personSubType": "本人",
|
||||
"gender": "M",
|
||||
"idType": "身份证",
|
||||
"personId": "110101199001011234",
|
||||
"mobile": "13800138000",
|
||||
"wechatNo": "zhangsan_wx",
|
||||
"contactAddress": "北京市朝阳区XX路XX号",
|
||||
"company": "XX房产中介公司",
|
||||
"position": "经纪人",
|
||||
"socialCreditCode": "91110000XXXXXXXXXX",
|
||||
"relatedNumId": "rel123",
|
||||
"relationType": "配偶",
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| name | String | 是 | 姓名(1-100字符) |
|
||||
| personId | String | 是 | 证件号码(不超过50字符) |
|
||||
| personType | String | 否 | 人员类型(枚举值,见下文) |
|
||||
| personSubType | String | 否 | 人员子类型(枚举值,见下文) |
|
||||
| gender | String | 否 | 性别(M=男, F=女, O=其他) |
|
||||
| idType | String | 否 | 证件类型(枚举值,见下文) |
|
||||
| mobile | String | 否 | 手机号码(不超过20字符) |
|
||||
| wechatNo | String | 否 | 微信号(不超过50字符) |
|
||||
| contactAddress | String | 否 | 联系地址(不超过200字符) |
|
||||
| company | String | 否 | 所在公司(不超过200字符) |
|
||||
| position | String | 否 | 职位(不超过100字符) |
|
||||
| socialCreditCode | String | 否 | 企业统一信用码(不超过50字符) |
|
||||
| relatedNumId | String | 否 | 关联人员ID(不超过50字符) |
|
||||
| relationType | String | 否 | 关联关系(枚举值,见下文) |
|
||||
| remark | String | 否 | 备注(不超过500字符) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 新增实体中介
|
||||
|
||||
**接口地址**: `POST /ccdi/intermediary/entity`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:add`
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"enterpriseName": "XX中介公司",
|
||||
"socialCreditCode": "91110000XXXXXXXXXX",
|
||||
"enterpriseType": "有限责任公司",
|
||||
"enterpriseNature": "民企",
|
||||
"industryClass": "房地产",
|
||||
"industryName": "房地产业",
|
||||
"establishDate": "2020-01-01",
|
||||
"registerAddress": "北京市朝阳区XX路XX号",
|
||||
"legalRepresentative": "张三",
|
||||
"legalCertType": "身份证",
|
||||
"legalCertNo": "110101199001011234",
|
||||
"shareholder1": "李四",
|
||||
"shareholder2": "王五",
|
||||
"shareholder3": "赵六",
|
||||
"shareholder4": null,
|
||||
"shareholder5": null,
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| enterpriseName | String | 是 | 机构名称(1-200字符) |
|
||||
| socialCreditCode | String | 是 | 统一社会信用代码(不超过50字符) |
|
||||
| enterpriseType | String | 否 | 主体类型(枚举值,见下文) |
|
||||
| enterpriseNature | String | 否 | 企业性质(枚举值,见下文) |
|
||||
| industryClass | String | 否 | 行业分类(不超过100字符) |
|
||||
| industryName | String | 否 | 所属行业(不超过100字符) |
|
||||
| establishDate | Date | 否 | 成立日期(yyyy-MM-dd) |
|
||||
| registerAddress | String | 否 | 注册地址(不超过500字符) |
|
||||
| legalRepresentative | String | 否 | 法定代表人(不超过100字符) |
|
||||
| legalCertType | String | 否 | 法定代表人证件类型(枚举值) |
|
||||
| legalCertNo | String | 否 | 法定代表人证件号码(不超过50字符) |
|
||||
| shareholder1-5 | String | 否 | 股东信息(每个不超过100字符) |
|
||||
| remark | String | 否 | 备注(不超过500字符) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 修改个人中介
|
||||
|
||||
**接口地址**: `PUT /ccdi/intermediary/person`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:edit`
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"bizId": "abc123xyz456",
|
||||
"name": "张三",
|
||||
"personType": "房产中介",
|
||||
"personSubType": "本人",
|
||||
"gender": "M",
|
||||
"idType": "身份证",
|
||||
"personId": "110101199001011234",
|
||||
"mobile": "13800138000",
|
||||
"wechatNo": "zhangsan_wx",
|
||||
"contactAddress": "北京市朝阳区XX路XX号",
|
||||
"company": "XX房产中介公司",
|
||||
"position": "经纪人",
|
||||
"socialCreditCode": "91110000XXXXXXXXXX",
|
||||
"relatedNumId": "rel123",
|
||||
"relationType": "配偶",
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**: 与新增接口相同,但 `bizId` 为必填项。
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 修改实体中介
|
||||
|
||||
**接口地址**: `PUT /ccdi/intermediary/entity`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:edit`
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"socialCreditCode": "91110000XXXXXXXXXX",
|
||||
"enterpriseName": "XX中介公司",
|
||||
"enterpriseType": "有限责任公司",
|
||||
"enterpriseNature": "民企",
|
||||
"industryClass": "房地产",
|
||||
"industryName": "房地产业",
|
||||
"establishDate": "2020-01-01",
|
||||
"registerAddress": "北京市朝阳区XX路XX号",
|
||||
"legalRepresentative": "张三",
|
||||
"legalCertType": "身份证",
|
||||
"legalCertNo": "110101199001011234",
|
||||
"shareholder1": "李四",
|
||||
"shareholder2": "王五",
|
||||
"shareholder3": "赵六",
|
||||
"shareholder4": null,
|
||||
"shareholder5": null,
|
||||
"remark": "测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**: 与新增接口相同。
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. 删除中介
|
||||
|
||||
**接口地址**: `DELETE /ccdi/intermediary/{ids}`
|
||||
|
||||
**权限要求**: `ccdi:intermediary:remove`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| ids | String[] | 是 | ID数组(个人为bizId,实体为socialCreditCode) |
|
||||
|
||||
**示例**: `/ccdi/intermediary/abc123,91110000XXXXXXXXXX`
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 9. 校验人员ID唯一性
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/checkPersonIdUnique`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| personId | String | 是 | 证件号码 |
|
||||
| bizId | String | 否 | 排除的人员ID(修改时使用) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": true
|
||||
}
|
||||
```
|
||||
|
||||
**响应说明**: `true` 表示唯一,`false` 表示已存在。
|
||||
|
||||
---
|
||||
|
||||
### 10. 校验统一社会信用代码唯一性
|
||||
|
||||
**接口地址**: `GET /ccdi/intermediary/checkSocialCreditCodeUnique`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| socialCreditCode | String | 是 | 统一社会信用代码 |
|
||||
| excludeId | String | 否 | 排除的ID(修改时使用) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": true
|
||||
}
|
||||
```
|
||||
|
||||
**响应说明**: `true` 表示唯一,`false` 表示已存在。
|
||||
|
||||
---
|
||||
|
||||
## 枚举接口
|
||||
|
||||
### 获取人员类型选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/indivType`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "房产中介", "label": "房产中介" },
|
||||
{ "value": "贷款中介", "label": "贷款中介" },
|
||||
{ "value": "职业背债人", "label": "职业背债人" },
|
||||
{ "value": "担保中介", "label": "担保中介" },
|
||||
{ "value": "评估中介", "label": "评估中介" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 获取人员子类型选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/indivSubType`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "本人", "label": "本人" },
|
||||
{ "value": "配偶", "label": "配偶" },
|
||||
{ "value": "父亲", "label": "父亲" },
|
||||
{ "value": "母亲", "label": "母亲" },
|
||||
{ "value": "兄弟", "label": "兄弟" },
|
||||
{ "value": "姐妹", "label": "姐妹" },
|
||||
{ "value": "子女", "label": "子女" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 获取性别选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/gender`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "M", "label": "男" },
|
||||
{ "value": "F", "label": "女" },
|
||||
{ "value": "O", "label": "其他" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 获取证件类型选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/certType`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "身份证", "label": "身份证" },
|
||||
{ "value": "护照", "label": "护照" },
|
||||
{ "value": "港澳通行证", "label": "港澳通行证" },
|
||||
{ "value": "台湾通行证", "label": "台湾通行证" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 获取关联关系选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/relationType`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "配偶", "label": "配偶" },
|
||||
{ "value": "父子", "label": "父子" },
|
||||
{ "value": "母女", "label": "母女" },
|
||||
{ "value": "兄弟", "label": "兄弟" },
|
||||
{ "value": "姐妹", "label": "姐妹" },
|
||||
{ "value": "亲属", "label": "亲属" },
|
||||
{ "value": "朋友", "label": "朋友" },
|
||||
{ "value": "同事", "label": "同事" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 获取主体类型选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/corpType`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "有限责任公司", "label": "有限责任公司" },
|
||||
{ "value": "股份有限公司", "label": "股份有限公司" },
|
||||
{ "value": "个体工商户", "label": "个体工商户" },
|
||||
{ "value": "合伙企业", "label": "合伙企业" },
|
||||
{ "value": "个人独资企业", "label": "个人独资企业" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 获取企业性质选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/corpNature`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "国企", "label": "国企" },
|
||||
{ "value": "民企", "label": "民企" },
|
||||
{ "value": "外企", "label": "外企" },
|
||||
{ "value": "合资", "label": "合资" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 获取数据来源选项
|
||||
|
||||
**接口地址**: `GET /ccdi/enum/dataSource`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": [
|
||||
{ "value": "MANUAL", "label": "手动录入" },
|
||||
{ "value": "SYSTEM", "label": "系统同步" },
|
||||
{ "value": "IMPORT", "label": "批量导入" },
|
||||
{ "value": "API", "label": "接口获取" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 错误码说明
|
||||
|
||||
| HTTP状态码 | 错误码 | 说明 |
|
||||
|-----------|--------|------|
|
||||
| 200 | 200 | 操作成功 |
|
||||
| 401 | 401 | 未授权,请先登录 |
|
||||
| 403 | 403 | 无权限访问 |
|
||||
| 500 | 500 | 服务器内部错误 |
|
||||
|
||||
## 业务错误信息
|
||||
|
||||
| 错误信息 | 说明 |
|
||||
|----------|------|
|
||||
| 姓名不能为空 | 新增/修改时姓名为空 |
|
||||
| 证件号码不能为空 | 新增时证件号码为空 |
|
||||
| 该证件号已存在 | 新增/导入时证件号重复 |
|
||||
| 该统一社会信用代码已存在 | 新增/导入时信用代码重复 |
|
||||
| 姓名长度不能超过100个字符 | 姓名超长 |
|
||||
| 证件号长度不能超过50个字符 | 证件号超长 |
|
||||
|
||||
## 测试账号
|
||||
|
||||
- **用户名**: `admin`
|
||||
- **密码**: `admin123`
|
||||
|
||||
**获取Token**: 调用 `POST /login/test` 接口获取Token,后续请求在 Header 中添加:
|
||||
```
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
|
||||
## 更新日志
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| 2.0.0 | 2026-02-05 | 统一字段命名,使用接口枚举,更新文档与实际代码一致 |
|
||||
| 1.3.0 | 2026-01-29 | 新增接口分离:个人/机构专用新增接口 |
|
||||
| 1.2.0 | 2026-01-29 | 修改接口分离:个人/机构专用修改接口 |
|
||||
| 1.1.0 | 2026-01-29 | 添加字典下拉框功能 |
|
||||
| 1.0.0 | 2026-01-29 | 初始版本 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **中介类型字段**:
|
||||
- 个人中介:`intermediaryType = "1"`
|
||||
- 实体中介:`intermediaryType = "2"`
|
||||
|
||||
2. **枚举值使用**:
|
||||
- 所有下拉选项字段应使用枚举接口返回的 `value` 值
|
||||
- 不要硬编码或使用字典表的 `dictValue`
|
||||
|
||||
3. **数据来源字段**:
|
||||
- 手动录入:`MANUAL`
|
||||
- 系统同步:`SYSTEM`
|
||||
- 批量导入:`IMPORT`
|
||||
- 接口获取:`API`
|
||||
|
||||
4. **分页排序**:
|
||||
- 列表查询默认按 `updateTime` 降序排列
|
||||
- 使用 MyBatis Plus 分页插件
|
||||
|
||||
5. **ID字段**:
|
||||
- 个人中介使用 `bizId` 作为唯一标识
|
||||
- 实体中介使用 `socialCreditCode` 作为唯一标识
|
||||
|
||||
6. **批量操作**:
|
||||
- 删除接口支持同时删除个人和实体中介
|
||||
- 根据ID长度自动判断类型(个人ID较长)
|
||||
271
doc/api-docs/api/中介黑名单管理API测试报告.md
Normal file
271
doc/api-docs/api/中介黑名单管理API测试报告.md
Normal file
@@ -0,0 +1,271 @@
|
||||
# 中介黑名单管理API测试报告
|
||||
|
||||
## 测试概述
|
||||
|
||||
**测试时间:** 2026-01-29 16:43:11
|
||||
**测试环境:** http://localhost:8080
|
||||
**测试账号:** admin
|
||||
**测试脚本:** [test_intermediary_blacklist.sh](../scripts/test_intermediary_blacklist.sh)
|
||||
**测试通过率:** 100.00%
|
||||
|
||||
## 测试结果汇总
|
||||
|
||||
| 指标 | 数值 |
|
||||
|------|------|
|
||||
| 测试场景总数 | 11 |
|
||||
| 通过数量 | 11 |
|
||||
| 失败数量 | 0 |
|
||||
| 通过率 | 100.00% |
|
||||
|
||||
## 测试用例详情
|
||||
|
||||
### 1. 登录测试
|
||||
|
||||
**接口:** `POST /login/test`
|
||||
**描述:** 使用测试账号登录获取认证token
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"username": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
```
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功获取token
|
||||
- token格式正确
|
||||
|
||||
---
|
||||
|
||||
### 2. 查询中介黑名单列表
|
||||
|
||||
**接口:** `GET /ccdi/intermediary/list`
|
||||
**描述:** 分页查询中介黑名单列表
|
||||
|
||||
**请求参数:**
|
||||
- pageNum: 1
|
||||
- pageSize: 10
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 返回分页数据结构正确
|
||||
- 包含 total 和 rows 字段
|
||||
- 数据格式符合预期
|
||||
|
||||
---
|
||||
|
||||
### 3. 新增个人中介黑名单
|
||||
|
||||
**接口:** `POST /ccdi/intermediary`
|
||||
**描述:** 新增个人类型的中介黑名单记录
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"name": "测试个人中介_20260129_164311",
|
||||
"certificateNo": "TESTCERT20260129_164311",
|
||||
"intermediaryType": "1",
|
||||
"remark": "自动化测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功创建记录
|
||||
- 返回状态码 200
|
||||
- 成功获取到新创建的ID: 2005
|
||||
|
||||
---
|
||||
|
||||
### 4. 新增机构中介黑名单
|
||||
|
||||
**接口:** `POST /ccdi/intermediary`
|
||||
**描述:** 新增机构类型的中介黑名单记录
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"name": "测试机构中介_20260129_164311",
|
||||
"certificateNo": "TESTORG20260129_164311",
|
||||
"intermediaryType": "2",
|
||||
"remark": "自动化测试机构数据"
|
||||
}
|
||||
```
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功创建记录
|
||||
- 返回状态码 200
|
||||
- 成功获取到新创建的ID: 2006
|
||||
|
||||
---
|
||||
|
||||
### 5. 获取中介详情
|
||||
|
||||
**接口:** `GET /ccdi/intermediary/{intermediaryId}`
|
||||
**描述:** 根据ID获取中介详细信息
|
||||
|
||||
**请求参数:**
|
||||
- intermediaryId: 2005
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功获取详情信息
|
||||
- 返回完整的数据结构
|
||||
- 包含所有必要字段
|
||||
|
||||
---
|
||||
|
||||
### 6. 修改中介黑名单
|
||||
|
||||
**接口:** `PUT /ccdi/intermediary`
|
||||
**描述:** 修改已存在的中介信息
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{
|
||||
"intermediaryId": 2005,
|
||||
"name": "测试个人中介_修改",
|
||||
"certificateNo": "TESTCERT20260129_164311",
|
||||
"intermediaryType": "1",
|
||||
"status": "1",
|
||||
"remark": "修改后的自动化测试数据"
|
||||
}
|
||||
```
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功更新记录
|
||||
- 返回状态码 200
|
||||
- 数据修改生效
|
||||
|
||||
---
|
||||
|
||||
### 7. 导出中介黑名单列表
|
||||
|
||||
**接口:** `POST /ccdi/intermediary/export`
|
||||
**描述:** 导出中介黑名单数据为Excel文件
|
||||
|
||||
**请求参数:**
|
||||
```json
|
||||
{}
|
||||
```
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功导出Excel文件
|
||||
- 文件格式正确
|
||||
- 文件保存至: test_output/test6_export.xlsx
|
||||
|
||||
---
|
||||
|
||||
### 8. 下载个人中介导入模板
|
||||
|
||||
**接口:** `POST /ccdi/intermediary/importPersonTemplate`
|
||||
**描述:** 下载个人中介导入Excel模板
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功下载模板文件
|
||||
- 文件格式正确
|
||||
- 文件保存至: test_output/test7_person_template.xlsx
|
||||
|
||||
---
|
||||
|
||||
### 9. 下载机构中介导入模板
|
||||
|
||||
**接口:** `POST /ccdi/intermediary/importEntityTemplate`
|
||||
**描述:** 下载机构中介导入Excel模板
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功下载模板文件
|
||||
- 文件格式正确
|
||||
- 文件保存至: test_output/test8_entity_template.xlsx
|
||||
|
||||
---
|
||||
|
||||
### 10. 条件查询(按中介类型)
|
||||
|
||||
**接口:** `GET /ccdi/intermediary/list`
|
||||
**描述:** 按中介类型筛选查询
|
||||
|
||||
**请求参数:**
|
||||
- pageNum: 1
|
||||
- pageSize: 10
|
||||
- intermediaryType: 1 (个人)
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 查询结果正确
|
||||
- 数据筛选生效
|
||||
- 返回指定类型的数据
|
||||
|
||||
---
|
||||
|
||||
### 11. 条件查询(按状态)
|
||||
|
||||
**接口:** `GET /ccdi/intermediary/list`
|
||||
**描述:** 按状态筛选查询
|
||||
|
||||
**请求参数:**
|
||||
- pageNum: 1
|
||||
- pageSize: 10
|
||||
- status: 1
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 查询结果正确
|
||||
- 数据筛选生效
|
||||
- 返回指定状态的数据
|
||||
|
||||
---
|
||||
|
||||
### 12. 删除中介黑名单
|
||||
|
||||
**接口:** `DELETE /ccdi/intermediary/{intermediaryIds}`
|
||||
**描述:** 批量删除中介黑名单记录
|
||||
|
||||
**请求参数:**
|
||||
- intermediaryIds: 2005,2006
|
||||
|
||||
**测试结果:** ✅ 通过
|
||||
- 成功删除记录
|
||||
- 返回状态码 200
|
||||
- 数据删除生效
|
||||
|
||||
---
|
||||
|
||||
## 测试文件清单
|
||||
|
||||
### 响应JSON文件
|
||||
- `test1_list_response.json` - 查询列表响应
|
||||
- `test2_add_person_response.json` - 新增个人中介响应
|
||||
- `test3_add_entity_response.json` - 新增机构中介响应
|
||||
- `test4_get_info_response.json` - 获取详情响应
|
||||
- `test5_edit_response.json` - 修改中介响应
|
||||
- `test9_remove_response.json` - 删除中介响应
|
||||
- `test10_query_by_type_response.json` - 按类型查询响应
|
||||
- `test11_query_by_status_response.json` - 按状态查询响应
|
||||
|
||||
### Excel文件
|
||||
- `test6_export.xlsx` - 导出的数据文件
|
||||
- `test7_person_template.xlsx` - 个人中介导入模板
|
||||
- `test8_entity_template.xlsx` - 机构中介导入模板
|
||||
|
||||
### 报告文件
|
||||
- `test_report_20260129_164311.txt` - 详细测试日志
|
||||
|
||||
## 结论
|
||||
|
||||
**所有测试用例均已通过,中介黑名单管理API功能完整且运行正常。**
|
||||
|
||||
### 主要验证点
|
||||
1. ✅ 认证授权机制正常
|
||||
2. ✅ CRUD操作功能完整
|
||||
3. ✅ 分页查询功能正常
|
||||
4. ✅ 条件筛选功能正常
|
||||
5. ✅ 文件导入导出功能正常
|
||||
6. ✅ 批量操作功能正常
|
||||
|
||||
### 建议
|
||||
1. 建议在实际部署前进行压力测试
|
||||
2. 建议添加更多的边界条件测试用例
|
||||
3. 建议完善错误码和错误信息的文档
|
||||
|
||||
---
|
||||
|
||||
**报告生成时间:** 2026-01-29 16:43:11
|
||||
**测试工具:** curl + bash
|
||||
**报告生成者:** Claude Code
|
||||
316
doc/api-docs/api/员工信息管理API文档.md
Normal file
316
doc/api-docs/api/员工信息管理API文档.md
Normal file
@@ -0,0 +1,316 @@
|
||||
# 员工信息管理 API 文档
|
||||
|
||||
## 概述
|
||||
|
||||
员工信息管理模块提供员工信息的增删改查、批量导入导出功能。
|
||||
|
||||
**基础路径**: `/ccdi/employee`
|
||||
|
||||
**权限标识前缀**: `ccdi:employee`
|
||||
|
||||
**重要更新**: 自2026-02-05起,员工ID(employeeId)作为柜员号使用,为7位数字,手动输入,唯一不可重复。
|
||||
|
||||
---
|
||||
|
||||
## API 接口列表
|
||||
|
||||
### 1. 查询员工列表
|
||||
|
||||
**接口地址**: `GET /ccdi/employee/list`
|
||||
|
||||
**权限要求**: `ccdi:employee:list`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| name | String | 否 | 姓名(模糊查询) |
|
||||
| employeeId | Long | 否 | 员工ID(柜员号,精确查询,7位数字) |
|
||||
| deptId | Long | 否 | 所属部门ID |
|
||||
| idCard | String | 否 | 身份证号(精确查询) |
|
||||
| status | String | 否 | 状态(0=在职, 1=离职) |
|
||||
| pageNum | Integer | 否 | 页码(默认1) |
|
||||
| pageSize | Integer | 否 | 每页数量(默认10) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"rows": [
|
||||
{
|
||||
"employeeId": 1000001,
|
||||
"name": "张三",
|
||||
"deptId": 100,
|
||||
"deptName": "总部",
|
||||
"idCard": "110101199001011234",
|
||||
"phone": "13800138000",
|
||||
"hireDate": "2020-01-01",
|
||||
"status": "0",
|
||||
"statusDesc": "在职",
|
||||
"createTime": "2026-01-28 10:00:00"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| employeeId | Long | 员工ID(柜员号,7位数字) |
|
||||
| name | String | 姓名 |
|
||||
| deptId | Long | 所属部门ID |
|
||||
| deptName | String | 所属部门名称(关联 sys_dept 表) |
|
||||
| idCard | String | 身份证号 |
|
||||
| phone | String | 电话 |
|
||||
| hireDate | Date | 入职时间 |
|
||||
| status | String | 状态(0=在职, 1=离职) |
|
||||
| statusDesc | String | 状态描述 |
|
||||
| createTime | Date | 创建时间 |
|
||||
|
||||
---
|
||||
|
||||
### 2. 查询员工详情
|
||||
|
||||
**接口地址**: `GET /ccdi/employee/{employeeId}`
|
||||
|
||||
**权限要求**: `ccdi:employee:query`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| employeeId | Long | 是 | 员工ID(柜员号) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功",
|
||||
"data": {
|
||||
"employeeId": 1000001,
|
||||
"name": "张三",
|
||||
"deptId": 100,
|
||||
"idCard": "110101199001011234",
|
||||
"phone": "13800138000",
|
||||
"hireDate": "2020-01-01",
|
||||
"status": "0",
|
||||
"statusDesc": "在职",
|
||||
"createTime": "2026-01-28 10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 新增员工
|
||||
|
||||
**接口地址**: `POST /ccdi/employee`
|
||||
|
||||
**权限要求**: `ccdi:employee:add`
|
||||
|
||||
**请求头**:
|
||||
```
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer {token}
|
||||
```
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"employeeId": 1000001,
|
||||
"name": "张三",
|
||||
"deptId": 100,
|
||||
"idCard": "110101199001011234",
|
||||
"phone": "13800138000",
|
||||
"hireDate": "2020-01-01",
|
||||
"status": "0"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 | 校验规则 |
|
||||
|--------|------|------|------|----------|
|
||||
| employeeId | Long | 是 | 员工ID(柜员号,7位数字) | 必填,7位数字,唯一 |
|
||||
| name | String | 是 | 姓名 | 最大100字符 |
|
||||
| deptId | Long | 是 | 所属部门ID | 必填 |
|
||||
| idCard | String | 是 | 身份证号 | 18位,符合国标,唯一 |
|
||||
| phone | String | 是 | 电话 | 必填,11位手机号 |
|
||||
| hireDate | Date | 否 | 入职时间 | yyyy-MM-dd |
|
||||
| status | String | 是 | 状态 | 0=在职, 1=离职 |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. 编辑员工
|
||||
|
||||
**接口地址**: `PUT /ccdi/employee`
|
||||
|
||||
**权限要求**: `ccdi:employee:edit`
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"employeeId": 1000001,
|
||||
"name": "张三",
|
||||
"deptId": 100,
|
||||
"idCard": "110101199001011234",
|
||||
"phone": "13800138000",
|
||||
"hireDate": "2020-01-01",
|
||||
"status": "0"
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**: 与新增接口相同,employeeId 为必填项,编辑时不可修改柜员号。
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. 删除员工
|
||||
|
||||
**接口地址**: `DELETE /ccdi/employee/{employeeIds}`
|
||||
|
||||
**权限要求**: `ccdi:employee:remove`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| employeeIds | Long[] | 是 | 员工ID数组(逗号分隔) |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "操作成功"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. 导出员工信息
|
||||
|
||||
**接口地址**: `POST /ccdi/employee/export`
|
||||
|
||||
**权限要求**: `ccdi:employee:export`
|
||||
|
||||
**请求参数**: 与查询列表接口相同(支持筛选条件)
|
||||
|
||||
**响应**: Excel 文件下载
|
||||
|
||||
---
|
||||
|
||||
### 7. 下载导入模板(带字典下拉框)
|
||||
|
||||
**接口地址**: `POST /ccdi/employee/importTemplate`
|
||||
|
||||
**权限要求**: 无
|
||||
|
||||
**功能说明**: 下载的 Excel 模板中,"状态"列会自动添加字典下拉框,方便用户选择。
|
||||
|
||||
**响应**: Excel 模板文件下载
|
||||
|
||||
**Excel 格式说明**:
|
||||
|
||||
**Sheet1: 员工信息**
|
||||
| 姓名* | 柜员号* | 所属部门ID* | 身份证号* | 电话* | 入职时间 | 状态▼* |
|
||||
|------|--------|------------|----------|------|----------|------|
|
||||
| 张三 | 1000001 | 100 | 110101199001011234 | 13800138000 | 2020-01-01 | 在职 |
|
||||
|
||||
**注**:
|
||||
- 带 * 标记的列为必填项(姓名、柜员号、所属部门、身份证号、电话、状态)
|
||||
- 带 ▼ 标记的列包含下拉框,选项来自字典 `ccdi_employee_status`
|
||||
|
||||
**使用 @DictDropdown 注解实现**:
|
||||
- 状态字段使用 `@DictDropdown(dictType = "ccdi_employee_status")` 注解
|
||||
- 系统自动从 Redis 缓存读取字典数据并生成下拉框
|
||||
- 下拉选项可动态更新,刷新字典缓存后生效
|
||||
|
||||
---
|
||||
|
||||
### 8. 导入员工信息
|
||||
|
||||
**接口地址**: `POST /ccdi/employee/importData`
|
||||
|
||||
**权限要求**: `ccdi:employee:import`
|
||||
|
||||
**请求参数**:
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| file | File | 是 | Excel 文件 |
|
||||
| updateSupport | Boolean | 否 | 是否更新已存在数据(默认false) |
|
||||
|
||||
**Excel 格式**:
|
||||
|
||||
**Sheet1: 员工信息**
|
||||
| 姓名* | 柜员号* | 所属部门ID* | 身份证号* | 电话* | 入职时间 | 状态* |
|
||||
|------|--------|------------|----------|------|----------|------|
|
||||
| 张三 | 1000001 | 100 | 110101199001011234 | 13800138000 | 2020-01-01 | 在职 |
|
||||
|
||||
**说明**:
|
||||
- ***标记为必填项**: 姓名、柜员号、所属部门、身份证号、电话、状态**
|
||||
- 柜员号: 7位数字,必填,唯一
|
||||
- 所属部门: 必须填写有效的部门ID
|
||||
- 电话: 必须填写11位手机号
|
||||
- 入职时间: 选填,格式为 yyyy-MM-dd
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "恭喜您,数据已全部导入成功!共 10 条"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 错误码说明
|
||||
|
||||
| 错误码 | 说明 |
|
||||
|--------|------|
|
||||
| 200 | 操作成功 |
|
||||
| 401 | 未授权,请先登录 |
|
||||
| 403 | 无权限访问 |
|
||||
| 500 | 服务器内部错误 |
|
||||
|
||||
## 业务错误信息
|
||||
|
||||
| 错误信息 | 说明 |
|
||||
|----------|------|
|
||||
| 该柜员号已存在 | 新增时柜员号重复 |
|
||||
| 柜员号不能为空 | 新增时柜员号为空 |
|
||||
| 柜员号必须为7位数字 | 柜员号格式不正确 |
|
||||
| 所属部门不能为空 | 新增时所属部门为空 |
|
||||
| 该身份证号已存在 | 新增/编辑时身份证号重复 |
|
||||
| 姓名不能为空 | 新增时姓名为空 |
|
||||
| 身份证号格式不正确 | 身份证号不符合18位国标 |
|
||||
| 电话不能为空 | 新增时电话为空 |
|
||||
| 电话格式不正确 | 手机号不符合11位格式 |
|
||||
| 状态只能填写'在职'或'离职' | 状态值不正确 |
|
||||
|
||||
---
|
||||
|
||||
## 测试账号
|
||||
|
||||
- 用户名: `admin`
|
||||
- 密码: `admin123`
|
||||
|
||||
测试前请先调用 `/login/test` 接口获取 Token。
|
||||
326
doc/api-docs/后端枚举字段说明.md
Normal file
326
doc/api-docs/后端枚举字段说明.md
Normal file
@@ -0,0 +1,326 @@
|
||||
# 后端枚举字段说明
|
||||
|
||||
## 概述
|
||||
|
||||
后端只返回枚举代码值,不返回枚举名称。前端需要根据代码值进行转换显示。
|
||||
|
||||
---
|
||||
|
||||
## API 返回的枚举字段
|
||||
|
||||
### 1. 中介类型 (intermediaryType)
|
||||
|
||||
| 代码值 | 说明 |
|
||||
|--------|------|
|
||||
| `1` | 个人中介 |
|
||||
| `2` | 机构中介 |
|
||||
|
||||
**前端转换示例:**
|
||||
```javascript
|
||||
const getIntermediaryTypeName = (type) => {
|
||||
const map = {
|
||||
'1': '个人',
|
||||
'2': '机构'
|
||||
}
|
||||
return map[type] || '未知'
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 状态 (status)
|
||||
|
||||
| 代码值 | 说明 |
|
||||
|--------|------|
|
||||
| `0` | 正常 |
|
||||
| `1` | 停用 |
|
||||
|
||||
**前端转换示例:**
|
||||
```javascript
|
||||
const getStatusName = (status) => {
|
||||
const map = {
|
||||
'0': '正常',
|
||||
'1': '停用'
|
||||
}
|
||||
return map[status] || '未知'
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 数据来源 (dataSource / date_source)
|
||||
|
||||
| 代码值 | 说明 |
|
||||
|--------|------|
|
||||
| `MANUAL` | 手动录入 |
|
||||
| `IMPORT` | 批量导入 |
|
||||
| `SYSTEM` | 系统同步 |
|
||||
| `API` | 接口获取 |
|
||||
|
||||
**前端转换示例:**
|
||||
```javascript
|
||||
const getDataSourceName = (source) => {
|
||||
const map = {
|
||||
'MANUAL': '手动录入',
|
||||
'IMPORT': '批量导入',
|
||||
'SYSTEM': '系统同步',
|
||||
'API': '接口获取'
|
||||
}
|
||||
return map[source] || '未知'
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 性别 (indivGender) - 个人中介
|
||||
|
||||
| 代码值 | 说明 |
|
||||
|--------|------|
|
||||
| `M` | 男 |
|
||||
| `F` | 女 |
|
||||
| `O` | 其他 |
|
||||
|
||||
**前端转换示例:**
|
||||
```javascript
|
||||
const getGenderName = (gender) => {
|
||||
const map = {
|
||||
'M': '男',
|
||||
'F': '女',
|
||||
'O': '其他'
|
||||
}
|
||||
return map[gender] || '未知'
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 证件类型 (indivCertType)
|
||||
|
||||
常用证件类型代码:
|
||||
- `身份证` - 身份证
|
||||
- `护照` - 护照
|
||||
- `港澳通行证` - 港澳通行证
|
||||
- `台湾通行证` - 台湾通行证
|
||||
|
||||
---
|
||||
|
||||
## API 返回数据示例
|
||||
|
||||
### 列表查询响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"msg": "查询成功",
|
||||
"rows": [
|
||||
{
|
||||
"intermediaryId": 1,
|
||||
"name": "张三",
|
||||
"certificateNo": "110101199001011234",
|
||||
"intermediaryType": "1",
|
||||
"status": "0",
|
||||
"dataSource": "MANUAL",
|
||||
"createTime": "2026-02-04 10:00:00",
|
||||
"updateTime": "2026-02-04 10:00:00"
|
||||
},
|
||||
{
|
||||
"intermediaryId": 0,
|
||||
"name": "测试机构有限公司",
|
||||
"certificateNo": "91110000123456789X",
|
||||
"intermediaryType": "2",
|
||||
"status": "0",
|
||||
"dataSource": "MANUAL",
|
||||
"createTime": "2026-02-04 10:00:00",
|
||||
"updateTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
],
|
||||
"total": 2
|
||||
}
|
||||
```
|
||||
|
||||
### 个人中介详情响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"intermediaryId": 1,
|
||||
"name": "张三",
|
||||
"certificateNo": "110101199001011234",
|
||||
"intermediaryType": "1",
|
||||
"status": "0",
|
||||
"dataSource": "MANUAL",
|
||||
"remark": "测试数据",
|
||||
"indivType": "中介",
|
||||
"indivSubType": "本人",
|
||||
"indivGender": "M",
|
||||
"indivCertType": "身份证",
|
||||
"indivPhone": "13800138000",
|
||||
"indivWechat": "test_wx001",
|
||||
"indivAddress": "北京市朝阳区测试路123号",
|
||||
"indivCompany": "测试公司",
|
||||
"indivPosition": "测试员",
|
||||
"createTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 机构中介详情响应
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"intermediaryId": 0,
|
||||
"name": "测试机构有限公司",
|
||||
"certificateNo": "91110000123456789X",
|
||||
"intermediaryType": "2",
|
||||
"status": "0",
|
||||
"dataSource": "MANUAL",
|
||||
"remark": "机构中介测试数据",
|
||||
"corpCreditCode": "91110000123456789X",
|
||||
"corpType": "有限责任公司",
|
||||
"corpNature": "民营企业",
|
||||
"corpIndustryCategory": "制造业",
|
||||
"corpIndustry": "通用设备制造业",
|
||||
"corpEstablishDate": "2020-01-01",
|
||||
"corpAddress": "北京市海淀区测试大街456号",
|
||||
"corpLegalRep": "李四",
|
||||
"corpLegalCertType": "身份证",
|
||||
"corpLegalCertNo": "110101198001011234",
|
||||
"createTime": "2026-02-04 10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 前端 Vue 组件示例
|
||||
|
||||
### 枚举转换工具函数
|
||||
|
||||
```javascript
|
||||
// utils/enums.js
|
||||
export const IntermediaryType = {
|
||||
PERSON: '1',
|
||||
ENTITY: '2',
|
||||
getName: (type) => {
|
||||
const map = {
|
||||
'1': '个人',
|
||||
'2': '机构'
|
||||
}
|
||||
return map[type] || '未知'
|
||||
}
|
||||
}
|
||||
|
||||
export const IntermediaryStatus = {
|
||||
NORMAL: '0',
|
||||
DISABLED: '1',
|
||||
getName: (status) => {
|
||||
const map = {
|
||||
'0': '正常',
|
||||
'1': '停用'
|
||||
}
|
||||
return map[status] || '未知'
|
||||
}
|
||||
}
|
||||
|
||||
export const DataSource = {
|
||||
MANUAL: 'MANUAL',
|
||||
IMPORT: 'IMPORT',
|
||||
SYSTEM: 'SYSTEM',
|
||||
API: 'API',
|
||||
getName: (source) => {
|
||||
const map = {
|
||||
'MANUAL': '手动录入',
|
||||
'IMPORT': '批量导入',
|
||||
'SYSTEM': '系统同步',
|
||||
'API': '接口获取'
|
||||
}
|
||||
return map[source] || '未知'
|
||||
}
|
||||
}
|
||||
|
||||
export const Gender = {
|
||||
MALE: 'M',
|
||||
FEMALE: 'F',
|
||||
OTHER: 'O',
|
||||
getName: (gender) => {
|
||||
const map = {
|
||||
'M': '男',
|
||||
'F': '女',
|
||||
'O': '其他'
|
||||
}
|
||||
return map[gender] || '未知'
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 表格列使用枚举
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<el-table :data="tableData">
|
||||
<el-table-column prop="name" label="姓名" />
|
||||
|
||||
<el-table-column prop="intermediaryType" label="中介类型">
|
||||
<template #default="{ row }">
|
||||
{{ IntermediaryType.getName(row.intermediaryType) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="status" label="状态">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'danger'">
|
||||
{{ IntermediaryStatus.getName(row.status) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="dataSource" label="数据来源">
|
||||
<template #default="{ row }">
|
||||
{{ DataSource.getName(row.dataSource) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { IntermediaryType, IntermediaryStatus, DataSource } from '@/utils/enums'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
IntermediaryType,
|
||||
IntermediaryStatus,
|
||||
DataSource,
|
||||
tableData: []
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
### 表单下拉框使用枚举
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<el-form :model="form">
|
||||
<el-form-item label="中介类型" prop="intermediaryType">
|
||||
<el-select v-model="form.intermediaryType" placeholder="请选择中介类型">
|
||||
<el-option label="个人" value="1" />
|
||||
<el-option label="机构" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="form.status">
|
||||
<el-radio label="0">正常</el-radio>
|
||||
<el-radio label="1">停用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **后端只返回代码值**,前端负责转换为显示名称
|
||||
2. **前端下拉框的 value 应该使用代码值**(如 '1', '2', '0' 等)
|
||||
3. **建议在前端统一维护枚举映射关系**,避免硬编码
|
||||
4. **新增枚举值时**,只需要前端更新映射表即可,后端无需修改
|
||||
5. **国际化支持**:前端可以根据语言切换返回不同的名称
|
||||
Reference in New Issue
Block a user