package com.estate.expert.admin.service.impl;
|
|
import com.estate.expert.admin.domain.common.EntityRef;
|
import com.estate.expert.admin.domain.common.mapper.EntityRefMapper;
|
import com.estate.expert.admin.domain.common.request.PageReq;
|
import com.estate.expert.admin.domain.common.response.PageResp;
|
import com.estate.expert.admin.domain.standard.hierachy.HierarchyData;
|
import com.estate.expert.admin.domain.standard.hierachy.HierarchyIds;
|
import com.estate.expert.admin.domain.standard.model.Model;
|
import com.estate.expert.admin.domain.standard.model.system.SysModel;
|
import com.estate.expert.admin.domain.standard.model.system.SysModelDto;
|
import com.estate.expert.admin.domain.standard.model.system.SysModelRepository;
|
import com.estate.expert.admin.domain.standard.problem.Problem;
|
import com.estate.expert.admin.domain.user.User;
|
import com.estate.expert.admin.enums.BizResultCode;
|
import com.estate.expert.admin.service.HierarchyService;
|
import com.estate.expert.admin.service.ProblemService;
|
import com.estate.expert.admin.service.UserService;
|
import com.estate.expert.admin.service.common.CrudServiceBaseImpl;
|
import com.estate.expert.admin.service.model.SystemModelService;
|
import com.estate.expert.admin.utils.tree.SimpleTreeRoot;
|
import com.estate.expert.admin.utils.tree.TreeNode;
|
import com.estate.expert.admin.utils.tree.TreeRoot;
|
import com.estate.expert.admin.utils.tree.helper.TreeHelper;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.annotation.Resource;
|
import javax.lang.model.type.NullType;
|
import java.util.HashSet;
|
import java.util.List;
|
|
/**
|
* 系统模型服务实现
|
*/
|
@Service
|
public class SystemModelServiceImpl extends CrudServiceBaseImpl<SysModel, SysModelDto> implements SystemModelService {
|
|
@Resource
|
private SysModelRepository repository;
|
|
@Resource
|
private UserService userService;
|
|
@Resource
|
private HierarchyService hierarchyService;
|
|
@Resource
|
private EntityRefMapper entityRefMapper;
|
|
@Resource
|
private ProblemService problemService;
|
|
|
@Override
|
public PageResp<EntityRef> list(String keyword, PageReq pageReq) {
|
// 要显示的信息比较简单,就不单独写mapper了
|
var page = repository.findAllByKeyword(keyword, pageReq.toPageRequest());
|
var list = page.getContent().stream().map(entityRefMapper::toReference).toList();
|
return PageResp.of(page, list);
|
}
|
|
@Override
|
public SysModel add(User creator, SysModel entity) {
|
// 初始化模型
|
entity.setHierarchy(hierarchyService.get(HierarchyIds.SYSTEM));
|
entity.setVersion(0);
|
return super.add(creator, entity);
|
}
|
|
@Override
|
public void sync(Integer id) {
|
var model = get(id);
|
BizResultCode.MODEL_NOT_FOUND.check(model == null);
|
model.setVersion(model.getVersion() + 1);
|
|
// 根据 hierarchyPaths 重新获取当前对应的问题ID
|
if (model.getHierarchyPaths() != null && !model.getHierarchyPaths().isEmpty()) {
|
var problemIds = problemService.listIds(model.getHierarchy().getId(), model.getHierarchyPaths());
|
model.setProblemIds(problemIds);
|
} else {
|
// 如果 hierarchyPaths 为空,清空 problemIds
|
model.setProblemIds(null);
|
}
|
|
save(model);
|
}
|
|
@Override
|
public SysModel getDefaultModel() {
|
return get(HierarchyIds.SYSTEM);
|
}
|
|
@Override
|
public void createDefaultModel() {
|
var model = getDefaultModel();
|
if(model != null){
|
return;
|
}
|
|
// 初始化默认模型
|
var modelDto = SysModelDto.builder()
|
.name("默认综合模型")
|
.version(0)
|
.build();
|
add(userService.getSystemUser(), modelDto);
|
}
|
|
@Override
|
public TreeRoot<HierarchyData> getHierarchyTree(Integer modelId) {
|
var model = get(modelId);
|
var root = hierarchyService.root(HierarchyIds.SYSTEM);
|
if(model.getHierarchyPaths() == null || model.getHierarchyPaths().isEmpty()){
|
return root;
|
}
|
var paths = root.findAllPaths(model.getHierarchyPaths());
|
var pathSet = new HashSet<>(paths);
|
|
var newRoot = TreeHelper.pruneTree(root.root(), (node) -> pathSet.contains(node.getPath()));
|
return new SimpleTreeRoot<>(newRoot);
|
}
|
|
@Override
|
public TreeNode<NullType> getNullHierarchyTree(Integer modelId) {
|
var tree = getHierarchyTree(modelId);
|
return TreeHelper.convertTree(tree.root(), (node, newNode) -> null);
|
}
|
|
@Override
|
public List<Integer> listModelProblemIds(Model model) {
|
var ids = ((SysModel)model).getProblemIds();
|
if(ids != null){
|
return ids;
|
}
|
|
// 如果模型中没有设置,就返回所有问题
|
return problemService.findAllProblemIds(model.getHierarchy().getId());
|
}
|
|
@Override
|
public List<Problem> listProblems(Model model, String hierarchyPath) {
|
BizResultCode.HIERARCHY_NODE_NOT_FOUND.check(hierarchyPath == null);
|
var allPaths = hierarchyService.findAllPaths(model.getHierarchy().getId(), List.of(hierarchyPath));
|
BizResultCode.HIERARCHY_NODE_NOT_FOUND.check(allPaths.isEmpty());
|
|
var ids = ((SysModel)model).getProblemIds();
|
ids = CollectionUtils.isEmpty(ids) ? null : ids;
|
return problemService.findProblems(model.getHierarchy().getId(), allPaths, ids);
|
}
|
}
|