package com.estate.expert.admin.service.impl; import com.estate.expert.admin.domain.business.device.DeviceType; 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.device.DeviceExpert; import com.estate.expert.admin.domain.standard.expert.device.DeviceExpertDto; import com.estate.expert.admin.domain.standard.expert.device.DeviceExpertRepository; 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.DeviceExpertService; import com.estate.expert.admin.service.model.DeviceModelService; 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 DeviceExpertServiceImpl extends ExpertServiceImpl implements DeviceExpertService { @Resource private DeviceExpertRepository repository; @Resource private DeviceModelService deviceModelService; @Resource private UserService userService; @Override public DeviceExpert getDefaultExpert() { return repository.findByName("默认设备专家"); } @Override public void createDefaultExpert() { var expert = getDefaultExpert(); if (expert != null) { return; } var model = deviceModelService.getDefaultModel(); var expertDto = DeviceExpertDto.builder() .name("默认设备专家") .model(EntityRef.builder().id(model.getId()).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 TreeRoot getModelTree(Model model) { return deviceModelService.getHierarchyTree(model); } @Override public List listModelProblemIds(Model model, DeviceType deviceType) { return deviceModelService.getProblemIds(model, deviceType); } @Override protected boolean existModel(Integer modelId) { return deviceModelService.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(); } }