package com.estate.expert.admin.service.impl; import com.estate.expert.admin.domain.common.EntityRef; 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.expert.ExpertFunc; import com.estate.expert.admin.domain.standard.expert.system.SysExpert; import com.estate.expert.admin.domain.standard.expert.system.SysExpertDto; import com.estate.expert.admin.domain.standard.expert.system.SysExpertRepository; import com.estate.expert.admin.domain.standard.hierachy.HierarchyData; import com.estate.expert.admin.domain.standard.model.Model; import com.estate.expert.admin.service.UserService; import com.estate.expert.admin.service.expert.SysExpertService; import com.estate.expert.admin.service.model.SystemModelService; import com.estate.expert.admin.utils.tree.TreeRoot; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.List; /** * 系统专家服务实现 */ @Service @Slf4j public class SysExpertServiceImpl extends ExpertServiceImpl implements SysExpertService { @Resource private SysExpertRepository repository; @Resource private SystemModelService systemModelService; @Resource private UserService userService; @Override public SysExpert getDefaultExpert() { return getByName("默认综合专家"); } @Override public void createDefaultExpert() { var expert = getDefaultExpert(); if (expert != null) { return; } var model = systemModelService.getDefaultModel(); var expertDto = SysExpertDto.builder() .name("默认综合专家") .model(EntityRef.builder().id(model.getId()).name(model.getName()).build()) .expertInquiryWeight(1.0f) .matrixWeight(1.0f) .membershipWeight(1.0f) .expertFuncs(List.of(ExpertFunc.SCORE_FUNC, ExpertFunc.FUZZY_FUNC)) .build(); add(userService.getSystemUser(), expertDto); } @Override public PageResp list(String keyword, Integer modelId, PageReq pageReq) { var page = repository.listExperts(keyword, modelId, pageReq.toPageRequest()); return PageResp.of(page, toDto(page.getContent())); } @Override public List listModelProblemIds(Model model) { return systemModelService.listModelProblemIds(model); } @Override public TreeRoot getModelTree(Model model) { return systemModelService.getHierarchyTree(model.getId()); } @Override protected boolean existModel(Integer modelId) { return systemModelService.existsById(modelId); } @Override public List listScoreExperts(Integer modelId) { return listExperts(modelId, ExpertFunc.SCORE_FUNC); } @Override public List listFuzzyExperts(Integer modelId) { return listExperts(modelId, ExpertFunc.FUZZY_FUNC); } private List listExperts(Integer modelId, ExpertFunc func) { return repository.listExperts(modelId).stream().filter(e -> !CollectionUtils.isEmpty(e.getExpertFuncs()) && e.getExpertFuncs().contains(func)).toList(); } }