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.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.MemberQuickBuySaleDetailVo;
|
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.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<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("status", "1");
|
List<PlatformPaymentMethodEntity> 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<MemberQuickBuySaleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("member_id", member.getId());
|
if(!StringUtils.isEmpty(type)) {
|
queryWrapper.eq("order_type", type);
|
}
|
List<MemberQuickBuySaleEntity> memberQuickBuySaleEntityList = memberQuickBuySaleDao.selectList(queryWrapper);
|
List<MemberQuickBuySaleDetailVo> 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<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();
|
MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(id,member.getId());
|
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("成功");
|
}
|
}
|