# 店铺入住申请草稿接口文档 ## 概述 本文档描述了从 `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