diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/WithdrawAuditUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/WithdrawAuditUserCommandController.java index cfbcb47..a0fac06 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/WithdrawAuditUserCommandController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/WithdrawAuditUserCommandController.java @@ -4,10 +4,14 @@ import com.qniao.dam.api.command.paymentchannelorder.user.assembler.ThirdPartyFi import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField; import com.qniao.dam.api.command.withdrawaudit.user.request.UserApplyWalletAccountWithdrawDto; import com.qniao.dam.api.command.withdrawaudit.user.request.UserAuditWithdrawAuditDto; +import com.qniao.dam.api.command.withdrawaudit.user.request.UserCalculateWithdrawServiceFeeDto; +import com.qniao.dam.api.command.withdrawaudit.user.response.UserCalculateWithdrawServiceFeeVo; +import com.qniao.dam.api.query.withdrawaudit.user.response.UserPageWithdrawAuditVo; import com.qniao.dam.application.service.withdrawaudit.WithdrawAuditApplicationService; import com.qniao.dam.domain.aggregate.withdrawaudit.entity.WithdrawAudit; import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; import com.qniao.dau.infrastructure.constant.RequestHeaderFields; +import com.qniao.framework.utils.PageUtil; import com.qniao.framework.utils.ServletUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -51,4 +55,9 @@ public class WithdrawAuditUserCommandController { withdrawAuditApplicationService.audit(dto.trans2Domain()); } + @PostMapping("calculate/withdraw-service-fee") + @ApiOperation("用户计算提现手续费") + public UserCalculateWithdrawServiceFeeVo userCalculateWithdrawServiceFee(UserCalculateWithdrawServiceFeeDto dto) { + return withdrawAuditApplicationService.calculateServiceFee(dto.getWithdrawAmount(),dto.getWithdrawType()); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/request/UserCalculateWithdrawServiceFeeDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/request/UserCalculateWithdrawServiceFeeDto.java new file mode 100644 index 0000000..ae275dd --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/request/UserCalculateWithdrawServiceFeeDto.java @@ -0,0 +1,22 @@ +package com.qniao.dam.api.command.withdrawaudit.user.request; + +import com.qniao.dam.domian.aggregate.withdrawaudit.constant.WithdrawTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.DecimalMin; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Data +public class UserCalculateWithdrawServiceFeeDto { + + @ApiModelProperty("提现金额") + @NotNull(message = "提现金额不能为空") + @DecimalMin(value = "0.01", message = "提现金额不等低于0.01") + private BigDecimal withdrawAmount; + + @ApiModelProperty("提现类型") + @NotNull(message = "提现类型不能为空") + private WithdrawTypeEnum withdrawType; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/response/UserCalculateWithdrawServiceFeeVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/response/UserCalculateWithdrawServiceFeeVo.java new file mode 100644 index 0000000..64d01c2 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/response/UserCalculateWithdrawServiceFeeVo.java @@ -0,0 +1,22 @@ +package com.qniao.dam.api.command.withdrawaudit.user.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class UserCalculateWithdrawServiceFeeVo { + + @ApiModelProperty("提现金额") + private BigDecimal withdrawAmount = BigDecimal.ZERO; + + @ApiModelProperty("提现服务费百分比") + private BigDecimal withdrawServiceFeePct = BigDecimal.ZERO; + + @ApiModelProperty("提现服务费") + private BigDecimal withdrawServiceFee = BigDecimal.ZERO; + + @ApiModelProperty("到账金额") + private BigDecimal arrivalAmount = BigDecimal.ZERO; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/withdrawaudit/user/WithdrawAuditUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/withdrawaudit/user/WithdrawAuditUserQueryController.java index c0f403f..b4e52de 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/withdrawaudit/user/WithdrawAuditUserQueryController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/withdrawaudit/user/WithdrawAuditUserQueryController.java @@ -45,5 +45,4 @@ public class WithdrawAuditUserQueryController { return PageUtil.convert(withdrawAuditQueryService.pageWithdrawAudit(queryParams, pageUtil), UserPageWithdrawAuditVo.class); } - } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/withdrawaudit/WithdrawAuditApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/withdrawaudit/WithdrawAuditApplicationService.java index 46b75f1..99d43d6 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/withdrawaudit/WithdrawAuditApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/withdrawaudit/WithdrawAuditApplicationService.java @@ -1,13 +1,17 @@ package com.qniao.dam.application.service.withdrawaudit; import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField; +import com.qniao.dam.api.command.withdrawaudit.user.response.UserCalculateWithdrawServiceFeeVo; +import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; import com.qniao.dam.domain.aggregate.withdrawaudit.WithdrawAuditAggregate; import com.qniao.dam.domain.aggregate.withdrawaudit.entity.WithdrawAudit; import com.qniao.dam.domain.service.withdrawaudit.ApplyWithdrawAuditDomainService; +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; import com.qniao.dam.domian.aggregate.withdrawaudit.constant.WithdrawAuditStatus; import com.qniao.dam.domian.aggregate.withdrawaudit.constant.WithdrawTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.WithdrawAuditDao; +import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.dam.query.walletaccount.WalletAccountQueryService; import com.qniao.dau.application.UecServerApplicationService; import com.qniao.dau.application.request.GetWechatSessionDto; @@ -18,6 +22,7 @@ import com.qniao.framework.exception.BizException; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,6 +40,8 @@ public class WithdrawAuditApplicationService extends BaseApplicationService { private WithdrawAuditDao withdrawAuditDao; @Resource private UecServerApplicationService uecServerApplicationService; + @Resource + private RewardConfigQueryService rewardConfigQueryService; public void applyWithdraw(WithdrawAudit withdrawAudit, List fieldList, Long appId) { @@ -75,4 +82,21 @@ public class WithdrawAuditApplicationService extends BaseApplicationService { } } } + + public UserCalculateWithdrawServiceFeeVo calculateServiceFee(BigDecimal withdrawAmount, + WithdrawTypeEnum withdrawType) { + UserCalculateWithdrawServiceFeeVo serviceFeeVo = new UserCalculateWithdrawServiceFeeVo(); + serviceFeeVo.setWithdrawAmount(withdrawAmount); + serviceFeeVo.setArrivalAmount(withdrawAmount); + if (WithdrawTypeEnum.OFFLINE.equals(withdrawType)) { + //需要手续费 + RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.WITHDRAW_SERVICE_FEE); + if (Objects.nonNull(rewardConfig)) { + serviceFeeVo.setWithdrawServiceFeePct(new BigDecimal(rewardConfig.getValue())); + serviceFeeVo.setWithdrawServiceFee(rewardConfig.calculateReward(withdrawAmount)); + serviceFeeVo.setArrivalAmount(withdrawAmount.subtract(serviceFeeVo.getWithdrawServiceFee())); + } + } + return serviceFeeVo; + } }