diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankTransferGoldCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankTransferGoldCmdExe.java index 915a20dc..80acc04a 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankTransferGoldCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/UserBankTransferGoldCmdExe.java @@ -89,20 +89,20 @@ public class UserBankTransferGoldCmdExe { boolean freight = freightBalanceService.existsBalance(cmd.getAcceptUserId()); ResponseAssert.isTrue(WalletErrorCode.TARGET_USER_NOT_RECHARGE_AGENCY, freight); - ResponseAssert.isTrue(WalletErrorCode.NOT_TRANSFER_YOURSELF, !Objects.equals(cmd.getAcceptUserId(), cmd.requiredReqUserId())); // 上锁 String key = "UBWTransferGold:" + cmd.requiredReqUserId(); ResponseAssert.isTrue(CommonErrorCode.REQUEST_LIMITING, redisService.lock(key, 60)); - BigDecimal balance = userBankBalanceService.getBalance(cmd.requiredReqUserId()) - .getAccurateBalance(); + try { + BigDecimal balance = userBankBalanceService.getBalance(cmd.requiredReqUserId()) + .getAccurateBalance(); - ResponseAssert.isTrue(WalletErrorCode.INSUFFICIENT_BALANCE, - ArithmeticUtils.gte(balance, cmd.getAmount())); + ResponseAssert.isTrue(WalletErrorCode.INSUFFICIENT_BALANCE, + ArithmeticUtils.gte(balance, cmd.getAmount())); - // 获得区域兑换比例金币比例 - Double goldRatio = getExchangeGoldRatio(cmd); + // 获得区域兑换比例金币比例 + Double goldRatio = getExchangeGoldRatio(cmd); BigDecimal goldQuantity = BigDecimal.valueOf(goldRatio).multiply(cmd.getAmount()).setScale(0, RoundingMode.DOWN); @@ -112,39 +112,41 @@ public class UserBankTransferGoldCmdExe { long result = goldQuantity.divide(new BigDecimal(10000), RoundingMode.DOWN).setScale(0, RoundingMode.DOWN).longValue(); ResponseAssert.isTrue(FreightErrorCode.NOT_THRESHOLD, result >= Optional.ofNullable(freightBalance.getDeliveryThreshold()).orElse(0)); - // 扣钱 - BankBalanceDTO decrUserBankBalanceDTO = userBankBalanceService.decr(cmd.requiredReqUserId(), - PennyAmount.ofDollar(cmd.getAmount())); - ResponseAssert.notNull(WalletErrorCode.INSUFFICIENT_BALANCE, decrUserBankBalanceDTO); + // 扣钱 + BankBalanceDTO decrUserBankBalanceDTO = userBankBalanceService.decr(cmd.requiredReqUserId(), + PennyAmount.ofDollar(cmd.getAmount())); + ResponseAssert.notNull(WalletErrorCode.INSUFFICIENT_BALANCE, decrUserBankBalanceDTO); - Long bankRunWaterId = IdWorkerUtils.getId(); + Long bankRunWaterId = IdWorkerUtils.getId(); - // 银行卡流水 - userBankRunningWaterService.add( - new UserBankRunningWater() - .setId(bankRunWaterId) - .setUserId(cmd.requiredReqUserId()) - .setSysOrigin(cmd.requireReqSysOrigin()) - .setType(ReceiptType.EXPENDITURE.getType()) - .setAmount(cmd.getAmount()) - .setEvent(UserBankWaterEvent.TRANSFER_GOLD.name()) - .setEventDescribe(UserBankWaterEvent.TRANSFER_GOLD.getDescribe()) - .setRemark("Withdrawal transfer") - .setTrackId(Objects.toString(cmd.getAcceptUserId())) - .setBalance(decrUserBankBalanceDTO.getAccurateBalance()) - .setCreateTime(TimestampUtils.now()) - .setUpdateTime(TimestampUtils.now()) - .setCreateUser(cmd.getReqUserId()) - .setCreateUserOrigin(OpUserType.APP.getType()) - ); + // 银行卡流水 + userBankRunningWaterService.add( + new UserBankRunningWater() + .setId(bankRunWaterId) + .setUserId(cmd.requiredReqUserId()) + .setSysOrigin(cmd.requireReqSysOrigin()) + .setType(ReceiptType.EXPENDITURE.getType()) + .setAmount(cmd.getAmount()) + .setEvent(UserBankWaterEvent.TRANSFER_GOLD.name()) + .setEventDescribe(UserBankWaterEvent.TRANSFER_GOLD.getDescribe()) + .setRemark("Withdrawal transfer") + .setTrackId(Objects.toString(cmd.getAcceptUserId())) + .setBalance(decrUserBankBalanceDTO.getAccurateBalance()) + .setCreateTime(TimestampUtils.now()) + .setUpdateTime(TimestampUtils.now()) + .setCreateUser(cmd.getReqUserId()) + .setCreateUserOrigin(OpUserType.APP.getType()) + ); - // 发送金额 - sendGold(cmd, freight, goldQuantity, bankRunWaterId, "转账金币"); + // 发送金额 + sendGold(cmd, freight, goldQuantity, bankRunWaterId, "转账金币"); - redisService.unlock(key); - return new UserBankWithdrawResultCO() - .setBankBalance(decrUserBankBalanceDTO.getAccurateBalance()) - .setWithdrawAmount(Objects.toString(cmd.getAmount())); + return new UserBankWithdrawResultCO() + .setBankBalance(decrUserBankBalanceDTO.getAccurateBalance()) + .setWithdrawAmount(Objects.toString(cmd.getAmount())); + } finally { + redisService.unlock(key); + } } private void sendGold(UserBankWithdrawTransferCmd cmd, boolean freight, BigDecimal goldQuantity, diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/query/UserBankSearchUserProfileQryExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/query/UserBankSearchUserProfileQryExe.java index 9b91f4be..deff24af 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/query/UserBankSearchUserProfileQryExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/bank/query/UserBankSearchUserProfileQryExe.java @@ -44,10 +44,12 @@ public class UserBankSearchUserProfileQryExe { return null; } - if (isTransfer(cmd)) { - if (Objects.equals(cmd.getReqUserId(), userProfile.getId())) { - return null; - } + boolean transfer = isTransfer(cmd); + boolean sameUser = Objects.equals(cmd.getReqUserId(), userProfile.getId()); + boolean freightAgent = cmd.typeEqAgent() + && Boolean.TRUE.equals(freightBalanceService.checkFreightAgent(userProfile.getId())); + if (transfer && sameUser && !freightAgent) { + return null; } if (cmd.typeEqBD()) { @@ -67,12 +69,11 @@ public class UserBankSearchUserProfileQryExe { } if (cmd.typeEqAgent()) { - Boolean freightAgent = freightBalanceService.checkFreightAgent(userProfile.getId()); if (freightAgent) { return userProfile; } - if (isTransfer(cmd)) { - return null; + if (transfer) { + return null; } return Objects.equals( diff --git a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryTransferGoldCmdExe.java b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryTransferGoldCmdExe.java index 5cde4586..6d3d8a8f 100644 --- a/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryTransferGoldCmdExe.java +++ b/rc-service/rc-service-wallet/wallet-application/src/main/java/com/red/circle/wallet/app/command/salary/SalaryTransferGoldCmdExe.java @@ -81,19 +81,19 @@ public class SalaryTransferGoldCmdExe { boolean freight = freightBalanceService.existsBalance(cmd.getAcceptUserId()); ResponseAssert.isTrue(WalletErrorCode.TARGET_USER_NOT_RECHARGE_AGENCY, freight); - ResponseAssert.isTrue(WalletErrorCode.NOT_TRANSFER_YOURSELF, !Objects.equals(cmd.getAcceptUserId(), cmd.requiredReqUserId())); // 上锁 String key = "USTransferGold:" + cmd.requiredReqUserId(); ResponseAssert.isTrue(CommonErrorCode.REQUEST_LIMITING, redisService.lock(key, 60)); - BigDecimal balance = salaryAccountGateway.getAvailableBalance(cmd.getReqUserId(), SalaryType.of(cmd.getSalaryType())).getDollarAmount(); + try { + BigDecimal balance = salaryAccountGateway.getAvailableBalance(cmd.getReqUserId(), SalaryType.of(cmd.getSalaryType())).getDollarAmount(); - ResponseAssert.isTrue(WalletErrorCode.INSUFFICIENT_BALANCE, - ArithmeticUtils.gte(balance, cmd.getAmount())); + ResponseAssert.isTrue(WalletErrorCode.INSUFFICIENT_BALANCE, + ArithmeticUtils.gte(balance, cmd.getAmount())); - // 获得区域兑换比例金币比例 - Double goldRatio = getExchangeGoldRatio(cmd); + // 获得区域兑换比例金币比例 + Double goldRatio = getExchangeGoldRatio(cmd); Long bankRunWaterId = IdWorkerUtils.getId(); BigDecimal goldQuantity = BigDecimal.valueOf(goldRatio).multiply(cmd.getAmount()).setScale(0, RoundingMode.DOWN); @@ -104,19 +104,21 @@ public class SalaryTransferGoldCmdExe { long result = goldQuantity.divide(new BigDecimal(10000), RoundingMode.DOWN).setScale(0, RoundingMode.DOWN).longValue(); ResponseAssert.isTrue(FreightErrorCode.NOT_THRESHOLD, result >= Optional.ofNullable(freightBalance.getDeliveryThreshold()).orElse(0)); - // 扣钱 - cmd.setReqTraceId(String.valueOf(bankRunWaterId)); - SalaryReceipt receipt = salaryAccountConvertor.toTransferReceipt(cmd); - SalaryReceiptRes salaryReceiptRes = salaryAccountGateway.changeBalance(receipt); - ResponseAssert.notNull(WalletErrorCode.INSUFFICIENT_BALANCE, salaryReceiptRes); + // 扣钱 + cmd.setReqTraceId(String.valueOf(bankRunWaterId)); + SalaryReceipt receipt = salaryAccountConvertor.toTransferReceipt(cmd); + SalaryReceiptRes salaryReceiptRes = salaryAccountGateway.changeBalance(receipt); + ResponseAssert.notNull(WalletErrorCode.INSUFFICIENT_BALANCE, salaryReceiptRes); - // 发送金额 - sendGold(cmd, freight, goldQuantity, bankRunWaterId, "转账金币"); + // 发送金额 + sendGold(cmd, freight, goldQuantity, bankRunWaterId, "转账金币"); - redisService.unlock(key); - return new UserBankWithdrawResultCO() - .setBankBalance(salaryReceiptRes.getAvailableBalance().getDollarAmount()) - .setWithdrawAmount(Objects.toString(cmd.getAmount())); + return new UserBankWithdrawResultCO() + .setBankBalance(salaryReceiptRes.getAvailableBalance().getDollarAmount()) + .setWithdrawAmount(Objects.toString(cmd.getAmount())); + } finally { + redisService.unlock(key); + } } private void sendGold(SalaryWithdrawCmd cmd, boolean freight, BigDecimal goldQuantity,