From 70ad97e3d7047adba6a1a136d4d6b7cb7d697b28 Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Sat, 05 Jun 2021 18:40:09 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java     |    4 ++
 src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java                   |    4 ++
 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java  |    1 
 src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java |    2 +
 src/main/resources/mapper/member/MemberDao.xml                                    |    9 ++++
 src/main/resources/mapper/otc/OtcOrderDao.xml                                     |   11 +++++
 src/test/java/com/xcong/excoin/OtcTest.java                                       |   10 +++++
 src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java                   |   51 +++++++++++++++++++++++++
 src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrder.java                   |    2 +
 src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java                  |    1 
 10 files changed, 94 insertions(+), 1 deletions(-)

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 ad95e15..2310b26 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
@@ -23,4 +23,5 @@
 
     public List<MemberEntity> selectAllMember();
 
+    List<MemberEntity> selectMemberListByReferer(@Param("list") List<String> list);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java
index 17d4448..8346487 100644
--- a/src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java
+++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberSettingEntity.java
@@ -35,4 +35,8 @@
      */
     private Integer messageReminder;
 
+    private BigDecimal otcReturnFirst;
+
+    private BigDecimal otcReturnSecond;
+
 }
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 ee0f5f4..0e42a48 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
@@ -180,6 +180,8 @@
         memberSettingEntity.setClosingSpread(BigDecimal.valueOf(2));
         memberSettingEntity.setForceParam(BigDecimal.valueOf(0.0085));
         memberSettingEntity.setMemberId(member.getId());
+        memberSettingEntity.setOtcReturnFirst(BigDecimal.valueOf(0.0002));
+        memberSettingEntity.setOtcReturnFirst(BigDecimal.valueOf(0.0001));
         memberSettingDao.insert(memberSettingEntity);
 
         String inviteId = ShareCodeUtil.toSerialCode(member.getId());
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java
index 99ddf7b..a71c727 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java
@@ -39,4 +39,8 @@
     List<ChatOrderVo> selectByMemberIdAndTargetId(@Param("memberId")Long memberId, @Param("targetId")long targetId);
 
     List<ChatOrderVo> selectOneByMemberIdAndTargetId(@Param("memberId")Long memberId, @Param("targetId")long targetId);
+
+    int updateIsReturnByOrderNo(@Param("isReturn") Integer isReturn, @Param("orderNo") String orderNo);
+
+    OtcOrder selectOrderUnEntrust(@Param("orderNo") String orderNo);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrder.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrder.java
index 0a7ee2f..dade3e0 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrder.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrder.java
@@ -91,4 +91,6 @@
     private String cardName;
 
     private String payType;
+
+    private Integer isReturn;
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java
index e925174..6d93c0f 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java
@@ -320,6 +320,7 @@
 
         this.baseMapper.updateOrderStatusByOrderNo(OtcOrder.STATUS_FINISH, null, otcOrder.getOrderNo());
         otcProducter.sendMarketBussinessMsg(otcOrder.getEntrustOrderId(), OtcOrder.STATUS_FINISH);
+        otcProducter.sendOrderReturn(buyOrder.getOrderNo());
     }
 
     @Override
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java
index 5ab02e6..1b615a3 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java
@@ -1,21 +1,32 @@
 package com.xcong.excoin.rabbit.consumer;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.xcong.excoin.configurations.RabbitMqConfig;
+import com.xcong.excoin.modules.member.dao.MemberDao;
+import com.xcong.excoin.modules.member.dao.MemberSettingDao;
+import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.member.entity.MemberSettingEntity;
+import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
 import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderDao;
 import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao;
 import com.xcong.excoin.modules.otc.dao.OtcOrderDao;
 import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
 import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
 import com.xcong.excoin.modules.otc.entity.OtcOrder;
+import com.xcong.excoin.utils.LogRecordUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 @Slf4j
@@ -31,6 +42,15 @@
 
     @Autowired
     private OtcOrderDao otcOrderDao;
