package com.xcong.excoin.modules.member.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto; import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; import com.xcong.excoin.modules.member.entity.MemberCoinAddressEntity; import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; import com.xcong.excoin.modules.member.entity.MemberCoinWithdrawEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberQuickBuySaleEntity; import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; import com.xcong.excoin.modules.member.mapper.MemberAccountMoneyChangeMapper; import com.xcong.excoin.modules.member.mapper.MemberAuthenticationMapper; import com.xcong.excoin.modules.member.mapper.MemberCoinAddressMapper; import com.xcong.excoin.modules.member.mapper.MemberCoinChargeMapper; import com.xcong.excoin.modules.member.mapper.MemberCoinWithdrawMapper; import com.xcong.excoin.modules.member.mapper.MemberMapper; import com.xcong.excoin.modules.member.mapper.MemberQuickBuySaleMapper; import com.xcong.excoin.modules.member.mapper.MemberWalletCoinMapper; import com.xcong.excoin.modules.member.service.IMemberService; import com.xcong.excoin.modules.member.vo.MemberAuthenticationVo; import com.xcong.excoin.modules.member.vo.MemberCoinChargeVo; import com.xcong.excoin.modules.member.vo.MemberCoinWithdrawVo; import com.xcong.excoin.modules.member.vo.MemberQuickBuySaleVo; import com.xcong.excoin.modules.member.vo.MemberQuickSaleVo; import lombok.RequiredArgsConstructor; import java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.validation.Valid; import javax.validation.constraints.NotNull; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @author wzy * @date 2020-06-10 **/ @Service @RequiredArgsConstructor public class MemberServiceImpl extends ServiceImpl implements IMemberService { private final MemberMapper memberMapper; private final MemberQuickBuySaleMapper memberQuickBuySaleMapper; private final MemberWalletCoinMapper memberWalletCoinMapper; private final MemberAccountMoneyChangeMapper memberAccountMoneyChangeMapper; private final MemberCoinChargeMapper memberCoinChargeMapper; private final MemberCoinWithdrawMapper memberCoinWithdrawMapper; private final MemberCoinAddressMapper memberCoinAddressMapper; private final MemberAuthenticationMapper memberAuthenticationMapper; @Override public IPage findMemberListInPage(MemberEntity memberEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); return this.baseMapper.selectMemberListInPage(page, memberEntity); } @Override public IPage findmemberQuickBuySaleListInPage( MemberQuickBuySaleEntity memberQuickBuySaleEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findmemberQuickBuySaleListInPage = memberQuickBuySaleMapper.findmemberQuickBuySaleListInPage(page, memberQuickBuySaleEntity); return findmemberQuickBuySaleListInPage; } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse memberChargeUsdtConfirm(Long id) { MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); if(!MemberQuickBuySaleEntity.CHARGE_STATUS_PAID.equals(memberQuickBuySaleEntity.getOrderStatus())) { return new FebsResponse().message("只允许已付款状态操作"); } Long memberId = memberQuickBuySaleEntity.getMemberId(); BigDecimal amountUsdt = memberQuickBuySaleEntity.getAmountUsdt(); String walletCode = "USDT"; MemberEntity selectById = this.baseMapper.selectById(memberId); if(ObjectUtils.isEmpty(selectById)) { return new FebsResponse().message("用户已不存在"); } //获取币币钱包 MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId,walletCode); BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance(); memberWalletCoinEntity.setAvailableBalance(availableBalance.add(amountUsdt)); memberWalletCoinEntity.setTotalBalance(totalBalance.add(amountUsdt)); // 更新 memberWalletCoinMapper.updateById(memberWalletCoinEntity); // 更新状态 memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CHECKED); memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); //添加币币资金划转历史记录 MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); memberAccountMoneyChangeEntity.setContent("OTC转入"); memberAccountMoneyChangeEntity.setMemberId(memberId); memberAccountMoneyChangeEntity.setAmount(amountUsdt); memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); memberAccountMoneyChangeEntity.setSymbol("USDT"); memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setCreateTime(new Date()); memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setUpdateTime(new Date()); memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); /** * todo SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String chargeTime = format.format(memberQuickBuySaleEntity.getChargeTime()); // 将当前时间袼式化为指定的格式 String usdt = memberQuickBuySaleEntity.getAmountUsdt()+"USDT"; //发送短信提醒 String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"充值"+usdt+"已成功到账,请您及时查收!订单号为:"+memberChargeUsdt.getOrderCode()+"。"; SmsUtils.hxSmsSend(member.getPhone(), smsContent); */ return new FebsResponse().success(); } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse memberChargeUsdtCancel(@NotNull(message = "{required}") Long id) { MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); if(MemberQuickBuySaleEntity.CHARGE_STATUS_CHECKED.equals(memberQuickBuySaleEntity.getOrderStatus()) || MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER.equals(memberQuickBuySaleEntity.getOrderStatus()) || MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_SYSTEM.equals(memberQuickBuySaleEntity.getOrderStatus())) { return new FebsResponse().message("不允许系统撤单操作"); } memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_SYSTEM); memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); return new FebsResponse().success(); } @Override public IPage findmemberQuickSaleListInPage(MemberQuickBuySaleEntity memberQuickBuySaleEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findmemberQuickBuySaleListInPage = memberQuickBuySaleMapper.findmemberQuickSaleListInPage(page, memberQuickBuySaleEntity); return findmemberQuickBuySaleListInPage; } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse memberExtractUsdtCancel(@NotNull(message = "{required}") Long id) { MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); if(!MemberQuickBuySaleEntity.CHARGE_STATUS_CREATE.equals(memberQuickBuySaleEntity.getOrderStatus())) { return new FebsResponse().message("只允许待付款状态操作"); } Long memberId = memberQuickBuySaleEntity.getMemberId(); BigDecimal amountUsdt = memberQuickBuySaleEntity.getAmountUsdt(); String walletCode = "USDT"; MemberEntity selectById = this.baseMapper.selectById(memberId); if(ObjectUtils.isEmpty(selectById)) { return new FebsResponse().message("用户已不存在"); } //获取币币钱包 MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId,walletCode); BigDecimal frozenBalance = memberWalletCoinEntity.getFrozenBalance(); BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance(); memberWalletCoinEntity.setFrozenBalance(frozenBalance.subtract(amountUsdt)); memberWalletCoinEntity.setAvailableBalance(availableBalance.add(amountUsdt)); memberWalletCoinEntity.setTotalBalance(totalBalance.add(amountUsdt)); // 更新 memberWalletCoinMapper.updateById(memberWalletCoinEntity); // 更新状态 memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_SYSTEM); memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); /** * todo SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String chargeTime = format.format(memberQuickBuySaleEntity.getChargeTime()); // 将当前时间袼式化为指定的格式 String usdt = memberQuickBuySaleEntity.getAmountUsdt()+"USDT"; //发送短信提醒 String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"充值"+usdt+"已成功到账,请您及时查收!订单号为:"+memberChargeUsdt.getOrderCode()+"。"; SmsUtils.hxSmsSend(member.getPhone(), smsContent); */ return new FebsResponse().success(); } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse memberExtractUsdtConfirm(@NotNull(message = "{required}") Long id) { MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); if(!MemberQuickBuySaleEntity.CHARGE_STATUS_CREATE.equals(memberQuickBuySaleEntity.getOrderStatus())) { return new FebsResponse().message("只允许待付款状态操作"); } Long memberId = memberQuickBuySaleEntity.getMemberId(); BigDecimal amountUsdt = memberQuickBuySaleEntity.getAmountUsdt(); String walletCode = "USDT"; MemberEntity selectById = this.baseMapper.selectById(memberId); if(ObjectUtils.isEmpty(selectById)) { return new FebsResponse().message("用户已不存在"); } //获取币币钱包 MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId,walletCode); BigDecimal frozenBalance = memberWalletCoinEntity.getFrozenBalance(); memberWalletCoinEntity.setFrozenBalance(frozenBalance.subtract(amountUsdt)); memberWalletCoinMapper.updateById(memberWalletCoinEntity); memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_PAID); memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); //添加币币资金划转历史记录 MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); memberAccountMoneyChangeEntity.setContent("提现"); memberAccountMoneyChangeEntity.setMemberId(memberId); memberAccountMoneyChangeEntity.setAmount(amountUsdt); memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); memberAccountMoneyChangeEntity.setSymbol(walletCode); memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setCreateTime(new Date()); memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setUpdateTime(new Date()); memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); /** SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String chargeTime = format.format(memberQuickBuySaleEntity.getUpdateTime()); // 将当前时间袼式化为指定的格式 String usdt = amountUsdt+"USDT"; //发送短信提醒 String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"提现"+usdt+"已成功到账,请您及时查收!订单号为:"+memberQuickBuySaleEntity.getOrderCode()+"。"; SmsUtils.hxSmsSend(selectById.getPhone(), smsContent); * */ return new FebsResponse().success(); } @Override public IPage findMemberApplyCoinListInPage(MemberCoinChargeEntity memberCoinChargeEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findmemberQuickBuySaleListInPage = memberCoinChargeMapper.findMemberApplyCoinListInPage(page, memberCoinChargeEntity); return findmemberQuickBuySaleListInPage; } @Override public IPage findmemberWithdrawCoinListInPage( MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findmemberQuickBuySaleListInPage = memberCoinWithdrawMapper.findmemberWithdrawCoinListInPage(page, memberCoinWithdrawEntity); return findmemberQuickBuySaleListInPage; } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") Long id) { MemberCoinWithdrawEntity selectById = memberCoinWithdrawMapper.selectById(id); Long memberId = selectById.getMemberId(); String symbol = selectById.getSymbol(); String address = selectById.getAddress(); int status = selectById.getStatus(); if(status != 1) { return new FebsResponse().fail().message("只有等待审核的状态才能确认!"); } // 查询币币钱包 MemberWalletCoinEntity walletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId, symbol); BigDecimal total = walletCoin.getTotalBalance().subtract(selectById.getAmount()).subtract(selectById.getFeeAmount()); walletCoin.setTotalBalance(total); BigDecimal frozen = walletCoin.getFrozenBalance().subtract(selectById.getAmount()).subtract(selectById.getFeeAmount()); walletCoin.setFrozenBalance(frozen); memberWalletCoinMapper.updateById(walletCoin); if ("Y".equals(selectById.getIsInside())) { Map columnMap = new HashMap<>(); columnMap.put("symbol", symbol); columnMap.put("address", address); // 如果是内部转账 则需要将币加到内部地址 List selectByMap = memberCoinAddressMapper.selectByMap(columnMap); if(selectByMap == null || selectByMap.isEmpty()) { return new FebsResponse().fail().message("地址有误,请拒绝!"); } Long aimMemberId = selectByMap.get(0).getMemberId(); MemberWalletCoinEntity aimWalletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(aimMemberId, symbol); BigDecimal addTotal = aimWalletCoin.getTotalBalance().add(selectById.getAmount()); BigDecimal addAvailable = aimWalletCoin.getAvailableBalance().add(selectById.getAmount()); aimWalletCoin.setTotalBalance(addTotal); aimWalletCoin.setAvailableBalance(addAvailable); memberWalletCoinMapper.updateById(aimWalletCoin); MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); memberAccountMoneyChangeEntity.setContent("收款"); memberAccountMoneyChangeEntity.setMemberId(aimMemberId); memberAccountMoneyChangeEntity.setAmount(selectById.getAmount()); memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol()); memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setCreateTime(new Date()); memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setUpdateTime(new Date()); memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); } MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); memberAccountMoneyChangeEntity.setContent("提币"); memberAccountMoneyChangeEntity.setMemberId(memberId); memberAccountMoneyChangeEntity.setAmount(selectById.getAmount()); memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol()); memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setCreateTime(new Date()); memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setUpdateTime(new Date()); memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); selectById.setStatus(MemberCoinWithdrawEntity.IS_STATUS_Y); memberCoinWithdrawMapper.updateById(selectById); /** //短信提醒 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String chargeTime = format.format(new Date()); // 将当前时间袼式化为指定的格式 String usdt = selectById.getAmount()+"USDT"; * 发送短信提醒 todo String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"提现"+usdt+"已成功到账,请您及时查收!"; SmsUtils.hxSmsSend(member.getPhone(), smsContent); */ return new FebsResponse().success(); } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse memberWithdrawCoinCancel(@NotNull(message = "{required}") Long id) { MemberCoinWithdrawEntity selectById = memberCoinWithdrawMapper.selectById(id); Long memberId = selectById.getMemberId(); String symbol = selectById.getSymbol(); int status = selectById.getStatus(); if(status != 1) { return new FebsResponse().fail().message("只有等待审核的状态才能拒绝!"); } // 查询币币钱包 MemberWalletCoinEntity walletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId, symbol); BigDecimal available = walletCoin.getAvailableBalance().add(selectById.getAmount()).add(selectById.getFeeAmount()); walletCoin.setAvailableBalance(available); BigDecimal frozen = walletCoin.getFrozenBalance().subtract(selectById.getAmount()).subtract(selectById.getFeeAmount()); walletCoin.setFrozenBalance(frozen); memberWalletCoinMapper.updateById(walletCoin); // 提币退款记录 MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); memberAccountMoneyChangeEntity.setContent("提币"); memberAccountMoneyChangeEntity.setMemberId(memberId); memberAccountMoneyChangeEntity.setAmount(selectById.getAmount()); memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_FAIL_INTEGER); memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol()); memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setCreateTime(new Date()); memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); memberAccountMoneyChangeEntity.setUpdateTime(new Date()); memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); selectById.setStatus(MemberCoinWithdrawEntity.IS_STATUS_N); memberCoinWithdrawMapper.updateById(selectById); return new FebsResponse().success(); } @Override public MemberAuthenticationVo selectMemberAuthenticationById(long id) { MemberAuthenticationVo memberAuthenticationEntity = memberAuthenticationMapper.findMemberAuthenticationByMemberId(id); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); memberAuthenticationEntity.setRealName(firstName+"-"+secondName); return memberAuthenticationEntity; } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse memberDetailConfirm(@Valid MemberDetailConfirmDto memberDetailConfirmDto) { Long id = memberDetailConfirmDto.getId(); MemberEntity selectById = memberMapper.selectById(id); Integer certifyStatus = selectById.getCertifyStatus(); if(!MemberEntity.CERTIFY_STATUS_ING.equals(certifyStatus)) { return new FebsResponse().fail().message("只有【待审核】状态才能提交!"); } MemberAuthenticationVo memberAuthenticationEntity = memberAuthenticationMapper.findMemberAuthenticationByMemberId(id); selectById.setCertifyStatus(MemberEntity.CERTIFY_STATUS_Y); selectById.setIdcardNo(memberAuthenticationEntity.getIdcardNo()); memberMapper.updateById(selectById); return new FebsResponse().success(); } }