Explorar o código

用户余额/拍卖状态

licailing %!s(int64=3) %!d(string=hai) anos
pai
achega
a4a7f7817d

+ 3 - 0
src/main/java/com/izouma/nineth/repo/UserBalanceRepo.java

@@ -10,6 +10,7 @@ import org.springframework.data.jpa.repository.Query;
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
+import java.util.Optional;
 
 
 public interface UserBalanceRepo extends JpaRepository<UserBalance, Long>, JpaSpecificationExecutor<UserBalance> {
 public interface UserBalanceRepo extends JpaRepository<UserBalance, Long>, JpaSpecificationExecutor<UserBalance> {
 
 
@@ -22,4 +23,6 @@ public interface UserBalanceRepo extends JpaRepository<UserBalance, Long>, JpaSp
     @Transactional
     @Transactional
     int unlock(Long userId);
     int unlock(Long userId);
 
 
+    Optional<UserBalance> findByUserId(Long userId);
+
 }
 }

+ 43 - 0
src/main/java/com/izouma/nineth/service/AuctionOrderService.java

@@ -22,7 +22,9 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import javax.persistence.Transient;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
@@ -62,6 +64,10 @@ public class AuctionOrderService {
     private OrderPayService               orderPayService;
     private OrderPayService               orderPayService;
     @Autowired
     @Autowired
     private SmsService                    smsService;
     private SmsService                    smsService;
+    @Autowired
+    private UserBalanceRepo               userBalanceRepo;
+    @Autowired
+    private BalanceRecordRepo             balanceRecordRepo;
 
 
     public Page<AuctionOrder> all(PageQuery pageQuery) {
     public Page<AuctionOrder> all(PageQuery pageQuery) {
         return auctionOrderRepo
         return auctionOrderRepo
@@ -223,6 +229,7 @@ public class AuctionOrderService {
 
 
     }
     }
 
 
+    @Transient
     public void notify(Long id, PayMethod payMethod, String transactionId) {
     public void notify(Long id, PayMethod payMethod, String transactionId) {
         AuctionOrder order = auctionOrderRepo.findById(id).orElseThrow(new BusinessException("无记录"));
         AuctionOrder order = auctionOrderRepo.findById(id).orElseThrow(new BusinessException("无记录"));
         if (!order.getStatus().equals(AuctionOrderStatus.NOT_PAID)) {
         if (!order.getStatus().equals(AuctionOrderStatus.NOT_PAID)) {
@@ -264,6 +271,35 @@ public class AuctionOrderService {
             User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("无用户"));
             User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("无用户"));
             //转让流程
             //转让流程
             assetService.transfer(asset, order.getTotalPrice(), user, TransferReason.AUCTION, order.getId());
             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);
                     auctionActivityService.changeStatus(act.getId(), AuctionStatus.PASS);
                     log.info("拍卖定时任务流拍{}", act.getId());
                     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
                     List<AuctionOrder> orders = auctionOrderRepo
                             .findAllByAuctionIdAndPaymentTypeAndStatus(act.getId(),
                             .findAllByAuctionIdAndPaymentTypeAndStatus(act.getId(),