package me.hao0.antares.store.dao.impl; import com.google.common.collect.Lists; import me.hao0.antares.common.model.JobDependence; import me.hao0.antares.store.dao.JobDependenceDao; import me.hao0.antares.store.support.RedisKeys; import me.hao0.antares.store.util.Page; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Set; /** * The job dependency dao * Author: haolin * Email: haolin.h0@gmail.com */ @Repository public class JobDependenceDaoImpl extends RedisDao<JobDependence> implements JobDependenceDao { @Override public Boolean addDependence(JobDependence dependence) { String jobNextJobsKey = RedisKeys.keyOfJobNextJobs(dependence.getJobId()); Long nextJobId = dependence.getNextJobId(); redis.opsForZSet().add(jobNextJobsKey, nextJobId + "", nextJobId.doubleValue()); return Boolean.TRUE; } @Override public Page<Long> pagingNextJobIds(Long jobId, Integer offset, Integer limit) { String jobNextJobsKey = RedisKeys.keyOfJobNextJobs(jobId); Long total = redis.opsForZSet().zCard(jobNextJobsKey); if (total <= 0L){ return Page.empty(); } Set<String> setIds = redis.opsForZSet().reverseRange(jobNextJobsKey, offset, offset + limit - 1); List<Long> ids = Lists.newArrayListWithExpectedSize(setIds.size()); for (String idStr : setIds){ ids.add(Long.valueOf(idStr)); } // Collections.sort(ids); // Collections.reverse(ids); return new Page<>(total, ids); } @Override public Boolean deleteNextJobIds(Long jobId) { String jobNextJobsKey = RedisKeys.keyOfJobNextJobs(jobId); redis.delete(jobNextJobsKey); return Boolean.TRUE; } @Override public Boolean deleteNextJobId(Long jobId, Long nextJobId) { String jobNextJobsKey = RedisKeys.keyOfJobNextJobs(jobId); return redis.opsForZSet().remove(jobNextJobsKey, String.valueOf(nextJobId)) > 0L; } }