package me.jcala.blog.service; import me.jcala.blog.domain.Project; import me.jcala.blog.mapping.ProjectMapper; import me.jcala.blog.service.inter.ProjectSer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; @Service public class ProjectSerImpl implements ProjectSer { private ProjectMapper projectMapper; @Autowired public ProjectSerImpl(ProjectMapper projectMapper) { this.projectMapper = projectMapper; } @Override @Cacheable(value = "projects",condition = "#page==1",key = "1") public List<Project> getPros(int page){ int start = (page - 1) * 5; return projectMapper.select(start); } @Override @Caching(evict = { @CacheEvict(value = "projects",key = "1"), @CacheEvict(value = "projectPageNum",key = "1") }) @Transactional(isolation = Isolation.READ_COMMITTED) public void addPro(Project project){ Timestamp timestamp = new Timestamp(System.currentTimeMillis()); project.setDate(timestamp); projectMapper.insert(project); } @Override public List<Project> adminGetPros(int page){ int start = (page - 1) * 10; return projectMapper.adminSelect(start); } @Override public int adminGetPageNum(){ int count = projectMapper.count(); return count % 10 == 0 ? count / 10 : count / 10 + 1; } @Override @Caching(evict = { @CacheEvict(value = "projects",key = "1"), @CacheEvict(value = "projectPageNum",key = "1") }) public void deletePro(int id){ projectMapper.delete(id); } @Override public Project getProById(String idStr){ int id = Integer.valueOf(idStr); return projectMapper.selectById(id); } @Override @CacheEvict(value = "projects",key = "1") public void updatePro(Project project) { projectMapper.Update(project); } @Override @Cacheable(value = "projectPageNum",key = "1") public int getPageNum(){ int count = projectMapper.count(); return count % 5 == 0 ? count / 5 : count / 5 + 1; } }