rk
3 小时以前 cf1d82548a1bd8155ffe9b486df8167aa9e63a7d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.doumee.service.business;
 
import com.doumee.core.douyin.dto.DouyinBaseResp;
import com.doumee.core.douyin.dto.DouyinBoundProduct;
import com.doumee.core.douyin.dto.DouyinCancelParam;
import com.doumee.core.douyin.dto.DouyinPrepareParam;
import com.doumee.core.douyin.dto.DouyinPrepareResp;
import com.doumee.core.douyin.dto.DouyinVerifyParam;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.DouyinVerifyRecord;
import com.doumee.dao.business.vo.DouyinVerifyRecordPageVO;
 
/**
 * 抖音券核销 Service 定义
 *
 * @author rk
 * @date 2026/06/22
 */
public interface DouyinVerifyService {
 
    /**
     * 验券准备:扫码/输码 → 返回券列表 + verifyToken
     */
    DouyinBaseResp<DouyinPrepareResp> prepare(DouyinPrepareParam param);
 
    /**
     * 验券(核销),并落核销记录
     * @param operator 操作人ID(由调用端传入,web 端取登录会员ID)
     */
    DouyinVerifyRecord verify(DouyinVerifyParam param, String operator);
 
    /**
     * 验券(核销),使用调用方已校验好的套餐绑定结果(scanVerify 核销前校验后调用)。
     * <p>核销成功后直接用 boundProduct 开通套餐,不再重复查询商品/套餐。
     * @param param        核销入参
     * @param operator     操作人ID
     * @param boundProduct 核销前已校验的抖音商品 + 本地套餐(scanVerify 传入)
     */
    DouyinVerifyRecord verify(DouyinVerifyParam param, String operator, DouyinBoundProduct boundProduct);
 
    /**
     * 核销前校验:按 skuId 校验抖音商品在库且已绑定有效本地套餐。
     * <p>scanVerify 在核销前调用,失败抛业务异常(券尚未核销,避免抖音已核销但本地未开卡的不一致)。
     * @param skuId 核销券对应的抖音 SKU ID
     * @return 抖音商品 + 绑定的本地套餐(供 verify 开卡复用)
     */
    DouyinBoundProduct resolveBoundProduct(String skuId);
 
    /**
     * 撤销核销(核销后 1 小时内),更新记录撤销状态
     * @param operator 操作人ID(由调用端传入,web 端取登录会员ID)
     */
    DouyinVerifyRecord cancel(DouyinCancelParam param, String operator);
 
    /**
     * 按 discountMemberId 把套餐卡详情填到 record.packageInfo(scanVerify 展示用)。
     * <p>无套餐卡ID或查不到时,packageInfo 置 null,不影响主流程。
     *
     * @param record 核销记录(含 discountMemberId)
     */
    void fillPackageInfo(DouyinVerifyRecord record);
 
    /**
     * 核销记录分页(web 端小程序自用,简单分页)
     */
    PageData<DouyinVerifyRecord> findPage(PageWrap<DouyinVerifyRecord> pageWrap);
 
    /**
     * 核销记录分页(管理端对外):LEFT JOIN discount_member/member/douyin_product,
     * 带出订单编号、会员openid/手机号(脱敏)、团购商品名、抖音券名、类目、兑换人、状态文案。
     * 查询条件:抖音券码、验券状态、撤销状态。
     */
    PageData<DouyinVerifyRecordPageVO> findManagePage(PageWrap<DouyinVerifyRecordPageVO> pageWrap);
 
    /**
     * 核销记录详情
     */
    DouyinVerifyRecord findById(String id);
}