gao
2020-05-25 73699775f5546177ce71e3bae33d83a8aa346793
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
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.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.common.LoginUserUtils;
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 cn.hutool.crypto.SecureUtil;
import lombok.extern.slf4j.Slf4j;
 
@Service
@Slf4j
public class MemberQuickBuySaleServiceImpl extends ServiceImpl<MemberQuickBuySaleDao, MemberQuickBuySaleEntity> implements MemberQuickBuySaleService{
    
    @Resource
    MemberDao memberDao;
    @Resource
    MemberQuickBuySaleDao memberQuickBuySaleDao;
    @Resource
    MemberWalletCoinDao memberWalletCoinDao;
    @Resource
    MemberPaymentMethodDao memberPaymentMethodDao;
 
    @Override
    public Result recharge(MemberQuickBuySaleDto memberQuickBuySaleDto) {
        
        log.info("入参----->{}", memberQuickBuySaleDto);
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        log.info("查询到的会员----->{}", member);
        // 验证是否实名认证
        if (MemberEntity.CERTIFY_STATUS_Y.equals(member.getCertifyStatus())) {
            return Result.fail("请先实名认证");
        }
        String tradePasswordWeb = memberQuickBuySaleDto.getTradePassword();
        
        // 验证支付密码
        String tradePassword = member.getTradePassword();
        
        log.info("入参交易密码{},用户设置的交易密码{}", tradePasswordWeb,tradePassword);
        if (StringUtils.isEmpty(tradePassword)) {
            return Result.fail("请先配置交易密码");
        }
        if (StringUtils.isEmpty(tradePasswordWeb)) {
            return Result.fail("请输入交易密码");
        }
        // System.out.println("交易密码:"+MD5.GetMD5Code(tradePasswordWeb)+" tradePassword =
        // "+tradePassword);
        // 验证交易密码
        if (!tradePassword.equals(SecureUtil.md5(tradePasswordWeb))) {
            return Result.fail("请输入正确的交易密码");
        }
        // 生成订单号
        Long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 10);
        String chargeNo = String.valueOf(timestamp).substring(2) + random;
        // 插入订单表
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setOrderStatus(memberQuickBuySaleEntity.CHARGE_STATUS_CREATE);
        memberQuickBuySaleEntity.setMemberId(memberId);
        memberQuickBuySaleEntity.setCreateTime(new Date());
        memberQuickBuySaleEntity.setOrderNo(chargeNo);
        memberQuickBuySaleEntity.setOrderType("B");
        // 支付码 ID+四位随机数
        int ran = (int) (Math.random() * 10000000);
        memberQuickBuySaleEntity.setPaymentCode(ran + "");
        
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
        // 返回前台付款方式
//                memberChargeUsdt.setReceiveMethod(payMethodList.get(index));
        return Result.ok("购买成功,请及时付款");
    }
 
    @Override
    public Result commitPay(MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) {
        // 用户提交支付确认 将状态改为付款中
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
        memberQuickBuySaleEntity.setId(memberQuickBuySaleCommitDto.getId());
        memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_PAID);
        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 cancelRecharge(Long id) {
        // 获取当前登录用户
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        if(memberId==null) {
            return Result.fail("登录用户已失效");
        }
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectById(id);
        memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        
        // 判断是否存在足够余额
        MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(id,"USDT");
        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(id,"USDT");
        }
        return Result.ok("成功");
    }
 
    @Override
    public Result sell() {
        // TODO Auto-generated method stub
        return null;
    }
}