| 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 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.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<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);  | 
|   | 
|         ThreadPoolUtils.sendDingTalk(1);  | 
|         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);  | 
|         }  | 
|         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("订单不存在");  | 
|         }  | 
|   | 
|     }  | 
| }  |