Browse Source

基础配置

release
张彭杰 1 year ago
parent
commit
535ef3e10e
15 changed files with 314 additions and 42 deletions
  1. 11
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java
  2. 9
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java
  3. 1
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java
  4. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java
  5. 23
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java
  6. 45
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/WalletAccountUserQueryController.java
  7. 12
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/request/UserPageWalletAccountRecordQueryParam.java
  8. 46
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountRecordVo.java
  9. 26
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountVo.java
  10. 23
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountAssociateOrderRecordVo.java
  11. 20
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java
  12. 20
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/WalletAccountViewDao.java
  13. 14
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java
  14. 62
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java
  15. 37
      dating-agency-mall-server/src/main/resources/mapper/walletaccount/WalletAccountViewMapper.xml

11
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java

@ -10,9 +10,16 @@ import lombok.Getter;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum RewardTypeEnum {
MATCHMAKER_JOIN_RECOMMEND(1, "红娘入驻推荐"),
PLATFORM_SERVICE_FEE(2, "平台服务费");
GUEST_CERTIFICATION(101, "嘉宾实名认证"),
PUBLISH_MARRIAGE_BOUNTY(102, "发布悬赏招亲"),
MATCH_MARRIAGE_BOUNTY(103, "匹配悬赏招亲"),
MATCHMAKER_JOIN_RECOMMEND(104, "红娘入驻推荐"),
PLATFORM_SERVICE_FEE(201, "平台服务费");
@EnumValue
@JsonValue

9
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java

@ -9,6 +9,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.math.RoundingMode;
@Data
@EqualsAndHashCode(callSuper = true)
@ -23,4 +24,12 @@ public class RewardConfig extends Entity<RewardConfig> {
@ApiModelProperty("奖励金额")
private BigDecimal rewardAmount;
public BigDecimal calculate(BigDecimal amount) {
if (RewardAmountUnitEnum.NUM.equals(rewardAmountUnit)) {
return rewardAmount;
} else {
return amount.multiply(rewardAmount).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
}
}
}

1
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java

@ -44,6 +44,7 @@ public class WalletAccountRecord extends ValueObject<WalletAccountRecord> {
record.setTradeType(tradeType);
record.setTradeAmount(tradeAmount);
record.setIsIncome(isIncome);
record.setContent(content);
record.setRemark(remark);
return record;
}

7
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java

@ -1,7 +0,0 @@
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

@ -1,23 +0,0 @@
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"));
}
}

45
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/WalletAccountUserQueryController.java

@ -0,0 +1,45 @@
package com.qniao.dam.api.query.walletaccount.user;
import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam;
import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo;
import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountVo;
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount;
import com.qniao.dam.query.walletaccount.WalletAccountQueryService;
import com.qniao.domain.QnPage;
import com.qniao.framework.utils.PageUtil;
import com.qniao.framework.utils.TypeConvertUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Objects;
@RestController
@RequestMapping("user")
@Api(tags = "权益")
public class WalletAccountUserQueryController {
@Resource
private WalletAccountQueryService walletAccountQueryService;
@PostMapping("get/wallet-account")
@ApiOperation("用户获取钱包账号")
public UserGetWalletAccountVo userGetWalletAccount(@RequestParam("userId") Long userId) {
UserGetWalletAccountVo vo = new UserGetWalletAccountVo();
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(userId);
if (Objects.nonNull(walletAccount)) {
vo = TypeConvertUtils.convert(walletAccount, UserGetWalletAccountVo.class);
}
return vo;
}
@PostMapping("get/wallet-account-record/page")
@ApiOperation("用户获取钱包账号记录")
public QnPage<UserGetWalletAccountRecordVo> userPageWalletAccountRecord(@RequestParam("userId") Long userId,
PageUtil pageUtil,
UserPageWalletAccountRecordQueryParam queryParam) {
return PageUtil.convert(walletAccountQueryService.pageWalletAccountRecord(userId, queryParam, pageUtil), UserGetWalletAccountRecordVo.class);
}
}

12
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/request/UserPageWalletAccountRecordQueryParam.java

