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(); } } 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); 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) 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; } 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) { trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/UserPromiseRecordServiceImpl.java
@@ -97,6 +97,7 @@ } if (newSharesConfig.getLockDay() > 0) { 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()); @@ -104,6 +105,7 @@ throw new YamiShopBindException("新股锁定中无法卖出"); } } } BigDecimal usdt=new BigDecimal("0"); if (CollectionUtil.isNotEmpty(userPromiseRecords)){