Helius
2020-06-03 def723a6fa9cbe05734afe9011a6f90d2fa32196
src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
@@ -9,28 +9,30 @@
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
@@ -41,45 +43,22 @@
   MemberWalletCoinDao memberWalletCoinDao;
   @Resource
   MemberPaymentMethodDao memberPaymentMethodDao;
   @Resource
   PlatformPaymentMethodDao platformPaymentMethodDao;
   @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("请输入正确的交易密码");
      }
   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(memberQuickBuySaleEntity.CHARGE_STATUS_CREATE);
      memberQuickBuySaleEntity.setMemberId(memberId);
      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");
@@ -88,9 +67,10 @@
      memberQuickBuySaleEntity.setPaymentCode(ran + "");
      
      memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
      MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo();
      memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId());
      // 返回前台付款方式
//            memberChargeUsdt.setReceiveMethod(payMethodList.get(index));
      return Result.ok("购买成功,请及时付款");
      return Result.ok(memberQuickBuySaleVo);
   }
   @Override
@@ -98,7 +78,7 @@
      // 用户提交支付确认 将状态改为付款中
      MemberQuickBuySaleEntity memberQuickBuySaleEntity = new MemberQuickBuySaleEntity();
      memberQuickBuySaleEntity.setId(memberQuickBuySaleCommitDto.getId());
      memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_PAID);
      memberQuickBuySaleEntity.setOrderStatus(2);
      memberQuickBuySaleEntity.setPaymentAccount(memberQuickBuySaleCommitDto.getPaymentAccount());
      memberQuickBuySaleEntity.setPaymentName(memberQuickBuySaleCommitDto.getPaymentName());
@@ -112,30 +92,100 @@
   @Override
   public Result selectById(Long id) {
      MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectById(id);
      MemberQuickBuySaleVo memberQuickBuySaleVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
      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;
      memberQuickBuySaleVo.setTimeLeft((third-nowTime+startTime)/1000);
      return Result.ok(memberQuickBuySaleVo);
      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);
      }
      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);
      // TODO dingtalk
      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);
      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(id,"USDT");
      MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
      boolean flag = true;
      while(flag) {
         walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(memberQuickBuySaleEntity.getAmountUsdt()));
@@ -144,14 +194,8 @@
         if(i>0) {
            flag = false;
         }
         walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(id,"USDT");
         walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
      }
      return Result.ok("成功");
   }
   @Override
   public Result sell() {
      // TODO Auto-generated method stub
      return null;
   }
}