@ -0,0 +1,12 @@
package com.qniao.dam.api.query.walletaccount.user.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UserPageWalletAccountRecordQueryParam {
@ApiModelProperty("交易收益类型 1推荐 2平台服务费")
private Integer tradeType;
}

46
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountRecordVo.java

@ -0,0 +1,46 @@
package com.qniao.dam.api.query.walletaccount.user.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class UserGetWalletAccountRecordVo {
@ApiModelProperty("唯一标识")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
@ApiModelProperty("用户钱包账号标识")
@JsonSerialize(using = ToStringSerializer.class)
private Long walletAccountId;
@ApiModelProperty("时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@ApiModelProperty("交易类型")
private TradeTypeEnum tradeType;
@ApiModelProperty("交易金额")
private BigDecimal tradeAmount;
@ApiModelProperty("是否收入")
private Boolean isIncome;
@ApiModelProperty("内容")
private String content;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("关联订单")
private List<WalletAccountAssociateOrderRecordVo> associateOrderRecordList;
}

26
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountVo.java

@ -0,0 +1,26 @@
package com.qniao.dam.api.query.walletaccount.user.response;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class UserGetWalletAccountVo {
@ApiModelProperty("钱包账户标识")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
@ApiModelProperty("总余额")
private BigDecimal totalBalance = BigDecimal.ZERO;
@ApiModelProperty("可用余额")
private BigDecimal availableBalance = BigDecimal.ZERO;
@ApiModelProperty("冻结余额")
private BigDecimal frozenBalance = BigDecimal.ZERO;
}

23
dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountAssociateOrderRecordVo.java

@ -0,0 +1,23 @@
package com.qniao.dam.api.query.walletaccount.user.response;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class WalletAccountAssociateOrderRecordVo {
@ApiModelProperty("钱包记录标识")
@JsonSerialize(using = ToStringSerializer.class)
private Long walletAccountRecordId;
@ApiModelProperty("有关联的订单")
@JsonSerialize(using = ToStringSerializer.class)
private Long associateOrderId;
@ApiModelProperty("有关联的金额")
private BigDecimal associateOrderAmount;
}

20
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java

@ -1,7 +1,7 @@
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.query.walletaccount.WalletAccountQueryService;
import com.qniao.dam.domain.aggregate.order.entity.Order;
import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig;
import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate;
@ -17,6 +17,7 @@ import com.qniao.dam.query.rewardconfig.RewardConfigQueryService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Objects;
@ -38,21 +39,20 @@ public class RewardApplicationService {
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())) {
if (Objects.nonNull(rewardConfig)) {
WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId());
Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE);
if (Objects.isNull(walletAccount)) {
walletAccount = WalletAccount.init(dto.getInitiatorUserId());
}
String content = "推荐红娘" + (Objects.nonNull(associateOrder) ? associateOrder.getOrderBelongName() : "") + "入驻平台";
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardConfig.getRewardAmount()));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
BigDecimal rewardAmount = rewardConfig.calculate(associateOrder.getSettlementAmount());
String content = "推荐红娘" + associateOrder.getOrderBelongName() + "入驻平台";
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(rewardAmount));
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE,
rewardConfig.getRewardAmount(), true, content, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc());
if (Objects.nonNull(associateOrder)) {
WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount());
record.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord));
}
rewardAmount, true, content, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc());
WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount());
record.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord));
walletAccount.setRecordList(Collections.singletonList(record));
walletAccountAggregate.save(walletAccount);
}

20
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/WalletAccountViewDao.java

@ -0,0 +1,20 @@
package com.qniao.dam.infrastructure.persistent.dao.view;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam;
import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo;
import com.qniao.dam.api.query.walletaccount.user.response.WalletAccountAssociateOrderRecordVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface WalletAccountViewDao {
IPage<UserGetWalletAccountRecordVo> pageWalletAccountRecord(Page<Object> pageWithoutOrders,
@Param("queryParam") UserPageWalletAccountRecordQueryParam queryParam,
@Param("userId") Long userId);
List<WalletAccountAssociateOrderRecordVo> listAssociateOrderRecordBy(@Param("recordIdList") List<Long> recordIdList);
}

14
dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java

