|
|
@@ -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;
|
|
|
}
|