|
@@ -0,0 +1,398 @@
|
|
|
|
|
+# 店铺入住申请草稿接口文档
|
|
|
|
|
+
|
|
|
|
|
+## 概述
|
|
|
|
|
+
|
|
|
|
|
+本文档描述了从 `alien-store`(app端商户)迁移到 `alien-store-platform`(web端商户)的店铺入住申请草稿相关接口。
|
|
|
|
|
+
|
|
|
|
|
+## 接口列表
|
|
|
|
|
+
|
|
|
|
|
+### 1. 保存店铺入住申请草稿
|
|
|
|
|
+
|
|
|
|
|
+**接口描述**:保存商户填写的店铺入住申请草稿信息,支持随时保存,方便商户分多次填写。
|
|
|
|
|
+
|
|
|
|
|
+#### 原接口
|
|
|
|
|
+- **服务**:alien-store(app端商户)
|
|
|
|
|
+- **路径**:`POST /alienStore/store/info/saveStoreInfoDraft`
|
|
|
|
|
+- **Controller**:`StoreInfoController.saveStoreInfoDraft()`
|
|
|
|
|
+- **Service**:`StoreInfoServiceImpl.saveStoreInfoDraft()`
|
|
|
|
|
+
|
|
|
|
|
+#### 新接口
|
|
|
|
|
+- **服务**:alien-store-platform(web端商户)
|
|
|
|
|
+- **路径**:`POST /alienStorePlatform/storeManage/saveStoreDraft`
|
|
|
|
|
+- **Controller**:`StoreManageController.saveStoreDraft()`
|
|
|
|
|
+- **Service**:`StoreManageServiceImpl.saveStoreDraft()`
|
|
|
|
|
+
|
|
|
|
|
+#### 请求参数
|
|
|
|
|
+
|
|
|
|
|
+**Content-Type**: `application/json`
|
|
|
|
|
+
|
|
|
|
|
+**Body 参数**:`StoreInfoDraft` 对象
|
|
|
|
|
+
|
|
|
|
|
+| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
+|--------|------|------|------|
|
|
|
|
|
+| storeUserId | Integer | 是 | 商家用户ID(store_user 表 id)|
|
|
|
|
|
+| storeName | String | 否 | 门店名称 |
|
|
|
|
|
+| businessStatus | Integer | 否 | 营业状态(见字典表 businessStatus)|
|
|
|
|
|
+| storeTel | String | 否 | 门店电话 |
|
|
|
|
|
+| storeCapacity | Integer | 否 | 容纳人数 |
|
|
|
|
|
+| storeArea | Integer | 否 | 门店面积(见字典表 storeArea)|
|
|
|
|
|
+| storeAddress | String | 否 | 门店地址 |
|
|
|
|
|
+| storeBlurb | String | 否 | 门店简介 |
|
|
|
|
|
+| storeType | String | 否 | 门店类型,多选(见字典表 storeType)|
|
|
|
|
|
+| isChain | Integer | 否 | 是否连锁(0:否, 1:是)|
|
|
|
|
|
+| storePosition | String | 否 | 经度,纬度 |
|
|
|
|
|
+| storePass | String | 否 | 门店密码 |
|
|
|
|
|
+| passType | Integer | 否 | 密码状态(0:初始密码, 1:已修改)|
|
|
|
|
|
+| storeStatus | Integer | 否 | 门店状态(见字典表 storeStatus)|
|
|
|
|
|
+| businessSection | Integer | 否 | 经营板块ID(词典表 business_section)|
|
|
|
|
|
+| businessSectionName | String | 否 | 经营板块名称 |
|
|
|
|
|
+| businessTypes | String | 否 | 经营种类IDs(逗号分隔)|
|
|
|
|
|
+| businessTypesName | String | 否 | 经营种类名称(逗号分隔)|
|
|
|
|
|
+| queryAddress | String | 否 | 查询经纬度时查询地点存储 |
|
|
|
|
|
+| administrativeRegionProvinceName | String | 否 | 行政区域省名称(自动填充)|
|
|
|
|
|
+| administrativeRegionProvinceAdcode | String | 否 | 行政区域省adcode |
|
|
|
|
|
+| administrativeRegionCityName | String | 否 | 行政区域市名称(自动填充)|
|
|
|
|
|
+| administrativeRegionCityAdcode | String | 否 | 行政区域市adcode |
|
|
|
|
|
+| administrativeRegionDistrictName | String | 否 | 行政区域区名称(自动填充)|
|
|
|
|
|
+| administrativeRegionDistrictAdcode | String | 否 | 行政区域区adcode |
|
|
|
|
|
+| businessLicenseUrl | String | 否 | 营业执照地址(JSON字符串)|
|
|
|
|
|
+| contractUrl | String | 否 | 合同地址(JSON字符串)|
|
|
|
|
|
+| foodLicenceUrl | String | 否 | 经营许可证地址(JSON字符串)|
|
|
|
|
|
+
|
|
|
|
|
+**请求示例**:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "storeUserId": 123,
|
|
|
|
|
+ "storeName": "张三的餐厅",
|
|
|
|
|
+ "storeTel": "0371-12345678",
|
|
|
|
|
+ "storeAddress": "河南省郑州市金水区某某路123号",
|
|
|
|
|
+ "administrativeRegionProvinceAdcode": "410000",
|
|
|
|
|
+ "administrativeRegionCityAdcode": "410100",
|
|
|
|
|
+ "administrativeRegionDistrictAdcode": "410105",
|
|
|
|
|
+ "businessSection": 1,
|
|
|
|
|
+ "businessTypes": "1,2,3",
|
|
|
|
|
+ "storePosition": "113.625368,34.746599",
|
|
|
|
|
+ "businessLicenseUrl": "[\"https://example.com/license1.jpg\"]"
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 响应参数
|
|
|
|
|
+
|
|
|
|
|
+**成功响应**:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "code": 200,
|
|
|
|
|
+ "msg": "草稿保存成功",
|
|
|
|
|
+ "data": true,
|
|
|
|
|
+ "success": true
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**失败响应**:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "code": 500,
|
|
|
|
|
+ "msg": "草稿保存失败",
|
|
|
|
|
+ "data": null,
|
|
|
|
|
+ "success": false
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 业务逻辑
|
|
|
|
|
+
|
|
|
|
|
+1. **行政区域处理**:
|
|
|
|
|
+ - 根据省/市/区的 adcode 自动查询并填充对应的名称
|
|
|
|
|
+ - 使用 `EssentialCityCodeMapper` 从 `essential_city_code` 表查询
|
|
|
|
|
+
|
|
|
|
|
+2. **空字段处理**:
|
|
|
|
|
+ - 对于 `businessLicenseUrl`、`contractUrl`、`foodLicenceUrl`
|
|
|
|
|
+ - 如果为空字符串,则设置为 `null`
|
|
|
|
|
+
|
|
|
|
|
+3. **数据插入**:
|
|
|
|
|
+ - 使用 `StoreInfoDraftMapper` 插入草稿数据
|
|
|
|
|
+ - MyBatis-Plus 自动填充 `createdTime`、`updatedTime` 等字段
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 2. 查询店铺入住申请草稿
|
|
|
|
|
+
|
|
|
|
|
+**接口描述**:查询指定商户用户最新保存的店铺入住申请草稿。
|
|
|
|
|
+
|
|
|
|
|
+#### 原接口
|
|
|
|
|
+- **服务**:alien-store(app端商户)
|
|
|
|
|
+- **路径**:`GET /alienStore/store/info/selectDraftByUserId`
|
|
|
|
|
+- **Controller**:`StoreInfoController.selectDraftByUserId()`
|
|
|
|
|
+- **Service**:`StoreInfoServiceImpl.selectDraftByUserId()`
|
|
|
|
|
+
|
|
|
|
|
+#### 新接口
|
|
|
|
|
+- **服务**:alien-store-platform(web端商户)
|
|
|
|
|
+- **路径**:`GET /alienStorePlatform/storeManage/getStoreDraft`
|
|
|
|
|
+- **Controller**:`StoreManageController.getStoreDraft()`
|
|
|
|
|
+- **Service**:`StoreManageServiceImpl.getStoreDraft()`
|
|
|
|
|
+
|
|
|
|
|
+#### 请求参数
|
|
|
|
|
+
|
|
|
|
|
+**Query 参数**:
|
|
|
|
|
+
|
|
|
|
|
+| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
+|--------|------|------|------|
|
|
|
|
|
+| storeUserId | int | 是 | 商户用户ID |
|
|
|
|
|
+
|
|
|
|
|
+**请求示例**:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+GET /alienStorePlatform/storeManage/getStoreDraft?storeUserId=123
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 响应参数
|
|
|
|
|
+
|
|
|
|
|
+**成功响应(有草稿)**:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "code": 200,
|
|
|
|
|
+ "msg": "success",
|
|
|
|
|
+ "data": {
|
|
|
|
|
+ "id": 1,
|
|
|
|
|
+ "storeUserId": 123,
|
|
|
|
|
+ "storeName": "张三的餐厅",
|
|
|
|
|
+ "storeTel": "0371-12345678",
|
|
|
|
|
+ "storeAddress": "河南省郑州市金水区某某路123号",
|
|
|
|
|
+ "administrativeRegionProvinceName": "河南省",
|
|
|
|
|
+ "administrativeRegionProvinceAdcode": "410000",
|
|
|
|
|
+ "administrativeRegionCityName": "郑州市",
|
|
|
|
|
+ "administrativeRegionCityAdcode": "410100",
|
|
|
|
|
+ "administrativeRegionDistrictName": "金水区",
|
|
|
|
|
+ "administrativeRegionDistrictAdcode": "410105",
|
|
|
|
|
+ "businessSection": 1,
|
|
|
|
|
+ "businessSectionName": "餐饮",
|
|
|
|
|
+ "businessTypes": "1,2,3",
|
|
|
|
|
+ "businessTypesName": "中餐,西餐,快餐",
|
|
|
|
|
+ "storePosition": "113.625368,34.746599",
|
|
|
|
|
+ "businessLicenseUrl": "[\"https://example.com/license1.jpg\"]",
|
|
|
|
|
+ "createdTime": "2025-01-15 10:30:00",
|
|
|
|
|
+ "updatedTime": "2025-01-15 14:20:00"
|
|
|
|
|
+ },
|
|
|
|
|
+ "success": true
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**成功响应(无草稿)**:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "code": 200,
|
|
|
|
|
+ "msg": "success",
|
|
|
|
|
+ "data": null,
|
|
|
|
|
+ "success": true
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**失败响应**:
|
|
|
|
|
+
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "code": 500,
|
|
|
|
|
+ "msg": "查询失败: {错误信息}",
|
|
|
|
|
+ "data": null,
|
|
|
|
|
+ "success": false
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 业务逻辑
|
|
|
|
|
+
|
|
|
|
|
+1. **查询条件**:
|
|
|
|
|
+ - 根据 `storeUserId` 查询草稿记录
|
|
|
|
|
+ - 按 `createdTime` 降序排序
|
|
|
|
|
+ - 返回最新的一条记录
|
|
|
|
|
+
|
|
|
|
|
+2. **数据返回**:
|
|
|
|
|
+ - 如果没有草稿记录,返回 `null`
|
|
|
|
|
+ - 如果有多条记录,返回最新的一条
|
|
|
|
|
+
|
|
|
|
|
+3. **软删除处理**:
|
|
|
|
|
+ - MyBatis-Plus 自动过滤 `deleteFlag=1` 的记录
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 数据库表结构
|
|
|
|
|
+
|
|
|
|
|
+### store_info_draft(门店草稿表)
|
|
|
|
|
+
|
|
|
|
|
+| 字段名 | 类型 | 说明 |
|
|
|
|
|
+|--------|------|------|
|
|
|
|
|
+| id | INT | 主键,自增 |
|
|
|
|
|
+| store_user_id | INT | 商家用户ID(store_user 表 id)|
|
|
|
|
|
+| store_name | VARCHAR(100) | 门店名称 |
|
|
|
|
|
+| business_status | INT | 营业状态 |
|
|
|
|
|
+| store_tel | VARCHAR(20) | 门店电话 |
|
|
|
|
|
+| store_capacity | INT | 容纳人数 |
|
|
|
|
|
+| store_area | INT | 门店面积 |
|
|
|
|
|
+| store_address | VARCHAR(255) | 门店地址 |
|
|
|
|
|
+| store_blurb | TEXT | 门店简介 |
|
|
|
|
|
+| store_type | VARCHAR(50) | 门店类型 |
|
|
|
|
|
+| is_chain | INT | 是否连锁 |
|
|
|
|
|
+| expiration_time | DATETIME | 到期时间 |
|
|
|
|
|
+| store_position | VARCHAR(50) | 经度,纬度 |
|
|
|
|
|
+| store_pass | VARCHAR(50) | 门店密码 |
|
|
|
|
|
+| pass_type | INT | 密码状态 |
|
|
|
|
|
+| store_status | INT | 门店状态 |
|
|
|
|
|
+| business_section | INT | 经营板块ID |
|
|
|
|
|
+| business_section_name | VARCHAR(50) | 经营板块名称 |
|
|
|
|
|
+| business_types | VARCHAR(255) | 经营种类IDs |
|
|
|
|
|
+| business_types_name | VARCHAR(255) | 经营种类名称 |
|
|
|
|
|
+| store_application_status | INT | 店铺申请审核状态 |
|
|
|
|
|
+| query_address | VARCHAR(255) | 查询经纬度时查询地点 |
|
|
|
|
|
+| administrative_region_province_name | VARCHAR(50) | 行政区域省名称 |
|
|
|
|
|
+| administrative_region_province_adcode | VARCHAR(20) | 行政区域省adcode |
|
|
|
|
|
+| administrative_region_city_name | VARCHAR(50) | 行政区域市名称 |
|
|
|
|
|
+| administrative_region_city_adcode | VARCHAR(20) | 行政区域市adcode |
|
|
|
|
|
+| administrative_region_district_name | VARCHAR(50) | 行政区域区名称 |
|
|
|
|
|
+| administrative_region_district_adcode | VARCHAR(20) | 行政区域区adcode |
|
|
|
|
|
+| logout_flag | INT | 注销账号(0:正常,1:已注销)|
|
|
|
|
|
+| logout_reason | VARCHAR(255) | 注销原因 |
|
|
|
|
|
+| logout_time | DATETIME | 注销时间 |
|
|
|
|
|
+| business_license_url | TEXT | 营业执照地址(JSON)|
|
|
|
|
|
+| contract_url | TEXT | 合同地址(JSON)|
|
|
|
|
|
+| food_licence_url | TEXT | 经营许可证地址(JSON)|
|
|
|
|
|
+| delete_flag | INT | 删除标记(0:未删除, 1:已删除)|
|
|
|
|
|
+| created_time | DATETIME | 创建时间 |
|
|
|
|
|
+| created_user_id | INT | 创建人ID |
|
|
|
|
|
+| updated_time | DATETIME | 修改时间 |
|
|
|
|
|
+| updated_user_id | INT | 修改人ID |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 相关文件
|
|
|
|
|
+
|
|
|
|
|
+### Controller 层
|
|
|
|
|
+- `alien-store-platform/src/main/java/shop/alien/storeplatform/controller/StoreManageController.java`
|
|
|
|
|
+
|
|
|
|
|
+### Service 层
|
|
|
|
|
+- `alien-store-platform/src/main/java/shop/alien/storeplatform/service/StoreManageService.java`
|
|
|
|
|
+- `alien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/StoreManageServiceImpl.java`
|
|
|
|
|
+
|
|
|
|
|
+### Entity 层
|
|
|
|
|
+- `alien-entity/src/main/java/shop/alien/entity/store/StoreInfoDraft.java`
|
|
|
|
|
+- `alien-entity/src/main/java/shop/alien/mapper/StoreInfoDraftMapper.java`
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 测试建议
|
|
|
|
|
+
|
|
|
|
|
+### 1. 保存草稿接口测试
|
|
|
|
|
+
|
|
|
|
|
+**测试用例 1:完整信息保存**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -X POST http://localhost:8080/alienStorePlatform/storeManage/saveStoreDraft \
|
|
|
|
|
+ -H "Content-Type: application/json" \
|
|
|
|
|
+ -d '{
|
|
|
|
|
+ "storeUserId": 123,
|
|
|
|
|
+ "storeName": "测试餐厅",
|
|
|
|
|
+ "storeTel": "0371-12345678",
|
|
|
|
|
+ "storeAddress": "河南省郑州市金水区测试路123号",
|
|
|
|
|
+ "administrativeRegionProvinceAdcode": "410000",
|
|
|
|
|
+ "administrativeRegionCityAdcode": "410100",
|
|
|
|
|
+ "administrativeRegionDistrictAdcode": "410105",
|
|
|
|
|
+ "businessSection": 1,
|
|
|
|
|
+ "businessTypes": "1,2",
|
|
|
|
|
+ "storePosition": "113.625368,34.746599"
|
|
|
|
|
+ }'
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**测试用例 2:部分信息保存(草稿功能)**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -X POST http://localhost:8080/alienStorePlatform/storeManage/saveStoreDraft \
|
|
|
|
|
+ -H "Content-Type: application/json" \
|
|
|
|
|
+ -d '{
|
|
|
|
|
+ "storeUserId": 123,
|
|
|
|
|
+ "storeName": "测试餐厅"
|
|
|
|
|
+ }'
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**测试用例 3:空字段处理**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -X POST http://localhost:8080/alienStorePlatform/storeManage/saveStoreDraft \
|
|
|
|
|
+ -H "Content-Type: application/json" \
|
|
|
|
|
+ -d '{
|
|
|
|
|
+ "storeUserId": 123,
|
|
|
|
|
+ "storeName": "测试餐厅",
|
|
|
|
|
+ "businessLicenseUrl": "",
|
|
|
|
|
+ "contractUrl": "",
|
|
|
|
|
+ "foodLicenceUrl": ""
|
|
|
|
|
+ }'
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 2. 查询草稿接口测试
|
|
|
|
|
+
|
|
|
|
|
+**测试用例 1:查询存在的草稿**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -X GET http://localhost:8080/alienStorePlatform/storeManage/getStoreDraft?storeUserId=123
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**测试用例 2:查询不存在的草稿**
|
|
|
|
|
+```bash
|
|
|
|
|
+curl -X GET http://localhost:8080/alienStorePlatform/storeManage/getStoreDraft?storeUserId=999999
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 3. 业务流程测试
|
|
|
|
|
+
|
|
|
|
|
+**场景 1:分步填写**
|
|
|
|
|
+1. 第一次保存:仅填写基本信息(storeName, storeTel)
|
|
|
|
|
+2. 第二次保存:补充地址信息(storeAddress, 行政区域)
|
|
|
|
|
+3. 第三次保存:补充经营信息(businessSection, businessTypes)
|
|
|
|
|
+4. 查询草稿:验证最新记录包含所有信息
|
|
|
|
|
+
|
|
|
|
|
+**场景 2:多次保存覆盖**
|
|
|
|
|
+1. 保存草稿 A(基本信息)
|
|
|
|
|
+2. 保存草稿 B(完整信息)
|
|
|
|
|
+3. 查询草稿:验证返回最新的草稿 B
|
|
|
|
|
+
|
|
|
|
|
+**场景 3:行政区域自动填充**
|
|
|
|
|
+1. 保存草稿时提供 adcode
|
|
|
|
|
+2. 查询草稿
|
|
|
|
|
+3. 验证省/市/区名称已自动填充
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 注意事项
|
|
|
|
|
+
|
|
|
|
|
+### 1. 字段处理
|
|
|
|
|
+- ⚠️ 行政区域名称会根据 adcode 自动查询填充
|
|
|
|
|
+- ⚠️ 空字符串的图片URL字段会被设置为 `null`
|
|
|
|
|
+- ⚠️ 草稿数据不会进行完整性校验,允许部分字段为空
|
|
|
|
|
+
|
|
|
|
|
+### 2. 数据查询
|
|
|
|
|
+- ⚠️ 查询草稿时按创建时间降序,返回最新的一条
|
|
|
|
|
+- ⚠️ 软删除的草稿记录会被自动过滤
|
|
|
|
|
+- ⚠️ 如果没有草稿记录,返回 `null` 而不是报错
|
|
|
|
|
+
|
|
|
|
|
+### 3. 业务场景
|
|
|
|
|
+- ⚠️ 草稿可以多次保存,每次保存都会创建新记录
|
|
|
|
|
+- ⚠️ 查询时只返回最新的草稿记录
|
|
|
|
|
+- ⚠️ 草稿数据不会影响正式的店铺入住申请
|
|
|
|
|
+
|
|
|
|
|
+### 4. 与正式申请的关系
|
|
|
|
|
+- 草稿保存:`saveStoreDraft` - 保存未完成的申请信息
|
|
|
|
|
+- 正式申请:`applyStore` - 提交完整的入住申请并进入审核流程
|
|
|
|
|
+- 两者使用不同的表:`store_info_draft` vs `store_info`
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 版本记录
|
|
|
|
|
+
|
|
|
|
|
+| 版本 | 日期 | 说明 | 作者 |
|
|
|
|
|
+|------|------|------|------|
|
|
|
|
|
+| 1.0.0 | 2025-01-xx | 初始版本,迁移草稿功能 | ssk |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 联系方式
|
|
|
|
|
+
|
|
|
|
|
+如有问题,请联系:
|
|
|
|
|
+- 开发团队:Alien Cloud Team
|
|
|
|
|
+- 邮箱:dev@alien.shop
|
|
|
|
|
+
|