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> durMap; private static Map> resCapMap; private static Map> resConMap; /** * 一次性加载所有资源 */ public List buildResourceVariable(Long sceneId) { List 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 = resourceCapabilitiesService.list(); if (CollectionUtil.isNotEmpty(resourceCapabilities)) { resCapMap = resourceCapabilities.stream().collect(Collectors.groupingBy(ResourceCapabilities::getResourceId)); } List connectors = connectorService.list(); if (CollectionUtil.isNotEmpty(connectors)) { resConMap = connectors.stream().collect(Collectors.groupingBy(Connector::getFromResourceId)); } List 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 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 capList = resCapMap.get(ws.getId()); if (CollectionUtil.isNotEmpty(capList)) { ws.setCapabilityIds(capList.stream().map(rc -> rc.getCapabilityId()).collect(Collectors.toSet())); } } }