BankServiceImpl.java 5.8 KB
Newer Older
licc's avatar
licc committed
1 2
package cn.wisenergy.service.app.impl;

3
import cn.wisenergy.common.utils.*;
4
import cn.wisenergy.mapper.AccountMapper;
licc's avatar
licc committed
5
import cn.wisenergy.mapper.BankInfoMapper;
licc's avatar
licc committed
6
import cn.wisenergy.mapper.TradeRecordMapper;
licc's avatar
licc committed
7
import cn.wisenergy.mapper.UsersMapper;
8
import cn.wisenergy.model.app.AccountInfo;
licc's avatar
licc committed
9
import cn.wisenergy.model.app.BankInfo;
licc's avatar
licc committed
10
import cn.wisenergy.model.app.TradeRecord;
licc's avatar
licc committed
11
import cn.wisenergy.model.app.User;
12
import cn.wisenergy.model.dto.WithdrawBankDto;
licc's avatar
licc committed
13 14
import cn.wisenergy.model.enums.TradeRecordEnum;
import cn.wisenergy.model.enums.TradeStatusEnum;
licc's avatar
licc committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
import cn.wisenergy.service.app.BankService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author 86187
 * @ Description: 银行卡相关接口实现
 * @ Author     : 86187
 * @ Date       : 2021/3/3 16:28
 */
@Service
@Slf4j
public class BankServiceImpl extends ServiceImpl<BankInfoMapper, BankInfo> implements BankService {

    @Autowired
    private BankInfoMapper bankInfoMapper;

    @Autowired
    private UsersMapper usersMapper;

38 39 40 41 42
    @Autowired
    private SmsUtils smsUtils;

    @Autowired
    private RedisUtils redisUtils;
licc's avatar
licc committed
43

44 45 46
    @Autowired
    private AccountMapper accountMapper;

licc's avatar
licc committed
47 48 49
    @Autowired
    private TradeRecordMapper recordMapper;

50

licc's avatar
licc committed
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
    @Override
    public R<BankInfo> add(BankInfo bankInfo) {
        log.info("shop-mall[]BankServiceImpl[]add[]input.param.bankInfo:" + bankInfo);
        if (null == bankInfo) {
            return R.error("入参不能为空!");
        }
        int count = bankInfoMapper.add(bankInfo);
        if (count == 0) {
            return R.error("保存用户银行卡信息失败!");
        }

        return R.ok(bankInfo);
    }

    @Override
    public R<BankInfo> edit(BankInfo bankInfo) {
        log.info("shop-mall[]BankServiceImpl[]edit[]input.param.bankInfo:" + bankInfo);
        if (null == bankInfo) {
            return R.error("入参不能为空!");
        }
        //获取用户银行卡信息
        BankInfo old = bankInfoMapper.selectById(bankInfo.getId());
        if (null == old) {
            return R.error("用户银行卡信息不存在!");
        }

        old.setBankName(bankInfo.getBankName());
        old.setCardNumber(bankInfo.getCardNumber());
        old.setName(bankInfo.getName());

        //编辑
        int count = bankInfoMapper.edit(old);
        if (count == 0) {
            return R.error("编辑用户银行卡信息失败!");
        }
        return R.ok(old);
    }

    @Override
    public R<BankInfo> getByUserId(String userId) {
        log.info("shop-mall[]BankServiceImpl[]getByUserId[]input.param.userId:" + userId);
        if (StringUtils.isBlank(userId)) {
            return R.error("入参不能为空!");
        }

        BankInfo bankInfo = bankInfoMapper.getByUserId(userId);
        return R.ok(bankInfo);
    }

    @Override
    public R<Boolean> bankWithdrawSendSms(String userId) {
        log.info("shop-mall[]BankServiceImpl[]edit[]input.param.userId:" + userId);
        if (StringUtils.isBlank(userId)) {
            return R.error("入参不能为空!");
        }

        //1、获取用户信息
licc's avatar
licc committed
108
        User user = usersMapper.getByUserId(userId);
licc's avatar
licc committed
109 110 111 112 113
        if (null == user) {
            return R.error("用户信息不存在!");
        }

        //2、调用发送短信验证码接口
licc's avatar
licc committed
114
        String templateCode = Constants.Sms.TemplateCode.LOGIN_SF_REGISTER;
115 116 117 118 119 120 121 122 123 124 125 126 127 128
        String code = MathUtils.random();
        boolean bool = smsUtils.sendMessage(user.getUserId(), templateCode, code);
        if (!bool) {
            return R.error("验证码发送失败,请重发!");
        }

        //缓存code到redis
        String phone = user.getUserId();
        String key = StringUtil.formatKeyWithPrefix(Constants.RedisKey.BANK_PRIFIX, Constants.RedisKey.SMS_PRIFIX, phone, code + "");
        boolean cache = redisUtils.set(key, code, Constants.Duration.MINUTE_INT);
        if (!cache) {
            return R.error("缓存验证码失败!");
        }
        return R.ok(0, true);
licc's avatar
licc committed
129 130 131
    }

    @Override
132 133 134 135 136 137 138 139 140
    public R<Boolean> userWithdrawBank(WithdrawBankDto dto) {
        log.info("shop-mall[]BankServiceImpl[]edit[]input.param.dto:" + dto);
        if (null == dto || StringUtils.isBlank(dto.getUserId()) || StringUtils.isBlank(dto.getCode()) ||
                null != dto.getMoney()) {
            return R.error("入参不能为空!");
        }

        //1、判断提现金额不得超过余额
        //获取账户信息
licc's avatar
licc committed
141 142 143
        AccountInfo accountInfo = accountMapper.getByUserId(dto.getUserId());
        if (null != accountInfo) {
            if (dto.getMoney() > accountInfo.getExtractMoney().doubleValue()) {
144 145 146 147
                return R.error("提现金额不得超过余额");
            }
        }
        //2、验证短信验证码
licc's avatar
licc committed
148 149 150 151 152 153 154 155 156
        //判断缓存是否过期
        assert accountInfo != null;
        String phone = accountInfo.getUserId();
        String code = dto.getCode();
        String key = StringUtil.formatKeyWithPrefix(Constants.RedisKey.BANK_PRIFIX, Constants.RedisKey.SMS_PRIFIX, phone, code + "");
        long time = redisUtils.getExpire(key);
        if (time < 0) {
            return R.error(1, "验证码已过期!", false);
        }
157
        //3、添加提现交易流水记录
licc's avatar
licc committed
158 159 160 161 162 163 164 165 166 167
        TradeRecord tradeRecord = new TradeRecord();
        tradeRecord.setUserId(accountInfo.getUserId());
        tradeRecord.setTradeType(TradeRecordEnum.WITHDRAW_DEPOSIT.getCode());
        tradeRecord.setTradeNo(null);
        tradeRecord.setStatus(TradeStatusEnum.BANK_TRANSFER_ACCOUNTS.getCode());
        int count = recordMapper.add(tradeRecord);
        if (count == 0) {
            return R.error("保存交易流水失败!");
        }
        return R.ok(0, true);
licc's avatar
licc committed
168 169
    }
}