Commit 0589d627 authored by duanruiming's avatar duanruiming

[add] 添加相位方案缓存

parent 5523315a
...@@ -34,6 +34,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner { ...@@ -34,6 +34,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner {
CrossSchemeService crossSchemeService; CrossSchemeService crossSchemeService;
/** /**
* 当前时间路口运行的方案相位转向数据信息
* 统一获取缓存方法 * 统一获取缓存方法
* key: crossId-dir-turn value:CrossPhaseDTO * key: crossId-dir-turn value:CrossPhaseDTO
* *
...@@ -114,7 +115,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner { ...@@ -114,7 +115,7 @@ public class CrossDirTurnPhaseCache implements CommandLineRunner {
} }
} }
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
log.info("加载区域基础信息到缓存耗时:{}ms,条数据,size={}", (end - start), phaseMap.size()); log.info("加载路口当前运行的方案相位转向缓存耗时:{}ms,条数据,size={}", (end - start), phaseMap.size());
} catch (Exception e) { } catch (Exception e) {
log.error("相位方向转向缓存初始化失败", e); log.error("相位方向转向缓存初始化失败", e);
} }
......
package net.wanji.opt.cache;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.Constants;
import net.wanji.opt.dao.mapper.CrossPhaseMapper;
import net.wanji.opt.po.base.CrossPhasePO;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author duanruiming
* @date 2023/03/06 15:03
*/
@Component
@Slf4j
public class CrossPhaseInfoCache implements CommandLineRunner {
@Resource
CrossPhaseMapper crossPhaseMapper;
private static Map<String, List<CrossPhasePO>> crossPhaseInfoMap = new HashMap<>();
public static Map<String, List<CrossPhasePO>> getCrossPhaseInfoCache() {
return crossPhaseInfoMap;
}
public static List<CrossPhasePO> getCrossPhaseCacheByCrossId(String crossId) {
if (!crossPhaseInfoMap.isEmpty()) {
return crossPhaseInfoMap.get(crossId);
}
return Collections.EMPTY_LIST;
}
public void refresh() {
init();
}
@Override
public void run(String... args) throws Exception {
init();
}
public void init() {
List<CrossPhasePO> crossPhasePOS = crossPhaseMapper.listCrossPhase(Constants.SystemParam.NULL, Constants.SystemParam.NULL);
if (!CollectionUtils.isEmpty(crossPhasePOS)) {
crossPhaseInfoMap = crossPhasePOS.stream().collect(Collectors.groupingBy(CrossPhasePO::getCrossId));
}
}
}
package net.wanji.opt.cache;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.Constants;
import net.wanji.opt.dao.mapper.CrossSchemeMapper;
import net.wanji.opt.po.base.CrossSchemePO;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author duanruiming
* @date 2023/03/06 14:30
*/
@Component
@Slf4j
public class CrossSchemeInfoCache implements CommandLineRunner {
@Resource
CrossSchemeMapper crossSchemeMapper;
/**
* key:crossId_id value:CrossSchemePO
*/
private static Map<String, CrossSchemePO> crossSchemeInfoMap = new HashMap<>();
public static Map<String, CrossSchemePO> getCrossSchemeInfosCache() {
return crossSchemeInfoMap;
}
public static CrossSchemePO geteSchemePOCache(String key) {
if (!crossSchemeInfoMap.isEmpty()) {
return crossSchemeInfoMap.get(key);
}
return null;
}
public void refresh() {
init();
}
@Override
public void run(String... args) throws Exception {
init();
}
private void init() {
try {
long start = System.currentTimeMillis();
List<CrossSchemePO> crossSchemePOS = crossSchemeMapper.listCrossSchemeInfo(Constants.SystemParam.NULL, Constants.SystemParam.NULL, null);
if (!CollectionUtils.isEmpty(crossSchemePOS)) {
crossSchemePOS.forEach(crossSchemePO -> {
String crossId = crossSchemePO.getCrossId();
Integer schemeId = crossSchemePO.getId();
String key = String.join("_", crossId, String.valueOf(schemeId));
crossSchemeInfoMap.put(key, crossSchemePO);
});
}
long end = System.currentTimeMillis();
log.info("加载路口方案信息到缓存耗时:{}ms,条数据,size={}", (end - start), crossSchemeInfoMap.size());
} catch (Exception e) {
log.info("加载路口方案信息到缓存失败", e);
}
}
}
...@@ -33,13 +33,15 @@ import org.springframework.stereotype.Service; ...@@ -33,13 +33,15 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static net.wanji.opt.cache.CrossPhaseInfoCache.getCrossPhaseCacheByCrossId;
import static net.wanji.opt.cache.CrossSchemeInfoCache.geteSchemePOCache;
/** /**
* @author hfx * @author hfx
* @date 2023/1/10 15:15 * @date 2023/1/10 15:15
...@@ -79,17 +81,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -79,17 +81,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
static Set<String> CROSS_OPT = new HashSet<>(); // 记录已优化的路口 static Set<String> CROSS_OPT = new HashSet<>(); // 记录已优化的路口
/**
* 解决静态方法中不能使用mapper
*/
private static CrossOptimizeServiceImpl crossOptimizeService;
@PostConstruct
public void init() {
crossOptimizeService = this;
crossOptimizeService.crossPhaseMapper = this.crossPhaseMapper;
crossOptimizeService.crossSchemeMapper = this.crossSchemeMapper;
}
@Override @Override
@Transactional @Transactional
public String realtimeOptimize(List<CrossDataRealtimePO> abnormalCrossList, List<CrossDataRealtimePO> crossDataRealtimePOList) { public String realtimeOptimize(List<CrossDataRealtimePO> abnormalCrossList, List<CrossDataRealtimePO> crossDataRealtimePOList) {
...@@ -512,13 +503,12 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -512,13 +503,12 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
} }
Integer schemeId = crossPhaseDTO.getSchemeId(); Integer schemeId = crossPhaseDTO.getSchemeId();
List<CrossSchemePO> crossSchemePOS = crossOptimizeService.crossSchemeMapper.listCrossSchemeInfo(crossId, null, schemeId); CrossSchemePO crossSchemePO = geteSchemePOCache(String.join("_", crossId, String.valueOf(schemeId)));
List<CrossPhasePO> crossPhasePOS = crossOptimizeService.crossPhaseMapper.listCrossPhase(crossId, String.valueOf(schemeId)); Map<Integer, List<CrossPhasePO>> ringNoPhasePOMap = getCrossPhaseCacheByCrossId(crossId).stream().collect(Collectors.groupingBy(CrossPhasePO::getRingNo));
Map<Integer, List<CrossPhasePO>> ringNoPhasePOMap = crossPhasePOS.stream().collect(Collectors.groupingBy(CrossPhasePO::getRingNo));
SchemeSendVO schemeSendVO = new SchemeSendVO(); SchemeSendVO schemeSendVO = new SchemeSendVO();
List<SchemeSendVO.Pattern> patternList = new ArrayList<>(); List<SchemeSendVO.Pattern> patternList = new ArrayList<>();
crossSchemePOS.forEach(crossSchemePO -> { if (Objects.nonNull(crossSchemePO)) {
SchemeSendVO.Pattern pattern = new SchemeSendVO.Pattern(); SchemeSendVO.Pattern pattern = new SchemeSendVO.Pattern();
pattern.setPatternName("实时监测优化方案".concat(crossSchemePO.getSchemeNo())); pattern.setPatternName("实时监测优化方案".concat(crossSchemePO.getSchemeNo()));
pattern.setPatternNo(String.valueOf(crossSchemePO.getId())); pattern.setPatternNo(String.valueOf(crossSchemePO.getId()));
...@@ -557,7 +547,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService { ...@@ -557,7 +547,6 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
pattern.setRings(rings); pattern.setRings(rings);
patternList.add(pattern); patternList.add(pattern);
} }
);
schemeSendVO.setCrossCode(crossId); schemeSendVO.setCrossCode(crossId);
schemeSendVO.setPatternList(patternList); schemeSendVO.setPatternList(patternList);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment