From 565db646d1f2e5ba8e680f97555dd6b18623bbde Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 21 May 2021 11:33:13 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java                         |    6 ++
 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java        |    4 
 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java |   14 ++++
 src/main/resources/mapper/otc/OtcOrderDao.xml                                           |   18 ++++++
 src/test/java/com/xcong/excoin/OtcTest.java                                             |   20 ++++++
 src/main/java/com/xcong/excoin/quartz/job/OtcOrderJob.java                              |   71 +++++++++++++++++++++++
 src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java                         |    2 
 src/main/resources/application.yml                                                      |    1 
 8 files changed, 133 insertions(+), 3 deletions(-)

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 900044d..61087ef 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
@@ -18,4 +18,10 @@
     int updateOrderStatusByOrderNo(@Param("status") Integer status, @Param("payName") String payName, @Param("orderNo") String orderNo);
 
     OtcOrder selectOrderByOrderNoAndType(@Param("orderNo") String orderNo, @Param("orderType") String orderType);
+
+    List<OtcOrder> selectOrderListWithStatusAndType(@Param("type") String orderType, @Param("status") Integer status);
+
+    Integer selectMemberCntForEntrust(@Param("entrustMemberId") Long entrustMemberId);
+
+    Integer selectTotalOrderCount(@Param("entrustMemberId") Long entrustMemberId, @Param("status") Integer status);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
index 2002879..6f3722c 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
@@ -75,7 +75,19 @@
             memberWalletCoinDao.updateFrozenBalance(member.getId(), coinWallet.getId(), totalAmount);
         }
 
-//        OtcMarketBussiness mb = otcMarketBussinessDao.selectMarketBussinessByMemberId(member.getId());
+        OtcMarketBussiness mb = otcMarketBussinessDao.selectMarketBussinessByMemberId(member.getId());
+        if (mb == null) {
+            OtcMarketBussiness otcMb = new OtcMarketBussiness();
+            otcMb.setMemberId(member.getId());
+            otcMb.setAvgCoinTime(0);
+            otcMb.setAvgPayTime(0);
+            otcMb.setTotalOrderCnt(0);
+            otcMb.setBuyCnt(0);
+            otcMb.setFinishRatio(BigDecimal.ZERO);
+            otcMb.setStatus(OtcMarketBussiness.CHECK_PASS);
+            otcMarketBussinessDao.insert(otcMb);
+        }
+
         if (member.getIsTrader() == 2) {
             otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_N);
         } else {
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 41b7061..60f3660 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
@@ -272,7 +272,7 @@
         buyDetail.setStatus(buyOrder.getStatus());
         buyDetail.setTotalAmount(buyOrder.getTotalAmount());
         buyDetail.setUnitPrice(buyOrder.getUnitPrice());
-        buyDetail.setCreateTime(new Date());
+        buyDetail.setCreateTime(buyOrder.getCreateTime());
         buyDetail.setIsMb(member.getIsTrader());
 
         OtcOrder saleOrder = this.baseMapper.selectOrderByOrderNoAndType(otcOrder.getOrderNo(), OtcEntrustOrder.ORDER_TYPE_S);
@@ -320,7 +320,7 @@
         saleDetail.setStatus(saleOrder.getStatus());
         saleDetail.setTotalAmount(saleOrder.getTotalAmount());
         saleDetail.setUnitPrice(saleOrder.getUnitPrice());
-        saleDetail.setCreateTime(new Date());
+        saleDetail.setCreateTime(saleOrder.getCreateTime());
         saleDetail.setIsMb(member.getIsTrader());
         saleDetail.setPayName(saleOrder.getPayName());
 
diff --git a/src/main/java/com/xcong/excoin/quartz/job/OtcOrderJob.java b/src/main/java/com/xcong/excoin/quartz/job/OtcOrderJob.java
new file mode 100644
index 0000000..b989a49
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/quartz/job/OtcOrderJob.java
@@ -0,0 +1,71 @@
+package com.xcong.excoin.quartz.job;
+
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+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.modules.otc.service.OtcOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "app", name = "otc-job", havingValue = "true")
+public class OtcOrderJob {
+
+    @Autowired
+    private OtcOrderDao otcOrderDao;
+    @Autowired
+    private OtcEntrustOrderDao otcEntrustOrderDao;
+    @Autowired
+    private OtcMarketBussinessDao otcMarketBussinessDao;
+
+
+    @Scheduled(cron = "0/1 * * * * ? ")
+    public void autoCancelOrder() {
+        List<OtcOrder> otcOrders = otcOrderDao.selectOrderListWithStatusAndType(OtcEntrustOrder.ORDER_TYPE_B, OtcOrder.STATUS_SUBMIT);
+        if (CollUtil.isNotEmpty(otcOrders)) {
+            for (OtcOrder otcOrder : otcOrders) {
+                long between = DateUtil.between(new Date(), DateUtil.offsetMinute(otcOrder.getCreateTime(), 30), DateUnit.SECOND, false);
+
+                if (between <= 0) {
+                    otcEntrustOrderDao.updateRemainAmount(otcOrder.getEntrustOrderId(), otcOrder.getCoinAmount());
+                    otcOrderDao.updateOrderStatusByOrderNo(OtcOrder.STATUS_CANCEL, null, otcOrder.getOrderNo());
+                }
+            }
+        }
+    }
+
+    @Scheduled(cron = "0 0/5 * * * ? ")
+    public void marketBussinessJob() {
+        List<OtcMarketBussiness> list = otcMarketBussinessDao.selectList(null);
+        if (CollUtil.isNotEmpty(list)) {
+            for (OtcMarketBussiness mb : list) {
+                // 服务人数
+                Integer buyCnt = otcOrderDao.selectMemberCntForEntrust(mb.getMemberId());
+                // 总单数
+                Integer totalCnt = otcOrderDao.selectTotalOrderCount(mb.getMemberId(), null);
+                // 完成率
+                Integer finishCnt = otcOrderDao.selectTotalOrderCount(mb.getMemberId(), OtcOrder.STATUS_FINISH);
+                BigDecimal finishRatio = BigDecimal.valueOf(finishCnt).divide(BigDecimal.valueOf(totalCnt), 4, BigDecimal.ROUND_DOWN);
+                // 平均付款时间
+
+                // 平均放币时间
+            }
+        }
+    }
+
+}
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 2d43b3e..147842c 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/OtcConsumer.java
@@ -3,10 +3,12 @@
 import com.xcong.excoin.configurations.RabbitMqConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Component;
 
 @Slf4j
 @Component
