平移单个服务计划

This commit is contained in:
DU 2020-12-22 15:11:35 +08:00
parent 1a7deb1c0c
commit a56448403d
3 changed files with 101 additions and 37 deletions

View File

@ -210,6 +210,15 @@ public class RunPlanDraftController {
this.iRunPlanDraftService.copyRunPlanService(planId, serviceNumber, serviceConfig, user);
}
@ApiOperation(value = "平移计划")
@PutMapping(path = "/{planId}/service/{serviceNumber}/move")
public void moveRunPlanService(@PathVariable Long planId,
@PathVariable String serviceNumber,
@RequestBody RunPlanServiceConfigVO serviceConfig,
@ApiIgnore @RequestAttribute UserVO user) {
this.iRunPlanDraftService.moveRunPlanService(planId, serviceNumber, serviceConfig, user);
}
@ApiOperation(value = "修改计划号")
@PutMapping(path = "/{planId}/service/{serviceNumber}/serviceNumber")
public void updateRunPlanService(@PathVariable Long planId, @PathVariable String serviceNumber, String newServiceNumber) {

View File

@ -178,6 +178,9 @@ public interface IRunPlanDraftService {
*/
void copyRunPlanService(Long planId, String serviceNumber, RunPlanServiceConfigVO serviceConfig, UserVO userVO);
@Transactional
void moveRunPlanService(Long planId, String serviceNumber, RunPlanServiceConfigVO serviceConfig, UserVO userVO);
void updateRunPlanServiceNumber(Long planId, String oldServiceNumber, String serviceNumber);
/**

View File

@ -95,10 +95,10 @@ public class RunPlanDraftService implements IRunPlanDraftService {
@Override
@Transactional
public RunPlanEChartsDataVO createCommon(Long id, RunPlanInput runPlanInput,UserVO userVO) {
public RunPlanEChartsDataVO createCommon(Long id, RunPlanInput runPlanInput, UserVO userVO) {
RunPlanDraft draftPlan = runPlanDraftDAO.selectByPrimaryKey(id);
MapVO mapVO = this.iMapService.getMapDetail(draftPlan.getMapId());
List<RunPlanTripVO> runPlanTrips = runPlanGenerator.generatorTrips(userVO.getId(),runPlanInput, mapVO);
List<RunPlanTripVO> runPlanTrips = runPlanGenerator.generatorTrips(userVO.getId(), runPlanInput, mapVO);
draftPlan.setTrips(JsonUtils.writeValueAsString(runPlanTrips));
draftPlan.setStatus(BusinessConsts.ReleaseReview.RELEASE_STATUS_01);
runPlanDraftDAO.updateByPrimaryKeyWithBLOBs(draftPlan);
@ -178,7 +178,7 @@ public class RunPlanDraftService implements IRunPlanDraftService {
BusinessExceptionAssertEnum.DATA_ERROR.assertHasText(runPlanDraft.getTrips(),
"运行图车次数据为空,请检查!");
RunPlanVO runPlanVO = new RunPlanVO(runPlanDraft);
if(StringUtils.hasText(runPlanName)) runPlanVO.setName(runPlanName);
if (StringUtils.hasText(runPlanName)) runPlanVO.setName(runPlanName);
runPlanVO.setTripList(JsonUtils.read(runPlanDraft.getTrips(), JsonUtils.getCollectionType(List.class, RunPlanTripVO.class)));
iRunPlanTemplateService.draftPublish(runPlanVO, userVO);
runPlanDraft.setStatus(BusinessConsts.ReleaseReview.RELEASE_STATUS_03);
@ -408,14 +408,14 @@ public class RunPlanDraftService implements IRunPlanDraftService {
public List getRoutingSectionList(Long planId, String routingCode) {
RunPlanDraft runPlanDraft = runPlanDraftDAO.selectByPrimaryKey(planId);
MapVO mapVO = this.iMapService.getMapDetail(runPlanDraft.getMapId());
if(mapVO.isDrawWay()){
if (mapVO.isDrawWay()) {
MapRoutingDataVO routingVO = mapVO.findRoutingDataByCode(routingCode);
if (Objects.nonNull(routingVO)) {
return routingVO.getParkSectionCodeList();
}
}else{
} else {
MapRoutingVO routingVO = mapVO.findRoutingByCode(routingCode);
if (Objects.nonNull(routingVO)) {
return routingVO.getRoutingSectionList();
@ -446,17 +446,17 @@ public class RunPlanDraftService implements IRunPlanDraftService {
String startSectionCode = routingData.getStartSectionCode();
MapSectionNewVO endSection = mapVO.findSectionNew(endSectionCode);
MapSectionNewVO endReentrySection = null;
if(endSection.isStandTrack()) {
if (endSection.isStandTrack()) {
String endReentrySectionCode = userReentryData.get(routingData.getEndStationCode());
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(endReentrySectionCode,"车站" + routingData.getEndStationCode() + "折返轨未设置");
endReentrySection = mapVO.findSectionNew(endReentrySectionCode);
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(endReentrySectionCode, "车站" + routingData.getEndStationCode() + "折返轨未设置");
endReentrySection = mapVO.findSectionNew(endReentrySectionCode);
}
MapSectionNewVO startSection = mapVO.findSectionNew(startSectionCode);
MapSectionNewVO startSection = mapVO.findSectionNew(startSectionCode);
MapSectionNewVO startReentrySection = null;
if(startSection.isStandTrack()) {
if (startSection.isStandTrack()) {
String startReentrySectionCode = userReentryData.get(routingData.getStartStationCode());
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(startReentrySectionCode,"车站" + routingData.getStartStationCode() + "折返轨未设置");
startReentrySection = mapVO.findSectionNew(startReentrySectionCode);
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(startReentrySectionCode, "车站" + routingData.getStartStationCode() + "折返轨未设置");
startReentrySection = mapVO.findSectionNew(startReentrySectionCode);
}
RunPlanTripVO tripVO = new RunPlanTripVO(tripConfigVO, routingData, startReentrySection, endReentrySection);
@ -509,15 +509,15 @@ public class RunPlanDraftService implements IRunPlanDraftService {
RunPlanVO planVO = getRunPlanById(planId);
MapVO mapVO = this.iMapService.getMapDetail(planVO.getMapId());
if (Objects.nonNull(inputData.getDepartureInterval())) {
String max = planVO.getTripList().stream().map(RunPlanTripVO::getServiceNumber).max(Comparator.naturalOrder()).orElse("0");
String max = planVO.getTripList().stream().map(RunPlanTripVO::getServiceNumber).max(Comparator.naturalOrder()).orElse("0");
// 当前已有最大服务号
int maxServiceNumber = Integer.parseInt(max);
inputData.setServiceNumber(String.format("%03d", ++maxServiceNumber));
Integer departureInterval = inputData.getDepartureInterval() < 60 ? 180 : inputData.getDepartureInterval();
inputData.setDepartureInterval(departureInterval);
}
List<RunPlanTripVO> newTripList = runPlanGenerator.generatorTrips(userId,inputData,mapVO);
BusinessExceptionAssertEnum.INVALID_OPERATION.assertNotTrue(CollectionUtils.isEmpty(newTripList),String.format("生成服务号%s运行图数据失败",inputData.getServiceNumber()));
List<RunPlanTripVO> newTripList = runPlanGenerator.generatorTrips(userId, inputData, mapVO);
BusinessExceptionAssertEnum.INVALID_OPERATION.assertNotTrue(CollectionUtils.isEmpty(newTripList), String.format("生成服务号%s运行图数据失败", inputData.getServiceNumber()));
planVO.getTripList().addAll(newTripList);
RunPlanDraft planDraft = planVO.convert2Draft();
planDraft.setTrips(JsonUtils.writeValueAsString(planVO.getTripList()));
@ -587,9 +587,14 @@ public class RunPlanDraftService implements IRunPlanDraftService {
planTripVO.setRight(tripVO.getRight());
planTripVO.setDestinationCode(tripVO.getDestinationCode());
planTripVO.setStartSectionCode(tripVO.getStartSectionCode());
planTripVO.setStartTime(tripVO.getStartTime().plusSeconds(seconds));
planTripVO.setEndSectionCode(tripVO.getEndSectionCode());
planTripVO.setEndTime(tripVO.getEndTime().plusSeconds(seconds));
if (serviceConfig.isForward()) {
planTripVO.setStartTime(tripVO.getStartTime().minusSeconds(seconds));
planTripVO.setEndTime(tripVO.getEndTime().minusSeconds(seconds));
} else {
planTripVO.setStartTime(tripVO.getStartTime().plusSeconds(seconds));
planTripVO.setEndTime(tripVO.getEndTime().plusSeconds(seconds));
}
planTripVO.setIsReentry(tripVO.getIsReentry());
planTripVO.setIsOutbound(tripVO.getIsOutbound());
planTripVO.setIsInbound(tripVO.getIsInbound());
@ -620,7 +625,49 @@ public class RunPlanDraftService implements IRunPlanDraftService {
runPlanDraftDAO.updateByPrimaryKeySelective(planDraft);
}
/**修改服务号号*/
@Override
@Transactional
public void moveRunPlanService(Long planId, String serviceNumber, RunPlanServiceConfigVO serviceConfig, UserVO userVO) {
BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(serviceConfig.getIntervals() > 0, "服务计划平移时间需大于0s");
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(this.ifServerExists(planId, serviceNumber));
RunPlanVO planVO = getRunPlanById(planId);
int intervals = serviceConfig.getIntervals();
boolean forward = serviceConfig.isForward();
if (forward) {
planVO.getTripList().stream()
.filter(tripVO -> tripVO.getServiceNumber().equals(serviceNumber))
.forEach(tr -> {
tr.setStartTime(tr.getStartTime().minusSeconds(intervals));
tr.setEndTime(tr.getEndTime().minusSeconds(intervals));
for (RunPlanTripTimeVO timeVO : tr.getTimeList()) {
timeVO.setArrivalTime(timeVO.getArrivalTime().minusSeconds(intervals));
timeVO.setDepartureTime(timeVO.getDepartureTime().minusSeconds(intervals));
}
});
} else {
planVO.getTripList().stream()
.filter(tripVO -> tripVO.getServiceNumber().equals(serviceNumber))
.forEach(tr -> {
tr.setStartTime(tr.getStartTime().plusSeconds(intervals));
tr.setEndTime(tr.getEndTime().plusSeconds(intervals));
for (RunPlanTripTimeVO timeVO : tr.getTimeList()) {
timeVO.setArrivalTime(timeVO.getArrivalTime().plusSeconds(intervals));
timeVO.setDepartureTime(timeVO.getDepartureTime().plusSeconds(intervals));
}
});
}
RunPlanDraft planDraft = planVO.convert2Draft();
planDraft.setTrips(JsonUtils.writeValueAsString(planVO.getTripList()));
planDraft.setStatus(BusinessConsts.ReleaseReview.RELEASE_STATUS_01);
runPlanDraftDAO.updateByPrimaryKeySelective(planDraft);
}
/**
* 修改服务号号
*/
@Override
public void updateRunPlanServiceNumber(Long planId, String oldServiceNumber, String serviceNumber) {
RunPlanVO runPlanVO = getRunPlanById(planId);
@ -662,10 +709,12 @@ public class RunPlanDraftService implements IRunPlanDraftService {
// planDraft.setTrips(JsonUtils.writeValueAsString(runPlanVO.getTripList()));
// planDraft.setStatus(BusinessConsts.ReleaseReview.RELEASE_STATUS_01);
// runPlanDraftDAO.updateByPrimaryKeySelective(planDraft);
this.addTrip(runPlanVO, del.getServiceNumber(), tripConfig,userVO);
this.addTrip(runPlanVO, del.getServiceNumber(), tripConfig, userVO);
}
/**修改车次号*/
/**
* 修改车次号
*/
@Override
public void updateRunPlanTripNumber(Long planId, String SDTNumber, String tripNumber) {
RunPlanVO runPlanVO = getRunPlanById(planId);
@ -681,8 +730,10 @@ public class RunPlanDraftService implements IRunPlanDraftService {
runPlanDraftDAO.updateByPrimaryKeySelective(planDraft);
}
/** 添加车次号(不校验服务号)*/
private void addTrip(RunPlanVO runPlanVO, String serviceNumber, RunPlanTripConfigVO tripConfig,UserVO userVO) {
/**
* 添加车次号不校验服务号
*/
private void addTrip(RunPlanVO runPlanVO, String serviceNumber, RunPlanTripConfigVO tripConfig, UserVO userVO) {
MapVO mapVO = this.iMapService.getMapDetail(runPlanVO.getMapId());
RunPlanUserConfigVO config = runPlanUserConfigService.getConfig(userVO.getId(), mapVO.getId());
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(Objects.nonNull(config) && config.hasReentryData(), "运行图-用户缺少配置或没有配置车站折返数据");
@ -699,19 +750,19 @@ public class RunPlanDraftService implements IRunPlanDraftService {
String startSectionCode = routingData.getStartSectionCode();
MapSectionNewVO endSection = mapVO.findSectionNew(endSectionCode);
MapSectionNewVO endReentrySection = null;
if(endSection.isStandTrack()) {
if (endSection.isStandTrack()) {
String endReentrySectionCode = userReentryData.get(routingData.getEndStationCode());
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(endReentrySectionCode,"车站" + routingData.getEndStationCode() + "折返轨未设置");
endReentrySection = mapVO.findSectionNew(endReentrySectionCode);
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(endReentrySectionCode, "车站" + routingData.getEndStationCode() + "折返轨未设置");
endReentrySection = mapVO.findSectionNew(endReentrySectionCode);
}
MapSectionNewVO startSection = mapVO.findSectionNew(startSectionCode);
MapSectionNewVO startSection = mapVO.findSectionNew(startSectionCode);
MapSectionNewVO startReentrySection = null;
if(startSection.isStandTrack()) {
if (startSection.isStandTrack()) {
String startReentrySectionCode = userReentryData.get(routingData.getStartStationCode());
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(startReentrySectionCode,"车站" + routingData.getStartStationCode() + "折返轨未设置");
startReentrySection = mapVO.findSectionNew(startReentrySectionCode);
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertNotNull(startReentrySectionCode, "车站" + routingData.getStartStationCode() + "折返轨未设置");
startReentrySection = mapVO.findSectionNew(startReentrySectionCode);
}
tripVO = new RunPlanTripVO(tripConfig, routingData, startReentrySection, endReentrySection);
tripVO = new RunPlanTripVO(tripConfig, routingData, startReentrySection, endReentrySection);
// 构建类车到站数据
// tripVO = new RunPlanTripVO(tripConfig, routing);
setDirectionCode(mapVO.getConfigVO().getUpRight(), tripVO);
@ -757,6 +808,7 @@ public class RunPlanDraftService implements IRunPlanDraftService {
}
}
@Override
@Transactional
public void deleteRunPlanTrip(Long planId, String SDTNumber, boolean deleteBefore, UserVO userVO) {
@ -844,9 +896,9 @@ public class RunPlanDraftService implements IRunPlanDraftService {
for (int i = 0; i < tripList.size(); i++) {
RunPlanTripVO tripVO = tripList.get(i);
if (DirectionType.Type02.equals(tripVO.getDirectionCode())) {
tripVO.setTripNumber(tripVO.getDirectionCode()+ String.format("%03d", ++upTripNumber));
tripVO.setTripNumber(tripVO.getDirectionCode() + String.format("%03d", ++upTripNumber));
} else if (DirectionType.Type01.equals(tripVO.getDirectionCode())) {
tripVO.setTripNumber(tripVO.getDirectionCode()+ String.format("%03d", ++downTripNumber));
tripVO.setTripNumber(tripVO.getDirectionCode() + String.format("%03d", ++downTripNumber));
}
if (i == 0) {
tripVO.setIsOutbound(true);
@ -906,17 +958,17 @@ public class RunPlanDraftService implements IRunPlanDraftService {
RunPlanVO planVO = getRunPlanById(planId);
planVO.getTripList().forEach(tripVO -> {
List<RunPlanTripTimeVO> timeList = tripVO.getTimeList();
if(CollectionUtils.isEmpty(timeList) || timeList.size()<2){
if (CollectionUtils.isEmpty(timeList) || timeList.size() < 2) {
return;
}
RunPlanTripTimeVO first = timeList.get(0);
RunPlanTripTimeVO second = timeList.get(1);
RunPlanTripTimeVO second2Last = timeList.get(timeList.size()-2);
RunPlanTripTimeVO last = timeList.get(timeList.size()-1);
if(Objects.equals(first.getStationCode(),second.getStationCode())){
RunPlanTripTimeVO second2Last = timeList.get(timeList.size() - 2);
RunPlanTripTimeVO last = timeList.get(timeList.size() - 1);
if (Objects.equals(first.getStationCode(), second.getStationCode())) {
timeList.remove(first);
}
if(timeList.size()>2 && Objects.equals(second2Last.getStationCode(),last.getStationCode())){
if (timeList.size() > 2 && Objects.equals(second2Last.getStationCode(), last.getStationCode())) {
timeList.remove(last);
}
});