From ca47e5046f917aceb11b1217c18efc5683065c55 Mon Sep 17 00:00:00 2001 From: Derran Date: Wed, 20 Mar 2024 11:57:05 +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 --- .../entity/RightConsumeRel.java | 30 ++++++++ .../user/RightUserCommandController.java | 29 +++++++ .../request/UserConsumeRightBySdkDto.java | 26 +++++++ .../user/respose/UserConsumeRightBySdkVo.java | 12 +++ .../UserListRightByCustomerQueryParam.java | 1 - .../right/RightApplicationService.java | 58 +++++++++++++- .../aggregate/right/RightAggregate.java | 4 + .../RightConsumeRelAggregate.java | 18 +++++ .../repository/RightConsumeRelRepository.java | 7 ++ .../right/ConsumeRightDomainService.java | 24 ++++++ .../dao/domain/RightConsumeRelDao.java | 7 ++ .../impl/RightConsumeRelRepositoryImpl.java | 31 ++++++++ .../order/impl/OrderQueryServiceImpl.java | 2 +- .../dam/query/right/RightQueryService.java | 13 +++- .../right/impl/RightQueryServiceImpl.java | 76 ++++++++++++++----- .../resources/mapper/right/RightMapper.xml | 19 +++-- 16 files changed, 326 insertions(+), 31 deletions(-) create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/entity/RightConsumeRel.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserConsumeRightBySdkDto.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/respose/UserConsumeRightBySdkVo.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/RightConsumeRelAggregate.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/repository/RightConsumeRelRepository.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ConsumeRightDomainService.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightConsumeRelDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightConsumeRelRepositoryImpl.java diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/entity/RightConsumeRel.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/entity/RightConsumeRel.java new file mode 100644 index 0000000..9444dfa --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/entity/RightConsumeRel.java @@ -0,0 +1,30 @@ +package com.qniao.dam.domain.aggregate.rightconsumerel.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.domain.Entity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_right_consume_rel") +public class RightConsumeRel extends Entity { + + @ApiModelProperty("权益标识") + private Long rightId; + + @ApiModelProperty("关联标识") + private Long associatedId; + + @ApiModelProperty("状态") + private Boolean enable; + + public static RightConsumeRel build(Long rightId, Long associatedId) { + RightConsumeRel rightConsumeRel = new RightConsumeRel(); + rightConsumeRel.setRightId(rightId); + rightConsumeRel.setAssociatedId(associatedId); + rightConsumeRel.setEnable(true); + return rightConsumeRel; + } +} 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 new file mode 100644 index 0000000..6d7d899 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/RightUserCommandController.java @@ -0,0 +1,29 @@ +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.respose.UserConsumeRightBySdkVo; +import com.qniao.dam.application.service.right.RightApplicationService; +import com.qniao.framework.annotation.IgnoreResponseAdvice; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@RestController +@RequestMapping("user") +@Api(tags = "权益") +public class RightUserCommandController { + + @Resource + private RightApplicationService rightApplicationService; + + @ApiOperation("通过SDK消费权益") + @PostMapping("consume/right/by/sdk") + @IgnoreResponseAdvice + public UserConsumeRightBySdkVo userConsumeRightBySdk(@RequestBody @Valid UserConsumeRightBySdkDto dto) { + return rightApplicationService.consumeRight(dto); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserConsumeRightBySdkDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserConsumeRightBySdkDto.java new file mode 100644 index 0000000..4ea3fb6 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/request/UserConsumeRightBySdkDto.java @@ -0,0 +1,26 @@ +package com.qniao.dam.api.command.right.user.request; + +import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserConsumeRightBySdkDto { + + @ApiModelProperty("用户标识") + @NotNull(message = "用户标识不能为空") + private Long userId; + + @ApiModelProperty("征婚资料标识") + @NotNull(message = "征婚资料标识不能为空") + private Long miId; + + @ApiModelProperty("权益类型") + @NotNull(message = "权益类型不能为空") + private RightTypeEnum type; + + @ApiModelProperty("关联标识 目前针对审核") + private Long associatedId; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/respose/UserConsumeRightBySdkVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/respose/UserConsumeRightBySdkVo.java new file mode 100644 index 0000000..0bc59d9 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/right/user/respose/UserConsumeRightBySdkVo.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.command.right.user.respose; + +import lombok.Data; + +@Data +public class UserConsumeRightBySdkVo { + + private Boolean flag = false; + + private String failReason; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/request/UserListRightByCustomerQueryParam.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/request/UserListRightByCustomerQueryParam.java index 87c11d3..6579773 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/request/UserListRightByCustomerQueryParam.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/request/UserListRightByCustomerQueryParam.java @@ -1,6 +1,5 @@ package com.qniao.dam.api.query.right.user.request; -import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; 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 1fe2884..24e709e 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 @@ -1,12 +1,17 @@ package com.qniao.dam.application.service.right; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Tuple; +import com.qniao.dam.api.command.right.user.request.UserConsumeRightBySdkDto; +import com.qniao.dam.api.command.right.user.respose.UserConsumeRightBySdkVo; import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.product.entity.Product; 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.rightconsumerel.entity.RightConsumeRel; +import com.qniao.dam.domain.service.right.ConsumeRightDomainService; 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; @@ -16,6 +21,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 lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -25,12 +31,15 @@ import java.util.List; import java.util.Objects; @Service +@Slf4j public class RightApplicationService { @Resource private RightQueryService rightQueryService; @Resource private ProductQueryService productQueryService; + @Resource + private ConsumeRightDomainService consumeRightDomainService; /** * 权益基本信息组织 @@ -50,7 +59,7 @@ public class RightApplicationService { right.setMiId(order.getMiId()); right.setType(type); //寻找用户未过期的,且规格属于周期的权益 - Right oldSpecPeriodRight = rightQueryService.getEnableSpecPeriodRight(order.getUserId(), order.getMiId(), type); + Right oldSpecPeriodRight = rightQueryService.getEnableRight(order.getUserId(), order.getMiId(), type, RightUnitEnum.SPEC_PERIOD); if (Objects.nonNull(oldSpecPeriodRight)) { right.setId(oldSpecPeriodRight.getId()); } @@ -142,4 +151,51 @@ public class RightApplicationService { return null; } } + + /** + * todo 检查今日使用次数 + */ + public UserConsumeRightBySdkVo consumeRight(UserConsumeRightBySdkDto dto) { + UserConsumeRightBySdkVo vo = new UserConsumeRightBySdkVo(); + try { + List rightList = rightQueryService.listEnableRightBy(dto.getUserId(), dto.getMiId(), dto.getType()); + if (CollUtil.isNotEmpty(rightList)) { + for (Right right : rightList) { + if (rightQueryService.checkEnable(right)) { + executeConsumeRight(right, dto.getAssociatedId()); + vo.setFlag(true); + } + } + } + if (!vo.getFlag()) { + vo.setFailReason("您剩余的权益已过期或已用完"); + } + } catch (Exception e) { + vo.setFailReason("权益使用异常"); + log.error("用户消费权益失败", e); + } + return vo; + } + + /** + * 执行权益消费 + * + * @param right + * @param associatedId 关联标识 -- 审核标识 + */ + private void executeConsumeRight(Right right, Long associatedId) { + RightTerm rightCountRightTerm = rightQueryService.getRightTermByName(right, RightNameEnum.RIGHT_COUNT); + if (Objects.nonNull(rightCountRightTerm)) { + int rightCount = Integer.parseInt(rightCountRightTerm.getValue()); + rightCount--; + rightCountRightTerm.setValue(String.valueOf(rightCount)); + } + //判断权益是否失效 + if (!rightQueryService.checkEnable(right)) { + right.setEnable(false); + } + //组装权益消费关联实体 + RightConsumeRel rightConsumeRel = RightConsumeRel.build(right.getId(), associatedId); + consumeRightDomainService.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 1df0d41..60beea8 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 @@ -15,4 +15,8 @@ public class RightAggregate { public void save(Right right) { rightRepository.save(right); } + + public void consume(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 new file mode 100644 index 0000000..ba2e20e --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/RightConsumeRelAggregate.java @@ -0,0 +1,18 @@ +package com.qniao.dam.domain.aggregate.rightconsumerel; + +import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; +import com.qniao.dam.domain.aggregate.rightconsumerel.repository.RightConsumeRelRepository; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class RightConsumeRelAggregate { + + @Resource + private RightConsumeRelRepository rightConsumeRelRepository; + + public void create(RightConsumeRel rightConsumeRel) { + rightConsumeRelRepository.save(rightConsumeRel); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/repository/RightConsumeRelRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/repository/RightConsumeRelRepository.java new file mode 100644 index 0000000..8b9c7cc --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rightconsumerel/repository/RightConsumeRelRepository.java @@ -0,0 +1,7 @@ +package com.qniao.dam.domain.aggregate.rightconsumerel.repository; + +import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; +import com.qniao.domain.Repository; + +public interface RightConsumeRelRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ConsumeRightDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ConsumeRightDomainService.java new file mode 100644 index 0000000..30e8844 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/right/ConsumeRightDomainService.java @@ -0,0 +1,24 @@ +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 ConsumeRightDomainService { + @Resource + private RightAggregate rightAggregate; + @Resource + private RightConsumeRelAggregate rightConsumeRelAggregate; + + @Transactional(rollbackFor = Exception.class) + public void handle(Right right, RightConsumeRel rightConsumeRel) { + rightAggregate.consume(right); + rightConsumeRelAggregate.create(rightConsumeRel); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightConsumeRelDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightConsumeRelDao.java new file mode 100644 index 0000000..6eb1132 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RightConsumeRelDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.domain; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; + +public interface RightConsumeRelDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightConsumeRelRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightConsumeRelRepositoryImpl.java new file mode 100644 index 0000000..bc6fe27 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RightConsumeRelRepositoryImpl.java @@ -0,0 +1,31 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import com.qniao.dam.domain.aggregate.rightconsumerel.entity.RightConsumeRel; +import com.qniao.dam.domain.aggregate.rightconsumerel.repository.RightConsumeRelRepository; +import com.qniao.dam.infrastructure.persistent.dao.domain.RightConsumeRelDao; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +public class RightConsumeRelRepositoryImpl implements RightConsumeRelRepository { + + @Resource + private RightConsumeRelDao rightConsumeRelDao; + + @Override + public RightConsumeRel load(Long id) { + return rightConsumeRelDao.selectById(id); + } + + @Override + public Long save(RightConsumeRel entity) { + if (Objects.isNull(entity.getId()) || Objects.isNull(rightConsumeRelDao.selectById(entity.getId()))) { + rightConsumeRelDao.insert(entity); + } else { + rightConsumeRelDao.updateById(entity); + } + return entity.getId(); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java index 9120359..ec18468 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java @@ -66,7 +66,7 @@ public class OrderQueryServiceImpl implements OrderQueryService { ProductSpecTerm productSpecTerm = productQueryService.getTermByName(productSpec.getProductSpecTermList(), ProductSpecTermNameEnum.SPEC); RightTypeEnum rightType = rightApplicationService.transformRightType(orderItem.getSubCategory()); if (Objects.nonNull(rightType) && Objects.nonNull(productSpecTerm)) { - Right right = rightQueryService.getEnableSpecPeriodRight(order.getUserId(), order.getMiId(), rightType); + Right right = rightQueryService.getEnableRight(order.getUserId(), order.getMiId(), rightType, null); if (Objects.nonNull(right)) { RightTerm rightTerm = rightQueryService.getRightTermByName(right, RightNameEnum.SPEC); flag = !rightTerm.getUnit().getValue().equals(productSpecTerm.getUnit().getValue()); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java index 30b8d3b..27f8e86 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/RightQueryService.java @@ -6,13 +6,24 @@ import com.qniao.dam.domain.aggregate.right.entity.Right; import com.qniao.dam.domain.aggregate.right.entity.RightTerm; import com.qniao.dam.domian.aggregate.right.constant.RightNameEnum; import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; +import com.qniao.dam.domian.aggregate.right.constant.RightUnitEnum; import java.util.List; public interface RightQueryService { + List listRightByCustomer(UserListRightByCustomerQueryParam queryParam); - Right getEnableSpecPeriodRight(Long userId, Long miId, RightTypeEnum type); + Right getEnableRight(Long userId, Long miId, RightTypeEnum type, RightUnitEnum unit); RightTerm getRightTermByName(Right right, RightNameEnum name); + + /** + * todo 检查今日使用次数 + */ + boolean checkEnableRight(Long userId, Long miId, RightTypeEnum type); + + List listEnableRightBy(Long userId, Long miId, RightTypeEnum type); + + boolean checkEnable(Right right); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/impl/RightQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/impl/RightQueryServiceImpl.java index 868d212..220e6a5 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/impl/RightQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/right/impl/RightQueryServiceImpl.java @@ -38,23 +38,8 @@ public class RightQueryServiceImpl implements RightQueryService { public List listRightByCustomer(UserListRightByCustomerQueryParam queryParam) { List customerVolist = new ArrayList<>(); // 1 找出客户所有的权益 先到期先用 - LambdaQueryWrapper rightWrapper = new LambdaQueryWrapper<>(); - rightWrapper.eq(Right::getUserId, queryParam.getUserId()); - rightWrapper.eq(Right::getMiId, queryParam.getMiId()); - if (Objects.nonNull(queryParam.getType())) { - rightWrapper.eq(Right::getType, queryParam.getType()); - } - rightWrapper.eq(Right::getEnable, true); - rightWrapper.ge(Right::getEndTime, LocalDateTime.now()); - rightWrapper.orderByAsc(Right::getEndTime); - List allRightList = rightDao.selectList(rightWrapper); + List allRightList = listEnableRightBy(queryParam.getUserId(), queryParam.getMiId(), RightTypeEnum.get(queryParam.getType())); if (CollUtil.isNotEmpty(allRightList)) { - List rightIdList = allRightList.stream().map(Right::getId).collect(Collectors.toList()); - List allRightTermList = rightTermDao.selectList(new LambdaQueryWrapper() - .in(RightTerm::getRightId, rightIdList)); - Map> allRightTermMap = allRightTermList.stream().collect(Collectors.groupingBy(RightTerm::getRightId)); - allRightList.forEach(right -> right.setRightTermList(allRightTermMap.get(right.getId()))); - // 2.按照权益分类 Map> allRightMap = allRightList.stream().collect(Collectors.groupingBy(Right::getType)); for (RightTypeEnum rightType : RightTypeEnum.values()) { @@ -101,16 +86,68 @@ public class RightQueryServiceImpl implements RightQueryService { return customerVo; } - @Override - public Right getEnableSpecPeriodRight(Long userId, Long miId, RightTypeEnum type) { + public Right getEnableRight(Long userId, Long miId, RightTypeEnum type, RightUnitEnum unit) { Right right = null; - Long rightId = rightDao.getEnableSpecPeriodRightId(userId, miId, type, RightUnitEnum.SPEC_PERIOD); + Long rightId = rightDao.getEnableSpecPeriodRightId(userId, miId, type, unit); if (Objects.nonNull(rightId)) { right = rightRepository.load(rightId); } return right; } + @Override + public boolean checkEnableRight(Long userId, Long miId, RightTypeEnum type) { + Long rightId = rightDao.getEnableSpecPeriodRightId(userId, miId, type, null); + return Objects.nonNull(rightId); + } + + @Override + public List listEnableRightBy(Long userId, Long miId, RightTypeEnum type) { + LambdaQueryWrapper rightWrapper = new LambdaQueryWrapper<>(); + rightWrapper.eq(Right::getUserId, userId); + rightWrapper.eq(Right::getMiId, miId); + if (Objects.nonNull(type)) { + rightWrapper.eq(Right::getType, type); + } + rightWrapper.eq(Right::getEnable, true); + rightWrapper.ge(Right::getEndTime, LocalDateTime.now()); + rightWrapper.orderByAsc(Right::getEndTime); + List allRightList = rightDao.selectList(rightWrapper); + if (CollUtil.isNotEmpty(allRightList)) { + List rightIdList = allRightList.stream().map(Right::getId).collect(Collectors.toList()); + List allRightTermList = rightTermDao.selectList(new LambdaQueryWrapper() + .in(RightTerm::getRightId, rightIdList)); + Map> allRightTermMap = allRightTermList.stream().collect(Collectors.groupingBy(RightTerm::getRightId)); + allRightList.forEach(right -> right.setRightTermList(allRightTermMap.get(right.getId()))); + } + return allRightList; + } + + @Override + public boolean checkEnable(Right right) { + //1.判断enable + if (!right.getEnable()) { + return false; + } + //2.判断有效期 + if (Objects.nonNull(right.getStartTime()) && Objects.nonNull(right.getEndTime())) { + LocalDateTime now = LocalDateTime.now(); + if (right.getStartTime().isAfter(now) || right.getEndTime().isBefore(now)) { + return false; + } + } + //3.判断剩余条数 + RightTerm rightCountRightTerm = getRightTermByName(right, RightNameEnum.RIGHT_COUNT); + if (Objects.nonNull(rightCountRightTerm)) { + int rightCount = Integer.parseInt(rightCountRightTerm.getValue()); + // rightCount==0 表示已用完 rightCount==-1 表示不限次数 + if (rightCount == 0 || rightCount < -1) { + return false; + } + } + return true; + } + @Override public RightTerm getRightTermByName(Right right, RightNameEnum name) { RightTerm rightTerm = null; @@ -124,4 +161,5 @@ public class RightQueryServiceImpl implements RightQueryService { } return rightTerm; } + } diff --git a/dating-agency-mall-server/src/main/resources/mapper/right/RightMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/right/RightMapper.xml index c162c23..6fb1b94 100644 --- a/dating-agency-mall-server/src/main/resources/mapper/right/RightMapper.xml +++ b/dating-agency-mall-server/src/main/resources/mapper/right/RightMapper.xml @@ -6,14 +6,17 @@