Browse Source

基础配置

master
张彭杰 1 year ago
parent
commit
0a4595ca69
13 changed files with 195 additions and 26 deletions
  1. 8
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/entity/WalletAccount.java
  2. 12
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java
  3. 14
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java
  4. 10
      dating-agency-mall-sdk/src/main/java/com/qniao/dam/application/request/UserAcquireMatchmakerJoinRecommendRewardDto.java
  5. 32
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/RewardUserCommandController.java
  6. 20
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/UserAcquireMatchmakerJoinRecommendRewardDto.java
  7. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java
  8. 23
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java
  9. 19
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java
  10. 49
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java
  11. 11
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/WalletAccountAggregate.java
  12. 4
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/RewardConfigQueryService.java
  13. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/rewardconfig/impl/RewardConfigQueryServiceImpl.java

8
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<WalletAccount> {
@ApiModelProperty("钱包记录")
private transient List<WalletAccountRecord> 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;
}
}

12
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<WalletAccountRecord> {
@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;
}
}

14
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);
}

10
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;
}

32
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);
}
}

20
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;
}

7
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);
}

23
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<WalletAccount>()
.eq(WalletAccount::getUserId, userId)
.last("limit 1"));
}
}

19
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 = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
private static final String WX_FAIL_RTN = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
public static final String RETURN_VALUE_SUCCESS = "SUCCESS";
public DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;

49
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);
}
}
}
}

11
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);
}
}

4
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);
}

12
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<RewardConfig>()
.eq(RewardConfig::getRewardType,rewardType)
.last("limit 1"));
}
}
Loading…
Cancel
Save