wangqifan 3 tahun lalu
induk
melakukan
81052db5d8

+ 4 - 0
src/main/java/com/izouma/nineth/repo/AssetRepo.java

@@ -2,7 +2,9 @@ package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.dto.FuAssetDTO;
+import com.izouma.nineth.enums.AssetSource;
 import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.CollectionType;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -146,4 +148,6 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
 
     @Query(value = "select new com.izouma.nineth.dto.FuAssetDTO(a.prefixName, count(a.id)) from Asset a where a.userId = ?1 and a.status in ?2 and a.prefixName in ?3 and a.del = false group by a.prefixName")
     List<FuAssetDTO> queryFu(Long userId, List<AssetStatus> status, List<String> prefixNames);
+
+    Asset findFirstByCollectionIdAndUserIdAndSource(Long collectionId, Long userId, AssetSource source);
 }

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

@@ -31,4 +31,7 @@ public interface BalanceRecordRepo extends JpaRepository<BalanceRecord, Long>, J
 
     @Query("select sum(b.amount) from BalanceRecord b where b.type = 'RECHARGE' and b.del = false and b.time <?2 and b.time >?1")
     BigDecimal sumRechargeToday(LocalDateTime start, LocalDateTime end);
+
+    @Query("select sum(b.amount) from BalanceRecord b where b.type = 'RECHARGE' and b.del = false and b.time <?2 and b.time >?1 and b.userId = ?3")
+    BigDecimal sumRechargeUser(LocalDateTime start, LocalDateTime end, Long userId);
 }

+ 32 - 2
src/main/java/com/izouma/nineth/service/PhotoAssetService.java

@@ -2,8 +2,7 @@ package com.izouma.nineth.service;
 
 import com.izouma.nineth.annotations.RedisLock;
 import com.izouma.nineth.config.GeneralProperties;
-import com.izouma.nineth.domain.Asset;
-import com.izouma.nineth.domain.PhotoAsset;
+import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.CollectionStatus;
 import com.izouma.nineth.enums.OperationSource;