+@ConditionalOnProperty(prefix = "app", name = "otc-job", havingValue = "true")
 public class OtcConsumer {
 
 
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index bf3ccc3..a376e66 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -107,6 +107,7 @@
   loop-job: false
   rabbit-consumer: false
   block-job: false
+  otc-job: true
 
 aliyun:
   oss:
diff --git a/src/main/resources/mapper/otc/OtcOrderDao.xml b/src/main/resources/mapper/otc/OtcOrderDao.xml
index ad89f48..fbdab7a 100644
--- a/src/main/resources/mapper/otc/OtcOrderDao.xml
+++ b/src/main/resources/mapper/otc/OtcOrderDao.xml
@@ -52,4 +52,22 @@
         select * from otc_order
         where order_no=#{orderNo} and order_type=#{orderType}
     </select>
+
+    <select id="selectOrderListWithStatusAndType" resultType="com.xcong.excoin.modules.otc.entity.OtcOrder">
+        select * from otc_order
+        where order_type=#{type} and status=#{status}
+    </select>
+
+    <select id="selectMemberCntForEntrust" resultType="java.lang.Integer">
+        select count(distinct member_id) from otc_order
+        where entrust_member_id=#{entrustMemberId} and status != 4 and entrust_member_id!=member_id
+    </select>
+
+    <select id="selectTotalOrderCount" resultType="java.lang.Integer">
+        select count(1) from otc_order
+        where entrust_member_id=#{entrustMemberId} and entrust_member_id!=member_id
+        <if test="status != null">
+            and status #{status}
+        </if>
+    </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
new file mode 100644
index 0000000..ea66dc0
--- /dev/null
+++ b/src/test/java/com/xcong/excoin/OtcTest.java
@@ -0,0 +1,20 @@
+package com.xcong.excoin;
+
+import com.xcong.excoin.rabbit.producer.OtcProducter;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@Slf4j
+@SpringBootTest
+public class OtcTest {
+
+    @Autowired
+    private OtcProducter otcProducter;
+
+    @Test
+    public void rabbitTest() {
+        otcProducter.sendMarketBussinessMsg("123456");
+    }
+}

--
Gitblit v1.9.1