| | |
| | | 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; |
| | |
| | | @Autowired |
| | | UserPromiseRecordService userPromiseRecordService; |
| | | |
| | | @Autowired |
| | | ApplyNewSharesOrderService applyNewSharesOrderService; |
| | | |
| | | @Autowired |
| | | MoneyLogService moneyLogService; |
| | | |
| | | /** |
| | | * 待补自动扣费 |
| | | */ |
| | |
| | | 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); |
| | |
| | | } |
| | | 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); |