Merge branch 'test-training2' of https://git.code.tencent.com/lian-cbtc/rtss-server into test-training2-zhouyin
This commit is contained in:
commit
5376d3deb5
@ -18,6 +18,11 @@ public class MinioController {
|
||||
@Autowired
|
||||
private MinioService minioService;
|
||||
|
||||
@GetMapping("/checkIsExist")
|
||||
public boolean checkFileIsExist(String directory, String fileName) {
|
||||
return minioService.checkFileIsExist(directory, fileName);
|
||||
}
|
||||
|
||||
@GetMapping("/preSignedUrl")
|
||||
public String getPreSignedObjectUrl(String directory, String fileName, Method method) {
|
||||
return minioService.preSignedObjectUrl(directory, fileName, method);
|
||||
|
@ -506,6 +506,14 @@ public class SimulationV1Controller {
|
||||
simulationService.removeFunctions(simulationId, functions, loginInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按计划行车(新)
|
||||
*/
|
||||
@PutMapping("/new/{simulationId}/runAsPlan")
|
||||
public void runAsPlanNew(@PathVariable String simulationId, @RequestBody @Validated RunAsPlanParam param) {
|
||||
simulationService.runAsPlan(simulationId, param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置仿真(新)
|
||||
*/
|
||||
|
@ -35,5 +35,13 @@ public interface MinioService {
|
||||
*/
|
||||
void update(MinioFileInfo fileInfo);
|
||||
|
||||
/**
|
||||
* 获取带有验证信息的下载路径
|
||||
*/
|
||||
String downloadObjectUrl(String directory, String fileName);
|
||||
|
||||
/**
|
||||
* 检查文件是否存在
|
||||
*/
|
||||
boolean checkFileIsExist(String directory, String fileName);
|
||||
}
|
||||
|
@ -86,4 +86,9 @@ public class MinioServiceImpl implements MinioService {
|
||||
MinioClientUtil minioClientUtil = createMinioClientUtil(directory);
|
||||
return minioClientUtil.getDownLoadPath(fileName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkFileIsExist(String directory, String fileName) {
|
||||
return createMinioClientUtil(directory).checkFileIsExist(fileName);
|
||||
}
|
||||
}
|
||||
|
@ -681,6 +681,13 @@ public class Simulation extends club.joylink.rtss.simulation.Simulation<Simulati
|
||||
return this.getSimulationMembers().stream().filter(member1 -> member1.isSame(device)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<SimulationMember> getSimulationMembersByDeviceCode(String deviceCode) {
|
||||
MapElement device = repository.getByCode(deviceCode);
|
||||
List<SimulationMember> list = getSimulationMembersByDevice(device);
|
||||
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertCollectionNotEmpty(list, "[code:%s]无对应的仿真成员");
|
||||
return list;
|
||||
}
|
||||
|
||||
public SimulationMember querySimulationMember(MapElement device, SimulationMember.Type memberType) {
|
||||
return getSimulationMembers().stream()
|
||||
.filter(member -> Objects.equals(member.getDevice(), device))
|
||||
|
@ -2,6 +2,7 @@ package club.joylink.rtss.simulation.cbtc;
|
||||
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SimulationWorkParamVO;
|
||||
import club.joylink.rtss.vo.LoginUserInfoVO;
|
||||
import club.joylink.rtss.vo.client.simulationv1.RunAsPlanParam;
|
||||
import lombok.NonNull;
|
||||
|
||||
import java.util.List;
|
||||
@ -23,6 +24,11 @@ public interface SimulationService {
|
||||
*/
|
||||
void removeFunctions(String simulationId, List<Simulation.Function> functions, LoginUserInfoVO loginInfo);
|
||||
|
||||
/**
|
||||
* 按计划行车
|
||||
*/
|
||||
void runAsPlan(String simulationId, RunAsPlanParam param);
|
||||
|
||||
/**
|
||||
* 重置仿真
|
||||
*/
|
||||
|
@ -3,12 +3,12 @@ package club.joylink.rtss.simulation.cbtc;
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.simulation.SimulationManager;
|
||||
import club.joylink.rtss.simulation.cbtc.event.SimulationCreateSuccessEvent;
|
||||
import club.joylink.rtss.simulation.cbtc.init.SimulationInitService;
|
||||
import club.joylink.rtss.simulation.cbtc.init.SimulationInitServiceManager;
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SimulationWorkParamVO;
|
||||
import club.joylink.rtss.simulation.cbtc.work.SimulationWorkService;
|
||||
import club.joylink.rtss.simulation.cbtc.work.SimulationWorkServiceManager;
|
||||
import club.joylink.rtss.simulation.messaging.websocket.DefaultMessageSender;
|
||||
import club.joylink.rtss.util.JsonUtils;
|
||||
import club.joylink.rtss.vo.LoginUserInfoVO;
|
||||
import club.joylink.rtss.vo.client.simulationv1.RunAsPlanParam;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@ -24,7 +24,7 @@ public class SimulationServiceImpl implements SimulationService {
|
||||
@Autowired
|
||||
private SimulationManager simulationManager;
|
||||
@Autowired
|
||||
private SimulationInitServiceManager simulationInitServiceManager;
|
||||
private SimulationWorkServiceManager simulationWorkServiceManager;
|
||||
@Autowired
|
||||
private GroupSimulationService groupSimulationService;
|
||||
@Autowired
|
||||
@ -34,13 +34,7 @@ public class SimulationServiceImpl implements SimulationService {
|
||||
|
||||
@Override
|
||||
public String createSimulation(@NonNull LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO workParamVO) {
|
||||
System.out.println(JsonUtils.writeValueAsString(workParamVO));
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO, "仿真创建参数不能为空");
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO.getMapId(), "仿真线路id不能为空");
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO.getType(), "仿真类型不能为空");
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO.findUsage(), "仿真用途不能为空");
|
||||
|
||||
SimulationInitService initService = simulationInitServiceManager.getInitService(workParamVO.getType());
|
||||
SimulationWorkService initService = simulationWorkServiceManager.getInitService(workParamVO.getType());
|
||||
Simulation simulation = initService.create(loginUserInfoVO, workParamVO);
|
||||
|
||||
// 删除旧仿真,保存新仿真
|
||||
@ -59,6 +53,7 @@ public class SimulationServiceImpl implements SimulationService {
|
||||
if (!CollectionUtils.isEmpty(workParamVO.getFunctionMap())) {
|
||||
initService.addFunctions(simulation, workParamVO.getFunctionMap(), loginUserInfoVO);
|
||||
}
|
||||
|
||||
applicationContext.publishEvent(new SimulationCreateSuccessEvent(this, simulation));
|
||||
// 仿真开始运行
|
||||
simulationManager.start(simulation.getId());
|
||||
@ -74,7 +69,7 @@ public class SimulationServiceImpl implements SimulationService {
|
||||
private void addFunctions(@NonNull Simulation simulation, Map<Simulation.Function, Map<String, Object>> functionMap, LoginUserInfoVO loginInfo) {
|
||||
if (!CollectionUtils.isEmpty(functionMap)) {
|
||||
Simulation.Type simulationType = simulation.getType();
|
||||
SimulationInitService initService = simulationInitServiceManager.getInitService(simulationType);
|
||||
SimulationWorkService initService = simulationWorkServiceManager.getInitService(simulationType);
|
||||
if (StringUtils.hasText(simulation.getCreatorId())) {
|
||||
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertEquals(loginInfo.getAccountVO().getIdStr(), simulation.getCreatorId(),
|
||||
"非仿真创建者不能使用该功能");
|
||||
@ -89,17 +84,24 @@ public class SimulationServiceImpl implements SimulationService {
|
||||
removeFunctions(simulation, functions, loginInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runAsPlan(String simulationId, RunAsPlanParam param) {
|
||||
Simulation simulation = simulationManager.getById(simulationId, Simulation.class);
|
||||
SimulationWorkService initService = simulationWorkServiceManager.getInitService(simulation.getType());
|
||||
initService.runAsPlan(simulation, param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(String simulationId) {
|
||||
Simulation simulation = simulationManager.getById(simulationId, Simulation.class);
|
||||
SimulationInitService initService = simulationInitServiceManager.getInitService(simulation.getType());
|
||||
SimulationWorkService initService = simulationWorkServiceManager.getInitService(simulation.getType());
|
||||
initService.reset(simulation);
|
||||
}
|
||||
|
||||
private void removeFunctions(@NonNull Simulation simulation, List<Simulation.Function> functions, LoginUserInfoVO loginInfo) {
|
||||
if (!CollectionUtils.isEmpty(functions)) {
|
||||
Simulation.Type simulationType = simulation.getType();
|
||||
SimulationInitService initService = simulationInitServiceManager.getInitService(simulationType);
|
||||
SimulationWorkService initService = simulationWorkServiceManager.getInitService(simulationType);
|
||||
if (StringUtils.hasText(simulation.getCreatorId())) {
|
||||
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertEquals(loginInfo.getAccountVO().getIdStr(), simulation.getCreatorId(),
|
||||
"非仿真创建者不能使用该功能");
|
||||
|
@ -1,28 +0,0 @@
|
||||
package club.joylink.rtss.simulation.cbtc.init;
|
||||
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SimulationWorkParamVO;
|
||||
import club.joylink.rtss.vo.LoginUserInfoVO;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
public interface SimulationInitService {
|
||||
Simulation.Type getType();
|
||||
|
||||
Simulation create(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO createParamVO);
|
||||
|
||||
void loadData(Simulation simulation);
|
||||
|
||||
void addJobs(Simulation simulation);
|
||||
|
||||
void addMessagePublisher(Simulation simulation);
|
||||
|
||||
void init(Simulation simulation);
|
||||
|
||||
void reset(Simulation simulation);
|
||||
|
||||
void addFunctions(Simulation simulation, Map<Simulation.Function, Map<String, Object>> functionMap, LoginUserInfoVO loginInfo);
|
||||
|
||||
void removeFunctions(Simulation simulation, Collection<Simulation.Function> functions);
|
||||
}
|
@ -305,4 +305,56 @@ public class MemberManager {
|
||||
this.cancelPlay(simulation, userId);
|
||||
}
|
||||
}
|
||||
|
||||
public void addRailMembers(Simulation simulation) {
|
||||
// 调度
|
||||
if (!simulation.getRepository().getConfig().isRailway()) {
|
||||
this.addRole(simulation, SimulationMember.Type.DISPATCHER);
|
||||
}
|
||||
// 通号
|
||||
this.addRole(simulation, SimulationMember.Type.MAINTAINER);
|
||||
// 行值
|
||||
List<Station> stationList = simulation.getRepository().getSortedStationList();
|
||||
for (Station station : stationList) {
|
||||
// if (station.isNormal()) {
|
||||
// this.addRole(simulation, SimulationMember.Type.STATION_SUPERVISOR, null, station);
|
||||
// } else if (station.isDepot()) {
|
||||
// // 车辆段调度
|
||||
// this.addRole(simulation, SimulationMember.Type.DEPOT_DISPATCHER, station.getName() + "调度", station);
|
||||
// }
|
||||
Arrays.asList(
|
||||
SimulationMember.Type.STATION_SUPERVISOR,
|
||||
SimulationMember.Type.STATION_ASSISTANT, SimulationMember.Type.STATION_MASTER,
|
||||
SimulationMember.Type.STATION_SIGNALER, SimulationMember.Type.STATION_PASSENGER,
|
||||
SimulationMember.Type.STATION_SWITCH_MAN, SimulationMember.Type.STATION_FACILITATOR,
|
||||
SimulationMember.Type.STATION_WORKER, SimulationMember.Type.DEVICE_MANAGER
|
||||
).forEach(type -> this.addRole(simulation, type, null, station));
|
||||
}
|
||||
// 调度台--调度关联
|
||||
List<DisStation> disStationList = simulation.getRepository().getDisStationList();
|
||||
if (null != disStationList) {
|
||||
for (DisStation disStation : disStationList) {
|
||||
this.addRole(simulation, SimulationMember.Type.DISPATCHER, disStation.getName() + "调度", disStation);
|
||||
}
|
||||
}
|
||||
// 司机
|
||||
List<VirtualRealityTrain> vrTrainList = simulation.getRepository().getAllVrTrain();
|
||||
for (VirtualRealityTrain vrTrain : vrTrainList) {
|
||||
this.addRole(simulation, SimulationMember.Type.DRIVER, null, vrTrain);
|
||||
}
|
||||
// // 工电调度
|
||||
// this.addRole(simulation, SimulationMember.Type.ELECTRIC_DISPATCHER);
|
||||
// // 车辆段调度
|
||||
// this.addRole(simulation, SimulationMember.Type.DEPOT_DISPATCHER);
|
||||
// // 车辆段信号楼
|
||||
// this.addRole(simulation, SimulationMember.Type.DEPOT_SIGNAL_BUILDING);
|
||||
// // 停车场信号楼
|
||||
// this.addRole(simulation, SimulationMember.Type.PARKING_LOT_SIGNAL_BUILDING);
|
||||
// 上级部门
|
||||
this.addRole(simulation, SimulationMember.Type.PARENT_DEPARTMENT);
|
||||
// // 派班员
|
||||
// this.addRole(simulation, SimulationMember.Type.SCHEDULING);
|
||||
// // 车务段段长
|
||||
// this.addRole(simulation, SimulationMember.Type.TRAIN_MASTER);
|
||||
}
|
||||
}
|
||||
|
@ -20,14 +20,14 @@ public class PassengerFlowListener {
|
||||
@Async("nsExecutor")
|
||||
@EventListener
|
||||
public void handle(SimulationRunAsPlanEvent event) {
|
||||
if (passengerFlowSimulateService.initPassengerFlow(event)) {
|
||||
if (passengerFlowSimulateService.initPassengerFlow(event.getSimulation())) {
|
||||
largePassengerFlowStrategyService.addJobs(event.getSimulation());
|
||||
}
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void handle(SimulationResetEvent event) {
|
||||
passengerFlowSimulateService.simulationReset(event);
|
||||
passengerFlowSimulateService.simulationReset(event.getSimulation());
|
||||
largePassengerFlowStrategyService.removeJobs(event.getSimulation());
|
||||
}
|
||||
}
|
||||
|
@ -14,8 +14,6 @@ import club.joylink.rtss.simulation.cbtc.data.vo.TrainInfo;
|
||||
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityTrain;
|
||||
import club.joylink.rtss.simulation.cbtc.event.PassengerUserConnectEvent;
|
||||
import club.joylink.rtss.simulation.cbtc.event.SimulationDestroyEvent;
|
||||
import club.joylink.rtss.simulation.cbtc.event.SimulationResetEvent;
|
||||
import club.joylink.rtss.simulation.cbtc.event.SimulationRunAsPlanEvent;
|
||||
import club.joylink.rtss.simulation.cbtc.passenger.data.*;
|
||||
import club.joylink.rtss.simulation.cbtc.passenger.strategy.Config;
|
||||
import club.joylink.rtss.util.JsonUtils;
|
||||
@ -86,8 +84,7 @@ public class PassengerFlowSimulateService {
|
||||
group2mapPassengerFlowID.remove(simulation.getId());
|
||||
}
|
||||
|
||||
public void simulationReset(SimulationResetEvent event) {
|
||||
Simulation simulation = event.getSimulation();
|
||||
public void simulationReset(Simulation simulation) {
|
||||
log.info(String.format("仿真[%s]初始化,清理客流仿真数据", simulation.getId()));
|
||||
passengerFlowSimulationDataMap.remove(simulation.getId());
|
||||
passengerFlowViewMap.remove(simulation.getId());
|
||||
@ -98,8 +95,7 @@ public class PassengerFlowSimulateService {
|
||||
/**
|
||||
* @return 客流初始化成功
|
||||
*/
|
||||
public boolean initPassengerFlow(SimulationRunAsPlanEvent event) {
|
||||
Simulation simulation = event.getSimulation();
|
||||
public boolean initPassengerFlow(Simulation simulation) {
|
||||
MapVO map = simulation.getBuildParams().getMap();
|
||||
Long mapId = map.getId();
|
||||
|
||||
|
@ -0,0 +1,15 @@
|
||||
package club.joylink.rtss.simulation.cbtc.vo;
|
||||
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class SingleClientParamVO {
|
||||
private Simulation.Client client;
|
||||
|
||||
private String deviceCode;
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package club.joylink.rtss.simulation.cbtc.work;
|
||||
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SimulationWorkParamVO;
|
||||
import club.joylink.rtss.vo.LoginUserInfoVO;
|
||||
import club.joylink.rtss.vo.client.simulationv1.RunAsPlanParam;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EmergencySimulationWorkServiceImpl implements SimulationWorkService {
|
||||
@Override
|
||||
public Simulation.Type getType() {
|
||||
return Simulation.Type.EMERGENCY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Simulation create(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO workParamVO) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadData(Simulation simulation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addJobs(Simulation simulation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMessagePublisher(Simulation simulation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Simulation simulation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runAsPlan(Simulation simulation, RunAsPlanParam param) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(Simulation simulation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFunctions(Simulation simulation, Map<Simulation.Function, Map<String, Object>> functionMap, LoginUserInfoVO loginInfo) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFunctions(Simulation simulation, Collection<Simulation.Function> functions) {
|
||||
|
||||
}
|
||||
}
|
@ -1,10 +1,11 @@
|
||||
package club.joylink.rtss.simulation.cbtc.init;
|
||||
package club.joylink.rtss.simulation.cbtc.work;
|
||||
|
||||
import club.joylink.rtss.entity.Ibp;
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.services.*;
|
||||
import club.joylink.rtss.services.iscs.IscsDeviceService;
|
||||
import club.joylink.rtss.services.iscs.IscsSystemResourcesService;
|
||||
import club.joylink.rtss.services.project.DeviceService;
|
||||
import club.joylink.rtss.services.psl.IVirtualRealityPslService;
|
||||
import club.joylink.rtss.services.publishData.IbpService;
|
||||
import club.joylink.rtss.services.runplan.IRunPlanParktimeService;
|
||||
@ -31,6 +32,8 @@ import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
|
||||
import club.joylink.rtss.simulation.cbtc.member.SimulationUser;
|
||||
import club.joylink.rtss.simulation.cbtc.onboard.ATP.ATPLogicLoop;
|
||||
import club.joylink.rtss.simulation.cbtc.onboard.TrainTargetUpdateService;
|
||||
import club.joylink.rtss.simulation.cbtc.passenger.PassengerFlowSimulateService;
|
||||
import club.joylink.rtss.simulation.cbtc.passenger.strategy.LargePassengerFlowStrategyService;
|
||||
import club.joylink.rtss.simulation.cbtc.pis.PisLogicLoop;
|
||||
import club.joylink.rtss.simulation.cbtc.robot.SimulationRobotService;
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SimulationWorkParamVO;
|
||||
@ -49,12 +52,13 @@ import club.joylink.rtss.vo.client.runplan.RunPlanVO;
|
||||
import club.joylink.rtss.vo.client.runplan.user.RunPlanParkingTimeVO;
|
||||
import club.joylink.rtss.vo.client.runplan.user.RunPlanRunlevelVO;
|
||||
import club.joylink.rtss.vo.client.schedulingNew.SchedulingPlanNewVO;
|
||||
import club.joylink.rtss.vo.client.simulationv1.RunAsPlanParam;
|
||||
import club.joylink.rtss.vo.map.MapVO;
|
||||
import lombok.NonNull;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
@ -65,7 +69,7 @@ import java.util.Objects;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
public class MetroSimulationWorkServiceImpl implements SimulationWorkService {
|
||||
@Autowired
|
||||
private IMapService iMapService;
|
||||
@Autowired
|
||||
@ -128,6 +132,14 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
private SimulationLifeCycleService simulationLifeCycleService;
|
||||
@Autowired
|
||||
private ITrainingV1Service iTrainingV1Service;
|
||||
@Autowired
|
||||
private PassengerFlowSimulateService passengerFlowSimulateService;
|
||||
@Autowired
|
||||
private GroupSimulationService groupSimulationService;
|
||||
@Autowired
|
||||
private LargePassengerFlowStrategyService largePassengerFlowStrategyService;
|
||||
@Autowired
|
||||
private DeviceService deviceService;
|
||||
|
||||
@Override
|
||||
public Simulation.Type getType() {
|
||||
@ -135,10 +147,10 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Simulation create(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO createParamVO) {
|
||||
checkParam(createParamVO);
|
||||
SimulationBuildParams params = prepareSimulationParams(loginUserInfoVO, createParamVO);
|
||||
String group = SimulationIdGenerator.generateGroup(loginUserInfoVO.getAccountVO().getId(), createParamVO.getMapId());
|
||||
public Simulation create(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO workParamVO) {
|
||||
checkParam(workParamVO);
|
||||
SimulationBuildParams params = prepareSimulationParams(loginUserInfoVO, workParamVO);
|
||||
String group = SimulationIdGenerator.generateGroup(loginUserInfoVO.getAccountVO().getId(), workParamVO.getMapId());
|
||||
Simulation simulation = new Simulation(group);
|
||||
simulation.setBuildParams(params);
|
||||
return simulation;
|
||||
@ -204,9 +216,61 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
playSimulationMember(simulation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runAsPlan(Simulation simulation, RunAsPlanParam param) {
|
||||
SimulationWorkParamVO workParamVO = simulation.getBuildParams().getWorkParamVO();
|
||||
Map<Simulation.Function, Map<String, Object>> functionMap = workParamVO.getFunctionMap();
|
||||
if (CollectionUtils.isEmpty(functionMap)) {
|
||||
groupSimulationService.runAsPlan(simulation.getId(), param);
|
||||
} else {
|
||||
for (Map.Entry<Simulation.Function, Map<String, Object>> entry : functionMap.entrySet()) {
|
||||
Simulation.Function function = entry.getKey();
|
||||
Map<String, Object> funcParam = entry.getValue();
|
||||
switch (function) {
|
||||
case LPF:
|
||||
boolean initSuccess = passengerFlowSimulateService.initPassengerFlow(simulation);
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertTrue(initSuccess, "大客流初始化失败");
|
||||
largePassengerFlowStrategyService.addJobs(simulation);
|
||||
break;
|
||||
case TRAINING_ROOM:
|
||||
break;
|
||||
case TRAINING_DESIGN:
|
||||
break;
|
||||
case TRAINING:
|
||||
break;
|
||||
case EXAM:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(Simulation simulation) {
|
||||
simulationLifeCycleService.reset(simulation);
|
||||
|
||||
SimulationWorkParamVO workParamVO = simulation.getBuildParams().getWorkParamVO();
|
||||
Map<Simulation.Function, Map<String, Object>> functionMap = workParamVO.getFunctionMap();
|
||||
if (!CollectionUtils.isEmpty(functionMap)) {
|
||||
for (Map.Entry<Simulation.Function, Map<String, Object>> entry : functionMap.entrySet()) {
|
||||
Simulation.Function function = entry.getKey();
|
||||
Map<String, Object> funcParam = entry.getValue();
|
||||
switch (function) {
|
||||
case LPF:
|
||||
passengerFlowSimulateService.simulationReset(simulation);
|
||||
largePassengerFlowStrategyService.removeJobs(simulation);
|
||||
break;
|
||||
case TRAINING_ROOM:
|
||||
break;
|
||||
case TRAINING_DESIGN:
|
||||
break;
|
||||
case TRAINING:
|
||||
break;
|
||||
case EXAM:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -267,13 +331,13 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
switch (usageInfo.getUsage()) {
|
||||
case SINGLE_MEMBER:
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertMapNotEmpty(usageInfo.getParam(), "单角色仿真必须指定角色");
|
||||
simulationMember = selectSimulationMemberFromParam(simulation, usageInfo);
|
||||
simulationMember = selectSimulationMemberByMemberInfo(simulation, usageInfo);
|
||||
break;
|
||||
case SINGLE_CLIENT:
|
||||
throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("待实现");
|
||||
case JOINT:
|
||||
if (!CollectionUtils.isEmpty(usageInfo.getParam())) {
|
||||
simulationMember = selectSimulationMemberFromParam(simulation, usageInfo);
|
||||
simulationMember = selectSimulationMemberByMemberInfo(simulation, usageInfo);
|
||||
} else {
|
||||
simulationMember = simulation.getMemberListByType(SimulationMember.Type.DISPATCHER).get(0);
|
||||
}
|
||||
@ -287,32 +351,21 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
}
|
||||
}
|
||||
|
||||
private SimulationMember selectSimulationMemberFromParam(Simulation simulation, SimulationWorkParamVO.UsageInfo usageInfo) {
|
||||
private SimulationMember selectSimulationMemberByMemberInfo(Simulation simulation, SimulationWorkParamVO.UsageInfo usageInfo) {
|
||||
SingleMemberParamVO singleMemberParamVO = JsonUtils.read(JsonUtils.writeValueAsString(usageInfo.getParam()), SingleMemberParamVO.class);
|
||||
SimulationMember.Type memberType = singleMemberParamVO.getMemberType();
|
||||
String deviceCode = singleMemberParamVO.getDeviceCode();
|
||||
SimulationMember simulationMember = null;
|
||||
if (memberType != null && deviceCode != null) {
|
||||
if (memberType != null && StringUtils.hasText(deviceCode)) {
|
||||
simulationMember = simulation.getSimulationMember(memberType, deviceCode);
|
||||
} else if (memberType != null) {
|
||||
simulationMember = simulation.getMemberListByType(memberType).get(0);
|
||||
} else if (deviceCode != null) {
|
||||
simulationMember = simulation.getSimulationMember(memberType, deviceCode);
|
||||
} else if (StringUtils.hasText(deviceCode)) {
|
||||
simulationMember = simulation.getSimulationMembersByDeviceCode(deviceCode).get(0);
|
||||
}
|
||||
return simulationMember;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查仿真创建参数
|
||||
*/
|
||||
private void checkParam(@NonNull SimulationWorkParamVO createParamVO) {
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(createParamVO.getMapId());
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(createParamVO.getType());
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(createParamVO.findUsage());
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotTrue(!CollectionUtils.isEmpty(createParamVO.getFunctionMap())
|
||||
&& createParamVO.getFunctionMap().size() > 1, "功能数量超限");
|
||||
}
|
||||
|
||||
private void loadMapData(Simulation simulation) {
|
||||
SimulationBuildParams buildParams = simulation.getBuildParams();
|
||||
simulation.setBuildParams(buildParams);
|
||||
@ -342,24 +395,19 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
simulation.getRepository().setDeviceMap(mapDataBuildResult.getDeviceMap());
|
||||
simulation.getRepository().setSectionArriveNearMap(mapDataBuildResult.getSectionArriveNearMap());
|
||||
simulation.getRepository().setVrDeviceMap(mapDataBuildResult.getVrDeviceMap());
|
||||
// simulation.getRepository().setRouteUnitMap(mapDataBuildResult.getRouteUnitMap());
|
||||
simulation.getRepository().setRoutePathMap(mapDataBuildResult.getRoutePathMap());
|
||||
simulation.getRepository().setDestinationMap(mapDataBuildResult.getDestinationMap());
|
||||
simulation.getRepository().setRoutingList(mapDataBuildResult.getRoutingList());
|
||||
// simulation.getRepository().setRunLevelList(mapDataBuildResult.getRunLevelList());
|
||||
simulation.getRepository().getCatenaryMap().putAll(mapDataBuildResult.getCatenaryMap());
|
||||
simulation.getRepository().getSectionRespondersMap().putAll(mapDataBuildResult.getSectionRespondersMap());
|
||||
simulation.getRepository().setParkingTracksMap(mapDataBuildResult.getParkingTracksMap());
|
||||
// simulation.getRepository().setParkTimeMap(mapDataBuildResult.getParkTimeMap());
|
||||
UserConfigDataBuilder.buildRunLevel(simulation.getRepository(), buildParams.getUserRunLevelList(),
|
||||
buildParams.getMap(), mapDataBuildResult.getErrMsgList());
|
||||
UserConfigDataBuilder.buildParkTime(simulation.getRepository(), buildParams.getUserParkTimeList(),
|
||||
buildParams.getMap(), mapDataBuildResult.getErrMsgList());
|
||||
if (!CollectionUtils.isEmpty(mapDataBuildResult.getErrMsgList())) { // 存在数据异常
|
||||
mapDataBuildResult.getErrMsgList().forEach(errMsg -> log.warn(String.format("地图数据异常:%s", errMsg)));
|
||||
if (!buildParams.getMap().getConfigVO().isRailway()) {
|
||||
simulation.setMapDataError(true);
|
||||
}
|
||||
simulation.addDataErrMsgs(mapDataBuildResult.getErrMsgList());
|
||||
}
|
||||
// 加载ISCS资源
|
||||
@ -370,15 +418,11 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
SimulationBuilder.checkAndLoadSchedulingPlan(simulation, buildParams.getSchedulingPlan());
|
||||
// 加载车辆段route path
|
||||
SimulationBuilder.loadDepotInOutRoutePath(simulation);
|
||||
// CTC行车日志数据结构构建
|
||||
if (simulation.getRepository().getConfig().isRailway()) {
|
||||
SimulationBuilder.buildCtcStationRunPlanLog(simulation);
|
||||
}
|
||||
}
|
||||
|
||||
private SimulationBuildParams prepareSimulationParams(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO createParamVO) {
|
||||
private SimulationBuildParams prepareSimulationParams(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO workParamVO) {
|
||||
// 获取地图数据
|
||||
Long mapId = createParamVO.getMapId();
|
||||
Long mapId = workParamVO.getMapId();
|
||||
MapVO mapVO = iMapService.getMapDetail(mapId);
|
||||
List<RunPlanRunlevelVO> runLevelList = this.prepareRunLevelData(loginUserInfoVO, mapId);
|
||||
List<RunPlanParkingTimeVO> parkTimeList = this.prepareParkTimeData(loginUserInfoVO, mapId);
|
||||
@ -388,7 +432,7 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
SimulationBuildParams.SimulationBuildParamsBuilder builder = SimulationBuildParams.builder();
|
||||
// 都有的属性构造
|
||||
builder.loginUserInfo(loginUserInfoVO)
|
||||
.workParamVO(createParamVO)
|
||||
.workParamVO(workParamVO)
|
||||
.createTime(LocalDateTime.now())
|
||||
.map(mapVO)
|
||||
.userRunLevelList(runLevelList)
|
||||
@ -396,7 +440,7 @@ public class MetroSimulationInitServiceImpl implements SimulationInitService {
|
||||
.operationDefinitionList(operationDefinitionList);
|
||||
//运行图选择性构造
|
||||
LocalDate runPlanDate = SimulationConstants.getRunPlanDate();
|
||||
RunPlanVO runPlanVO = findRunPlan(createParamVO, loginUserInfoVO.getAccountVO().getId(), mapId);
|
||||
RunPlanVO runPlanVO = findRunPlan(workParamVO, loginUserInfoVO.getAccountVO().getId(), mapId);
|
||||
if (Objects.nonNull(runPlanVO)) {
|
||||
runPlanVO.setRunDate(runPlanDate);
|
||||
builder.runPlan(runPlanVO);
|
@ -0,0 +1,254 @@
|
||||
package club.joylink.rtss.simulation.cbtc.work;
|
||||
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.services.ICommandService;
|
||||
import club.joylink.rtss.services.IMapService;
|
||||
import club.joylink.rtss.simulation.cbtc.ATS.ATSLogicLoop;
|
||||
import club.joylink.rtss.simulation.cbtc.ATS.ATSMessageCollectAndDispatcher;
|
||||
import club.joylink.rtss.simulation.cbtc.CI.CiLogic;
|
||||
import club.joylink.rtss.simulation.cbtc.CTC.CTCLogicLoop;
|
||||
import club.joylink.rtss.simulation.cbtc.DeviceStatusService;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.SimulationIdGenerator;
|
||||
import club.joylink.rtss.simulation.cbtc.SimulationLifeCycleService;
|
||||
import club.joylink.rtss.simulation.cbtc.build.SimulationBuildParams;
|
||||
import club.joylink.rtss.simulation.cbtc.build.SimulationBuilder;
|
||||
import club.joylink.rtss.simulation.cbtc.communication.Joylink3DMessageService;
|
||||
import club.joylink.rtss.simulation.cbtc.device.virtual.VRDeviceLogicLoop;
|
||||
import club.joylink.rtss.simulation.cbtc.device.virtual.VRTrainRunningService;
|
||||
import club.joylink.rtss.simulation.cbtc.fault.FaultGenerator;
|
||||
import club.joylink.rtss.simulation.cbtc.member.MemberManager;
|
||||
import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
|
||||
import club.joylink.rtss.simulation.cbtc.member.SimulationUser;
|
||||
import club.joylink.rtss.simulation.cbtc.onboard.ATP.ATPLogicLoop;
|
||||
import club.joylink.rtss.simulation.cbtc.robot.SimulationRobotService;
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SimulationWorkParamVO;
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SingleMemberParamVO;
|
||||
import club.joylink.rtss.util.JsonUtils;
|
||||
import club.joylink.rtss.vo.LoginUserInfoVO;
|
||||
import club.joylink.rtss.vo.client.CommandDefinitionVO;
|
||||
import club.joylink.rtss.vo.client.simulationv1.RunAsPlanParam;
|
||||
import club.joylink.rtss.vo.map.MapVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class RailwaySimulationWorkServiceImpl implements SimulationWorkService {
|
||||
@Autowired
|
||||
private IMapService iMapService;
|
||||
@Autowired
|
||||
private ICommandService iCommandService;
|
||||
@Autowired
|
||||
private MemberManager memberManager;
|
||||
@Autowired
|
||||
private ATSLogicLoop atsLogicLoop;
|
||||
@Autowired
|
||||
private CTCLogicLoop ctcLogicLoop;
|
||||
@Autowired
|
||||
private ATPLogicLoop atpLogicLoop;
|
||||
@Autowired
|
||||
private SimulationRobotService simulationRobotService;
|
||||
@Autowired
|
||||
private VRTrainRunningService vrTrainRunningService;
|
||||
@Autowired
|
||||
private CiLogic ciLogic;
|
||||
@Autowired
|
||||
private VRDeviceLogicLoop vrDeviceLogicLoop;
|
||||
@Autowired
|
||||
private ATSMessageCollectAndDispatcher atsMessageCollectAndDispatcher;
|
||||
@Autowired
|
||||
private Joylink3DMessageService joylink3DMessageService;
|
||||
@Autowired
|
||||
private FaultGenerator faultGenerator;
|
||||
@Autowired
|
||||
private DeviceStatusService deviceStatusService;
|
||||
@Autowired
|
||||
private SimulationLifeCycleService simulationLifeCycleService;
|
||||
|
||||
@Override
|
||||
public Simulation.Type getType() {
|
||||
return Simulation.Type.RAILWAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Simulation create(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO workParamVO) {
|
||||
checkParam(workParamVO);
|
||||
SimulationBuildParams params = prepareSimulationParams(loginUserInfoVO, workParamVO);
|
||||
String group = SimulationIdGenerator.generateGroup(loginUserInfoVO.getAccountVO().getId(), workParamVO.getMapId());
|
||||
Simulation simulation = new Simulation(group);
|
||||
simulation.setBuildParams(params);
|
||||
return simulation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadData(Simulation simulation) {
|
||||
SimulationBuildParams params = simulation.getBuildParams();
|
||||
// 加载地图数据
|
||||
loadMapData(simulation);
|
||||
// // 车辆段
|
||||
// depotService.loadDepotTrain(simulation);
|
||||
// 添加仿真用户
|
||||
SimulationUser simulationUser = new SimulationUser(simulation, params.getLoginUserInfo());
|
||||
simulation.addSimulationUser(simulationUser);
|
||||
// 添加仿真成员
|
||||
memberManager.addRailMembers(simulation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addJobs(Simulation simulation) {
|
||||
ctcLogicLoop.addJobs(simulation);
|
||||
atpLogicLoop.addJobs(simulation);
|
||||
atsLogicLoop.addJobs(simulation);
|
||||
simulationRobotService.addJobs(simulation);
|
||||
vrTrainRunningService.addJobs(simulation);
|
||||
ciLogic.addJobs(simulation);
|
||||
vrDeviceLogicLoop.addJobs(simulation);
|
||||
atsMessageCollectAndDispatcher.addJobs(simulation);
|
||||
joylink3DMessageService.addJobs(simulation);
|
||||
faultGenerator.addJobs(simulation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMessagePublisher(Simulation simulation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Simulation simulation) {
|
||||
// 初始化设备状态
|
||||
deviceStatusService.init(simulation);
|
||||
// 根据使用方式,设置用户扮演角色
|
||||
playSimulationMember(simulation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runAsPlan(Simulation simulation, RunAsPlanParam param) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(Simulation simulation) {
|
||||
simulationLifeCycleService.reset(simulation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFunctions(Simulation simulation, Map<Simulation.Function, Map<String, Object>> functionMap, LoginUserInfoVO loginInfo) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFunctions(Simulation simulation, Collection<Simulation.Function> functions) {
|
||||
|
||||
}
|
||||
|
||||
private SimulationBuildParams prepareSimulationParams(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO workParamVO) {
|
||||
// 获取地图数据
|
||||
Long mapId = workParamVO.getMapId();
|
||||
MapVO mapVO = iMapService.getMapDetail(mapId);
|
||||
// 获取操作定义数据
|
||||
List<CommandDefinitionVO> operationDefinitionList = iCommandService
|
||||
.queryDefinitionsByLineCode(mapVO.getLineCode());
|
||||
SimulationBuildParams.SimulationBuildParamsBuilder builder = SimulationBuildParams.builder();
|
||||
// 都有的属性构造
|
||||
builder.loginUserInfo(loginUserInfoVO)
|
||||
.workParamVO(workParamVO)
|
||||
.createTime(LocalDateTime.now())
|
||||
.map(mapVO)
|
||||
.operationDefinitionList(operationDefinitionList);
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private void loadMapData(Simulation simulation) {
|
||||
SimulationBuildParams buildParams = simulation.getBuildParams();
|
||||
simulation.setBuildParams(buildParams);
|
||||
if (Objects.nonNull(buildParams.getLoginUserInfo())) {
|
||||
simulation.setCreatorId(buildParams.getLoginUserInfo().getAccountVO().getIdStr());
|
||||
simulation.setProject(buildParams.getLoginUserInfo().getProject());
|
||||
simulation.setProjectVO(buildParams.getLoginUserInfo().getProjectInfo());
|
||||
}
|
||||
// 线路配置参数
|
||||
simulation.getRepository().setConfig(SimulationBuilder.buildConfig(buildParams.getMap().getConfigVO(),
|
||||
buildParams.getMap().getGraphDataNew().getMapFunctionConfig()));
|
||||
simulation.getRepository().getConfig()
|
||||
.setRouteLikeHa1(buildParams.getMap().getGraphDataNew().getGenerateConfig().isLikeHa1());
|
||||
simulation.getRepository().getConfig()
|
||||
.setOverlapSettingByTrigger(buildParams.getMap().getGraphDataNew().getGenerateConfig().isOverlapSettingByTrigger());
|
||||
simulation.getRepository().getConfig()
|
||||
.setSharingECStations(buildParams.getMap().getGraphDataNew().getGenerateConfig().getSharingECStations());
|
||||
simulation.getRepository().getConfig()
|
||||
.setHandleDepot(buildParams.getMap().getGraphDataNew().getGenerateConfig().isHandleDepot());
|
||||
// 地图数据构建
|
||||
SimulationBuilder.SimulationDeviceBuildResult mapDataBuildResult = SimulationBuilder.checkAndBuildMapData(buildParams.getMap());
|
||||
|
||||
simulation.getRepository().setDeviceMap(mapDataBuildResult.getDeviceMap());
|
||||
simulation.getRepository().setSectionArriveNearMap(mapDataBuildResult.getSectionArriveNearMap());
|
||||
simulation.getRepository().setVrDeviceMap(mapDataBuildResult.getVrDeviceMap());
|
||||
simulation.getRepository().setRoutePathMap(mapDataBuildResult.getRoutePathMap());
|
||||
simulation.getRepository().setDestinationMap(mapDataBuildResult.getDestinationMap());
|
||||
simulation.getRepository().getSectionRespondersMap().putAll(mapDataBuildResult.getSectionRespondersMap());
|
||||
if (!CollectionUtils.isEmpty(mapDataBuildResult.getErrMsgList())) { // 存在数据异常
|
||||
mapDataBuildResult.getErrMsgList().forEach(errMsg -> log.warn(String.format("地图数据异常:%s", errMsg)));
|
||||
// simulation.setMapDataError(true); //目前大铁线路缺少数据导致检验不通过;后续修改之后取消注释
|
||||
simulation.addDataErrMsgs(mapDataBuildResult.getErrMsgList());
|
||||
}
|
||||
SimulationBuilder.loadDepotInOutRoutePath(simulation);
|
||||
// CTC行车日志数据结构构建
|
||||
if (simulation.getRepository().getConfig().isRailway()) {
|
||||
SimulationBuilder.buildCtcStationRunPlanLog(simulation);
|
||||
}
|
||||
}
|
||||
|
||||
private void playSimulationMember(Simulation simulation) {
|
||||
Long creatorId = simulation.getBuildParams().getLoginUserInfo().getAccountVO().getId();
|
||||
SimulationWorkParamVO createParamVO = simulation.getBuildParams().getWorkParamVO();
|
||||
SimulationWorkParamVO.UsageInfo usageInfo = createParamVO.getUsageInfo();
|
||||
SimulationMember simulationMember = null;
|
||||
if (usageInfo != null) {
|
||||
switch (usageInfo.getUsage()) {
|
||||
case SINGLE_MEMBER:
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertMapNotEmpty(usageInfo.getParam(), "单角色仿真必须指定角色");
|
||||
simulationMember = selectSimulationMemberFromParam(simulation, usageInfo);
|
||||
break;
|
||||
case SINGLE_CLIENT:
|
||||
throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("待实现");
|
||||
case JOINT:
|
||||
if (!CollectionUtils.isEmpty(usageInfo.getParam())) {
|
||||
simulationMember = selectSimulationMemberFromParam(simulation, usageInfo);
|
||||
} else {
|
||||
simulationMember = simulation.getMemberListByType(SimulationMember.Type.DISPATCHER).get(0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + usageInfo.getUsage());
|
||||
}
|
||||
}
|
||||
if (simulationMember != null) {
|
||||
memberManager.playRole(simulation, creatorId, simulationMember.getId());
|
||||
}
|
||||
}
|
||||
|
||||
private SimulationMember selectSimulationMemberFromParam(Simulation simulation, SimulationWorkParamVO.UsageInfo usageInfo) {
|
||||
SingleMemberParamVO singleMemberParamVO = JsonUtils.read(JsonUtils.writeValueAsString(usageInfo.getParam()), SingleMemberParamVO.class);
|
||||
SimulationMember.Type memberType = singleMemberParamVO.getMemberType();
|
||||
String deviceCode = singleMemberParamVO.getDeviceCode();
|
||||
SimulationMember simulationMember = null;
|
||||
if (memberType != null && StringUtils.hasText(deviceCode)) {
|
||||
simulationMember = simulation.getSimulationMember(memberType, deviceCode);
|
||||
} else if (memberType != null) {
|
||||
simulationMember = simulation.getMemberListByType(memberType).get(0);
|
||||
} else if (StringUtils.hasText(deviceCode)) {
|
||||
simulationMember = simulation.getSimulationMembersByDeviceCode(deviceCode).get(0);
|
||||
}
|
||||
return simulationMember;
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package club.joylink.rtss.simulation.cbtc.work;
|
||||
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
import club.joylink.rtss.simulation.cbtc.vo.SimulationWorkParamVO;
|
||||
import club.joylink.rtss.vo.LoginUserInfoVO;
|
||||
import club.joylink.rtss.vo.client.simulationv1.RunAsPlanParam;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
public interface SimulationWorkService {
|
||||
Simulation.Type getType();
|
||||
|
||||
Simulation create(LoginUserInfoVO loginUserInfoVO, SimulationWorkParamVO workParamVO);
|
||||
|
||||
void loadData(Simulation simulation);
|
||||
|
||||
void addJobs(Simulation simulation);
|
||||
|
||||
void addMessagePublisher(Simulation simulation);
|
||||
|
||||
void init(Simulation simulation);
|
||||
|
||||
void runAsPlan(Simulation simulation, RunAsPlanParam param);
|
||||
|
||||
void reset(Simulation simulation);
|
||||
|
||||
void addFunctions(Simulation simulation, Map<Simulation.Function, Map<String, Object>> functionMap, LoginUserInfoVO loginInfo);
|
||||
|
||||
void removeFunctions(Simulation simulation, Collection<Simulation.Function> functions);
|
||||
|
||||
/**
|
||||
* 检查仿真参数
|
||||
*/
|
||||
default void checkParam(@NonNull SimulationWorkParamVO workParamVO) {
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO, "仿真工作参数不能为空");
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO.getMapId(), "仿真线路id不能为空");
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO.getType(), "仿真类型不能为空");
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(workParamVO.findUsage(), "仿真用途不能为空");
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotTrue(!CollectionUtils.isEmpty(workParamVO.getFunctionMap())
|
||||
&& workParamVO.getFunctionMap().size() > 1, "功能数量超限");
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package club.joylink.rtss.simulation.cbtc.init;
|
||||
package club.joylink.rtss.simulation.cbtc.work;
|
||||
|
||||
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||
@ -13,17 +13,17 @@ import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class SimulationInitServiceManager implements ApplicationContextAware {
|
||||
private Map<Simulation.Type, SimulationInitService> map;
|
||||
public class SimulationWorkServiceManager implements ApplicationContextAware {
|
||||
private Map<Simulation.Type, SimulationWorkService> map;
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
Map<String, SimulationInitService> services = applicationContext.getBeansOfType(SimulationInitService.class);
|
||||
map = services.values().stream().collect(Collectors.toMap(SimulationInitService::getType, Function.identity()));
|
||||
Map<String, SimulationWorkService> services = applicationContext.getBeansOfType(SimulationWorkService.class);
|
||||
map = services.values().stream().collect(Collectors.toMap(SimulationWorkService::getType, Function.identity()));
|
||||
}
|
||||
|
||||
public SimulationInitService getInitService(@NonNull Simulation.Type simulationType) {
|
||||
SimulationInitService initService = map.get(simulationType);
|
||||
public SimulationWorkService getInitService(@NonNull Simulation.Type simulationType) {
|
||||
SimulationWorkService initService = map.get(simulationType);
|
||||
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(initService, String.format("[%s]仿真未配置初始化服务", simulationType));
|
||||
return initService;
|
||||
}
|
Loading…
Reference in New Issue
Block a user