diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/withdrawaudit/constant/WithdrawTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/withdrawaudit/constant/WithdrawTypeEnum.java new file mode 100644 index 0000000..5250cb8 --- /dev/null +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/withdrawaudit/constant/WithdrawTypeEnum.java @@ -0,0 +1,38 @@ +package com.qniao.dam.domian.aggregate.withdrawaudit.constant; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum WithdrawTypeEnum { + + OFFLINE(1, "线下"), + + WECHAT(2, "微信"); + + @EnumValue + @JsonValue + private final Integer value; + + private final String desc; + + WithdrawTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + @JsonCreator + public static WithdrawTypeEnum get(Integer v) { + + for (WithdrawTypeEnum e : WithdrawTypeEnum.values()) { + if (e.getValue().equals(v)) { + return e; + } + } + return null; + } +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/withdrawaudit/entity/WithdrawAudit.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/withdrawaudit/entity/WithdrawAudit.java index b25a7c2..a1feb2c 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/withdrawaudit/entity/WithdrawAudit.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/withdrawaudit/entity/WithdrawAudit.java @@ -1,14 +1,18 @@ package com.qniao.dam.domain.aggregate.withdrawaudit.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.qniao.dam.domian.aggregate.withdrawaudit.constant.WithdrawAuditStatus; +import com.qniao.dam.domian.aggregate.withdrawaudit.constant.WithdrawTypeEnum; import com.qniao.domain.Entity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.Map; @Data @EqualsAndHashCode(callSuper = true) @@ -24,6 +28,13 @@ public class WithdrawAudit extends Entity { @ApiModelProperty("提现金额") private BigDecimal withdrawAmount; + @ApiModelProperty("提现类型") + private WithdrawTypeEnum withdrawType; + @ApiModelProperty("提现状态") private WithdrawAuditStatus status; + + @ApiModelProperty("第三方账号的信息") + @TableField(typeHandler = JacksonTypeHandler.class) + private Map extDetailsInfo; } 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 6c35e74..39b36f3 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 @@ -1,15 +1,19 @@ package com.qniao.dam.api.command.withdrawaudit.user; +import com.qniao.dam.api.command.paymentchannelorder.user.assembler.ThirdPartyFieldAssembler; +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.application.service.withdrawaudit.WithdrawAuditApplicationService; import com.qniao.dam.domain.aggregate.withdrawaudit.entity.WithdrawAudit; +import com.qniao.framework.utils.ServletUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.List; @RestController @RequestMapping("user") @@ -23,9 +27,11 @@ public class WithdrawAuditUserCommandController { @PostMapping("apply/wallet-account/withdraw") public void userApplyWalletAccountWithdraw(@RequestBody @Valid UserApplyWalletAccountWithdrawDto dto, @RequestParam("userId") Long userId) { + Long appId = Long.valueOf(ServletUtils.getAppId()); WithdrawAudit withdrawAudit = dto.trans2Domain(); withdrawAudit.setWalletAccountUserId(userId); - withdrawAuditApplicationService.applyWithdraw(withdrawAudit); + List fieldList = ThirdPartyFieldAssembler.from(dto.getThirdPartyFields()); + withdrawAuditApplicationService.applyWithdraw(withdrawAudit,fieldList,appId); } @ApiOperation("审核提现申请") diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/request/UserApplyWalletAccountWithdrawDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/request/UserApplyWalletAccountWithdrawDto.java index 5bb4fb0..945323c 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/request/UserApplyWalletAccountWithdrawDto.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/withdrawaudit/user/request/UserApplyWalletAccountWithdrawDto.java @@ -1,6 +1,9 @@ package com.qniao.dam.api.command.withdrawaudit.user.request; +import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyFieldDto; import com.qniao.dam.domain.aggregate.withdrawaudit.entity.WithdrawAudit; +import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentMethodEnum; +import com.qniao.dam.domian.aggregate.withdrawaudit.constant.WithdrawTypeEnum; import com.qniao.domain.Trans2DomainAssembler; import com.qniao.framework.utils.TypeConvertUtils; import io.swagger.annotations.ApiModelProperty; @@ -9,6 +12,7 @@ import lombok.Data; import javax.validation.constraints.DecimalMin; import javax.validation.constraints.NotNull; import java.math.BigDecimal; +import java.util.List; @Data public class UserApplyWalletAccountWithdrawDto implements Trans2DomainAssembler { @@ -18,6 +22,13 @@ public class UserApplyWalletAccountWithdrawDto implements Trans2DomainAssembler< @DecimalMin(value = "0.01", message = "提现金额不等低于0.01") private BigDecimal withdrawAmount; + @ApiModelProperty("提现类型") + @NotNull(message = "提现类型不能为空") + private WithdrawTypeEnum withdrawType; + + @ApiModelProperty("第三方字段") + private List thirdPartyFields; + @Override public WithdrawAudit trans2Domain() { return TypeConvertUtils.convert(this, WithdrawAudit.class); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java index 0beb26e..aca78cc 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java @@ -140,7 +140,7 @@ public class RewardApplicationService { revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); //钱包信息 - WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getStoreOrgId(), IdentityTypeEnum.ORGANIZATION); + WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION); walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true); 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 c5f87a8..bc80e1a 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,18 +1,27 @@ package com.qniao.dam.application.service.withdrawaudit; +import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField; 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.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.thirdoauthconfig.ThirdOauthConfigQueryService; import com.qniao.dam.query.walletaccount.WalletAccountQueryService; +import com.qniao.dau.application.UecServerApplicationService; +import com.qniao.dau.application.request.GetWechatSessionDto; +import com.qniao.dau.application.response.WeChatAppletUserSessionVo; +import com.qniao.dau.domain.aggregate.thirdoauthconfig.valueobj.ThirdOauthConfig; +import com.qniao.dau.domian.aggregate.authorization.constant.OAuthPlatformEnum; import com.qniao.domain.BaseApplicationService; import com.qniao.domain.BaseDomainEvent; import com.qniao.framework.exception.BizException; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; import java.util.Objects; @Service @@ -25,14 +34,24 @@ public class WithdrawAuditApplicationService extends BaseApplicationService { private WithdrawAuditAggregate withdrawAuditAggregate; @Resource private WithdrawAuditDao withdrawAuditDao; + @Resource + private ThirdOauthConfigQueryService thirdOauthConfigQueryService; + @Resource + private UecServerApplicationService uecServerApplicationService; - public void applyWithdraw(WithdrawAudit withdrawAudit) { + public void applyWithdraw(WithdrawAudit withdrawAudit, List fieldList, Long appId) { synchronized (withdrawAudit.getWalletAccountUserId().toString().intern()) { WalletAccount walletAccount = walletAccountQueryService.queryByUserId(withdrawAudit.getWalletAccountUserId()); if (Objects.isNull(walletAccount) || withdrawAudit.getWithdrawAmount().compareTo(walletAccount.getAvailableBalance()) > 0) { throw new BizException("超出可提现金额"); } + //todo 改成策略模式 + if (WithdrawTypeEnum.WECHAT.equals(withdrawAudit.getWithdrawType())) { + String jsCode = ThirdPartyField.findFiledValueByKey(ThirdPartyField.JS_CODE, fieldList); + GetWechatSessionDto sessionDto = new GetWechatSessionDto(jsCode, appId); + WeChatAppletUserSessionVo sessionVo = uecServerApplicationService.getWechatSession(sessionDto); + } withdrawAudit.setWalletAccountId(walletAccount.getId()); walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().subtract(withdrawAudit.getWithdrawAmount())); walletAccount.setFrozenBalance(walletAccount.getFrozenBalance().add(withdrawAudit.getWithdrawAmount()));