From a516c9461d67482d669c1e64a001c06d7e28f218 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Mon, 05 Jan 2026 18:21:30 +0800
Subject: [PATCH] ipo

---
 trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/UserPromiseRecordServiceImpl.java    |   12 ++-
 trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java |   19 ++++++
 trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java           |    3 +
 trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java                           |   74 +++++++++++++++++++++++-
 trading-order-bean/src/main/java/com/yami/trading/bean/ipo/ApplyNewSharesOrder.java                        |    3 +
 trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java  |   10 ++-
 6 files changed, 108 insertions(+), 13 deletions(-)

diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java
index 388c5f3..58ba408 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java
@@ -15,6 +15,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -132,7 +133,7 @@
                 if (applyNewSharesOrderService.subscribe(order)) {
                     order.setSubscribedCount(1);
                     order.setUserPromiseCount(1);
-                    order.setSubscribedAmount(order.getRequiredNumber());
+                    //order.setSubscribedAmount(order.getRequiredNumber());
                 }
             }
             order.setStatus(model.getStatus());
@@ -140,4 +141,20 @@
         applyNewSharesOrderService.updateBatchById(list);
         return  Result.succeed();
     }
+
+    @ApiOperation(value = "解锁")
+    @PostMapping("unLock")
+    public  Result unLock(String orderNo){
+        if (StringUtils.isEmpty(orderNo)){
+            throw new BusinessException("请选择申购订单记录");
+        }
+        System.out.println(orderNo);
+        ApplyNewSharesOrder order= applyNewSharesOrderService.findByOrderNo(orderNo);
+        if (order == null){
+            throw new BusinessException("未查到订单");
+        }
+        order.setUnLock(1);
+        applyNewSharesOrderService.updateById(order);
+        return  Result.succeed();
+    }
 }
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java
index ae70a8d..92c7b49 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java
@@ -1,9 +1,14 @@
 package com.yami.trading.admin.task;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.trading.bean.ipo.ApplyNewSharesOrder;
 import com.yami.trading.bean.ipo.UserPromiseRecord;
+import com.yami.trading.bean.model.MoneyLog;
 import com.yami.trading.bean.model.Wallet;
+import com.yami.trading.common.constants.Constants;
+import com.yami.trading.service.MoneyLogService;
 import com.yami.trading.service.WalletService;
+import com.yami.trading.service.ipo.ApplyNewSharesOrderService;
 import com.yami.trading.service.ipo.UserPromiseRecordService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,6 +38,12 @@
     @Autowired
     UserPromiseRecordService userPromiseRecordService;
 
+    @Autowired
+    ApplyNewSharesOrderService applyNewSharesOrderService;
+
+    @Autowired
+    MoneyLogService moneyLogService;
+
     /**
      * 待补自动扣费
      */
