|
|
@@ -0,0 +1,593 @@
|
|
|
+# 自营售票 · 管理端接口(按调试顺序)
|
|
|
+
|
|
|
+租户管理端,前缀 `/tenant`。请求头带现有租户 token:`satoken`。
|
|
|
+
|
|
|
+统一 `POST` + `application/json`。业务参数放在 `data` 里,和现有管理端其它模块一致。
|
|
|
+
|
|
|
+```text
|
|
|
+{ "data": { ... } }
|
|
|
+```
|
|
|
+
|
|
|
+成功:`code = 200`,业务数据在 `data`。写接口成功时 `data` 可能为空。
|
|
|
+
|
|
|
+分页列表的 `data` 是 MyBatis-Plus 分页对象,前端主要用:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| records | 当前页列表 |
|
|
|
+| total | 总条数 |
|
|
|
+| size | 每页条数 |
|
|
|
+| current | 当前页 |
|
|
|
+
|
|
|
+列表筛选请求都挂在 `data` 上,公共分页字段:
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| pageNum | 否 | 页码,默认按后端,建议传 1 |
|
|
|
+| pageSize | 否 | 每页条数。要下拉全量时可传 `-1` |
|
|
|
+
|
|
|
+删除类统一:
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| idList | 是 | 要删的 id 数组,至少 1 个 |
|
|
|
+
|
|
|
+修改类统一带 `id`。
|
|
|
+
|
|
|
+**接口目录(按联调顺序)**
|
|
|
+
|
|
|
+| 顺序 | 模块 | 方法 | 路径 |
|
|
|
+|---|---|---|---|
|
|
|
+| 1 | 景点 | POST | `/tenant/selfScenic` 列表 |
|
|
|
+| 1 | 景点 | POST | `/tenant/selfScenic/add` 新增 |
|
|
|
+| 1 | 景点 | POST | `/tenant/selfScenic/update` 编辑 |
|
|
|
+| 1 | 景点 | POST | `/tenant/selfScenic/delete` 删除 |
|
|
|
+| 2 | 线下票种 | POST | `/tenant/otaTicketType` 列表(只读,创建自营票种时选) |
|
|
|
+| 3 | 自营票种 | POST | `/tenant/selfTicketType` 列表 |
|
|
|
+| 3 | 自营票种 | POST | `/tenant/selfTicketType/{id}` 详情 |
|
|
|
+| 3 | 自营票种 | POST | `/tenant/selfTicketType/add` 新增 |
|
|
|
+| 3 | 自营票种 | POST | `/tenant/selfTicketType/update` 编辑 |
|
|
|
+| 3 | 自营票种 | POST | `/tenant/selfTicketType/delete` 删除 |
|
|
|
+| 4 | 销售日历 | POST | `/tenant/selfTicketSaleCalendar/list` 查询 |
|
|
|
+| 4 | 销售日历 | POST | `/tenant/selfTicketSaleCalendar/add` 全量保存 |
|
|
|
+| 4 | 销售日历 | POST | `/tenant/selfTicketSaleCalendar/delete` 删除规则 |
|
|
|
+| 5 | 分销商 | POST | `/tenant/userThirdParty` 列表 |
|
|
|
+| 5 | 分销商 | POST | `/tenant/userThirdParty/add` 新增 |
|
|
|
+| 5 | 分销商 | POST | `/tenant/userThirdParty/update` 修改资料/密码/启用禁用 |
|
|
|
+| 5 | 分销商 | POST | `/tenant/userThirdParty/bind` 票种授权(可批量) |
|
|
|
+| 5 | 分销商 | POST | `/tenant/userThirdParty/recharge` 充值 |
|
|
|
+| 5 | 分销商 | POST | `/tenant/userThirdParty/decrease` 扣款 |
|
|
|
+| 5 | 分销商 | POST | `/tenant/userThirdParty/delete` 删除 |
|
|
|
+| 6 | 余额流水 | POST | `/tenant/thirdPartyBalanceLog` 列表 |
|
|
|
+| 7 | 售票统计 | POST | `/tenant/statistics/orderSaleStatistics` 查询,`export=true` 导出 |
|
|
|
+| 7 | 核销统计 | POST | `/tenant/statistics/orderCheckStatistics` 查询,`export=true` 导出 |
|
|
|
+| 7 | 报表 | POST | `/tenant/reportMission` 导出任务列表 |
|
|
|
+| 7 | 报表 | POST | `/tenant/reportMission/delete` 删除报表 |
|
|
|
+
|
|
|
+建议前端按上面顺序联调:先有景点,才能绑票种;先有票种,才能做日历和分销商授权。统计、报表走租户已有接口,不需要新接 `/thirdParty/**`。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1. 自营景点 `/tenant/selfScenic`
|
|
|
+
|
|
|
+景点是抽象游玩项目。票种要绑定景点,C 端景点列表也依赖「有票种绑了这个景点」。**先做这个模块。**
|
|
|
+
|
|
|
+轮播图、富文本图片:沿用现有管理端文件上传,把返回的地址填进对应字段。`picture` 多张用英文逗号拼接,最多 6 张。
|
|
|
+
|
|
|
+### 1.1 列表
|
|
|
+
|
|
|
+`POST /tenant/selfScenic`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| name | 否 | 景点名称,模糊 |
|
|
|
+| isOpen | 否 | 是否开放:`1` 开放 / `0` 关闭 |
|
|
|
+
|
|
|
+返回 `records` 每项:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| id | 景点 id,后续票种绑定用这个 |
|
|
|
+| name | 名称 |
|
|
|
+| address | 地址 |
|
|
|
+| openingTime | 开放时间文案,例如「08:00~18:00」。真正能不能买由票种控制 |
|
|
|
+| picture | 轮播图,逗号分隔 |
|
|
|
+| isOpen | 是否开放 |
|
|
|
+| publicAnnouncement | 公告 |
|
|
|
+| scenicDescription | 图文描述(富文本) |
|
|
|
+| createTime | 创建时间 |
|
|
|
+
|
|
|
+### 1.2 新增
|
|
|
+
|
|
|
+`POST /tenant/selfScenic/add`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| name | 是 | 景点名称 |
|
|
|
+| isOpen | 是 | `1` / `0` |
|
|
|
+| address | 否 | 地址 |
|
|
|
+| openingTime | 否 | 开放时间文案 |
|
|
|
+| picture | 否 | 轮播图 URL,逗号分隔,最多 6 张 |
|
|
|
+| publicAnnouncement | 否 | 公告 |
|
|
|
+| scenicDescription | 否 | 富文本 |
|
|
|
+
|
|
|
+### 1.3 编辑
|
|
|
+
|
|
|
+`POST /tenant/selfScenic/update`
|
|
|
+
|
|
|
+在新增字段基础上多一个 `id`(必填)。没有单独详情接口,编辑回填用列表数据即可。
|
|
|
+
|
|
|
+### 1.4 删除
|
|
|
+
|
|
|
+`POST /tenant/selfScenic/delete`
|
|
|
+
|
|
|
+`data.idList`。已绑到票种上的景点删掉后,C 端列表可能不再展示该景点(票种侧绑定会失效),删除前建议前端提示。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 线下票种(创建自营票种时的下拉)
|
|
|
+
|
|
|
+自营票种必须绑一个**线下已同步**的票种,一个线下票种只能创建一次自营票种。
|
|
|
+
|
|
|
+### 2.1 线下票种列表
|
|
|
+
|
|
|
+`POST /tenant/otaTicketType`
|
|
|
+
|
|
|
+这个接口管理端其它地方可能已经接过,这里只作为自营票种的选择源。
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| ticketTypeId | 否 | 线下票种数字 id |
|
|
|
+| name | 否 | 名称 |
|
|
|
+
|
|
|
+返回每项主要用:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| ticketTypeId | 线下票种 id,创建自营票种时传这个 |
|
|
|
+| name | 线下票种名称 |
|
|
|
+| category | 大类:`ticket` 景区门票 / `batch` 场次售票 / `member` 年卡次卡。创建自营票种时大类应与这个一致 |
|
|
|
+| batchConfigList | 仅场次票有。线下场次配置,自营侧只读展示,不用单独维护 |
|
|
|
+
|
|
|
+场次配置 `batchConfigList` 项(只读):
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| batchConfigId | 线下场次 id |
|
|
|
+| name | 场次名称 |
|
|
|
+| startTime / endTime | 场次时段 |
|
|
|
+| maxSaleNums | 无座位时最大数量 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. 自营票种 `/tenant/selfTicketType`
|
|
|
+
|
|
|
+依赖:景点列表、线下票种列表。
|
|
|
+
|
|
|
+渠道决定 C 端谁能看到:
|
|
|
+
|
|
|
+| 值 | 含义 |
|
|
|
+|---|---|
|
|
|
+| wx | 微信公众号 |
|
|
|
+| wx-mini | 微信小程序 |
|
|
|
+| third-party | 自营分销商 |
|
|
|
+
|
|
|
+要给分销商卖,必须勾选 `third-party`,然后再走第 5 步授权。只授权不勾渠道,分销商端看不到。
|
|
|
+
|
|
|
+### 3.1 列表
|
|
|
+
|
|
|
+`POST /tenant/selfTicketType`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| category | 否 | `ticket` / `batch` / `member` |
|
|
|
+| name | 否 | 名称,模糊 |
|
|
|
+| isSale | 否 | `1` 在售 / `0` 禁售 |
|
|
|
+
|
|
|
+返回每项字段见 3.2 详情(列表也会带绑定景点、渠道、场次)。
|
|
|
+
|
|
|
+### 3.2 详情(编辑页回填用这个)
|
|
|
+
|
|
|
+`POST /tenant/selfTicketType/{id}`
|
|
|
+
|
|
|
+路径上的 `{id}` 是自营票种 id。body 仍走统一 `Request`,`data` 可空对象。
|
|
|
+
|
|
|
+返回除票种字段外还有:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| scenicList | 已绑定景点 |
|
|
|
+| scenicList[].selfScenicId | 景点 id |
|
|
|
+| scenicList[].selfScenicName | 景点名称 |
|
|
|
+| channels | 渠道字符串数组 |
|
|
|
+| batchConfigList | 场次票只读,来自线下票种 |
|
|
|
+| ticketTypeId / category | 创建后不可改,编辑页只展示 |
|
|
|
+
|
|
|
+### 3.3 新增
|
|
|
+
|
|
|
+`POST /tenant/selfTicketType/add`
|
|
|
+
|
|
|
+**公共必填**
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| ticketTypeId | 是 | 线下票种 id(数字)。已创建过会报「票种已存在」 |
|
|
|
+| category | 是 | 与线下票种大类保持一致:`ticket` / `batch` / `member` |
|
|
|
+| name | 是 | 对客名称 |
|
|
|
+| price | 是 | 底价。具体某天售价可被销售日历覆盖 |
|
|
|
+| realNameType | 是 | `0` 不限;`1` 一证一人;`2` 一证多人 |
|
|
|
+| saleDateStart / saleDateEnd | 是 | 可售日期,`yyyy-MM-dd` |
|
|
|
+| saleTimeStart / saleTimeEnd | 是 | 可售时段,`HH:mm:ss`,例如 `00:00:00` ~ `23:59:59` |
|
|
|
+
|
|
|
+**公共选填**
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| isSale | 在售,默认按 `1` 理解 |
|
|
|
+| highPrice | 划线价 |
|
|
|
+| buyProtocol | 购买协议富文本 |
|
|
|
+| isAgreeProtocol | `1` 必须勾选协议才能买,默认 `0` |
|
|
|
+| saleMaxPreDays | 最多可订未来 X 天 |
|
|
|
+| saleMinPreDays | 最少提前 X 天,`0` 可订当天 |
|
|
|
+| saleMinNums / saleMaxNums | 单订单最小/最大张数,`>0` 才生效 |
|
|
|
+| isAllowCancel | `1` 可退,默认 `1` |
|
|
|
+| dayStock | 每日库存上限,`0` 不限 |
|
|
|
+| totalStock | 总库存上限,`0` 不限 |
|
|
|
+| scenicIds | 绑定的自营景点 id 数组 |
|
|
|
+| channels | 渠道数组,取值见上表 |
|
|
|
+
|
|
|
+**按大类展示的字段**
|
|
|
+
|
|
|
+景区门票 `ticket`:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| useDays | 使用天数,当天有效一般是 `1` |
|
|
|
+| useDateType | `1` 日历票(只能游玩所选日期);`2` 期票(期限内都能用) |
|
|
|
+| useDateStart / useDateEnd | 期票时的有效期 |
|
|
|
+
|
|
|
+年卡次卡 `member`:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| memberUseDateType | `1` 按天(看 `useDays`);`2` 固定日期(看 `useDateStart` / `useDateEnd`) |
|
|
|
+| useDays | 按天时的有效天数,例如 `365` |
|
|
|
+| useDateStart / useDateEnd | 固定日期模式 |
|
|
|
+| memberActiveType | `1` 购买即激活;`2` 首次使用激活 |
|
|
|
+
|
|
|
+场次票 `batch`:场次来自线下票种,这里不用填场次。售卖规则用上面公共字段即可。
|
|
|
+
|
|
|
+### 3.4 修改
|
|
|
+
|
|
|
+`POST /tenant/selfTicketType/update`
|
|
|
+
|
|
|
+必填 `id`。**不能改** `ticketTypeId`、`category`。其余与新增相同(含 `scenicIds`、`channels`)。
|
|
|
+
|
|
|
+景点、渠道是整表覆盖:传当前完整数组。要清空就传空数组。
|
|
|
+
|
|
|
+### 3.5 删除
|
|
|
+
|
|
|
+`POST /tenant/selfTicketType/delete`
|
|
|
+
|
|
|
+`data.idList`。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 4. 销售日历 `/tenant/selfTicketSaleCalendar`
|
|
|
+
|
|
|
+依赖:已有自营票种。用来覆盖「某一天」的价格和是否可售。C 端**列表**仍是票种底价,**详情/下单**才走日历。
|
|
|
+
|
|
|
+规则优先级:**特定日期 > 周期性规则**。同类型里 `priority` 越小越优先。前端拖拽排序后把序号写成 `priority`(建议从 1 开始)。
|
|
|
+
|
|
|
+没有单独的修改接口。`/add` 会先删掉该票种全部旧规则再写入,等于**全量保存**。编辑页应:先 list 回填,用户改完把**完整规则列表**再提交 add。
|
|
|
+
|
|
|
+### 4.1 查询某票种的规则
|
|
|
+
|
|
|
+`POST /tenant/selfTicketSaleCalendar/list`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| selfTicketTypeId | 是 | 自营票种 id |
|
|
|
+
|
|
|
+返回数组(不是分页),按 `priority` 升序。每项含 `id`(删除单条用)、价格、是否可售、特定日期或周期字段。
|
|
|
+
|
|
|
+### 4.2 保存规则(全量覆盖)
|
|
|
+
|
|
|
+`POST /tenant/selfTicketSaleCalendar/add`
|
|
|
+
|
|
|
+注意:这个接口的 `data` 是**数组**,不是对象。
|
|
|
+
|
|
|
+```text
|
|
|
+{ "data": [ { 规则1 }, { 规则2 } ] }
|
|
|
+```
|
|
|
+
|
|
|
+数组里每条规则:
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| selfTicketTypeId | 是 | 同一批必须是同一个票种 |
|
|
|
+| price | 是 | 该规则价格 |
|
|
|
+| isSale | 是 | `1` 可售 / `0` 禁售 |
|
|
|
+| priority | 是 | 越小越优先 |
|
|
|
+
|
|
|
+两种规则二选一:
|
|
|
+
|
|
|
+**特定日期**
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| specificDate | 日期字符串。多天用逗号,例如 `2026-10-01,2026-10-02` |
|
|
|
+
|
|
|
+**周期性**(没传 `specificDate` 时三个都要有)
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| startDate | 周期开始 `yyyy-MM-dd` |
|
|
|
+| endDate | 周期结束 |
|
|
|
+| weekdays | 周几,逗号分隔。`1` 周日,`2` 周一 … `7` 周六。例如周末:`1,7` |
|
|
|
+
|
|
|
+空数组不要调这个接口(会取第 0 条票种 id)。要清空规则用下面的删除,把 list 返回的 id 全部删掉。
|
|
|
+
|
|
|
+### 4.3 删除规则
|
|
|
+
|
|
|
+`POST /tenant/selfTicketSaleCalendar/delete`
|
|
|
+
|
|
|
+`data.idList` 为日历规则 id,不是票种 id。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 5. 自营分销商 `/tenant/userThirdParty`
|
|
|
+
|
|
|
+旅行社、酒店等,登录分销商端售票。可与票种并行开发账号 CRUD,但**授权必须先有票种**。
|
|
|
+
|
|
|
+登录名、名称全局唯一。名称不能和总库 OTA 渠道名冲突。密码:至少 8 位,且同时包含大小写字母和数字。
|
|
|
+
|
|
|
+分销商的资料、余额、授权、**启用/禁用**都在本模块完成,只做一个「自营分销商」菜单即可。不要用 `/tenant/user` 管分销商:那个接口只服务微信/小程序 C 端用户拉黑,列表里也不会再出现分销商。
|
|
|
+
|
|
|
+### 5.1 列表
|
|
|
+
|
|
|
+`POST /tenant/userThirdParty`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| name | 否 | 分销商名称,模糊 |
|
|
|
+| contactName | 否 | 联系人,精确 |
|
|
|
+| phone | 否 | 电话,精确 |
|
|
|
+| remark | 否 | 备注 |
|
|
|
+| status | 否 | `1` 正常 / `0` 禁用 |
|
|
|
+
|
|
|
+返回每项:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| id | 分销商 id,授权/充扣/禁用都用这个 |
|
|
|
+| name | 名称 |
|
|
|
+| contactName / phone | 联系人、电话 |
|
|
|
+| loginName | 登录名 |
|
|
|
+| status | `1` 正常 / `0` 禁用。禁用后不能登录、不能下单 |
|
|
|
+| lastLoginTime | 最近一次登录时间 |
|
|
|
+| balance | 余额,不足不能下单 |
|
|
|
+| selfTicketTypeList | 已授权的自营票种,结构同票种详情(含景点、渠道、场次) |
|
|
|
+| remark | 备注 |
|
|
|
+| createTime | 创建时间 |
|
|
|
+
|
|
|
+列表**不返回密码**。没有单独详情接口,编辑回填用列表。
|
|
|
+
|
|
|
+### 5.2 新增
|
|
|
+
|
|
|
+`POST /tenant/userThirdParty/add`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| name | 是 | 分销商名称 |
|
|
|
+| loginName | 是 | 登录名 |
|
|
|
+| password | 是 | 登录密码,复杂度见上 |
|
|
|
+| contactName | 否 | 联系人 |
|
|
|
+| phone | 否 | 联系方式 |
|
|
|
+| remark | 否 | 备注 |
|
|
|
+
|
|
|
+新建余额为 0。创建后不会自动授权票种。
|
|
|
+
|
|
|
+### 5.3 修改
|
|
|
+
|
|
|
+`POST /tenant/userThirdParty/update`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| id | 是 | 分销商 id |
|
|
|
+| contactName / phone / remark | 否 | 资料。不传的字段保持原值,可以只传 `id` + `status` 做启用/禁用 |
|
|
|
+| password | 否 | 不传或空字符串表示不改密码;传了就要满足复杂度 |
|
|
|
+| status | 否 | `1` 启用 / `0` 禁用。不传不改。禁用会立即踢下线 |
|
|
|
+
|
|
|
+**不能改** `name`、`loginName`。要改名称只能删了重建。
|
|
|
+
|
|
|
+### 5.4 票种授权
|
|
|
+
|
|
|
+`POST /tenant/userThirdParty/bind`
|
|
|
+
|
|
|
+可一次给多个分销商绑定**同一批**票种。每个被选中的分销商,原有授权都会被这批票种覆盖。只改某一个时,列表里传 1 个分销商 id 即可。
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| userThirdPartyIdList | 是 | 分销商 id 数组,至少一个 |
|
|
|
+| selfTicketTypeIdList | 是 | 票种 id 数组。传 `[]` 表示清空所选分销商的授权,不能不传该字段 |
|
|
|
+
|
|
|
+前端交互建议:列表多选分销商,弹窗多选票种,提交完整选中结果。不同分销商要配不同票种时,分开调两次。
|
|
|
+
|
|
|
+被授权的票种自身还需要勾了渠道 `third-party`,分销商端才能看到。
|
|
|
+
|
|
|
+### 5.5 充值
|
|
|
+
|
|
|
+`POST /tenant/userThirdParty/recharge`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| userThirdPartyId | 是 | 分销商 id |
|
|
|
+| amount | 是 | 金额,必须 `> 0`,最小 `0.01` |
|
|
|
+
|
|
|
+### 5.6 扣款
|
|
|
+
|
|
|
+`POST /tenant/userThirdParty/decrease`
|
|
|
+
|
|
|
+字段同充值。扣款不能大于当前余额。
|
|
|
+
|
|
|
+### 5.7 删除
|
|
|
+
|
|
|
+`POST /tenant/userThirdParty/delete`
|
|
|
+
|
|
|
+`data.idList`。以下情况会失败,前端先拦一下更好:
|
|
|
+
|
|
|
+- 余额大于 0
|
|
|
+- 还有未完结订单(不是已取消 / 已关闭 / 已完成)
|
|
|
+
|
|
|
+删除会踢掉该分销商登录,并清掉票种授权。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 6. 余额流水 `/tenant/thirdPartyBalanceLog`
|
|
|
+
|
|
|
+依赖:已有分销商。充值、扣款、分销商下单消费、退单退款都会记流水。建议和分销商列表放一起,从某行点进流水。
|
|
|
+
|
|
|
+### 6.1 流水列表
|
|
|
+
|
|
|
+`POST /tenant/thirdPartyBalanceLog`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| userThirdPartyId | 否 | 按分销商筛 |
|
|
|
+| type | 否 | 见下表 |
|
|
|
+| tradeTimeStart / tradeTimeEnd | 否 | 交易时间,`yyyy-MM-dd HH:mm:ss` |
|
|
|
+
|
|
|
+`type`:
|
|
|
+
|
|
|
+| 值 | 含义 |
|
|
|
+|---|---|
|
|
|
+| 1 | 充值(管理端) |
|
|
|
+| 2 | 人工扣款(管理端) |
|
|
|
+| 3 | 消费(分销商下单扣余额) |
|
|
|
+| 4 | 退款(分销商退单退余额) |
|
|
|
+
|
|
|
+返回每项:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| id | 流水 id |
|
|
|
+| userThirdPartyId | 分销商 id |
|
|
|
+| userThirdPartyName | 分销商名称 |
|
|
|
+| type | 类型 |
|
|
|
+| amount | 发生额 |
|
|
|
+| beforeBalance / afterBalance | 变动前 / 后余额 |
|
|
|
+| orderId | 消费、退款时关联订单 |
|
|
|
+| operatorAdminId | 管理端充扣时的操作人 |
|
|
|
+| tradeTime | 交易时间 |
|
|
|
+| createTime | 创建时间 |
|
|
|
+
|
|
|
+流水只读,没有新增/修改/删除。充扣走 5.5 / 5.6。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 7. 售票统计 / 核销统计 / 报表(沿用租户现有接口)
|
|
|
+
|
|
|
+管理端看自营售票数据,用租户已经接过的统计和报表,不要调 `/thirdParty/statistics`、`/thirdParty/reportMission`。那两个是**分销商自己登录后**用的,小程序/公众号调会返回「无权访问」。
|
|
|
+
|
|
|
+自营分销商下单时,订单上的销售来源 `otaSourceName` = 分销商 **name**(不是 id)。微信是「微信」,小程序是「微信小程序」。
|
|
|
+
|
|
|
+导出:统计请求里 `export` 设为 `true` 会异步出 Excel,到报表列表拿 `downloadUrl`。`exportDetail` 为 `true` 时,售票统计会多两个 sheet(售票明细、退票明细),核销统计会多核销明细。
|
|
|
+
|
|
|
+### 7.1 售票统计
|
|
|
+
|
|
|
+`POST /tenant/statistics/orderSaleStatistics`
|
|
|
+
|
|
|
+按分销渠道 + 票种 + 单价分组,最后一行是总计。
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| timeBegin / timeEnd | 是 | 统计时间,`yyyy-MM-dd HH:mm:ss`。售票按购票时间,退票按退票完成时间 |
|
|
|
+| ticketTypeIdList | 否 | **线下票种数字 id**,不是自营票种 id |
|
|
|
+| otaSourceNameList | 否 | 销售来源名称。只看某个自营分销商时,传该分销商的 `name` |
|
|
|
+| groupByList | 否 | 额外维度,目前支持 `orderDateDay`(按天) |
|
|
|
+| export | 否 | `true` 异步导出 |
|
|
|
+| exportDetail | 否 | `true` 导出时带明细,需同时 `export=true` |
|
|
|
+
|
|
|
+返回数组,每项:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| orderDateDay | 按天分组时的日期;未分组可为空;总计行为「总计」 |
|
|
|
+| otaSourceName | 分销渠道 |
|
|
|
+| ticketTypeName | 票种名称 |
|
|
|
+| unitPrice | 单价 |
|
|
|
+| saleNum / salePrice / saleSettlementPrice | 售票张数、金额、结算价 |
|
|
|
+| cancelNum / cancelPrice / cancelSettlementPrice | 退票张数、金额、结算价 |
|
|
|
+| actualNum / actualPrice / actualSettlementPrice | 实售(售 − 退) |
|
|
|
+
|
|
|
+### 7.2 核销统计
|
|
|
+
|
|
|
+`POST /tenant/statistics/orderCheckStatistics`
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| checkTimeBegin / checkTimeEnd | 是 | 首次核销时间 |
|
|
|
+| ticketTypeIdList | 否 | 线下票种数字 id |
|
|
|
+| otaSourceNameList | 否 | 销售来源名称,自营分销商传 `name` |
|
|
|
+| groupByList | 否 | `orderDateDay` |
|
|
|
+| export / exportDetail | 否 | 同售票统计 |
|
|
|
+
|
|
|
+返回数组,每项:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| orderDateDay | 按天时的日期 |
|
|
|
+| otaSourceName | 订单渠道 |
|
|
|
+| ticketTypeName | 票种 |
|
|
|
+| unitPrice | 单价 |
|
|
|
+| checkCount | 核销张数 |
|
|
|
+| checkPrice | 核销金额 |
|
|
|
+| checkSettlementPrice | 结算价 |
|
|
|
+
|
|
|
+### 7.3 报表列表
|
|
|
+
|
|
|
+`POST /tenant/reportMission`
|
|
|
+
|
|
|
+导出任务进这张表。筛选字段:
|
|
|
+
|
|
|
+| 字段 | 必填 | 说明 |
|
|
|
+|---|---|---|
|
|
|
+| createTimeBegin / createTimeEnd | 否 | 任务创建时间 |
|
|
|
+| name | 否 | 文件名称(请求字段名是 `name`) |
|
|
|
+| type | 否 | `0` 导出 / `1` 导入 |
|
|
|
+| status | 否 | `0` 进行中 / `1` 成功 / `2` 失败 |
|
|
|
+
|
|
|
+返回 `records` 每项:
|
|
|
+
|
|
|
+| 字段 | 说明 |
|
|
|
+|---|---|
|
|
|
+| id | 任务 id |
|
|
|
+| fileName | 文件名 |
|
|
|
+| type | 导入/导出 |
|
|
|
+| downloadUrl | 成功后的下载地址 |
|
|
|
+| status | 任务状态 |
|
|
|
+| adminId / adminName | 操作人 |
|
|
|
+| createTime | 创建时间 |
|
|
|
+
|
|
|
+点导出后先轮询列表,`status=1` 再用 `downloadUrl`。
|
|
|
+
|
|
|
+### 7.4 删除报表
|
|
|
+
|
|
|
+`POST /tenant/reportMission/delete`
|
|
|
+
|
|
|
+`data.idList`。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 联调顺序(建议)
|
|
|
+
|
|
|
+1. 景点:列表 → 新增 → 列表能看到 → 编辑 → 删除
|
|
|
+2. 线下票种列表能拉到数据(数据来自线下同步,管理端只读)
|
|
|
+3. 自营票种:列表 → 新增(绑景点 + 勾渠道)→ 详情回填 → 编辑 → 删除
|
|
|
+4. 销售日历:按票种 list → 用数组全量 add → 再 list 核对 → 按规则 id 删除
|
|
|
+5. 分销商:列表 → 新增 → 修改资料/密码 → bind 授权(可一次多个分销商同一批票种)→ 充值 → 扣款 → 流水列表能看到 1/2 两类
|
|
|
+6. 删除分销商:余额清零且无未完结订单后再删
|
|
|
+7. 统计:售票统计、核销统计能出数;`export=true` 后到报表列表能下到文件
|
|
|
+
|
|
|
+C 端微信/小程序售票、下单、支付,以及分销商自己的统计/报表,不在本文。管理端订单、退单沿用现有订单模块即可。
|