|
|
@@ -5,6 +5,7 @@ import com.alibaba.excel.EasyExcel;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.izouma.nineth.annotations.RedisLock;
|
|
|
import com.izouma.nineth.domain.*;
|
|
|
+import com.izouma.nineth.domain.nftdomain.DomainAsk;
|
|
|
import com.izouma.nineth.dto.SandPaySettle;
|
|
|
import com.izouma.nineth.dto.UserBankCard;
|
|
|
import com.izouma.nineth.dto.UserWithdraw;
|
|
|
@@ -120,45 +121,47 @@ public class UserBalanceService {
|
|
|
continue;
|
|
|
}
|
|
|
Asset asset = assets.stream().filter(i -> i.getId().equals(order.getAssetId()))
|
|
|
- .findFirst()
|
|
|
- .orElseThrow(new BusinessException("藏品不存在"));
|
|
|
+ .findFirst()
|
|
|
+ .orElseThrow(new BusinessException("藏品不存在"));
|
|
|
|
|
|
UserBalance userBalance = balanceList.stream().filter(b -> b.getUserId().equals(asset.getUserId()))
|
|
|
- .findFirst().orElse(null);
|
|
|
+ .findFirst().orElse(null);
|
|
|
if (userBalance == null) {
|
|
|
userBalance = userBalanceRepo.findById(asset.getUserId())
|
|
|
- .orElse(new UserBalance(asset.getUserId(), BigDecimal.ZERO, BigDecimal.ZERO,
|
|
|
- false, null, null));
|
|
|
+ .orElse(new UserBalance(asset
|
|
|
+ .getUserId(), BigDecimal.ZERO, BigDecimal.ZERO,
|
|
|
+ false, null, null));
|
|
|
balanceList.add(userBalance);
|
|
|
}
|
|
|
|
|
|
BigDecimal amount = order.getTotalPrice()
|
|
|
- .subtract(order.getGasPrice())
|
|
|
- .multiply(BigDecimal.valueOf(100 - order.getRoyalties() - order.getServiceCharge()))
|
|
|
- .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
+ .subtract(order.getGasPrice())
|
|
|
+ .multiply(BigDecimal
|
|
|
+ .valueOf(100 - order.getRoyalties() - order.getServiceCharge()))
|
|
|
+ .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
|
|
|
totalAmount = totalAmount.add(order.getTotalPrice());
|
|
|
royaltiesAmount = royaltiesAmount.add(order.getTotalPrice()
|
|
|
- .subtract(order.getGasPrice())
|
|
|
- .multiply(BigDecimal.valueOf(order.getRoyalties()))
|
|
|
- .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
|
|
|
+ .subtract(order.getGasPrice())
|
|
|
+ .multiply(BigDecimal.valueOf(order.getRoyalties()))
|
|
|
+ .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
|
|
|
serviceChargeAmount = serviceChargeAmount.add(order.getTotalPrice()
|
|
|
- .subtract(order.getGasPrice())
|
|
|
- .multiply(BigDecimal.valueOf(order.getServiceCharge()))
|
|
|
- .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
|
|
|
+ .subtract(order.getGasPrice())
|
|
|
+ .multiply(BigDecimal.valueOf(order.getServiceCharge()))
|
|
|
+ .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
|
|
|
|
|
|
userBalance.setLastBalance(userBalance.getBalance());
|
|
|
userBalance.setBalance(userBalance.getBalance().add(amount));
|
|
|
|
|
|
recordList.add(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(asset.getUserId())
|
|
|
- .orderId(order.getId())
|
|
|
- .amount(amount)
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.SELL)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(asset.getUserId())
|
|
|
+ .orderId(order.getId())
|
|
|
+ .amount(amount)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.SELL)
|
|
|
+ .build());
|
|
|
}
|
|
|
userBalanceRepo.saveAll(balanceList);
|
|
|
balanceRecordRepo.saveAll(recordList);
|
|
|
@@ -176,7 +179,7 @@ public class UserBalanceService {
|
|
|
List<UserBalance> balanceList = userBalanceRepo.findByBalanceGreaterThan(BigDecimal.ZERO);
|
|
|
List<UserBankCard> userBankCardList = balanceList.isEmpty() ? new ArrayList<>() :
|
|
|
userBankCardRepo.findByUserIdIn(balanceList.stream().map(UserBalance::getUserId)
|
|
|
- .collect(Collectors.toSet()));
|
|
|
+ .collect(Collectors.toSet()));
|
|
|
List<UserWithdraw> withdrawList = new ArrayList<>();
|
|
|
Iterator<UserBalance> it = balanceList.iterator();
|
|
|
UserBalance ub;
|
|
|
@@ -185,7 +188,7 @@ public class UserBalanceService {
|
|
|
Long userId = ub.getUserId();
|
|
|
log.info("查询提现银行卡userId={}", ub.getUserId());
|
|
|
UserBankCard ubc = userBankCardList.stream().filter(u -> u.getUserId().equals(userId))
|
|
|
- .findFirst().orElse(null);
|
|
|
+ .findFirst().orElse(null);
|
|
|
if (ubc != null) {
|
|
|
withdrawList.add(new UserWithdraw(userId, ubc.getRealName(), ubc.getBankNo(), ub.getBalance()));
|
|
|
} else {
|
|
|
@@ -197,7 +200,7 @@ public class UserBalanceService {
|
|
|
File file1 = new File(tmpDir, DateTimeUtils.format(LocalDate.now(), "yyyyMMdd") + "结算.xlsx");
|
|
|
File file2 = new File(tmpDir, DateTimeUtils.format(LocalDate.now(), "yyyyMMdd") + "结算导入.xls");
|
|
|
EasyExcel.write(file1, UserWithdraw.class)
|
|
|
- .sheet("sheet").doWrite(withdrawList);
|
|
|
+ .sheet("sheet").doWrite(withdrawList);
|
|
|
|
|
|
InputStream inputStream = getClass().getResourceAsStream("/批量付款到对私银行账户模板.xls");
|
|
|
Workbook workbook = WorkbookFactory.create(inputStream);
|
|
|
@@ -235,7 +238,7 @@ public class UserBalanceService {
|
|
|
|
|
|
ExportWithdraw exportWithdraw = exportWithdrawRepo.save(new ExportWithdraw(url, remark, withdrawList.size(),
|
|
|
withdrawList.stream().map(UserWithdraw::getAmount).reduce(BigDecimal::add)
|
|
|
- .orElse(BigDecimal.ZERO), "处理中"));
|
|
|
+ .orElse(BigDecimal.ZERO), "处理中"));
|
|
|
|
|
|
balanceList.parallelStream().forEach(userBalance -> {
|
|
|
log.info("提现userId={}", userBalance.getUserId());
|
|
|
@@ -245,13 +248,13 @@ public class UserBalanceService {
|
|
|
userBalanceRepo.saveAndFlush(userBalance);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(userBalance.getUserId())
|
|
|
- .amount(amount.negate())
|
|
|
- .balance(BigDecimal.ZERO)
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.WITHDRAW)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(userBalance.getUserId())
|
|
|
+ .amount(amount.negate())
|
|
|
+ .balance(BigDecimal.ZERO)
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.WITHDRAW)
|
|
|
+ .build());
|
|
|
});
|
|
|
|
|
|
tmpDir.delete();
|
|
|
@@ -263,27 +266,27 @@ public class UserBalanceService {
|
|
|
@Transactional
|
|
|
public void importFail(MultipartFile withdrawFile, MultipartFile settleFile) throws IOException {
|
|
|
List<SandPaySettle> failSettleList = EasyExcel.read(settleFile.getInputStream())
|
|
|
- .head(SandPaySettle.class).sheet()
|
|
|
- .doReadSync();
|
|
|
+ .head(SandPaySettle.class).sheet()
|
|
|
+ .doReadSync();
|
|
|
failSettleList = failSettleList.stream()
|
|
|
- .filter(s -> "失败".equals(s.getStatus().trim()))
|
|
|
- .collect(Collectors.toList());
|
|
|
+ .filter(s -> "失败".equals(s.getStatus().trim()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
List<UserWithdraw> withdrawList = EasyExcel.read(withdrawFile.getInputStream())
|
|
|
- .head(UserWithdraw.class).sheet()
|
|
|
- .doReadSync();
|
|
|
+ .head(UserWithdraw.class).sheet()
|
|
|
+ .doReadSync();
|
|
|
List<UserWithdraw> failWithdraw = new ArrayList<>();
|
|
|
for (SandPaySettle sandPaySettle : failSettleList) {
|
|
|
List<UserWithdraw> list;
|
|
|
if (StringUtils.isNotBlank(sandPaySettle.getRemark()) && Pattern.matches("^\\d+$", sandPaySettle.getRemark()
|
|
|
- .trim())) {
|
|
|
+ .trim())) {
|
|
|
Long userId = Long.parseLong(sandPaySettle.getRemark().trim());
|
|
|
list = withdrawList.stream().filter(i -> i.getUserId().equals(userId))
|
|
|
- .collect(Collectors.toList());
|
|
|
+ .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)
|
|
|
- .collect(Collectors.toList());
|
|
|
+ .collect(Collectors.toList());
|
|
|
}
|
|
|
if (list.size() != 1) {
|
|
|
throw new BusinessException("不唯一:" + sandPaySettle.getName() + "," + sandPaySettle.getBankNo());
|
|
|
@@ -293,20 +296,21 @@ public class UserBalanceService {
|
|
|
}
|
|
|
failWithdraw.parallelStream().forEach(withdraw -> {
|
|
|
UserBalance userBalance = userBalanceRepo.findById(withdraw.getUserId())
|
|
|
- .orElse(new UserBalance(withdraw.getUserId(), BigDecimal.ZERO, BigDecimal.ZERO,
|
|
|
- false, null, null));
|
|
|
+ .orElse(new UserBalance(withdraw
|
|
|
+ .getUserId(), BigDecimal.ZERO, BigDecimal.ZERO,
|
|
|
+ false, null, null));
|
|
|
userBalance.setLastBalance(userBalance.getBalance());
|
|
|
userBalance.setBalance(userBalance.getBalance().add(withdraw.getAmount()));
|
|
|
userBalanceRepo.saveAndFlush(userBalance);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(userBalance.getUserId())
|
|
|
- .amount(withdraw.getAmount())
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.RETURN)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(userBalance.getUserId())
|
|
|
+ .amount(withdraw.getAmount())
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.RETURN)
|
|
|
+ .build());
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -322,16 +326,16 @@ public class UserBalanceService {
|
|
|
.findByLockedFalseAndBalanceGreaterThanOrderByUserId(BigDecimal.ZERO);
|
|
|
|
|
|
AutoWithdrawRecord record = AutoWithdrawRecord.builder()
|
|
|
- .date(LocalDate.now())
|
|
|
- .status("pending")
|
|
|
- .progress(0)
|
|
|
- .total(list.size())
|
|
|
- .build();
|
|
|
+ .date(LocalDate.now())
|
|
|
+ .status("pending")
|
|
|
+ .progress(0)
|
|
|
+ .total(list.size())
|
|
|
+ .build();
|
|
|
autoWithdrawRecordRepo.saveAndFlush(record);
|
|
|
|
|
|
list.parallelStream().forEach(userBalance -> {
|
|
|
UserBankCard userBankCard = userBankCardRepo.findByUserId(userBalance.getUserId())
|
|
|
- .stream().findFirst().orElse(null);
|
|
|
+ .stream().findFirst().orElse(null);
|
|
|
if (userBankCard == null) {
|
|
|
log.info("自动提现userId={}, amount={}, 未绑卡", userBalance.getBalance(), userBalance.getUserId());
|
|
|
record.setProgress(record.getProgress() + 1);
|
|
|
@@ -350,14 +354,14 @@ public class UserBalanceService {
|
|
|
userBalanceRepo.saveAndFlush(userBalance);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(userBalance.getUserId())
|
|
|
- .amount(amount.negate())
|
|
|
- .balance(BigDecimal.ZERO)
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.WITHDRAW)
|
|
|
- .withdrawId(withdrawId)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(userBalance.getUserId())
|
|
|
+ .amount(amount.negate())
|
|
|
+ .balance(BigDecimal.ZERO)
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.WITHDRAW)
|
|
|
+ .withdrawId(withdrawId)
|
|
|
+ .build());
|
|
|
|
|
|
boolean success = false;
|
|
|
String msg = null;
|
|
|
@@ -379,15 +383,15 @@ public class UserBalanceService {
|
|
|
userBalanceRepo.saveAndFlush(userBalance);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(userBalance.getUserId())
|
|
|
- .amount(amount)
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.RETURN)
|
|
|
- .withdrawId(withdrawId)
|
|
|
- .remark(msg)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(userBalance.getUserId())
|
|
|
+ .amount(amount)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.RETURN)
|
|
|
+ .withdrawId(withdrawId)
|
|
|
+ .remark(msg)
|
|
|
+ .build());
|
|
|
}
|
|
|
|
|
|
record.setProgress(record.getProgress() + 1);
|
|
|
@@ -416,11 +420,13 @@ public class UserBalanceService {
|
|
|
List<BalanceRecord> balanceRecords = balanceRecordRepo
|
|
|
.findByUserIdOrderByCreatedAt(userBalance.getUserId());
|
|
|
List<BalanceRecord> todayRecords = balanceRecords.stream()
|
|
|
- .filter(b -> b.getCreatedAt().toLocalDate().equals(now)).collect(Collectors.toList());
|
|
|
+ .filter(b -> b.getCreatedAt().toLocalDate()
|
|
|
+ .equals(now))
|
|
|
+ .collect(Collectors.toList());
|
|
|
List<BalanceRecord> oldRecords = balanceRecords.stream()
|
|
|
- .filter(b -> !b.getCreatedAt().toLocalDate().equals(now))
|
|
|
- .sorted(Comparator.comparing(BaseEntity::getCreatedAt))
|
|
|
- .collect(Collectors.toList());
|
|
|
+ .filter(b -> !b.getCreatedAt().toLocalDate().equals(now))
|
|
|
+ .sorted(Comparator.comparing(BaseEntity::getCreatedAt))
|
|
|
+ .collect(Collectors.toList());
|
|
|
if (oldRecords.size() == 0) {
|
|
|
userBalanceRepo.delete(userBalance);
|
|
|
} else {
|
|
|
@@ -446,15 +452,15 @@ public class UserBalanceService {
|
|
|
userBalanceRepo.save(userBalance);
|
|
|
|
|
|
return balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .userId(userId)
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.PAY)
|
|
|
- .amount(amount.negate())
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .orderId(orderId)
|
|
|
- .remark(remark)
|
|
|
- .build());
|
|
|
+ .userId(userId)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.PAY)
|
|
|
+ .amount(amount.negate())
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .orderId(orderId)
|
|
|
+ .remark(remark)
|
|
|
+ .build());
|
|
|
}
|
|
|
|
|
|
@RedisLock("#userId")
|
|
|
@@ -466,24 +472,24 @@ public class UserBalanceService {
|
|
|
if (OrderStatus.NOT_PAID == rechargeOrder.getStatus()) {
|
|
|
BigDecimal amount = rechargeOrder.getAmount();
|
|
|
UserBalance userBalance = userBalanceRepo.findById(userId).orElse(UserBalance.builder()
|
|
|
- .userId(userId)
|
|
|
- .balance(BigDecimal.ZERO)
|
|
|
- .lastBalance(BigDecimal.ZERO)
|
|
|
- .build());
|
|
|
+ .userId(userId)
|
|
|
+ .balance(BigDecimal.ZERO)
|
|
|
+ .lastBalance(BigDecimal.ZERO)
|
|
|
+ .build());
|
|
|
userBalance.setLastBalance(userBalance.getBalance());
|
|
|
userBalance.setBalance(userBalance.getBalance().add(amount));
|
|
|
userBalanceRepo.save(userBalance);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .userId(userId)
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.RECHARGE)
|
|
|
- .amount(amount)
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .orderId(orderId)
|
|
|
- .payMethod(payMethod)
|
|
|
- .build());
|
|
|
+ .userId(userId)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.RECHARGE)
|
|
|
+ .amount(amount)
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .orderId(orderId)
|
|
|
+ .payMethod(payMethod)
|
|
|
+ .build());
|
|
|
|
|
|
rechargeOrder.setStatus(OrderStatus.FINISH);
|
|
|
rechargeOrderRepo.save(rechargeOrder);
|
|
|
@@ -511,17 +517,17 @@ public class UserBalanceService {
|
|
|
Long collectionId = Long.valueOf(sysConfigService.getString("recharge_collectionId"));
|
|
|
User user = userRepo.findById(userId).orElseThrow(new BusinessException("暂无该用户"));
|
|
|
airDropService.create(AirDrop.builder()
|
|
|
- .name("春节充值空投福卡")
|
|
|
- .remark("rechargeOrder:" + orderId)
|
|
|
- .type(AirDropType.asset)
|
|
|
- .userIds(Collections.singletonList(userId))
|
|
|
- .collectionId(collectionId)
|
|
|
- .targets(Collections
|
|
|
- .singletonList(new DropTarget(user.getId(), user.getPhone(), user
|
|
|
- .getNickname(), Math.toIntExact(checkResult))))
|
|
|
- .auto(true)
|
|
|
- .companyId(1L)
|
|
|
- .build());
|
|
|
+ .name("春节充值空投福卡")
|
|
|
+ .remark("rechargeOrder:" + orderId)
|
|
|
+ .type(AirDropType.asset)
|
|
|
+ .userIds(Collections.singletonList(userId))
|
|
|
+ .collectionId(collectionId)
|
|
|
+ .targets(Collections
|
|
|
+ .singletonList(new DropTarget(user.getId(), user.getPhone(), user
|
|
|
+ .getNickname(), Math.toIntExact(checkResult))))
|
|
|
+ .auto(true)
|
|
|
+ .companyId(1L)
|
|
|
+ .build());
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -541,20 +547,20 @@ public class UserBalanceService {
|
|
|
throw new BusinessException("最小提现金额为" + minWithdrawAmount);
|
|
|
}
|
|
|
UserBankCard userBankCard = userBankCardRepo.findByUserId(userBalance.getUserId())
|
|
|
- .stream().findFirst().orElseThrow(new BusinessException("请先绑定银行卡"));
|
|
|
+ .stream().findFirst().orElseThrow(new BusinessException("请先绑定银行卡"));
|
|
|
|
|
|
userBalance.setLastBalance(userBalance.getBalance());
|
|
|
userBalance.setBalance(userBalance.getBalance().subtract(amount));
|
|
|
userBalanceRepo.saveAndFlush(userBalance);
|
|
|
|
|
|
return balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(userBalance.getUserId())
|
|
|
- .amount(amount.negate())
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.WITHDRAW)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(userBalance.getUserId())
|
|
|
+ .amount(amount.negate())
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.WITHDRAW)
|
|
|
+ .build());
|
|
|
}
|
|
|
|
|
|
@RedisLock(value = "'modifyBalance::'+#userId", behavior = RedisLock.Behavior.WAIT)
|
|
|
@@ -571,15 +577,15 @@ public class UserBalanceService {
|
|
|
userBalanceRepo.saveAndFlush(userBalance);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(userId)
|
|
|
- .amount(amount)
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(type)
|
|
|
- .remark(reason)
|
|
|
- .withdrawId(withdrawId)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(userId)
|
|
|
+ .amount(amount)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(type)
|
|
|
+ .remark(reason)
|
|
|
+ .withdrawId(withdrawId)
|
|
|
+ .build());
|
|
|
}
|
|
|
|
|
|
public void realtimeSettleOrder(Order order) {
|
|
|
@@ -595,36 +601,72 @@ public class UserBalanceService {
|
|
|
Asset asset = assetRepo.findById(order.getAssetId()).orElse(null);
|
|
|
|
|
|
UserBalance userBalance = userBalanceRepo.findById(asset.getUserId())
|
|
|
- .orElse(new UserBalance(asset.getUserId()));
|
|
|
+ .orElse(new UserBalance(asset.getUserId()));
|
|
|
|
|
|
BigDecimal amount = order.getTotalPrice()
|
|
|
- .subtract(order.getGasPrice())
|
|
|
- .multiply(BigDecimal.valueOf(100 - order.getRoyalties() - order.getServiceCharge()))
|
|
|
- .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
+ .subtract(order.getGasPrice())
|
|
|
+ .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);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(asset.getUserId())
|
|
|
- .orderId(order.getId())
|
|
|
- .amount(amount)
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(BalanceType.SELL)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(asset.getUserId())
|
|
|
+ .orderId(order.getId())
|
|
|
+ .amount(amount)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.SELL)
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void realtimeSettleOrder(DomainAsk domainAsk) {
|
|
|
+ if (!sysConfigService.getBoolean("realtime_settle_order")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ BalanceRecord record = balanceRecordRepo.findByOrderIdAndType(domainAsk.getId(), BalanceType.ASK);
|
|
|
+ if (record != null) {
|
|
|
+ log.info("此订单已结算 domainAskId={}", domainAsk.getId());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ log.info("结算订单 domainAskId={}", domainAsk.getId());
|
|
|
+ Asset asset = assetRepo.findById(domainAsk.getAssetId()).orElse(null);
|
|
|
+
|
|
|
+ UserBalance userBalance = userBalanceRepo.findById(asset.getUserId())
|
|
|
+ .orElse(new UserBalance(asset.getUserId()));
|
|
|
+
|
|
|
+ BigDecimal amount = domainAsk.getPrice()
|
|
|
+// .subtract(BigDecimal.valueOf(1))
|
|
|
+ .multiply(BigDecimal
|
|
|
+ .valueOf(100 - domainAsk.getRoyalties() - domainAsk.getServiceCharge()))
|
|
|
+ .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
|
|
|
+
|
|
|
+ userBalance.setLastBalance(userBalance.getBalance());
|
|
|
+ userBalance.setBalance(userBalance.getBalance().add(amount));
|
|
|
+ userBalanceRepo.save(userBalance);
|
|
|
+
|
|
|
+ balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(asset.getUserId())
|
|
|
+ .orderId(domainAsk.getId())
|
|
|
+ .amount(amount)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(BalanceType.ASK)
|
|
|
+ .build());
|
|
|
}
|
|
|
|
|
|
public void addBalance(Long userId, BigDecimal amount, Long orderId, BalanceType type) {
|
|
|
//用户冲余额
|
|
|
UserBalance userBalance = userBalanceRepo.findByUserId(userId)
|
|
|
- .orElse(UserBalance.builder()
|
|
|
- .balance(BigDecimal.ZERO)
|
|
|
- .lastBalance(BigDecimal.ZERO)
|
|
|
- .userId(userId)
|
|
|
- .build());
|
|
|
+ .orElse(UserBalance.builder()
|
|
|
+ .balance(BigDecimal.ZERO)
|
|
|
+ .lastBalance(BigDecimal.ZERO)
|
|
|
+ .userId(userId)
|
|
|
+ .build());
|
|
|
|
|
|
userBalance.setLastBalance(userBalance.getBalance());
|
|
|
userBalance.setBalance(userBalance.getBalance().add(amount));
|
|
|
@@ -632,14 +674,14 @@ public class UserBalanceService {
|
|
|
log.info("拍卖冲用户余额{},¥{}", userId, amount);
|
|
|
|
|
|
balanceRecordRepo.save(BalanceRecord.builder()
|
|
|
- .time(LocalDateTime.now())
|
|
|
- .userId(userId)
|
|
|
- .orderId(orderId)
|
|
|
- .amount(amount)
|
|
|
- .balance(userBalance.getBalance())
|
|
|
- .lastBalance(userBalance.getLastBalance())
|
|
|
- .type(type)
|
|
|
- .build());
|
|
|
+ .time(LocalDateTime.now())
|
|
|
+ .userId(userId)
|
|
|
+ .orderId(orderId)
|
|
|
+ .amount(amount)
|
|
|
+ .balance(userBalance.getBalance())
|
|
|
+ .lastBalance(userBalance.getLastBalance())
|
|
|
+ .type(type)
|
|
|
+ .build());
|
|
|
}
|
|
|
|
|
|
public boolean checkBalance(Long userId, BigDecimal balance) {
|