修复数据大屏报错

This commit is contained in:
hy001 2026-04-24 17:42:21 +08:00
parent ff9b790de5
commit 8e4e8f5db2
4 changed files with 64 additions and 11 deletions

View File

@ -30,7 +30,9 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@ -98,6 +100,10 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
public void saveConfig(InviteCampaignConfigSaveCmd cmd) {
String normalizedSysOrigin = normalizeSysOrigin(cmd.getSysOrigin());
validateConfig(cmd);
List<InviteCampaignRewardRule> existingRules = inviteCampaignRewardRuleService.query()
.eq(InviteCampaignRewardRule::getSysOrigin, normalizedSysOrigin)
.list();
validateReusableRuleIds(existingRules, cmd);
InviteCampaignConfig config = inviteCampaignConfigService.query()
.eq(InviteCampaignConfig::getSysOrigin, normalizedSysOrigin)
@ -124,9 +130,6 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
ResponseAssert.isTrue(CommonErrorCode.SAVE_FAILURE, inviteCampaignConfigService.save(config));
}
List<InviteCampaignRewardRule> existingRules = inviteCampaignRewardRuleService.query()
.eq(InviteCampaignRewardRule::getSysOrigin, normalizedSysOrigin)
.list();
if (CollectionUtils.isNotEmpty(existingRules)) {
inviteCampaignRewardRuleService.removeByIds(
existingRules.stream().map(InviteCampaignRewardRule::getId).collect(Collectors.toSet()));
@ -212,6 +215,7 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
private InviteCampaignConfigCO.RewardItemCO toRewardItem(InviteCampaignRewardRule rule) {
return new InviteCampaignConfigCO.RewardItemCO()
.setId(rule.getId())
.setGoldAmount(Optional.ofNullable(rule.getGoldAmount()).orElse(0L))
.setRewardGroupId(rule.getRewardGroupId())
.setRewardGroupName(getRewardGroupName(rule.getRewardGroupId()));
@ -263,7 +267,7 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
for (int i = 0; i < sortedItems.size(); i++) {
InviteCampaignConfigSaveCmd.RuleItemCmd item = sortedItems.get(i);
rules.add(new InviteCampaignRewardRule()
.setId(IdWorkerUtils.getId())
.setId(resolveRuleId(item))
.setSysOrigin(sysOrigin)
.setRuleType(ruleType)
.setThresholdValue(Optional.ofNullable(item.getThreshold()).orElse(0L))
@ -277,7 +281,7 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
private InviteCampaignRewardRule buildRewardRule(String sysOrigin, String ruleType, Long threshold,
Integer sort, InviteCampaignConfigSaveCmd.RewardItemCmd item) {
return new InviteCampaignRewardRule()
.setId(IdWorkerUtils.getId())
.setId(resolveRuleId(item))
.setSysOrigin(sysOrigin)
.setRuleType(ruleType)
.setThresholdValue(threshold)
@ -287,6 +291,10 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
.setSort(sort);
}
private Long resolveRuleId(InviteCampaignConfigSaveCmd.RewardItemCmd item) {
return item.getId() == null ? IdWorkerUtils.getId() : item.getId();
}
private void validateConfig(InviteCampaignConfigSaveCmd cmd) {
ResponseAssert.notNull(CommonErrorCode.DATA_ERROR, cmd.getAntiCheat());
validateRewardItem("inviterBindReward", cmd.getInviterBindReward());
@ -326,6 +334,43 @@ public class ResidentInviteActivityServiceImpl implements ResidentInviteActivity
goldAmount > 0 || item.getRewardGroupId() != null);
}
private void validateReusableRuleIds(List<InviteCampaignRewardRule> existingRules,
InviteCampaignConfigSaveCmd cmd) {
Map<Long, InviteCampaignRewardRule> existingRuleMap = existingRules.stream()
.collect(Collectors.toMap(InviteCampaignRewardRule::getId, item -> item));
Set<Long> submittedIds = new HashSet<>();
validateReusableRuleId(existingRuleMap, submittedIds, RULE_TYPE_INVITER_BIND,
cmd.getInviterBindReward());
validateReusableRuleId(existingRuleMap, submittedIds, RULE_TYPE_INVITEE_BIND,
cmd.getInviteeBindReward());
validateReusableRuleIds(existingRuleMap, submittedIds, RULE_TYPE_INVITEE_RECHARGE,
cmd.getInviteeRechargeRules());
validateReusableRuleIds(existingRuleMap, submittedIds, RULE_TYPE_INVITER_VALID_COUNT,
cmd.getInviterValidCountRules());
validateReusableRuleIds(existingRuleMap, submittedIds, RULE_TYPE_INVITER_TOTAL_RECHARGE,
cmd.getInviterTotalRechargeRules());
}
private void validateReusableRuleIds(Map<Long, InviteCampaignRewardRule> existingRuleMap,
Set<Long> submittedIds, String ruleType, List<InviteCampaignConfigSaveCmd.RuleItemCmd> items) {
if (CollectionUtils.isEmpty(items)) {
return;
}
items.forEach(item -> validateReusableRuleId(existingRuleMap, submittedIds, ruleType, item));
}
private void validateReusableRuleId(Map<Long, InviteCampaignRewardRule> existingRuleMap,
Set<Long> submittedIds, String ruleType, InviteCampaignConfigSaveCmd.RewardItemCmd item) {
if (item == null || item.getId() == null) {
return;
}
ResponseAssert.isTrue(CommonErrorCode.DATA_ERROR, item.getId() > 0);
ResponseAssert.isTrue(CommonErrorCode.DATA_ERROR, submittedIds.add(item.getId()));
InviteCampaignRewardRule existingRule = existingRuleMap.get(item.getId());
ResponseAssert.isTrue(CommonErrorCode.DATA_ERROR,
existingRule != null && Objects.equals(existingRule.getRuleType(), ruleType));
}
private String normalizeSysOrigin(String sysOrigin) {
String value = trimToNull(sysOrigin);
ResponseAssert.notNull(CommonErrorCode.DATA_ERROR, value);

View File

@ -65,6 +65,8 @@ public class InviteCampaignConfigCO extends ClientObject {
@Serial
private static final long serialVersionUID = 1L;
private Long id;
private Long goldAmount;
private Long rewardGroupId;
@ -79,8 +81,6 @@ public class InviteCampaignConfigCO extends ClientObject {
@Serial
private static final long serialVersionUID = 1L;
private Long id;
private Long threshold;
private Boolean enabled;

View File

@ -69,6 +69,8 @@ public class InviteCampaignConfigSaveCmd implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long id;
private Long goldAmount;
private Long rewardGroupId;

View File

@ -303,20 +303,26 @@
<include refid="PeriodColumnsT"/>,
COUNT(DISTINCT t.user_id) AS gameUser
FROM (
SELECT t.user_id, t.sys_origin, t.create_time
SELECT t.user_id, t.create_time
FROM (
<include refid="WalletGoldAssetRecordSource"/>
) t
WHERE <include refid="WalletGameEventWhere"/>
<if test="sysOrigin != null and sysOrigin != ''">
AND t.sys_origin = #{sysOrigin}
</if>
UNION ALL
SELECT user_id, sys_origin, create_time
FROM game_lucky_box_count
SELECT t.user_id, t.create_time
FROM game_lucky_box_count t
WHERE 1 = 1
<if test="sysOrigin != null and sysOrigin != ''">
AND t.sys_origin = #{sysOrigin}
</if>
) t
INNER JOIN user_base_info u ON u.id = t.user_id
WHERE 1 = 1
<include refid="UserWhere"/>
<include refid="SourceTimeWhere"/>
<include refid="SourceSysOriginWhere"/>
GROUP BY countryCode, countryName, periodKey, periodName
</select>