|
|
@@ -100,6 +100,30 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void edit(PointActivityDTO dto) {
|
|
|
|
|
|
+ // 校验参数
|
|
|
+ Long id = dto.getId();
|
|
|
+ if (ObjectUtil.isNull(id)) {
|
|
|
+ throw new BaseException("活动主键id不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据id获取活动详情
|
|
|
+ PointActivity entity = this.pointActivityMapper.selectPointActivityById(id);
|
|
|
+ if (ObjectUtil.isNull(entity)) {
|
|
|
+ throw new BaseException("参数有误,活动不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校验活动状态
|
|
|
+ if (PointActivityStatusEnum.IN_PROGRESS.getCode().equals(entity.getStatus())) {
|
|
|
+ throw new BaseException("活动进行中,不可编辑");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新活动信息
|
|
|
+ entity = createActivityEntity(dto);
|
|
|
+ updateActivity(entity);
|
|
|
+
|
|
|
+ // 更新活动详情信息
|
|
|
+ updateActivityDetails(dto, id);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -156,6 +180,13 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void updateActivity(PointActivity entity) {
|
|
|
+ int affectedRows = pointActivityMapper.updatePointActivity(entity);
|
|
|
+ if (affectedRows <= 0) {
|
|
|
+ throw new BaseException("更新积分活动失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void saveActivityDetails(PointActivityDTO dto, Long activityId) {
|
|
|
if (PointActivityTypeEnum.SIGN_TASK.getCode().equals(dto.getActivityType())) {
|
|
|
saveSignTaskDetails(dto, activityId);
|
|
|
@@ -164,6 +195,14 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void updateActivityDetails(PointActivityDTO dto, Long activityId) {
|
|
|
+ if (PointActivityTypeEnum.SIGN_TASK.getCode().equals(dto.getActivityType())) {
|
|
|
+ updateSignTaskDetails(dto, activityId);
|
|
|
+ } else {
|
|
|
+ updateActivityTaskDetails(dto, activityId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void saveSignTaskDetails(PointActivityDTO dto, Long activityId) {
|
|
|
PointSignTaskDTO signTaskDTO = dto.getSignTaskDTO();
|
|
|
if (ObjectUtil.isNull(signTaskDTO)) {
|
|
|
@@ -265,4 +304,99 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
return PointActivityStatusEnum.IN_PROGRESS.getCode();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新签到任务详情
|
|
|
+ */
|
|
|
+ private void updateSignTaskDetails(PointActivityDTO dto, Long activityId) {
|
|
|
+ PointSignTaskDTO signTaskDTO = dto.getSignTaskDTO();
|
|
|
+ if (ObjectUtil.isNull(signTaskDTO)) {
|
|
|
+ throw new BaseException("签到任务配置不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取现有的签到任务
|
|
|
+ PointSignTaskVo existingTask = pointSignTaskService.selectPointSignTaskByActivityId(activityId);
|
|
|
+
|
|
|
+ // 更新签到任务基本信息
|
|
|
+ PointSignTask pointSignTask = new PointSignTask();
|
|
|
+ pointSignTask.setId(existingTask.getId());
|
|
|
+ pointSignTask.setBasePoints(signTaskDTO.getBasePoints());
|
|
|
+ pointSignTask.setBreakRule(signTaskDTO.getBreakRule());
|
|
|
+
|
|
|
+ // 更新签到任务
|
|
|
+ int affectedRows = pointSignTaskService.updatePointSignTask(pointSignTask);
|
|
|
+ if (affectedRows <= 0) {
|
|
|
+ throw new BaseException("更新积分签到任务规则失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新签到奖励配置
|
|
|
+ updateSignRewards(signTaskDTO.getSignRewardList(), existingTask.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新签到奖励配置
|
|
|
+ */
|
|
|
+ private void updateSignRewards(List<PointSignRewardDTO> rewardList, Long taskId) {
|
|
|
+ // 先删除原有的奖励配置
|
|
|
+ PointSignReward query = new PointSignReward();
|
|
|
+ query.setSignTaskId(taskId);
|
|
|
+ List<PointSignReward> existingRewards = pointSignRewardService.selectPointSignRewardList(query);
|
|
|
+
|
|
|
+ if (CollectionUtil.isNotEmpty(existingRewards)) {
|
|
|
+ String[] ids = existingRewards.stream()
|
|
|
+ .map(reward -> String.valueOf(reward.getId()))
|
|
|
+ .toArray(String[]::new);
|
|
|
+ pointSignRewardService.deletePointSignRewardByIds(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 重新插入新的奖励配置
|
|
|
+ if (CollectionUtil.isEmpty(rewardList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<PointSignReward> rewards = rewardList.stream()
|
|
|
+ .map(dto -> {
|
|
|
+ PointSignReward reward = new PointSignReward();
|
|
|
+ reward.setRewardPoints(dto.getRewardPoints());
|
|
|
+ reward.setContinueDays(dto.getContinueDays());
|
|
|
+ reward.setCreateTime(new Date());
|
|
|
+ reward.setUpdateTime(reward.getCreateTime());
|
|
|
+ reward.setIsDeleted(0);
|
|
|
+ reward.setSignTaskId(taskId);
|
|
|
+ return reward;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ pointSignRewardService.batchInsertPointSignReward(rewards);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新活动任务详情
|
|
|
+ */
|
|
|
+ private void updateActivityTaskDetails(PointActivityDTO dto, Long activityId) {
|
|
|
+
|
|
|
+ // 先删除原有的活动任务
|
|
|
+ pointActivityTaskService.deletePointActivityTaskByActivityId(activityId);
|
|
|
+
|
|
|
+ // 重新插入新的活动任务
|
|
|
+ List<PointActivityTaskDTO> tasks = dto.getTasks();
|
|
|
+ if (CollectionUtil.isEmpty(tasks)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<PointActivityTask> activityTasks = tasks.stream()
|
|
|
+ .map(task -> {
|
|
|
+ PointActivityTask activityTask = new PointActivityTask();
|
|
|
+ BeanUtil.copyProperties(task, activityTask);
|
|
|
+ activityTask.setActivityId(activityId);
|
|
|
+ activityTask.setIsDeleted(0);
|
|
|
+ activityTask.setCreateTime(new Date());
|
|
|
+ activityTask.setUpdateTime(activityTask.getCreateTime());
|
|
|
+ return activityTask;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ pointActivityTaskService.batchInsertPointActivityTask(activityTasks);
|
|
|
+ }
|
|
|
+
|
|
|
}
|