活动奖品列表增加不可领取状态
This commit is contained in:
parent
5c90666f0c
commit
fe036be63a
@ -1,6 +1,7 @@
|
|||||||
package com.red.circle.other.app.command.activity;
|
package com.red.circle.other.app.command.activity;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
|
import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
|
||||||
@ -9,13 +10,17 @@ import com.red.circle.other.app.dto.cmd.activity.ActivityRewardConfigCmd;
|
|||||||
import com.red.circle.other.domain.gateway.props.ActivitySourceGroupGateway;
|
import com.red.circle.other.domain.gateway.props.ActivitySourceGroupGateway;
|
||||||
import com.red.circle.other.infra.database.rds.dao.activity.UserActivityRewardClaimDAO;
|
import com.red.circle.other.infra.database.rds.dao.activity.UserActivityRewardClaimDAO;
|
||||||
import com.red.circle.other.infra.database.rds.entity.activity.UserActivityRewardClaim;
|
import com.red.circle.other.infra.database.rds.entity.activity.UserActivityRewardClaim;
|
||||||
|
import com.red.circle.other.infra.database.rds.service.activity.UserActivityRechargeService;
|
||||||
import com.red.circle.other.inner.enums.activity.PropsActivityTypeEnum;
|
import com.red.circle.other.inner.enums.activity.PropsActivityTypeEnum;
|
||||||
import com.red.circle.other.inner.model.dto.activity.props.ActivityPropsGroup;
|
import com.red.circle.other.inner.model.dto.activity.props.ActivityPropsGroup;
|
||||||
import com.red.circle.other.inner.model.dto.activity.props.ActivityPropsRule;
|
import com.red.circle.other.inner.model.dto.activity.props.ActivityPropsRule;
|
||||||
import com.red.circle.other.inner.model.dto.activity.props.ActivityRewardProps;
|
import com.red.circle.other.inner.model.dto.activity.props.ActivityRewardProps;
|
||||||
|
import com.red.circle.tool.core.json.JacksonUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -24,12 +29,14 @@ import java.util.stream.Collectors;
|
|||||||
/**
|
/**
|
||||||
* 查询活动奖励配置执行器
|
* 查询活动奖励配置执行器
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ActivityRewardConfigQryExe {
|
public class ActivityRewardConfigQryExe {
|
||||||
|
|
||||||
private final ActivitySourceGroupGateway activitySourceGroupGateway;
|
private final ActivitySourceGroupGateway activitySourceGroupGateway;
|
||||||
private final UserActivityRewardClaimDAO userActivityRewardClaimDAO;
|
private final UserActivityRewardClaimDAO userActivityRewardClaimDAO;
|
||||||
|
private final UserActivityRechargeService userActivityRechargeService;
|
||||||
|
|
||||||
public List<ActivityRewardConfigCO> execute(ActivityRewardConfigCmd cmd) {
|
public List<ActivityRewardConfigCO> execute(ActivityRewardConfigCmd cmd) {
|
||||||
PropsActivityTypeEnum activityType = PropsActivityTypeEnum.valueOf(cmd.getActivityType());
|
PropsActivityTypeEnum activityType = PropsActivityTypeEnum.valueOf(cmd.getActivityType());
|
||||||
@ -43,8 +50,17 @@ public class ActivityRewardConfigQryExe {
|
|||||||
List<Long> ruleIds = ruleConfigs.stream().map(ActivityPropsRule::getId).collect(Collectors.toList());
|
List<Long> ruleIds = ruleConfigs.stream().map(ActivityPropsRule::getId).collect(Collectors.toList());
|
||||||
Map<Long, UserActivityRewardClaim> claimMap = getUserClaimMap(cmd.getReqUserId(), ruleIds);
|
Map<Long, UserActivityRewardClaim> claimMap = getUserClaimMap(cmd.getReqUserId(), ruleIds);
|
||||||
|
|
||||||
|
BigDecimal userTotalAmount = userActivityRechargeService.getUserTotalAmount(
|
||||||
|
cmd.getActivityId(),
|
||||||
|
cmd.getReqUserId()
|
||||||
|
);
|
||||||
|
if (Objects.isNull(userTotalAmount)) {
|
||||||
|
userTotalAmount = BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
|
BigDecimal finalUserTotalAmount = userTotalAmount;
|
||||||
return ruleConfigs.stream()
|
return ruleConfigs.stream()
|
||||||
.map(rule -> buildRewardConfig(rule, cmd.getReqSysOrigin().getOrigin(), claimMap))
|
.map(rule -> buildRewardConfig(rule, cmd.getReqSysOrigin().getOrigin(), claimMap, finalUserTotalAmount))
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
@ -61,7 +77,8 @@ public class ActivityRewardConfigQryExe {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ActivityRewardConfigCO buildRewardConfig(ActivityPropsRule rule, String sysOrigin,
|
private ActivityRewardConfigCO buildRewardConfig(ActivityPropsRule rule, String sysOrigin,
|
||||||
Map<Long, UserActivityRewardClaim> claimMap) {
|
Map<Long, UserActivityRewardClaim> claimMap,
|
||||||
|
BigDecimal userTotalAmount) {
|
||||||
ActivityPropsGroup group = activitySourceGroupGateway.getActivityPropsGroup(
|
ActivityPropsGroup group = activitySourceGroupGateway.getActivityPropsGroup(
|
||||||
sysOrigin,
|
sysOrigin,
|
||||||
rule.getResourceGroupId()
|
rule.getResourceGroupId()
|
||||||
@ -82,8 +99,8 @@ public class ActivityRewardConfigQryExe {
|
|||||||
.setGroupName(group.getName())
|
.setGroupName(group.getName())
|
||||||
.setShelfStatus(group.getShelfStatus());
|
.setShelfStatus(group.getShelfStatus());
|
||||||
|
|
||||||
UserActivityRewardClaim claim = claimMap.get(rule.getId());
|
int claimStatus = calculateClaimStatus(rule, claimMap, userTotalAmount);
|
||||||
config.setClaimStatus(Objects.isNull(claim) ? 0 : claim.getStatus());
|
config.setClaimStatus(claimStatus);
|
||||||
|
|
||||||
if (CollectionUtil.isNotEmpty(group.getActivityRewardProps())) {
|
if (CollectionUtil.isNotEmpty(group.getActivityRewardProps())) {
|
||||||
List<ActivityRewardConfigCO.ActivityRewardPropsCO> propsList = group.getActivityRewardProps().stream()
|
List<ActivityRewardConfigCO.ActivityRewardPropsCO> propsList = group.getActivityRewardProps().stream()
|
||||||
@ -95,6 +112,59 @@ public class ActivityRewardConfigQryExe {
|
|||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算领取状态
|
||||||
|
* -1: 不可领取(充值金额不足)
|
||||||
|
* 0: 可领取(充值金额达标且未领取)
|
||||||
|
* 1: 已领取
|
||||||
|
*/
|
||||||
|
private int calculateClaimStatus(ActivityPropsRule rule,
|
||||||
|
Map<Long, UserActivityRewardClaim> claimMap,
|
||||||
|
BigDecimal userTotalAmount) {
|
||||||
|
UserActivityRewardClaim claim = claimMap.get(rule.getId());
|
||||||
|
if (Objects.nonNull(claim)) {
|
||||||
|
return claim.getStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
BigDecimal requiredAmount = parseRequiredAmount(rule.getJsonData());
|
||||||
|
if (Objects.isNull(requiredAmount)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userTotalAmount.compareTo(requiredAmount) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal parseRequiredAmount(String jsonData) {
|
||||||
|
if (StrUtil.isBlank(jsonData)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Map<String, Object> dataMap = JacksonUtils.readValue(jsonData, Map.class);
|
||||||
|
Object quantity = dataMap.get("quantity");
|
||||||
|
if (Objects.isNull(quantity)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quantity instanceof Number) {
|
||||||
|
return new BigDecimal(quantity.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quantity instanceof String) {
|
||||||
|
return new BigDecimal((String) quantity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("解析jsonData失败: {}", jsonData, e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ActivityRewardConfigCO.ActivityRewardPropsCO convertToRewardPropsCO(ActivityRewardProps props) {
|
private ActivityRewardConfigCO.ActivityRewardPropsCO convertToRewardPropsCO(ActivityRewardProps props) {
|
||||||
return new ActivityRewardConfigCO.ActivityRewardPropsCO()
|
return new ActivityRewardConfigCO.ActivityRewardPropsCO()
|
||||||
.setId(props.getId())
|
.setId(props.getId())
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.red.circle.other.app.dto.cmd.activity;
|
|||||||
|
|
||||||
import com.red.circle.common.business.dto.cmd.AppExtCommand;
|
import com.red.circle.common.business.dto.cmd.AppExtCommand;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
@ -16,4 +17,7 @@ public class ActivityRewardConfigCmd extends AppExtCommand {
|
|||||||
|
|
||||||
@NotBlank(message = "活动类型不能为空")
|
@NotBlank(message = "活动类型不能为空")
|
||||||
private String activityType;
|
private String activityType;
|
||||||
|
|
||||||
|
@NotNull(message = "活动ID不能为空")
|
||||||
|
private Long activityId;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user