diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java index 41d4b2a..c9502dd 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java @@ -30,6 +30,8 @@ public enum TradeTypeEnum { MATCHMAKER_NOVICE_TASK_REWARD(110, "红娘新手任务奖励"), + CHAT_REWARD(111, "聊天收益"), + PLATFORM_SERVICE_FEE(201, "平台服务费"), WITHDRAW(202, "提现"); diff --git a/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java index df00e84..fc12a20 100644 --- a/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java +++ b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java @@ -50,4 +50,8 @@ public interface MallServerApplicationService { @PostMapping("/user/consume/virtual-account") @IgnoreResponseAdvice ConsumeVirtualAccountVo userConsumeVirtualAccountBySdk(@RequestBody UserConsumeVirtualAccountDto dto); + + @PostMapping("/user/acquire/reward-amount") + @IgnoreResponseAdvice + void userAcquireRewardAmountBySdk(@RequestBody UserAcquireRewardAmountDto dto); } diff --git a/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireRewardAmountDto.java b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireRewardAmountDto.java new file mode 100644 index 0000000..bb32e26 --- /dev/null +++ b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireRewardAmountDto.java @@ -0,0 +1,25 @@ +package com.qniao.dam.application.request; + +import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserAcquireRewardAmountDto { + + private Long userId; + + private TradeTypeEnum tradeType; + + private BigDecimal amount; + + private Long associateId; + + private String remark; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java new file mode 100644 index 0000000..040fb05 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/WalletAccountUserCommandController.java @@ -0,0 +1,28 @@ +package com.qniao.dam.api.command.walletaccount.user; + +import com.qniao.dam.api.command.walletaccount.user.request.UserAcquireRewardAmountDto; +import com.qniao.dam.application.handler.walletaccount.WalletAccountApplicationService; +import com.qniao.framework.annotation.IgnoreResponseAdvice; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("user") +@Api(tags = "钱包") +public class WalletAccountUserCommandController { + + @Resource + private WalletAccountApplicationService walletAccountApplicationService; + + @PostMapping("/user/acquire/reward-amount") + @IgnoreResponseAdvice + public void userAcquireRewardAmountBySdk(@RequestBody UserAcquireRewardAmountDto dto) { + walletAccountApplicationService.acquireRewardAmount(dto); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireRewardAmountDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireRewardAmountDto.java new file mode 100644 index 0000000..6c9448b --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/walletaccount/user/request/UserAcquireRewardAmountDto.java @@ -0,0 +1,21 @@ +package com.qniao.dam.api.command.walletaccount.user.request; + +import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class UserAcquireRewardAmountDto { + + private Long userId; + + private TradeTypeEnum tradeType; + + private BigDecimal amount; + + private Long associateId; + + private String remark; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/walletaccount/WalletAccountApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/walletaccount/WalletAccountApplicationService.java index 848cdb8..ff01529 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/walletaccount/WalletAccountApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/walletaccount/WalletAccountApplicationService.java @@ -1,10 +1,13 @@ package com.qniao.dam.application.handler.walletaccount; +import com.qniao.dam.api.command.walletaccount.user.request.UserAcquireRewardAmountDto; import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; +import com.qniao.dam.query.walletaccount.WalletAccountQueryService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -18,6 +21,8 @@ public class WalletAccountApplicationService { private WalletAccountDao walletAccountDao; @Resource private WalletAccountAggregate walletAccountAggregate; + @Resource + private WalletAccountQueryService walletAccountQueryService; public void confirmWithdraw(Long walletAccountId, BigDecimal withdrawAmount, Long associateId) { WalletAccount walletAccount = walletAccountDao.selectById(walletAccountId); @@ -37,4 +42,15 @@ public class WalletAccountApplicationService { walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); walletAccountAggregate.save(walletAccount); } + + public void acquireRewardAmount(UserAcquireRewardAmountDto dto) { + WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getUserId(), IdentityTypeEnum.INDIVIDUAL); + BigDecimal originalBalance = walletAccount.getTotalBalance(); + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(dto.getAmount())); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.CHAT_REWARD, dto.getAmount(), true, originalBalance, walletAccount.getTotalBalance()); + record.setRemark(dto.getRemark()); + walletAccount.setRecordList(Collections.singletonList(record)); + walletAccountAggregate.save(walletAccount); + } }