Helius
2020-07-07 fae05b7ffe899ab996f7a9c31b4c96df7964a0de
src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
@@ -6,152 +6,206 @@
import javax.annotation.Resource;
import com.xcong.excoin.utils.ThreadPoolUtils;
import com.xcong.excoin.utils.dingtalk.DingTalkType;
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.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 cn.hutool.crypto.SecureUtil;
import lombok.extern.slf4j.Slf4j;
import com.xcong.excoin.modules.platform.dao.PlatformPaymentMethodDao;
import com.xcong.excoin.modules.platform.entity.PlatformPaymentMethodEntity;
@Service
@Slf4j
public class MemberQuickBuySaleServiceImpl extends ServiceImpl<MemberQuickBuySaleDao, MemberQuickBuySaleEntity> implements MemberQuickBuySaleService{
   @Resource
   MemberDao memberDao;
   @Resource
   MemberQuickBuySaleDao memberQuickBuySaleDao;
   @Resource
   MemberWalletCoinDao memberWalletCoinDao;
   @Resource
   MemberPaymentMethodDao memberPaymentMethodDao;
public class MemberQuickBuySaleServiceImpl extends ServiceImpl<MemberQuickBuySaleDao, MemberQuickBuySaleEntity> implements MemberQuickBuySaleService {
   @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("购买成功,请及时付款");
   }
    @Resource
    MemberDao memberDao;
    @Resource
    MemberQuickBuySaleDao memberQuickBuySaleDao;
    @Resource
    MemberWalletCoinDao memberWalletCoinDao;
    @Resource
    MemberPaymentMethodDao memberPaymentMethodDao;
    @Resource
    PlatformPaymentMethodDao platformPaymentMethodDao;
   @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());
    @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.updateById(memberQuickBuySaleEntity);
        memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
        MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo();
        memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId());
        // 返回前台付款方式
        return Result.ok("提交成功", memberQuickBuySaleVo);
    }
      // TODO dingtalk
      return Result.ok("确认成功");
   }
    @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());
   @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);
   }
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        ThreadPoolUtils.sendDingTalk(1);
        return Result.ok("确认成功");
    }
   @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 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 sell() {
      // TODO Auto-generated method stub
      return null;
   }
    @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);
        }
        queryWrapper.orderByDesc("id");
        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);
        ThreadPoolUtils.sendDingTalk(2);
        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);
        return Result.ok("成功");
    }
    @Override
    public Result cancelSell(Long id) {
        // 获取当前登录用户
        MemberEntity member = LoginUserUtils.getAppLoginUser();
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(), id);
        if (memberQuickBuySaleEntity != null) {
            memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
            memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
            MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), CoinTypeEnum.USDT.toString());
            // 冻结资金返回可用
            int i = memberWalletCoinDao.subFrozenBalance(member.getId(),
                    walletCoin.getId(), memberQuickBuySaleEntity.getAmountUsdt());
            if (i < 0) {
                return Result.fail("撤单失败");
            }
            return Result.ok("成功");
        } else {
            return Result.fail("订单不存在");
        }
    }
}