licailing 3 лет назад
Родитель
Сommit
86947b0985

+ 2 - 0
src/main/java/com/izouma/nineth/repo/AuctionActivityRepo.java

@@ -47,6 +47,8 @@ public interface AuctionActivityRepo extends JpaRepository<AuctionActivity, Long
 
     List<AuctionActivity> findByStartTimeBeforeAndStatusIn(LocalDateTime startTime, Collection<AuctionStatus> status);
 
+    List<AuctionActivity> findByStartTimeBeforeAndStatus(LocalDateTime startTime, AuctionStatus status);
+
     @Modifying
     @Transactional
     @Query("update AuctionActivity set onShelf = ?2 where assetId = ?1 and onShelf <> ?2")

+ 1 - 1
src/main/java/com/izouma/nineth/repo/UserRepo.java

@@ -26,7 +26,7 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
 
     @Transactional
     @Modifying
-    @Query("update User u set u.del = true where u.id in ?1")
+    @Query("update User u set u.del = true where u.del = false and u.id in ?1")
     void softDeleteIn(Collection<Long> id);
 
     Optional<User> findByUsernameAndDelFalse(String username);

+ 34 - 13
src/main/java/com/izouma/nineth/service/AuctionActivityService.java

@@ -24,6 +24,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.redis.core.BoundValueOperations;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 
@@ -58,14 +59,10 @@ public class AuctionActivityService {
         if (Arrays.asList(env.getActiveProfiles()).contains("dev")) {
             return;
         }
-        List<AuctionActivity> activities = auctionActivityRepo.findByStartTimeBeforeAndStatusIn(LocalDateTime.now(),
-                Arrays.asList(AuctionStatus.NOTSTARTED, AuctionStatus.ONGOING));
+        List<AuctionActivity> activities = auctionActivityRepo.findByStartTimeBeforeAndStatus(LocalDateTime.now(),
+                AuctionStatus.NOTSTARTED);
         for (AuctionActivity activity : activities) {
-            if (AuctionStatus.NOTSTARTED.equals(activity.getStatus())) {
-                onShelfTask(activity);
-            } else {
-                offShelfTask(activity);
-            }
+            onShelfTask(activity);
         }
     }
 
@@ -161,8 +158,6 @@ public class AuctionActivityService {
         AuctionActivity saved = auctionActivityRepo.save(record);
         if (saved.getStatus().equals(AuctionStatus.NOTSTARTED)) {
             onShelfTask(saved);
-        } else if (saved.getStatus().equals(AuctionStatus.ONGOING)) {
-            offShelfTask(saved);
         }
         return saved;
     }
@@ -205,12 +200,12 @@ public class AuctionActivityService {
 //                            .orElseThrow(new BusinessException("无数据"));
                     this.changeStatus(record.getId(), AuctionStatus.ONGOING);
                     tasks.remove(record.getId());
-                    offShelfTask(auctionActivityRepo.findById(record.getId()).orElseThrow(new BusinessException("无数据")));
+//                    offShelfTask(auctionActivityRepo.findById(record.getId()).orElseThrow(new BusinessException("无数据")));
                 }, date);
                 tasks.put(record.getId(), future);
             } else {
                 this.changeStatus(record.getId(), AuctionStatus.ONGOING);
-                offShelfTask(auctionActivityRepo.findById(record.getId()).orElseThrow(new BusinessException("无数据")));
+//                offShelfTask(auctionActivityRepo.findById(record.getId()).orElseThrow(new BusinessException("无数据")));
             }
         }
     }
@@ -275,7 +270,33 @@ public class AuctionActivityService {
         }
     }
 
-    public void removeTask(Long id) {
-        tasks.remove(id);
+    /**
+     * 定时下架拍卖
+     * (每隔1分钟执行一次)
+     */
+    @Scheduled(cron = "0 */1 * * * ?")
+    public void passAuction() {
+        List<AuctionActivity> activities = auctionActivityRepo.findAllByStatus(AuctionStatus.ONGOING);
+        activities.forEach(activity -> {
+            if (activity.getEndTime().isBefore(LocalDateTime.now())) {
+                if (ObjectUtils.isNotEmpty(activity.getPurchasePrice())) {
+                    log.info("拍卖成交{}", activity.getId());
+                    this.changeStatus(activity.getId(), AuctionStatus.PURCHASED);
+                } else {
+                    //没有成交价,无人出价过
+                    log.info("拍卖流拍Task-else-else{}", activity.getId());
+                    this.changeStatus(activity.getId(), AuctionStatus.PASS);
+
+                    if (AuctionSource.TRANSFER.equals(activity.getSource())) {
+                        Asset asset = assetRepo.findById(activity.getAssetId())
+                                .orElseThrow(new BusinessException("暂无"));
+                        asset.setStatus(AssetStatus.NORMAL);
+                        asset.setConsignment(false);
+                        asset.setPublicShow(false);
+                        assetRepo.save(asset);
+                    }
+                }
+            }
+        });
     }
 }

+ 1 - 7
src/main/java/com/izouma/nineth/service/AuctionOrderService.java

@@ -80,7 +80,7 @@ public class AuctionOrderService {
         AuctionActivity auction = auctionActivityRepo.findById(auctionId)
                 .orElseThrow(new BusinessException("无拍卖信息"));
 
-        if (!auction.isOnShelf()) {
+        if (!auction.isOnShelf() || auction.getEndTime().isBefore(LocalDateTime.now())) {
             throw new BusinessException("拍卖已结束");
         }
 
@@ -245,12 +245,6 @@ public class AuctionOrderService {
         //存订单
         auctionOrderRepo.save(order);
 
-        if (AuctionPaymentType.FIXED_PRICE.equals(order.getPaymentType())) {
-            //取消倒计时流拍
-            auctionActivityService.removeTask(order.getAuctionId());
-        }
-
-
         if (AuctionPaymentType.DEPOSIT.equals(order.getPaymentType())) {
             //改出价记录表
             AuctionRecord record = auctionRecordRepo.findById(order.getAuctionRecordId())

+ 6 - 0
src/main/java/com/izouma/nineth/service/UserService.java

@@ -925,6 +925,12 @@ public class UserService {
         if (CollUtil.isNotEmpty(userIds)) {
             log.info("流拍处罚:{}", userIds);
             userRepo.softDeleteIn(userIds);
+            //清缓存
+            userIds.forEach(id -> {
+                cacheService.clearUserMy(id);
+                cacheService.clearUser(id);
+            });
+
         }
 
     }