pa/pis系统消息类型作为操作参数

This commit is contained in:
thesai 2022-01-19 14:36:13 +08:00
parent 2e06dd9031
commit 4e07a65b6a
5 changed files with 37 additions and 56 deletions

View File

@ -1,6 +1,5 @@
package club.joylink.rtss.services.iscs.interactive;
import club.joylink.rtss.constants.IscsSystem;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.services.audio.AudioResourcesService;
import club.joylink.rtss.services.voice.IVoiceService;
@ -11,7 +10,6 @@ import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityAudio;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import club.joylink.rtss.vo.client.audio.AudioResourcesVO;
import club.joylink.rtss.vo.client.iscs.IscsAudioResourceVO;
import club.joylink.rtss.vo.client.iscs.PlayParamVO;
import club.joylink.rtss.vo.client.iscs.systemRes.IscsSystemResourcesVO;
import org.springframework.beans.factory.annotation.Autowired;
@ -33,17 +31,17 @@ public class IscsInteractiveService {
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(member != null && (member.isDispatcher() || member.isStationSupervisor()),
"仅行调和行值可操作");
BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.assertNotNull(param.getResourceId(), "资源id不能为null");
IscsAudioResourceVO resourceVO = simulation.getIscsRepository().getIscsAudioResource(param.getResourceId());
AudioResourcesVO resourceVO = simulation.getIscsRepository().getAudioResource(param.getResourceId());
SimulationDataRepository repository = simulation.getRepository();
for (String code : param.getIscsDeviceCodes()) {
MapElement element = repository.getByCode(code);
if (element instanceof Audio) {
Audio audio = (Audio) element;
audio.updateResource(resourceVO);
audio.updateState(getPaState(resourceVO, member));
audio.updateState(getPaState(param.getType(), member));
audio.updateRemain(Audio.DEFAULT_REMAIN);
VirtualRealityAudio vrAudio = audio.getVrAudio();
vrAudio.updateUrl(resourceVO.getAudioResourcesVO().getUrl());
vrAudio.updateUrl(resourceVO.getUrl());
vrAudio.control(VirtualRealityAudio.Command.PLAY);
}
}
@ -66,15 +64,14 @@ public class IscsInteractiveService {
public String pisPlay(Simulation simulation, PlayParamVO param, SimulationMember member) {
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(member != null && (member.isDispatcher() || member.isStationSupervisor()),
"仅行调和行值可操作");
IscsAudioResourceVO resourceVO;
if (param.getResourceId() != null) {
resourceVO = simulation.getIscsRepository().getIscsAudioResource(param.getResourceId());
AudioResourcesVO resourceVO;
if (!IscsSystemResourcesVO.Type.REAL_TIME.equals(param.getType())) {
resourceVO = simulation.getIscsRepository().getAudioResource(param.getResourceId());
} else {
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertHasText(param.getName(), "实时消息名称不能为空");
BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertHasText(param.getContent(), "实时消息内容不能为空");
String url = iVoiceService.synthesis(param.getContent(), "0");
AudioResourcesVO audioResourcesVO = new AudioResourcesVO(param.getName(), param.getContent(), url);
resourceVO = new IscsAudioResourceVO(audioResourcesVO, IscsSystem.PIS, IscsSystemResourcesVO.Type.REAL_TIME);
resourceVO = new AudioResourcesVO(param.getName(), param.getContent(), url);
}
SimulationDataRepository repository = simulation.getRepository();
boolean play = false;
@ -84,13 +81,13 @@ public class IscsInteractiveService {
Audio audio = (Audio) element;
audio.updateResource(resourceVO);
VirtualRealityAudio vrAudio = audio.getVrAudio();
vrAudio.updateUrl(resourceVO.getAudioResourcesVO().getUrl());
vrAudio.updateUrl(resourceVO.getUrl());
vrAudio.control(VirtualRealityAudio.Command.PLAY);
play = true;
}
}
if (play) {
return resourceVO.getAudioResourcesVO().getUrl();
return resourceVO.getUrl();
}
return null;
}
@ -107,24 +104,25 @@ public class IscsInteractiveService {
}
}
private String getPaState(IscsAudioResourceVO resourcesVO, SimulationMember member) {
private String getPaState(IscsSystemResourcesVO.Type resourceType, SimulationMember member) {
boolean dispatcher = member.isDispatcher();
if (IscsSystemResourcesVO.Type.BGM.equals(resourcesVO.getType())) {
return Audio.State.BGM;
switch (resourceType) {
case RECORDING:
if (dispatcher) {
return Audio.State.CENTER_NORMAL;
} else {
return Audio.State.STATION_NORMAL;
}
case EMERGENCY_RECORDING:
if (dispatcher) {
return Audio.State.CENTER_EMERGENCY;
} else {
return Audio.State.STATION_EMERGENCY;
}
case BGM:
return Audio.State.BGM;
default:
throw new IllegalStateException("Unexpected value: " + resourceType);
}
if (dispatcher) {
if (IscsSystemResourcesVO.Type.RECORDING.equals(resourcesVO.getType())) {
return Audio.State.CENTER_NORMAL;
} else if (IscsSystemResourcesVO.Type.EMERGENCY_RECORDING.equals(resourcesVO.getType())) {
return Audio.State.CENTER_EMERGENCY;
}
} else {
if (IscsSystemResourcesVO.Type.RECORDING.equals(resourcesVO.getType())) {
return Audio.State.STATION_NORMAL;
} else if (IscsSystemResourcesVO.Type.EMERGENCY_RECORDING.equals(resourcesVO.getType())) {
return Audio.State.STATION_EMERGENCY;
}
}
throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception("消息类型异常");
}
}

View File

@ -4,7 +4,6 @@ import club.joylink.rtss.constants.IscsSystem;
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
import club.joylink.rtss.simulation.cbtc.data.vo.iscs.IscsStatusVO;
import club.joylink.rtss.vo.client.audio.AudioResourcesVO;
import club.joylink.rtss.vo.client.iscs.IscsAudioResourceVO;
import club.joylink.rtss.vo.client.iscs.systemRes.IscsSystemResourcesVO;
import lombok.NoArgsConstructor;
import lombok.Setter;
@ -57,12 +56,12 @@ public class SimulationIscsDataRepository {
return stream.collect(Collectors.toList());
}
public IscsAudioResourceVO getIscsAudioResource(long resourceId) {
public AudioResourcesVO getAudioResource(long resourceId) {
for (IscsSystemResourcesVO systemResource : systemResources) {
if (!CollectionUtils.isEmpty(systemResource.getResources())) {
for (AudioResourcesVO resource : systemResource.getResources()) {
if (Objects.equals(resourceId, resource.getId())) {
return new IscsAudioResourceVO(resource, systemResource.getSystem(), systemResource.getType());
return resource;
}
}
}

View File

@ -2,7 +2,7 @@ package club.joylink.rtss.simulation.cbtc.data.map;
import club.joylink.rtss.constants.IscsSystem;
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealityAudio;
import club.joylink.rtss.vo.client.iscs.IscsAudioResourceVO;
import club.joylink.rtss.vo.client.audio.AudioResourcesVO;
import club.joylink.rtss.vo.client.iscs.device.IscsDeviceVO;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
@ -24,7 +24,7 @@ public class Audio extends MapElement{
private String state;
private IscsAudioResourceVO resource;
private AudioResourcesVO resource;
/**
* 剩余播放时长/ms
@ -50,7 +50,7 @@ public class Audio extends MapElement{
}
}
public void updateResource(IscsAudioResourceVO resource) {
public void updateResource(AudioResourcesVO resource) {
this.resource = resource;
}

View File

@ -1,21 +0,0 @@
package club.joylink.rtss.vo.client.iscs;
import club.joylink.rtss.constants.IscsSystem;
import club.joylink.rtss.vo.client.audio.AudioResourcesVO;
import club.joylink.rtss.vo.client.iscs.systemRes.IscsSystemResourcesVO;
import lombok.Getter;
@Getter
public class IscsAudioResourceVO {
private AudioResourcesVO audioResourcesVO;
private IscsSystem system;
private IscsSystemResourcesVO.Type type;
public IscsAudioResourceVO(AudioResourcesVO resource, IscsSystem system, IscsSystemResourcesVO.Type type) {
this.audioResourcesVO = resource;
this.system = system;
this.type = type;
}
}

View File

@ -1,10 +1,12 @@
package club.joylink.rtss.vo.client.iscs;
import club.joylink.rtss.vo.client.iscs.systemRes.IscsSystemResourcesVO;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
@ -14,6 +16,9 @@ import java.util.List;
@Setter
@NoArgsConstructor
public class PlayParamVO {
@NotNull(message = "类型不能为null")
private IscsSystemResourcesVO.Type type;
private Long resourceId;
@NotEmpty(message = "设备编号不能为空")