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