package com.ruoyi.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.SnowflakeUtil; import com.ruoyi.domain.*; import com.ruoyi.mapper.ReviewStandardMapper; import com.ruoyi.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; @Transactional @Service public class ReviewStandardServiceImpl extends ServiceImpl<ReviewStandardMapper, ReviewStandard> implements ReviewStandardService { @Autowired private ReviewKeyPointService reviewKeyPointService; @Autowired private ReviewDetailsService reviewDetailsService; @Autowired private ReviewSceneService reviewSceneService; @Autowired private ReviewSceneChangeLogService reviewSceneChangeLogService; /** * 查询所有审查 标准、要点、细则、场景 并组织成树状结构返回 * @return */ public List<ReviewStandard> findTree() { List<ReviewStandard> reviewStandardList = list(); // 查询审查标准 List<ReviewKeyPoint> reviewKeyPointList = reviewKeyPointService.findByStandardList(reviewStandardList); // 查询审查要点 List<ReviewDetails> reivewDetailsList = reviewDetailsService.findByKeyPointsList(reviewKeyPointList); // 查询审查细则 List<ReviewScene> reviewSceneList = reviewSceneService.findByDetailsList(reivewDetailsList); // 查询审查场景 return buildTree(reviewStandardList, reviewKeyPointList, reivewDetailsList, reviewSceneList); } /** * 将审查 标准、要点、细则、场景 按照父子关系拆分写入到各自的表中 * @param reviewStandardList */ @Override public void initData(List<ReviewStandard> reviewStandardList) { Date now = new Date(); for(ReviewStandard reviewStandard : reviewStandardList) { initStandard(SnowflakeUtil.generate(), reviewStandard); } } /** * 保存审查标准数据 * @param id * @param reviewStandard */ private void initStandard(Long id, ReviewStandard reviewStandard) { reviewStandard.setId(id); initKeyPoint(id, reviewStandard.getKeyPointList()); save(reviewStandard); } /** * 保存审查要点数据 * @param parentId * @param reviewKeyPointList */ private void initKeyPoint(Long parentId, List<ReviewKeyPoint> reviewKeyPointList) { for(ReviewKeyPoint reviewKeyPoint : reviewKeyPointList) { Long id = SnowflakeUtil.generate(); reviewKeyPoint.setId(id); reviewKeyPoint.setReviewStandardId(parentId); initDetails(id, reviewKeyPoint.getReviewDetailsList()); reviewKeyPointService.save(reviewKeyPoint); } } /** * 保存审查细则数据 * @param parentId * @param reviewDetailsList */ private void initDetails(Long parentId, List<ReviewDetails> reviewDetailsList) { for(ReviewDetails reviewDetails : reviewDetailsList) { Long id = SnowflakeUtil.generate(); reviewDetails.setId(id); reviewDetails.setReviewKeypointId(parentId); initScene(id, reviewDetails.getReviewSceneList()); reviewDetailsService.save(reviewDetails); } } /** * 保存审查场景数据 * @param parentId * @param reviewSceneList */ private void initScene(Long parentId, List<ReviewScene> reviewSceneList) { Date now = new Date(); for(ReviewScene reviewScene : reviewSceneList) { Long id = SnowflakeUtil.generate(); reviewScene.setId(id); reviewScene.setReviewDetailsId(parentId); reviewSceneService.save(reviewScene); ReviewSceneChangeLog changeLog = new ReviewSceneChangeLog() .setReviewSceneId(reviewScene.getId()) .setCreateTime(now) .setNewText(reviewScene.getText()) .setOperation("INIT"); reviewSceneChangeLogService.save(changeLog); } } /** * 将审查 标准、要点、细则、场景 组织成树状结构返回 * @param reviewStandardList 审查标准集合 * @param reviewKeyPointList 审查要点集合 * @param reviewDetailsList 审查细则集合 * @param reviewSceneList 审查场景集合 * @return */ private List<ReviewStandard> buildTree(List<ReviewStandard> reviewStandardList, List<ReviewKeyPoint> reviewKeyPointList, List<ReviewDetails> reviewDetailsList, List<ReviewScene> reviewSceneList) { List<ReviewDetails> reviewDetails = buildDetails(reviewDetailsList, reviewSceneList); List<ReviewKeyPoint> keyPoints = buildKeyPoint(reviewKeyPointList, reviewDetails); List<ReviewStandard> standards = buildStandard(reviewStandardList, keyPoints); return standards; } /** * 构建父子关系 - 审查细则&审查场景 * @param reviewDetailsList 审查细则集合 * @param reviewSceneList 审查场景集合 * @return */ private List<ReviewDetails> buildDetails(List<ReviewDetails> reviewDetailsList, List<ReviewScene> reviewSceneList) { for(ReviewDetails reviewDetails : reviewDetailsList) { Long detailsId = reviewDetails.getId(); List<ReviewScene> children = new ArrayList<>(); for(ReviewScene reviewScene : reviewSceneList) { if(reviewScene.getReviewDetailsId().equals(detailsId)) { children.add(reviewScene); } } if(children.size() > 0) { reviewDetails.setReviewSceneList(children); } } return reviewDetailsList; } /** * 构建父子关系 - 审查要点&审查细则 * @param reviewKeyPointList 审查要点集合 * @param reviewDetailsList 审查细则集合 * @return */ private List<ReviewKeyPoint> buildKeyPoint(List<ReviewKeyPoint> reviewKeyPointList, List<ReviewDetails> reviewDetailsList) { for(ReviewKeyPoint reviewKeyPoint : reviewKeyPointList) { Long keyPointId = reviewKeyPoint.getId(); List<ReviewDetails> children = new ArrayList<>(); for(ReviewDetails reviewDetails : reviewDetailsList) { if(reviewDetails.getReviewKeypointId().equals(keyPointId)) { children.add(reviewDetails); } } if(children.size() > 0) { reviewKeyPoint.setReviewDetailsList(children); } } return reviewKeyPointList; } /** * 构建负责关系 - 审查标准&审查要点 * @param reviewStandardList 审查标准集合 * @param reviewKeyPointList 审查要点集合 * @return */ private List<ReviewStandard> buildStandard(List<ReviewStandard> reviewStandardList, List<ReviewKeyPoint> reviewKeyPointList) { for(ReviewStandard reviewStandard : reviewStandardList) { Long standardId = reviewStandard.getId(); List<ReviewKeyPoint> children = new ArrayList<>(); for(ReviewKeyPoint reviewKeyPoint : reviewKeyPointList) { if(reviewKeyPoint.getReviewStandardId().equals(standardId)) { children.add(reviewKeyPoint); } } if(children.size() > 0) { reviewStandard.setKeyPointList(children); } } return reviewStandardList; } }