From 3b31e14e178f73fdb2605436cbd5f544ddc2de02 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 07 Aug 2020 17:02:25 +0800
Subject: [PATCH] modify
---
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderInfoDao.java | 3 +
src/main/resources/mapper/contract/ContractOrderDao.xml | 24 ++++++++
src/main/resources/mapper/documentary/FollowTraderProfitInfoDao.xml | 6 +
src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java | 9 +++
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java | 4 +
src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java | 4
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerOrderRelationDao.java | 3 +
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderProfitInfoDao.java | 1
src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml | 11 +++
src/main/java/com/xcong/excoin/quartz/job/FollowProfitUpdateJob.java | 64 +++++++++++++++++++++
src/main/resources/mapper/documentary/FollowTraderInfoDao.xml | 6 ++
src/test/java/com/xcong/excoin/FollowTest.java | 9 +++
src/main/resources/mapper/documentary/FollowFollowerOrderRelationDao.xml | 7 ++
13 files changed, 147 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java b/src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java
index aaea6dc..b79b3f4 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java
@@ -8,6 +8,9 @@
import com.xcong.excoin.modules.contract.parameter.vo.OrderListVo;
import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
+import java.util.List;
+
/**
* @author helius
*/
@@ -16,4 +19,10 @@
public IPage<ContractOrderEntity> selectContractOrderInPage(Page<ContractOrderEntity> page, @Param("record") ContractOrderEntity contractOrderEntity);
public ContractOrderEntity selectOrderDetailByIdAndMemberId(@Param("id") Long id, @Param("memberId") Long memberId);
+
+ List<ContractOrderEntity> selectFollowOrderByMemberId(@Param("memberId") Long memberId);
+
+ BigDecimal selectFollowOrderTotalProfitByMemberId(@Param("memberId") Long memberId);
+
+ Integer selectFollowOrderCntForWinRate(@Param("memberId") Long memberId, @Param("type") Integer type);
}
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerOrderRelationDao.java b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerOrderRelationDao.java
index f81546d..d37f698 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerOrderRelationDao.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerOrderRelationDao.java
@@ -4,6 +4,7 @@
import com.xcong.excoin.modules.documentary.entity.FollowFollowerOrderRelationEntity;
import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
import java.util.List;
/**
@@ -17,4 +18,6 @@
FollowFollowerOrderRelationEntity selectNowOneByorderId(@Param("orderId")Long orderId);
List<FollowFollowerOrderRelationEntity> selectFollowHoldOrderByTradeOrderNo(@Param("orderNo") String orderNo);
+
+ BigDecimal selectTraderTotalProfit(@Param("memberId") Long memberId);
}
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java
index f2ff189..eca6dc4 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java
@@ -38,5 +38,9 @@
@Param("memberId")Long memberId);
int updateFollowerProfitByTradeMemberId(@Param("principal") BigDecimal principal, @Param("profit") BigDecimal profit, @Param("tradeMemberId") Long tradeMemberId, @Param("memberId") Long memberId);
+
+ int selectFollowerCntByTradeMemberId(@Param("tradeMemberId") Long tradeMemberId);
+
+ BigDecimal selectAllFollowerProfit(@Param("tradeMemberId") Long tradeMemberId);
}
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderInfoDao.java b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderInfoDao.java
index cd26af6..d49b8a5 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderInfoDao.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderInfoDao.java
@@ -4,6 +4,8 @@
import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
public interface FollowTraderInfoDao extends BaseMapper<FollowTraderInfoEntity> {
FollowTraderInfoEntity selectFollowTraderInfoEntityBytreaderId(@Param("traderId")Long traderId);
@@ -12,4 +14,5 @@
FollowTraderInfoEntity selectTraderInfoByOrderId(@Param("orderId") Long orderId);
+ List<FollowTraderInfoEntity> selectAllTraderInfo();
}
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderProfitInfoDao.java b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderProfitInfoDao.java
index 7ed1cae..d12f79f 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderProfitInfoDao.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowTraderProfitInfoDao.java
@@ -19,4 +19,5 @@
FollowTraderProfitInfoVo selectOneByMemberId(@Param("memberId")long memberId);
+ FollowTraderProfitInfoEntity selectTraderInfoProfitByMemberId(@Param("memberId") Long memberId);
}
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java
index be1a42e..d819f7f 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java
@@ -47,11 +47,11 @@
/**
* 累计跟随人数
*/
- private BigDecimal totalFollowerCnt;
+ private int totalFollowerCnt;
/**
* 交易笔数
*/
- private BigDecimal totalOrderCnt;
+ private int totalOrderCnt;
}
diff --git a/src/main/java/com/xcong/excoin/quartz/job/FollowProfitUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/FollowProfitUpdateJob.java
index bb155af..c396ee9 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/FollowProfitUpdateJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/FollowProfitUpdateJob.java
@@ -1,6 +1,23 @@
package com.xcong.excoin.quartz.job;
+import cn.hutool.core.collection.CollUtil;
+import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
+import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
+import com.xcong.excoin.modules.documentary.dao.FollowFollowerOrderRelationDao;
+import com.xcong.excoin.modules.documentary.dao.FollowFollowerProfitDao;
+import com.xcong.excoin.modules.documentary.dao.FollowTraderInfoDao;
+import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitInfoDao;
+import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
+import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
/**
*
@@ -8,11 +25,58 @@
* @author wzy
* @date 2020-08-06
**/
+@Slf4j
@Component
+@ConditionalOnProperty(prefix = "app", name = "loop-job", havingValue = "true")
public class FollowProfitUpdateJob {
+ @Resource
+ private FollowTraderInfoDao followTraderInfoDao;
+ @Resource
+ private FollowFollowerProfitDao followFollowerProfitDao;
+ @Resource
+ private ContractOrderDao contractOrderDao;
+ @Resource
+ private FollowFollowerOrderRelationDao followFollowerOrderRelationDao;
+ @Resource
+ private FollowTraderProfitInfoDao followTraderProfitInfoDao;
+ @Scheduled(cron = "0 0/30 * * * ? ")
public void traderProfitUpdate() {
+ log.info("交易员定时任务执行");
+ // 查询所有交易员信息
+ List<FollowTraderInfoEntity> allTraders = followTraderInfoDao.selectAllTraderInfo();
+ if (CollUtil.isNotEmpty(allTraders)) {
+ for (FollowTraderInfoEntity trader : allTraders) {
+ Long tradeMemberId = trader.getMemberId();
+ FollowTraderProfitInfoEntity traderInfoProfit = followTraderProfitInfoDao.selectTraderInfoProfitByMemberId(tradeMemberId);
+ // 累计收益率
+ BigDecimal totalProfitRatio = contractOrderDao.selectFollowOrderTotalProfitByMemberId(tradeMemberId);
+ traderInfoProfit.setTotalProfitRatio(totalProfitRatio);
+ // 带单总收益
+ BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfit(tradeMemberId);
+ traderInfoProfit.setTotalProfit(totalProfit);
+ // 交易笔数
+ List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderByMemberId(tradeMemberId);
+ traderInfoProfit.setTotalOrderCnt(CollUtil.isNotEmpty(orders) ? orders.size() : 0);
+ // 近三周胜率
+ Integer winCnt = contractOrderDao.selectFollowOrderCntForWinRate(tradeMemberId, 1);
+ Integer allCnt = contractOrderDao.selectFollowOrderCntForWinRate(tradeMemberId, null);
+ if (winCnt != null && allCnt != null && allCnt!=0) {
+ BigDecimal winRate = BigDecimal.valueOf(winCnt).divide(BigDecimal.valueOf(allCnt), 4, BigDecimal.ROUND_DOWN);
+ traderInfoProfit.setWinRate(winRate);
+ }
+
+ // 跟随者总收益
+ BigDecimal followerProfit = followFollowerProfitDao.selectAllFollowerProfit(tradeMemberId);
+ traderInfoProfit.setFollowerTotalProfit(followerProfit);
+ // 累计跟随人数
+ int followerCnt = followFollowerProfitDao.selectFollowerCntByTradeMemberId(tradeMemberId);
+ traderInfoProfit.setTotalFollowerCnt(followerCnt);
+
+ followTraderProfitInfoDao.updateById(traderInfoProfit);
+ }
+ }
}
}
diff --git a/src/main/resources/mapper/contract/ContractOrderDao.xml b/src/main/resources/mapper/contract/ContractOrderDao.xml
index 53b99d0..33c0a73 100644
--- a/src/main/resources/mapper/contract/ContractOrderDao.xml
+++ b/src/main/resources/mapper/contract/ContractOrderDao.xml
@@ -53,4 +53,28 @@
select * from contract_order where id=#{id} and member_id=#{memberId}
</select>
+ <select id="selectFollowOrderByMemberId" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity">
+ select *
+ from contract_order a, follow_follower_order_relation b
+ where a.id=b.order_id and a.member_id=#{memberId}
+ </select>
+
+ <select id="selectFollowOrderTotalProfitByMemberId" resultType="java.math.BigDecimal">
+ select sum(reward_ratio)*100
+ from contract_order
+ where member_id=#{memberId} and contract_type=2
+ </select>
+
+ <select id="selectFollowOrderCntForWinRate" resultType="java.lang.Integer">
+ select count(1)
+ from contract_order a
+ where member_id=#{memberId}
+ and contract_type=2 and order_type in (3,4)
+ <if test="type!=null and type==1">
+ and reward_amount > 0
+ </if>
+ <if test="type!=null and type==2">
+ and 0 > reward_amount
+ </if>
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/documentary/FollowFollowerOrderRelationDao.xml b/src/main/resources/mapper/documentary/FollowFollowerOrderRelationDao.xml
index 51c0781..f4441bf 100644
--- a/src/main/resources/mapper/documentary/FollowFollowerOrderRelationDao.xml
+++ b/src/main/resources/mapper/documentary/FollowFollowerOrderRelationDao.xml
@@ -32,5 +32,10 @@
where a.trade_member_id=b.trade_member_id and a.trade_order_no=#{orderNo} and b.is_follow=1
and a.order_type=1
</select>
-
+
+ <select id="selectTraderTotalProfit" resultType="java.math.BigDecimal">
+ select sum(b.reward_amount)
+ from follow_follower_order_relation a, contract_order b
+ where a.order_id=b.id and a.trade_member_id=#{memberId}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml b/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml
index 4bc3f36..9978af7 100644
--- a/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml
+++ b/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml
@@ -90,4 +90,15 @@
total_profit=total_profit+#{profit}
where trade_member_id=#{tradeMemberId} and member_id=#{memberId}
</update>
+
+ <select id="selectFollowerCntByTradeMemberId" resultType="java.lang.Integer">
+ select count(1) from follow_follower_profit
+ where trade_member_id=#{tradeMemberId}
+ </select>
+
+ <select id="selectAllFollowerProfit" resultType="java.math.BigDecimal">
+ select sum(total_profit)
+ from follow_follower_profit
+ where trade_member_id=#{tradeMemberId}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/documentary/FollowTraderInfoDao.xml b/src/main/resources/mapper/documentary/FollowTraderInfoDao.xml
index 58e2101..1633b37 100644
--- a/src/main/resources/mapper/documentary/FollowTraderInfoDao.xml
+++ b/src/main/resources/mapper/documentary/FollowTraderInfoDao.xml
@@ -17,4 +17,10 @@
from follow_trader_info a, follow_follower_order_relation b
where a.member_id=b.trade_member_id and b.order_id=#{orderId}
</select>
+
+ <select id="selectAllTraderInfo" resultType="com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity">
+ select *
+ from follow_trader_info
+ where verify_status=1
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/documentary/FollowTraderProfitInfoDao.xml b/src/main/resources/mapper/documentary/FollowTraderProfitInfoDao.xml
index b2bc066..eb35811 100644
--- a/src/main/resources/mapper/documentary/FollowTraderProfitInfoDao.xml
+++ b/src/main/resources/mapper/documentary/FollowTraderProfitInfoDao.xml
@@ -32,5 +32,9 @@
and closing_type not in (4,5)
order by opening_time desc
</select>
-
+
+ <select id="selectTraderInfoProfitByMemberId" resultType="com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity">
+ select * from follow_trader_profit_info
+ where member_id=#{memberId}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/test/java/com/xcong/excoin/FollowTest.java b/src/test/java/com/xcong/excoin/FollowTest.java
index 43baad0..7cf737a 100644
--- a/src/test/java/com/xcong/excoin/FollowTest.java
+++ b/src/test/java/com/xcong/excoin/FollowTest.java
@@ -1,6 +1,7 @@
package com.xcong.excoin;
import com.xcong.excoin.modules.documentary.service.FollowOrderOperationService;
+import com.xcong.excoin.quartz.job.FollowProfitUpdateJob;
import com.xcong.excoin.utils.ThreadPoolUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
@@ -33,4 +34,12 @@
System.out.println(symbols.contains(symbol.replace("/USDT", "")));
}
+
+ @Resource
+ private FollowProfitUpdateJob followProfitUpdateJob;
+
+ @Test
+ public void updateJobTest() {
+ followProfitUpdateJob.traderProfitUpdate();
+ }
}
--
Gitblit v1.9.1