From 13eb3cd1d1533144c49901506c040a11ad3eb0c1 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 13 May 2021 18:12:36 +0800
Subject: [PATCH] modify
---
src/test/java/com/xcong/excoin/XchTest.java | 10 ++
src/main/java/com/xcong/excoin/rabbit/consumer/YunDingConsumer.java | 11 ++
src/main/resources/mapper/yunding/YdBasicLevelSettingDao.xml | 4 +
src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java | 13 +++
src/main/java/com/xcong/excoin/rabbit/producer/YunDingProducter.java | 7 +
src/main/resources/application-test.yml | 3
src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java | 3
src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicLevelSettingDao.java | 5 +
src/main/resources/mapper/yunding/YdOrderDao.xml | 6 +
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | 1
src/main/resources/mapper/member/MemberDao.xml | 18 ++++
src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java | 93 ++++++++++++++++++++++-
src/main/resources/application.yml | 3
src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java | 7 +
src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java | 41 +++++++---
15 files changed, 204 insertions(+), 21 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java b/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
index d61e5e8..ed5c83b 100644
--- a/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
+++ b/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
@@ -46,6 +46,9 @@
public static final String ROUTING_KEE_XCH_USDT_PRIFIT = "ROUTING_KEE_XCH_USDT_PRIFIT";
public static final String EXCHANGE_XCH = "EXCHANGE_XCH";
+ public static final String QUEUE_XCH_AUTO_AGENT = "QUEUE_XCH_AUTO_AGENT";
+ public static final String ROUTING_KEY_XCH_AUTO_AGENT = "ROUTING_KEY_XCH_AUTO_AGENT";
+
/**
* 撮合交易
@@ -161,6 +164,16 @@
}
@Bean
+ public Queue xchAutoAgentQueue() {
+ return new Queue(QUEUE_XCH_AUTO_AGENT, true);
+ }
+
+ @Bean
+ public Binding xchAutoAgentBinding() {
+ return BindingBuilder.bind(xchAutoAgentQueue()).to(xchExchange()).with(ROUTING_KEY_XCH_AUTO_AGENT);
+ }
+
+ @Bean
public Queue testQueue() {
return new Queue(QUEUE_TEST, true);
}
diff --git a/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java b/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
index 6e2716a..e73f0d2 100644
--- a/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
+++ b/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
@@ -6,6 +6,7 @@
import com.xcong.excoin.modules.member.parameter.vo.NeedMoneyMemberVo;
import org.apache.ibatis.annotations.Param;
+import java.lang.reflect.Member;
import java.util.List;
/**
@@ -24,4 +25,10 @@
public List<MemberEntity> selectAllMember();
List<MemberEntity> selectYdParentAgent(@Param("list") List<String> list);
+
+ List<MemberEntity> selectMemberByInviteIds(@Param("list") List<String> list);
+
+ List<MemberEntity> selectMemberByRefererId(@Param("refererId") String refererId);
+
+ List<MemberEntity> selectTeamAgentList(@Param("inviteId") String inviteId);
}
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
index 8487e17..34ce013 100644
--- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -166,7 +166,6 @@
member.setRefererId(registerDto.getRefererId());
member.setAccountStatus(MemberEntity.ACCOUNT_STATUS_ENABLE);
member.setAccountType(MemberEntity.ACCOUNT_TYPE_NORMAL);
- member.setAgentLevel(MemberEntity.ACCOUNT_AGENT_LEVEL);
member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_UN_SUBMIT);
member.setIsForce(1);
member.setIsProfit(0);
diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicLevelSettingDao.java b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicLevelSettingDao.java
index 08c072c..b3590a5 100644
--- a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicLevelSettingDao.java
+++ b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicLevelSettingDao.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
public interface YdBasicLevelSettingDao extends BaseMapper<YdBasicLevelSettingEntity> {
+
+ List<YdBasicLevelSettingEntity> selectAgentLevelSetting();
}
diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java
index a571df0..3d7d628 100644
--- a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java
+++ b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java
@@ -10,6 +10,7 @@
import com.xcong.excoin.modules.yunding.vo.YdOrderVo;
import org.apache.ibatis.annotations.Param;
+import java.math.BigDecimal;
import java.util.List;
public interface YdOrderDao extends BaseMapper<YdOrderEntity> {
@@ -27,4 +28,6 @@
YdOrderVo selectOrderByMemberIdAndId(@Param("memberId")Long memberId, @Param("id")Long id);
IPage<AgentVo> getAgentList(Page<AgentVo> page, @Param("record") YdBasicLevelSettingEntity ydBasicLevelSettingEntity);
+
+ List<YdOrderEntity> selectTeamAllPower(@Param("inviteId") String inviteId);
}
diff --git a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java
index a195a60..ef83a33 100644
--- a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java
@@ -9,6 +9,7 @@
import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
+import com.xcong.excoin.modules.yunding.dao.YdBasicLevelSettingDao;
import com.xcong.excoin.modules.yunding.dao.YdOrderDao;
import com.xcong.excoin.modules.yunding.dao.YdProductDao;
import com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity;
@@ -18,12 +19,10 @@
import com.xcong.excoin.utils.LogRecordUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@Service
public class XchProfitServiceImpl implements XchProfitService {
@@ -40,12 +39,97 @@
@Autowired
private YdProductDao ydProductDao;
+ @Autowired
+ private YdBasicLevelSettingDao ydBasicLevelSettingDao;
+
@Override
+ @Transactional(rollbackFor = Exception.class)
public void autoBeAgent(Long id) {
+ MemberEntity member = memberDao.selectById(id);
+
+ List<MemberEntity> members = new ArrayList<>();
+ List<String> inviteIds = StrUtil.split(member.getRefererIds(), ',');
+ if (CollUtil.isNotEmpty(inviteIds)) {
+ members = memberDao.selectMemberByInviteIds(inviteIds);
+ }
+ members.add(member);
+ List<YdBasicLevelSettingEntity> settings = ydBasicLevelSettingDao.selectAgentLevelSetting();
+
+ if (CollUtil.isNotEmpty(members)) {
+ for (MemberEntity memberEntity : members) {
+ MemberEntity update = new MemberEntity();
+ update.setId(memberEntity.getId());
+
+ if (memberEntity.getAgentLevel() == null) {
+ // 判断是否达到市代标准
+ if(becomeSd(memberEntity, settings.get(1))) {
+ update.setAgentLevel(2);
+ memberDao.updateById(update);
+ }
+ } else if (memberEntity.getAgentLevel() != null && member.getAgentLevel() == 2){
+ // 判断是否达到总代标准
+ if(becomeZd(memberEntity, settings.get(0))) {
+ update.setAgentLevel(1);
+ memberDao.updateById(update);
+ }
+ }
+ }
+ }
}
+ /**
+ * 市代 团队(包含自己)算力达到指定数量
+ * @param member
+ * @param basicLevelSetting
+ * @return
+ */
+ private Boolean becomeSd(MemberEntity member, YdBasicLevelSettingEntity basicLevelSetting) {
+ List<YdOrderEntity> orders = ydOrderDao.selectTeamAllPower(member.getInviteId());
+ BigDecimal totalPower = BigDecimal.ZERO;
+ if (CollUtil.isNotEmpty(orders)) {
+ for (YdOrderEntity order : orders) {
+ if ("P".equals(order.getYdProductEntity().getProUnit())) {
+ totalPower = totalPower.add(BigDecimal.valueOf(order.getQuantity() * 1024));
+ } else {
+ totalPower = totalPower.add(BigDecimal.valueOf(order.getQuantity()));
+ }
+ }
+ }
+
+ BigDecimal needPower = basicLevelSetting.getCalculationPower().multiply(BigDecimal.valueOf(1024));
+ return totalPower.compareTo(needPower) > 0;
+ }
+
+ /**
+ * 总代 团队(包含自己)算力达到指定数量,并下级存在3个市代且三个市代不在同一条线
+ *
+ * @param member
+ * @param basicLevelSetting
+ * @return
+ */
+ private Boolean becomeZd(MemberEntity member, YdBasicLevelSettingEntity basicLevelSetting) {
+ // 判断算力是否达到标准
+ if(!becomeSd(member, basicLevelSetting)) {
+ return false;
+ }
+
+ // 判断下级存在3个市代且不在同一条线上
+ List<MemberEntity> childs = memberDao.selectMemberByRefererId(member.getInviteId());
+ int i = 0;
+ if (CollUtil.isNotEmpty(childs)) {
+ for (MemberEntity child : childs) {
+ List<MemberEntity> agents = memberDao.selectTeamAgentList(child.getInviteId());
+ if (agents.size() > 0) {
+ i++;
+ }
+ }
+ }
+ return i >= 3;
+ }
+
@Override
+ @Transactional(rollbackFor = Exception.class)
public void agentUsdtProfitDistributor() {
List<YdOrderEntity> orders = ydOrderDao.selectNeedReturnOrders();
@@ -57,6 +141,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void usdtProfitDistributorByOrderId(Long id) {
YdOrderEntity ydOrderEntity = ydOrderDao.selectById(id);
usdtProfitDistributor(ydOrderEntity);
diff --git a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
index 7c60bb3..a8155ed 100644
--- a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
@@ -30,8 +30,10 @@
import com.xcong.excoin.modules.yunding.entity.YdProductEntity;
import com.xcong.excoin.modules.yunding.service.YunDingService;
import com.xcong.excoin.modules.yunding.vo.*;
+import com.xcong.excoin.rabbit.producer.YunDingProducter;
import com.xcong.excoin.utils.LogRecordUtils;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -60,6 +62,8 @@
private YdBasicLevelSettingDao ydBasicLevelSettingDao;
@Resource
private MemberDao memberDao;
+ @Autowired
+ private YunDingProducter yunDingProducter;
@Override
public Result findAllInfo() {
@@ -240,6 +244,9 @@
//生成流水记录
LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "购买产品", multiplyUsdt,
"USDT", 1, 3, ydOrderEntity.getId());
+
+ yunDingProducter.sendYunDingUsdtProfit(ydOrderEntity.getId());
+ yunDingProducter.sendYunDingAutoAgent(ydOrderEntity.getMemberId());
return Result.ok("支付成功");
}
@@ -463,8 +470,6 @@
log.info("购买代理级别");
MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
Long memberId = memberEntity.getId();
-// Long memberId = 442L;
-// MemberEntity memberEntity = memberDao.selectById(memberId);
/**
* 获取代理级别(Level字段越小,级别越高)
@@ -496,21 +501,29 @@
Integer levelTo = ydBasicLevelSettingEntityTo.getLevel();
//获取当前代理级别
Integer agentLevel = memberEntity.getAgentLevel();
- long agentId = Long.parseLong(agentLevel.toString());
+
+ BigDecimal salePrice = ydBasicLevelSettingEntityTo.getSalePrice();
Integer levelNow = 0;
- YdBasicLevelSettingEntity ydBasicLevelSettingEntityNow = ydBasicLevelSettingDao.selectById(agentId);
- if(ObjectUtil.isNotEmpty(ydBasicLevelSettingEntityNow)){
- levelNow = ydBasicLevelSettingEntityNow.getLevel();
- if(levelTo >= levelNow){
- return Result.fail("无法购买");
+ if (agentLevel != null) {
+ long agentId = Long.parseLong(agentLevel.toString());
+ YdBasicLevelSettingEntity ydBasicLevelSettingEntityNow = ydBasicLevelSettingDao.selectById(agentId);
+ if(ObjectUtil.isNotEmpty(ydBasicLevelSettingEntityNow)){
+ levelNow = ydBasicLevelSettingEntityNow.getLevel();
+ if(levelTo.equals(levelNow)){
+ return Result.fail("不能重复购买当前代理");
+ }
+
+ if (levelNow < levelTo) {
+ return Result.fail("不能购买低于当前代理");
+ }
+ }
+
+ //用户如果已经有等级则减少差价
+ if(levelNow != 0){
+ salePrice = salePrice.subtract(ydBasicLevelSettingEntityNow.getSalePrice());
}
}
- BigDecimal salePrice = ydBasicLevelSettingEntityTo.getSalePrice();
- //用户如果已经有等级则减少差价
- if(levelNow != 0){
- salePrice = salePrice.subtract(ydBasicLevelSettingEntityNow.getSalePrice());
- }
//获取用户当前USDT余额
MemberWalletCoinEntity usdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT");
BigDecimal availableBalance = usdt.getAvailableBalance();
@@ -526,6 +539,8 @@
LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "购买代理", salePrice,
"USDT", 1, 8, memberId);
+
+ yunDingProducter.sendYunDingAutoAgent(memberId);
return Result.ok("购买成功");
}
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/YunDingConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/YunDingConsumer.java
index 865220e..165ef91 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/YunDingConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/YunDingConsumer.java
@@ -19,9 +19,18 @@
private XchProfitService xchProfitService;
@RabbitListener(queues = RabbitMqConfig.QUEUE_XCH_USDT_PRIFIT)
- public void addFollowOrder(Message message, Channel channel) {
+ public void xchUsdtProfit(Message message, Channel channel) {
String content = new String(message.getBody());
log.info("USDT返利 : {}", content);
xchProfitService.usdtProfitDistributorByOrderId(Long.parseLong(content));
}
+
+ @RabbitListener(queues = RabbitMqConfig.QUEUE_XCH_AUTO_AGENT)
+ public void xchAutoAgent(Message message, Channel channel) {
+ String content = new String(message.getBody());
+ log.info("自动升级代理消息 : {}", content);
+ xchProfitService.autoBeAgent(Long.parseLong(content));
+ }
+
+
}
diff --git a/src/main/java/com/xcong/excoin/rabbit/producer/YunDingProducter.java b/src/main/java/com/xcong/excoin/rabbit/producer/YunDingProducter.java
index 261dea0..555234b 100644
--- a/src/main/java/com/xcong/excoin/rabbit/producer/YunDingProducter.java
+++ b/src/main/java/com/xcong/excoin/rabbit/producer/YunDingProducter.java
@@ -25,7 +25,14 @@
}
public void sendYunDingUsdtProfit(Long id) {
+ log.info("发送购买矿机USDT返利消息:{}", id);
CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID());
rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_XCH, RabbitMqConfig.ROUTING_KEE_XCH_USDT_PRIFIT, id.toString(), correlationData);
}
+
+ public void sendYunDingAutoAgent(Long memberId) {
+ log.info("发送自动升级代理消息:{}", memberId);
+ CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID());
+ rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_XCH, RabbitMqConfig.ROUTING_KEY_XCH_AUTO_AGENT, memberId.toString(), correlationData);
+ }
}
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 26cf4aa..27b403d 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -101,7 +101,8 @@
loop-job: false
rabbit-consumer: false
block-job: true
- xch-job: true
+ xch-job: false
+ yunding-consumer: true
aliyun:
oss:
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3ff3474..8a1f6b0 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -107,7 +107,8 @@
loop-job: false
rabbit-consumer: false
block-job: false
- xch-job: true
+ xch-job: false
+ yunding-consumer: true
aliyun:
oss:
diff --git a/src/main/resources/mapper/member/MemberDao.xml b/src/main/resources/mapper/member/MemberDao.xml
index a16cad1..056f168 100644
--- a/src/main/resources/mapper/member/MemberDao.xml
+++ b/src/main/resources/mapper/member/MemberDao.xml
@@ -68,4 +68,22 @@
</foreach >
order by id desc
</select>
+
+ <select id="selectMemberByInviteIds" resultType="com.xcong.excoin.modules.member.entity.MemberEntity">
+ select * from member
+ where invite_id != 'rxadr3' and invite_id IN
+ <foreach collection = "list" item = "item" separator="," open = "(" close = ")" >
+ #{item}
+ </foreach >
+ </select>
+
+ <select id="selectMemberByRefererId" resultType="com.xcong.excoin.modules.member.entity.MemberEntity">
+ select * from member where referer_id=#{refererId} and invite_id!=#{refererId}
+ </select>
+
+ <select id="selectTeamAgentList" resultType="com.xcong.excoin.modules.member.entity.MemberEntity">
+ select * from member a
+ where (find_in_set(#{inviteId}, a.referer_ids) or invite_id=#{inviteId})
+ and agent_level in (1, 2)
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/yunding/YdBasicLevelSettingDao.xml b/src/main/resources/mapper/yunding/YdBasicLevelSettingDao.xml
index 674a49c..2d6be44 100644
--- a/src/main/resources/mapper/yunding/YdBasicLevelSettingDao.xml
+++ b/src/main/resources/mapper/yunding/YdBasicLevelSettingDao.xml
@@ -4,4 +4,8 @@
<mapper namespace="com.xcong.excoin.modules.yunding.dao.YdBasicLevelSettingDao">
+
+ <select id="selectAgentLevelSetting" resultType="com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity">
+ select * from yd_basic_level_setting
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/yunding/YdOrderDao.xml b/src/main/resources/mapper/yunding/YdOrderDao.xml
index f462c7f..845cc1d 100644
--- a/src/main/resources/mapper/yunding/YdOrderDao.xml
+++ b/src/main/resources/mapper/yunding/YdOrderDao.xml
@@ -87,4 +87,10 @@
s.id = #{id}
</update>
+ <select id="selectTeamAllPower" resultMap="orderMap">
+ select a.*, c.id p_id, c.pro_unit
+ from yd_order a
+ inner join (select * from member a where find_in_set(#{inviteId}, a.referer_ids) or invite_id=#{inviteId}) b on a.member_id=b.id
+ left join yd_product c on c.id = a.product_id
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/test/java/com/xcong/excoin/XchTest.java b/src/test/java/com/xcong/excoin/XchTest.java
index c813e87..1e62deb 100644
--- a/src/test/java/com/xcong/excoin/XchTest.java
+++ b/src/test/java/com/xcong/excoin/XchTest.java
@@ -25,4 +25,14 @@
String day2 = "2021-05-12 23:01:00";
System.out.println(DateUtil.between(DateUtil.parse(day1), DateUtil.parse(day2), DateUnit.DAY));
}
+
+ @Test
+ public void becomeAgentTest() {
+ xchProfitService.autoBeAgent(40L);
+ }
+
+ @Test
+ public void orderUsdtProfitTest() {
+ xchProfitService.usdtProfitDistributorByOrderId(7L);
+ }
}
--
Gitblit v1.9.1