package cc.mrbird.febs.dapp.chain; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.chain.entity.EthUsdtChargeDto; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.enumerate.CoinTypeEnum; import cc.mrbird.febs.dapp.mapper.*; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author wzy * @date 2020-07-02 **/ @Slf4j @Service public class BlockCoinServiceImpl implements BlockCoinService { @Resource private MemberCoinAddressDao memberCoinAddressDao; @Resource private DappMemberDao memberDao; @Resource private MemberCoinChargeDao memberCoinChargeDao; @Resource private DappWalletCoinDao memberWalletCoinDao; @Resource private DappAccountMoneyChangeDao dappAccountMoneyChangeDao; private final static String EOS_SEQ_KEY = "eos_seq_key"; private final static String xrp_update_key = "xrp_update_key"; private final static String trc20_update_key = "trc20_update_key"; @Override public void updateTrc20(EthUsdtChargeDto dto) { String address = dto.getAddress(); BigDecimal amount = dto.getBalance(); String hash = dto.getHash(); // 判断有无 //List addressList = memberCoinAddressDao.selectAllBlockAddressBySymbolAndTag(CoinTypeEnum.USDT.name(), "TRC20"); Map hashParam = new HashMap<>(); // 校验hash是否已同步过 hashParam.put("hash", hash); List memberCoinChargeEntities = memberCoinChargeDao.selectByMap(hashParam); if (CollectionUtils.isNotEmpty(memberCoinChargeEntities)) { // 若已同步过 return; } // 添加钱包余额 // 用户ID MemberCoinAddressEntity memberCoinAddress = memberCoinAddressDao.selectCoinAddressByAddressAndSymbolTag(address, CoinTypeEnum.USDT.name(),"TRC20"); if (memberCoinAddress == null) { return; } Long memberId = memberCoinAddress.getMemberId(); // 查询钱包 并更新 DappWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name()); memberWalletCoinDao.updateBlockBalance(memberWalletCoinEntity.getId(), amount, BigDecimal.ZERO, 0); // 添加冲币记录 String orderNo = insertCoinCharge(address, memberId, amount, CoinTypeEnum.USDT.name(), "TRC20", BigDecimal.ZERO, hash); DappAccountMoneyChangeEntity accountMoneyChange = new DappAccountMoneyChangeEntity(memberId, amount, "充值", 9); dappAccountMoneyChangeDao.insert(accountMoneyChange); // LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", amount, CoinTypeEnum.USDT.name(), 1, 1); // ThreadPoolUtils.sendDingTalk(5); // DappMemberEntity member = memberDao.selectById(memberId); // if (StrUtil.isNotBlank(member.getPhone())) { // //String amountEos = amount + "XRP"; // ZzSmsSend.sendRechargeMsg(member.getPhone(), new Date(), amount+"U", orderNo); // } else { // SubMailSend.sendRechargeMail(member.getEmail(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), orderNo); // } } private String generateNo() { // 生成订单号 Long timestamp = System.currentTimeMillis(); // 随机数 int random = (int) (Math.random() * 10); return String.valueOf(timestamp).substring(2) + random; } public String insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount, String hash) { MemberCoinChargeEntity memberCoinChargeEntity = new MemberCoinChargeEntity(); memberCoinChargeEntity.setAddress(address); memberCoinChargeEntity.setMemberId(memberId); memberCoinChargeEntity.setAmount(newBalance); memberCoinChargeEntity.setSymbol(symbol); memberCoinChargeEntity.setTag(tag); memberCoinChargeEntity.setStatus(1); memberCoinChargeEntity.setLastAmount(lastAmount); memberCoinChargeEntity.setHash(hash); String orderNo = generateNo(); memberCoinChargeEntity.setOrderCode(orderNo); memberCoinChargeDao.insert(memberCoinChargeEntity); return orderNo; } }