diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/RightUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/RightUserQueryController.java index 53bb4e5..5d066ff 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/RightUserQueryController.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/RightUserQueryController.java @@ -1,8 +1,11 @@ package com.qniao.dam.api.query.right.user; +import com.qniao.dam.api.query.right.user.request.UserCheckEnableRightBySdkQueryParam; import com.qniao.dam.api.query.right.user.request.UserListRightByCustomerQueryParam; +import com.qniao.dam.api.query.right.user.response.UserCheckEnableRightBySdkVo; import com.qniao.dam.api.query.right.user.response.UserListRightByCustomerVo; import com.qniao.dam.query.right.RightQueryService; +import com.qniao.framework.annotation.IgnoreResponseAdvice; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; @@ -27,4 +30,10 @@ public class RightUserQueryController { return rightQueryService.listRightByCustomer(queryParam); } + @GetMapping("check/enable-right/by/sdk") + @ApiOperation("客户检查可用权益") + @IgnoreResponseAdvice + public UserCheckEnableRightBySdkVo userCheckEnableRightBySdk(@Validated UserCheckEnableRightBySdkQueryParam queryParam) { + return rightQueryService.checkEnableRight(queryParam); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/request/UserCheckEnableRightBySdkQueryParam.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/request/UserCheckEnableRightBySdkQueryParam.java new file mode 100644 index 0000000..da6f680 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/request/UserCheckEnableRightBySdkQueryParam.java @@ -0,0 +1,23 @@ +package com.qniao.dam.api.query.right.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class UserCheckEnableRightBySdkQueryParam { + + @ApiModelProperty("用户标识") + @NotNull(message = "用户标识不能为空") + private Long userId; + + @ApiModelProperty("征婚资料标识") + @NotNull(message = "征婚资料标识不能为空") + private Long miId; + + @ApiModelProperty("权益类型") + @NotNull(message = "权益类型不能为空") + private Integer type; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/response/UserCheckEnableRightBySdkVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/response/UserCheckEnableRightBySdkVo.java new file mode 100644 index 0000000..f687551 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/right/user/response/UserCheckEnableRightBySdkVo.java @@ -0,0 +1,11 @@ +package com.qniao.dam.api.query.right.user.response; + +import lombok.Data; + +@Data +public class UserCheckEnableRightBySdkVo { + + private Boolean flag = false; + + private String failReason; +} 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 2a8287b..b539bba 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 @@ -2,6 +2,7 @@ package com.qniao.dam.application.service.right; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Tuple; +import cn.hutool.core.util.StrUtil; 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; @@ -154,24 +155,31 @@ public class RightApplicationService { public UserConsumeRightBySdkVo consumeRight(UserConsumeRightBySdkDto dto) { UserConsumeRightBySdkVo vo = new UserConsumeRightBySdkVo(); + String failReason = null; 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); - break; + //1.判断今日使用权益次数 + if (!rightQueryService.checkRightUseLimit(rightList.get(0))) { + failReason = "您的今日使用权益已达上限"; + } else { + for (Right right : rightList) { + if (rightQueryService.checkEnable(right)) { + executeConsumeRight(right, dto.getAssociatedId()); + vo.setFlag(true); + break; + } } } } - if (!vo.getFlag()) { - vo.setFailReason("您剩余的权益已过期或已用完"); + if (!vo.getFlag() && StrUtil.isBlank(failReason)) { + failReason = "您剩余的权益已过期或已用完"; } } catch (Exception e) { - vo.setFailReason("权益使用异常"); + failReason = "权益使用异常"; log.error("用户消费权益失败", e); } + vo.setFailReason(failReason); return vo; } 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 27f8e86..ea94cc8 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 @@ -1,6 +1,8 @@ package com.qniao.dam.query.right; +import com.qniao.dam.api.query.right.user.request.UserCheckEnableRightBySdkQueryParam; import com.qniao.dam.api.query.right.user.request.UserListRightByCustomerQueryParam; +import com.qniao.dam.api.query.right.user.response.UserCheckEnableRightBySdkVo; import com.qniao.dam.api.query.right.user.response.UserListRightByCustomerVo; import com.qniao.dam.domain.aggregate.right.entity.Right; import com.qniao.dam.domain.aggregate.right.entity.RightTerm; @@ -21,9 +23,11 @@ public interface RightQueryService { /** * todo 检查今日使用次数 */ - boolean checkEnableRight(Long userId, Long miId, RightTypeEnum type); + UserCheckEnableRightBySdkVo checkEnableRight(UserCheckEnableRightBySdkQueryParam queryParam); List listEnableRightBy(Long userId, Long miId, RightTypeEnum type); boolean checkEnable(Right right); + + Boolean checkRightUseLimit(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 57f9845..2869f66 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 @@ -1,8 +1,11 @@ package com.qniao.dam.query.right.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qniao.dam.api.query.right.user.request.UserCheckEnableRightBySdkQueryParam; import com.qniao.dam.api.query.right.user.request.UserListRightByCustomerQueryParam; +import com.qniao.dam.api.query.right.user.response.UserCheckEnableRightBySdkVo; import com.qniao.dam.api.query.right.user.response.UserListRightByCustomerVo; import com.qniao.dam.domain.aggregate.right.entity.Right; import com.qniao.dam.domain.aggregate.right.entity.RightTerm; @@ -14,6 +17,7 @@ import com.qniao.dam.infrastructure.persistent.dao.domain.RightDao; import com.qniao.dam.infrastructure.persistent.dao.domain.RightTermDao; import com.qniao.dam.query.right.RightQueryService; import com.qniao.dam.query.rightconsumerel.RightConsumeRelQueryService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -25,6 +29,7 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; +@Slf4j @Service public class RightQueryServiceImpl implements RightQueryService { @@ -100,10 +105,46 @@ public class RightQueryServiceImpl implements RightQueryService { return right; } + public Boolean checkRightUseLimit(Right right) { + boolean flag = true; + RightTerm dailyUseLimitRightTerm = getRightTermByName(right, RightNameEnum.DAILY_USE_LIMIT); + if (Objects.nonNull(dailyUseLimitRightTerm)) { + int dailyUseLimit = Integer.parseInt(dailyUseLimitRightTerm.getValue()); + if (dailyUseLimit != -1) { + flag = dailyUseLimit > rightConsumeRelQueryService.countDailyUseBy(right.getUserId(), right.getMiId(), right.getType()); + } + } + return flag; + } + @Override - public boolean checkEnableRight(Long userId, Long miId, RightTypeEnum type) { - Long rightId = rightDao.getEnableSpecPeriodRightId(userId, miId, type, null); - return Objects.nonNull(rightId); + public UserCheckEnableRightBySdkVo checkEnableRight(UserCheckEnableRightBySdkQueryParam queryParam) { + UserCheckEnableRightBySdkVo vo = new UserCheckEnableRightBySdkVo(); + String failReason = null; + try { + List rightList = listEnableRightBy(queryParam.getUserId(), queryParam.getMiId(), RightTypeEnum.get(queryParam.getType())); + if (CollUtil.isNotEmpty(rightList)) { + //1.判断今日使用权益次数 + if (!checkRightUseLimit(rightList.get(0))) { + failReason = "您的今日使用权益已达上限"; + } else { + for (Right right : rightList) { + if (checkEnable(right)) { + vo.setFlag(true); + break; + } + } + } + } + if (!vo.getFlag() && StrUtil.isBlank(failReason)) { + failReason = "您剩余的权益已过期或已用完"; + } + } catch (Exception e) { + failReason = "权益使用异常"; + log.error("用户消费权益失败", e); + } + vo.setFailReason(failReason); + return vo; } @Override 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 6fb1b94..e4bece7 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 @@ -17,6 +17,7 @@ and dart.unit = #{unit} + order by dar.end_time asc limit 1