|
|
@@ -980,6 +980,305 @@ GET /api/admin/invite/conversion-stats?userId=1
|
|
|
|
|
|
---
|
|
|
|
|
|
+### 6.9 入驻审核列表(运营端)
|
|
|
+
|
|
|
+```
|
|
|
+GET /api/admin/license/review?reviewStatus=PENDING&keyword=138&page=1&size=20
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+| 参数 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| reviewStatus | String | 否 | 审核状态:PENDING/APPROVED/REJECTED,不传查全部 |
|
|
|
+| keyword | String | 否 | 手机号关键词(匹配用户手机号或入驻联系电话) |
|
|
|
+| page | int | 否 | 页码,默认1 |
|
|
|
+| size | int | 否 | 每页条数,默认20 |
|
|
|
+
|
|
|
+**响应:** 分页格式,records 包含入驻信息及关联用户手机号、昵称等。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.10 管理员新增入驻信息
|
|
|
+
|
|
|
+```
|
|
|
+POST /api/admin/license
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+**请求体:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "userId": 1,
|
|
|
+ "storeName": "XX大药房",
|
|
|
+ "terminalType": "SINGLE",
|
|
|
+ "province": "广东省",
|
|
|
+ "city": "深圳市",
|
|
|
+ "district": "南山区",
|
|
|
+ "storeAddress": "科技园路1号",
|
|
|
+ "contactPerson": "张三",
|
|
|
+ "contactPhone": "13800138000",
|
|
|
+ "businessLicenseUrl": "https://oss.example.com/license/xxx.jpg",
|
|
|
+ "drugLicenseUrl": "https://oss.example.com/drug/xxx.jpg",
|
|
|
+ "creditCode": "91110000XXXXXXXXXX",
|
|
|
+ "medicalDeviceClass2Url": "https://oss.example.com/device2/xxx.jpg",
|
|
|
+ "medicalDeviceClass3Url": "https://oss.example.com/device3/xxx.jpg"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| userId | Long | 是 | 客户用户ID(必须未提交过入驻信息) |
|
|
|
+| storeName | String | 是 | 店铺名称 |
|
|
|
+| terminalType | String | 是 | SINGLE-单店 / CHAIN-连锁 / CLINIC-诊所 |
|
|
|
+| province | String | 是 | 省 |
|
|
|
+| city | String | 是 | 市 |
|
|
|
+| district | String | 是 | 区 |
|
|
|
+| storeAddress | String | 是 | 店铺详细地址 |
|
|
|
+| contactPerson | String | 是 | 联系人姓名 |
|
|
|
+| contactPhone | String | 是 | 联系电话 |
|
|
|
+| businessLicenseUrl | String | 是 | 营业执照图片URL |
|
|
|
+| drugLicenseUrl | String | 是 | 药品经营许可证图片URL |
|
|
|
+| creditCode | String | 否 | 统一社会信用代码 |
|
|
|
+| medicalDeviceClass2Url | String | 否 | 二类医疗器械备案图片URL(与三类至少选一) |
|
|
|
+| medicalDeviceClass3Url | String | 否 | 三类医疗器械经营许可图片URL(与二类至少选一) |
|
|
|
+
|
|
|
+> 创建后状态为 PENDING,需再操作审核确认。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.11 管理员编辑入驻信息
|
|
|
+
|
|
|
+```
|
|
|
+PUT /api/admin/license/{licenseId}
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**,请求体同新增接口(不含 userId)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.12 审核入驻信息
|
|
|
+
|
|
|
+```
|
|
|
+POST /api/admin/license/review
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+**请求体:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "licenseId": 1,
|
|
|
+ "action": "APPROVED",
|
|
|
+ "rejectReason": "资质不符合要求"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| licenseId | Long | 是 | 入驻信息ID |
|
|
|
+| action | String | 是 | APPROVED-审核通过 / REJECTED-驳回 |
|
|
|
+| rejectReason | String | 否 | 驳回原因(驳回时必填) |
|
|
|
+
|
|
|
+> 审核通过后自动赠送30天PRO高级会员(首次),并同步到第三方。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.13 手动同步入驻信息到第三方
|
|
|
+
|
|
|
+```
|
|
|
+POST /api/admin/license/{licenseId}/sync-third
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+单条入驻记录手动同步到第三方(智价云药店版),同步执行并立即返回结果。
|
|
|
+
|
|
|
+**响应:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 200,
|
|
|
+ "data": "同步成功,第三方用户ID:1234567890123456789"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.14 批量同步入驻信息到第三方
|
|
|
+
|
|
|
+```
|
|
|
+POST /api/admin/license/batch-sync-third
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+运营在后台勾选多条入驻记录,一键批量同步到第三方。逐条独立处理,某条失败不影响其他记录。
|
|
|
+
|
|
|
+**请求体:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "licenseIds": [1, 2, 3, 5]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| licenseIds | Array\<Long\> | 是 | 入驻信息ID列表,至少一条 |
|
|
|
+
|
|
|
+**响应:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 200,
|
|
|
+ "data": {
|
|
|
+ "total": 4,
|
|
|
+ "successCount": 3,
|
|
|
+ "failCount": 1,
|
|
|
+ "items": [
|
|
|
+ { "licenseId": 1, "success": true, "message": "同步成功,第三方用户ID:xxx" },
|
|
|
+ { "licenseId": 2, "success": true, "message": "同步成功,第三方用户ID:yyy" },
|
|
|
+ { "licenseId": 3, "success": false, "message": "同步未成功:第三方未返回用户ID" },
|
|
|
+ { "licenseId": 5, "success": true, "message": "同步成功,第三方用户ID:zzz" }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+| 响应字段 | 类型 | 说明 |
|
|
|
+|---------|------|------|
|
|
|
+| total | int | 总条数 |
|
|
|
+| successCount | int | 成功条数 |
|
|
|
+| failCount | int | 失败条数 |
|
|
|
+| items | Array | 逐条明细 |
|
|
|
+| items[].licenseId | Long | 入驻信息ID |
|
|
|
+| items[].success | Boolean | 是否成功 |
|
|
|
+| items[].message | String | 结果描述 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.15 查询同步差异列表
|
|
|
+
|
|
|
+```
|
|
|
+GET /api/admin/license/sync-diff?status=0
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+| 参数 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| status | Integer | 否 | 处理状态:0-待处理 1-已采纳第三方 2-已保留本地 3-已手动调整 |
|
|
|
+
|
|
|
+**响应:** 返回差异记录数组,包含 licenseId、字段名、本地值、第三方值等。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.16 处理同步差异
|
|
|
+
|
|
|
+```
|
|
|
+POST /api/admin/license/sync-diff/{diffId}/handle
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+**请求体:**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "action": "ADOPT_THIRD",
|
|
|
+ "remark": "第三方数据更准确"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+| 字段 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| action | String | 是 | ADOPT_THIRD-采纳第三方 / KEEP_LOCAL-保留本地 / MANUAL-手动调整 |
|
|
|
+| remark | String | 否 | 处理备注 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 6.17 用户搜索(手机号模糊匹配+入驻信息)
|
|
|
+
|
|
|
+```
|
|
|
+GET /api/admin/users/search?phone=138&page=1&size=20
|
|
|
+```
|
|
|
+
|
|
|
+**需要管理员权限**
|
|
|
+
|
|
|
+按手机号片段模糊搜索用户,同时关联返回该用户的入驻信息(店铺名称、审核状态、同步状态)和会员等级。未提交入驻信息的用户,入驻相关字段为 `null`。
|
|
|
+
|
|
|
+| 参数 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| phone | String | 是 | 手机号关键词(LIKE 模糊匹配) |
|
|
|
+| page | int | 否 | 页码,默认1 |
|
|
|
+| size | int | 否 | 每页条数,默认20 |
|
|
|
+
|
|
|
+**响应:** 分页格式
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "code": 200,
|
|
|
+ "data": {
|
|
|
+ "total": 2,
|
|
|
+ "page": 1,
|
|
|
+ "size": 20,
|
|
|
+ "records": [
|
|
|
+ {
|
|
|
+ "userId": "1",
|
|
|
+ "phone": "13800138000",
|
|
|
+ "nickname": "张三",
|
|
|
+ "wechatNickname": null,
|
|
|
+ "userStatus": 1,
|
|
|
+ "createTime": "2026-06-01T10:00:00",
|
|
|
+ "membershipLevel": "PRO",
|
|
|
+ "membershipExpireAt": "2026-07-15T10:00:00",
|
|
|
+ "licenseId": "1",
|
|
|
+ "storeName": "XX大药房",
|
|
|
+ "terminalType": "SINGLE",
|
|
|
+ "contactPerson": "张三",
|
|
|
+ "contactPhone": "13800138000",
|
|
|
+ "reviewStatus": "APPROVED",
|
|
|
+ "syncStatus": 1,
|
|
|
+ "externalId": "123456789"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "userId": "2",
|
|
|
+ "phone": "13800138001",
|
|
|
+ "nickname": "用户138****0001",
|
|
|
+ "wechatNickname": null,
|
|
|
+ "userStatus": 1,
|
|
|
+ "createTime": "2026-07-01T10:00:00",
|
|
|
+ "membershipLevel": "PLUS",
|
|
|
+ "membershipExpireAt": null,
|
|
|
+ "licenseId": null,
|
|
|
+ "storeName": null,
|
|
|
+ "terminalType": null,
|
|
|
+ "contactPerson": null,
|
|
|
+ "contactPhone": null,
|
|
|
+ "reviewStatus": null,
|
|
|
+ "syncStatus": null,
|
|
|
+ "externalId": null
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+| 响应字段 | 类型 | 说明 |
|
|
|
+|---------|------|------|
|
|
|
+| userId | String | 用户ID |
|
|
|
+| phone | String | 手机号 |
|
|
|
+| nickname | String | 昵称 |
|
|
|
+| wechatNickname | String | 微信昵称 |
|
|
|
+| userStatus | Integer | 0-禁用 1-正常 |
|
|
|
+| membershipLevel | String | PLUS/PRO/ULTRA |
|
|
|
+| membershipExpireAt | String | 会员过期时间(null=永久) |
|
|
|
+| licenseId | String | 入驻信息ID(null=未提交入驻) |
|
|
|
+| storeName | String | 店铺名称 |
|
|
|
+| terminalType | String | SINGLE/CHAIN/CLINIC |
|
|
|
+| reviewStatus | String | PENDING/APPROVED/REJECTED |
|
|
|
+| syncStatus | Integer | 0-未同步 1-成功 2-失败 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
## 7. B2B平台账号绑定模块 /api/platform-account
|
|
|
|
|
|
### 7.1 绑定B2B平台账号
|