|  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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"); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 用户提交支付确认 将状态改为付款中 | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @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"); | 
|---|
|  |  |  | 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 sell() { | 
|---|
|  |  |  | // TODO Auto-generated method stub | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|