From c119feb821bdb1e6ef407f55056173f752c01c32 Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Thu, 16 Jul 2020 17:11:20 +0800
Subject: [PATCH] 订单止盈止损类提交
---
src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java | 5 +
src/main/java/com/xcong/excoin/modules/blackchain/service/EosService.java | 84 +++++++++++++++++++++
src/main/java/com/xcong/excoin/modules/blackchain/model/EosResult.java | 28 +++++++
src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java | 66 ++++++++++++++++
src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java | 2
5 files changed, 185 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/model/EosResult.java b/src/main/java/com/xcong/excoin/modules/blackchain/model/EosResult.java
new file mode 100644
index 0000000..ca0bd19
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/model/EosResult.java
@@ -0,0 +1,28 @@
+package com.xcong.excoin.modules.blackchain.model;
+
+import lombok.Data;
+
+/**
+ * 数据样例
+ * EosResult(quantity=2.0000 EOS, memo=aa, from=okbtothemoon, to=biueeostoken, accountActionSeq=2)
+ */
+@Data
+public class EosResult {
+ /**
+ * 转账数量
+ */
+ private String quantity;
+
+ /**
+ * 转账标记
+ */
+ private String memo;
+ private String from;
+ private String to;
+
+ /**
+ * 这笔转账对应于这个账户的序号
+ */
+ private Integer accountActionSeq;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/EosService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/EosService.java
new file mode 100644
index 0000000..4aad013
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/EosService.java
@@ -0,0 +1,84 @@
+package com.xcong.excoin.modules.blackchain.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.xcong.excoin.modules.blackchain.model.EosResult;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class EosService {
+ // 正式网络 https://api-v2.eosasia.one https://proxy.eosnode.tools
+ // 测试网络 https://api-kylin.eosasia.one
+ // "eosqxyx11111", "5JJB2oiCXwASK9fumjyTgbtHcwDVedVRaZda1kBhFuQcmjnrDWB"
+ //private final static String account = "huobideposit";
+ public final static String ACCOUNT = "biueeostoken";
+ // private String account;
+ private final static String EOS_NAME = "EOS";
+ public static final String K_mnemonic = "mnemonic";
+ public static final String K_privateKey = "privateKey";
+ public static final String K_publicKey = "publicKey";
+ private static final String EOS_TOKEN = "eosio.token";
+ private static final String ACTION_TRANSFER = "transfer";
+
+
+ public static void main(String[] args) throws Exception {
+
+ List<EosResult> actions = getActions(0, 3);
+ for(EosResult eosResult:actions){
+ System.out.println(eosResult.toString());
+ String quantity = eosResult.getQuantity();
+ String amountStr = quantity.split("")[0];
+ System.out.println(quantity);
+ System.out.println(new BigDecimal(amountStr));
+ }
+ }
+
+
+ /**
+ *
+ * @param pos 从第几条开始(包括pos)
+ * @param offset 查询条数
+ * @return
+ */
+ public static List<EosResult> getActions(int pos, int offset) {
+ JSONObject param = new JSONObject();
+ param.put("account_name", ACCOUNT);
+ param.put("pos", pos);
+ param.put("offset", offset);
+ Map<String, String> header = new HashMap<String, String>();
+ header.put("content-type", "application/json");
+ String res = HttpUtil.post("https://api.eosflare.io/v1/eosflare/get_actions", null, param.toJSONString(), header);
+ System.out.println(res);
+ List<EosResult> results = new ArrayList<>();
+ try {
+
+ JSONObject jsonObject = JSONObject.parseObject(res);
+ JSONArray actions = jsonObject.getJSONArray("actions");
+ if (actions != null && actions.size() > 0) {
+ int size = actions.size();
+ EosResult eosResult = null;
+ for (int i = 0; i < size; i++) {
+ JSONObject jsonObject1 = actions.getJSONObject(i);
+ // 当前交易序号
+ Object account_action_seq = jsonObject1.get("account_action_seq");
+ JSONObject action_trace = jsonObject1.getJSONObject("action_trace");
+ JSONObject act = action_trace.getJSONObject("act");
+ Object account = act.get("account");
+ if (!EOS_TOKEN.equals(account)) {
+ continue;
+ }
+ eosResult = JSONObject.parseObject(act.getString("data"), EosResult.class);
+ eosResult.setAccountActionSeq((Integer) account_action_seq);
+ results.add(eosResult);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return results;
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java b/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java
index 4944af5..9a78edb 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java
@@ -10,4 +10,6 @@
public void updateBtc();
+ public void updateEos();
+
}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
index 0fbce89..1eae8af 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
@@ -5,7 +5,9 @@
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
+import com.xcong.excoin.modules.blackchain.model.EosResult;
import com.xcong.excoin.modules.blackchain.service.BtcService;
+import com.xcong.excoin.modules.blackchain.service.EosService;
import com.xcong.excoin.modules.blackchain.service.EthService;
import com.xcong.excoin.modules.blackchain.service.UsdtService;
import com.xcong.excoin.modules.coin.service.BlockCoinService;
@@ -18,11 +20,14 @@
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.utils.LogRecordUtils;
+import com.xcong.excoin.utils.RedisUtils;
import com.xcong.excoin.utils.ThreadPoolUtils;
import com.xcong.excoin.utils.dingtalk.DingTalkUtils;
import com.xcong.excoin.utils.mail.Sms106Send;
import com.xcong.excoin.utils.mail.SubMailSend;
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;
@@ -48,6 +53,11 @@
private MemberCoinChargeDao memberCoinChargeDao;
@Resource
private MemberWalletCoinDao memberWalletCoinDao;
+
+ @Resource
+ private RedisUtils redisUtils;
+
+ private final static String EOS_SEQ_KEY="eos_seq_key";
@Transactional(rollbackFor = Exception.class)
@Override
@@ -250,6 +260,62 @@
}
}
+ @Override
+ public void updateEos() {
+ // 获取上次读取的序号
+ int pos= 0;
+ //每次获取的条数
+ int offset = 10;
+
+ String eosSeq = redisUtils.getString(EOS_SEQ_KEY);
+ if(StringUtils.isNotBlank(eosSeq)){
+ pos = Integer.valueOf(eosSeq);
+ }
+ // 记录最大的seq
+ int seq = pos;
+ List<EosResult> actions = EosService.getActions(pos, offset);
+ if(CollectionUtils.isNotEmpty(actions)){
+ for(EosResult eosResult:actions){
+ String to = eosResult.getTo();
+ Integer accountActionSeq = eosResult.getAccountActionSeq();
+ if(accountActionSeq>seq){
+ seq = accountActionSeq;
+ }
+ if(!EosService.ACCOUNT.equals(to)){
+ // 判断是否是收款
+ continue;
+ }
+ // 处理收款
+ String quantity = eosResult.getQuantity();
+ String memo = eosResult.getMemo();
+ if(StringUtils.isBlank(memo)){
+ // 没有标记的跳过
+ continue;
+ }
+ if(StringUtils.isNotBlank(quantity)){
+ // 转账额
+ String amountStr = quantity.split("")[0];
+ List<MemberCoinAddressEntity> memberCoinAddress = memberCoinAddressDao.selectAllBlockAddressBySymbolAndTag(CoinTypeEnum.EOS.name(), memo);
+ if(CollectionUtils.isNotEmpty(memberCoinAddress)){
+ MemberCoinAddressEntity memberCoinAddressEntity = memberCoinAddress.get(0);
+ // 用户ID
+ Long memberId = memberCoinAddressEntity.getMemberId();
+ MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.EOS.name());
+ if(memberCoinAddressEntity!=null){
+ memberWalletCoinDao.updateBlockBalance(memberWalletCoinEntity.getId(),new BigDecimal(amountStr),BigDecimal.ZERO,0);
+ // 添加冲币记录
+ insertCoinCharge(EosService.ACCOUNT,memberId,new BigDecimal(amountStr),CoinTypeEnum.EOS.name(),memo,BigDecimal.ZERO);
+ }
+ }
+ }
+ }
+ }
+ // 最后更新seq 即下次查询的起始位置 在本次最大的基础上加一
+ if(seq>0 && seq>pos){
+ redisUtils.set(EOS_SEQ_KEY,seq+1);
+ }
+ }
+
private String generateNo() {
// 生成订单号
Long timestamp = System.currentTimeMillis();
diff --git a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
index e68dd4c..dca19aa 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
@@ -50,4 +50,9 @@
blockCoinService.updateBtc();
}
+ @Scheduled(cron = "0 4/20 * * * ? ")
+ public void eosUpdate() {
+ blockCoinService.updateEos();
+ }
+
}
--
Gitblit v1.9.1