diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/RankingDataAccumulateCmdExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/RankingDataAccumulateCmdExe.java index 77afb42f..05165924 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/RankingDataAccumulateCmdExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/activity/query/RankingDataAccumulateCmdExe.java @@ -31,33 +31,16 @@ public class RankingDataAccumulateCmdExe { RankingCycleType cycleType = RankingCycleType.getByCode(cmd.getCycleType()); RankingDimension dimension = RankingDimension.getByCode(cmd.getDimension()); - // 查询用户现有记录 - Optional existingRecord = rankingActivityGateway.getUserRecord( - cmd.getReqSysOrigin().getOrigin(), - cmd.getUserId(), - activityType, - cmd.getCycleKey() - ); - - RankingActivityRecord record; - if (existingRecord.isPresent()) { - // 更新现有记录 - record = existingRecord.get(); - } else { - // 创建新记录 - record = new RankingActivityRecord(); - record.setSysOrigin(cmd.getReqSysOrigin().getOrigin()); - record.setUserId(cmd.getUserId()); - record.setUserSex(cmd.getUserSex()); - record.setActivityType(activityType); - record.setCycleType(cycleType); - record.setCycleKey(cmd.getCycleKey()); - record.setDimension(dimension); - record.setExtData(cmd.getExtData()); - - // 设置过期时间(周期结束后30天) - record.setExpiredTime(calculateExpiredTime(cycleType, cmd.getCycleKey())); - } + RankingActivityRecord record = new RankingActivityRecord(); + record.setSysOrigin(cmd.getReqSysOrigin().getOrigin()); + record.setUserId(cmd.getUserId()); + record.setUserSex(cmd.getUserSex()); + record.setActivityType(activityType); + record.setCycleType(cycleType); + record.setCycleKey(cmd.getCycleKey()); + record.setDimension(dimension); + record.setExtData(cmd.getExtData()); + record.setExpiredTime(calculateExpiredTime(cycleType, cmd.getCycleKey())); // 累计数据 rankingActivityGateway.accumulateRankingData(record, cmd.getIncrementQuantity()); diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java index 65286459..c601d3af 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/manager/activity/award/WeeklyRewardsSentManager.java @@ -204,7 +204,7 @@ public class WeeklyRewardsSentManager { } Long activityId = activityConfigDTO.getId(); - String lastWeekDate = getLastWeekDate(); + String lastWeekDate = "20251208"; String sysOrigin = SysOriginPlatformEnum.LIKEI.name(); // 获取枚举 diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/RankingActivityGatewayImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/RankingActivityGatewayImpl.java index 8999bc41..f5576c19 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/RankingActivityGatewayImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/gateway/RankingActivityGatewayImpl.java @@ -35,24 +35,36 @@ public class RankingActivityGatewayImpl implements RankingActivityGateway { public RankingActivityRecord accumulateRankingData(RankingActivityRecord record, Long incrementQuantity) { Timestamp now = new Timestamp(System.currentTimeMillis()); - if (record.getId() == null) { - // 新记录 - 直接插入,无并发问题 - record.setQuantity(incrementQuantity); - record.setCreateTime(now); - record.setUpdateTime(now); - record.setDeleted(NOT_DELETED); - return repository.save(record); - } else { - // 已存在记录 - 使用原子更新 - Query query = new Query(Criteria.where("_id").is(record.getId())); - Update update = new Update() - .inc("quantity", incrementQuantity) - .set("updateTime", now); + // 构建查询条件:根据业务唯一键 + Query query = new Query(Criteria + .where("sysOrigin").is(record.getSysOrigin()) + .and("userId").is(record.getUserId()) + .and("activityType").is(record.getActivityType()) + .and("cycleKey").is(record.getCycleKey()) + .and("deleted").is(NOT_DELETED) + ); - FindAndModifyOptions options = new FindAndModifyOptions() - .returnNew(true); // 返回更新后的文档 - return mongoTemplate.findAndModify(query, update, options, RankingActivityRecord.class); - } + // 构建更新操作 + Update update = new Update() + .inc("quantity", incrementQuantity) + .set("updateTime", now) + + .setOnInsert("sysOrigin", record.getSysOrigin()) + .setOnInsert("userId", record.getUserId()) + .setOnInsert("userSex", record.getUserSex()) + .setOnInsert("activityType", record.getActivityType()) + .setOnInsert("cycleType", record.getCycleType()) + .setOnInsert("cycleKey", record.getCycleKey()) + .setOnInsert("dimension", record.getDimension()) + .setOnInsert("extData", record.getExtData()) + .setOnInsert("expiredTime", record.getExpiredTime()) + .setOnInsert("createTime", now) + .setOnInsert("deleted", NOT_DELETED); + + FindAndModifyOptions options = new FindAndModifyOptions() + .upsert(true) // 不存在则插入 + .returnNew(true); // 返回更新后的文档 + return mongoTemplate.findAndModify(query, update, options, RankingActivityRecord.class); } @Override