+
+    @Autowired
+    private MemberDao memberDao;
+
+    @Autowired
+    private MemberSettingDao memberSettingDao;
+
+    @Autowired
+    private MemberWalletCoinDao memberWalletCoinDao;
 
     @RabbitListener(queues = RabbitMqConfig.QUEUE_MARKET_BUSSINESS)
     public void marketBussiness(String content) {
@@ -89,11 +109,40 @@
 
 
     @RabbitListener(queues = RabbitMqConfig.QUEUE_ORDER_RETURN)
+    @Transactional(rollbackFor = Exception.class)
     public void orderReturn(String content) {
         log.info("收到返佣消息:{}", content);
-        OtcOrder order = otcOrderDao.selectOrderByOrderNoAndType(content, OtcEntrustOrder.ORDER_TYPE_B);
+        OtcOrder order = otcOrderDao.selectOrderUnEntrust(content);
 
+        MemberEntity member = memberDao.selectById(order.getMemberId());
+        List<String> refererIds = StrUtil.split(member.getRefererIds(), ',');
 
+        List<MemberEntity> parentMembers = memberDao.selectMemberListByReferer(refererIds);
 
+        if (CollUtil.isNotEmpty(parentMembers)) {
+            int isFirst = 1;
+            for (MemberEntity parent : parentMembers) {
+                MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(parent.getId());
+
+                BigDecimal returnRatio = BigDecimal.ZERO;
+                if (isFirst == 1) {
+                    returnRatio = memberSetting.getOtcReturnFirst();
+                } else {
+                    returnRatio = memberSetting.getOtcReturnSecond();
+                }
+
+                BigDecimal returnAmount = order.getCoinAmount().multiply(returnRatio);
+
+                MemberWalletCoinEntity wallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(parent.getId(), "USDT");
+                memberWalletCoinDao.updateBlockBalance(wallet.getId(), returnAmount, BigDecimal.ZERO, 0);
+
+                LogRecordUtils.insertMemberAccountMoneyChange(parent.getId(),"订单返利:" + content, returnAmount, "USDT", 1, 1);
+                isFirst = 0;
+            }
+        }
+
+        order.setIsReturn(1);
+        otcOrderDao.updateIsReturnByOrderNo(1, content);
     }
+
 }
diff --git a/src/main/resources/mapper/member/MemberDao.xml b/src/main/resources/mapper/member/MemberDao.xml
index 27fb5e7..1d46325 100644
--- a/src/main/resources/mapper/member/MemberDao.xml
+++ b/src/main/resources/mapper/member/MemberDao.xml
@@ -49,4 +49,13 @@
     <select id="selectAllMember" resultType="com.xcong.excoin.modules.member.entity.MemberEntity">
         select * from member
     </select>
+
+    <select id="selectMemberListByReferer" 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 >
+        order by id desc limit 2
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/otc/OtcOrderDao.xml b/src/main/resources/mapper/otc/OtcOrderDao.xml
index abc90d5..4928e5b 100644
--- a/src/main/resources/mapper/otc/OtcOrderDao.xml
+++ b/src/main/resources/mapper/otc/OtcOrderDao.xml
@@ -139,4 +139,15 @@
 
     </select>
 
+    <update id="updateIsReturnByOrderNo">
+        update otc_order
+        set is_return=#{isReturn}
+        where order_no=#{orderNo}
+    </update>
+
+    <select id="selectOrderUnEntrust" resultType="com.xcong.excoin.modules.otc.entity.OtcOrder">
+        select * from otc_order
+        where order_no=#{orderNo} and member_id!=entrust_member_id
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/test/java/com/xcong/excoin/OtcTest.java b/src/test/java/com/xcong/excoin/OtcTest.java
index c939525..2f2a67e 100644
--- a/src/test/java/com/xcong/excoin/OtcTest.java
+++ b/src/test/java/com/xcong/excoin/OtcTest.java
@@ -9,6 +9,7 @@
 import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao;
 import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
 import com.xcong.excoin.quartz.job.OtcOrderJob;
+import com.xcong.excoin.rabbit.consumer.OtcConsumer;
 import com.xcong.excoin.rabbit.producer.OtcProducter;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
@@ -110,4 +111,13 @@
 
         System.out.println(one.multiply(two));
     }
+
+    @Autowired
+    private OtcConsumer otcConsumer;
+
+    @Test
+    public void returnMoneyTest() {
+//        otcConsumer.orderReturn("20210605446780002");
+        otcProducter.sendOrderReturn("20210605446780002");
+    }
 }

--
Gitblit v1.9.1