轨道交通仿真——创建过程添加初始化仿真成员和创建者扮演成员,调通操作调用

This commit is contained in:
walker-sheng 2021-04-22 14:40:20 +08:00
parent 89d8c4b198
commit 303760220a
8 changed files with 70 additions and 12 deletions

View File

@ -249,7 +249,8 @@ public class DraftMapService implements IDraftMapService {
DraftMapWithBLOBs draftMap = getEntity(id);
MapVO mapVO = new MapVO(draftMap);
MapDataVO mapDataVO;
mapDataVO = new MapDataVO(this.buildShapeData(draftMap), this.getMapLogicDataNew(id), MapCheckConfig.fromJson(draftMap.getCheckConfig()));
mapDataVO = new MapDataVO(this.buildShapeData(draftMap), this.getMapLogicDataNew(id),
MapCheckConfig.fromJson(draftMap.getCheckConfig()));
mapDataVO.setMap3dDataVO(this.find3dMapDataByMapId(id));
mapVO.setMapData(mapDataVO);
return mapVO;
@ -350,12 +351,13 @@ public class DraftMapService implements IDraftMapService {
@Override
public List<String> checkData(MapDataVO mapDataVO) {
List<String> exDataList = null;
List<String> exDataList = new ArrayList<>();
try {
if (mapDataVO.getCheckConfig() == null || mapDataVO.getCheckConfig().isCheck()) {
MapVO map = new MapVO();
map.setMapData(mapDataVO);
exDataList = SimulationBuilder.checkAndBuildMapData(map).getErrMsgList();
}
} catch (IllegalStateException e) {
if (e.getMessage().startsWith("Duplicate key")) {
exDataList = new ArrayList<>();

View File

@ -15,7 +15,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
public class SimulationOperationHandlerManager implements ApplicationContextAware {
public static final Map<String, OperationHandlerMethod> handlerMap = new ConcurrentHashMap<>();
public static final Map<String, OperationHandlerMethod> handlerMethodMap = new ConcurrentHashMap<>();
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
@ -28,9 +28,9 @@ public class SimulationOperationHandlerManager implements ApplicationContextAwar
continue;
}
String name = operationMapping.value();
BusinessExceptionAssertEnum.DATA_ALREADY_EXIST.assertNotTrue(handlerMap.containsKey(name));
BusinessExceptionAssertEnum.DATA_ALREADY_EXIST.assertNotTrue(handlerMethodMap.containsKey(name));
OperationHandlerMethod handlerMethod = new OperationHandlerMethod(handler, method);
handlerMap.put(name, handlerMethod);
handlerMethodMap.put(name, handlerMethod);
log.info(String.format("成功加载仿真操作{name: %s, method: %s::%s}", name, handler.getClass().getName(), method.getName()));
}
}
@ -38,7 +38,7 @@ public class SimulationOperationHandlerManager implements ApplicationContextAwar
public OperationHandlerMethod getHandlerMethod(String operation) {
Objects.requireNonNull(operation);
OperationHandlerMethod method = handlerMap.get(operation);
OperationHandlerMethod method = handlerMethodMap.get(operation);
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(method,
String.format("操作[%s]没有对应的处理方法", operation));
return method;

View File

@ -7,6 +7,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class CilRepository extends SimulationRepository {
public static final String NAME = "CIL";
@ -38,6 +39,7 @@ public class CilRepository extends SimulationRepository {
this.psdMap = new HashMap<>();
this.espMap = new HashMap<>();
this.routeMap = new HashMap<>();
this.supervisedRouteMap = new ConcurrentHashMap<>();
this.autoSignalMap = new HashMap<>();
this.flsMap = new HashMap<>();
this.overlapMap = new HashMap<>();

View File

@ -10,13 +10,19 @@ import java.time.LocalDateTime;
@Getter
public class RtSimulation extends Simulation<RtSimulationUser, RtSimulationMember> {
public static final int TIME_OFFSET_HOUR = 2;
RtSimulationUser creator;
MapVO mapVO;
MapPrdTypeEnum prdType;
public RtSimulation(String id) {
SimulationIdGenerator idGenerator;
public RtSimulation(String id, RtSimulationUser creator) {
super(id);
this.idGenerator = new SimulationIdGenerator();
this.creator = creator;
this.addSimulationUser(creator);
}
public LocalDateTime convertToSystemTime(LocalDateTime dateTime) {

View File

@ -3,11 +3,25 @@ package club.joylink.rtss.simulation.rt;
import club.joylink.rtss.simulation.SimulationMember;
public class RtSimulationMember extends SimulationMember<RtSimulationMember.Role> {
String deviceId;
public RtSimulationMember(String id, Role role) {
super(id, role);
}
public enum Role {
public RtSimulationMember(String id, Role role, String deviceId) {
super(id, role);
this.deviceId = deviceId;
}
public enum Role {
/**
* 行调
*/
DISP,
/**
* 车站值班员
*/
LOWS
}
}

View File

@ -6,14 +6,16 @@ import club.joylink.rtss.simulation.SimulationManager;
import club.joylink.rtss.simulation.cbtc.data.vo.SimulationVO;
import club.joylink.rtss.simulation.rt.ATS.AtsLogicService;
import club.joylink.rtss.simulation.rt.CIL.CilLogicService;
import club.joylink.rtss.simulation.rt.CIL.CilLogicService;
import club.joylink.rtss.simulation.rt.SRD.SrdLogicService;
import club.joylink.rtss.simulation.rt.repo.CommonRepoService;
import club.joylink.rtss.simulation.rt.repo.CommonRepository;
import club.joylink.rtss.simulation.rt.repo.CommonStation;
import club.joylink.rtss.vo.UserVO;
import club.joylink.rtss.vo.client.map.MapVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Objects;
@Component
@ -34,14 +36,34 @@ public class RtSimulationService {
public RtSimulation create(UserVO userVO, Long mapId, MapPrdTypeEnum prdTypeEnum) {
Objects.requireNonNull(mapId);
MapVO mapVO = this.mapService.getMapDetail(mapId);
RtSimulation rtSimulation = new RtSimulation(SimulationIdGenerator.buildId());
RtSimulationUser creator = new RtSimulationUser(userVO.getId().toString());
RtSimulation rtSimulation = new RtSimulation(SimulationIdGenerator.buildId(), creator);
rtSimulation.mapVO = mapVO;
this.loadData(rtSimulation, mapVO);
this.srdLogicService.addJobs(rtSimulation);
this.simulationManager.save(rtSimulation);
this.srdLogicService.addJobs(rtSimulation);
this.cilLogicService.addJobs(rtSimulation);
this.initSimulationMember(rtSimulation);
this.initCreatorPlayMember(rtSimulation);
return rtSimulation;
}
private void initCreatorPlayMember(RtSimulation rtSimulation) {
if (MapPrdTypeEnum.LOCAL.equals(rtSimulation.getPrdType())) {
List<RtSimulationMember> memberList = rtSimulation.querySimulationMembersOfRole(RtSimulationMember.Role.LOWS);
this.simulationManager.memberPlayedByUser(rtSimulation.getId(), memberList.get(0).getId(), rtSimulation.getCreator().getId());
}
}
private void initSimulationMember(RtSimulation rtSimulation) {
CommonRepository repository = rtSimulation.getRepository(CommonRepository.NAME, CommonRepository.class);
for (CommonStation station : repository.getStationMap().values()) {
rtSimulation.addSimulationMember(
new RtSimulationMember(rtSimulation.getIdGenerator().next(),
RtSimulationMember.Role.LOWS, station.getId()));
}
}
/**
* 加载相关数据
*/

View File

@ -8,4 +8,14 @@ public class SimulationIdGenerator {
public static String buildId() {
return String.valueOf(sn.incrementAndGet());
}
private AtomicInteger bsn;
public SimulationIdGenerator() {
this.bsn = new AtomicInteger(1);
}
public String next() {
return String.valueOf(this.bsn.getAndIncrement());
}
}

View File

@ -2,10 +2,12 @@ package club.joylink.rtss.simulation.rt.repo;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.simulation.SimulationRepository;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
@Getter
public class CommonRepository extends SimulationRepository {
public static final String NAME = "COMMON";