170 lines
7.3 KiB
Java
Raw Normal View History

2025-09-17 16:11:59 +08:00
package com.cdzy.activity.service.impl;
2025-09-19 14:46:51 +08:00
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.UUID;
import com.cdzy.activity.component.ImageConfig;
2025-09-17 16:11:59 +08:00
import com.cdzy.activity.enums.ActivityStatus;
import com.cdzy.activity.mapper.ActivityMapper;
2025-09-22 16:22:44 +08:00
import com.cdzy.activity.mapper.ActivityUserMapper;
2025-09-17 16:11:59 +08:00
import com.cdzy.activity.model.Activity;
2025-09-22 16:22:44 +08:00
import com.cdzy.activity.model.ActivityUser;
2025-09-17 16:11:59 +08:00
import com.cdzy.activity.model.vo.ActivityVo;
import com.cdzy.activity.service.ActivityService;
2025-09-19 14:46:51 +08:00
import com.cdzy.activity.uitls.FileUtils;
2025-09-19 10:11:00 +08:00
import com.cdzy.activity.uitls.ImageToBase64Converter;
2025-09-17 17:16:35 +08:00
import com.mybatisflex.core.query.QueryWrapper;
2025-09-17 16:11:59 +08:00
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
2025-09-22 16:22:44 +08:00
import org.springframework.transaction.annotation.Transactional;
2025-09-19 14:46:51 +08:00
import org.springframework.web.multipart.MultipartFile;
2025-09-17 16:11:59 +08:00
2025-09-19 14:46:51 +08:00
import java.io.File;
2025-09-19 10:11:00 +08:00
import java.io.IOException;
2025-09-17 17:16:35 +08:00
import java.time.LocalDateTime;
2025-09-22 16:22:44 +08:00
import java.util.ArrayList;
2025-09-17 17:16:35 +08:00
import java.util.List;
import static com.cdzy.activity.model.table.ActivityTableDef.ACTIVITY;
2025-09-17 16:11:59 +08:00
/**
2025-09-22 16:22:44 +08:00
* 活动状态检测变动
2025-09-17 16:11:59 +08:00
*
* @author attiya
* @since 2025-09-17
*/
@Service
2025-09-22 16:22:44 +08:00
public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> implements ActivityService {
2025-09-17 16:11:59 +08:00
@Resource
private ActivityMapper activityMapper;
2025-09-22 16:22:44 +08:00
@Resource
private ActivityUserMapper activityUserMapper;
2025-09-19 14:46:51 +08:00
@Resource
private ImageConfig imageConfig;
2025-09-17 16:11:59 +08:00
@Override
2025-09-22 16:22:44 +08:00
@Transactional(rollbackFor = Exception.class)
2025-09-19 10:11:00 +08:00
public void saveActivity(ActivityVo activity) throws IOException {
2025-09-19 14:46:51 +08:00
MultipartFile activityCover = activity.getActivityCover();
String convert = null;
2025-09-22 16:22:44 +08:00
if (activityCover != null) {
String uuid = UUID.randomUUID().toString();
String fileExtension = FileUtils.getFileExtension(activityCover);
String destPath = imageConfig.getActivityUrl() + "/" + uuid + fileExtension;
FileUtils.copyMultipartFile(activityCover, destPath, true);
2025-09-19 14:46:51 +08:00
convert = uuid + fileExtension;
}
2025-09-17 16:11:59 +08:00
Activity entity = Activity.builder()
.activityName(activity.getActivityName())
2025-09-19 10:11:00 +08:00
.activityCover(convert)
2025-09-17 16:11:59 +08:00
.activitySponsor(activity.getActivitySponsor())
.activityDescription(activity.getActivityDescription())
.activityLocation(activity.getActivityLocation())
.registrationStartTime(activity.getRegistrationStartTime())
.registrationEndTime(activity.getRegistrationEndTime())
.startTime(activity.getStartTime())
.endTime(activity.getEndTime())
.maxNum(activity.getMaxNum())
.limitPeople(activity.getLimitPeople())
2025-09-19 14:46:51 +08:00
.limitRegister(activity.getLimitRegister())
2025-09-17 16:11:59 +08:00
.status(ActivityStatus.UN_START_REGISTERING)
2025-09-22 09:47:31 +08:00
.activityType(activity.getActivityType())
2025-09-17 16:11:59 +08:00
.build();
activityMapper.insert(entity);
2025-09-22 16:22:44 +08:00
List<Long> userIds = activity.getUserIds();
if (userIds != null && !userIds.isEmpty()) {
List<ActivityUser> list = new ArrayList<>();
for (Long userId : userIds) {
list.add(new ActivityUser(entity.getActivityId(), userId));
}
activityUserMapper.insertBatch(list);
}
2025-09-17 16:11:59 +08:00
}
@Override
2025-09-22 16:22:44 +08:00
@Transactional(rollbackFor = Exception.class)
2025-09-19 10:11:00 +08:00
public void updateActivity(ActivityVo activity) throws IOException {
2025-09-17 16:11:59 +08:00
Activity entity = activityMapper.selectOneById(activity.getActivityId());
if (entity != null) {
entity.setActivityName(activity.getActivityName());
2025-09-19 14:46:51 +08:00
MultipartFile activityCover = activity.getActivityCover();
String convert = entity.getActivityCover();
2025-09-22 16:22:44 +08:00
if (activityCover != null) {
2025-09-19 14:46:51 +08:00
String uuid = UUID.randomUUID().toString();
String fileExtension = FileUtils.getFileExtension(activityCover);
2025-09-22 16:22:44 +08:00
String destPath = imageConfig.getActivityUrl() + "/" + uuid + fileExtension;
FileUtils.copyMultipartFile(activityCover, destPath, true);
FileUtil.del(imageConfig.getActivityUrl() + "/" + convert);
2025-09-19 14:46:51 +08:00
convert = uuid + fileExtension;
}
2025-09-19 10:11:00 +08:00
entity.setActivityCover(convert);
2025-09-17 16:11:59 +08:00
entity.setActivitySponsor(activity.getActivitySponsor());
entity.setActivityDescription(activity.getActivityDescription());
entity.setActivityLocation(activity.getActivityLocation());
entity.setRegistrationStartTime(activity.getRegistrationStartTime());
entity.setRegistrationEndTime(activity.getRegistrationEndTime());
entity.setStartTime(activity.getStartTime());
entity.setEndTime(activity.getEndTime());
entity.setMaxNum(activity.getMaxNum());
entity.setLimitPeople(activity.getLimitPeople());
2025-09-19 14:46:51 +08:00
entity.setLimitRegister(activity.getLimitRegister());
2025-09-22 09:47:31 +08:00
entity.setActivityType(activity.getActivityType());
2025-09-17 16:11:59 +08:00
activityMapper.update(entity);
2025-09-22 16:22:44 +08:00
QueryWrapper activityUserQueryWrapper = new QueryWrapper()
.eq(ActivityUser::getActivityId, activity.getActivityId());
activityUserMapper.deleteByQuery(activityUserQueryWrapper);
List<Long> userIds = activity.getUserIds();
if (userIds != null && !userIds.isEmpty()) {
List<ActivityUser> list = new ArrayList<>();
for (Long userId : userIds) {
list.add(new ActivityUser(entity.getActivityId(), userId));
}
activityUserMapper.insertBatch(list);
}
} else {
2025-09-17 16:11:59 +08:00
throw new RuntimeException("该活动不存在");
}
}
2025-09-17 17:16:35 +08:00
@Override
public void checkStatus() {
LocalDateTime now = LocalDateTime.now();
QueryWrapper queryWrapper = QueryWrapper.create()
2025-09-22 16:22:44 +08:00
.where(ACTIVITY.STATUS.ne(ActivityStatus.FINISHED));
2025-09-17 17:16:35 +08:00
List<Activity> activities = activityMapper.selectListByQuery(queryWrapper);
2025-09-22 16:22:44 +08:00
if (activities != null && !activities.isEmpty()) {
for (Activity activity : activities) {
switch (activity.getStatus()) {
case ActivityStatus.UN_START_REGISTERING:
if (now.isAfter(activity.getRegistrationStartTime())) {
activity.setStatus(ActivityStatus.REGISTERING);
}
break;
case ActivityStatus.REGISTERING:
if (now.isAfter(activity.getRegistrationEndTime())) {
activity.setStatus(ActivityStatus.STOP_REGISTER);
}
break;
case ActivityStatus.STOP_REGISTER:
if (now.isAfter(activity.getStartTime())) {
activity.setStatus(ActivityStatus.STARTED);
}
break;
case ActivityStatus.STARTED:
if (now.isAfter(activity.getStartTime())) {
activity.setStatus(ActivityStatus.FINISHED);
}
break;
}
}
updateBatch(activities);
}
2025-09-17 17:16:35 +08:00
}
2025-09-17 16:11:59 +08:00
}