|
|
@@ -1,5 +1,9 @@
|
|
|
package com.ylx.point.service.impl;
|
|
|
|
|
|
+import java.time.DateTimeException;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -17,6 +21,7 @@ import com.ylx.point.domain.PointSignReward;
|
|
|
import com.ylx.point.domain.PointSignTask;
|
|
|
import com.ylx.point.domain.dto.*;
|
|
|
import com.ylx.point.domain.vo.*;
|
|
|
+import com.ylx.point.enums.PointActivityStatusEnum;
|
|
|
import com.ylx.point.enums.PointActivityTypeEnum;
|
|
|
import com.ylx.point.service.IPointActivityTaskService;
|
|
|
import com.ylx.point.service.IPointSignRewardService;
|
|
|
@@ -48,8 +53,8 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public Page<PointActivityPageVo> page(Page<PointActivity> page, PointActivityPageDTO dto) {
|
|
|
- return null;
|
|
|
+ public List<PointActivityPageVo> list(PointActivityPageDTO dto) {
|
|
|
+ return pointActivityMapper.list(dto);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -57,23 +62,22 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
|
|
|
PointActivity pointActivity = this.pointActivityMapper.selectPointActivityById(id);
|
|
|
if (ObjectUtil.isNull(pointActivity)) {
|
|
|
- return null;
|
|
|
+ throw new BaseException("参数有误,活动不存在");
|
|
|
}
|
|
|
|
|
|
Integer activityType = pointActivity.getActivityType();
|
|
|
if (PointActivityTypeEnum.SIGN_TASK.getCode().equals(activityType)) {
|
|
|
PointSignTaskVo vo = this.pointSignTaskService.selectPointSignTaskByActivityId(pointActivity.getId());
|
|
|
BeanUtil.copyProperties(pointActivity, vo);
|
|
|
- return PointActivityDetailsVo.of(PointActivityTypeEnum.SIGN_TASK.getCode(), vo);
|
|
|
- } else if (PointActivityTypeEnum.ACTIVITY_TASK.getCode().equals(activityType)) {
|
|
|
+ return PointActivityDetailsVo.of(activityType, vo);
|
|
|
+ } else {
|
|
|
PointActivityTaskVo vo = new PointActivityTaskVo();
|
|
|
BeanUtil.copyProperties(pointActivity, vo);
|
|
|
List<PointActivityTaskDTO> activityTaskList = this.pointActivityTaskService.selectPointActivityTaskByActivityId(pointActivity.getId());
|
|
|
vo.setActivityTaskList(activityTaskList);
|
|
|
- return PointActivityDetailsVo.of(PointActivityTypeEnum.ACTIVITY_TASK.getCode(), vo);
|
|
|
+ return PointActivityDetailsVo.of(activityType, vo);
|
|
|
}
|
|
|
|
|
|
- return PointActivityDetailsVo.of(activityType, new PointActivityBaseVo());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -122,32 +126,26 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
}
|
|
|
|
|
|
private PointActivity createActivityEntity(PointActivityDTO dto) {
|
|
|
+
|
|
|
+ // 创建基础实体
|
|
|
PointActivity entity = new PointActivity();
|
|
|
BeanUtil.copyProperties(dto, entity);
|
|
|
|
|
|
+ // 处理时间配置
|
|
|
PointActivityDTO.ActivityTimeConfig timeConfig = dto.getTimeConfig();
|
|
|
entity.setStartTime(DateUtil.beginOfDay(timeConfig.getStartTime()));
|
|
|
-
|
|
|
- // 处理endTime,确保时间部分正确设置为23:59:59
|
|
|
- Date endTime = timeConfig.getEndTime();
|
|
|
- if (endTime != null) {
|
|
|
- // 使用Java 8的日期时间API处理时区问题
|
|
|
- java.time.LocalDateTime localDateTime = java.time.LocalDateTime.ofInstant(
|
|
|
- endTime.toInstant(),
|
|
|
- java.time.ZoneId.systemDefault()
|
|
|
- );
|
|
|
- // 设置为当天的23:59:59
|
|
|
- java.time.LocalDateTime endOfDay = localDateTime.with(
|
|
|
- java.time.LocalTime.of(23, 59, 59)
|
|
|
- );
|
|
|
- // 转换回Date对象
|
|
|
- endTime = Date.from(
|
|
|
- endOfDay.atZone(java.time.ZoneId.systemDefault()).toInstant()
|
|
|
- );
|
|
|
- }
|
|
|
- entity.setEndTime(endTime);
|
|
|
+ entity.setEndTime(processEndTime(timeConfig.getEndTime()));
|
|
|
entity.setIsPermanent(timeConfig.isPermanent() ? 1 : 0);
|
|
|
|
|
|
+ // 处理状态
|
|
|
+ if (PointActivityStatusEnum.PUBLISHED.getCode().equals(dto.getStatus())) {
|
|
|
+ entity.setStatus(determineActivityStatus(
|
|
|
+ entity.getStartTime(),
|
|
|
+ entity.getEndTime(),
|
|
|
+ timeConfig.isPermanent()
|
|
|
+ ));
|
|
|
+ }
|
|
|
+
|
|
|
return entity;
|
|
|
}
|
|
|
|
|
|
@@ -161,7 +159,7 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
private void saveActivityDetails(PointActivityDTO dto, Long activityId) {
|
|
|
if (PointActivityTypeEnum.SIGN_TASK.getCode().equals(dto.getActivityType())) {
|
|
|
saveSignTaskDetails(dto, activityId);
|
|
|
- } else if (PointActivityTypeEnum.ACTIVITY_TASK.getCode().equals(dto.getActivityType())) {
|
|
|
+ } else {
|
|
|
saveActivityTaskDetails(dto, activityId);
|
|
|
}
|
|
|
}
|
|
|
@@ -228,4 +226,43 @@ public class PointActivityServiceImpl implements IPointActivityService {
|
|
|
|
|
|
pointActivityTaskService.batchInsertPointActivityTask(activityTasks);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理结束时间,设置为当天的23:59:59
|
|
|
+ */
|
|
|
+ private Date processEndTime(Date endTime) {
|
|
|
+ if (endTime == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.ofInstant(
|
|
|
+ endTime.toInstant(),
|
|
|
+ ZoneId.systemDefault()
|
|
|
+ );
|
|
|
+ LocalDateTime endOfDay = localDateTime.with(
|
|
|
+ java.time.LocalTime.of(23, 59, 59));
|
|
|
+ return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ } catch (DateTimeException e) {
|
|
|
+ throw new IllegalArgumentException("Invalid end time", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 确定活动状态
|
|
|
+ */
|
|
|
+ private Integer determineActivityStatus(Date startTime, Date endTime, boolean isPermanent) {
|
|
|
+ if (isPermanent) {
|
|
|
+ return PointActivityStatusEnum.IN_PROGRESS.getCode();
|
|
|
+ }
|
|
|
+
|
|
|
+ Date now = DateUtils.getNowDate();
|
|
|
+ if (startTime.after(now)) {
|
|
|
+ return PointActivityStatusEnum.NOT_START.getCode();
|
|
|
+ } else if (endTime != null && endTime.before(now)) {
|
|
|
+ return PointActivityStatusEnum.FINISHED.getCode();
|
|
|
+ } else {
|
|
|
+ return PointActivityStatusEnum.IN_PROGRESS.getCode();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|