From 1e42f30ef0c95e3491f8c40c86e3a3a52ffb03d5 Mon Sep 17 00:00:00 2001 From: Derran Date: Wed, 20 Mar 2024 16:19:38 +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 --- .../MallServerApplicationService.java | 10 ++++ .../request/UserSendBackBightBySdkDto.java | 12 +++++ .../user/RightUserCommandController.java | 7 +++ .../request/UserSendBackBightBySdkDto.java | 14 ++++++ .../right/RightApplicationService.java | 50 ++++++++++++++++++- .../aggregate/right/RightAggregate.java | 4 ++ .../RightConsumeRelAggregate.java | 4 ++ .../right/ReturnRightDomainService.java | 25 ++++++++++ .../RightConsumeRelQueryService.java | 3 ++ .../impl/RightConsumeRelQueryServiceImpl.java | 7 +++ 10 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserSendBackBightBySdkDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserSendBackBightBySdkDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ReturnRightDomainService.java diff --git a/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java index af29af6..96bb5a2 100644 --- a/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java +++ b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/MallServerApplicationService.java @@ -2,6 +2,7 @@ package com.qniao.dam.application; 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.response.UserCheckEnableRightBySdkVo; import com.qniao.dam.application.response.UserConsumeRightBySdkVo; import org.springframework.cloud.openfeign.FeignClient; @@ -9,6 +10,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import javax.validation.Valid; + @FeignClient("eureka-client-dating-agency-mall") @RequestMapping("dating-agency-mall") public interface MallServerApplicationService { @@ -25,4 +28,11 @@ 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); + } diff --git a/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserSendBackBightBySdkDto.java b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserSendBackBightBySdkDto.java new file mode 100644 index 0000000..310ed53 --- /dev/null +++ b/dating-agency-mal-sdk/src/main/java/com/qniao/dam/application/request/UserSendBackBightBySdkDto.java @@ -0,0 +1,12 @@ +package com.qniao.dam.application.request; + +import lombok.Data; + +@Data +public class UserSendBackBightBySdkDto { + + /** + * 关联标识 + */ + private Long associatedId; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java index 6d7d899..f7a78b0 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java @@ -1,6 +1,7 @@ package com.qniao.dam.api.command.right.user; import com.qniao.dam.api.command.right.user.request.UserConsumeRightBySdkDto; +import com.qniao.dam.api.command.right.user.request.UserSendBackBightBySdkDto; import com.qniao.dam.api.command.right.user.respose.UserConsumeRightBySdkVo; import com.qniao.dam.application.service.right.RightApplicationService; import com.qniao.framework.annotation.IgnoreResponseAdvice; @@ -26,4 +27,10 @@ public class RightUserCommandController { return rightApplicationService.consumeRight(dto); } + @ApiOperation("通过SDK退回消费过的权益") + @PostMapping("send-back/right/by/sdk") + @IgnoreResponseAdvice + public void userSendBackRightBySdk(@RequestBody @Valid UserSendBackBightBySdkDto dto) { + rightApplicationService.sendBackRight(dto.getAssociatedId()); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserSendBackBightBySdkDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserSendBackBightBySdkDto.java new file mode 100644 index 0000000..f25d1a1 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserSendBackBightBySdkDto.java @@ -0,0 +1,14 @@ +package com.qniao.dam.api.command.right.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserSendBackBightBySdkDto { + + @ApiModelProperty("关联标识 目前针对审核") + @NotNull(message = "关联标识不能为空") + private Long associatedId; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java index d2bc10f..3cf4a1a 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/right/RightApplicationService.java @@ -11,8 +11,10 @@ import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm; import com.qniao.dam.domain.aggregate.right.entity.Right; import com.qniao.dam.domain.aggregate.right.entity.RightTerm; +import com.qniao.dam.domain.aggregate.right.repository.RightRepository; import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; import com.qniao.dam.domain.service.right.ConsumeRightDomainService; +import com.qniao.dam.domain.service.right.ReturnRightDomainService; import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermUnitEnum; @@ -22,6 +24,7 @@ import com.qniao.dam.domian.aggregate.right.constant.RightUnitEnum; import com.qniao.dam.infrastructure.utils.CompareEntityUtil; import com.qniao.dam.query.product.ProductQueryService; import com.qniao.dam.query.right.RightQueryService; +import com.qniao.dam.query.rightconsumerel.RightConsumeRelQueryService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -41,6 +44,12 @@ public class RightApplicationService { private ProductQueryService productQueryService; @Resource private ConsumeRightDomainService consumeRightDomainService; + @Resource + private ReturnRightDomainService returnRightDomainService; + @Resource + private RightConsumeRelQueryService rightConsumeRelQueryService; + @Resource + private RightRepository rightRepository; /** * 权益基本信息组织 @@ -191,13 +200,15 @@ public class RightApplicationService { */ private void executeConsumeRight(Right right, Long associatedId) { RightTerm rightCountRightTerm = rightQueryService.getRightTermByName(right, RightNameEnum.RIGHT_COUNT); - if (Objects.nonNull(rightCountRightTerm)) { + if (Objects.nonNull(rightCountRightTerm) && !"-1".equals(rightCountRightTerm.getValue())) { int rightCount = Integer.parseInt(rightCountRightTerm.getValue()); rightCount--; rightCountRightTerm.setValue(String.valueOf(rightCount)); } //判断权益是否失效 - if (!rightQueryService.checkEnable(right)) { + if (rightQueryService.checkEnable(right)) { + right.setEnable(true); + }else{ right.setEnable(false); } right.setUpdateRightTermList(right.getRightTermList()); @@ -205,4 +216,39 @@ public class RightApplicationService { RightConsumeRel rightConsumeRel = RightConsumeRel.build(right.getUserId(), right.getMiId(), right.getType(), right.getId(), associatedId); consumeRightDomainService.handle(right, rightConsumeRel); } + + /** + * 退还权益 + * + * @param associatedId 关联标识 + */ + public void sendBackRight(Long associatedId) { + try { + RightConsumeRel rightConsumeRel = rightConsumeRelQueryService.queryByAssociatedId(associatedId); + if (Objects.nonNull(rightConsumeRel) && rightConsumeRel.getEnable()) { + Right right = rightRepository.load(rightConsumeRel.getRightId()); + executeSendBackRight(right, rightConsumeRel); + } + } catch (Exception e) { + log.error("退回消费过的权益处理异常", e); + } + } + + private void executeSendBackRight(Right right, RightConsumeRel rightConsumeRel) { + RightTerm rightCountRightTerm = rightQueryService.getRightTermByName(right, RightNameEnum.RIGHT_COUNT); + if (Objects.nonNull(rightCountRightTerm) && !"-1".equals(rightCountRightTerm.getValue())) { + int rightCount = Integer.parseInt(rightCountRightTerm.getValue()); + rightCount++; + rightCountRightTerm.setValue(String.valueOf(rightCount)); + } + //判断权益是否失效 + if (rightQueryService.checkEnable(right)) { + right.setEnable(true); + }else{ + right.setEnable(false); + } + right.setUpdateRightTermList(right.getRightTermList()); + returnRightDomainService.handle(right, rightConsumeRel); + + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java index 60beea8..3e4e58a 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/right/RightAggregate.java @@ -19,4 +19,8 @@ public class RightAggregate { public void consume(Right right) { rightRepository.save(right); } + + public void sendBack(Right right) { + rightRepository.save(right); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/RightConsumeRelAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/RightConsumeRelAggregate.java index ba2e20e..6b0934e 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/RightConsumeRelAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/RightConsumeRelAggregate.java @@ -15,4 +15,8 @@ public class RightConsumeRelAggregate { public void create(RightConsumeRel rightConsumeRel) { rightConsumeRelRepository.save(rightConsumeRel); } + + public void save(RightConsumeRel rightConsumeRel) { + rightConsumeRelRepository.save(rightConsumeRel); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ReturnRightDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ReturnRightDomainService.java new file mode 100644 index 0000000..2165f6c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ReturnRightDomainService.java @@ -0,0 +1,25 @@ +package com.qniao.dam.domain.service.right; + +import com.qniao.dam.domain.aggregate.right.RightAggregate; +import com.qniao.dam.domain.aggregate.right.entity.Right; +import com.qniao.dam.domain.aggregate.rightconsumerel.RightConsumeRelAggregate; +import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Service +public class ReturnRightDomainService { + + @Resource + private RightAggregate rightAggregate; + @Resource + private RightConsumeRelAggregate rightConsumeRelAggregate; + + @Transactional(rollbackFor = Exception.class) + public void handle(Right right, RightConsumeRel rightConsumeRel) { + rightAggregate.sendBack(right); + rightConsumeRelAggregate.save(rightConsumeRel); + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/RightConsumeRelQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/RightConsumeRelQueryService.java index dab0144..00ab3b4 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/RightConsumeRelQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/RightConsumeRelQueryService.java @@ -1,7 +1,10 @@ package com.qniao.dam.query.rightconsumerel; +import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; public interface RightConsumeRelQueryService { Integer countDailyUseBy(Long userId, Long miId, RightTypeEnum rightType); + + RightConsumeRel queryByAssociatedId(Long associatedId); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/impl/RightConsumeRelQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/impl/RightConsumeRelQueryServiceImpl.java index 165634f..4923b5f 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/impl/RightConsumeRelQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/rightconsumerel/impl/RightConsumeRelQueryServiceImpl.java @@ -26,4 +26,11 @@ public class RightConsumeRelQueryServiceImpl implements RightConsumeRelQueryServ .eq(RightConsumeRel::getConsumeDate, LocalDate.now()) .eq(RightConsumeRel::getEnable, true)); } + + @Override + public RightConsumeRel queryByAssociatedId(Long associatedId) { + return rightConsumeRelDao.selectOne(new LambdaQueryWrapper() + .eq(RightConsumeRel::getAssociatedId, associatedId) + .last("limit 1")); + } }