xiongzhu 3 年 前
コミット
8295a654b4

+ 12 - 4
src/main/java/com/izouma/nineth/service/CollectionService.java

@@ -11,10 +11,7 @@ import com.izouma.nineth.converter.StringArrayConverter;
 import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.*;
-import com.izouma.nineth.enums.AuthStatus;
-import com.izouma.nineth.enums.CollectionSource;
-import com.izouma.nineth.enums.CollectionType;
-import com.izouma.nineth.enums.OrderStatus;
+import com.izouma.nineth.enums.*;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.JpaUtils;
@@ -72,6 +69,8 @@ public class CollectionService {
     private OrderRepo                     orderRepo;
     private TokenHistoryRepo              tokenHistoryRepo;
     private TagRepo                       tagRepo;
+    private UserBalanceService            userBalanceService;
+    private SysConfigService              sysConfigService;
 
     private final Map<Long, ScheduledFuture<?>> tasks = new HashMap<>();
 
@@ -182,8 +181,17 @@ public class CollectionService {
                 page.getPageable().getPageSize(), page.getTotalElements());
     }
 
+    @Transactional
     public Collection create(Collection record) {
         User minter = userRepo.findById(record.getMinterId()).orElse(SecurityUtils.getAuthenticatedUser());
+        if (record.getCompanyId() != 1L) {
+            BigDecimal price = sysConfigService.getBigDecimal("company_collection_price");
+            BigDecimal totalPrice = new BigDecimal(record.getTotal()).multiply(price);
+            if (!userBalanceService.checkBalance(record.getCompanyId(), totalPrice)) {
+                throw new BusinessException("余额不足");
+            }
+            userBalanceService.modifyBalance(record.getCompanyId(), totalPrice.negate(), BalanceType.PAY, null, false, null);
+        }
         record.setMinter(minter.getNickname());
         record.setMinterId(minter.getId());
         record.setMinterAvatar(minter.getAvatar());

+ 8 - 0
src/main/java/com/izouma/nineth/service/SysConfigService.java

@@ -259,6 +259,14 @@ public class SysConfigService {
                     .value("1")
                     .build());
         }
+        if (list.stream().noneMatch(i -> i.getName().equals("company_collection_price"))) {
+            sysConfigRepo.save(SysConfig.builder()
+                    .name("company_collection_price")
+                    .desc("企业上传藏品价格")
+                    .type(SysConfig.ValueType.NUMBER)
+                    .value("5")
+                    .build());
+        }
         SearchMode searchMode = SearchMode.valueOf(sysConfigRepo.findByName("default_search_mode").get().getValue());
         JpaUtils.setDefaultSearchMode(searchMode);
 

+ 3 - 10
src/main/java/com/izouma/nineth/service/UserBalanceService.java

@@ -581,15 +581,8 @@ public class UserBalanceService {
                 .build());
     }
 
-    @Async
-    public void cancelRefundGas() throws ExecutionException, InterruptedException {
-        new ForkJoinPool(500).submit(() -> {
-            List<BalanceRecord> recordList = balanceRecordRepo.findByType(BalanceType.REFUND);
-            recordList.parallelStream().forEach(r -> {
-                log.info("cancelRefundGas {}", r.getUserId());
-                userBalanceRepo.modifyBalance(r.getUserId(), new BigDecimal("-1"));
-                balanceRecordRepo.delete(r);
-            });
-        }).get();
+    public boolean checkBalance(Long userId, BigDecimal balance){
+        UserBalance userBalance = userBalanceRepo.findById(userId).orElse(new UserBalance(userId));
+        return userBalance.getBalance().compareTo(balance) >= 0;
     }
 }

+ 0 - 6
src/main/java/com/izouma/nineth/web/UserBalanceController.java

@@ -142,10 +142,4 @@ public class UserBalanceController extends BaseController {
         }
         return "ok";
     }
-
-    @PreAuthorize("hasRole('ADMIN')")
-    @GetMapping("/cancelRefundGas")
-    public void cancelRefundGas() throws ExecutionException, InterruptedException {
-        userBalanceService.cancelRefundGas();
-    }
 }