package cc.mrbird.febs.dapp.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.AdminOperationService; import cc.mrbird.febs.dapp.service.DappWalletService; import cc.mrbird.febs.dapp.vo.AdminMemberCoinWithdrawVo; import cc.mrbird.febs.rabbit.producer.ChainProducer; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; @Service @RequiredArgsConstructor public class AdminOperationServiceImpl extends ServiceImpl implements AdminOperationService { private final MemberCoinWithdrawDao memberCoinWithdrawDao; private final DappWalletCoinDao dappWalletCoinDao; private final DappMemberDao dappMemberDao; private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao; private final DappWalletService dappWalletService; private final DappFundFlowDao dappFundFlowDao; private final ChainProducer chainProducer; @Override public IPage findMemberWithdrawCoinAllOneInPage(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage adminMemberCoinWithdrawVoIPage = memberCoinWithdrawDao.findMemberWithdrawCoinInPage(page, memberCoinWithdrawEntity); return adminMemberCoinWithdrawVoIPage; } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse agreeWithdraw(Long id) { MemberCoinWithdrawEntity memberCoinWithdrawEntity = memberCoinWithdrawDao.selectById(id); if(ObjectUtil.isEmpty(memberCoinWithdrawEntity)){ throw new FebsException("刷新页面重试"); } if (MemberCoinWithdrawEntity.STATUS_DOING != memberCoinWithdrawEntity.getStatus()) { throw new FebsException("非可审核状态"); } memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_YES); memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity); DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(memberCoinWithdrawEntity.getFlowId()); dappFundFlowEntity.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE); dappFundFlowDao.updateById(dappFundFlowEntity); chainProducer.sendFeeDistributeMsg(dappFundFlowEntity.getId()); return new FebsResponse().success(); } @Override @Transactional(rollbackFor = Exception.class) public FebsResponse disagreeWithdraw(Long id) { MemberCoinWithdrawEntity memberCoinWithdrawEntity = memberCoinWithdrawDao.selectById(id); if(ObjectUtil.isEmpty(memberCoinWithdrawEntity)){ throw new FebsException("刷新页面重试"); } if (MemberCoinWithdrawEntity.STATUS_DOING != memberCoinWithdrawEntity.getStatus()) { throw new FebsException("非可审核状态"); } DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(memberCoinWithdrawEntity.getFlowId()); if (dappFundFlowEntity == null) { throw new FebsException("审核失败,联系管理员"); } memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_NO); memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity); dappFundFlowEntity.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_DISAGREE); dappFundFlowDao.updateById(dappFundFlowEntity); dappWalletService.updateWalletCoinWithLock(memberCoinWithdrawEntity.getAmount(), memberCoinWithdrawEntity.getMemberId(), 1); dappWalletService.updateWalletMineWithLock(memberCoinWithdrawEntity.getFeeAmount(), memberCoinWithdrawEntity.getMemberId(), 1); DappFundFlowEntity feeFlow = new DappFundFlowEntity(memberCoinWithdrawEntity.getMemberId(), memberCoinWithdrawEntity.getFeeAmount(), 7, 2, null, null); dappFundFlowDao.insert(feeFlow); return new FebsResponse().success(); } }