# 商户证照历史管理接口文档

## 概述

本模块为 `alien-store-platform` 服务提供商户证照历史记录的完整管理功能，包括证照的创建、更新、删除、查询等操作。

## 数据库表结构

```sql
CREATE TABLE `store_license_history` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `store_id` int NULL COMMENT '商户ID',
  `license_status` int NOT NULL COMMENT '证照类型: 1-合同管理，2-食品经营许可证',
  `license_execute_status` int NOT NULL COMMENT '审核状态: 1-审核中, 2-审核拒绝, 3-审核通过',
  `img_url` varchar(500) NOT NULL COMMENT '图片URL',
  `delete_flag` int NOT NULL DEFAULT '0' COMMENT '删除标记, 0:未删除, 1:已删除',
  `created_time` datetime NOT NULL COMMENT '创建时间',
  `created_user_id` int DEFAULT NULL COMMENT '创建人ID',
  `updated_time` datetime DEFAULT NULL COMMENT '修改时间',
  `updated_user_id` int DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
);
```

## 创建的文件清单

### 1. Entity 实体类
- **路径**: `alien-entity/src/main/java/shop/alien/entity/store/StoreLicenseHistory.java`
- **说明**: 商户证照历史记录实体类，使用 MyBatis-Plus 注解映射数据库表

### 2. Mapper 数据访问层
- **路径**: `alien-entity/src/main/java/shop/alien/mapper/StoreLicenseHistoryMapper.java`
- **说明**: 继承 MyBatis-Plus 的 BaseMapper，提供基础 CRUD 操作

### 3. DTO 数据传输对象
- **路径**: `alien-entity/src/main/java/shop/alien/entity/store/dto/StoreLicenseHistoryDTO.java`
- **说明**: 用于接收前端请求参数，包含参数验证注解

### 4. VO 视图对象
- **路径**: `alien-entity/src/main/java/shop/alien/entity/store/vo/StoreLicenseHistoryVO.java`
- **说明**: 用于返回给前端的视图对象，包含额外的显示字段（如商户名称、状态名称等）

### 5. Service 服务接口
- **路径**: `alien-store-platform/src/main/java/shop/alien/storeplatform/service/StoreLicenseHistoryService.java`
- **说明**: 定义业务逻辑接口

### 6. ServiceImpl 服务实现类
- **路径**: `alien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/StoreLicenseHistoryServiceImpl.java`
- **说明**: 实现业务逻辑，包含完整的增删改查功能

### 7. Controller 控制器
- **路径**: `alien-store-platform/src/main/java/shop/alien/storeplatform/controller/StoreLicenseHistoryController.java`
- **说明**: RESTful API 接口控制器，提供 HTTP 访问端点

## API 接口列表

### 1. 创建证照历史记录
- **URL**: `POST /storeLicenseHistory/create`
- **请求体**:
```json
{
  "storeId": 1,
  "licenseStatus": 1,
  "licenseExecuteStatus": 1,
  "imgUrl": "https://example.com/image.jpg"
}
```
- **响应**:
```json
{
  "code": 200,
  "msg": "创建成功",
  "data": {
    "id": 1,
    "storeId": 1,
    "licenseStatus": 1,
    "licenseExecuteStatus": 1,
    "imgUrl": "https://example.com/image.jpg",
    "createdTime": "2025-11-24 10:00:00"
  }
}
```

### 2. 更新证照历史记录
- **URL**: `PUT /storeLicenseHistory/update`
- **请求体**:
```json
{
  "id": 1,
  "storeId": 1,
  "licenseStatus": 1,
  "licenseExecuteStatus": 2,
  "imgUrl": "https://example.com/image.jpg"
}
```

### 3. 删除证照历史记录
- **URL**: `DELETE /storeLicenseHistory/delete?id=1`
- **说明**: 逻辑删除，将 delete_flag 设置为 1

### 4. 根据ID查询证照历史记录
- **URL**: `GET /storeLicenseHistory/getById?id=1`
- **响应**:
```json
{
  "code": 200,
  "data": {
    "id": 1,
    "storeId": 1,
    "storeName": "测试商户",
    "licenseStatus": 1,
    "licenseStatusName": "合同管理",
    "licenseExecuteStatus": 3,
    "licenseExecuteStatusName": "审核通过",
    "imgUrl": "https://example.com/image.jpg",
    "createdTime": "2025-11-24 10:00:00"
  }
}
```

### 5. 根据商户ID查询证照历史记录列表
- **URL**: `GET /storeLicenseHistory/listByStoreId?storeId=1`
- **响应**: 返回该商户的所有证照历史记录列表

### 6. 根据商户ID和证照类型查询
- **URL**: `GET /storeLicenseHistory/listByStoreIdAndType?storeId=1&licenseStatus=1`
- **参数**:
  - `storeId`: 商户ID
  - `licenseStatus`: 证照类型（1-合同管理，2-食品经营许可证）
- **响应**: 返回指定商户和类型的证照历史记录列表

### 7. 分页查询证照历史记录
- **URL**: `GET /storeLicenseHistory/page?current=1&size=10&storeId=1&licenseStatus=1&licenseExecuteStatus=3`
- **参数**:
  - `current`: 当前页（必填，默认 1）
  - `size`: 每页大小（必填，默认 10）
  - `storeId`: 商户ID（可选）
  - `licenseStatus`: 证照类型（可选）
  - `licenseExecuteStatus`: 审核状态（可选）
- **响应**: 返回分页结果

## 枚举值说明

### 证照类型 (licenseStatus)
- `1`: 合同管理
- `2`: 食品经营许可证

### 审核状态 (licenseExecuteStatus)
- `1`: 审核中
- `2`: 审核拒绝
- `3`: 审核通过

## 功能特性

1. **完整的 CRUD 操作**: 支持创建、读取、更新、删除操作
2. **参数验证**: 使用 `@Validated` 和 `@NotNull` 进行参数校验
3. **逻辑删除**: 使用 MyBatis-Plus 的 `@TableLogic` 实现软删除
4. **自动填充**: 创建时间和更新时间自动填充
5. **异常处理**: 完善的异常捕获和错误提示
6. **业务验证**: 
   - 验证商户是否存在
   - 验证证照类型和审核状态的有效性
7. **数据转换**: 
   - DTO 到 Entity 的转换
   - Entity 到 VO 的转换，包含商户名称和状态名称的解析
8. **分页查询**: 支持多条件组合查询和分页
9. **Swagger 文档**: 完整的 API 文档注解

## 使用示例

### Swagger UI 访问
启动 `alien-store-platform` 服务后，访问：
- Swagger UI: `http://localhost:{port}/swagger-ui.html`
- Swagger Bootstrap UI: `http://localhost:{port}/doc.html`

在 "商家端-证照历史管理" 分组下可以看到所有接口。

## 注意事项

1. **数据库字段类型**: 原表结构中 `img_url` 字段类型为 `int`，这应该是错误的。实际代码中已将其定义为 `String` 类型用于存储图片 URL。建议修改数据库字段类型为 `varchar(500)`。

2. **依赖关系**: 
   - 依赖 `StoreInfo` 表用于验证商户是否存在和获取商户名称
   - 需要确保 `StoreInfoMapper` 已正确注入

3. **权限控制**: 当前接口未添加权限验证，如需要请在 Controller 中添加相应注解

4. **事务管理**: 建议在 Service 实现类的方法上添加 `@Transactional` 注解

## 后续扩展建议

1. 添加审核日志记录
2. 添加审核拒绝原因字段
3. 添加证照过期时间字段
4. 实现证照到期提醒功能
5. 添加批量操作接口
6. 添加导出功能

