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.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.MemberQuickBuySaleDao; import com.xcong.excoin.modules.home.dto.MemberQuickBuySaleCommitDto; import com.xcong.excoin.modules.home.dto.MemberQuickBuySaleDto; 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.MemberQuickBuySaleDetailVo; import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleVo; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberPaymentMethodDao; import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberPaymentMethodEntity; 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 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.setUnitPrice(memberQuickBuySaleDto.getUnitPrice()); memberQuickBuySaleEntity.setCreateTime(new Date()); memberQuickBuySaleEntity.setOrderNo(chargeNo); memberQuickBuySaleEntity.setOrderType("B"); // 支付码 ID+四位随机数 int ran = (int) (Math.random() * 10000000); memberQuickBuySaleEntity.setPaymentCode(ran + ""); memberQuickBuySaleDao.insert(memberQuickBuySaleEntity); MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo(); memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId()); // 返回前台付款方式 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); MemberQuickBuySaleDetailVo memberQuickBuySaleDetailVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity); // 收款信息 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", "1"); List paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper); // 随机一个 if (CollectionUtils.isEmpty(paymentMethodList)) { return Result.fail("收款方式为空"); } memberQuickBuySaleDetailVo.setPlatforPaymentMethodList(paymentMethodList); long startTime = memberQuickBuySaleEntity.getCreateTime().getTime(); long nowTime = new Date().getTime(); long third = 30*60*1000; memberQuickBuySaleDetailVo.setTimeLeft((third-nowTime+startTime)/1000); return Result.ok(memberQuickBuySaleDetailVo); } @Override public Result selectAll(String type) { MemberEntity member = LoginUserUtils.getAppLoginUser(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("member_id", member.getId()); if(!StringUtils.isEmpty(type)) { queryWrapper.eq("order_type", type); } queryWrapper.orderByDesc("id"); List memberQuickBuySaleEntityList = memberQuickBuySaleDao.selectList(queryWrapper); List memberQuickBuySaleDetailVoList = MemberQuickBuySaleEntityMapper.INSTANCE.entityListToVoList(memberQuickBuySaleEntityList); return Result.ok(memberQuickBuySaleDetailVoList); } @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 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(); MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(),id); memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER); 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("成功"); } }