admin
2021-08-27 8fee151ffae0c3818694b7318583814bf92663e2
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package com.yeshi.buwan.videos.pptv;
 
import com.yeshi.buwan.domain.user.LoginUserExtra;
import com.yeshi.buwan.domain.vip.OrderRecord;
import com.yeshi.buwan.domain.vip.OrderType;
import com.yeshi.buwan.domain.vip.VIPPrice;
import com.yeshi.buwan.domain.vip.VideoBuyRecord;
import com.yeshi.buwan.exception.PPTVException;
import com.yeshi.buwan.exception.ParamsException;
import com.yeshi.buwan.exception.order.OrderException;
import com.yeshi.buwan.exception.vip.VIPException;
import com.yeshi.buwan.exception.vip.VideoBuyRecordException;
import com.yeshi.buwan.videos.pptv.entity.PPTVProgram;
import com.yeshi.buwan.videos.pptv.entity.PPTVSeries;
import com.yeshi.buwan.service.inter.LoginUserService;
import com.yeshi.buwan.service.inter.juhe.PPTVService;
import com.yeshi.buwan.service.inter.vip.VIPPriceService;
import com.yeshi.buwan.service.inter.vip.VideoBuyRecordService;
import com.yeshi.buwan.util.RedisManager;
import com.yeshi.buwan.util.StringUtil;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
 
/**
 * PPTV会员
 */
@Component
public class PPTVVipManager {
 
    @Resource
    private VIPPriceService vipPriceService;
 
    @Resource
    private LoginUserService loginUserService;
 
    @Resource
    private PPTVService pptvService;
 
    @Resource
    private VideoBuyRecordService videoBuyRecordService;
 
    @Resource
    private RedisManager redisManager;
 
    /**
     * 购买VIP
     *
     * @param record
     * @throws PPTVException
     * @throws VIPException
     */
    @Transactional(rollbackFor = Exception.class)
    public void buyVIP(OrderRecord record) throws PPTVException, VIPException {
        if (record.getState() != OrderRecord.STATE_PAY) {
            throw new VIPException(11, "尚未支付成功");
        }
 
        if (record.getOrderType() != OrderType.vip) {
            throw new VIPException(41, "不是VIP订单");
        }
        VIPPrice price = vipPriceService.selectByType(record.getType());
        if (price == null) {
            throw new VIPException(12, "无法获取价格套餐");
        }
 
        LoginUserExtra extra = loginUserService.getExtra(record.getUid());
        if (extra == null) {
            throw new VIPException(13, "用户信息获取失败");
        }
 
        if (StringUtil.isNullOrEmpty(extra.getPptvUid())) {
            throw new VIPException(14, "pptvuid获取失败");
        }
 
        if (StringUtil.isNullOrEmpty(extra.getPptvOpenId())) {
            loginUserService.updatePPTVOpenId(record.getUid());
        }
 
        boolean success = PPTVApiUtil.buyGoods(extra.getPptvOpenId(), "buwan_" + record.getId(), price.getPptvGoodsNo(), record.getPayTime());
        if (!success) {
            throw new VIPException(21, "PPTV会员购买失败");
        }
 
        redisManager.cacheCommonString(PPTVUtil.getBuyGoodsCacheKey(record.getUid(), price.getPptvGoodsNo()), "1", 60);
 
    }
 
 
    /**
     * 购买单片
     *
     * @param record
     * @throws PPTVException
     * @throws VIPException
     */
    @Transactional(rollbackFor = Exception.class)
    public void buyVideo(OrderRecord record) throws PPTVException, OrderException, VideoBuyRecordException {
        if (record.getState() != OrderRecord.STATE_PAY) {
            throw new OrderException(11, "尚未支付成功");
        }
 
        if (record.getOrderType() != OrderType.video) {
            throw new OrderException(41, "不是单片订单");
        }
 
        PPTVProgram program = pptvService.selectProgramById(record.getVideoVid());
 
 
        if (program.getGoodsInfo() == null || StringUtil.isNullOrEmpty(program.getGoodsInfo().getGoodsNo())) {
            throw new PPTVException(41, "影片商品信息为空");
        }
 
 
        LoginUserExtra extra = loginUserService.getExtra(record.getUid());
        if (extra == null) {
            throw new OrderException(13, "用户信息获取失败");
        }
 
        if (StringUtil.isNullOrEmpty(extra.getPptvUid())) {
            throw new OrderException(14, "pptvuid获取失败");
        }
 
        if (StringUtil.isNullOrEmpty(extra.getPptvOpenId())) {
            loginUserService.updatePPTVOpenId(record.getUid());
        }
 
        boolean success = PPTVApiUtil.buyGoods(extra.getPptvOpenId(), "buwan_" + record.getId(), program.getGoodsInfo().getGoodsNo(), record.getPayTime());
        if (!success) {
            throw new VideoBuyRecordException(21, "PPTV单片购买失败");
        }
 
        PPTVSeries series = pptvService.selectSeriesBySeriesCode(record.getVideoCid());
 
        VideoBuyRecord buyRecord = VideoBuyRecord.create(record, series.getInfoID(), series.getSeriesCode(), program.getProgramCode(), program.getGoodsInfo().getGoodsNo());
 
        try {
            videoBuyRecordService.addRecord(buyRecord);
        } catch (ParamsException e) {
            throw new VideoBuyRecordException(ParamsException.CODE_PARAMS_NOT_ENOUGH, e.getMessage());
        }
 
        redisManager.cacheCommonString(PPTVUtil.getBuyGoodsCacheKey(buyRecord.getLoginUid(), buyRecord.getGoodsNo()), "1", 60);
    }
 
 
}