diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java index 1628869..17c7989 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java @@ -23,7 +23,7 @@ public class RevenueReward extends Entity { private Long orgId; @ApiModelProperty("身份类型(个人、组织)") - private IdentityTypeEnum buyerIdentityType; + private IdentityTypeEnum identityType; @ApiModelProperty("收益记录") private transient List recordList; @@ -31,14 +31,14 @@ public class RevenueReward extends Entity { public static RevenueReward initUser(Long userId) { RevenueReward revenueReward = new RevenueReward(); revenueReward.setUserId(userId); - revenueReward.setBuyerIdentityType(IdentityTypeEnum.INDIVIDUAL); + revenueReward.setIdentityType(IdentityTypeEnum.INDIVIDUAL); return revenueReward; } public static RevenueReward initOrg(Long orgId) { RevenueReward revenueReward = new RevenueReward(); revenueReward.setOrgId(orgId); - revenueReward.setBuyerIdentityType(IdentityTypeEnum.ORGANIZATION); + revenueReward.setIdentityType(IdentityTypeEnum.ORGANIZATION); return revenueReward; } } 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 893c034..1a464d0 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 @@ -23,7 +23,7 @@ public class WalletAccount extends Entity { private Long orgId; @ApiModelProperty("身份类型(个人、组织)") - private IdentityTypeEnum buyerIdentityType; + private IdentityTypeEnum identityType; @ApiModelProperty("总余额") private BigDecimal totalBalance; @@ -37,9 +37,20 @@ public class WalletAccount extends Entity { @ApiModelProperty("钱包记录") private transient List recordList; - public static WalletAccount init(Long userId) { + public static WalletAccount initUser(Long userId) { WalletAccount walletAccount = new WalletAccount(); walletAccount.setUserId(userId); + walletAccount.setIdentityType(IdentityTypeEnum.INDIVIDUAL); + walletAccount.setTotalBalance(BigDecimal.ZERO); + walletAccount.setAvailableBalance(BigDecimal.ZERO); + walletAccount.setFrozenBalance(BigDecimal.ZERO); + return walletAccount; + } + + public static WalletAccount initOrg(Long orgId) { + WalletAccount walletAccount = new WalletAccount(); + walletAccount.setOrgId(orgId); + walletAccount.setIdentityType(IdentityTypeEnum.ORGANIZATION); walletAccount.setTotalBalance(BigDecimal.ZERO); walletAccount.setAvailableBalance(BigDecimal.ZERO); walletAccount.setFrozenBalance(BigDecimal.ZERO); 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 787dfe4..566a201 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 @@ -9,6 +9,7 @@ import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardAssociateOrderRecord; import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService; +import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao; import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; @@ -81,7 +82,71 @@ public class RewardApplicationService { //钱包信息 WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); if (Objects.isNull(walletAccount)) { - walletAccount = WalletAccount.init(dto.getInitiatorUserId()); + walletAccount = WalletAccount.initUser(dto.getInitiatorUserId()); + } + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true); + walletAccount.setRecordList(Collections.singletonList(record)); + acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); + } + } + } + //门店提成 + if (Objects.nonNull(dto.getStoreOrgId())) { + synchronized (dto.getStoreOrgId().toString().intern()) { + RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_STORE); + if (Objects.nonNull(recommendRewardConfig)) { + //收益信息 + RevenueReward revenueReward = revenueRewardQueryService.queryByOrgId(dto.getStoreOrgId()); + if (Objects.isNull(revenueReward)) { + revenueReward = RevenueReward.initOrg(dto.getStoreOrgId()); + } + //营收额 + BigDecimal revenue = recommendRewardConfig.calculate(rewardAmount); + RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, + revenue, revenue, associateOrder.getSettlementAmount()); + revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); + RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); + revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); + revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); + + //钱包信息 + WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getStoreOrgId(), IdentityTypeEnum.ORGANIZATION); + if (Objects.isNull(walletAccount)) { + walletAccount = WalletAccount.initOrg(dto.getStoreOrgId()); + } + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, revenue, true); + walletAccount.setRecordList(Collections.singletonList(record)); + acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); + } + } + } + //运营中心提成 + if (Objects.nonNull(dto.getOperationCenterOrgId())) { + synchronized (dto.getOperationCenterOrgId().toString().intern()) { + RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND_OPERATION_CENTER); + if (Objects.nonNull(recommendRewardConfig)) { + //收益信息 + RevenueReward revenueReward = revenueRewardQueryService.queryByOrgId(dto.getOperationCenterOrgId()); + if (Objects.isNull(revenueReward)) { + revenueReward = RevenueReward.initOrg(dto.getOperationCenterOrgId()); + } + //营收额 + BigDecimal revenue = recommendRewardConfig.calculate(rewardAmount); + RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, + revenue, revenue, associateOrder.getSettlementAmount()); + revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); + RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); + revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); + revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); + + //钱包信息 + WalletAccount walletAccount = walletAccountQueryService.queryByType(dto.getStoreOrgId(), IdentityTypeEnum.ORGANIZATION); + if (Objects.isNull(walletAccount)) { + walletAccount = WalletAccount.initOrg(dto.getOperationCenterOrgId()); } walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); @@ -91,7 +156,6 @@ public class RewardApplicationService { } } } - //运营中心 + 门店提成 } /** @@ -130,7 +194,7 @@ public class RewardApplicationService { //钱包 WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); if (Objects.isNull(walletAccount)) { - walletAccount = WalletAccount.init(dto.getReceiver()); + walletAccount = WalletAccount.initUser(dto.getReceiver()); } walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); @@ -177,7 +241,7 @@ public class RewardApplicationService { WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); if (Objects.isNull(walletAccount)) { - walletAccount = WalletAccount.init(dto.getReceiver()); + walletAccount = WalletAccount.initUser(dto.getReceiver()); } walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java index 0a8bc5c..7c72705 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java @@ -14,4 +14,6 @@ public interface RevenueRewardQueryService { UseGetRevenueRewardAbstractVo getRevenueRewardAbstract(UseGetRevenueRewardAbstractQueryParams queryParams); IPage pageRevenueRewardRecord(PageUtil pageUtil, UsePageRevenueRewardRecordQueryParams queryParams); + + RevenueReward queryByOrgId(Long orgId); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java index 8e076ac..adedecd 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java @@ -31,6 +31,13 @@ public class RevenueRewardQueryServiceImpl implements RevenueRewardQueryService .last("limit 1")); } + @Override + public RevenueReward queryByOrgId(Long orgId) { + return revenueRewardDao.selectOne(new LambdaQueryWrapper() + .eq(RevenueReward::getOrgId, orgId) + .last("limit 1")); + } + @Override public UseGetRevenueRewardAbstractVo getRevenueRewardAbstract(UseGetRevenueRewardAbstractQueryParams queryParams) { return revenueRewardViewDao.getRevenueRewardAbstract(queryParams); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java index 7bf74a1..9d5a0b1 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java @@ -5,6 +5,7 @@ import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountR 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.domian.aggregate.walletaccount.constant.IdentityTypeEnum; import com.qniao.framework.utils.PageUtil; @@ -14,4 +15,6 @@ public interface WalletAccountQueryService { IPage pageWalletAccountRecord(UserPageWalletAccountRecordQueryParam queryParam, PageUtil pageUtil); UserGetWalletAccountVo getWalletAccountView(Long userId); + + WalletAccount queryByType(Long identityId, IdentityTypeEnum identityTypeEnum); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java index 2a37f0e..09b48c6 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java @@ -6,6 +6,7 @@ import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountR 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.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.WalletAccountRecordDao; import com.qniao.dam.infrastructure.persistent.dao.view.WalletAccountViewDao; @@ -55,4 +56,18 @@ public class WalletAccountQueryServiceImpl implements WalletAccountQueryService } return walletAccountVo; } + + @Override + public WalletAccount queryByType(Long identityId, + IdentityTypeEnum identityType) { + if (IdentityTypeEnum.INDIVIDUAL.equals(identityType)) { + return walletAccountDao.selectOne(new LambdaQueryWrapper() + .eq(WalletAccount::getUserId, identityId) + .last("limit 1")); + } else { + return walletAccountDao.selectOne(new LambdaQueryWrapper() + .eq(WalletAccount::getOrgId, identityId) + .last("limit 1")); + } + } }