@@ -45,7 +56,7 @@
         if (syncINStockDataLock.tryLock()) {
             try {
                 syncINStockData.set(true);
-                LambdaQueryWrapper<Wallet> queryWrapper = new LambdaQueryWrapper<>();
+                /*LambdaQueryWrapper<Wallet> queryWrapper = new LambdaQueryWrapper<>();
                 queryWrapper.gt(Wallet::getMoney, BigDecimal.ZERO);
                 queryWrapper.gt(Wallet::getAmountToBeCovered, BigDecimal.ZERO);
                 List<Wallet> walletList = walletService.list(queryWrapper);
@@ -79,9 +90,66 @@
                         }
                         walletService.updateById(wallet);
                     });
+                }*/
+                LambdaQueryWrapper<ApplyNewSharesOrder> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(ApplyNewSharesOrder::getSell, 0);
+                queryWrapper.gt(ApplyNewSharesOrder::getSubscribedAmount, BigDecimal.ZERO);
+                queryWrapper.gt(ApplyNewSharesOrder::getRequiredNumber, BigDecimal.ZERO);
+                queryWrapper.apply("subscribed_amount < required_number");
+                List<ApplyNewSharesOrder> orders = applyNewSharesOrderService.list(queryWrapper);
+                if (!orders.isEmpty()) {
+                    log.info("==================进入待补自动扣费================");
+                    orders.forEach((order) -> {
+                        //待补多少
+                        BigDecimal amt = order.getRequiredNumber().subtract(order.getSubscribedAmount());
+                        Wallet wallet =walletService.findByUserId(order.getUserId());
+                        BigDecimal amountBefore = wallet.getMoney();
+                        if (wallet.getMoney().compareTo(BigDecimal.ZERO) > 0) { //有钱扣款
+                            Boolean isDb = false;
+                            if (wallet.getMoney().compareTo(amt) >= 0) {
+                                wallet.setMoney(wallet.getMoney().subtract(amt));
+                                order.setSubscribedAmount(order.getSubscribedAmount().add(amt));
+
+                                log.info("订单{}已补完待补", order.getOrderNo());
+                            } else {
+                                isDb = true;
+                                amt = wallet.getMoney();
+                                order.setSubscribedAmount(order.getSubscribedAmount().add(amt));
+                                log.info("订单{}补待补{}", order.getOrderNo(), amt);
+                                //资金不足 进入待补
+                                wallet.setMoney(BigDecimal.ZERO);
+                            }
+                            applyNewSharesOrderService.updateById(order);
+                            walletService.updateById(wallet);
+
+                            MoneyLog moneyLog = new MoneyLog();
+                            moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_IPO);
+                            moneyLog.setAmountBefore(amountBefore);
+                            moneyLog.setAmount(amt.negate());
+                            moneyLog.setAmountAfter(amountBefore.subtract(amt).compareTo(BigDecimal.ZERO) <= 0 ?
+                                    BigDecimal.ZERO : amountBefore.subtract(amt));
+                            moneyLog.setLog(order.getSymbolCode() + "新股认缴补缴" + order.getOrderNo());
+                            moneyLog.setUserId(order.getUserId());
+                            moneyLog.setWalletType(Constants.WALLET);
+                            moneyLog.setContentType(Constants.MONEYLOG_CATEGORY_IPO);
+                            moneyLogService.save(moneyLog);
+
+                            LambdaQueryWrapper<UserPromiseRecord> queryWrapper2 = new LambdaQueryWrapper<>();
+                            queryWrapper2.eq(UserPromiseRecord::getUserId, wallet.getUserId());
+                            queryWrapper2.eq(UserPromiseRecord::getStatus, 1);
+                            queryWrapper2.eq(UserPromiseRecord::getOrderNo, order.getOrderNo());
+                            UserPromiseRecord userPromiseRecord = userPromiseRecordService.getOne(queryWrapper2);
+                            if (userPromiseRecord != null) {
+                                userPromiseRecord.setDeductUsdt(order.getSubscribedAmount());
+                                if (!isDb) { //已经缴完 确认状态
+                                    userPromiseRecord.setStatus(2);
+                                    log.info("订单{}已确认认缴", userPromiseRecord.getOrderNo());
+                                }
+                                userPromiseRecordService.updateById(userPromiseRecord);
+                            }
+                        }
+                    });
                 }
-
-
 
             } catch (Exception e) {
                 log.error("待补自动扣费出错", e);
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/ApplyNewSharesOrder.java b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/ApplyNewSharesOrder.java
index ef60153..70ac44b 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/ApplyNewSharesOrder.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/ApplyNewSharesOrder.java
@@ -53,6 +53,9 @@
     @ApiModelProperty("已认缴金额")
     private  BigDecimal  subscribedAmount;
 
+    @ApiModelProperty("是否解锁 1 解锁 0 未解锁")
+    private Integer unLock = 0;
+
 
     @ApiModelProperty("库存损益")
     @TableField(exist = false)
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java
index 7790b0f..9b0571c 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java
@@ -59,4 +59,7 @@
 
     @ApiModelProperty("推荐人")
     private String recomUserName;
+
+    @ApiModelProperty("是否解锁 1 解锁 0 未解锁")
+    private Integer unLock = 0;
 }
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java
index b154e3b..5f5fdc5 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java
@@ -168,12 +168,14 @@
             BigDecimal amt = order.getRequiredNumber();
             if (wallet.getMoney().compareTo(amt) >= 0) {
                 wallet.setMoney(wallet.getMoney().subtract(amt));
+                order.setSubscribedAmount(amt);
             } else {
+                order.setSubscribedAmount(wallet.getMoney());
                 //资金不足 进入待补
                 isDb = true;
-                BigDecimal amountToBeCovered = amt.subtract(wallet.getMoney());
+                //BigDecimal amountToBeCovered = amt.subtract(wallet.getMoney());
                 wallet.setMoney(BigDecimal.ZERO);
-                wallet.setAmountToBeCovered(wallet.getAmountToBeCovered().add(amountToBeCovered));
+                //wallet.setAmountToBeCovered(wallet.getAmountToBeCovered().add(amountToBeCovered));
             }
             walletService.updateById(wallet);
 
@@ -183,7 +185,7 @@
             log.setAmount(amt.negate());
             log.setAmountAfter(amountBefore.subtract(amt).compareTo(BigDecimal.ZERO) <= 0 ?
                     BigDecimal.ZERO : amountBefore.subtract(amt));
-            log.setLog(order.getSymbolCode() + "新股认缴");
+            log.setLog(order.getSymbolCode() + "新股认缴" + order.getOrderNo());
             log.setUserId(order.getUserId());
             log.setWalletType(Constants.WALLET);
             log.setContentType(Constants.MONEYLOG_CATEGORY_IPO);
@@ -192,7 +194,7 @@
             UserPromiseRecord userPromiseRecord = new UserPromiseRecord();
             userPromiseRecord.setUserId(order.getUserId());
             userPromiseRecord.setDeductNumber(order.getWinningNumber());
-            userPromiseRecord.setDeductUsdt(order.getRequiredNumber());
+            userPromiseRecord.setDeductUsdt(order.getSubscribedAmount());
             userPromiseRecord.setStatus(isDb ? 1 : 2);
             Calendar calendar=Calendar.getInstance();
             if (newSharesConfig.getLockDay() > 0) {
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/UserPromiseRecordServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/UserPromiseRecordServiceImpl.java
index 133e6af..8fb8608 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/UserPromiseRecordServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/UserPromiseRecordServiceImpl.java
@@ -97,11 +97,13 @@
          }
 
          if (newSharesConfig.getLockDay() > 0) {
-             Calendar calendar = Calendar.getInstance();
-             calendar.setTime(userPromiseRecords.get(0).getCreateTime());
-             calendar.add(Calendar.DAY_OF_YEAR,newSharesConfig.getLockDay());
-             if (System.currentTimeMillis() < calendar.getTimeInMillis()){
-                 throw new YamiShopBindException("新股锁定中无法卖出");
+             if (applyNewSharesOrder.getUnLock() == null || applyNewSharesOrder.getUnLock() == 0) {
+                 Calendar calendar = Calendar.getInstance();
+                 calendar.setTime(userPromiseRecords.get(0).getCreateTime());
+                 calendar.add(Calendar.DAY_OF_YEAR,newSharesConfig.getLockDay());
+                 if (System.currentTimeMillis() < calendar.getTimeInMillis()){
+                     throw new YamiShopBindException("新股锁定中无法卖出");
+                 }
              }
          }
 

--
Gitblit v1.9.3