From e9520b1f4906738caddd3a6193159fc858d23ce8 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 30 Dec 2025 18:37:24 +0800
Subject: [PATCH] ipo

---
 trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java |   92 +++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 87 insertions(+), 5 deletions(-)

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 4b2a93a..bf06756 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
@@ -8,28 +8,36 @@
 import com.yami.trading.bean.exchange.ExchangeApplyOrder;
 import com.yami.trading.bean.ipo.ApplyNewSharesOrder;
 import com.yami.trading.bean.ipo.NewSharesConfig;
+import com.yami.trading.bean.ipo.UserPromiseRecord;
 import com.yami.trading.bean.ipo.dto.SumSpotStockDto;
+import com.yami.trading.bean.model.MoneyLog;
 import com.yami.trading.bean.model.User;
+import com.yami.trading.bean.model.Wallet;
 import com.yami.trading.bean.syspara.domain.Syspara;
+import com.yami.trading.common.constants.Constants;
 import com.yami.trading.common.exception.BusinessException;
 import com.yami.trading.common.exception.YamiShopBindException;
 import com.yami.trading.common.util.DateUtil;
 import com.yami.trading.common.util.RandomUtil;
 import com.yami.trading.dao.ipo.ApplyNewSharesOrderSharesMapper;
+import com.yami.trading.service.MoneyLogService;
 import com.yami.trading.service.WalletService;
 import com.yami.trading.service.data.DataService;
 import com.yami.trading.service.data.RealtimeService;
 import com.yami.trading.service.exchange.ExchangeApplyOrderService;
 import com.yami.trading.service.ipo.ApplyNewSharesOrderService;
 import com.yami.trading.service.ipo.NewSharesConfigService;
+import com.yami.trading.service.ipo.UserPromiseRecordService;
 import com.yami.trading.service.syspara.SysparaService;
 import com.yami.trading.service.user.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.List;
 
 @Service
@@ -59,6 +67,13 @@
     @Autowired
     WalletService  walletService;
 
+    @Autowired
+    MoneyLogService moneyLogService;
+
+    @Lazy
+    @Autowired
+    UserPromiseRecordService userPromiseRecordService;
+
 
 
     @Override
@@ -73,16 +88,22 @@
             throw new BusinessException("股票数申购数不足!");
         }
 
-        if (amount.doubleValue()>newSharesConfig.getDefaultLimit().doubleValue()){
-            throw new BusinessException("股票数抽签数大于限购数!");
+        if (newSharesConfig.getUserApplyNums() != null && newSharesConfig.getUserApplyNums()>0){
+            if (amount.doubleValue() < newSharesConfig.getUserApplyNums()){
+                throw new BusinessException("请大于最低申购数量");
+            }
         }
+
+        /*if (amount.doubleValue()>newSharesConfig.getDefaultLimit().doubleValue()){
+            throw new BusinessException("股票数抽签数大于限购数!");
+        }*/
         if (newSharesConfig.getAppliedSubscribeNumber()>newSharesConfig.getSubscribeTotalNumber()){
             throw  new BusinessException("抽签数量大于总抽签股数");
-        }
-        List<ApplyNewSharesOrder>  applyNewSharesOrders=  findByProductCodeAndUserId(newSharesConfig.getProductCode(),userId);
+        /*List<ApplyNewSharesOrder>  applyNewSharesOrders=  findByProductCodeAndUserId(newSharesConfig.getProductCode(),userId);
         if (CollectionUtil.isNotEmpty(applyNewSharesOrders)){
             throw new BusinessException("已经有申购订单在申购中,请勿重复申请");
-        }
+        }*/}
+
         newSharesConfigService.updateById(newSharesConfig);
         ApplyNewSharesOrder applyNewSharesOrder=new ApplyNewSharesOrder();
         applyNewSharesOrder.setSubNumber(amount);
@@ -133,6 +154,67 @@
         return  sumWinningNumber;
     }
 
+    //中签认缴
+    @Override
+    public Boolean subscribe(ApplyNewSharesOrder order) {
+        try {
+            NewSharesConfig newSharesConfig = newSharesConfigService.getByProductCode(order.getSymbolCode());
+            if (newSharesConfig == null) {
+                throw new BusinessException("新股不存在!");
+            }
+            Boolean isDb = false;
+            Wallet wallet = walletService.saveWalletByPartyId(order.getUserId());
+            BigDecimal amountBefore = wallet.getMoney();
+            BigDecimal amt = order.getRequiredNumber();
+            if (wallet.getMoney().compareTo(amt) >= 0) {
+                wallet.setMoney(wallet.getMoney().subtract(amt));
+            } else {
+                //资金不足 进入待补
+                isDb = true;
+                BigDecimal amountToBeCovered = amt.subtract(wallet.getMoney());
+                wallet.setMoney(BigDecimal.ZERO);
+                wallet.setAmountToBeCovered(amountToBeCovered);
+            }
+            walletService.updateById(wallet);
+
+            MoneyLog log = new MoneyLog();
+            log.setCategory(Constants.MONEYLOG_CATEGORY_IPO);
+            log.setAmountBefore(amountBefore);
+            log.setAmount(amt.negate());
+            log.setAmountAfter(amountBefore.subtract(amt).compareTo(BigDecimal.ZERO) <= 0 ?
+                    BigDecimal.ZERO : amountBefore.subtract(amt));
+            log.setLog(order.getSymbolCode() + "新股认缴");
+            log.setUserId(order.getUserId());
+            log.setWalletType(Constants.WALLET);
+            log.setContentType(Constants.MONEYLOG_CATEGORY_IPO);
+            moneyLogService.save(log);
+
+            UserPromiseRecord userPromiseRecord = new UserPromiseRecord();
+            userPromiseRecord.setUserId(order.getUserId());
+            userPromiseRecord.setDeductNumber(order.getWinningNumber());
+            userPromiseRecord.setDeductUsdt(order.getRequiredNumber());
+            userPromiseRecord.setStatus(isDb ? 1 : 2);
+            Calendar calendar=Calendar.getInstance();
+            if (newSharesConfig.getLockDay() > 0) {
+                calendar.add(Calendar.DAY_OF_YEAR,newSharesConfig.getLockDay());
+                userPromiseRecord.setLockEndTime(calendar.getTime());
+            } else {
+                userPromiseRecord.setLockEndTime(calendar.getTime());
+            }
+            userPromiseRecord.setNewSharesConfigId(newSharesConfig.getUuid());
+            userPromiseRecord.setProductCode(newSharesConfig.getProductCode());
+            userPromiseRecord.setProductName(newSharesConfig.getProductName());
+            userPromiseRecord.setName(newSharesConfig.getName());
+            userPromiseRecord.setOrderNo(order.getOrderNo());
+            userPromiseRecordService.save(userPromiseRecord);
+
+            return true;
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return false;
+    }
+
     @Transactional
     public void sell(String orderNo, String userId) {
         ApplyNewSharesOrder applyNewSharesOrder= findByOrderNo(orderNo);

--
Gitblit v1.9.3