@ -0,0 +1,14 @@
package com.qniao.dam.query.walletaccount;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam;
import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo;
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount;
import com.qniao.framework.utils.PageUtil;
public interface WalletAccountQueryService {
WalletAccount queryByUserId(Long userId);
IPage<UserGetWalletAccountRecordVo> pageWalletAccountRecord(Long userId, UserPageWalletAccountRecordQueryParam queryParam, PageUtil pageUtil);
}

62
dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java

@ -0,0 +1,62 @@
package com.qniao.dam.query.walletaccount.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam;
import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo;
import com.qniao.dam.api.query.walletaccount.user.response.WalletAccountAssociateOrderRecordVo;
import com.qniao.dam.infrastructure.persistent.dao.view.WalletAccountViewDao;
import com.qniao.dam.query.walletaccount.WalletAccountQueryService;
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount;
import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao;
import com.qniao.framework.utils.PageUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class WalletAccountQueryServiceImpl implements WalletAccountQueryService {
@Resource
private WalletAccountDao walletAccountDao;
@Resource
private WalletAccountViewDao walletAccountViewDao;
@Override
public WalletAccount queryByUserId(Long userId) {
return walletAccountDao.selectOne(new LambdaQueryWrapper<WalletAccount>()
.eq(WalletAccount::getUserId, userId)
.last("limit 1"));
}
@Override
public IPage<UserGetWalletAccountRecordVo> pageWalletAccountRecord(Long userId, UserPageWalletAccountRecordQueryParam queryParam, PageUtil pageUtil) {
IPage<UserGetWalletAccountRecordVo> page = walletAccountViewDao.pageWalletAccountRecord(pageUtil.toPageWithoutOrders(), queryParam, userId);
if (page.getRecords().size() > 0) {
List<Long> recordIdList = page.getRecords().stream().map(UserGetWalletAccountRecordVo::getWalletAccountId).collect(Collectors.toList());
Map<Long, List<WalletAccountAssociateOrderRecordVo>> associateOrderRecordMap = mapAssociateOrderRecordBy(recordIdList);
page.getRecords().forEach(record -> {
record.setAssociateOrderRecordList(associateOrderRecordMap.get(record.getId()));
});
}
return page;
}
private Map<Long, List<WalletAccountAssociateOrderRecordVo>> mapAssociateOrderRecordBy(List<Long> recordIdList) {
List<WalletAccountAssociateOrderRecordVo> list = listAssociateOrderRecordBy(recordIdList);
return list.stream().collect(Collectors.groupingBy(WalletAccountAssociateOrderRecordVo::getAssociateOrderId));
}
private List<WalletAccountAssociateOrderRecordVo> listAssociateOrderRecordBy(List<Long> recordIdList) {
List<WalletAccountAssociateOrderRecordVo> list = new ArrayList<>();
if (CollUtil.isNotEmpty(recordIdList)) {
list = walletAccountViewDao.listAssociateOrderRecordBy(recordIdList);
}
return list;
}
}

37
dating-agency-mall-server/src/main/resources/mapper/walletaccount/WalletAccountViewMapper.xml

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qniao.dam.infrastructure.persistent.dao.view.WalletAccountViewDao">
<select id="pageWalletAccountRecord"
resultType="com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo">
SELECT
dwar.create_time,
dwar.wallet_account_id,
dwar.trade_type,
dwar.trade_amount,
dwar.is_income,
dwar.content,
dwar.remark
FROM da_wallet_account_record as dwar
INNER JOIN da_wallet_account as dwa on dwa.id=dwar.wallet_account_id
where dwa.is_delete=0 and dwa.user_id=#{userId}
<if test="queryParam.tradeType != null">
and dwar.trade_type = #{queryParam.tradeType}
</if>
order by dwar.create_time desc
</select>
<select id="listAssociateOrderRecordBy"
resultType="com.qniao.dam.api.query.walletaccount.user.response.WalletAccountAssociateOrderRecordVo">
select
wallet_account_record_id,
associate_order_id,
associate_order_amount
FROM da_wallet_account_associate_order_record
where wallet_account_record_id in
<foreach collection="recordIdList" item="recordId" open="(" close=")" separator=",">
#{recordId}
</foreach>
</select>
</mapper>
Loading…
Cancel
Save