package com.qxgmat.service.inline; import com.github.pagehelper.Page; import com.nuliji.tools.AbstractService; import com.nuliji.tools.exception.ParameterException; import com.nuliji.tools.exception.SystemException; import com.nuliji.tools.mybatis.Example; import com.qxgmat.data.dao.ExerciseStructMapper; import com.qxgmat.data.dao.entity.ExaminationStruct; import com.qxgmat.data.dao.entity.ExerciseStruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @Service public class ExerciseStructService extends AbstractService { private static final Logger logger = LoggerFactory.getLogger(ExerciseStructService.class); @Resource private ExerciseStructMapper exerciseStructMapper; @Cacheable(value = "exercise_struct/main") public List main(){ List list = all(); return list.stream() .filter((ExerciseStruct b) -> b.getLevel()<=2) .collect(Collectors.toList()); } @Cacheable(value = "exercise_struct/children", key="#id+ '_' +#children") public List children(Integer id, Integer children){ List list = all(); List ids = new ArrayList<>(); return list.stream() .filter((ExerciseStruct b) -> { if (b.getParentId().equals(id)){ if (children>0) ids.add(b.getId()); return true; }else if(ids.contains(b.getParentId())){ if(children>0) ids.add(b.getId()); return true; } return false; } ) .collect(Collectors.toList()); } @Cacheable(value = "exercise_struct/parent", key="#id") public List parent(Integer id){ List list = all(); Collections.reverse(list); List ids = new ArrayList<>(); list = list.stream() .filter((ExerciseStruct b) -> { if (b.getId().equals(id)){ ids.add(b.getParentId()); return true; }else if(ids.contains(b.getId())){ ids.add(b.getParentId()); return true; } return false; } ) .collect(Collectors.toList()); Collections.reverse(list); return list; } @Cacheable(value = "exercise_struct/all") public List all(){ Example example = new Example(ExerciseStruct.class); example.setOrderByClause("level asc, id asc"); return select(exerciseStructMapper); } @CacheEvict(value={"exercise_struct/children", "exercise_struct/parent", "exercise_struct/main", "exercise_struct/all"}, allEntries=true) public ExerciseStruct add(ExerciseStruct struct){ if(struct.getParentId() > 0){ ExerciseStruct parent = get(struct.getParentId()); struct.setLevel(parent.getLevel()+1); struct.setExtend(parent.getExtend()); }else{ struct.setLevel(1); } int result = insert(exerciseStructMapper, struct); struct = one(exerciseStructMapper, struct.getId()); if(struct == null){ throw new SystemException("添加失败"); } return struct; } @CacheEvict(value={"exercise_struct/children", "exercise_struct/paper", "exercise_struct/main", "exercise_struct/all"}, allEntries=true) public ExerciseStruct edit(ExerciseStruct struct){ ExerciseStruct in = one(exerciseStructMapper, struct.getId()); if(in == null){ throw new ParameterException("层级不存在"); } if (struct.getParentId() > 0){ ExerciseStruct parent = get(struct.getParentId()); struct.setLevel(parent.getLevel()+1); struct.setExtend(parent.getExtend()); }else{ struct.setLevel(1); } int result = update(exerciseStructMapper, struct); return struct; } @CacheEvict(value={"exercise_struct/children", "exercise_struct/paper", "exercise_struct/main", "exercise_struct/all"}, allEntries=true) public boolean delete(Number id){ ExerciseStruct in = one(exerciseStructMapper, id); if(in == null){ throw new ParameterException("层级不存在"); } int result = delete(exerciseStructMapper, id); return result > 0; } public ExerciseStruct get(Number id){ ExerciseStruct in = one(exerciseStructMapper, id); if(in == null){ throw new ParameterException("层级不存在"); } return in; } public Page select(int page, int pageSize){ return select(exerciseStructMapper, page, pageSize); } public Page select(Integer[] ids){ return page(()->select(exerciseStructMapper, ids), 1, ids.length); } public List select(Collection ids){ return select(exerciseStructMapper, ids); } }