package com.chinaztt.mes.aps.core.helper;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.chinaztt.mes.aps.core.domain.ResourceBo;
|
import com.chinaztt.mes.aps.entity.Connector;
|
import com.chinaztt.mes.aps.entity.Resource;
|
import com.chinaztt.mes.aps.entity.ResourceCapabilities;
|
import com.chinaztt.mes.aps.entity.ResourceDuration;
|
import com.chinaztt.mes.aps.mapper.ResourceMapper;
|
import com.chinaztt.mes.aps.service.*;
|
import lombok.AllArgsConstructor;
|
import org.springframework.stereotype.Component;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @Author: zhangxy
|
* @Date: 2020-10-15 15:30
|
*/
|
@Component
|
@AllArgsConstructor
|
public class ResourceHelper {
|
|
private ConnectorService connectorService;
|
private ResourceDurationService resourceDurationService;
|
private ResourceCapabilitiesService resourceCapabilitiesService;
|
|
private ResourceMapper resourceMapper;
|
|
private static Map<Long, List<ResourceDuration>> durMap;
|
private static Map<Long, List<ResourceCapabilities>> resCapMap;
|
private static Map<Long, List<Connector>> resConMap;
|
|
/**
|
* 一次性加载所有资源
|
*/
|
public List<ResourceBo> buildResourceVariable(Long sceneId) {
|
List<ResourceBo> resources = resourceMapper.getAllWithMaxTime(sceneId);
|
if (CollectionUtil.isEmpty(resources)) {
|
throw new RuntimeException("没有找到任何资源,请先配置");
|
}
|
|
cacheQuery();
|
for (ResourceBo res : resources) {
|
setChildren(res);
|
setCapability(res);
|
setDuration(res);
|
}
|
return resources;
|
}
|
|
private void cacheQuery() {
|
durMap = new HashMap<>(100);
|
resCapMap = new HashMap<>(100);
|
resConMap = new HashMap<>(100);
|
|
List<ResourceCapabilities> resourceCapabilities = resourceCapabilitiesService.list();
|
if (CollectionUtil.isNotEmpty(resourceCapabilities)) {
|
resCapMap = resourceCapabilities.stream().collect(Collectors.groupingBy(ResourceCapabilities::getResourceId));
|
}
|
List<Connector> connectors = connectorService.list();
|
if (CollectionUtil.isNotEmpty(connectors)) {
|
resConMap = connectors.stream().collect(Collectors.groupingBy(Connector::getFromResourceId));
|
}
|
List<ResourceDuration> durationList = resourceDurationService.list();
|
if (CollectionUtil.isNotEmpty(durationList)) {
|
durMap = durationList.stream().collect(Collectors.groupingBy(ResourceDuration::getResourceId));
|
}
|
}
|
|
|
private void setDuration(ResourceBo ws) {
|
ws.setDurations(durMap.get(ws.getId()));
|
}
|
|
|
private void setChildren(ResourceBo ws) {
|
List<Connector> conList = resConMap.get(ws.getId());
|
if (CollectionUtil.isNotEmpty(conList)) {
|
ws.setChildren(conList.stream().map(c -> c.getToResourceId()).collect(Collectors.toSet()));
|
}
|
}
|
|
private void setCapability(ResourceBo ws) {
|
List<ResourceCapabilities> capList = resCapMap.get(ws.getId());
|
if (CollectionUtil.isNotEmpty(capList)) {
|
ws.setCapabilityIds(capList.stream().map(rc -> rc.getCapabilityId()).collect(Collectors.toSet()));
|
}
|
}
|
|
|
}
|