# Web端基础数据查询接口开发文档

## 一、接口概述

本次开发在 `alien-store-platform` 服务中新增了基础数据查询接口，将原 `alien-store` 服务中分散在不同 Controller 的基础数据查询接口统一整合到一个 `BaseDataController` 中，方便 web 端商户平台统一管理和调用。

## 二、接口列表

### 2.1 根据关键词获取地址提示

**接口路径：** `GET /baseData/getAddressPrompt`

**接口说明：** 根据输入的地址关键词，返回高德地图的地址提示列表，支持按城市过滤

**原接口路径：** `/alienStore/gaode/getInputPrompt`

**请求参数：**

| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| addressName | String | 是 | 地址关键词 | "中关村" |
| city | String | 否 | 城市名称 | "北京市" |

**请求示例：**
```http
GET /baseData/getAddressPrompt?addressName=中关村&city=北京市
```

**响应示例：**
```json
{
  "code": 200,
  "success": true,
  "msg": "操作成功",
  "data": {
    "status": "1",
    "info": "OK",
    "infocode": "10000",
    "count": "10",
    "tips": [
      {
        "id": "B000A8XZL4",
        "name": "中关村",
        "district": "北京市海淀区",
        "adcode": "110108",
        "location": "116.313676,39.982718",
        "address": "中关村大街",
        "typecode": "190301"
      }
    ]
  }
}
```

---

### 2.2 获取行政区划数据

**接口路径：** `GET /baseData/getDistrict`

**接口说明：** 根据行政区划代码获取省市区数据，支持级联查询

**原接口路径：** `/alienStore/gaode/getDistrict`

**请求参数：**

| 参数名 | 类型 | 必填 | 说明 | 默认值 | 示例 |
|--------|------|------|------|--------|------|
| adCode | String | 否 | 行政区划代码 | 100000 | "100000" |

**行政区划代码说明：**
- `100000`：中国（返回所有省级数据）
- `410000`：河南省（返回河南省所有市级数据）
- `410300`：洛阳市（返回洛阳市所有区县数据）

**请求示例：**
```http
# 查询所有省份
GET /baseData/getDistrict?adCode=100000

# 查询河南省所有城市
GET /baseData/getDistrict?adCode=410000

# 查询洛阳市所有区县
GET /baseData/getDistrict?adCode=410300
```

**响应示例：**
```json
{
  "code": 200,
  "success": true,
  "msg": "操作成功",
  "data": {
    "status": "1",
    "info": "OK",
    "infocode": "10000",
    "districts": [
      {
        "citycode": [],
        "adcode": "100000",
        "name": "中华人民共和国",
        "center": "116.3683244,39.915085",
        "level": "country",
        "districts": [
          {
            "citycode": "010",
            "adcode": "110000",
            "name": "北京市",
            "center": "116.405285,39.904989",
            "level": "province"
          }
        ]
      }
    ]
  }
}
```

---

### 2.3 获取经营板块基础数据

**接口路径：** `GET /baseData/getBusinessSection`

**接口说明：** 获取所有经营板块数据，用于商户选择经营类型

**原接口路径：** `/alienStore/store/info/getBusinessSection`

**请求参数：** 无

**请求示例：**
```http
GET /baseData/getBusinessSection
```

**响应示例：**
```json
{
  "code": 200,
  "success": true,
  "msg": "操作成功",
  "data": [
    {
      "id": 1,
      "typeName": "business_section",
      "dictId": "1",
      "dictDetail": "餐饮美食",
      "parentId": 0
    },
    {
      "id": 2,
      "typeName": "business_section",
      "dictId": "2",
      "dictDetail": "休闲娱乐",
      "parentId": 0
    },
    {
      "id": 3,
      "typeName": "business_section",
      "dictId": "3",
      "dictDetail": "生活服务",
      "parentId": 0
    }
  ]
}
```

---

### 2.4 获取经营种类基础数据

**接口路径：** `GET /baseData/getBusinessTypes`

**接口说明：** 根据经营板块ID获取该板块下的所有经营种类

**原接口路径：** `/alienStore/store/info/getBusinessSectionTypes`

**请求参数：**

| 参数名 | 类型 | 必填 | 说明 | 示例 |
|--------|------|------|------|------|
| parentId | String | 是 | 经营板块ID（dictId） | "1" |

**请求示例：**
```http
GET /baseData/getBusinessTypes?parentId=1
```

