From 62fcbc4dda69e739f05d547cd0b9a042004186b4 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 27 Nov 2023 15:05:03 +0800
Subject: [PATCH] 匹配

---
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java     |   56 ++++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java                  |    9 ++++
 src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java |    1 
 src/main/resources/mapper/modules/MallMoneyFlowMapper.xml                |   12 ++++++
 src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java        |    2 +
 src/main/java/cc/mrbird/febs/mall/service/IAgentService.java             |    2 +
 6 files changed, 82 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
index 8113124..5fca52d 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
@@ -10,6 +10,7 @@
  **/
 @Getter
 public enum MoneyFlowTypeNewEnum {
+    TOKEN_BUY_FROZEN_RETURN(13,"预约令牌"),
     PAY(12,"支付"),
     NFT_OUT_FEE(11,"NFT提现手续费"),
     NFT_OUT(10,"NFT提现"),
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
index a1ea6f4..64172e1 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
@@ -49,4 +49,6 @@
     void updateRemarkAndIsReturnById(@Param("remark")String remarkNum, @Param("id")Long id);
 
     MallMoneyFlow selectByOrderNoAndMemberId(@Param("orderNo")String orderNo, @Param("memberId")Long memberId, @Param("isReturn")int isReturn);
+
+    MallMoneyFlow selectByOrderAndType(@Param("orderNo")String orderNo, @Param("type")int type, @Param("flowType")int flowType, @Param("memberId")Long memberId);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
index 11a3cd6..31b5422 100644
--- a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -135,6 +135,15 @@
     }
 
     /**
+     * 买单
+     * 看是否是开始显示订单的时间段,超出结束时间的买单,全部超时返还令牌
+     */
+    @Scheduled(cron = "0 0/30 * * * ? ")
+    public void timeGetOrderBuyCancel() {
+        agentService.timeGetOrderBuyCancel();
+    }
+
+    /**
      * 卖单
      * 看是否是开始显示订单的时间段,超出结束时间的卖单,全部超时失败
      */
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
index ca99fa2..019f4bd 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -45,4 +45,6 @@
     void timeGetOrderBuy();
 
     void timeGetOrderSell();
+
+    void timeGetOrderBuyCancel();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index 69dc437..0ecbbaa 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -64,6 +64,7 @@
     private final MallProductSellRecordMapper mallProductSellRecordMapper;
     private final MallProductNftMapper mallProductNftMapper;
     private final AgentProducer agentProducer;
+    private final MallMemberAmountMapper mallMemberAmountMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -950,6 +951,61 @@
         }
     }
 
+    @Override
+    public void timeGetOrderBuyCancel() {
+        /**
+         * nft产品周期到期的已完成买单变成卖单
+         * 计算收益,本金
+         */
+        List<MallProductNft> mallProductNfts = mallProductNftMapper.selectList(null);
+        if(CollUtil.isEmpty(mallProductNfts)){
+            return;
+        }
+        DateTime now = DateUtil.date();
+        for(MallProductNft mallProductNft : mallProductNfts){
+            Long nftId = mallProductNft.getId();
+            List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectListByStateAndProductNFTId(
+                    ProductEnum.PRODUCT_BUY_ON_GOING.getValue(),
+                    nftId,
+                    ProductEnum.PRODUCT_BUY_MATE_STATE_FAIL.getValue());
+            if(CollUtil.isEmpty(mallProductBuys)){
+                continue;
+            }
+            for(MallProductBuy mallProductBuy : mallProductBuys){
+                /**
+                 * 返回令牌
+                 * 预约记录超时
+                 */
+                String orderNo = mallProductBuy.getOrderNo();
+                mallProductBuy.setState(ProductEnum.PRODUCT_BUY_TIMEOUT.getValue());
+                mallProductBuyMapper.updateById(mallProductBuy);
+
+                Long memberId = mallProductBuy.getMemberId();
+                MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectByOrderAndType(orderNo,
+                        MoneyFlowTypeNewEnum.TOKEN_BUY_FROZEN.getValue(),
+                        FlowTypeNewEnum.TOKEN.getValue(),
+                        memberId);
+                if(ObjectUtil.isEmpty(mallMoneyFlow)){
+                    continue;
+                }
+                BigDecimal absAmount = mallMoneyFlow.getAmount().abs();
+                MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
+                mallMemberAmount.setTokenAva(mallMemberAmount.getTokenAva().add(absAmount));
+                mallMemberAmount.setTokenFrozen(mallMemberAmount.getTokenFrozen().subtract(absAmount));
+                mallMemberAmountMapper.updateTokenAvaAndTokenFrozenById(mallMemberAmount);
+
+                mallMoneyFlowService.addMoneyFlow(
+                        memberId,
+                        absAmount,
+                        MoneyFlowTypeNewEnum.TOKEN_BUY_FROZEN_RETURN.getValue(),
+                        orderNo,
+                        null,
+                        FlowTypeNewEnum.TOKEN.getValue(),
+                        MoneyFlowTypeNewEnum.TOKEN_BUY_FROZEN_RETURN.getDescrition());
+            }
+        }
+    }
+
     public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva,
                            BigDecimal nftFee,BigDecimal fcmFeeCnt){
         String orderNo = MallUtils.getOrderNum("NFT");
diff --git a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
index 8fe8066..3944b3e 100644
--- a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
+++ b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
@@ -249,4 +249,16 @@
         ORDER BY
             a.created_time ASC
     </select>
+
+    <select id="selectByOrderAndType" resultType="cc.mrbird.febs.mall.entity.MallMoneyFlow">
+        SELECT
+            *
+        FROM
+            mall_money_flow a
+        WHERE
+            a.type = #{type}
+          AND a.flow_type = #{flowType}
+          AND a.member_id = #{memberId}
+          AND a.order_no = #{orderNo}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1