123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- package com.its.rota.server.service;
- import com.its.app.common.utils.Elapsed;
- import com.its.rota.server.aspect.annotation.ProcessElapsed;
- import com.its.rota.server.dao.mapper.IncidentMapper;
- import com.its.rota.server.dao.mapper.TrafficMapper;
- import com.its.rota.server.dto.CenterDto;
- import com.its.rota.server.entity.TbCheckIncident;
- import com.its.rota.server.entity.TbCheckTraffic;
- import com.its.rota.server.entity.TbSndIncident;
- import com.its.rota.server.entity.TbTrafficCenter;
- import com.its.rota.server.repository.ApplicationRepository;
- import lombok.Getter;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.PostConstruct;
- import javax.annotation.PreDestroy;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- @Slf4j
- @Getter
- @Service
- @RequiredArgsConstructor
- @Transactional(rollbackFor = {Exception.class})
- public class ItsRotaServerService {
- private final ApplicationRepository repo;
- private final IncidentMapper incidentMapper;
- private final TrafficMapper mapper;
- private boolean isRunning = false;
- private boolean isRunningCheckIncident = false;
- @PostConstruct
- private void init() {
- log.info("ItsRotaServerService.init: start.");
- log.info("ItsRotaServerService.init: ..end.");
- }
- @PreDestroy
- public void destroyService() {
- log.error("ItsRotaServerService.destroy. system terminated.......");
- }
- public void resetCenterTrafficSend() {
- long baseTime = System.currentTimeMillis();
- List<String> keySet = new ArrayList<>(this.repo.getCenterMap().keySet());
- Collections.sort(keySet);
- for (String key : keySet) {
- CenterDto center = this.repo.getCenterMap().get(key);
- if (center == null) {
- continue;
- }
- center.getTraffic().init(baseTime);
- }
- }
- public int checkSendTraffic() {
- String proceedName = String.format("%45s", this.getClass().getSimpleName() + ".checkSendTraffic");
- if (this.isRunning) {
- log.warn("{}: Already running.", proceedName);
- return 1;
- }
- Elapsed elapsed = new Elapsed();
- this.isRunning = true;
- log.info("{}: start.", proceedName);
- try {
- Elapsed elapsed1 = new Elapsed();
- List<TbCheckTraffic> result = this.mapper.selCheckTraffic();
- if (!result.isEmpty()) {
- String trafficTime = result.get(0).getRegDate();
- log.info("{}: checkTrafficTime: {}, currTrafficTime: {}.", proceedName, ApplicationRepository.checkTrafficTime, trafficTime);
- if (!ApplicationRepository.checkTrafficTime.equals(trafficTime)) {
- resetCenterTrafficSend();
- elapsed1.reset();
- List<TbTrafficCenter> traffics = this.mapper.selTrafficCenter();
- log.info("{}: {} EA. {}", proceedName, traffics.size(), Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
- ApplicationRepository.checkTrafficTime = trafficTime;
- ApplicationRepository.traffics = traffics;
- List<String> keySet = new ArrayList<>(this.repo.getCenterMap().keySet());
- Collections.sort(keySet);
- for (String key : keySet) {
- CenterDto center = this.repo.getCenterMap().get(key);
- if (center == null) {
- continue;
- }
- center.executeSendTraffic();
- }
- }
- }
- }
- catch (Exception e) {
- log.error("{}: Exception {}", proceedName, e.getMessage());
- }
- this.isRunning = false;
- log.info("{}: ..end. {}", proceedName, Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
- return 0;
- }
- public int checkSendIncident() {
- String proceedName = String.format("%45s", this.getClass().getSimpleName() + ".checkSendIncident");
- if (this.isRunningCheckIncident) {
- log.warn("{}: Already running.", proceedName);
- return 1;
- }
- Elapsed elapsed = new Elapsed();
- this.isRunningCheckIncident = true;
- log.info("{}: start.", proceedName);
- try {
- Elapsed elapsed1 = new Elapsed();
- int deletes = this.incidentMapper.delCheckIncident();
- if (deletes > 0) {
- log.info("{}: delCheckIncident {} EA. {}", proceedName, deletes, Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
- }
- long baseTime = System.currentTimeMillis();
- List<String> keySet = new ArrayList<>(this.repo.getCenterMap().keySet());
- Collections.sort(keySet);
- for (String key : keySet) {
- CenterDto center = this.repo.getCenterMap().get(key);
- if (center == null) {
- continue;
- }
- TbCheckIncident incident = TbCheckIncident.builder()
- .fromCenterId(ApplicationRepository.center.getCenterId())
- .toCenterId(center.getCenterId())
- .build();
- elapsed1.reset();
- int inserts = this.incidentMapper.insSndIncident(incident);
- if (inserts > 0) {
- log.info("{}: insSndIncident {}, {} EA. {}", proceedName, center.getCenterId(), inserts, Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
- }
- // 지역센터에 전송할 돌발정보를 메모리에 저장하고 지역센터에 전송하여야 한다.
- List<TbSndIncident> result = this.incidentMapper.selSndIncident(incident);
- // if ("L99".equals(center.getCenterId())) {
- // TbSndIncident data = TbSndIncident.builder()
- // .linkId("1111111111")
- // .nodeId("1111111111")
- // .contactOrganizationNameText("1111111111")
- // .descriptionTypeIncidentCode(1)
- // .descriptionTypeIncidentOther("1111111111")
- // .incidentVehiclesInvolvedCode(1)
- // .incidentVehiclesInvolvedOther("1111111111")
- // .incidentStatusCode(1)
- // .incidentStatusOther(" 127.787941624999 37.7560849154680")
- // .updateTypeCode(1)
- // .updateTypeOther("202408081639002024080812170020240808124700")
- // .build();
- // result.add(data);
- // TbSndIncident data1 = TbSndIncident.builder()
- // .linkId("2222222222")
- // .nodeId("2222222222")
- // .contactOrganizationNameText("2222222222")
- // .descriptionTypeIncidentCode(2)
- // .descriptionTypeIncidentOther("2222222222")
- // .incidentVehiclesInvolvedCode(2)
- // .incidentVehiclesInvolvedOther("2222222222")
- // .incidentStatusCode(2)
- // .incidentStatusOther(" 127.787941624999 37.7560849154680")
- // .updateTypeCode(2)
- // .updateTypeOther("202408081639002024080812170020240808124700")
- // .build();
- // result.add(data1);
- // }
- center.getIncident().init(baseTime, result);
- if (!result.isEmpty()) {
- log.info("{}: selSndIncident {}, {} EA. {}", proceedName, center.getCenterId(), result.size(), Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
- center.executeSendIncident();
- }
- }
- }
- catch (Exception e) {
- log.error("{}: Exception {}", proceedName, e.getMessage());
- }
- this.isRunningCheckIncident = false;
- log.info("{}: ..end. {}", proceedName, Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
- return 0;
- }
- }
|