Administrator
2025-04-20 c95812b953a54e60c916c8ca375101376f58de57
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
package com.taoke.autopay.manager;
 
import com.taoke.autopay.entity.credit.CreditSetting;
import com.taoke.autopay.entity.credit.UserCreditBalance;
import com.taoke.autopay.entity.credit.UserCreditRecord;
import com.taoke.autopay.exception.UserCreditException;
import com.taoke.autopay.service.credit.CreditSettingService;
import com.taoke.autopay.service.credit.UserCreditBalanceService;
import com.taoke.autopay.service.credit.UserCreditRecordService;
import com.taoke.autopay.utils.TimeUtil;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
 
@Component
public class UserCreditManager {
 
    @Resource
    private UserCreditBalanceService userCreditBalanceService;
 
    @Resource
    private UserCreditRecordService userCreditRecordService;
 
    @Resource
    private CreditSettingService creditSettingService;
 
 
    /**
     * 增加积分(事务性)
     *
     * @param creditRecord 积分记录实体
     */
    @Transactional(rollbackFor = Exception.class)
    public void increaseCredit(UserCreditRecord creditRecord) {
        int amount = creditRecord.getCreditAmount();
        // 增加积分
        userCreditBalanceService.increaseCreditBalance(creditRecord.getUid(), amount);
        // 增加记录
        userCreditRecordService.addCreditRecord(creditRecord);
    }
 
    /**
     * 扣除积分(事务性)
     *
     * @param creditRecord 积分记录实体
     */
    @Transactional(rollbackFor = Exception.class)
    public void decreaseCredit(UserCreditRecord creditRecord) {
        Long userId = creditRecord.getUid();
        int amount = creditRecord.getCreditAmount();
 
        // 判断用户积分余额是否足够
        UserCreditBalance balance = userCreditBalanceService.getCreditBalanceByUserId(userId);
        if (balance == null || balance.getCreditBalance() < amount) {
            throw new RuntimeException("用户积分不足");
        }
        // 减少积分
        userCreditBalanceService.decreaseCreditBalance(userId, amount);
       // 增加积分记录
        userCreditRecordService.addCreditRecord(creditRecord);
    }
 
    /**
     * 抖音订单支付记录
     * @param uid
     */
    @Transactional(rollbackFor = Exception.class)
    public void addDYOrderPayRecord(Long uid,String keyId) throws UserCreditException {
        CreditSetting setting =  creditSettingService.getSettingCacheByType(CreditSetting.CreditSettingType.DOUYIN_PAYMENT_SUCCESS_CREDITS,new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(System.currentTimeMillis(),"yyyyMMddHHmm"),"yyyyMMddHHmm")));
        if(setting==null){
            throw new  UserCreditException("未配置抖音支付成功积分");
        }
        UserCreditRecord record =   UserCreditRecord.builder()
                .creditAmount(Integer.parseInt(setting.getValue()))
                .acquisitionMethod(UserCreditRecord.AcquisitionMethod.COMMAND_PAYMENT)
                .direction(UserCreditRecord.DIRECTION_GAIN)
                .identifierId(keyId)
                .uid(uid)
                .description("抖音代付")
                .build();
        increaseCredit(record);
    }
 
 
    /**
     * 快手订单支付成功增加积分
     * @param uid
     * @param keyId
     * @throws UserCreditException
     */
    @Transactional(rollbackFor = Exception.class)
    public void addKSOrderPayRecord(Long uid,String keyId) throws UserCreditException {
        CreditSetting setting =  creditSettingService.getSettingCacheByType(CreditSetting.CreditSettingType.KUAISHOU_PAYMENT_SUCCESS_CREDITS,new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(System.currentTimeMillis(),"yyyyMMddHHmm"),"yyyyMMddHHmm")));
        if(setting==null){
            throw new  UserCreditException("未配置快手支付成功积分");
        }
        UserCreditRecord record = UserCreditRecord.builder()
                .creditAmount(Integer.parseInt(setting.getValue()))
                .acquisitionMethod(UserCreditRecord.AcquisitionMethod.COMMAND_PAYMENT)
                .direction(UserCreditRecord.DIRECTION_GAIN)
                .identifierId(keyId)
                .uid(uid)
                .description("快手代付")
                .build();
        increaseCredit(record);
    }
 
}