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<DeviceExpert, DeviceExpertDto> 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<DeviceExpertDto> 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<HierarchyData> getModelTree(Model model) {
|
return deviceModelService.getHierarchyTree(model);
|
}
|
|
@Override
|
public List<Integer> listModelProblemIds(Model model, DeviceType deviceType) {
|
return deviceModelService.getProblemIds(model, deviceType);
|
}
|
|
@Override
|
protected boolean existModel(Integer modelId) {
|
return deviceModelService.existsById(modelId);
|
}
|
|
@Override
|
public List<DeviceExpert> listScoreExperts(Integer modelId) {
|
return listExperts(modelId, ExpertFunc.SCORE_FUNC);
|
}
|
|
@Override
|
public List<DeviceExpert> listFuzzyExperts(Integer modelId) {
|
return listExperts(modelId, ExpertFunc.FUZZY_FUNC);
|
}
|
|
|
private List<DeviceExpert> listExperts(Integer modelId, ExpertFunc func) {
|
return repository.listExperts(modelId).stream().filter(e -> !CollectionUtils.isEmpty(e.getExpertFuncs()) && e.getExpertFuncs().contains(func)).toList();
|
}
|
|
|
}
|