|
|
@@ -22,7 +22,9 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.persistence.Transient;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
@@ -62,6 +64,10 @@ public class AuctionOrderService {
|
|
|
private OrderPayService orderPayService;
|
|
|
@Autowired
|
|
|
private SmsService smsService;
|
|
|
+ @Autowired
|
|
|
+ private UserBalanceRepo userBalanceRepo;
|
|
|
+ @Autowired
|
|
|
+ private BalanceRecordRepo balanceRecordRepo;
|
|
|
|
|
|
public Page<AuctionOrder> all(PageQuery pageQuery) {
|
|
|
return auctionOrderRepo
|
|
|
@@ -223,6 +229,7 @@ public class AuctionOrderService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Transient
|
|
|
public void notify(Long id, PayMethod payMethod, String transactionId) {
|
|
|
AuctionOrder order = auctionOrderRepo.findById(id).orElseThrow(new BusinessException("无记录"));
|
|
|
if (!order.getStatus().equals(AuctionOrderStatus.NOT_PAID)) {
|
|
|
@@ -264,6 +271,35 @@ public class AuctionOrderService {
|
|
|
User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("无用户"));
|
|
|
//转让流程
|
|
|
assetService.transfer(asset, order.getTotalPrice(), user, TransferReason.AUCTION, order.getId());
|
|
|
+
|
|
|
+ //用户冲余额
|
|
|
+ UserBalance userBalance = userBalanceRepo.findByUserId(asset.getOwnerId())
|
|
|
+ .orElse(UserBalance.builder()
|
|
|
+ .balance(BigDecimal.ZERO)
|
|
|
+ .lastBalance(BigDecimal.ZERO)
|
|
|
+ .userId(asset.getOwnerId())
|
|
|
+ .build());
|
|
|
+
|
|
|
+ BigDecimal amount = order.getTotalPrice()
|
|
|
+ .multiply(BigDecimal.valueOf(100 - order.getRoyalties() - order.getServiceCharge()))
|
|
|
+ .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
+
|
|
|
+ userBalance.setLastBalance(userBalance.getBalance());
|
|
|
+ userBalance.setBalance(userBalance.getBalance().add(amount));
|
|
|
+ userBalanceRepo.save(userBalance);
|
|
|
+ log.info("拍卖冲用户余额{},¥{}", asset.getOwnerId(), amount);
|
|
|
+
|
|
|
+ balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(asset.getOwnerId())
|
|
|
+ .orderId(order.getId())
|
|
|
+ .amount(amount)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.SELL)
|
|
|
+ .build());
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//改出价记录表为竞得(一口价无出价表)
|
|
|
@@ -416,6 +452,13 @@ public class AuctionOrderService {
|
|
|
auctionActivityService.changeStatus(act.getId(), AuctionStatus.PASS);
|
|
|
log.info("拍卖定时任务流拍{}", act.getId());
|
|
|
|
|
|
+ if (AuctionSource.TRANSFER.equals(act.getSource())) {
|
|
|
+ //改回资产状态
|
|
|
+ Asset asset = assetRepo.findById(act.getAssetId()).orElseThrow(new BusinessException("资产不存在"));
|
|
|
+ asset.setStatus(AssetStatus.NORMAL);
|
|
|
+ assetRepo.save(asset);
|
|
|
+ }
|
|
|
+
|
|
|
//退其余保证金
|
|
|
List<AuctionOrder> orders = auctionOrderRepo
|
|
|
.findAllByAuctionIdAndPaymentTypeAndStatus(act.getId(),
|