# 会员营销模块 — 后台管理接口文档

> **模块**：business-marketing  
> **前缀**：`${jeesharp.web.adminPath}`（默认 `/api`）  
> **完整路径示例**：`/api/marketing/memberTenant/v1/list`  
> **更新日期**：2026-06-25  
> **版本**：P0

---

## 一、接口规范

### 1.1 请求头

```
Content-Type: application/json;charset=UTF-8
Authorization: Bearer {token}
```

### 1.2 响应格式

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": { },
  "requestId": "uuid-xxx"
}
```

### 1.3 租户说明

- 店铺管理员登录后，**DataScope 自动限定当前 `tenant_id`**，无需传店铺 ID。
- 平台运营可跨租户（角色权限控制）。
- 列表含 `member_id` 时，响应须含 **会员编号、会员姓名/昵称、会员手机**（`MemberService.enrichMemberDisplay`）。

---

## 二、店铺会员 `memberTenant`

**Controller**：`MemberTenantController`  
**基础路径**：`/marketing/memberTenant/v1`

### 2.1 分页列表

- **URL**：`POST /list`
- **权限**：`marketing:memberTenant:list`

**请求体**：

| 字段 | 类型 | 说明 |
|------|------|------|
| pageNo | Long | 页码 |
| pageSize | Long | 每页条数 |
| memberKeyword | String | 会员关键词（编号/昵称/姓名/手机/主键） |
| bindStatus | Integer | 0未绑定 1已绑定 2已解绑 |
| joinSource | String | QR_SCAN / ADMIN / IMPORT / MINI_APPLY |
| channelCode | String | 渠道 |
| joinDateStart | LocalDateTime | 入会开始 |
| joinDateEnd | LocalDateTime | 入会结束 |

**列表字段**：

| 字段 | 说明 |
|------|------|
| id | 关系主键 |
| memberId | 会员ID |
| memberNo | 会员编号（补全） |
| memberNickname | 会员姓名/昵称（补全） |
| memberMobile | 会员手机（补全） |
| tenantId / tenantCode | 店铺租户 |
| bindStatus / bindStatusName | 绑定状态 |
| joinSource / joinSourceName | 入会来源 |
| channelCode | 渠道 |
| joinDate | 入会时间 |

### 2.2 详情

- **URL**：`GET /info?id={id}`
- **权限**：`marketing:memberTenant:info`

### 2.3 导出

- **URL**：`POST /export`
- **权限**：`marketing:memberTenant:export`

---

## 三、店铺营销配置 `tenantExt`

**基础路径**：`/marketing/tenantExt/v1`

### 3.1 详情（当前租户）

- **URL**：`GET /info`
- **权限**：`marketing:tenantExt:info`
- **说明**：无 id 参数，读当前登录租户配置；无记录时返回默认结构。

### 3.2 更新

- **URL**：`POST /update`
- **权限**：`marketing:tenantExt:update`

**请求体**：

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| id | String | 编辑必填 | 新增为空 |
| marketingEnabled | Integer | ✅ | 0否 1是 |
| autoJoinOnQr | Integer | ✅ | 0需审核 1扫码免审直绑 |
| welcomeTitle | String | | 落地页标题 |
| welcomeSubtitle | String | | 落地页副标题 |
| logoUrl | String | | Logo |

---

## 四、推广二维码 `tenantQrcode`

**基础路径**：`/marketing/tenantQrcode/v1`

### 4.1 分页列表

- **URL**：`POST /list`
- **权限**：`marketing:tenantQrcode:list`

### 4.2 生成/刷新

- **URL**：`POST /create`
- **权限**：`marketing:tenantQrcode:create`

**请求体**：

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| channelCode | String | ✅ | 渠道编码，同租户唯一 |
| channelName | String | | 渠道名称 |
| pagePath | String | | 小程序路径，默认营销落地页 |

**响应 data**：`id`、`wxScene`、`qrcodeUrl`、`channelCode`

### 4.3 删除

- **URL**：`GET /delete?ids={id1,id2}`
- **权限**：`marketing:tenantQrcode:delete`

---

## 五、核销记录 `couponVerifyLog`

**基础路径**：`/marketing/couponVerifyLog/v1`

### 5.1 分页列表

- **URL**：`POST /list`
- **权限**：`marketing:couponVerifyLog:list`

**请求体**：

| 字段 | 类型 | 说明 |
|------|------|------|
| pageNo / pageSize | Long | 分页 |
| memberKeyword | String | 会员关键词 |
| memberCouponId | String | 会员券ID |
| verifyTimeStart / verifyTimeEnd | LocalDateTime | 核销时间 |
| verifyType | String | OFFLINE_SCAN |

**列表字段**：含 `memberNo`、`memberNickname`、`memberMobile`（补全）、券名、核销时间、操作人、渠道等。

### 5.2 详情

- **URL**：`GET /info?id={id}`
- **权限**：`marketing:couponVerifyLog:info`

### 5.3 导出

- **URL**：`POST /export`
- **权限**：`marketing:couponVerifyLog:export`

---

## 六、数据统计 `stats`

**基础路径**：`/marketing/stats/v1`

### 6.1 概览

- **URL**：`POST /overview`
- **权限**：`marketing:stats:overview`

**请求体**：

| 字段 | 类型 | 说明 |
|------|------|------|
| dateStart | LocalDate | 统计开始（默认近30天） |
| dateEnd | LocalDate | 统计结束 |
| channelCode | String | 可选，按渠道 |

**响应 data**：

| 字段 | 说明 |
|------|------|
| joinCount | 入会人数（期内新增绑定） |
| receiveCount | 领券数 |
| verifyCount | 核销量 |
| verifyRate | 核销率 receiveCount>0 时 |
| channelStats | 渠道维度数组 |
| dailyTrend | 日趋势 [{date, join, receive, verify}] |

---

## 七、优惠券模板（复用 coupon 模块）

店铺券在 **当前租户 DataScope** 下使用现有券模板接口：

- **基础路径**：`/coupon/couponTemplate/v1`
- **创建店铺券**：`scene_code = STORE_OFFLINE`，模板 `tenant_id` 由 DataScope 自动写入
- **权限**：`coupon:couponTemplate:*`

---

## 八、权限标识汇总

| 权限标识 | 说明 |
|----------|------|
| `marketing:memberTenant:list` | 店铺会员列表 |
| `marketing:memberTenant:info` | 店铺会员详情 |
| `marketing:memberTenant:export` | 店铺会员导出 |
| `marketing:tenantExt:info` | 营销配置详情 |
| `marketing:tenantExt:update` | 营销配置更新 |
| `marketing:tenantQrcode:list` | 推广码列表 |
| `marketing:tenantQrcode:create` | 生成推广码 |
| `marketing:tenantQrcode:delete` | 删除推广码 |
| `marketing:couponVerifyLog:list` | 核销记录列表 |
| `marketing:couponVerifyLog:info` | 核销记录详情 |
| `marketing:couponVerifyLog:export` | 核销记录导出 |
| `marketing:stats:overview` | 统计概览 |
| `coupon:couponTemplate:*` | 店铺券模板（coupon 模块） |

---

## 九、接口地址速查表

| 操作 | 方法 | URL |
|------|------|-----|
| 店铺会员列表 | POST | `/marketing/memberTenant/v1/list` |
| 店铺会员详情 | GET | `/marketing/memberTenant/v1/info` |
| 营销配置详情 | GET | `/marketing/tenantExt/v1/info` |
| 营销配置更新 | POST | `/marketing/tenantExt/v1/update` |
| 推广码列表 | POST | `/marketing/tenantQrcode/v1/list` |
| 生成推广码 | POST | `/marketing/tenantQrcode/v1/create` |
| 核销记录列表 | POST | `/marketing/couponVerifyLog/v1/list` |
| 统计概览 | POST | `/marketing/stats/v1/overview` |

---

## 十、枚举值速查

### bindStatus（绑定状态）

| 值 | 说明 |
|----|------|
| 0 | 未绑定 |
| 1 | 已绑定 |
| 2 | 已解绑 |

### joinSource（入会来源）

| 值 | 说明 |
|----|------|
| QR_SCAN | 扫码 |
| ADMIN | 后台 |
| IMPORT | 导入 |
| MINI_APPLY | 小程序申请 |

### verifyType（核销类型）

| 值 | 说明 |
|----|------|
| OFFLINE_SCAN | 线下扫码核销 |

---

## 十一、跨模块依赖（P0 须在 coupon-api 扩展）

| API | 说明 |
|-----|------|
| `MemberCouponMobileApi` | 领券、我的券（已有） |
| `MemberCouponLifecycleApi.offlineConfirmUsed` | **P0 新增**，线下核销置已用，幂等 |

---

## 十二、更新日志

| 版本 | 日期 | 说明 |
|------|------|------|
| 1.0.0 | 2026-06-25 | P0 初版：入会、配置、二维码、核销流水、统计 |
