From 8e4e8f5db2991729a96fe517ea18869d4569d26d Mon Sep 17 00:00:00 2001 From: hy001 Date: Fri, 24 Apr 2026 17:42:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E5=A4=A7?= =?UTF-8?q?=E5=B1=8F=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ResidentInviteActivityServiceImpl.java | 55 +++++++++++++++++-- .../invite/InviteCampaignConfigCO.java | 4 +- .../invite/InviteCampaignConfigSaveCmd.java | 2 + .../dao/datav/CountryDashboardDAO.xml | 14 +++-- 4 files changed, 64 insertions(+), 11 deletions(-) diff --git a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java index 1e2d611a..d4a7d6cd 100644 --- a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java +++ b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/activity/ResidentInviteActivityServiceImpl.java @@ -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 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 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 existingRules, + InviteCampaignConfigSaveCmd cmd) { + Map existingRuleMap = existingRules.stream() + .collect(Collectors.toMap(InviteCampaignRewardRule::getId, item -> item)); + Set 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 existingRuleMap, + Set submittedIds, String ruleType, List items) { + if (CollectionUtils.isEmpty(items)) { + return; + } + items.forEach(item -> validateReusableRuleId(existingRuleMap, submittedIds, ruleType, item)); + } + + private void validateReusableRuleId(Map existingRuleMap, + Set 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); diff --git a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/app/activity/invite/InviteCampaignConfigCO.java b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/app/activity/invite/InviteCampaignConfigCO.java index f8b07c24..0cb3b35b 100644 --- a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/app/activity/invite/InviteCampaignConfigCO.java +++ b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/app/activity/invite/InviteCampaignConfigCO.java @@ -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; diff --git a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/activity/invite/InviteCampaignConfigSaveCmd.java b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/activity/invite/InviteCampaignConfigSaveCmd.java index 339640cf..570c894b 100644 --- a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/activity/invite/InviteCampaignConfigSaveCmd.java +++ b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/cmd/app/activity/invite/InviteCampaignConfigSaveCmd.java @@ -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; diff --git a/rc-service/rc-service-console/console-infrastructure/src/main/resources/dao/datav/CountryDashboardDAO.xml b/rc-service/rc-service-console/console-infrastructure/src/main/resources/dao/datav/CountryDashboardDAO.xml index 4b878f14..2c9c936f 100644 --- a/rc-service/rc-service-console/console-infrastructure/src/main/resources/dao/datav/CountryDashboardDAO.xml +++ b/rc-service/rc-service-console/console-infrastructure/src/main/resources/dao/datav/CountryDashboardDAO.xml @@ -303,20 +303,26 @@ , 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 ( ) t WHERE + + AND t.sys_origin = #{sysOrigin} + 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 + + AND t.sys_origin = #{sysOrigin} + ) t INNER JOIN user_base_info u ON u.id = t.user_id WHERE 1 = 1 - GROUP BY countryCode, countryName, periodKey, periodName