From 0a4595ca6978f063f1fa3f3f06826de9f3d07222 Mon Sep 17 00:00:00 2001 From: Derran Date: Fri, 26 Apr 2024 18:03:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../walletaccount/entity/WalletAccount.java | 8 +++ .../valueobj/WalletAccountRecord.java | 12 ++++- .../MallServerApplicationService.java | 14 +++--- ...quireMatchmakerJoinRecommendRewardDto.java | 10 ++++ .../user/RewardUserCommandController.java | 32 ++++++++++++ ...quireMatchmakerJoinRecommendRewardDto.java | 20 ++++++++ .../WalletAccountQueryService.java | 7 +++ .../impl/WalletAccountQueryServiceImpl.java | 23 +++++++++ .../notify/NotifyApplicationService.java | 19 ------- .../reward/RewardApplicationService.java | 49 +++++++++++++++++++ .../walletaccount/WalletAccountAggregate.java | 11 +++++ .../RewardConfigQueryService.java | 4 ++ .../impl/RewardConfigQueryServiceImpl.java | 12 +++++ 13 files changed, 195 insertions(+), 26 deletions(-) create mode 100644 dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/RewardUserCommandController.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/entity/WalletAccount.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/entity/WalletAccount.java index 072353a..282abef 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/entity/WalletAccount.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/entity/WalletAccount.java @@ -30,4 +30,12 @@ public class WalletAccount extends Entity { @ApiModelProperty("钱包记录") private transient List recordList; + public static WalletAccount init(Long userId) { + WalletAccount walletAccount = new WalletAccount(); + walletAccount.setUserId(userId); + walletAccount.setTotalBalance(BigDecimal.ZERO); + walletAccount.setAvailableBalance(BigDecimal.ZERO); + walletAccount.setFrozenBalance(BigDecimal.ZERO); + return walletAccount; + } } diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java index 715c758..28b6bbd 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java @@ -29,5 +29,15 @@ public class WalletAccountRecord extends ValueObject { @ApiModelProperty("备注") private String remark; - + public static WalletAccountRecord build(TradeTypeEnum tradeType, + BigDecimal tradeAmount, + Boolean isIncome, + String remark) { + WalletAccountRecord record = new WalletAccountRecord(); + record.setTradeType(tradeType); + record.setTradeAmount(tradeAmount); + record.setIsIncome(isIncome); + record.setRemark(remark); + return record; + } } 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 f398a0d..b675d96 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 @@ -1,11 +1,9 @@ package com.qniao.dam.application; -import com.qniao.dam.application.request.UserAcquireNewMIRightBySdkDto; -import com.qniao.dam.application.request.UserCheckEnableRightBySdkQueryParam; -import com.qniao.dam.application.request.UserConsumeRightBySdkDto; -import com.qniao.dam.application.request.UserSendBackBightBySdkDto; +import com.qniao.dam.application.request.*; import com.qniao.dam.application.response.UserCheckEnableRightBySdkVo; import com.qniao.dam.application.response.UserConsumeRightBySdkVo; +import com.qniao.framework.annotation.IgnoreResponseAdvice; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -29,18 +27,22 @@ public interface MallServerApplicationService { @PostMapping("/user/consume/right/by/sdk") UserConsumeRightBySdkVo userConsumeRightBySdk(@RequestBody UserConsumeRightBySdkDto dto); - /** * 通过SDK退回消费过的权益 */ @PostMapping("/user/send-back/right/by/sdk") void userSendBackRightBySdk(@RequestBody UserSendBackBightBySdkDto dto); - /** * 新用户获取赠送的权益 */ @PostMapping("/user/acquire/new-mi-right/by/sdk") void userAcquireNewMIRight(@RequestBody @Valid UserAcquireNewMIRightBySdkDto dto); + /** + * 通过SDK获得奖励 + */ + @PostMapping("/user/acquire/matchmaker-join-recommend/reward/by/sdk") + @IgnoreResponseAdvice + void userAcquireMatchmakerJoinRecommendRewardBySdk(@RequestBody @Valid UserAcquireMatchmakerJoinRecommendRewardDto dto); } diff --git a/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java new file mode 100644 index 0000000..deb201a --- /dev/null +++ b/dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java @@ -0,0 +1,10 @@ +package com.qniao.dam.application.request; + +import lombok.Data; + +@Data +public class UserAcquireMatchmakerJoinRecommendRewardDto { + private Long initiatorUserId; + private Long receiveUserId; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/RewardUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/RewardUserCommandController.java new file mode 100644 index 0000000..229d236 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/RewardUserCommandController.java @@ -0,0 +1,32 @@ +package com.qniao.dam.api.command.reward.user; + +import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; +import com.qniao.dam.application.service.reward.RewardApplicationService; +import com.qniao.framework.annotation.IgnoreResponseAdvice; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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; +import javax.validation.Valid; + +@RestController +@RequestMapping("user") +@Api(tags = "奖励") +public class RewardUserCommandController { + + @Resource + private RewardApplicationService rewardApplicationService; + + @ApiOperation("通过SDK获得奖励") + @PostMapping("acquire/matchmaker-join-recommend/reward/by/sdk") + @IgnoreResponseAdvice + public void userAcquireMatchmakerJoinRecommendRewardBySdk(@RequestBody @Valid UserAcquireMatchmakerJoinRecommendRewardDto dto) { + rewardApplicationService.acquireMatchmakerJoinRecommendReward(dto); + } + + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java new file mode 100644 index 0000000..f7fa2f3 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java @@ -0,0 +1,20 @@ +package com.qniao.dam.api.command.reward.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserAcquireMatchmakerJoinRecommendRewardDto { + + @ApiModelProperty("发起用户") + @NotNull + private Long initiatorUserId; + + @ApiModelProperty("接收用户") + @NotNull + private Long receiveUserId; + + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java new file mode 100644 index 0000000..bec0517 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java @@ -0,0 +1,7 @@ +package com.qniao.dam.api.query.walletaccount; + +import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; + +public interface WalletAccountQueryService { + WalletAccount queryByUserId(Long userId); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java new file mode 100644 index 0000000..719defd --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java @@ -0,0 +1,23 @@ +package com.qniao.dam.api.query.walletaccount.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qniao.dam.api.query.walletaccount.WalletAccountQueryService; +import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; +import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class WalletAccountQueryServiceImpl implements WalletAccountQueryService { + + @Resource + private WalletAccountDao walletAccountDao; + + @Override + public WalletAccount queryByUserId(Long userId) { + return walletAccountDao.selectOne(new LambdaQueryWrapper() + .eq(WalletAccount::getUserId, userId) + .last("limit 1")); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java index d4a6e37..e60ce1a 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java @@ -1,46 +1,27 @@ package com.qniao.dam.application.service.notify; -import cn.hutool.core.date.DateUtil; -import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; -import com.github.binarywang.wxpay.config.WxPayConfig; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.WxPayService; -import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; import com.qniao.dam.api.command.notify.user.response.WeChatNotification; import com.qniao.dam.api.command.notify.user.response.WeChatNotificationVo; import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.utils.WXPayV3Util; import com.qniao.dam.domain.aggregate.paymentchannelorder.PaymentChannelOrderAggregate; import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; -import com.qniao.dam.domian.aggregate.paymentchannelorder.constant.PaymentChannelOrderStatusEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.PaymentChannelOrderDao; import com.qniao.domain.BaseApplicationService; import com.qniao.domain.BaseDomainEvent; -import com.qniao.framework.exception.BizException; import com.qniao.framework.utils.TypeConvertUtils; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.math.BigDecimal; -import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Service @Slf4j public class NotifyApplicationService extends BaseApplicationService { - - @Value("${weixin.mchid}") - private String mchId; - @Value("${weixin.apiV3Key}") - private String v3Key; - private static final String WX_SUCCESS_RTN = ""; - private static final String WX_FAIL_RTN = ""; public static final String RETURN_VALUE_SUCCESS = "SUCCESS"; - public DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; 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 new file mode 100644 index 0000000..f33d2b3 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java @@ -0,0 +1,49 @@ +package com.qniao.dam.application.service.reward; + +import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; +import com.qniao.dam.api.query.walletaccount.WalletAccountQueryService; +import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; +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.rewardconfig.constant.RewardAmountUnitEnum; +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; +import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.Objects; + +@Service +public class RewardApplicationService { + + @Resource + private RewardConfigQueryService rewardConfigQueryService; + @Resource + private WalletAccountQueryService walletAccountQueryService; + @Resource + private WalletAccountAggregate walletAccountAggregate; + + /** + * todo 财务入账 + */ + public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { + synchronized (dto.getInitiatorUserId().toString().intern()) { + RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); + if (Objects.nonNull(rewardConfig) && RewardAmountUnitEnum.NUM.equals(rewardConfig.getRewardAmountUnit())) { + WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); + if (Objects.isNull(walletAccount)) { + walletAccount = WalletAccount.init(dto.getInitiatorUserId()); + } + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardConfig.getRewardAmount())); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, + rewardConfig.getRewardAmount(), true, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc()); + walletAccount.setRecordList(Collections.singletonList(record)); + walletAccountAggregate.save(walletAccount); + } + } + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/WalletAccountAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/WalletAccountAggregate.java index 641a170..18e4076 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/WalletAccountAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/WalletAccountAggregate.java @@ -1,7 +1,18 @@ package com.qniao.dam.domain.aggregate.walletaccount; +import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; +import com.qniao.dam.domain.aggregate.walletaccount.repository.WalletAccountRepository; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + @Service public class WalletAccountAggregate { + + @Resource + private WalletAccountRepository walletAccountRepository; + + public void save(WalletAccount walletAccount) { + walletAccountRepository.save(walletAccount); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java index 02d056d..48c5693 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java @@ -2,7 +2,11 @@ package com.qniao.dam.query.rewardconfig; import com.qniao.dam.api.query.rewardconfig.user.request.UserGetRewardConfigDetailQueryParams; import com.qniao.dam.api.query.rewardconfig.user.response.UserGetRewardConfigDetailVo; +import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; public interface RewardConfigQueryService { UserGetRewardConfigDetailVo getRewardConfigDetail(UserGetRewardConfigDetailQueryParams queryParams); + + RewardConfig queryByRewardType(RewardTypeEnum rewardType); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java index 11eff26..a88e495 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java @@ -1,7 +1,10 @@ package com.qniao.dam.query.rewardconfig.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qniao.dam.api.query.rewardconfig.user.request.UserGetRewardConfigDetailQueryParams; import com.qniao.dam.api.query.rewardconfig.user.response.UserGetRewardConfigDetailVo; +import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.RewardConfigDao; import com.qniao.dam.infrastructure.persistent.dao.view.RewardConfigViewDao; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; @@ -14,9 +17,18 @@ public class RewardConfigQueryServiceImpl implements RewardConfigQueryService { @Resource private RewardConfigViewDao rewardConfigViewDao; + @Resource + private RewardConfigDao rewardConfigDao; @Override public UserGetRewardConfigDetailVo getRewardConfigDetail(UserGetRewardConfigDetailQueryParams queryParams) { return rewardConfigViewDao.getRewardConfigDetail(queryParams); } + + @Override + public RewardConfig queryByRewardType(RewardTypeEnum rewardType) { + return rewardConfigDao.selectOne(new LambdaQueryWrapper() + .eq(RewardConfig::getRewardType,rewardType) + .last("limit 1")); + } }