@@ -22,7 +21,10 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -38,6 +40,8 @@ public class PhotoAssetService {
     private ContentAuditService contentAuditService;
     private GeneralProperties   generalProperties;
     private Environment         env;
+    private SysConfigService    sysConfigService;
+    private AirDropService      airDropService;
 
     public Page<PhotoAsset> all(PageQuery pageQuery) {
         return photoAssetRepo
@@ -137,6 +141,12 @@ public class PhotoAssetService {
         photoAsset.setPayMethod(payMethod);
         photoAsset.setTransactionId(transactionId);
         photoAssetRepo.save(photoAsset);
+        LocalDate now = LocalDate.now();
+        LocalDate start = LocalDate.of(2023, 1, 10);
+        LocalDate end = LocalDate.of(2023, 1, 18);
+        if (now.isBefore(end) & now.isAfter(start)) {
+            checkHasAirdrop(photoAsset.getUserId());
+        }
     }
 
 //    @Scheduled(fixedRate = 30000)
@@ -160,4 +170,24 @@ public class PhotoAssetService {
         photoAsset.setStatus(CollectionStatus.FAIL);
         photoAssetRepo.save(photoAsset);
     }
+
+    public void checkHasAirdrop(Long userId) {
+        Long collectionId = Long.valueOf(sysConfigService.getString("photoAsset_collectionId"));
+        Asset asset = assetRepo.findFirstByCollectionIdAndUserIdAndSource(collectionId, userId, AssetSource.OFFICIAL);
+        if (asset == null) {
+            User user = userRepo.findById(userId).orElseThrow(new BusinessException("暂无该用户"));
+            airDropService.create(AirDrop.builder()
+                    .name("春节星图铸造空投福卡")
+                    .remark("photoAsset:" + userId)
+                    .type(AirDropType.asset)
+                    .userIds(Collections.singletonList(userId))
+                    .collectionId(collectionId)
+                    .targets(Collections
+                            .singletonList(new DropTarget(user.getId(), user.getPhone(), user
+                                    .getNickname(), 1)))
+                    .auto(true)
+                    .companyId(1L)
+                    .build());
+        }
+    }
 }

+ 31 - 4
src/main/java/com/izouma/nineth/service/TradeAuctionOrderService.java

@@ -6,10 +6,7 @@ import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.*;
 import com.izouma.nineth.exception.BusinessException;
-import com.izouma.nineth.repo.CommissionRecordRepo;
-import com.izouma.nineth.repo.TradeAuctionOrderRepo;
-import com.izouma.nineth.repo.TradeAuctionRepo;
-import com.izouma.nineth.repo.UserRepo;
+import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +22,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -42,6 +40,8 @@ public class TradeAuctionOrderService {
     private CommissionRecordRepo          commissionRecordRepo;
     private RedisTemplate<String, Object> redisTemplate;
     private AssetService                  assetService;
+    private AssetRepo                     assetRepo;
+    private AirDropService                airDropService;
 
     private static int orderCancelInterval = 210;
 
@@ -217,6 +217,33 @@ public class TradeAuctionOrderService {
         tradeAuctionOrderRepo.save(tradeAuctionOrder);
         tradeAuctionRepo.save(tradeAuction);
         tradeAuctionService.increaseSale(tradeAuction.getId(), 1);
+
+        LocalDate now = LocalDate.now();
+        LocalDate start = LocalDate.of(2023, 1, 10);
+        LocalDate end = LocalDate.of(2023, 1, 18);
+        if (now.isBefore(end) & now.isAfter(start)) {
+            checkHasAirdrop(tradeAuctionOrder.getUserId());
+        }
+    }
+
+    public void checkHasAirdrop(Long userId) {
+        Long collectionId = Long.valueOf(sysConfigService.getString("tradeAcution_collectionId"));
+        Asset asset = assetRepo.findFirstByCollectionIdAndUserIdAndSource(collectionId, userId, AssetSource.OFFICIAL);
+        if (asset == null) {
+            User user = userRepo.findById(userId).orElseThrow(new BusinessException("暂无该用户"));
+            airDropService.create(AirDrop.builder()
+                    .name("春节参与易拍空投福卡")
+                    .remark("tradeAuction:" + userId)
+                    .type(AirDropType.asset)
+                    .userIds(Collections.singletonList(userId))
+                    .collectionId(collectionId)
+                    .targets(Collections
+                            .singletonList(new DropTarget(user.getId(), user.getPhone(), user
+                                    .getNickname(), 1)))
+                    .auto(true)
+                    .companyId(1L)
+                    .build());
+        }
     }
 
 

+ 50 - 11
src/main/java/com/izouma/nineth/service/UserBalanceService.java

@@ -8,10 +8,7 @@ import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.SandPaySettle;
 import com.izouma.nineth.dto.UserBankCard;
 import com.izouma.nineth.dto.UserWithdraw;
-import com.izouma.nineth.enums.BalanceType;
-import com.izouma.nineth.enums.CollectionSource;
-import com.izouma.nineth.enums.OrderStatus;
-import com.izouma.nineth.enums.PayMethod;
+import com.izouma.nineth.enums.*;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.service.storage.StorageService;
@@ -65,6 +62,8 @@ public class UserBalanceService {
     private final RechargeOrderRepo             rechargeOrderRepo;
     private final SysConfigService              sysConfigService;
     private final Environment                   env;
+    private final AirDropService                airDropService;
+    private final UserRepo                      userRepo;
 
     public void settle(LocalDate start, LocalDate end) {
         for (long i = 0; i <= ChronoUnit.DAYS.between(start, end); i++) {
@@ -212,7 +211,8 @@ public class UserBalanceService {
 
         File zipFile = ZipUtil.zip(tmpDir);
         String url = storageService.uploadFromInputStream(new FileInputStream(zipFile),
-                "upload/" + DateTimeUtils.format(LocalDateTime.now(), "yyyyMMddHHmm") + "_" + RandomStringUtils.randomNumeric(8) + ".zip");
+                "upload/" + DateTimeUtils.format(LocalDateTime.now(), "yyyyMMddHHmm") + "_" + RandomStringUtils
+                        .randomNumeric(8) + ".zip");
 
         ExportWithdraw exportWithdraw = exportWithdrawRepo.save(new ExportWithdraw(url, remark, withdrawList.size(),
                 withdrawList.stream().map(UserWithdraw::getAmount).reduce(BigDecimal::add)
@@ -262,8 +262,8 @@ public class UserBalanceService {
                         .collect(Collectors.toList());
             } else {
                 list = withdrawList.stream().filter(i -> i.getBankNo().equals(sandPaySettle.getBankNo())
-                                && i.getName().equals(sandPaySettle.getName())
-                                && i.getAmount().compareTo(sandPaySettle.getAmount()) == 0)
+                        && i.getName().equals(sandPaySettle.getName())
+                        && i.getAmount().compareTo(sandPaySettle.getAmount()) == 0)
                         .collect(Collectors.toList());
             }
             if (list.size() != 1) {
@@ -299,7 +299,8 @@ public class UserBalanceService {
                 throw new BusinessException("今日已经提现过");
             });
 
-            List<UserBalance> list = userBalanceRepo.findByLockedFalseAndBalanceGreaterThanOrderByUserId(BigDecimal.ZERO);
+            List<UserBalance> list = userBalanceRepo
+                    .findByLockedFalseAndBalanceGreaterThanOrderByUserId(BigDecimal.ZERO);
 
             AutoWithdrawRecord record = AutoWithdrawRecord.builder()
                     .date(LocalDate.now())
@@ -342,7 +343,8 @@ public class UserBalanceService {
                     boolean success = false;
                     String msg = null;
                     try {
-                        JSONObject res = sandPayService.transfer(withdrawId, userBankCard.getRealName(), userBankCard.getBankNo(), amount, userBankCard.getPhone());
+                        JSONObject res = sandPayService.transfer(withdrawId, userBankCard.getRealName(), userBankCard
+                                .getBankNo(), amount, userBankCard.getPhone());
                         if ("0000".equals(res.getString("respCode"))) {
                             success = true;
                         } else {
@@ -392,7 +394,8 @@ public class UserBalanceService {
         customThreadPool.submit(() -> {
             LocalDate now = LocalDate.now();
             userBalanceRepo.findAll().parallelStream().forEach(userBalance -> {
-                List<BalanceRecord> balanceRecords = balanceRecordRepo.findByUserIdOrderByCreatedAt(userBalance.getUserId());
+                List<BalanceRecord> balanceRecords = balanceRecordRepo
+                        .findByUserIdOrderByCreatedAt(userBalance.getUserId());
                 List<BalanceRecord> todayRecords = balanceRecords.stream()
                         .filter(b -> b.getCreatedAt().toLocalDate().equals(now)).collect(Collectors.toList());
                 List<BalanceRecord> oldRecords = balanceRecords.stream()
@@ -468,6 +471,42 @@ public class UserBalanceService {
             throw new BusinessException("充值订单状态异常");
         }
 
+        if (checkRechargeSum(rechargeOrder.getUserId(), rechargeOrder.getAmount())) {
+            airDrop(rechargeOrder.getUserId());
+        }
+    }
+
+    public boolean checkRechargeSum(Long userId, BigDecimal recharge) {
+        LocalDateTime start = LocalDateTime.of(2023, 1, 13, 0, 0, 0);
+        LocalDateTime end = LocalDateTime.now();
+        BigDecimal total = balanceRecordRepo.sumRechargeUser(start, end, userId);
+        BigDecimal nowTotal;
+        if (total != null) {
+            nowTotal = total.add(recharge);
+        } else {
+            nowTotal = recharge;
+        }
+        return nowTotal.compareTo(BigDecimal.valueOf(5000)) >= 0;
+    }
+
+    public void airDrop(Long userId) {
+        Long collectionId = Long.valueOf(sysConfigService.getString("recharge_collectionId"));
+        Asset asset = assetRepo.findFirstByCollectionIdAndUserIdAndSource(collectionId, userId, AssetSource.OFFICIAL);
+        if (asset == null) {
+            User user = userRepo.findById(userId).orElseThrow(new BusinessException("暂无该用户"));
+            airDropService.create(AirDrop.builder()
+                    .name("春节充值空投福卡")
+                    .remark("recharge:" + userId)
+                    .type(AirDropType.asset)
+                    .userIds(Collections.singletonList(userId))
+                    .collectionId(collectionId)
+                    .targets(Collections
+                            .singletonList(new DropTarget(user.getId(), user.getPhone(), user
+                                    .getNickname(), 1)))
+                    .auto(true)
+                    .companyId(1L)
+                    .build());
+        }
     }
 
     public BalanceRecord preWithdraw(Long userId, BigDecimal amount) {
@@ -581,7 +620,7 @@ public class UserBalanceService {
                 .build());
     }
 
-    public boolean checkBalance(Long userId, BigDecimal balance){
+    public boolean checkBalance(Long userId, BigDecimal balance) {
         UserBalance userBalance = userBalanceRepo.findById(userId).orElse(new UserBalance(userId));
         return userBalance.getBalance().compareTo(balance) >= 0;
     }