package com.izouma.nineth.service; import com.izouma.nineth.domain.MetaTask; import com.izouma.nineth.domain.MetaTaskToUser; import com.izouma.nineth.dto.MetaRestResult; import com.izouma.nineth.enums.MetaTaskStatus; import com.izouma.nineth.repo.MetaTaskRepo; import com.izouma.nineth.repo.MetaTaskToUserRepo; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Objects; @Service @AllArgsConstructor @Slf4j public class MetaTaskToUserService { private MetaTaskToUserRepo metaTaskToUserRepo; private MetaTaskRepo metaTaskRepo; public MetaRestResult getTask(MetaTaskToUser metaTaskToUser) { if (Objects.nonNull(metaTaskToUser.getId())) { return MetaRestResult.returnError("参数不合法:id必须为空"); } if (Objects.isNull(metaTaskToUser.getTaskId())) { return MetaRestResult.returnError("参数不合法:任务id不可为空"); } if (Objects.isNull(metaTaskToUser.getUserId())) { return MetaRestResult.returnError("参数不合法:用户id不可为空"); } MetaTask metaTask = metaTaskRepo.findByIdAndDel(metaTaskToUser.getTaskId(), false); if (Objects.isNull(metaTask)) { String errMsg = String.format("根据任务id[%S]查询不到任务详情", metaTaskToUser.getTaskId()); log.info(errMsg); return MetaRestResult.returnError(errMsg); } if (Objects.isNull(metaTask.getType())) { String errMsg = String.format("任务[%S]缺少任务类型", metaTaskToUser.getTaskId()); log.info(errMsg); return MetaRestResult.returnError(errMsg); } switch (metaTask.getType()) { case ONLY_ONE: MetaTaskToUser dbMetaTaskToUser = metaTaskToUserRepo.findByUserIdAndTaskIdAndDel(metaTaskToUser.getUserId(), metaTaskToUser.getTaskId(), false); if (Objects.nonNull(dbMetaTaskToUser)) { String errMsg = String.format("任务[%S]只允许领取一次,当前用户已在[%S]领取过该任务", metaTask.getName(), dbMetaTaskToUser.getGetTime()); log.info(errMsg); return MetaRestResult.returnError(errMsg); } break; case DAILY: LocalDateTime now = LocalDateTime.now(); LocalDateTime startTime = now.withHour(0).withMinute(0).withSecond(0); MetaTaskToUser dailyMetaTaskToUser = metaTaskToUserRepo.findByCondition(metaTaskToUser.getUserId(), metaTaskToUser.getTaskId(), startTime); if (Objects.nonNull(dailyMetaTaskToUser)) { String errMsg = String.format("任务[%S]每天只允许领取一次,当前用户已在[%S]领取过该任务", metaTask.getName(), dailyMetaTaskToUser.getGetTime()); log.info(errMsg); return MetaRestResult.returnError(errMsg); } break; case MULTIPLE: break; default: return MetaRestResult.returnError(String.format("不存在的任务类型[%S]", metaTask.getType())); } metaTaskToUser.setGetTime(LocalDateTime.now()); metaTaskToUser.setStatus(MetaTaskStatus.GET); return MetaRestResult.returnSuccess(metaTaskToUserRepo.save(metaTaskToUser)); } }