From ff9925764a4137c3956c58a8c88d7f981e0a2953 Mon Sep 17 00:00:00 2001 From: Derran Date: Wed, 18 Mar 2026 18:36:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A7=94=E6=89=98=E6=9C=8D=E5=8A=A1=E8=B4=B9?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rewardconfig/constant/RewardTypeEnum.java | 2 + .../walletaccount/constant/TradeTypeEnum.java | 2 + .../eso/entity/EntrustServiceOrder.java | 14 +++- .../valueobj/RevenueRewardRecord.java | 2 + ...rustServiceOrderUserCommandController.java | 27 ++++++-- ...ApplyAfterSalesEntrustServiceOrderDto.java | 29 ++++++++ ... => UserCancelEntrustServiceOrderDto.java} | 2 +- .../UserConfirmEntrustServiceOrderDto.java | 23 +++++++ ...EntrustServiceOrderApplicationService.java | 53 +++++++++++++-- .../RevenueRewardApplicationService.java | 67 +++++++++++++++++++ .../reward/RewardApplicationService.java | 2 +- .../task/EntrustServiceOrderTask.java | 59 ++++++++++++++-- ...ncelEntrustServiceOrderDomainService.java} | 2 +- 13 files changed, 262 insertions(+), 22 deletions(-) create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserApplyAfterSalesEntrustServiceOrderDto.java rename dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/{UserRefundEntrustServiceOrderDto.java => UserCancelEntrustServiceOrderDto.java} (93%) create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserConfirmEntrustServiceOrderDto.java rename dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/eso/{RefundEntrustServiceOrderDomainService.java => CancelEntrustServiceOrderDomainService.java} (94%) diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java index ecd0cca..2fb0e86 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java @@ -80,6 +80,8 @@ public enum RewardTypeEnum { ENTRUST_SERVICE_OFFLINE_MEETING_FEE(130, "委托服务线下见面费用"), + ENTRUST_SERVICE_MATCHMAKER_FEE(131, "委托服务红娘收益"), + // 2** 服务费 PLATFORM_SERVICE_FEE(201, "平台服务费"), 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 3682ef9..5108cfc 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 @@ -48,6 +48,8 @@ public enum TradeTypeEnum { QZQ_RECOMMEND_GIFT_REWARD(119, "邀请分成"), + ENTRUST_SERVICE_REWARD(120, "委托服务收益"), + PLATFORM_SERVICE_FEE(201, "平台服务费"), WITHDRAW(202, "提现"); diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/eso/entity/EntrustServiceOrder.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/eso/entity/EntrustServiceOrder.java index 8ce4da7..646f3b9 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/eso/entity/EntrustServiceOrder.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/eso/entity/EntrustServiceOrder.java @@ -58,12 +58,24 @@ public class EntrustServiceOrder extends Entity { @ApiModelProperty("付款状态") private EntrustServicePaymentStatusEnum paymentStatus; - @ApiModelProperty("接受截至时间") + @ApiModelProperty("接受截止时间") private LocalDateTime acceptanceDeadline; @ApiModelProperty("接收时间") private LocalDateTime acceptedTime; + @ApiModelProperty("完成截止时间") + private LocalDateTime finishDeadline; + + @ApiModelProperty("完成时间") + private LocalDateTime finishedTime; + + @ApiModelProperty("结算截止时间") + private LocalDateTime settlementDeadline; + + @ApiModelProperty("是否结算") + private Boolean isSettlement; + @ApiModelProperty("退款原因") private String refundReason; diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java index 2a4b443..46fe92c 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java @@ -87,6 +87,8 @@ public class RevenueRewardRecord extends ValueObject { content = StrUtil.format("推荐服务商{}入驻平台", elements.toArray()); } else if (TradeTypeEnum.QZQ_RECOMMEND_GIFT_REWARD.equals(tradeType)) { content = StrUtil.format("{}消费分成", elements.toArray()); + } else if (TradeTypeEnum.ENTRUST_SERVICE_REWARD.equals(tradeType)) { + content = StrUtil.format("嘉宾{}委托服务分成", elements.toArray()); } } } \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/EntrustServiceOrderUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/EntrustServiceOrderUserCommandController.java index 326eff3..b0b8935 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/EntrustServiceOrderUserCommandController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/EntrustServiceOrderUserCommandController.java @@ -1,7 +1,9 @@ package com.qniao.dam.api.command.eso.user; import com.qniao.dam.api.command.eso.user.request.UserAcceptEntrustServiceOrderDto; -import com.qniao.dam.api.command.eso.user.request.request.UserRefundEntrustServiceOrderDto; +import com.qniao.dam.api.command.eso.user.request.request.UserApplyAfterSalesEntrustServiceOrderDto; +import com.qniao.dam.api.command.eso.user.request.request.UserCancelEntrustServiceOrderDto; +import com.qniao.dam.api.command.eso.user.request.request.UserConfirmEntrustServiceOrderDto; import com.qniao.dam.application.service.eso.EntrustServiceOrderApplicationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,11 +27,26 @@ public class EntrustServiceOrderUserCommandController { entrustServiceOrderApplicationService.accept(dto.trans2Domain(), dto.getIsAccept()); } - @ApiOperation("用户发起委托服务订单退款") - @PostMapping("/refund/entrust-service-order") - public void refundEntrustServiceOrder(@RequestBody @Validated UserRefundEntrustServiceOrderDto dto, + @ApiOperation("用户发起取消委托服务订单") + @PostMapping("/cancel/entrust-service-order") + public void cancelEntrustServiceOrder(@RequestBody @Validated UserCancelEntrustServiceOrderDto dto, @RequestParam Long userId) { - entrustServiceOrderApplicationService.refundApply(dto.trans2Domain()); + entrustServiceOrderApplicationService.cancel(dto.trans2Domain()); } + @ApiOperation("用户确认委托服务订单") + @PostMapping("/confirm/entrust-service-order") + public void confirmEntrustServiceOrder(@RequestBody @Validated UserConfirmEntrustServiceOrderDto dto, + @RequestParam Long userId) { + entrustServiceOrderApplicationService.confirm(dto.trans2Domain()); + } + + @ApiOperation("用户申请委托服务订单售后") + @PostMapping("/apply/after-sales/entrust-service-order") + public void applyAfterSalesEntrustServiceOrder(@RequestBody @Validated UserApplyAfterSalesEntrustServiceOrderDto dto, + @RequestParam Long userId) { + entrustServiceOrderApplicationService.applyAfterSales(dto.trans2Domain()); + } + + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserApplyAfterSalesEntrustServiceOrderDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserApplyAfterSalesEntrustServiceOrderDto.java new file mode 100644 index 0000000..10d6456 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserApplyAfterSalesEntrustServiceOrderDto.java @@ -0,0 +1,29 @@ +package com.qniao.dam.api.command.eso.user.request.request; + +import com.qniao.dam.domain.aggregate.eso.entity.EntrustServiceOrder; +import com.qniao.domain.Trans2DomainAssembler; +import com.qniao.framework.utils.TypeConvertUtils; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +@Data +public class UserApplyAfterSalesEntrustServiceOrderDto implements Trans2DomainAssembler { + + @ApiModelProperty("唯一标识") + @NotNull(message = "唯一标识不能为空") + private Long id; + + @ApiModelProperty("退款原因") + @NotNull(message = "退款原因不能为空") + @Size(max = 100,min = 1, message = "退款原因不超过100个字符") + private String refundReason; + + @Override + public EntrustServiceOrder trans2Domain() { + return TypeConvertUtils.convert(this, EntrustServiceOrder.class); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserRefundEntrustServiceOrderDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserCancelEntrustServiceOrderDto.java similarity index 93% rename from dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserRefundEntrustServiceOrderDto.java rename to dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserCancelEntrustServiceOrderDto.java index f5092d6..8dd2efe 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserRefundEntrustServiceOrderDto.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserCancelEntrustServiceOrderDto.java @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @Data -public class UserRefundEntrustServiceOrderDto implements Trans2DomainAssembler { +public class UserCancelEntrustServiceOrderDto implements Trans2DomainAssembler { @ApiModelProperty("唯一标识") @NotNull(message = "唯一标识不能为空") diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserConfirmEntrustServiceOrderDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserConfirmEntrustServiceOrderDto.java new file mode 100644 index 0000000..96445de --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/eso/user/request/request/UserConfirmEntrustServiceOrderDto.java @@ -0,0 +1,23 @@ +package com.qniao.dam.api.command.eso.user.request.request; + +import com.qniao.dam.domain.aggregate.eso.entity.EntrustServiceOrder; +import com.qniao.domain.Trans2DomainAssembler; +import com.qniao.framework.utils.TypeConvertUtils; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserConfirmEntrustServiceOrderDto implements Trans2DomainAssembler { + + @ApiModelProperty("唯一标识") + @NotNull(message = "唯一标识不能为空") + private Long id; + + @Override + public EntrustServiceOrder trans2Domain() { + return TypeConvertUtils.convert(this, EntrustServiceOrder.class); + } + +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/eso/EntrustServiceOrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/eso/EntrustServiceOrderApplicationService.java index 247e817..2701f43 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/eso/EntrustServiceOrderApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/eso/EntrustServiceOrderApplicationService.java @@ -7,7 +7,7 @@ import com.qniao.dam.domain.aggregate.ora.entity.OrderRefundApplication; import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund; -import com.qniao.dam.domain.service.eso.RefundEntrustServiceOrderDomainService; +import com.qniao.dam.domain.service.eso.CancelEntrustServiceOrderDomainService; import com.qniao.dam.domian.aggregate.eso.constant.EntrustServicePaymentStatusEnum; import com.qniao.dam.domian.aggregate.eso.constant.EntrustServiceStatusEnum; import com.qniao.dam.domian.aggregate.ora.constant.OrderRefundApplicationStatus; @@ -21,6 +21,7 @@ import com.qniao.dam.query.paymentorder.PaymentOrderQueryService; import com.qniao.das.domian.aggregate.matchmakermarriage.MatchmakerMarriageInformation; import com.qniao.domain.BaseApplicationService; import com.qniao.domain.BaseDomainEvent; +import com.qniao.framework.exception.BizException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -43,7 +44,7 @@ public class EntrustServiceOrderApplicationService extends BaseApplicationServic @Resource private EntrustServiceOrderDao entrustServiceOrderDao; @Resource - private RefundEntrustServiceOrderDomainService refundEntrustServiceOrderDomainService; + private CancelEntrustServiceOrderDomainService cancelEntrustServiceOrderDomainService; @Resource private PaymentOrderQueryService paymentOrderQueryService; @Resource @@ -91,8 +92,12 @@ public class EntrustServiceOrderApplicationService extends BaseApplicationServic existEntrustServiceOrder.getPaymentStatus().equals(EntrustServicePaymentStatusEnum.PAID)) { if (isAccept) { //红娘接单 + if (existEntrustServiceOrder.getAcceptanceDeadline().isBefore(LocalDateTime.now())) { + throw new BizException("已超出接单时间"); + } entrustServiceOrder.setStatus(EntrustServiceStatusEnum.ACCEPTED); entrustServiceOrder.setAcceptedTime(LocalDateTime.now()); + entrustServiceOrder.setFinishDeadline(entrustServiceOrder.getAcceptedTime().plusDays(7)); entrustServiceOrderAggregate.edit(entrustServiceOrder); } else { //红娘拒接单 @@ -103,10 +108,10 @@ public class EntrustServiceOrderApplicationService extends BaseApplicationServic } } - public void refundApply(EntrustServiceOrder entrustServiceOrder) { + public void cancel(EntrustServiceOrder entrustServiceOrder) { //状态判断 退款时间要求 EntrustServiceOrder existEntrustServiceOrder = entrustServiceOrderDao.selectById(entrustServiceOrder.getId()); - checkRefundPossible(existEntrustServiceOrder); + checkCancelPossible(existEntrustServiceOrder); entrustServiceOrder.setOriginalStatus(existEntrustServiceOrder.getStatus()); entrustServiceOrder.setStatus(EntrustServiceStatusEnum.CANCELED); entrustServiceOrder.setPaymentStatus(EntrustServicePaymentStatusEnum.BEING_REFUNDED); @@ -115,10 +120,44 @@ public class EntrustServiceOrderApplicationService extends BaseApplicationServic existEntrustServiceOrder.getPaidAmount(), existEntrustServiceOrder.getPaidAmount()); orderRefundApplication.setOperationStatus(OrderRefundApplicationStatus.UNAUDITED); orderRefundApplication.setStatus(OrderRefundApplicationStatus.UNAUDITED); - refundEntrustServiceOrderDomainService.handle(entrustServiceOrder, orderRefundApplication); + cancelEntrustServiceOrderDomainService.handle(entrustServiceOrder, orderRefundApplication); + } + + public void applyAfterSales(EntrustServiceOrder entrustServiceOrder) { + //状态判断 退款时间要求 + EntrustServiceOrder existEntrustServiceOrder = entrustServiceOrderDao.selectById(entrustServiceOrder.getId()); + applyAfterSalesPossible(existEntrustServiceOrder); + entrustServiceOrder.setOriginalStatus(existEntrustServiceOrder.getStatus()); + entrustServiceOrder.setStatus(EntrustServiceStatusEnum.AFTER_SALE_COMPLETED); + entrustServiceOrder.setPaymentStatus(EntrustServicePaymentStatusEnum.BEING_REFUNDED); + + OrderRefundApplication orderRefundApplication = OrderRefundApplication.build(entrustServiceOrder.getId(), RefundOrderTypeEnum.ENTRUST_SERVICE, + existEntrustServiceOrder.getPaidAmount(), existEntrustServiceOrder.getPaidAmount()); + orderRefundApplication.setOperationStatus(OrderRefundApplicationStatus.UNAUDITED); + orderRefundApplication.setStatus(OrderRefundApplicationStatus.UNAUDITED); + cancelEntrustServiceOrderDomainService.handle(entrustServiceOrder, orderRefundApplication); } - private void checkRefundPossible(EntrustServiceOrder entrustServiceOrder) { + private void applyAfterSalesPossible(EntrustServiceOrder entrustServiceOrder) { + if (Objects.nonNull(entrustServiceOrder)) { + if (!(entrustServiceOrder.getStatus().equals(EntrustServiceStatusEnum.FINISHED) && !entrustServiceOrder.getIsSettlement())) { + throw new RuntimeException("无法发起退款"); + } + } + } + + public void confirm(EntrustServiceOrder entrustServiceOrder) { + EntrustServiceOrder existEntrustServiceOrder = entrustServiceOrderDao.selectById(entrustServiceOrder.getId()); + if (existEntrustServiceOrder.getStatus().equals(EntrustServiceStatusEnum.ACCEPTED)) { + existEntrustServiceOrder.setStatus(EntrustServiceStatusEnum.FINISHED); + existEntrustServiceOrder.setFinishedTime(LocalDateTime.now()); + existEntrustServiceOrder.setSettlementDeadline(entrustServiceOrder.getFinishedTime().plusDays(4)); + existEntrustServiceOrder.setRemark("用户确认完成"); + entrustServiceOrderAggregate.edit(existEntrustServiceOrder); + } + } + + private void checkCancelPossible(EntrustServiceOrder entrustServiceOrder) { if (Objects.nonNull(entrustServiceOrder)) { if ((entrustServiceOrder.getStatus().equals(EntrustServiceStatusEnum.PENDING_ACCEPT) || entrustServiceOrder.getStatus().equals(EntrustServiceStatusEnum.ACCEPTED))) { @@ -151,10 +190,10 @@ public class EntrustServiceOrderApplicationService extends BaseApplicationServic paymentOrderRefund.setRefundAmount(paymentChannelOrder.getAmount()); paymentOrderRefundList.add(paymentOrderRefund); } - entrustServiceOrder.setStatus(EntrustServiceStatusEnum.CANCELED); entrustServiceOrder.setPaymentStatus(EntrustServicePaymentStatusEnum.REFUNDED); entrustServiceOrderAggregate.edit(entrustServiceOrder); //发起微信退款 paymentOrderRefundApplicationService.refund(paymentOrderRefundList); } + } \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/revenuereward/RevenueRewardApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/revenuereward/RevenueRewardApplicationService.java index ad94779..246a6c6 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/revenuereward/RevenueRewardApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/revenuereward/RevenueRewardApplicationService.java @@ -1,16 +1,26 @@ package com.qniao.dam.application.service.revenuereward; +import cn.hutool.core.util.StrUtil; +import com.qniao.dam.application.service.reward.RewardApplicationService; +import com.qniao.dam.domain.aggregate.eso.entity.EntrustServiceOrder; import com.qniao.dam.domain.aggregate.revenuereward.RevenueRewardAggregate; 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.aggregate.rewardconfig.entity.RewardConfig; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService; +import com.qniao.dam.domian.aggregate.matchmaker.event.MatchmakerFranchiseFeeRewardEvent; +import com.qniao.dam.domian.aggregate.pointaccount.event.PointRewardCreatedMQ; +import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeSceneEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import com.qniao.dam.infrastructure.constant.MqExchange; +import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; +import com.qniao.dam.infrastructure.persistent.dao.domain.MatchmakerDao; import com.qniao.dam.infrastructure.persistent.dao.domain.RevenueRewardRecordDao; import com.qniao.dam.infrastructure.persistent.dao.org.OrganizationDao; import com.qniao.dam.query.operationcenter.OperationCenterQueryService; @@ -18,9 +28,12 @@ import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.dam.query.store.StoreQueryService; import com.qniao.dam.query.walletaccount.WalletAccountQueryService; +import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; +import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker; import com.qniao.dau.domain.aggregate.operationcenter.entity.OperationCenter; import com.qniao.dau.domain.aggregate.organization.entity.Organization; import com.qniao.dau.domain.aggregate.store.entity.Store; +import com.qniao.dau.domian.aggregate.matchmakeraudit.constant.MatchmakerAuditBehaviorEnum; import com.qniao.dau.domian.aggregate.organization.constant.OrganizationTypeEnum; import com.qniao.framework.exception.BizException; import lombok.extern.slf4j.Slf4j; @@ -53,6 +66,12 @@ public class RevenueRewardApplicationService { private WalletAccountQueryService walletAccountQueryService; @Resource private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; + @Resource + private MatchmakerDao matchmakerDao; + @Resource + private MarriageInformationDao marriageInformationDao; + @Resource + private RewardApplicationService rewardApplicationService; public void create(RevenueReward revenueReward) { RevenueReward existRevenueReward = revenueRewardQueryService.queryByUserId(revenueReward.getUserId()); @@ -123,4 +142,52 @@ public class RevenueRewardApplicationService { log.error("管道收益处理异常", e); } } + + + public void settleEntrustServiceOrder(EntrustServiceOrder entrustServiceOrder) { + Matchmaker matchmaker = matchmakerDao.selectById(entrustServiceOrder.getMatchmakerId()); + MarriageInformation initiatorMiInfo = marriageInformationDao.selectById(entrustServiceOrder.getInitiatorMiId()); + //邀请红娘在有效期内才能拿到佣金+积分奖励 + if (Objects.nonNull(matchmaker) && matchmaker.checkEnable()) { + //收益信息 + RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(matchmaker.getUserId()); + if (Objects.isNull(revenueReward)) { + revenueReward = RevenueReward.initUser(matchmaker.getUserId()); + } + RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.ENTRUST_SERVICE_MATCHMAKER_FEE); + + //营收额 + BigDecimal revenue = rewardConfig.calculateReward(entrustServiceOrder.getRewardAmount()); + RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.ENTRUST_SERVICE_REWARD, TradeSceneEnum.ONLINE, + revenue, new BigDecimal(rewardConfig.getValue()), BigDecimal.ZERO, revenue, entrustServiceOrder.getRewardAmount()); + revenueRewardRecord.handleContent(Collections.singletonList(initiatorMiInfo.getNickName())); + RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(entrustServiceOrder.getAssociateOrderId(), entrustServiceOrder.getRewardAmount()); + revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); + revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); + + //钱包信息 + WalletAccount walletAccount = walletAccountQueryService.queryByType(matchmaker.getUserId(), IdentityTypeEnum.INDIVIDUAL); + BigDecimal originalBalance = walletAccount.getTotalBalance(); + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(revenue)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.ENTRUST_SERVICE_REWARD, revenue, true, originalBalance, walletAccount.getTotalBalance()); + walletAccount.setRecordList(Collections.singletonList(record)); + acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); + } + + if (Objects.nonNull(matchmaker.getStoreId())) { + //门店收益 + Store store = storeQueryService.queryById(matchmaker.getStoreId()); + rewardApplicationService.handleAcquireReward(store.getOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_STORE_REWARD, + entrustServiceOrder.getRewardAmount(), initiatorMiInfo, + entrustServiceOrder.getRewardAmount(), Collections.singletonList(entrustServiceOrder.getAssociateOrderId()), TradeTypeEnum.ENTRUST_SERVICE_REWARD); + + //运营中心 + if (Objects.nonNull(store.getOperationCenterOrgId())) { + rewardApplicationService.handleAcquireReward(store.getOperationCenterOrgId(), IdentityTypeEnum.ORGANIZATION, RewardTypeEnum.PLATFORM_SERVICE_OPERATION_CENTER_REWARD, + entrustServiceOrder.getRewardAmount(), initiatorMiInfo, + entrustServiceOrder.getRewardAmount(), Collections.singletonList(entrustServiceOrder.getAssociateOrderId()), TradeTypeEnum.ENTRUST_SERVICE_REWARD); + } + } + } } 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 0f9942c..31be727 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 @@ -500,7 +500,7 @@ public class RewardApplicationService extends BaseApplicationService { } } - private void handleAcquireReward(Long identityId, + public void handleAcquireReward(Long identityId, IdentityTypeEnum identityType, RewardTypeEnum rewardType, BigDecimal amount, diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/EntrustServiceOrderTask.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/EntrustServiceOrderTask.java index f4c5bcb..c300981 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/EntrustServiceOrderTask.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/task/EntrustServiceOrderTask.java @@ -2,14 +2,13 @@ package com.qniao.dam.application.task; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qniao.dam.application.service.revenuereward.RevenueRewardApplicationService; import com.qniao.dam.domain.aggregate.eso.EntrustServiceOrderAggregate; import com.qniao.dam.domain.aggregate.eso.entity.EntrustServiceOrder; -import com.qniao.dam.domain.aggregate.mica.entity.MarriageInformationContactApply; import com.qniao.dam.domain.aggregate.ora.entity.OrderRefundApplication; -import com.qniao.dam.domain.service.eso.RefundEntrustServiceOrderDomainService; +import com.qniao.dam.domain.service.eso.CancelEntrustServiceOrderDomainService; import com.qniao.dam.domian.aggregate.eso.constant.EntrustServicePaymentStatusEnum; import com.qniao.dam.domian.aggregate.eso.constant.EntrustServiceStatusEnum; -import com.qniao.dam.domian.aggregate.mica.constant.MarriageInformationContactApplyStatusEnum; import com.qniao.dam.domian.aggregate.ora.constant.OrderRefundApplicationStatus; import com.qniao.dam.domian.aggregate.ora.constant.RefundOrderTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.eso.EntrustServiceOrderDao; @@ -18,7 +17,6 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -33,7 +31,11 @@ public class EntrustServiceOrderTask { @Resource private EntrustServiceOrderDao entrustServiceOrderDao; @Resource - private RefundEntrustServiceOrderDomainService refundEntrustServiceOrderDomainService; + private CancelEntrustServiceOrderDomainService cancelEntrustServiceOrderDomainService; + @Resource + private EntrustServiceOrderAggregate entrustServiceOrderAggregate; + @Resource + private RevenueRewardApplicationService revenueRewardApplicationService; @Scheduled(cron = "0 0 * * * *") @@ -54,7 +56,7 @@ public class EntrustServiceOrderTask { entrustServiceOrder.getPaidAmount(), entrustServiceOrder.getPaidAmount()); orderRefundApplication.setOperationStatus(OrderRefundApplicationStatus.UNAUDITED); orderRefundApplication.setStatus(OrderRefundApplicationStatus.UNAUDITED); - refundEntrustServiceOrderDomainService.handle(entrustServiceOrder, orderRefundApplication); + cancelEntrustServiceOrderDomainService.handle(entrustServiceOrder, orderRefundApplication); } } log.error("委托服务接受到期退款任务结束"); @@ -62,4 +64,49 @@ public class EntrustServiceOrderTask { log.error("委托服务接受到期退款任务异常", e); } } + + @Scheduled(cron = "0 10 * * * *") + public void handle2() { + try { + log.error("委托服务自动确认任务开始"); + List list = entrustServiceOrderDao.selectList(new LambdaQueryWrapper() + .eq(EntrustServiceOrder::getStatus, EntrustServiceStatusEnum.ACCEPTED) + .le(EntrustServiceOrder::getFinishDeadline, LocalDateTime.now())); + if (CollUtil.isNotEmpty(list)) { + for (EntrustServiceOrder entrustServiceOrder : list) { + entrustServiceOrder.setStatus(EntrustServiceStatusEnum.FINISHED); + entrustServiceOrder.setFinishedTime(LocalDateTime.now()); + entrustServiceOrder.setSettlementDeadline(entrustServiceOrder.getFinishedTime().plusDays(4)); + entrustServiceOrder.setRemark("自动确认"); + entrustServiceOrderAggregate.edit(entrustServiceOrder); + } + } + log.error("委托服务自动确认任务结束"); + } catch (Exception e) { + log.error("委托服务自动确认任务异常", e); + } + } + + @Scheduled(cron = "0 20 * * * *") + public void handle3() { + try { + log.error("委托服务自动结算任务开始"); + List list = entrustServiceOrderDao.selectList(new LambdaQueryWrapper() + .eq(EntrustServiceOrder::getStatus, EntrustServiceStatusEnum.FINISHED) + .eq(EntrustServiceOrder::getIsSettlement, false) + .le(EntrustServiceOrder::getSettlementDeadline, LocalDateTime.now())); + if (CollUtil.isNotEmpty(list)) { + for (EntrustServiceOrder entrustServiceOrder : list) { + //结算任务 + revenueRewardApplicationService.settleEntrustServiceOrder(entrustServiceOrder); + entrustServiceOrder.setStatus(EntrustServiceStatusEnum.FINISHED); + entrustServiceOrder.setIsSettlement(true); + entrustServiceOrderAggregate.edit(entrustServiceOrder); + } + } + log.error("委托服务自动结算任务结束"); + } catch (Exception e) { + log.error("委托服务自动结算任务异常", e); + } + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/eso/RefundEntrustServiceOrderDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/eso/CancelEntrustServiceOrderDomainService.java similarity index 94% rename from dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/eso/RefundEntrustServiceOrderDomainService.java rename to dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/eso/CancelEntrustServiceOrderDomainService.java index e8ef26e..714ac25 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/eso/RefundEntrustServiceOrderDomainService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/eso/CancelEntrustServiceOrderDomainService.java @@ -10,7 +10,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @Service -public class RefundEntrustServiceOrderDomainService { +public class CancelEntrustServiceOrderDomainService { @Resource private EntrustServiceOrderAggregate entrustServiceOrderAggregate;