Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
f14e377565 | |||
b302bb360b | |||
1e2ed4d305 | |||
436a07bcf4 | |||
235f4dce5b | |||
ac87b0dbe9 | |||
3536ff75ad | |||
f57952b755 | |||
9c9e7c60e3 | |||
98abf0691a | |||
16e8dc191f | |||
|
4f151fae4a | ||
|
e93171e958 | ||
4cd80bbec5 | |||
8125e32d7e | |||
e23864fa72 | |||
212773e679 | |||
495681db5d | |||
dbe197eba6 | |||
cee9eda430 | |||
0d10203613 |
@ -56,6 +56,6 @@ jobs:
|
|||||||
docker rm -f rt-sim-training-service || echo "rt-sim-training-service not exist"
|
docker rm -f rt-sim-training-service || echo "rt-sim-training-service not exist"
|
||||||
docker pull gitea.joylink.club/joylink/rt-sim-training-service:local-test
|
docker pull gitea.joylink.club/joylink/rt-sim-training-service:local-test
|
||||||
docker run --name rt-sim-training-service --restart=always --network net --ip 192.168.53.3 -d -e APP_ENV=local-test -p 9000:9000 -p 19000:19000 -v /usr/local/joylink/logs/rtss:/usr/local/joylink/logs/rtss gitea.joylink.club/joylink/rt-sim-training-service:local-test
|
docker run --name rt-sim-training-service --restart=always --network net --ip 192.168.53.3 -d -e APP_ENV=local-test -p 9000:9000 -p 19000:19000 -v /usr/local/joylink/logs/rtss:/usr/local/joylink/logs/rtss gitea.joylink.club/joylink/rt-sim-training-service:local-test
|
||||||
- name: 清理tag为none的镜像
|
# - name: 清理tag为none的镜像
|
||||||
run: |
|
# run: |
|
||||||
docker rmi $(docker images --filter "dangling=true" -q)
|
# docker rmi $(docker images --filter "dangling=true" -q --no-trunc) 2>/dev/null || echo "No dangling images to remove"
|
@ -45,9 +45,9 @@ jobs:
|
|||||||
tags: |
|
tags: |
|
||||||
gitea.joylink.club/joylink/rt-sim-training-service:${{ github.event.release.tag_name }}
|
gitea.joylink.club/joylink/rt-sim-training-service:${{ github.event.release.tag_name }}
|
||||||
gitea.joylink.club/joylink/rt-sim-training-service:latest
|
gitea.joylink.club/joylink/rt-sim-training-service:latest
|
||||||
- name: 清理tag为none的镜像
|
# - name: 清理tag为none的镜像
|
||||||
run: |
|
# run: |
|
||||||
docker rmi $(docker images --filter "dangling=true" -q)
|
# docker rmi $(docker images --filter "dangling=true" -q --no-trunc) 2>/dev/null || echo "No dangling images to remove"
|
||||||
# - name: 发布到本地测试环境
|
# - name: 发布到本地测试环境
|
||||||
# uses: https://gitea.joylink.club/appleboy/ssh-action@v1.0.3
|
# uses: https://gitea.joylink.club/appleboy/ssh-action@v1.0.3
|
||||||
# with:
|
# with:
|
||||||
|
23
pom.xml
23
pom.xml
@ -227,5 +227,26 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>aliyun-central</id>
|
||||||
|
<url>https://maven.aliyun.com/repository/central</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>aliyun-snapshots</id>
|
||||||
|
<url>https://maven.aliyun.com/repository/snapshots</url>
|
||||||
|
<releases>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</releases>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
<pluginRepositories>
|
||||||
|
<pluginRepository>
|
||||||
|
<id>aliyun-central</id>
|
||||||
|
<url>https://maven.aliyun.com/repository/central</url>
|
||||||
|
</pluginRepository>
|
||||||
|
</pluginRepositories>
|
||||||
</project>
|
</project>
|
||||||
|
@ -27,6 +27,6 @@ public class CgyStatsBO {
|
|||||||
private AtomicLong visitor;
|
private AtomicLong visitor;
|
||||||
//实训人数
|
//实训人数
|
||||||
private final Set<Long> userSet = new HashSet<>();
|
private final Set<Long> userSet = new HashSet<>();
|
||||||
//实训时长
|
//实训时长/s
|
||||||
private AtomicLong duration;
|
private AtomicLong duration;
|
||||||
}
|
}
|
||||||
|
@ -124,8 +124,7 @@ public class TrainingV2PublishController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/infos")
|
@PostMapping("/infos")
|
||||||
public List<PublishedTraining2InfoRspVo> findTrainingListInfos(
|
public List<PublishedTraining2InfoRspVo> findTrainingListInfos(
|
||||||
@RequestBody PublishedTrainingListRspVo vo
|
@RequestBody PublishedTrainingListRspVo vo,
|
||||||
,
|
|
||||||
@RequestAttribute(name = AuthenticateInterceptor.LOGIN_INFO_KEY) LoginUserInfoVO loginUserInfoVO) {
|
@RequestAttribute(name = AuthenticateInterceptor.LOGIN_INFO_KEY) LoginUserInfoVO loginUserInfoVO) {
|
||||||
//只查询以上架
|
//只查询以上架
|
||||||
vo.setState(BusinessConsts.STATUS_USE_INT);
|
vo.setState(BusinessConsts.STATUS_USE_INT);
|
||||||
|
@ -4,15 +4,25 @@ import club.joylink.rtss.services.ISysUserService;
|
|||||||
import club.joylink.rtss.vo.AccountVO;
|
import club.joylink.rtss.vo.AccountVO;
|
||||||
import club.joylink.rtss.vo.UserQueryVO;
|
import club.joylink.rtss.vo.UserQueryVO;
|
||||||
import club.joylink.rtss.vo.client.PageVO;
|
import club.joylink.rtss.vo.client.PageVO;
|
||||||
import club.joylink.rtss.vo.client.user.*;
|
import club.joylink.rtss.vo.client.user.MobileInfoVO;
|
||||||
|
import club.joylink.rtss.vo.client.user.RetrievePwdVO;
|
||||||
|
import club.joylink.rtss.vo.client.user.UpdateEmailVO;
|
||||||
|
import club.joylink.rtss.vo.client.user.UpdateMobileVO;
|
||||||
|
import club.joylink.rtss.vo.client.user.UpdatePasswordVO;
|
||||||
import club.joylink.rtss.vo.user.AccountCreateVO;
|
import club.joylink.rtss.vo.user.AccountCreateVO;
|
||||||
import club.joylink.rtss.vo.user.AccountRegisterVO;
|
import club.joylink.rtss.vo.user.AccountRegisterVO;
|
||||||
import club.joylink.rtss.vo.user.UserRegisterCheck;
|
import club.joylink.rtss.vo.user.UserRegisterCheck;
|
||||||
|
import java.util.List;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import java.util.List;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统账户接口
|
* 系统账户接口
|
||||||
@ -25,7 +35,8 @@ public class SysAccountController {
|
|||||||
private ISysUserService iSysUserService;
|
private ISysUserService iSysUserService;
|
||||||
|
|
||||||
@PostMapping("/register")
|
@PostMapping("/register")
|
||||||
public void register(@RequestBody @Validated(value = UserRegisterCheck.class) AccountCreateVO accountCreateVO) {
|
public void register(
|
||||||
|
@RequestBody @Validated(value = UserRegisterCheck.class) AccountCreateVO accountCreateVO) {
|
||||||
this.iSysUserService.register(accountCreateVO);
|
this.iSysUserService.register(accountCreateVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +149,8 @@ public class SysAccountController {
|
|||||||
* 更新用户手机号
|
* 更新用户手机号
|
||||||
*/
|
*/
|
||||||
@PutMapping(path = "/{id}/mobile")
|
@PutMapping(path = "/{id}/mobile")
|
||||||
public void updateMobile(@PathVariable Long id, @RequestBody @Validated UpdateMobileVO updateMobileVO) {
|
public void updateMobile(@PathVariable Long id,
|
||||||
|
@RequestBody @Validated UpdateMobileVO updateMobileVO) {
|
||||||
this.iSysUserService.updateMobile(id, updateMobileVO);
|
this.iSysUserService.updateMobile(id, updateMobileVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +158,8 @@ public class SysAccountController {
|
|||||||
* 更新用户邮箱
|
* 更新用户邮箱
|
||||||
*/
|
*/
|
||||||
@PutMapping(path = "/{id}/email")
|
@PutMapping(path = "/{id}/email")
|
||||||
public void updateEmail(@PathVariable Long id, @RequestBody @Validated UpdateEmailVO updateEmailVO) {
|
public void updateEmail(@PathVariable Long id,
|
||||||
|
@RequestBody @Validated UpdateEmailVO updateEmailVO) {
|
||||||
this.iSysUserService.updateEmail(id, updateEmailVO);
|
this.iSysUserService.updateEmail(id, updateEmailVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +167,8 @@ public class SysAccountController {
|
|||||||
* 更新用户登陆密码
|
* 更新用户登陆密码
|
||||||
*/
|
*/
|
||||||
@PutMapping(path = "/{id}/password")
|
@PutMapping(path = "/{id}/password")
|
||||||
public void updatePassword(@PathVariable Long id, @RequestBody @Validated UpdatePasswordVO updatePasswordVO) {
|
public void updatePassword(@PathVariable Long id,
|
||||||
|
@RequestBody @Validated UpdatePasswordVO updatePasswordVO) {
|
||||||
this.iSysUserService.updatePassword(id, updatePasswordVO);
|
this.iSysUserService.updatePassword(id, updatePasswordVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +176,8 @@ public class SysAccountController {
|
|||||||
* 按条件分页查询指定来源的账号
|
* 按条件分页查询指定来源的账号
|
||||||
*/
|
*/
|
||||||
@GetMapping("/page/criteria/{source}")
|
@GetMapping("/page/criteria/{source}")
|
||||||
public PageVO<AccountVO> queryPagedAccountOfTheSource(UserQueryVO queryVO, @PathVariable String source) {
|
public PageVO<AccountVO> queryPagedAccountOfTheSource(UserQueryVO queryVO,
|
||||||
|
@PathVariable String source) {
|
||||||
queryVO.setSource(source);
|
queryVO.setSource(source);
|
||||||
return this.iSysUserService.queryPagedUser(queryVO);
|
return this.iSysUserService.queryPagedUser(queryVO);
|
||||||
}
|
}
|
||||||
@ -182,4 +197,20 @@ public class SysAccountController {
|
|||||||
public void retrievePwd(@RequestBody @Validated RetrievePwdVO vo) {
|
public void retrievePwd(@RequestBody @Validated RetrievePwdVO vo) {
|
||||||
iSysUserService.retrievePwd(vo);
|
iSysUserService.retrievePwd(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据用户id列表获取用户信息
|
||||||
|
*/
|
||||||
|
@PostMapping("/list/ids")
|
||||||
|
public List<AccountVO> listByIds(@RequestBody List<Long> ids) {
|
||||||
|
return iSysUserService.listByIds(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询所有用户
|
||||||
|
*/
|
||||||
|
@GetMapping("/list/all")
|
||||||
|
public List<AccountVO> listAll() {
|
||||||
|
return iSysUserService.listAll();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,4 +363,8 @@ public interface ISysUserService {
|
|||||||
boolean isSameMobileExist(String mobile);
|
boolean isSameMobileExist(String mobile);
|
||||||
|
|
||||||
boolean isSameEmailExist(String email);
|
boolean isSameEmailExist(String email);
|
||||||
|
|
||||||
|
List<AccountVO> listByIds(List<Long> ids);
|
||||||
|
|
||||||
|
List<AccountVO> listAll();
|
||||||
}
|
}
|
||||||
|
@ -1112,6 +1112,20 @@ public class SysUserService implements ISysUserService {
|
|||||||
return sysAccountDAO.countByExample(example) > 0;
|
return sysAccountDAO.countByExample(example) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AccountVO> listByIds(List<Long> ids) {
|
||||||
|
SysAccountExample example = new SysAccountExample();
|
||||||
|
example.createCriteria().andIdIn(ids);
|
||||||
|
List<SysAccount> sysAccounts = sysAccountDAO.selectByExample(example);
|
||||||
|
return AccountVO.convertFromDB(sysAccounts);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AccountVO> listAll() {
|
||||||
|
List<SysAccount> sysAccounts = sysAccountDAO.selectByExample(null);
|
||||||
|
return AccountVO.convertFromDB(sysAccounts);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询包含组织信息的用户信息
|
* 查询包含组织信息的用户信息
|
||||||
*/
|
*/
|
||||||
|
@ -98,7 +98,7 @@ public class CgyStatsService {
|
|||||||
+ "app_secret=" + statsBO.getAppSecret();
|
+ "app_secret=" + statsBO.getAppSecret();
|
||||||
body.put("sign", EncryptUtil.md5(sb).toLowerCase());
|
body.put("sign", EncryptUtil.md5(sb).toLowerCase());
|
||||||
//扩展字段
|
//扩展字段
|
||||||
body.put("duration", statsBO.getDuration().get());
|
body.put("duration", statsBO.getDuration().get() / 60); //分钟
|
||||||
SimulationInfoQueryVO queryVO = new SimulationInfoQueryVO();
|
SimulationInfoQueryVO queryVO = new SimulationInfoQueryVO();
|
||||||
queryVO.setFunctionId(statsBO.getFunctionId());
|
queryVO.setFunctionId(statsBO.getFunctionId());
|
||||||
List<SimulationInfoVO> sims = simulationService.listAllSimulation(queryVO);
|
List<SimulationInfoVO> sims = simulationService.listAllSimulation(queryVO);
|
||||||
@ -108,7 +108,7 @@ public class CgyStatsService {
|
|||||||
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
||||||
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(body, httpHeaders);
|
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(body, httpHeaders);
|
||||||
Map<String, String> resBody = restTemplate.postForObject(
|
Map<String, String> resBody = restTemplate.postForObject(
|
||||||
"https://common-dev.educloudxr.com/api/applicationCenter/openapi/summary", httpEntity,
|
"http://gdjtapp.cdivtc.edu.cn/api/applicationCenter/openapi/summary", httpEntity,
|
||||||
Map.class);
|
Map.class);
|
||||||
if (resBody != null && Objects.equals(resBody.get("code"), "100001")) {
|
if (resBody != null && Objects.equals(resBody.get("code"), "100001")) {
|
||||||
log.error(String.format("成工院虚仿平台同步数据失败:[%s][%s]", resBody.get("msg"),
|
log.error(String.format("成工院虚仿平台同步数据失败:[%s][%s]", resBody.get("msg"),
|
||||||
@ -122,11 +122,13 @@ public class CgyStatsService {
|
|||||||
public void syncUserSimulationUsing(UserSimulationRecordEvent event) {
|
public void syncUserSimulationUsing(UserSimulationRecordEvent event) {
|
||||||
UserSimulationRecord record = event.getRecord();
|
UserSimulationRecord record = event.getRecord();
|
||||||
CgyStatsBO cgyStatsBO = functionStatsMap.get(record.getFunctionId());
|
CgyStatsBO cgyStatsBO = functionStatsMap.get(record.getFunctionId());
|
||||||
|
if (Objects.nonNull(cgyStatsBO)) {
|
||||||
cgyStatsBO.getVisitor().incrementAndGet();
|
cgyStatsBO.getVisitor().incrementAndGet();
|
||||||
cgyStatsBO.getUserSet().add(record.getUserId());
|
cgyStatsBO.getUserSet().add(record.getUserId());
|
||||||
cgyStatsBO.getDuration().addAndGet(record.getDuration());
|
cgyStatsBO.getDuration().addAndGet(record.getDuration());
|
||||||
cgyStatsBO.getChange().set(true);
|
cgyStatsBO.getChange().set(true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新此App的浏览量数据
|
* 更新此App的浏览量数据
|
||||||
|
@ -5,7 +5,22 @@ import club.joylink.rtss.simulation.cbtc.build.SimulationBuilder;
|
|||||||
import club.joylink.rtss.simulation.cbtc.constant.SignalAspect;
|
import club.joylink.rtss.simulation.cbtc.constant.SignalAspect;
|
||||||
import club.joylink.rtss.simulation.cbtc.constant.SignalModel;
|
import club.joylink.rtss.simulation.cbtc.constant.SignalModel;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.CalculateService;
|
import club.joylink.rtss.simulation.cbtc.data.CalculateService;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.*;
|
import club.joylink.rtss.simulation.cbtc.data.map.AutoSignal;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.Cycle;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.DestinationCodeDefinition;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.ESP;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.MapElement;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.PSD;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.Route;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.RouteFls;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.RouteOverlap;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.Section;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.SectionPath;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.Signal;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.Stand;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.Station;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.Switch;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.map.SwitchElement;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.support.RoutePath;
|
import club.joylink.rtss.simulation.cbtc.data.support.RoutePath;
|
||||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
|
import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
|
||||||
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
|
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
|
||||||
@ -14,7 +29,28 @@ import club.joylink.rtss.vo.map.CiGenerateResultVO;
|
|||||||
import club.joylink.rtss.vo.map.MapCiGenerateConfig;
|
import club.joylink.rtss.vo.map.MapCiGenerateConfig;
|
||||||
import club.joylink.rtss.vo.map.MapRoutingSectionNewVO;
|
import club.joylink.rtss.vo.map.MapRoutingSectionNewVO;
|
||||||
import club.joylink.rtss.vo.map.MapVO;
|
import club.joylink.rtss.vo.map.MapVO;
|
||||||
import club.joylink.rtss.vo.map.logic.*;
|
import club.joylink.rtss.vo.map.logic.MapAutoReentryVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapAutoSignalNewVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapDestinationCodeDefinitionVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapOverlapVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapRouteFlankProtectionNewVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapRouteNewVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapRoutingDataVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapSignalApproachSectionVO;
|
||||||
|
import club.joylink.rtss.vo.map.logic.MapStationRunLevelVO;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Stack;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -23,11 +59,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
||||||
@ -46,9 +77,11 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
public CiGenerateResultVO generate(Long mapId) {
|
public CiGenerateResultVO generate(Long mapId) {
|
||||||
// 先校验地图基础数据
|
// 先校验地图基础数据
|
||||||
MapVO mapVO = this.draftMapService.getDraftMapData(mapId);
|
MapVO mapVO = this.draftMapService.getDraftMapData(mapId);
|
||||||
SimulationBuilder.SimulationDeviceBuildResult buildResult = SimulationBuilder.checkAndBuildBasicMapData(mapVO);
|
SimulationBuilder.SimulationDeviceBuildResult buildResult = SimulationBuilder.checkAndBuildBasicMapData(
|
||||||
|
mapVO);
|
||||||
BusinessExceptionAssertEnum.DATA_ERROR.assertCollectionEmpty(buildResult.getErrMsgList(),
|
BusinessExceptionAssertEnum.DATA_ERROR.assertCollectionEmpty(buildResult.getErrMsgList(),
|
||||||
String.format("地图基础数据有错误: %s", JsonUtils.writeValueAsString(buildResult.getErrMsgList())));
|
String.format("地图基础数据有错误: %s",
|
||||||
|
JsonUtils.writeValueAsString(buildResult.getErrMsgList())));
|
||||||
MapCiGenerateConfig generateConfig = mapVO.getGraphDataNew().getGenerateConfig();
|
MapCiGenerateConfig generateConfig = mapVO.getGraphDataNew().getGenerateConfig();
|
||||||
Map<String, MapElement> deviceMap = buildResult.getDeviceMap();
|
Map<String, MapElement> deviceMap = buildResult.getDeviceMap();
|
||||||
// 联锁关系数据生成
|
// 联锁关系数据生成
|
||||||
@ -90,7 +123,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
autoReentryVOList.add(MapAutoReentryVO.fromBO(cycle));
|
autoReentryVOList.add(MapAutoReentryVO.fromBO(cycle));
|
||||||
}
|
}
|
||||||
// 目的地码
|
// 目的地码
|
||||||
List<MapDestinationCodeDefinitionVO> destinationCodeDefinitionVOList = result.getDestinationCodeDefinitionList().stream()
|
List<MapDestinationCodeDefinitionVO> destinationCodeDefinitionVOList = result.getDestinationCodeDefinitionList()
|
||||||
|
.stream()
|
||||||
.map(MapDestinationCodeDefinitionVO::fromBO).collect(Collectors.toList());
|
.map(MapDestinationCodeDefinitionVO::fromBO).collect(Collectors.toList());
|
||||||
|
|
||||||
// 删除旧联锁数据,保存新联锁数据
|
// 删除旧联锁数据,保存新联锁数据
|
||||||
@ -106,9 +140,11 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
public int generateDepot(Long mapId, String stationCode) {
|
public int generateDepot(Long mapId, String stationCode) {
|
||||||
// 先校验地图基础数据
|
// 先校验地图基础数据
|
||||||
MapVO mapVO = this.draftMapService.getDraftMapData(mapId);
|
MapVO mapVO = this.draftMapService.getDraftMapData(mapId);
|
||||||
SimulationBuilder.SimulationDeviceBuildResult buildResult = SimulationBuilder.checkAndBuildBasicMapData(mapVO);
|
SimulationBuilder.SimulationDeviceBuildResult buildResult = SimulationBuilder.checkAndBuildBasicMapData(
|
||||||
|
mapVO);
|
||||||
BusinessExceptionAssertEnum.DATA_ERROR.assertCollectionEmpty(buildResult.getErrMsgList(),
|
BusinessExceptionAssertEnum.DATA_ERROR.assertCollectionEmpty(buildResult.getErrMsgList(),
|
||||||
String.format("地图基础数据有错误: %s", JsonUtils.writeValueAsString(buildResult.getErrMsgList())));
|
String.format("地图基础数据有错误: %s",
|
||||||
|
JsonUtils.writeValueAsString(buildResult.getErrMsgList())));
|
||||||
MapCiGenerateConfig generateConfig = mapVO.getGraphDataNew().getGenerateConfig();
|
MapCiGenerateConfig generateConfig = mapVO.getGraphDataNew().getGenerateConfig();
|
||||||
Map<String, MapElement> deviceMap = buildResult.getDeviceMap();
|
Map<String, MapElement> deviceMap = buildResult.getDeviceMap();
|
||||||
// 处理旧数据
|
// 处理旧数据
|
||||||
@ -141,13 +177,17 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
// 列车兼调车信号机、调车信号机
|
// 列车兼调车信号机、调车信号机
|
||||||
if (signal.getType().equals(Signal.SignalType.SHUNTING2)) {
|
if (signal.getType().equals(Signal.SignalType.SHUNTING2)) {
|
||||||
signal.setType(Signal.SignalType.SHUNTING);
|
signal.setType(Signal.SignalType.SHUNTING);
|
||||||
generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
generatedRouteList.addAll(
|
||||||
|
this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
||||||
signal.setType(Signal.SignalType.SHUNTING2);
|
signal.setType(Signal.SignalType.SHUNTING2);
|
||||||
generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
generatedRouteList.addAll(
|
||||||
|
this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
||||||
} else if (signal.getType().equals(Signal.SignalType.SHUNTING)) {
|
} else if (signal.getType().equals(Signal.SignalType.SHUNTING)) {
|
||||||
generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
generatedRouteList.addAll(
|
||||||
|
this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
||||||
} else if (signal.getType().equals(Signal.SignalType.INBOUND)) {
|
} else if (signal.getType().equals(Signal.SignalType.INBOUND)) {
|
||||||
generatedRouteList.addAll(this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
generatedRouteList.addAll(
|
||||||
|
this.generateRouteDepot(signal, routeCodeGenerator, generateConfig, errorList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info(String.format("生成一般进路[%s]条", generatedRouteList.size()));
|
log.info(String.format("生成一般进路[%s]条", generatedRouteList.size()));
|
||||||
@ -170,6 +210,7 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
* 唯一编码生成器
|
* 唯一编码生成器
|
||||||
*/
|
*/
|
||||||
public static class CodeGenerator {
|
public static class CodeGenerator {
|
||||||
|
|
||||||
public static final String Prefix_Route = "Route";
|
public static final String Prefix_Route = "Route";
|
||||||
public static final String Prefix_Overlap = "Overlap";
|
public static final String Prefix_Overlap = "Overlap";
|
||||||
public static final String Prefix_Fls = "Fls";
|
public static final String Prefix_Fls = "Fls";
|
||||||
@ -221,6 +262,7 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private class CiGenerateResult {
|
private class CiGenerateResult {
|
||||||
|
|
||||||
private List<String> errMsgList;
|
private List<String> errMsgList;
|
||||||
|
|
||||||
private List<Signal> approachList;
|
private List<Signal> approachList;
|
||||||
@ -233,8 +275,10 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
|
|
||||||
List<MapRoutingDataVO> routingList;
|
List<MapRoutingDataVO> routingList;
|
||||||
|
|
||||||
public CiGenerateResult(List<String> errMsgList, List<Signal> approachList, List<AutoSignal> autoSignalList, List<Route> routeList,
|
public CiGenerateResult(List<String> errMsgList, List<Signal> approachList,
|
||||||
List<RouteOverlap> overlapList, List<RouteFls> flsList, List<Cycle> generateCycleList, List<MapRoutingDataVO> routingList,
|
List<AutoSignal> autoSignalList, List<Route> routeList,
|
||||||
|
List<RouteOverlap> overlapList, List<RouteFls> flsList, List<Cycle> generateCycleList,
|
||||||
|
List<MapRoutingDataVO> routingList,
|
||||||
List<DestinationCodeDefinition> destinationCodeDefinitionList) {
|
List<DestinationCodeDefinition> destinationCodeDefinitionList) {
|
||||||
this.errMsgList = errMsgList;
|
this.errMsgList = errMsgList;
|
||||||
this.approachList = approachList;
|
this.approachList = approachList;
|
||||||
@ -269,7 +313,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private CiGenerateResult generate(Long mapId, Map<String, MapElement> deviceMap, MapCiGenerateConfig config) {
|
private CiGenerateResult generate(Long mapId, Map<String, MapElement> deviceMap,
|
||||||
|
MapCiGenerateConfig config) {
|
||||||
List<String> errorList = new ArrayList<>();
|
List<String> errorList = new ArrayList<>();
|
||||||
List<AutoSignal> autoSignalList = new ArrayList<>();
|
List<AutoSignal> autoSignalList = new ArrayList<>();
|
||||||
List<Route> generatedRouteList = new ArrayList<>();
|
List<Route> generatedRouteList = new ArrayList<>();
|
||||||
@ -321,7 +366,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
} else if (signal.isProtectionSignal()) {
|
} else if (signal.isProtectionSignal()) {
|
||||||
// 防护信号机,生成进路
|
// 防护信号机,生成进路
|
||||||
if (config.isLikeHa1()) {
|
if (config.isLikeHa1()) {
|
||||||
generatedRouteList.addAll(this.generateRouteLikeHa1(signal, routeCodeGenerator, overlapMap,
|
generatedRouteList.addAll(
|
||||||
|
this.generateRouteLikeHa1(signal, routeCodeGenerator, overlapMap,
|
||||||
overlapCodeGenerator, config, errorList));
|
overlapCodeGenerator, config, errorList));
|
||||||
} else {
|
} else {
|
||||||
generatedRouteList.addAll(this.generateRoute(signal,
|
generatedRouteList.addAll(this.generateRoute(signal,
|
||||||
@ -376,7 +422,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
// 根据配置生成折返进路
|
// 根据配置生成折返进路
|
||||||
if (config.isGenerateTbRoute()) {
|
if (config.isGenerateTbRoute()) {
|
||||||
List<Route> tbRouteList = this.generateTurnBackRoute(generatedRouteList, routeCodeGenerator, config);
|
List<Route> tbRouteList = this.generateTurnBackRoute(generatedRouteList, routeCodeGenerator,
|
||||||
|
config);
|
||||||
generatedRouteList.addAll(tbRouteList);
|
generatedRouteList.addAll(tbRouteList);
|
||||||
}
|
}
|
||||||
// 清除不需要的基本进路
|
// 清除不需要的基本进路
|
||||||
@ -411,7 +458,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 生成交路数据
|
// 生成交路数据
|
||||||
List<MapRoutingDataVO> generateRoutingList = this.routingGenerator.generateAllRouting(deviceMap, errorList);
|
List<MapRoutingDataVO> generateRoutingList = this.routingGenerator.generateAllRouting(deviceMap,
|
||||||
|
errorList);
|
||||||
|
|
||||||
//目的地码生成
|
//目的地码生成
|
||||||
List<DestinationCodeDefinition> destinationCodeDefinitionList
|
List<DestinationCodeDefinition> destinationCodeDefinitionList
|
||||||
@ -422,7 +470,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
generateCycleList, generateRoutingList, destinationCodeDefinitionList);
|
generateCycleList, generateRoutingList, destinationCodeDefinitionList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DestinationCodeDefinition> generateDestinationCodeDefinition(MapCiGenerateConfig config, List<Section> sectionList, List<Station> stationList) {
|
private List<DestinationCodeDefinition> generateDestinationCodeDefinition(
|
||||||
|
MapCiGenerateConfig config, List<Section> sectionList, List<Station> stationList) {
|
||||||
List<DestinationCodeDefinition> destinationCodeDefinitionList = new ArrayList<>();
|
List<DestinationCodeDefinition> destinationCodeDefinitionList = new ArrayList<>();
|
||||||
if (config.isGenerateDestination()) {
|
if (config.isGenerateDestination()) {
|
||||||
String code = null;
|
String code = null;
|
||||||
@ -442,9 +491,12 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
for (int i = 0; i < stationList.size(); i++) {
|
for (int i = 0; i < stationList.size(); i++) {
|
||||||
leftStation = stationList.get(i);
|
leftStation = stationList.get(i);
|
||||||
if (CollectionUtils.isEmpty(leftStation.getTurnBackList())) //没有折返轨的略过
|
if (CollectionUtils.isEmpty(leftStation.getTurnBackList())) //没有折返轨的略过
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
if (i == stationList.size() - 1)
|
}
|
||||||
|
if (i == stationList.size() - 1) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
List<Section> leftTbSections = queryAfterTurnBackList(leftStation, false);
|
List<Section> leftTbSections = queryAfterTurnBackList(leftStation, false);
|
||||||
leftTbSections.addAll(queryFrontTurnBackList(stationList, leftStation, false));
|
leftTbSections.addAll(queryFrontTurnBackList(stationList, leftStation, false));
|
||||||
@ -464,8 +516,10 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
leftFrontTurnBack = startTbSection.isNormalStandTrack();
|
leftFrontTurnBack = startTbSection.isNormalStandTrack();
|
||||||
rightFrontTurnBack = endTbSection.isNormalStandTrack();
|
rightFrontTurnBack = endTbSection.isNormalStandTrack();
|
||||||
destinationCodeDefinitionList.add(
|
destinationCodeDefinitionList.add(
|
||||||
new DestinationCodeDefinition(code, type, description, null, null, right, necessarySections,
|
new DestinationCodeDefinition(code, type, description, null, null, right,
|
||||||
leftStation, leftFrontTurnBack, rightStation, rightFrontTurnBack, null, null, null)
|
necessarySections,
|
||||||
|
leftStation, leftFrontTurnBack, rightStation, rightFrontTurnBack, null, null,
|
||||||
|
null)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -478,7 +532,9 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (!StringUtils.hasText(destinationCode)) {
|
if (!StringUtils.hasText(destinationCode)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
destinationCodeDefinitionList.add(new DestinationCodeDefinition(destinationCode, DestinationCodeDefinition.Type.OTHER, section));
|
destinationCodeDefinitionList.add(
|
||||||
|
new DestinationCodeDefinition(destinationCode, DestinationCodeDefinition.Type.OTHER,
|
||||||
|
section));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -491,9 +547,11 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
* @param stations 所有车站
|
* @param stations 所有车站
|
||||||
* @param right 是否是右端车站
|
* @param right 是否是右端车站
|
||||||
*/
|
*/
|
||||||
private List<Section> queryFrontTurnBackList(List<Station> stations, Station station, boolean right) {
|
private List<Section> queryFrontTurnBackList(List<Station> stations, Station station,
|
||||||
|
boolean right) {
|
||||||
List<Section> turnBackList = station.getTurnBackList();
|
List<Section> turnBackList = station.getTurnBackList();
|
||||||
if (CollectionUtils.isEmpty(turnBackList) || CollectionUtils.isEmpty(station.getAllNormalStands())) {
|
if (CollectionUtils.isEmpty(turnBackList) || CollectionUtils.isEmpty(
|
||||||
|
station.getAllNormalStands())) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
int sn;
|
int sn;
|
||||||
@ -513,20 +571,28 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
List<Section> tbSections = new ArrayList<>();
|
List<Section> tbSections = new ArrayList<>();
|
||||||
if (right) {
|
if (right) {
|
||||||
if (rightStandTrack.isTurnBackTrack()
|
if (rightStandTrack.isTurnBackTrack()
|
||||||
&& !CollectionUtils.isEmpty(CalculateService.queryRoutePathsOnDirection(rightStandTrack, adjacentLeftStandTrack, false, 10))) {
|
&& !CollectionUtils.isEmpty(
|
||||||
|
CalculateService.queryRoutePathsOnDirection(rightStandTrack, adjacentLeftStandTrack,
|
||||||
|
false, 10))) {
|
||||||
tbSections.add(rightStandTrack);
|
tbSections.add(rightStandTrack);
|
||||||
}
|
}
|
||||||
if (leftStandTrack.isTurnBackTrack()
|
if (leftStandTrack.isTurnBackTrack()
|
||||||
&& !CollectionUtils.isEmpty(CalculateService.queryRoutePathsOnDirection(adjacentRightStandTrack, leftStandTrack, true, 10))) {
|
&& !CollectionUtils.isEmpty(
|
||||||
|
CalculateService.queryRoutePathsOnDirection(adjacentRightStandTrack, leftStandTrack, true,
|
||||||
|
10))) {
|
||||||
tbSections.add(leftStandTrack);
|
tbSections.add(leftStandTrack);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (rightStandTrack.isTurnBackTrack()
|
if (rightStandTrack.isTurnBackTrack()
|
||||||
&& !CollectionUtils.isEmpty(CalculateService.queryRoutePathsOnDirection(adjacentLeftStandTrack, rightStandTrack, false, 10))) {
|
&& !CollectionUtils.isEmpty(
|
||||||
|
CalculateService.queryRoutePathsOnDirection(adjacentLeftStandTrack, rightStandTrack,
|
||||||
|
false, 10))) {
|
||||||
tbSections.add(rightStandTrack);
|
tbSections.add(rightStandTrack);
|
||||||
}
|
}
|
||||||
if (leftStandTrack.isTurnBackTrack()
|
if (leftStandTrack.isTurnBackTrack()
|
||||||
&& !CollectionUtils.isEmpty(CalculateService.queryRoutePathsOnDirection(leftStandTrack, adjacentRightStandTrack, true, 10))) {
|
&& !CollectionUtils.isEmpty(
|
||||||
|
CalculateService.queryRoutePathsOnDirection(leftStandTrack, adjacentRightStandTrack, true,
|
||||||
|
10))) {
|
||||||
tbSections.add(leftStandTrack);
|
tbSections.add(leftStandTrack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -545,17 +611,20 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
Section standTrack = station.getNormalStand(right).get(0).getSection();
|
Section standTrack = station.getNormalStand(right).get(0).getSection();
|
||||||
return turnBackList.stream().filter(section -> !section.isNormalStandTrack())
|
return turnBackList.stream().filter(section -> !section.isNormalStandTrack())
|
||||||
.filter(section -> !CollectionUtils.isEmpty(CalculateService.queryRoutePathsOnDirection(standTrack, section, right, 10)))
|
.filter(section -> !CollectionUtils.isEmpty(
|
||||||
|
CalculateService.queryRoutePathsOnDirection(standTrack, section, right, 10)))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Collection<? extends Route> generateRouteLikeHa1(Signal signal, CodeGenerator routeCodeGenerator,
|
private Collection<? extends Route> generateRouteLikeHa1(Signal signal,
|
||||||
|
CodeGenerator routeCodeGenerator,
|
||||||
Map<String, List<RouteOverlap>> overlapMap,
|
Map<String, List<RouteOverlap>> overlapMap,
|
||||||
CodeGenerator overlapCodeGenerator,
|
CodeGenerator overlapCodeGenerator,
|
||||||
MapCiGenerateConfig config, List<String> errorList) {
|
MapCiGenerateConfig config, List<String> errorList) {
|
||||||
// 生成ATP信号
|
// 生成ATP信号
|
||||||
List<Route> routeList = new ArrayList<>();
|
List<Route> routeList = new ArrayList<>();
|
||||||
List<Route> atpRouteList = this.generateRoute(signal, routeCodeGenerator, overlapMap, overlapCodeGenerator, config, errorList);
|
List<Route> atpRouteList = this.generateRoute(signal, routeCodeGenerator, overlapMap,
|
||||||
|
overlapCodeGenerator, config, errorList);
|
||||||
if (!CollectionUtils.isEmpty(atpRouteList)) {
|
if (!CollectionUtils.isEmpty(atpRouteList)) {
|
||||||
for (Route route : atpRouteList) {
|
for (Route route : atpRouteList) {
|
||||||
route.setAtp(true);
|
route.setAtp(true);
|
||||||
@ -567,7 +636,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 生成地面信号
|
// 生成地面信号
|
||||||
List<Route> groundRouteList = this.generateGroundRoute(signal, routeCodeGenerator, overlapMap, overlapCodeGenerator, config, errorList);
|
List<Route> groundRouteList = this.generateGroundRoute(signal, routeCodeGenerator, overlapMap,
|
||||||
|
overlapCodeGenerator, config, errorList);
|
||||||
if (!CollectionUtils.isEmpty(groundRouteList)) {
|
if (!CollectionUtils.isEmpty(groundRouteList)) {
|
||||||
for (Route ground : groundRouteList) {
|
for (Route ground : groundRouteList) {
|
||||||
ground.setGround(true);
|
ground.setGround(true);
|
||||||
@ -578,14 +648,16 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
// 生成引导信号
|
// 生成引导信号
|
||||||
if (!CollectionUtils.isEmpty(groundRouteList)) {
|
if (!CollectionUtils.isEmpty(groundRouteList)) {
|
||||||
for (Route route : groundRouteList) {
|
for (Route route : groundRouteList) {
|
||||||
Route guide = this.buildGuideRouteFromGroundRoute(route, routeCodeGenerator, config.isRouteInterlockDoNotIncludeStandHoldTrain());
|
Route guide = this.buildGuideRouteFromGroundRoute(route, routeCodeGenerator,
|
||||||
|
config.isRouteInterlockDoNotIncludeStandHoldTrain());
|
||||||
routeList.add(guide);
|
routeList.add(guide);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return routeList;
|
return routeList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Route buildGuideRouteFromGroundRoute(Route route, CodeGenerator routeCodeGenerator, boolean noStandHold) {
|
private Route buildGuideRouteFromGroundRoute(Route route, CodeGenerator routeCodeGenerator,
|
||||||
|
boolean noStandHold) {
|
||||||
Route clone = new Route(routeCodeGenerator.next(), route.getName());
|
Route clone = new Route(routeCodeGenerator.next(), route.getName());
|
||||||
clone.setArs(false);
|
clone.setArs(false);
|
||||||
clone.setGuide(true);
|
clone.setGuide(true);
|
||||||
@ -616,7 +688,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
List<SectionPath> routePathList = new ArrayList<>();
|
List<SectionPath> routePathList = new ArrayList<>();
|
||||||
getRoutePathOf(signal, startSection, true,
|
getRoutePathOf(signal, startSection, true,
|
||||||
new SectionPath(right), routePathList, config, errorList);
|
new SectionPath(right), routePathList, config, errorList);
|
||||||
List<Route> routeList = this.buildRouteFromPath(signal, routeCodeGenerator, routePathList, overlapMap,
|
List<Route> routeList = this.buildRouteFromPath(signal, routeCodeGenerator, routePathList,
|
||||||
|
overlapMap,
|
||||||
overlapCodeGenerator, config, errorList);
|
overlapCodeGenerator, config, errorList);
|
||||||
return routeList;
|
return routeList;
|
||||||
}
|
}
|
||||||
@ -645,7 +718,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
return routeList;
|
return routeList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Route> buildRouteFromPath(Signal start, CodeGenerator routeCodeGenerator, List<SectionPath> routePathList,
|
private List<Route> buildRouteFromPath(Signal start, CodeGenerator routeCodeGenerator,
|
||||||
|
List<SectionPath> routePathList,
|
||||||
Map<String, List<RouteOverlap>> overlapMap,
|
Map<String, List<RouteOverlap>> overlapMap,
|
||||||
CodeGenerator overlapCodeGenerator,
|
CodeGenerator overlapCodeGenerator,
|
||||||
MapCiGenerateConfig config, List<String> errorList) {
|
MapCiGenerateConfig config, List<String> errorList) {
|
||||||
@ -690,8 +764,10 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
for (RouteOverlap routeOverlap : overlapList) {
|
for (RouteOverlap routeOverlap : overlapList) {
|
||||||
String code = routeCodeGenerator.next();
|
String code = routeCodeGenerator.next();
|
||||||
String name = String.format("%s-%s_%s", start.getName(), endName, index);
|
String name = String.format("%s-%s_%s", start.getName(), endName, index);
|
||||||
Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath, routeOverlap,
|
Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath,
|
||||||
config.isRouteSignalAlwaysGreen(), config.isRouteInterlockDoNotIncludeStandHoldTrain(), singleTrain);
|
routeOverlap,
|
||||||
|
config.isRouteSignalAlwaysGreen(),
|
||||||
|
config.isRouteInterlockDoNotIncludeStandHoldTrain(), singleTrain);
|
||||||
routeList.add(route);
|
routeList.add(route);
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
@ -699,7 +775,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
String code = routeCodeGenerator.next();
|
String code = routeCodeGenerator.next();
|
||||||
String name = String.format("%s-%s", start.getName(), endName);
|
String name = String.format("%s-%s", start.getName(), endName);
|
||||||
Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath, null,
|
Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath, null,
|
||||||
config.isRouteSignalAlwaysGreen(), config.isRouteInterlockDoNotIncludeStandHoldTrain(), singleTrain);
|
config.isRouteSignalAlwaysGreen(),
|
||||||
|
config.isRouteInterlockDoNotIncludeStandHoldTrain(), singleTrain);
|
||||||
routeList.add(route);
|
routeList.add(route);
|
||||||
} else {
|
} else {
|
||||||
String code = routeCodeGenerator.next();
|
String code = routeCodeGenerator.next();
|
||||||
@ -709,12 +786,14 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
overlap = overlapList.get(0);
|
overlap = overlapList.get(0);
|
||||||
}
|
}
|
||||||
Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath, overlap,
|
Route route = this.buildRoute(code, name, start, end, clickEnd, sectionPath, overlap,
|
||||||
config.isRouteSignalAlwaysGreen(), config.isRouteInterlockDoNotIncludeStandHoldTrain(), singleTrain);
|
config.isRouteSignalAlwaysGreen(),
|
||||||
|
config.isRouteInterlockDoNotIncludeStandHoldTrain(), singleTrain);
|
||||||
routeList.add(route);
|
routeList.add(route);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
errorList.add(String.format("以[%s(%s)]为始端信号的进路未搜索到", start.getName(), start.getCode()));
|
errorList.add(
|
||||||
|
String.format("以[%s(%s)]为始端信号的进路未搜索到", start.getName(), start.getCode()));
|
||||||
}
|
}
|
||||||
return routeList;
|
return routeList;
|
||||||
}
|
}
|
||||||
@ -724,11 +803,13 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
boolean right = start.isRight();
|
boolean right = start.isRight();
|
||||||
Section startSection = start.getSection().getSectionOf(right);
|
Section startSection = start.getSection().getSectionOf(right);
|
||||||
List<SectionPath> routePathList = new ArrayList<>();
|
List<SectionPath> routePathList = new ArrayList<>();
|
||||||
getRoutePathOfDepot(start, startSection, new SectionPath(right), routePathList, config, errorList);
|
getRoutePathOfDepot(start, startSection, new SectionPath(right), routePathList, config,
|
||||||
|
errorList);
|
||||||
return buildRouteFromPathDepot(start, routeCodeGenerator, routePathList, config, errorList);
|
return buildRouteFromPathDepot(start, routeCodeGenerator, routePathList, config, errorList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Route> buildRouteFromPathDepot(Signal startSignal, CodeGenerator routeCodeGenerator, List<SectionPath> routePathList,
|
private List<Route> buildRouteFromPathDepot(Signal startSignal, CodeGenerator routeCodeGenerator,
|
||||||
|
List<SectionPath> routePathList,
|
||||||
MapCiGenerateConfig config, List<String> errorList) {
|
MapCiGenerateConfig config, List<String> errorList) {
|
||||||
boolean right = startSignal.isRight();
|
boolean right = startSignal.isRight();
|
||||||
List<Route> routeList = new ArrayList<>();
|
List<Route> routeList = new ArrayList<>();
|
||||||
@ -741,16 +822,20 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
Signal.SignalType endSignalType = Objects.nonNull(endSignal) ? endSignal.getType() : null;
|
Signal.SignalType endSignalType = Objects.nonNull(endSignal) ? endSignal.getType() : null;
|
||||||
// 反向信号机
|
// 反向信号机
|
||||||
Signal endOpSignal = lastSection.getSignalOf(!right);
|
Signal endOpSignal = lastSection.getSignalOf(!right);
|
||||||
Signal.SignalType endOpSignalType = Objects.nonNull(endOpSignal) ? endOpSignal.getType() : null;
|
Signal.SignalType endOpSignalType =
|
||||||
|
Objects.nonNull(endOpSignal) ? endOpSignal.getType() : null;
|
||||||
Section nextSection = lastSection.getSectionOf(right);
|
Section nextSection = lastSection.getSectionOf(right);
|
||||||
// 下个区段反向信号机
|
// 下个区段反向信号机
|
||||||
Signal nextOpSignal = Objects.nonNull(nextSection) ? nextSection.getSignalOf(!right) : null;
|
Signal nextOpSignal = Objects.nonNull(nextSection) ? nextSection.getSignalOf(!right) : null;
|
||||||
Signal clickEnd;
|
Signal clickEnd;
|
||||||
|
|
||||||
SignalAspect signalAspect;
|
SignalAspect signalAspect;
|
||||||
if ((Signal.SignalType.SHUNTING2.equals(endSignalType) && Signal.SignalType.SHUNTING2.equals(startSignalType))
|
if ((Signal.SignalType.SHUNTING2.equals(endSignalType)
|
||||||
|| (Signal.SignalType.SHUNTING2.equals(endSignalType) && Signal.SignalType.INBOUND.equals(startSignalType))
|
&& Signal.SignalType.SHUNTING2.equals(startSignalType))
|
||||||
|| (Signal.SignalType.OUTBOUND.equals(endSignalType) && Signal.SignalType.SHUNTING2.equals(startSignalType))) {
|
|| (Signal.SignalType.SHUNTING2.equals(endSignalType)
|
||||||
|
&& Signal.SignalType.INBOUND.equals(startSignalType))
|
||||||
|
|| (Signal.SignalType.OUTBOUND.equals(endSignalType)
|
||||||
|
&& Signal.SignalType.SHUNTING2.equals(startSignalType))) {
|
||||||
// 列车进路
|
// 列车进路
|
||||||
signalAspect = SignalAspect.Y;
|
signalAspect = SignalAspect.Y;
|
||||||
if (Objects.nonNull(endOpSignal) && (Signal.SignalType.SHUNTING2.equals(endOpSignalType)
|
if (Objects.nonNull(endOpSignal) && (Signal.SignalType.SHUNTING2.equals(endOpSignalType)
|
||||||
@ -774,15 +859,18 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String endName = Objects.nonNull(endSignal) ? endSignal.getShowName() : lastSection.getName();
|
String endName =
|
||||||
|
Objects.nonNull(endSignal) ? endSignal.getShowName() : lastSection.getName();
|
||||||
// 构建进路
|
// 构建进路
|
||||||
String code = routeCodeGenerator.next();
|
String code = routeCodeGenerator.next();
|
||||||
String name = String.format("%s-%s", startSignal.getShowName(), endName);
|
String name = String.format("%s-%s", startSignal.getShowName(), endName);
|
||||||
Route route = this.buildRouteDepot(code, name, startSignal, endSignal, clickEnd, sectionPath, signalAspect);
|
Route route = this.buildRouteDepot(code, name, startSignal, endSignal, clickEnd,
|
||||||
|
sectionPath, signalAspect);
|
||||||
routeList.add(route);
|
routeList.add(route);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
errorList.add(String.format("以[%s(%s)]为始端信号(%s)的进路未搜索到", startSignal.getShowName(),
|
errorList.add(
|
||||||
|
String.format("以[%s(%s)]为始端信号(%s)的进路未搜索到", startSignal.getShowName(),
|
||||||
startSignal.getCode(), startSignal.getType()));
|
startSignal.getCode(), startSignal.getType()));
|
||||||
}
|
}
|
||||||
return routeList;
|
return routeList;
|
||||||
@ -824,7 +912,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
* @param generatedRouteList
|
* @param generatedRouteList
|
||||||
*/
|
*/
|
||||||
private void deleteBaseRoute(List<Signal> signalList, List<Route> generatedRouteList) {
|
private void deleteBaseRoute(List<Signal> signalList, List<Route> generatedRouteList) {
|
||||||
Map<String, Signal> signalMap = signalList.stream().collect(Collectors.toMap(Signal::getCode, Function.identity()));
|
Map<String, Signal> signalMap = signalList.stream()
|
||||||
|
.collect(Collectors.toMap(Signal::getCode, Function.identity()));
|
||||||
List<Route> removeList = new ArrayList<>();
|
List<Route> removeList = new ArrayList<>();
|
||||||
for (Route route : generatedRouteList) {
|
for (Route route : generatedRouteList) {
|
||||||
if (route.isTurnBack()) { // 折返进路不处理
|
if (route.isTurnBack()) { // 折返进路不处理
|
||||||
@ -874,7 +963,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
Switch linkedSwitch = aSwitch.queryLinkedSwitch();
|
Switch linkedSwitch = aSwitch.queryLinkedSwitch();
|
||||||
if (Objects.nonNull(linkedSwitch)) {
|
if (Objects.nonNull(linkedSwitch)) {
|
||||||
// 联动道岔存在,联动道岔定位即为一级侧防
|
// 联动道岔存在,联动道岔定位即为一级侧防
|
||||||
RouteFls.FlsElement flsElement = new RouteFls.FlsElement(new SwitchElement(linkedSwitch, true));
|
RouteFls.FlsElement flsElement = new RouteFls.FlsElement(
|
||||||
|
new SwitchElement(linkedSwitch, true));
|
||||||
fls.addLevel1(flsElement);
|
fls.addLevel1(flsElement);
|
||||||
} else {
|
} else {
|
||||||
// 无联动道岔,则从道岔C区段向外查询,第一个反向信号机和经过的路径道岔位置构成一级侧防
|
// 无联动道岔,则从道岔C区段向外查询,第一个反向信号机和经过的路径道岔位置构成一级侧防
|
||||||
@ -883,8 +973,10 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
// 尽头区段,不需构成侧防
|
// 尽头区段,不需构成侧防
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
BusinessExceptionAssertEnum.DATA_ERROR.assertNotTrue(c.getLeftSection() != null && c.getRightSection() != null,
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotTrue(
|
||||||
String.format("道岔区段[%s]关联区段关系异常,只能最多一边关联,实际两边都关联了区段", c.debugStr()));
|
c.getLeftSection() != null && c.getRightSection() != null,
|
||||||
|
String.format("道岔区段[%s]关联区段关系异常,只能最多一边关联,实际两边都关联了区段",
|
||||||
|
c.debugStr()));
|
||||||
boolean right = true;
|
boolean right = true;
|
||||||
Section startSection = c.getRightSection();
|
Section startSection = c.getRightSection();
|
||||||
if (c.getLeftSection() != null) { // 左向区段存在,方向向左
|
if (c.getLeftSection() != null) { // 左向区段存在,方向向左
|
||||||
@ -910,7 +1002,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
relSwitch.isC(firstSection) && relSwitch.isA(pre))) {
|
relSwitch.isC(firstSection) && relSwitch.isA(pre))) {
|
||||||
normal = false;
|
normal = false;
|
||||||
}
|
}
|
||||||
flsElement = new RouteFls.FlsElement(oppositeSignal, new SwitchElement(relSwitch, normal));
|
flsElement = new RouteFls.FlsElement(oppositeSignal,
|
||||||
|
new SwitchElement(relSwitch, normal));
|
||||||
} else {
|
} else {
|
||||||
flsElement = new RouteFls.FlsElement(oppositeSignal);
|
flsElement = new RouteFls.FlsElement(oppositeSignal);
|
||||||
}
|
}
|
||||||
@ -921,7 +1014,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (next != null) {
|
if (next != null) {
|
||||||
if (next.isSwitchTrack() && next.getRelSwitch().isC(next)) {
|
if (next.isSwitchTrack() && next.getRelSwitch().isC(next)) {
|
||||||
// C区段,一级侧防为此道岔定位
|
// C区段,一级侧防为此道岔定位
|
||||||
RouteFls.FlsElement flsElement = new RouteFls.FlsElement(new SwitchElement(next.getRelSwitch(), true));
|
RouteFls.FlsElement flsElement = new RouteFls.FlsElement(
|
||||||
|
new SwitchElement(next.getRelSwitch(), true));
|
||||||
fls.addLevel1(flsElement);
|
fls.addLevel1(flsElement);
|
||||||
pre = null;
|
pre = null;
|
||||||
} else {
|
} else {
|
||||||
@ -966,8 +1060,10 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
// 尽头区段,不需构成侧防
|
// 尽头区段,不需构成侧防
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
BusinessExceptionAssertEnum.DATA_ERROR.assertNotTrue(b.getLeftSection() != null && b.getRightSection() != null,
|
BusinessExceptionAssertEnum.DATA_ERROR.assertNotTrue(
|
||||||
String.format("道岔区段[%s]关联区段关系异常,只能最多一边关联,实际两边都关联了区段", b.debugStr()));
|
b.getLeftSection() != null && b.getRightSection() != null,
|
||||||
|
String.format("道岔区段[%s]关联区段关系异常,只能最多一边关联,实际两边都关联了区段",
|
||||||
|
b.debugStr()));
|
||||||
boolean right = true;
|
boolean right = true;
|
||||||
Section startSection = b.getRightSection();
|
Section startSection = b.getRightSection();
|
||||||
if (b.getLeftSection() != null) { // 左向区段存在,方向向左
|
if (b.getLeftSection() != null) { // 左向区段存在,方向向左
|
||||||
@ -990,9 +1086,11 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
!Objects.equals(aSwitch.queryAxleRelatedOtherSwitch(), relSwitch)) {
|
!Objects.equals(aSwitch.queryAxleRelatedOtherSwitch(), relSwitch)) {
|
||||||
Switch remoteSwitch = relSwitch.queryAxleRelatedOtherSwitch();
|
Switch remoteSwitch = relSwitch.queryAxleRelatedOtherSwitch();
|
||||||
if (Objects.nonNull(remoteSwitch)) {
|
if (Objects.nonNull(remoteSwitch)) {
|
||||||
flsElement = new RouteFls.FlsElement(oppositeSignal, new SwitchElement(remoteSwitch, true));
|
flsElement = new RouteFls.FlsElement(oppositeSignal,
|
||||||
|
new SwitchElement(remoteSwitch, true));
|
||||||
} else {
|
} else {
|
||||||
flsElement = new RouteFls.FlsElement(oppositeSignal, new SwitchElement(relSwitch, true));
|
flsElement = new RouteFls.FlsElement(oppositeSignal,
|
||||||
|
new SwitchElement(relSwitch, true));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
flsElement = new RouteFls.FlsElement(oppositeSignal);
|
flsElement = new RouteFls.FlsElement(oppositeSignal);
|
||||||
@ -1003,7 +1101,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (next != null) {
|
if (next != null) {
|
||||||
if (next.isSwitchTrack() && next.getRelSwitch().isC(next)) {
|
if (next.isSwitchTrack() && next.getRelSwitch().isC(next)) {
|
||||||
// C区段,一级侧防为此道岔定位
|
// C区段,一级侧防为此道岔定位
|
||||||
RouteFls.FlsElement flsElement = new RouteFls.FlsElement(new SwitchElement(next.getRelSwitch(), true));
|
RouteFls.FlsElement flsElement = new RouteFls.FlsElement(
|
||||||
|
new SwitchElement(next.getRelSwitch(), true));
|
||||||
fls.addLevel1(flsElement);
|
fls.addLevel1(flsElement);
|
||||||
} else {
|
} else {
|
||||||
sectionStack.push(next);
|
sectionStack.push(next);
|
||||||
@ -1063,13 +1162,18 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (station.getSn() > min && station.getSn() < max) {
|
if (station.getSn() > min && station.getSn() < max) {
|
||||||
BusinessExceptionAssertEnum.CI_GENERATE_ERROR
|
BusinessExceptionAssertEnum.CI_GENERATE_ERROR
|
||||||
.assertTrue(station.isDepot() || station.isNoDepotAndNoNormalStand(),
|
.assertTrue(station.isDepot() || station.isNoDepotAndNoNormalStand(),
|
||||||
String.format("交路[%s]下的站间运行等级[%s]数据间隔车站大于1且间隔中的车站[%s]是正常可停靠车站",
|
String.format(
|
||||||
|
"交路[%s]下的站间运行等级[%s]数据间隔车站大于1且间隔中的车站[%s]是正常可停靠车站",
|
||||||
String.format("%s(%s)->%s(%s)",
|
String.format("%s(%s)->%s(%s)",
|
||||||
routingStartSection.getStation().getName(), routingStartSection.getName(),
|
routingStartSection.getStation().getName(),
|
||||||
routingEndSection.getStation().getName(), routingEndSection.getName()),
|
routingStartSection.getName(),
|
||||||
|
routingEndSection.getStation().getName(),
|
||||||
|
routingEndSection.getName()),
|
||||||
String.format("%s(%s(%s))->%s(%s(%s))",
|
String.format("%s(%s(%s))->%s(%s(%s))",
|
||||||
startSection.getStation().getName(), startSection.getName(), startSection.getCode(),
|
startSection.getStation().getName(), startSection.getName(),
|
||||||
endSection.getStation().getName(), endSection.getName(), endSection.getCode()),
|
startSection.getCode(),
|
||||||
|
endSection.getStation().getName(), endSection.getName(),
|
||||||
|
endSection.getCode()),
|
||||||
station.getName()));
|
station.getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1081,14 +1185,17 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
runLevelVO.setEndSectionCode(endSection.getCode());
|
runLevelVO.setEndSectionCode(endSection.getCode());
|
||||||
runLevelVO.setEndStationCode(endSection.getStation().getCode());
|
runLevelVO.setEndStationCode(endSection.getStation().getCode());
|
||||||
runLevelVO.setRight(right);
|
runLevelVO.setRight(right);
|
||||||
List<RoutePath> routePaths = CalculateService.queryRoutePathsOnDirection(startSection, endSection, right, 10);
|
List<RoutePath> routePaths = CalculateService.queryRoutePathsOnDirection(startSection,
|
||||||
|
endSection, right, 10);
|
||||||
if (CollectionUtils.isEmpty(routePaths)) {
|
if (CollectionUtils.isEmpty(routePaths)) {
|
||||||
// 未找到,反方向再找
|
// 未找到,反方向再找
|
||||||
routePaths = CalculateService.queryRoutePathsOnDirection(startSection, endSection, !right, 10);
|
routePaths = CalculateService.queryRoutePathsOnDirection(startSection, endSection, !right,
|
||||||
|
10);
|
||||||
if (!CollectionUtils.isEmpty(routePaths)) {
|
if (!CollectionUtils.isEmpty(routePaths)) {
|
||||||
log.info(String.format("站间运行等级[%s]与交路[%s]方向相反,实际为[%s]",
|
log.info(String.format("站间运行等级[%s]与交路[%s]方向相反,实际为[%s]",
|
||||||
String.format("%s(%s(%s))->%s(%s(%s))",
|
String.format("%s(%s(%s))->%s(%s(%s))",
|
||||||
startSection.getStation().getName(), startSection.getName(), startSection.getCode(),
|
startSection.getStation().getName(), startSection.getName(),
|
||||||
|
startSection.getCode(),
|
||||||
endSection.getStation().getName(), endSection.getName(), endSection.getCode()),
|
endSection.getStation().getName(), endSection.getName(), endSection.getCode()),
|
||||||
String.format("%s(%s)->%s(%s)",
|
String.format("%s(%s)->%s(%s)",
|
||||||
routingStartSection.getStation().getName(), routingStartSection.getName(),
|
routingStartSection.getStation().getName(), routingStartSection.getName(),
|
||||||
@ -1098,8 +1205,10 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isEmpty(routePaths)) {
|
if (CollectionUtils.isEmpty(routePaths)) {
|
||||||
log.warn(String.format("站间运行等级数据生成失败:没有找到[%s(%s) ——> %s(%s)]对应方向[%s]的站间",
|
log.warn(String.format(
|
||||||
startSection.getStation().getName(), startSection.getName(), endSection.getStation().getName(), endSection.getName(), right ? "右向" : "左向"));
|
"站间运行等级数据生成失败:没有找到[%s(%s) ——> %s(%s)]对应方向[%s]的站间",
|
||||||
|
startSection.getStation().getName(), startSection.getName(),
|
||||||
|
endSection.getStation().getName(), endSection.getName(), right ? "右向" : "左向"));
|
||||||
// errorList.add(String.format("站间运行等级数据生成失败:没有找到[%s(%s) ——> %s(%s)]对应方向[%s]的站间",
|
// errorList.add(String.format("站间运行等级数据生成失败:没有找到[%s(%s) ——> %s(%s)]对应方向[%s]的站间",
|
||||||
// startSection.getStation().getName(), startSection.getName(), endSection.getStation().getName(), endSection.getName(), right ? "右向" : "左向"));
|
// startSection.getStation().getName(), startSection.getName(), endSection.getStation().getName(), endSection.getName(), right ? "右向" : "左向"));
|
||||||
continue;
|
continue;
|
||||||
@ -1117,7 +1226,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buildAutoSignalRouteConflict(List<AutoSignal> autoSignalList, List<Route> generatedRouteList) {
|
private void buildAutoSignalRouteConflict(List<AutoSignal> autoSignalList,
|
||||||
|
List<Route> generatedRouteList) {
|
||||||
if (CollectionUtils.isEmpty(autoSignalList)) {
|
if (CollectionUtils.isEmpty(autoSignalList)) {
|
||||||
// 自动信号为空,返回
|
// 自动信号为空,返回
|
||||||
return;
|
return;
|
||||||
@ -1195,7 +1305,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Objects.isNull(basicRoute)) {
|
if (Objects.isNull(basicRoute)) {
|
||||||
errorList.add(String.format("自动折返数据生成失败:折返进路[%s(%s)]的反向基本进路不存在",
|
errorList.add(
|
||||||
|
String.format("自动折返数据生成失败:折返进路[%s(%s)]的反向基本进路不存在",
|
||||||
tbRoute.getName(), tbRoute.getCode()));
|
tbRoute.getName(), tbRoute.getCode()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1310,8 +1421,12 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
String code = routeCodeGenerator.next();
|
String code = routeCodeGenerator.next();
|
||||||
Route tbRoute = new Route(code, name);
|
Route tbRoute = new Route(code, name);
|
||||||
// 拷贝进路其他属性
|
// 拷贝进路其他属性
|
||||||
this.copyToTurnBackRoute(route, tbRoute, config.isRouteInterlockDoNotIncludeStandHoldTrain());
|
this.copyToTurnBackRoute(route, tbRoute,
|
||||||
|
config.isRouteInterlockDoNotIncludeStandHoldTrain());
|
||||||
tbRoute.setTurnBack(true);
|
tbRoute.setTurnBack(true);
|
||||||
|
if (config.isTbRouteNameUseEndOppositeSignalName()) {
|
||||||
|
tbRoute.setDestinationButtonSignal(endOppositeSignal);
|
||||||
|
}
|
||||||
// 如果生成进路按钮,折返进路按钮默认为终端信号机
|
// 如果生成进路按钮,折返进路按钮默认为终端信号机
|
||||||
if (config.isRouteButton()) {
|
if (config.isRouteButton()) {
|
||||||
tbRoute.setDestinationButtonSignal(route.getDestination());
|
tbRoute.setDestinationButtonSignal(route.getDestination());
|
||||||
@ -1424,7 +1539,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
*/
|
*/
|
||||||
private Route buildRoute(String code, String name,
|
private Route buildRoute(String code, String name,
|
||||||
Signal start, Signal end, Signal endButton,
|
Signal start, Signal end, Signal endButton,
|
||||||
SectionPath sectionPath, RouteOverlap routeOverlap, boolean alwaysGreen, boolean noStandHold, boolean singleTrain) {
|
SectionPath sectionPath, RouteOverlap routeOverlap, boolean alwaysGreen, boolean noStandHold,
|
||||||
|
boolean singleTrain) {
|
||||||
Route route = new Route(code, name);
|
Route route = new Route(code, name);
|
||||||
route.setInterlockStation(start.getInterlockStation());
|
route.setInterlockStation(start.getInterlockStation());
|
||||||
route.setStart(start);
|
route.setStart(start);
|
||||||
@ -1447,7 +1563,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
route.setAspect(SignalAspect.W);
|
route.setAspect(SignalAspect.W);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw BusinessExceptionAssertEnum.DATA_ERROR.exception(String.format("信号机[%s]型号[%s]不正确",
|
throw BusinessExceptionAssertEnum.DATA_ERROR.exception(
|
||||||
|
String.format("信号机[%s]型号[%s]不正确",
|
||||||
start.debugStr(), start.getSignalModel()));
|
start.debugStr(), start.getSignalModel()));
|
||||||
}
|
}
|
||||||
route.setTurnBack(false);
|
route.setTurnBack(false);
|
||||||
@ -1641,7 +1758,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
List<SectionPath> triggerPathList = new ArrayList<>();
|
List<SectionPath> triggerPathList = new ArrayList<>();
|
||||||
Section section = signalSection;
|
Section section = signalSection;
|
||||||
// 反方向找触发区段
|
// 反方向找触发区段
|
||||||
this.getOverlapTriggerPathOf(end, section, !right, new SectionPath(!right), triggerPathList);
|
this.getOverlapTriggerPathOf(end, section, !right, new SectionPath(!right),
|
||||||
|
triggerPathList);
|
||||||
routeOverlap.setTriggerPathList(triggerPathList);
|
routeOverlap.setTriggerPathList(triggerPathList);
|
||||||
}
|
}
|
||||||
overlapList.add(routeOverlap);
|
overlapList.add(routeOverlap);
|
||||||
@ -1714,7 +1832,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
getOverlapTriggerPathOf(end, relSwitch.getA().getSectionOf(right), right,
|
getOverlapTriggerPathOf(end, relSwitch.getA().getSectionOf(right), right,
|
||||||
tempPath, triggerPathList);
|
tempPath, triggerPathList);
|
||||||
} else {
|
} else {
|
||||||
log.error(String.format("地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
log.error(String.format(
|
||||||
|
"地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
||||||
section.getName(), section.getCode(),
|
section.getName(), section.getCode(),
|
||||||
relSwitch.getName(), relSwitch.getCode()));
|
relSwitch.getName(), relSwitch.getCode()));
|
||||||
return;
|
return;
|
||||||
@ -1753,7 +1872,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
} else if (Objects.isNull(section)) { // 如果区段不存在,就没有延续保护区段
|
} else if (Objects.isNull(section)) { // 如果区段不存在,就没有延续保护区段
|
||||||
return;
|
return;
|
||||||
} else if (config.isOverlapOnlySwitch() && !section.isSwitchTrack()) { // 如果只构建道岔延续保护,不是道岔区段,不构建,返回
|
} else if (config.isOverlapOnlySwitch()
|
||||||
|
&& !section.isSwitchTrack()) { // 如果只构建道岔延续保护,不是道岔区段,不构建,返回
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tempPath.addSection(section);
|
tempPath.addSection(section);
|
||||||
@ -1785,7 +1905,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
// if (config.isCoupleSwitch()) {
|
// if (config.isCoupleSwitch()) {
|
||||||
// 如果是同一道岔计轴,添加另一道岔定位
|
// 如果是同一道岔计轴,添加另一道岔定位
|
||||||
Switch otherSwitch = relSwitch.queryAxleRelatedOtherSwitch();
|
Switch otherSwitch = relSwitch.queryAxleRelatedOtherSwitch();
|
||||||
if (!config.isGenerateFls() && Objects.nonNull(otherSwitch) && relSwitch.isBConnectTo(otherSwitch)) {
|
if (!config.isGenerateFls() && Objects.nonNull(otherSwitch) && relSwitch.isBConnectTo(
|
||||||
|
otherSwitch)) {
|
||||||
rpPath.addSwitchElement(new SwitchElement(otherSwitch, true));
|
rpPath.addSwitchElement(new SwitchElement(otherSwitch, true));
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
@ -1815,13 +1936,15 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
getOverlapPathOf(relSwitch.getA().getSectionOf(right), right,
|
getOverlapPathOf(relSwitch.getA().getSectionOf(right), right,
|
||||||
tempPath, overlapPathList, config, errorList);
|
tempPath, overlapPathList, config, errorList);
|
||||||
} else {
|
} else {
|
||||||
errorList.add(String.format("地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
errorList.add(String.format(
|
||||||
|
"地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
||||||
section.getName(), section.getCode(),
|
section.getName(), section.getCode(),
|
||||||
relSwitch.getName(), relSwitch.getCode()));
|
relSwitch.getName(), relSwitch.getCode()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getOverlapPathOf(section.getSectionOf(right), right, tempPath, overlapPathList, config, errorList);
|
getOverlapPathOf(section.getSectionOf(right), right, tempPath, overlapPathList, config,
|
||||||
|
errorList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1883,7 +2006,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (!config.isGenerateFls() && Objects.nonNull(linkedSwitch)) {
|
if (!config.isGenerateFls() && Objects.nonNull(linkedSwitch)) {
|
||||||
npPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
npPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
||||||
}
|
}
|
||||||
getRoutePathOf(startSignal, relSwitch.getB().getSectionOf(right), ground, npPath, routePathList, config, errorList);
|
getRoutePathOf(startSignal, relSwitch.getB().getSectionOf(right), ground, npPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
SectionPath rpPath = tempPath.cloneNew();// 反位路径
|
SectionPath rpPath = tempPath.cloneNew();// 反位路径
|
||||||
rpPath.addSection(relSwitch.getC());
|
rpPath.addSection(relSwitch.getC());
|
||||||
rpPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
rpPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
||||||
@ -1892,7 +2016,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
// }
|
// }
|
||||||
// 如果是同一道岔计轴,添加另一道岔定位
|
// 如果是同一道岔计轴,添加另一道岔定位
|
||||||
Switch otherSwitch = relSwitch.queryAxleRelatedOtherSwitch();
|
Switch otherSwitch = relSwitch.queryAxleRelatedOtherSwitch();
|
||||||
if (!config.isGenerateFls() && Objects.nonNull(otherSwitch) && relSwitch.isBConnectTo(otherSwitch)) {
|
if (!config.isGenerateFls() && Objects.nonNull(otherSwitch) && relSwitch.isBConnectTo(
|
||||||
|
otherSwitch)) {
|
||||||
rpPath.addSwitchElement(new SwitchElement(otherSwitch, true));
|
rpPath.addSwitchElement(new SwitchElement(otherSwitch, true));
|
||||||
// 另一道岔联动道岔也需要
|
// 另一道岔联动道岔也需要
|
||||||
Switch otherLinkSwitch = otherSwitch.queryLinkedSwitch();
|
Switch otherLinkSwitch = otherSwitch.queryLinkedSwitch();
|
||||||
@ -1900,7 +2025,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
rpPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
rpPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getRoutePathOf(startSignal, relSwitch.getC().getSectionOf(right), ground, rpPath, routePathList, config, errorList);
|
getRoutePathOf(startSignal, relSwitch.getC().getSectionOf(right), ground, rpPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
} else if (relSwitch.isB(section)) {
|
} else if (relSwitch.isB(section)) {
|
||||||
// 只有一条路径,从B->A,道岔定位
|
// 只有一条路径,从B->A,道岔定位
|
||||||
tempPath.addSection(relSwitch.getA());
|
tempPath.addSection(relSwitch.getA());
|
||||||
@ -1909,7 +2035,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (!config.isGenerateFls() && Objects.nonNull(linkedSwitch)) {
|
if (!config.isGenerateFls() && Objects.nonNull(linkedSwitch)) {
|
||||||
tempPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
tempPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
||||||
}
|
}
|
||||||
getRoutePathOf(startSignal, relSwitch.getA().getSectionOf(right), ground, tempPath, routePathList, config, errorList);
|
getRoutePathOf(startSignal, relSwitch.getA().getSectionOf(right), ground, tempPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
} else if (relSwitch.isC(section)) {
|
} else if (relSwitch.isC(section)) {
|
||||||
// 只有一条路径,从C->A,道岔反位
|
// 只有一条路径,从C->A,道岔反位
|
||||||
tempPath.addSection(relSwitch.getA());
|
tempPath.addSection(relSwitch.getA());
|
||||||
@ -1927,9 +2054,11 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
tempPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
tempPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getRoutePathOf(startSignal, relSwitch.getA().getSectionOf(right), ground, tempPath, routePathList, config, errorList);
|
getRoutePathOf(startSignal, relSwitch.getA().getSectionOf(right), ground, tempPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
} else {
|
} else {
|
||||||
errorList.add(String.format("地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
errorList.add(String.format(
|
||||||
|
"地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
||||||
section.getName(), section.getCode(),
|
section.getName(), section.getCode(),
|
||||||
relSwitch.getName(), relSwitch.getCode()));
|
relSwitch.getName(), relSwitch.getCode()));
|
||||||
return;
|
return;
|
||||||
@ -1957,7 +2086,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
if (Objects.isNull(section)) {
|
if (Objects.isNull(section)) {
|
||||||
Signal lastSignal = tempPath.getLastSection().getSignalOf(!right);
|
Signal lastSignal = tempPath.getLastSection().getSignalOf(!right);
|
||||||
if (Objects.nonNull(lastSignal) && lastSignal.getType().equals(Signal.SignalType.SHUNTING2)) {
|
if (Objects.nonNull(lastSignal) && lastSignal.getType()
|
||||||
|
.equals(Signal.SignalType.SHUNTING2)) {
|
||||||
routePathList.add(tempPath);
|
routePathList.add(tempPath);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -1997,7 +2127,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (Objects.nonNull(linkedSwitch)) {
|
if (Objects.nonNull(linkedSwitch)) {
|
||||||
npPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
npPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
||||||
}
|
}
|
||||||
getRoutePathOfDepot(startSignal, relSwitch.getB().getSectionOf(right), npPath, routePathList, config, errorList);
|
getRoutePathOfDepot(startSignal, relSwitch.getB().getSectionOf(right), npPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
SectionPath rpPath = tempPath.cloneNew();// 反位路径
|
SectionPath rpPath = tempPath.cloneNew();// 反位路径
|
||||||
rpPath.addSection(relSwitch.getC());
|
rpPath.addSection(relSwitch.getC());
|
||||||
rpPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
rpPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
||||||
@ -2011,7 +2142,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
rpPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
rpPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getRoutePathOfDepot(startSignal, relSwitch.getC().getSectionOf(right), rpPath, routePathList, config, errorList);
|
getRoutePathOfDepot(startSignal, relSwitch.getC().getSectionOf(right), rpPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
} else if (relSwitch.isB(section)) {
|
} else if (relSwitch.isB(section)) {
|
||||||
// 只有一条路径,从B->A,道岔定位
|
// 只有一条路径,从B->A,道岔定位
|
||||||
tempPath.addSection(relSwitch.getA());
|
tempPath.addSection(relSwitch.getA());
|
||||||
@ -2020,7 +2152,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
if (Objects.nonNull(linkedSwitch)) {
|
if (Objects.nonNull(linkedSwitch)) {
|
||||||
tempPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
tempPath.addSwitchElement(new SwitchElement(linkedSwitch, true));
|
||||||
}
|
}
|
||||||
getRoutePathOfDepot(startSignal, relSwitch.getA().getSectionOf(right), tempPath, routePathList, config, errorList);
|
getRoutePathOfDepot(startSignal, relSwitch.getA().getSectionOf(right), tempPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
} else if (relSwitch.isC(section)) {
|
} else if (relSwitch.isC(section)) {
|
||||||
// 只有一条路径,从C->A,道岔反位
|
// 只有一条路径,从C->A,道岔反位
|
||||||
tempPath.addSection(relSwitch.getA());
|
tempPath.addSection(relSwitch.getA());
|
||||||
@ -2035,9 +2168,11 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
tempPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
tempPath.addSwitchElement(new SwitchElement(otherLinkSwitch, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getRoutePathOfDepot(startSignal, relSwitch.getA().getSectionOf(right), tempPath, routePathList, config, errorList);
|
getRoutePathOfDepot(startSignal, relSwitch.getA().getSectionOf(right), tempPath,
|
||||||
|
routePathList, config, errorList);
|
||||||
} else {
|
} else {
|
||||||
errorList.add(String.format("地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
errorList.add(String.format(
|
||||||
|
"地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
||||||
section.getName(), section.getCode(),
|
section.getName(), section.getCode(),
|
||||||
relSwitch.getName(), relSwitch.getCode()));
|
relSwitch.getName(), relSwitch.getCode()));
|
||||||
return;
|
return;
|
||||||
@ -2070,7 +2205,9 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
List<Section> logicApproachList = new ArrayList<>();
|
List<Section> logicApproachList = new ArrayList<>();
|
||||||
List<Section> sectionList = sectionPath.getSectionList();
|
List<Section> sectionList = sectionPath.getSectionList();
|
||||||
for (Section phySection : sectionList) {
|
for (Section phySection : sectionList) {
|
||||||
if (len >= 600) break;
|
if (len >= 600) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (phySection.isSwitchTrack()) {
|
if (phySection.isSwitchTrack()) {
|
||||||
len += phySection.getLen();
|
len += phySection.getLen();
|
||||||
logicApproachList.add(phySection);
|
logicApproachList.add(phySection);
|
||||||
@ -2089,7 +2226,9 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
for (Section logic : sortedList) {
|
for (Section logic : sortedList) {
|
||||||
logicApproachList.add(logic);
|
logicApproachList.add(logic);
|
||||||
len += logic.getLen();
|
len += logic.getLen();
|
||||||
if (len >= 600) break;
|
if (len >= 600) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sectionPath.setLogicList(logicApproachList);
|
sectionPath.setLogicList(logicApproachList);
|
||||||
@ -2098,7 +2237,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
signal.setRouteReleaseTime(config.getRouteReleaseTime());
|
signal.setRouteReleaseTime(config.getRouteReleaseTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getApproachPathOf(Section section, boolean right, Float distance, SectionPath tempPath, MapCiGenerateConfig config, List<SectionPath> results) {
|
public void getApproachPathOf(Section section, boolean right, Float distance,
|
||||||
|
SectionPath tempPath, MapCiGenerateConfig config, List<SectionPath> results) {
|
||||||
if (!CollectionUtils.isEmpty(tempPath.getSectionList())) {
|
if (!CollectionUtils.isEmpty(tempPath.getSectionList())) {
|
||||||
// 已经有区段了
|
// 已经有区段了
|
||||||
if (Objects.isNull(section)) {
|
if (Objects.isNull(section)) {
|
||||||
@ -2110,7 +2250,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (config.isSignalApproachNotPassPreSignal() && Objects.nonNull(section.getSignalOf(!right))) {
|
if (config.isSignalApproachNotPassPreSignal() && Objects.nonNull(
|
||||||
|
section.getSignalOf(!right))) {
|
||||||
results.add(tempPath);
|
results.add(tempPath);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2131,33 +2272,39 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
SectionPath npPath = tempPath.cloneNew();// 定位路径
|
SectionPath npPath = tempPath.cloneNew();// 定位路径
|
||||||
npPath.addSection(relSwitch.getB());
|
npPath.addSection(relSwitch.getB());
|
||||||
npPath.addSwitchElement(new SwitchElement(relSwitch, true));
|
npPath.addSwitchElement(new SwitchElement(relSwitch, true));
|
||||||
getApproachPathOf(relSwitch.getB().getSectionOf(right), right, distance, npPath, config, results);
|
getApproachPathOf(relSwitch.getB().getSectionOf(right), right, distance, npPath, config,
|
||||||
|
results);
|
||||||
if (!config.isSignalApproachOnlyNpSwitch()) {
|
if (!config.isSignalApproachOnlyNpSwitch()) {
|
||||||
SectionPath rpPath = tempPath.cloneNew();// 反位路径
|
SectionPath rpPath = tempPath.cloneNew();// 反位路径
|
||||||
rpPath.addSection(relSwitch.getC());
|
rpPath.addSection(relSwitch.getC());
|
||||||
rpPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
rpPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
||||||
getApproachPathOf(relSwitch.getC().getSectionOf(right), right, distance, rpPath, config, results);
|
getApproachPathOf(relSwitch.getC().getSectionOf(right), right, distance, rpPath, config,
|
||||||
|
results);
|
||||||
}
|
}
|
||||||
} else if (relSwitch.isB(section)) {
|
} else if (relSwitch.isB(section)) {
|
||||||
// 只有一条路径,从B->A,道岔定位
|
// 只有一条路径,从B->A,道岔定位
|
||||||
tempPath.addSection(section);
|
tempPath.addSection(section);
|
||||||
tempPath.addSection(relSwitch.getA());
|
tempPath.addSection(relSwitch.getA());
|
||||||
tempPath.addSwitchElement(new SwitchElement(relSwitch, true));
|
tempPath.addSwitchElement(new SwitchElement(relSwitch, true));
|
||||||
getApproachPathOf(relSwitch.getA().getSectionOf(right), right, distance, tempPath, config, results);
|
getApproachPathOf(relSwitch.getA().getSectionOf(right), right, distance, tempPath, config,
|
||||||
|
results);
|
||||||
} else if (relSwitch.isC(section)) {
|
} else if (relSwitch.isC(section)) {
|
||||||
if (!config.isSignalApproachOnlyNpSwitch() || CollectionUtils.isEmpty(tempPath.getSectionList())) {
|
if (!config.isSignalApproachOnlyNpSwitch() || CollectionUtils.isEmpty(
|
||||||
|
tempPath.getSectionList())) {
|
||||||
// 只有一条路径,从C->A,道岔反位
|
// 只有一条路径,从C->A,道岔反位
|
||||||
tempPath.addSection(section);
|
tempPath.addSection(section);
|
||||||
tempPath.addSection(relSwitch.getA());
|
tempPath.addSection(relSwitch.getA());
|
||||||
tempPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
tempPath.addSwitchElement(new SwitchElement(relSwitch, false));
|
||||||
getApproachPathOf(relSwitch.getA().getSectionOf(right), right, distance, tempPath, config, results);
|
getApproachPathOf(relSwitch.getA().getSectionOf(right), right, distance, tempPath, config,
|
||||||
|
results);
|
||||||
} else {
|
} else {
|
||||||
results.add(tempPath);
|
results.add(tempPath);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw BusinessExceptionAssertEnum.DATA_ERROR.exception(
|
throw BusinessExceptionAssertEnum.DATA_ERROR.exception(
|
||||||
String.format("地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
String.format(
|
||||||
|
"地图基础数据有错误:区段[%s(%s)]关联了道岔[%s(%s)],却不是此道岔的关联区段",
|
||||||
section.getName(), section.getCode(),
|
section.getName(), section.getCode(),
|
||||||
relSwitch.getName(), relSwitch.getCode()));
|
relSwitch.getName(), relSwitch.getCode()));
|
||||||
}
|
}
|
||||||
@ -2175,7 +2322,8 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
* @param autoSignalGenerator
|
* @param autoSignalGenerator
|
||||||
* @param errorList
|
* @param errorList
|
||||||
*/
|
*/
|
||||||
private AutoSignal generateAutoSignal(Signal signal, CodeGenerator autoSignalGenerator, List<String> errorList) {
|
private AutoSignal generateAutoSignal(Signal signal, CodeGenerator autoSignalGenerator,
|
||||||
|
List<String> errorList) {
|
||||||
AutoSignal autoSignal = new AutoSignal(autoSignalGenerator.next());
|
AutoSignal autoSignal = new AutoSignal(autoSignalGenerator.next());
|
||||||
autoSignal.setSignal(signal);
|
autoSignal.setSignal(signal);
|
||||||
List<Section> sectionList = new ArrayList<>();
|
List<Section> sectionList = new ArrayList<>();
|
||||||
@ -2203,10 +2351,12 @@ public class DraftMapCiDataGeneratorImpl implements DraftMapCiDataGenerator {
|
|||||||
}
|
}
|
||||||
sectionList.add(nextSwitchSection);
|
sectionList.add(nextSwitchSection);
|
||||||
Section next2 = nextSwitchSection.getSectionOf(right);
|
Section next2 = nextSwitchSection.getSectionOf(right);
|
||||||
if (Objects.nonNull(next2) && Objects.equals(next2.getParent(), nextSwitchSection.getParent())) {
|
if (Objects.nonNull(next2) && Objects.equals(next2.getParent(),
|
||||||
|
nextSwitchSection.getParent())) {
|
||||||
// 是同一计轴区段,添加下一个道岔区段
|
// 是同一计轴区段,添加下一个道岔区段
|
||||||
sectionList.add(next2);
|
sectionList.add(next2);
|
||||||
sectionList.add(next2.getRelSwitch().getNextSectionOnBaseSectionAndPosition(next2, true));
|
sectionList.add(
|
||||||
|
next2.getRelSwitch().getNextSectionOnBaseSectionAndPosition(next2, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -380,9 +380,7 @@ public class Training2PublishService {
|
|||||||
if (reqVO.getType() != null) {
|
if (reqVO.getType() != null) {
|
||||||
or.andTypeEqualTo(reqVO.getType().value());
|
or.andTypeEqualTo(reqVO.getType().value());
|
||||||
}
|
}
|
||||||
// if(reqVO.getOrgId() !=null){
|
example.setOrderByClause("id desc");
|
||||||
// or.andOrgIdNotEqualTo(reqVO.getOrgId());
|
|
||||||
// }
|
|
||||||
List<PublishedTraining2> list = this.publishedDao.selectByExample(example);
|
List<PublishedTraining2> list = this.publishedDao.selectByExample(example);
|
||||||
if (CollectionUtils.isEmpty(list)) {
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
return List.of();
|
return List.of();
|
||||||
|
@ -16,8 +16,6 @@ import club.joylink.rtss.simulation.cbtc.GroupSimulationService;
|
|||||||
import club.joylink.rtss.simulation.cbtc.Simulation;
|
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||||
import club.joylink.rtss.simulation.cbtc.SimulationLifeCycleService;
|
import club.joylink.rtss.simulation.cbtc.SimulationLifeCycleService;
|
||||||
import club.joylink.rtss.simulation.cbtc.SimulationService;
|
import club.joylink.rtss.simulation.cbtc.SimulationService;
|
||||||
import club.joylink.rtss.simulation.cbtc.conversation.ConversationGroup;
|
|
||||||
import club.joylink.rtss.simulation.cbtc.conversation.ConversationMember;
|
|
||||||
import club.joylink.rtss.simulation.cbtc.data.map.Switch;
|
import club.joylink.rtss.simulation.cbtc.data.map.Switch;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.vo.ConversationMessageVO;
|
import club.joylink.rtss.simulation.cbtc.data.vo.ConversationMessageVO;
|
||||||
import club.joylink.rtss.simulation.cbtc.data.vo.Training2MessageVO;
|
import club.joylink.rtss.simulation.cbtc.data.vo.Training2MessageVO;
|
||||||
@ -317,9 +315,12 @@ public class Training2Service {
|
|||||||
Map<Long, Float> scoreMap = new HashMap<>();
|
Map<Long, Float> scoreMap = new HashMap<>();
|
||||||
if (!CollectionUtils.isEmpty(training2.getScoringRules())) {
|
if (!CollectionUtils.isEmpty(training2.getScoringRules())) {
|
||||||
training2.getScoringRules().stream()
|
training2.getScoringRules().stream()
|
||||||
.filter(score -> Objects.equals(score.getMember().getId(), member.getId()))
|
.flatMap(sr -> sr.getDetails().stream())
|
||||||
.findFirst().ifPresent(scoringRule2 -> scoringRule2.getDetails()
|
.forEach(d -> scoreMap.put(d.getStep().getId(), d.getScore()));
|
||||||
.forEach(d -> scoreMap.put(d.getStep().getId(), d.getScore())));
|
// training2.getScoringRules().stream()
|
||||||
|
//// .filter(score -> Objects.equals(score.getMember().getId(), member.getId()))
|
||||||
|
// .findFirst().ifPresent(scoringRule2 -> scoringRule2.getDetails()
|
||||||
|
// .forEach(d -> scoreMap.put(d.getStep().getId(), d.getScore())));
|
||||||
}
|
}
|
||||||
// 前端传回的步骤信息
|
// 前端传回的步骤信息
|
||||||
Map<Long, PaperTrainAnswerDetail> answerDetailMap = new HashMap<>();
|
Map<Long, PaperTrainAnswerDetail> answerDetailMap = new HashMap<>();
|
||||||
@ -327,20 +328,23 @@ public class Training2Service {
|
|||||||
scoreDetailList.forEach(d -> answerDetailMap.put(d.getStepId(), d));
|
scoreDetailList.forEach(d -> answerDetailMap.put(d.getStepId(), d));
|
||||||
}
|
}
|
||||||
return training2.getSteps().stream()
|
return training2.getSteps().stream()
|
||||||
.filter(s -> Objects.equals(s.getSimulationMember().getId(), member.getId()))
|
// .filter(s -> Objects.equals(s.getSimulationMember().getId(), member.getId()))
|
||||||
.map(step -> {
|
.map(step -> {
|
||||||
PaperTrainAnswerDetail detail = new PaperTrainAnswerDetail();
|
PaperTrainAnswerDetail detail = new PaperTrainAnswerDetail();
|
||||||
detail.setStepId(step.getId());
|
detail.setStepId(step.getId());
|
||||||
detail.setHaveRule(scoreMap.containsKey(step.getId()));
|
detail.setHaveRule(scoreMap.containsKey(step.getId()));
|
||||||
|
detail.setRuleScore(scoreMap.get(step.getId()));
|
||||||
|
if (!Objects.equals(step.getSimulationMember().getId(), member.getId())) {
|
||||||
|
detail.setSuccess(true);
|
||||||
|
detail.setScore(detail.getRuleScore());
|
||||||
|
} else {
|
||||||
if (answerDetailMap.containsKey(step.getId())) {
|
if (answerDetailMap.containsKey(step.getId())) {
|
||||||
detail.setSuccess(answerDetailMap.get(step.getId()).isSuccess());
|
detail.setSuccess(answerDetailMap.get(step.getId()).isSuccess());
|
||||||
detail.setScore(
|
|
||||||
detail.isHaveRule() && detail.isSuccess() ? scoreMap.get(step.getId()) : 0F);
|
|
||||||
detail.setClientOperations(answerDetailMap.get(step.getId()).getClientOperations());
|
detail.setClientOperations(answerDetailMap.get(step.getId()).getClientOperations());
|
||||||
detail.setNotExistAppend(true);
|
detail.setNotExistAppend(true);
|
||||||
}
|
}
|
||||||
if (detail.isHaveRule()) {
|
detail.setScore(
|
||||||
detail.setRuleScore(scoreMap.get(step.getId()));
|
detail.isHaveRule() && detail.isSuccess() ? scoreMap.get(step.getId()) : 0F);
|
||||||
}
|
}
|
||||||
return detail;
|
return detail;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
@ -2,6 +2,7 @@ package club.joylink.rtss.services.voice;
|
|||||||
|
|
||||||
import club.joylink.rtss.dao.CompetitionErrorSetDAO;
|
import club.joylink.rtss.dao.CompetitionErrorSetDAO;
|
||||||
import club.joylink.rtss.entity.CompetitionErrorSet;
|
import club.joylink.rtss.entity.CompetitionErrorSet;
|
||||||
|
import club.joylink.rtss.exception.BusinessExceptionAssertEnum;
|
||||||
import club.joylink.rtss.simulation.cbtc.conversation.SimulationVoiceHandler;
|
import club.joylink.rtss.simulation.cbtc.conversation.SimulationVoiceHandler;
|
||||||
import club.joylink.rtss.util.StrUtils;
|
import club.joylink.rtss.util.StrUtils;
|
||||||
import club.joylink.rtss.vo.client.PageQueryVO;
|
import club.joylink.rtss.vo.client.PageQueryVO;
|
||||||
@ -12,8 +13,16 @@ import club.joylink.rtss.vo.client.voice.VoiceRecognitionVO;
|
|||||||
import club.joylink.rtss.vo.voice.VoiceVerifyResultVO;
|
import club.joylink.rtss.vo.voice.VoiceVerifyResultVO;
|
||||||
import com.github.pagehelper.Page;
|
import com.github.pagehelper.Page;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import javax.sound.sampled.AudioFileFormat;
|
||||||
|
import javax.sound.sampled.AudioFormat;
|
||||||
|
import javax.sound.sampled.AudioInputStream;
|
||||||
|
import javax.sound.sampled.AudioSystem;
|
||||||
|
import javax.sound.sampled.UnsupportedAudioFileException;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
@ -58,9 +67,10 @@ public class VoiceTrainingService implements IVoiceTrainingService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VoiceVerifyResultVO verifyVoice(String contentType, byte[] fileData, String text) {
|
public VoiceVerifyResultVO verifyVoice(String contentType, byte[] fileData, String text) {
|
||||||
|
byte[] monoData = convertToMonoChannel(fileData);
|
||||||
VoiceRecognitionResult voiceRecognitionResult = voiceRecognition(
|
VoiceRecognitionResult voiceRecognitionResult = voiceRecognition(
|
||||||
new VoiceRecognitionVO(fileData, contentType));
|
new VoiceRecognitionVO(monoData, contentType));
|
||||||
boolean match = StrUtils.isMatch(text, voiceRecognitionResult.getResult(), 20);
|
boolean match = StrUtils.isMatch(text, voiceRecognitionResult.getResult(), 70);
|
||||||
return new VoiceVerifyResultVO(voiceRecognitionResult.getResult(), match);
|
return new VoiceVerifyResultVO(voiceRecognitionResult.getResult(), match);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,4 +80,40 @@ public class VoiceTrainingService implements IVoiceTrainingService {
|
|||||||
result.setResult(simulationVoiceHandler.handle(result.getResult()));
|
result.setResult(simulationVoiceHandler.handle(result.getResult()));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private byte[] convertToMonoChannel(byte[] audioData) {
|
||||||
|
try {
|
||||||
|
// 假设输入和输出音频都存储在字节数组中
|
||||||
|
byte[] outputAudioBytes;
|
||||||
|
|
||||||
|
// 将输入音频字节数组转换为音频输入流
|
||||||
|
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(audioData);
|
||||||
|
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(byteArrayInputStream);
|
||||||
|
AudioFormat format = audioInputStream.getFormat();
|
||||||
|
|
||||||
|
// 确保输入音频是立体声
|
||||||
|
if (format.getChannels() != 2) {
|
||||||
|
System.out.println("Input audio is not stereo.");
|
||||||
|
return audioData;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建单声道格式
|
||||||
|
AudioFormat monoFormat = new AudioFormat(format.getEncoding(), format.getSampleRate(),
|
||||||
|
format.getSampleSizeInBits(), 1, format.getFrameSize() / 2, format.getFrameRate(), false);
|
||||||
|
|
||||||
|
// 从立体声转换为单声道
|
||||||
|
AudioInputStream monoInputStream = AudioSystem.getAudioInputStream(monoFormat,
|
||||||
|
audioInputStream);
|
||||||
|
|
||||||
|
// 将单声道音频写入字节数组输出流
|
||||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
|
AudioSystem.write(monoInputStream, AudioFileFormat.Type.WAVE, byteArrayOutputStream);
|
||||||
|
|
||||||
|
// 获取输出音频的字节数组
|
||||||
|
return byteArrayOutputStream.toByteArray();
|
||||||
|
} catch (UnsupportedAudioFileException | IOException e) {
|
||||||
|
throw BusinessExceptionAssertEnum.SYSTEM_EXCEPTION.exception(
|
||||||
|
String.format("音频转单声道失败:%s", e));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import club.joylink.rtss.vo.client.WebSocketMessageType;
|
|||||||
import club.joylink.rtss.vo.client.factory.SocketMessageFactory;
|
import club.joylink.rtss.vo.client.factory.SocketMessageFactory;
|
||||||
import club.joylink.rtss.websocket.StompMessageService;
|
import club.joylink.rtss.websocket.StompMessageService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@ -115,7 +116,8 @@ public class ATSMessageCollectAndDispatcher {
|
|||||||
if (Objects.equals(simulation.getProject(), MapPrdTypeEnum.YJDDZH.name())) {
|
if (Objects.equals(simulation.getProject(), MapPrdTypeEnum.YJDDZH.name())) {
|
||||||
statusVO = new YJDDZHTrainStatusVO(train);
|
statusVO = new YJDDZHTrainStatusVO(train);
|
||||||
} else {
|
} else {
|
||||||
statusVO = new TrainStatusVO(train);
|
// statusVO = new TrainStatusVO(train);
|
||||||
|
statusVO = new TrainStatusVO(trainStatus);
|
||||||
}
|
}
|
||||||
if (trainStatus.compareAndChange(train, statusVO)) {
|
if (trainStatus.compareAndChange(train, statusVO)) {
|
||||||
totalList.add(statusVO);
|
totalList.add(statusVO);
|
||||||
|
@ -413,6 +413,10 @@ public class CiApiServiceImpl2 implements CiApiService {
|
|||||||
throw BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.exception(
|
throw BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.exception(
|
||||||
"signalCode和routeCode不能都为空");
|
"signalCode和routeCode不能都为空");
|
||||||
}
|
}
|
||||||
|
//开启联锁自动进路的信号机不能办理引导进路,需先解除自动进路(成都三操作文档)
|
||||||
|
if (signal.getRouteList().stream().anyMatch(Route::isFleetMode)) {
|
||||||
|
throw BusinessExceptionAssertEnum.OPERATION_FAIL.exception("需先解除自动进路状态");
|
||||||
|
}
|
||||||
|
|
||||||
if (route == null && signal.getRouteList().stream().anyMatch(Route::isAnySwitchMasterLock)) {
|
if (route == null && signal.getRouteList().stream().anyMatch(Route::isAnySwitchMasterLock)) {
|
||||||
openGuideAspect4GuideMasterLock(simulation, signal);
|
openGuideAspect4GuideMasterLock(simulation, signal);
|
||||||
|
@ -113,7 +113,7 @@ public class CiRouteService {
|
|||||||
// return new Route.CheckFailMessage(Route.CheckFailReason.SectionFaultOccupied, section);
|
// return new Route.CheckFailMessage(Route.CheckFailReason.SectionFaultOccupied, section);
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
if (!start.isCbtcMode()) {
|
if (!start.isCbtcMode() && !guide) {
|
||||||
// 后备办理检查
|
// 后备办理检查
|
||||||
// 区段占用
|
// 区段占用
|
||||||
for (Section section : sectionList) {
|
for (Section section : sectionList) {
|
||||||
@ -584,11 +584,15 @@ public class CiRouteService {
|
|||||||
route.setLock(false);
|
route.setLock(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (section.isSwitchTrack()) {
|
||||||
|
switchFaultUnlock(simulation, section.getRelSwitch(), route);
|
||||||
|
} else {
|
||||||
section.faultUnlock();
|
section.faultUnlock();
|
||||||
if (section.isShowLogic()) {
|
if (section.isShowLogic()) {
|
||||||
section.getLogicList().forEach(Section::faultUnlock);
|
section.getLogicList().forEach(Section::faultUnlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 列车逐段解锁进路
|
* 列车逐段解锁进路
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package club.joylink.rtss.simulation.cbtc.device.real.modbustcp.cgy;
|
||||||
|
|
||||||
|
import club.joylink.rtss.simulation.cbtc.Simulation;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.data.vr.VirtualRealitySectionAxleCounter;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.device.real.modbustcp.RealDeviceService;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.device.real.modbustcp.common.PlcGateway;
|
||||||
|
import club.joylink.rtss.simulation.cbtc.device.real.modbustcp.common.RealDeviceConfig;
|
||||||
|
import club.joylink.rtss.vo.client.project.cgy.CgySectionConfigVO;
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class CgySectionServiceImpl implements RealDeviceService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canHandle(RealDeviceConfig deviceConfig) {
|
||||||
|
return deviceConfig instanceof CgySectionConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(Simulation simulation, RealDeviceConfig deviceConfig) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(Simulation simulation, RealDeviceConfig deviceConfig, ByteBuf byteBuf) {
|
||||||
|
PlcGateway plcGateway = simulation.queryPlcGatewayDevice();
|
||||||
|
if (plcGateway == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CgySectionConfig config = (CgySectionConfig) deviceConfig;
|
||||||
|
VirtualRealitySectionAxleCounter vrAxleCounter = (VirtualRealitySectionAxleCounter) config.getMapElement();
|
||||||
|
if (vrAxleCounter == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CgySectionConfigVO configVO = config.getConfigVO();
|
||||||
|
ByteBuf deviceStatus = RealDeviceConfig.getDeviceCoilStatus(byteBuf, configVO.getAddr(),
|
||||||
|
configVO.getQuantity());
|
||||||
|
|
||||||
|
boolean r_occupied = RealDeviceConfig.getBitOf(deviceStatus, configVO.getR_occupied());
|
||||||
|
vrAxleCounter.setOccupy(r_occupied);
|
||||||
|
}
|
||||||
|
}
|
@ -64,7 +64,7 @@ public class CgySignalServiceImpl implements RealDeviceService {
|
|||||||
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_zxj(), true, channel);
|
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_zxj(), true, channel);
|
||||||
break;
|
break;
|
||||||
case Y:
|
case Y:
|
||||||
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_ddj(), false, channel);
|
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_ddj(), true, channel);
|
||||||
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_lxj(), true, channel);
|
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_lxj(), true, channel);
|
||||||
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_yxj(), false, channel);
|
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_yxj(), false, channel);
|
||||||
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_zxj(), false, channel);
|
plcGatewayService.writeSingleCoil(baseAddr, configVO.getW_zxj(), false, channel);
|
||||||
@ -139,7 +139,8 @@ public class CgySignalServiceImpl implements RealDeviceService {
|
|||||||
break;
|
break;
|
||||||
case G:
|
case G:
|
||||||
plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_ddj(), w_ddj,
|
plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_ddj(), w_ddj,
|
||||||
false, channel);
|
false,
|
||||||
|
channel);
|
||||||
plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_lxj(), w_lxj, true,
|
plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_lxj(), w_lxj, true,
|
||||||
channel);
|
channel);
|
||||||
plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_yxj(), w_yxj,
|
plcGatewayService.checkEqualAndWriteSingleCoil(baseAddr, configVO.getW_yxj(), w_yxj,
|
||||||
|
@ -7,18 +7,17 @@ import club.joylink.rtss.vo.client.org.OrgVO;
|
|||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 账户对象
|
* 账户对象
|
||||||
@ -28,6 +27,7 @@ import java.util.List;
|
|||||||
@Setter
|
@Setter
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
public class AccountVO implements Serializable {
|
public class AccountVO implements Serializable {
|
||||||
|
|
||||||
@JsonSerialize(using = ToStringSerializer.class)
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@ -129,6 +129,11 @@ public class AccountVO implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
//单位信息
|
//单位信息
|
||||||
private Long companyId;
|
private Long companyId;
|
||||||
|
|
||||||
@ -163,6 +168,7 @@ public class AccountVO implements Serializable {
|
|||||||
this.email = account.getEmail();
|
this.email = account.getEmail();
|
||||||
this.status = account.getStatus();
|
this.status = account.getStatus();
|
||||||
this.createTime = account.getCreateTime();
|
this.createTime = account.getCreateTime();
|
||||||
|
this.updateTime = account.getUpdateTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AccountVO system() {
|
public static AccountVO system() {
|
||||||
@ -219,7 +225,8 @@ public class AccountVO implements Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "UserVO [id=" + id + ", name=" + name + ", nickname=" + nickname + ", mobile=" + mobile + ", email=" + email + ", nationcode="
|
return "UserVO [id=" + id + ", name=" + name + ", nickname=" + nickname + ", mobile=" + mobile
|
||||||
|
+ ", email=" + email + ", nationcode="
|
||||||
+ nationcode + ", wxId=" + wxId + "]";
|
+ nationcode + ", wxId=" + wxId + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,7 +276,8 @@ public class AccountVO implements Serializable {
|
|||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
public boolean isAdmin() {
|
public boolean isAdmin() {
|
||||||
return !CollectionUtils.isEmpty(this.roles)
|
return !CollectionUtils.isEmpty(this.roles)
|
||||||
&& (this.roles.contains(BusinessConsts.ROLE_04) || this.roles.contains(BusinessConsts.ROLE_05));
|
&& (this.roles.contains(BusinessConsts.ROLE_04) || this.roles.contains(
|
||||||
|
BusinessConsts.ROLE_05));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package club.joylink.rtss.vo.map;
|
package club.joylink.rtss.vo.map;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.Setter;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@ -47,7 +46,7 @@ public class MapCiGenerateConfig {
|
|||||||
private boolean generateTbRoute;
|
private boolean generateTbRoute;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*折返进路名称使用终端信号机反向信号机名称
|
* 折返进路名称使用终端信号机反向信号机名称(并且终端按钮亦使用反向信号机-成都三联锁)
|
||||||
*/
|
*/
|
||||||
private boolean tbRouteNameUseEndOppositeSignalName;
|
private boolean tbRouteNameUseEndOppositeSignalName;
|
||||||
|
|
||||||
@ -118,16 +117,22 @@ public class MapCiGenerateConfig {
|
|||||||
*/
|
*/
|
||||||
private boolean generateDestination;
|
private boolean generateDestination;
|
||||||
|
|
||||||
/** 上下行站台共享紧急关闭效果的车站 */
|
/**
|
||||||
|
* 上下行站台共享紧急关闭效果的车站
|
||||||
|
*/
|
||||||
private Set<String> sharingECStations = new HashSet<>();
|
private Set<String> sharingECStations = new HashSet<>();
|
||||||
|
|
||||||
/** 进路联锁不包含站台扣车 */
|
/**
|
||||||
|
* 进路联锁不包含站台扣车
|
||||||
|
*/
|
||||||
private boolean routeInterlockDoNotIncludeStandHoldTrain;
|
private boolean routeInterlockDoNotIncludeStandHoldTrain;
|
||||||
|
|
||||||
// @ApiModelProperty(value = "是否分开生成ATP联锁和地面信号联锁")
|
// @ApiModelProperty(value = "是否分开生成ATP联锁和地面信号联锁")
|
||||||
// private boolean apartGroundAndAtp;
|
// private boolean apartGroundAndAtp;
|
||||||
|
|
||||||
/** 是否处理停车场/车辆段逻辑 */
|
/**
|
||||||
|
* 是否处理停车场/车辆段逻辑
|
||||||
|
*/
|
||||||
private boolean handleDepot;
|
private boolean handleDepot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
package club.joylink.rtss.vo.paper;
|
package club.joylink.rtss.vo.paper;
|
||||||
|
|
||||||
import club.joylink.rtss.vo.client.training2.Operation2VO;
|
import club.joylink.rtss.vo.client.training2.Operation2VO;
|
||||||
|
import java.util.List;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
public class PaperTrainAnswerDetail {
|
public class PaperTrainAnswerDetail {
|
||||||
@ -41,7 +40,6 @@ public class PaperTrainAnswerDetail {
|
|||||||
*/
|
*/
|
||||||
private List<TrainOperations> clientOperations;
|
private List<TrainOperations> clientOperations;
|
||||||
|
|
||||||
|
|
||||||
public static class TrainOperations extends Operation2VO.ClientOperation2VO {
|
public static class TrainOperations extends Operation2VO.ClientOperation2VO {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user