admin
2020-11-13 ae08b37317103344b9be1b9f91b6bdf7abbc839b
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
package com.ks.goldcorn.service.remote;
 
import com.ks.goldcorn.exception.GoldAppException;
import com.ks.goldcorn.exception.GoldRecordException;
import com.ks.goldcorn.exception.GoldTradeException;
import com.ks.goldcorn.exception.GoldUserException;
import com.ks.goldcorn.mapper.GoldCornAppInfoMapper;
import com.ks.goldcorn.mapper.GoldCornBalanceMapper;
import com.ks.goldcorn.mapper.GoldCornConsumeSourceMapper;
import com.ks.goldcorn.mapper.GoldCornGetSourceMapper;
import com.ks.goldcorn.pojo.DO.*;
import com.ks.goldcorn.service.GoldCornBalanceManager;
import com.ks.goldcorn.service.GoldCornRecordManager;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
 
@Service(version = "1.0")
public class GoldCornTradeServiceImpl implements GoldCornTradeService {
 
    @Resource
    private GoldCornAppInfoMapper goldCornAppInfoMapper;
 
    @Resource
    private GoldCornBalanceMapper goldCornBalanceMapper;
 
    @Resource
    private GoldCornConsumeSourceMapper goldCornConsumeSourceMapper;
 
    @Resource
    private GoldCornBalanceManager goldCornBalanceManager;
 
    @Resource
    private GoldCornGetSourceMapper goldCornGetSourceMapper;
 
    @Resource
    private GoldCornRecordManager goldCornRecordManager;
 
    /**
     * 验证系统与用户
     *
     * @param appCode
     * @param uid
     * @return
     * @throws GoldAppException
     * @throws GoldUserException
     */
    private Long validateAppAndUser(String appCode, String uid) throws GoldAppException, GoldUserException {
        GoldCornAppInfo appInfo = goldCornAppInfoMapper.selectByAppCode(appCode);
        if (appInfo == null) {
            throw new GoldAppException(GoldAppException.CODE_NOT_EXIST, "app is not exist");
        }
 
        GoldCornBalance balance = goldCornBalanceMapper.selectByAppIdAndUid(appInfo.getId(), uid);
        if (balance == null) {
            throw new GoldUserException(GoldUserException.CODE_NOT_EXIST, "uid is not exist");
        }
 
        return appInfo.getId();
    }
 
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addGoldCorn(String appCode, String uid, String sourceCode, String title, String desc) throws GoldAppException, GoldUserException, GoldTradeException {
        Long appId = validateAppAndUser(appCode, uid);
        GoldCornGetSource source = goldCornGetSourceMapper.selectByAppIdAndSourceCode(appId, sourceCode);
        if (source == null) {
            throw new GoldUserException(GoldTradeException.CODE_NOT_EXIST, "source is not exist");
        }
 
        //加记录
        GoldCornRecord record = new GoldCornRecord();
        record.setAppId(appId);
        record.setGoldCorn(source.getGoldCorn());
        record.setSourceId(source.getId());
        record.setType(GoldCornRecord.TYPE_GET);
        record.setUid(uid);
        if (title != null) {
            record.setTitle(title);
        } else {
            record.setTitle(source.getSourceName());
        }
        if (desc != null) {
            record.setDesc(desc);
        } else {
            record.setDesc(source.getSourceDesc());
        }
        try {
            goldCornRecordManager.addRecord(record);
        } catch (GoldRecordException e) {
            throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "添加记录失败");
        }
        //加余额
        goldCornBalanceManager.addMoney(appId, uid, source.getGoldCorn());
    }
 
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void consumeGoldCorn(String appCode, String uid, String sourceCode, String title, String desc) throws GoldAppException, GoldUserException, GoldTradeException {
        Long appId = validateAppAndUser(appCode, uid);
        GoldCornConsumeSource source = goldCornConsumeSourceMapper.selectByAppIdAndSourceCode(appId, sourceCode);
        if (source == null) {
            throw new GoldUserException(GoldTradeException.CODE_NOT_EXIST, "source is not exist");
        }
 
        //减余额
        goldCornBalanceManager.subMoney(appId, uid, source.getGoldCorn());
 
        //加记录
        GoldCornRecord record = new GoldCornRecord();
        record.setAppId(appId);
        record.setGoldCorn(source.getGoldCorn());
        record.setSourceId(source.getId());
        record.setType(GoldCornRecord.TYPE_CONSUME);
        record.setUid(uid);
        if (title != null) {
            record.setTitle(title);
        } else {
            record.setTitle(source.getSourceName());
        }
        if (desc != null) {
            record.setDesc(desc);
        } else {
            record.setDesc(source.getSourceDesc());
        }
        try {
            goldCornRecordManager.addRecord(record);
        } catch (GoldRecordException e) {
            throw new GoldTradeException(GoldTradeException.CODE_ADD_RECORD_FAIL, "添加记录失败");
        }
 
 
    }
}