gao
2020-05-27 5013f71d0b9a886de77f936606de061ce1eb2aee
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package com.xcong.excoin.modules.home.service.impl;
 
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.common.LoginUserUtils;
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.home.dao.MemberPaymentMethodDao;
import com.xcong.excoin.modules.home.dao.MemberQuickBuySaleDao;
import com.xcong.excoin.modules.home.dto.MemberQuickBuySaleCommitDto;
import com.xcong.excoin.modules.home.dto.MemberQuickBuySaleDto;
import com.xcong.excoin.modules.home.entity.MemberPaymentMethodEntity;
import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity;
import com.xcong.excoin.modules.home.mapper.MemberQuickBuySaleEntityMapper;
import com.xcong.excoin.modules.home.service.MemberQuickBuySaleService;
import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleVo;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.modules.platform.dao.PlatformPaymentMethodDao;
import com.xcong.excoin.modules.platform.entity.PlatformPaymentMethodEntity;
 
@Service
public class MemberQuickBuySaleServiceImpl extends ServiceImpl<MemberQuickBuySaleDao, MemberQuickBuySaleEntity> implements MemberQuickBuySaleService{
    
    @Resource
    MemberDao memberDao;
    @Resource
    MemberQuickBuySaleDao memberQuickBuySaleDao;
    @Resource
    MemberWalletCoinDao memberWalletCoinDao;
    @Resource
    MemberPaymentMethodDao memberPaymentMethodDao;
    @Resource 
    PlatformPaymentMethodDao platformPaymentMethodDao;
 
    @Override
    public Result recharge(MemberEntity member,MemberQuickBuySaleDto memberQuickBuySaleDto) {
        // 生成订单号
        Long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 10);
        String chargeNo = String.valueOf(timestamp).substring(2) + random;
        // 插入订单表
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setOrderStatus(1);
        memberQuickBuySaleEntity.setMemberId(member.getId());
        memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt());
        memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny());
        memberQuickBuySaleEntity.setCreateTime(new Date());
        memberQuickBuySaleEntity.setOrderNo(chargeNo);
        memberQuickBuySaleEntity.setOrderType("B");
        // 支付码 ID+四位随机数
        int ran = (int) (Math.random() * 10000000);
        memberQuickBuySaleEntity.setPaymentCode(ran + "");
        
        // 收款信息
        QueryWrapper<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("status", "1");
        List<PlatformPaymentMethodEntity> paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper);
        // 随机一个
        if (CollectionUtils.isEmpty(paymentMethodList)) {
            return Result.fail("收款方式为空");
        }
//        int total = paymentMethodList.size();
//        int index = (int) (Math.random() * total);
//        PlatformPaymentMethodEntity paymemtMethod = paymentMethodList.get(index);
//        memberQuickBuySaleEntity.setPaymentName(paymemtMethod.getName());
//        memberQuickBuySaleEntity.setPaymentAccount(paymemtMethod.getAccount());
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
        MemberQuickBuySaleVo memberQuickBuySaleVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
        // 返回前台付款方式
//        memberQuickBuySaleVo.setPlatforPaymentMethodList(paymentMethodList);
//        memberQuickBuySaleEntity.setReceiveMethod(payMethodList.get(index));
        // 返回前台付款方式
//                memberChargeUsdt.setReceiveMethod(payMethodList.get(index));
        return Result.ok(memberQuickBuySaleVo);
    }
 
    @Override
    public Result commitPay(MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) {
        // 用户提交支付确认 将状态改为付款中
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setId(memberQuickBuySaleCommitDto.getId());
        memberQuickBuySaleEntity.setOrderStatus(2);
        memberQuickBuySaleEntity.setPaymentAccount(memberQuickBuySaleCommitDto.getPaymentAccount());
        memberQuickBuySaleEntity.setPaymentName(memberQuickBuySaleCommitDto.getPaymentName());
 
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
 
        // TODO dingtalk
        
        return Result.ok("确认成功");
    }
 
    @Override
    public Result selectById(Long id) {
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectById(id);
        MemberQuickBuySaleVo memberQuickBuySaleVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
        long startTime = memberQuickBuySaleEntity.getCreateTime().getTime();
        long nowTime = new Date().getTime();
        long third = 30*60*1000;
        memberQuickBuySaleVo.setTimeLeft((third-nowTime+startTime)/1000);
        return Result.ok(memberQuickBuySaleVo);
    }
 
    @Override
    public Result sell(MemberEntity member,MemberQuickBuySaleDto memberQuickBuySaleDto) {
        // 判断是否存在足够余额
        MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
        // 判断是否存在足够余额
        if(walletCoin ==null) {
            return Result.fail("您当前可用USDT额度不够");
        }
        BigDecimal extractUsdt = memberQuickBuySaleDto.getAmountUsdt();
        if (extractUsdt == null) {
            return Result.fail("请输入提币量");
        }
        // 判断是否足够
        System.out.println("提币数:"+extractUsdt.doubleValue()+"   可用:"+walletCoin.getAvailableBalance());
        if (extractUsdt.compareTo(walletCoin.getAvailableBalance())==1) {
            return Result.fail("您当前可用USDT额度不够");
        }
 
 
        // 判断是否存在收款方式
        List<MemberPaymentMethodEntity> payMentMethodList = memberPaymentMethodDao.selectByMemberId(member.getId());
        if(CollectionUtils.isEmpty(payMentMethodList)){
            return Result.fail("请配置收款方式");
        }
        // 冻结可用额度
        int i = memberWalletCoinDao.updateFrozenBalance(member.getId(),
                walletCoin.getId(), extractUsdt);
        if (i <= 0) {
            return Result.fail("可用USDT余额不足");
        }
        
        // 生成订单号
        Long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 10);
        String chargeNo = String.valueOf(timestamp).substring(2) + random;
        // 插入订单表
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setOrderStatus(1);
        memberQuickBuySaleEntity.setMemberId(member.getId());
        memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt());
        memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny());
        memberQuickBuySaleEntity.setOrderNo(chargeNo);
        memberQuickBuySaleEntity.setOrderType("S");
        // 支付码 ID+四位随机数
        int ran = (int) (Math.random() * 10000000);
        memberQuickBuySaleEntity.setPaymentCode(ran + "");
        
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
 
        // TODO dingtalk
        
        return Result.ok("下单成功");
    }
 
    @Override
    public Result cancelRecharge(Long id) {
        // 获取当前登录用户
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        if(member==null) {
            return Result.fail("登录用户已失效");
        }
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(id,member.getId());
        memberQuickBuySaleEntity.setOrderStatus(1);
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        
        // 判断是否存在足够余额
        MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
        boolean flag = true;
        while(flag) {
            walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(memberQuickBuySaleEntity.getAmountUsdt()));
            walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(memberQuickBuySaleEntity.getAmountUsdt()));
            int i = memberWalletCoinDao.updateById(walletCoin);
            if(i>0) {
                flag = false;
            }
            walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
        }
        return Result.ok("成功");
    }
}