|
|
@@ -4,17 +4,16 @@ import com.utic.common.utils.Elapsed;
|
|
|
import com.utic.ptis.server.config.ApplicationConfig;
|
|
|
import com.utic.ptis.server.dao.mapper.dwdb.DwdbParamMapper;
|
|
|
import com.utic.ptis.server.dao.mapper.utic.LinkMapper;
|
|
|
-import com.utic.ptis.server.dto.LinkCountDto;
|
|
|
-import com.utic.ptis.server.dto.LinkDto;
|
|
|
-import com.utic.ptis.server.dto.LinkTrafFusionInfo;
|
|
|
-import com.utic.ptis.server.dto.LogicalLinkDto;
|
|
|
+import com.utic.ptis.server.dto.*;
|
|
|
import com.utic.ptis.server.repository.ApplicationRepository;
|
|
|
import com.utic.ptis.server.utils.LogUtils;
|
|
|
import lombok.Getter;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.Setter;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
@@ -29,24 +28,24 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
|
|
|
private final DwdbParamMapper dwdbParamMapper;
|
|
|
private final LinkMapper linkMapper;
|
|
|
- private final LinkTrafParamService linkTrafParamService;
|
|
|
|
|
|
private final ConcurrentHashMap<String, LinkDto> linkMap = new ConcurrentHashMap<>();
|
|
|
private final LinkTrafFusionInfo fusionInfo = new LinkTrafFusionInfo();
|
|
|
- private volatile String[] linkArr = null;
|
|
|
- private volatile String[] link1Arr = null;
|
|
|
+ private List<String> linkLists = null;
|
|
|
+ private List<String> link1Lists = null;
|
|
|
private int link1Count = 0;
|
|
|
private int link2Count = 0;
|
|
|
private int link3Count = 0;
|
|
|
private int link4Count = 0;
|
|
|
- private String prcsTime;
|
|
|
+
|
|
|
+ @Setter
|
|
|
+ private String prcsTime = "20000101000000";
|
|
|
+ @Setter
|
|
|
+ private String patternTime = "20000101000000";
|
|
|
|
|
|
public LinkDto getLink(String linkId) {
|
|
|
return this.linkMap.get(linkId);
|
|
|
}
|
|
|
- public void setPrcsTime(String prcsTime) {
|
|
|
- this.prcsTime = prcsTime;
|
|
|
- }
|
|
|
|
|
|
private boolean initializeLinkCount() {
|
|
|
boolean result = true;
|
|
|
@@ -63,14 +62,14 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
|
|
|
int totalLinkCount = this.link1Count + this.link2Count + this.link3Count + this.link4Count;
|
|
|
if (this.link1Count > 0) {
|
|
|
- this.link1Arr = new String[this.link1Count];
|
|
|
+ this.link1Lists = new ArrayList<>(this.link1Count);
|
|
|
}
|
|
|
else {
|
|
|
log.error("[INIT...] totalLinkCount is zero.");
|
|
|
result = false;
|
|
|
}
|
|
|
if (totalLinkCount > 0) {
|
|
|
- this.linkArr = new String[totalLinkCount];
|
|
|
+ this.linkLists = new ArrayList<>(totalLinkCount);
|
|
|
}
|
|
|
else {
|
|
|
log.error("[INIT...] totalLinkCount is zero.");
|
|
|
@@ -95,7 +94,8 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
link.init();
|
|
|
|
|
|
if (link.getLinkLevel() == 1) {
|
|
|
- this.link1Arr[link1++] = link.getLinkId();
|
|
|
+ this.link1Lists.add(link.getLinkId());
|
|
|
+ link1++;
|
|
|
} else if (link.getLinkLevel() == 2) {
|
|
|
link2++;
|
|
|
} else if (link.getLinkLevel() == 3) {
|
|
|
@@ -103,7 +103,8 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
} else if (link.getLinkLevel() == 4) {
|
|
|
link4++;
|
|
|
}
|
|
|
- this.linkArr[linkCnt++] = link.getLinkId();
|
|
|
+ linkCnt++;
|
|
|
+ this.linkLists.add(link.getLinkId());
|
|
|
this.linkMap.put(link.getLinkId(), link);
|
|
|
}
|
|
|
log.info("[INIT...] findLinkAll: (MEM) {}, LV1({}), LV2({}), LV3({}), LV4({}).",
|
|
|
@@ -126,11 +127,11 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
|
|
|
tmpElapsed.reset();
|
|
|
int calCnt = 0;
|
|
|
- for (LogicalLinkDto grp : links) {
|
|
|
- String logicalLinkId = grp.getLogicalLinkId();
|
|
|
- LinkDto link = this.linkMap.get(logicalLinkId);
|
|
|
- if (link != null) {
|
|
|
- link.setLinkIds(grp.getLinkIds());
|
|
|
+ for (LogicalLinkDto logicalLinkDto : links) {
|
|
|
+ String logicalLinkId = logicalLinkDto.getLogicalLinkId();
|
|
|
+ LinkDto logicalLink = this.linkMap.get(logicalLinkId);
|
|
|
+ if (logicalLink != null) {
|
|
|
+ logicalLink.setLinkIds(logicalLinkDto.getLinkIds());
|
|
|
}
|
|
|
else {
|
|
|
log.error("[INIT...] findLogicalLinkAll: LogicalLink({}), Level({}) is null.", logicalLinkId, linkLevel);
|
|
|
@@ -138,32 +139,35 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- int linkCount = grp.getLinkIds().size();
|
|
|
+ int linkCount = logicalLinkDto.getLinkIds().size();
|
|
|
if (linkCount <= 1) {
|
|
|
continue; // 1 개의 구간으로 구성된 로지컬링크.
|
|
|
}
|
|
|
|
|
|
// 레벨 4일경우에만 해도 됌.
|
|
|
- for (int ii = 0; ii < grp.getLinkIds().size(); ii++) {
|
|
|
- String linkId = grp.getLinkIds().get(ii);
|
|
|
- LinkDto grpLink = this.linkMap.get(linkId);
|
|
|
- if (grpLink == null) {
|
|
|
- log.error("[INIT...] findLogicalLinkAll: LogicalLink({}), Level({}), Link({}) is null.", logicalLinkId, linkLevel, linkId);
|
|
|
- continue;
|
|
|
- }
|
|
|
+ if (linkLevel == 4) {
|
|
|
+ for (int ii = 0; ii < logicalLinkDto.getLinkIds().size(); ii++) {
|
|
|
+ String linkId = logicalLinkDto.getLinkIds().get(ii);
|
|
|
+ LinkDto link = this.linkMap.get(linkId);
|
|
|
+ if (link == null) {
|
|
|
+ log.error("[INIT...] findLogicalLinkAll: LogicalLink({}), Level({}), Link({}) is null.", logicalLinkId, linkLevel, linkId);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- if (ii == 0) {
|
|
|
- // 첫번째
|
|
|
- grpLink.setUpLinkId(grp.getLinkIds().get(ii + 1));
|
|
|
- } else if (ii == linkCount - 1) {
|
|
|
- // 마지막
|
|
|
- grpLink.setDnLinkId(grp.getLinkIds().get(ii - 1));
|
|
|
- } else {
|
|
|
- // 중간
|
|
|
- grpLink.setUpLinkId(grp.getLinkIds().get(ii + 1));
|
|
|
- grpLink.setDnLinkId(grp.getLinkIds().get(ii - 1));
|
|
|
+ link.setLink4Id(logicalLink.getLinkId());
|
|
|
+ if (ii == 0) {
|
|
|
+ // 첫번째
|
|
|
+ link.setUpLinkId(logicalLinkDto.getLinkIds().get(ii + 1));
|
|
|
+ } else if (ii == linkCount - 1) {
|
|
|
+ // 마지막
|
|
|
+ link.setDnLinkId(logicalLinkDto.getLinkIds().get(ii - 1));
|
|
|
+ } else {
|
|
|
+ // 중간
|
|
|
+ link.setUpLinkId(logicalLinkDto.getLinkIds().get(ii + 1));
|
|
|
+ link.setDnLinkId(logicalLinkDto.getLinkIds().get(ii - 1));
|
|
|
+ }
|
|
|
+ calCnt++;
|
|
|
}
|
|
|
- calCnt++;
|
|
|
}
|
|
|
}
|
|
|
log.info("[INIT...] findLogicalLinkAll: Level({}) LOGICAL SUB LINK: {} EA. {}",
|
|
|
@@ -202,8 +206,6 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
log.info("[INIT...] LinkRepositoryService.processing: start.");
|
|
|
Elapsed elapsed = new Elapsed();
|
|
|
|
|
|
- this.linkTrafParamService.processing();
|
|
|
-
|
|
|
initializeLinkCount(); // 링크 레벨별 갯수 조회
|
|
|
initializeLink(); // 링크 레벨별 정보 조회
|
|
|
initializeLogicalLink(); // 로지컬링크 정보 조회
|
|
|
@@ -213,12 +215,80 @@ public class LinkRepositoryService implements AbstractProcessService {
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- public void initLinkTraf(boolean initPtrnTraf) {
|
|
|
- log.info("[INIT...] LinkRepositoryService.initLinkTraf: start.");
|
|
|
- Elapsed elapsed = new Elapsed();
|
|
|
+ public void initLinkTraf() {
|
|
|
+ this.linkMap.forEach((linkId, link) -> {
|
|
|
+ link.initTraf();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public void initLinkPtrn() {
|
|
|
this.linkMap.forEach((linkId, link) -> {
|
|
|
- link.initTraf(initPtrnTraf);
|
|
|
+ link.initPtrn();
|
|
|
});
|
|
|
- log.info("[INIT...] LinkRepositoryService.initLinkTraf: ..end. {}", Elapsed.elapsedStr(elapsed.nanoSeconds()));
|
|
|
+ }
|
|
|
+
|
|
|
+ public LinkMissingValueHistDto getMissingValueHist(LinkDto link, String exeDate) {
|
|
|
+ if (!link.isPrcsPtrnMissing()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if (link.getTrafFsn().getState().getCrtDataType() == LinkTrafState.TRAFFIC_CRT_DATA_TYPE.CRT_DATA_NORMAL) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if (link.getTrafFsn().getState().getMissValueYn().equals("O")) {
|
|
|
+ // 운영자가 입력한 소통정보이면 결측자료로 처리하지 않는다.(20131113)
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ LinkMissingValueHistDto valueHist = new LinkMissingValueHistDto(link, exeDate);
|
|
|
+ if (link.getTrafFsn().getState().isState()) {
|
|
|
+ // 결측값
|
|
|
+ valueHist.setMissingType(link.getTrafFsn().getState().getMissValueYn());
|
|
|
+ valueHist.setRevisionSpd(link.getTrafFsn().getSpeed());
|
|
|
+ }
|
|
|
+ if (link.getTrafPtrn().getState().isState()) {
|
|
|
+ // 패턴값
|
|
|
+ valueHist.setRevisionSpd(link.getTrafPtrn().getSpeed());
|
|
|
+ }
|
|
|
+ LinkDto upLink = this.linkMap.get(link.getUpLinkId());
|
|
|
+ if (upLink != null) {
|
|
|
+ // 상류부 링크
|
|
|
+ if (upLink.getTrafFsn().getState().isState() && upLink.getTrafFsn().getState().getCrtDataType() == LinkTrafState.TRAFFIC_CRT_DATA_TYPE.CRT_DATA_NORMAL) {
|
|
|
+ valueHist.setUpLinkSpd(upLink.getTrafFsn().getSpeed());
|
|
|
+ }
|
|
|
+ if (upLink.getTrafPtrn().getState().isState()) {
|
|
|
+ valueHist.setUpPatnSpd(upLink.getTrafPtrn().getSpeed());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ LinkDto dnLink = this.linkMap.get(link.getDnLinkId());
|
|
|
+ if (dnLink != null) {
|
|
|
+ // 상류부 링크
|
|
|
+ if (dnLink.getTrafFsn().getState().isState() && dnLink.getTrafFsn().getState().getCrtDataType() == LinkTrafState.TRAFFIC_CRT_DATA_TYPE.CRT_DATA_NORMAL) {
|
|
|
+ valueHist.setDnLinkSpd(dnLink.getTrafFsn().getSpeed());
|
|
|
+ }
|
|
|
+ if (dnLink.getTrafPtrn().getState().isState()) {
|
|
|
+ valueHist.setDnPatnSpd(dnLink.getTrafPtrn().getSpeed());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ LinkDto grpLink = this.linkMap.get(link.getLink4Id());
|
|
|
+ if (grpLink != null) {
|
|
|
+ // 레벨4 링크
|
|
|
+ if (grpLink.getTrafFsn().getState().isState() && grpLink.getTrafFsn().getState().getCrtDataType() == LinkTrafState.TRAFFIC_CRT_DATA_TYPE.CRT_DATA_NORMAL) {
|
|
|
+ valueHist.setL4LinkSpd(grpLink.getTrafFsn().getSpeed());
|
|
|
+ }
|
|
|
+ if (grpLink.getTrafPtrn().getState().isState()) {
|
|
|
+ valueHist.setL4PatnSpd(grpLink.getTrafPtrn().getSpeed());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ valueHist.setPsdSpeed(link.getMissPsd().getSpeed());
|
|
|
+ valueHist.setKnnSpeed(link.getMissKnn().getSpeed());
|
|
|
+ valueHist.setKnnCnt(0);
|
|
|
+ return valueHist;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void makeCenterTraffic() {
|
|
|
+ this.linkMap.values().parallelStream()
|
|
|
+ .forEach(link -> {
|
|
|
+ link.makeCenterTraffic(this.prcsTime);
|
|
|
+ });
|
|
|
}
|
|
|
}
|