**响应示例：**
```json
{
  "code": 200,
  "success": true,
  "msg": "操作成功",
  "data": [
    {
      "id": 101,
      "typeName": "business_section",
      "dictId": "101",
      "dictDetail": "中餐",
      "parentId": 1
    },
    {
      "id": 102,
      "typeName": "business_section",
      "dictId": "102",
      "dictDetail": "西餐",
      "parentId": 1
    },
    {
      "id": 103,
      "typeName": "business_section",
      "dictId": "103",
      "dictDetail": "火锅",
      "parentId": 1
    },
    {
      "id": 104,
      "typeName": "business_section",
      "dictId": "104",
      "dictDetail": "烧烤",
      "parentId": 1
    }
  ]
}
```

---

## 三、业务流程说明

### 3.1 地址搜索流程

```
用户输入地址关键词
    ↓
调用 /baseData/getAddressPrompt 接口
    ↓
系统查询城市编码（如果指定城市）
    ↓
调用高德地图输入提示接口
    ↓
返回地址提示列表
```

### 3.2 行政区划级联查询流程

```
1. 查询所有省份
   GET /baseData/getDistrict?adCode=100000
   
2. 用户选择省份（例如：河南省，adCode=410000）
   GET /baseData/getDistrict?adCode=410000
   
3. 用户选择城市（例如：洛阳市，adCode=410300）
   GET /baseData/getDistrict?adCode=410300
   
4. 用户选择区县完成
```

### 3.3 经营板块和种类选择流程

```
1. 获取所有经营板块
   GET /baseData/getBusinessSection
   
2. 用户选择经营板块（例如：餐饮美食，dictId=1）
   GET /baseData/getBusinessTypes?parentId=1
   
3. 用户选择经营种类完成
```

---

## 四、Nacos 配置要求

在 Nacos 配置中心的 `alien-store-platform.yml` 配置文件中，需要添加以下高德地图相关配置：

```yaml
# 高德地图配置
gaode:
  # 高德地图API Key
  key: your_gaode_api_key_here
  
  # 地理编码URL（地址转经纬度）
  geoUrl: https://restapi.amap.com/v3/geocode/geo?address=%s&key=%s
  
  # 输入提示URL
  geoListUrl: https://restapi.amap.com/v3/assistant/inputtips?keywords=%s&key=%s&city=%s
  
  # 行政区划URL
  getDistrict: https://restapi.amap.com/v3/config/district?key=%s&keywords=%s&subdistrict=1
  
  # 距离计算URL
  distanceUrl: https://restapi.amap.com/v3/direction/driving?origin=%s,%s&destination=%s,%s&key=%s
  
  # 直线距离URL
  distanceTypeUrl: https://restapi.amap.com/v3/direction/driving?origin=%s,%s&destination=%s,%s&key=%s&strategy=%s
  
  # 周边搜索URL
  nearUrl: https://restapi.amap.com/v3/place/around?location=%s,%s&key=%s&radius=%s&offset=%s&page=%s
  
  # 地铁站查询URL
  subwayUrl: https://restapi.amap.com/v3/place/text?key=%s&location=%s,%s&keywords=%s&radius=%s&types=%s
  
  # 逆地理编码URL（经纬度转地址）
  addressUrl: https://restapi.amap.com/v3/geocode/regeo?location=%s,%s&key=%s&radius=%s&extensions=%s
```

**注意事项：**
- 需要在高德地图开放平台申请 API Key
- 配置值可以从 `alien-store` 服务的 Nacos 配置中获取
- 确保 API Key 有足够的调用额度

---

## 五、数据库依赖

### 5.1 essential_city_code 表

存储城市编码信息，用于地址搜索时的城市过滤。

**表结构：**
```sql
CREATE TABLE `essential_city_code` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `area_code` varchar(20) DEFAULT NULL COMMENT '行政区划代码',
  `area_name` varchar(100) DEFAULT NULL COMMENT '区域名称',
  `city_code` varchar(20) DEFAULT NULL COMMENT '城市编码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

### 5.2 store_dictionary 表

存储经营板块和经营种类的字典数据。

**表结构：**
```sql
CREATE TABLE `store_dictionary` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type_name` varchar(50) DEFAULT NULL COMMENT '字典类型名称',
  `dict_id` varchar(20) DEFAULT NULL COMMENT '字典ID',
  `dict_detail` varchar(200) DEFAULT NULL COMMENT '字典详情',
  `parent_id` int(11) DEFAULT NULL COMMENT '父节点ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

**数据说明：**
- `type_name = 'business_section'` 表示经营板块/经营种类
- `dict_id = '0'` 表示根节点（不显示）
- `dict_id != '0' AND parent_id = 根节点ID` 表示经营板块
- `parent_id = 经营板块ID` 表示经营种类

---

## 六、代码结构

### 6.1 新增文件列表

```
alien-store-platform/
├── src/main/java/shop/alien/storeplatform/
│   ├── controller/
│   │   └── BaseDataController.java               # 基础数据查询控制器
│   ├── service/
│   │   ├── BaseDataService.java                  # 基础数据服务接口
│   │   └── impl/
│   │       └── BaseDataServiceImpl.java          # 基础数据服务实现
│   └── util/
│       └── GaoDeMapApiUtil.java                  # 高德地图API工具类
```

### 6.2 核心类说明

**1. BaseDataController**
- 提供4个基础数据查询接口
- 统一的接口路径前缀 `/baseData`
- 完整的 Swagger API 文档

**2. BaseDataService & BaseDataServiceImpl**
- 实现基础数据查询业务逻辑
- 调用高德地图API和数据库查询
- 数据格式转换和封装

**3. GaoDeMapApiUtil**
- 封装高德地图API调用
- 支持地址提示和行政区划查询
- HTTP请求处理和JSON解析

---

## 七、接口对比表

| 功能 | 原接口（alien-store） | 新接口（alien-store-platform） |
|------|----------------------|-------------------------------|
| 地址提示 | `/gaode/getInputPrompt` | `/baseData/getAddressPrompt` |
| 行政区划 | `/gaode/getDistrict` | `/baseData/getDistrict` |
| 经营板块 | `/store/info/getBusinessSection` | `/baseData/getBusinessSection` |
| 经营种类 | `/store/info/getBusinessSectionTypes` | `/baseData/getBusinessTypes` |

---

## 八、测试用例

### 8.1 地址提示测试

```bash
# 测试1：不指定城市
curl -X GET "http://localhost:8080/baseData/getAddressPrompt?addressName=中关村"

# 测试2：指定城市
curl -X GET "http://localhost:8080/baseData/getAddressPrompt?addressName=中关村&city=北京市"
```

### 8.2 行政区划测试

```bash
# 测试1：查询所有省份
curl -X GET "http://localhost:8080/baseData/getDistrict?adCode=100000"

# 测试2：查询河南省所有城市
curl -X GET "http://localhost:8080/baseData/getDistrict?adCode=410000"

# 测试3：查询洛阳市所有区县
curl -X GET "http://localhost:8080/baseData/getDistrict?adCode=410300"
```

### 8.3 经营数据测试

```bash
# 测试1：查询所有经营板块
curl -X GET "http://localhost:8080/baseData/getBusinessSection"

# 测试2：查询板块ID为1的所有经营种类
curl -X GET "http://localhost:8080/baseData/getBusinessTypes?parentId=1"
```

---

## 九、技术亮点

1. **接口统一管理**：将分散的基础数据查询接口统一到一个 Controller 中
2. **命名规范化**：采用更符合 web 端语义的接口路径命名
3. **代码复用**：复用原有业务逻辑，保证数据一致性
4. **服务解耦**：独立的工具类实现，不依赖 alien-store 服务
5. **文档完整**：提供详细的接口文档和使用说明

---

## 十、部署检查清单

- [ ] 确认 Nacos 配置中已添加高德地图相关配置
- [ ] 确认高德地图 API Key 有效且有调用额度
- [ ] 确认数据库中 `essential_city_code` 表数据完整
- [ ] 确认数据库中 `store_dictionary` 表数据完整
- [ ] 确认 alien-entity 模块版本一致
- [ ] 确认接口权限配置正确

---

## 十一、常见问题

### Q1: 高德地图API返回为空怎么办？
A: 检查以下几点：
1. API Key 是否有效
2. 网络连接是否正常
3. 调用次数是否超限
4. 请求参数是否正确

### Q2: 行政区划数据查询不准确？
A: 确保 adCode 参数正确，可以参考高德地图的行政区划代码表

### Q3: 经营种类查询为空？
A: 检查 parentId 是否正确，确认数据库中该板块下是否有经营种类数据

---

**开发完成时间：** 2025-01-xx  
**开发人员：** AI Assistant  
**版本号：** v1.0.0

