Commit 69a0745d authored by duanruiming's avatar duanruiming

信号机控制指令-万集统一标准服务

parent cc4dce64
...@@ -4,11 +4,11 @@ import io.swagger.annotations.Api; ...@@ -4,11 +4,11 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.utc.common.Result; import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.service.control.ControlCommandService; import net.wanji.utc.service.control.ControlCommandStrategyService;
import net.wanji.utc.vo.*; import net.wanji.utc.vo.*;
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.*;
...@@ -23,98 +23,99 @@ import static net.wanji.utc.common.constant.Constants.*; ...@@ -23,98 +23,99 @@ import static net.wanji.utc.common.constant.Constants.*;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/controlCommand") @RequestMapping("/controlCommand")
@RequiredArgsConstructor
@Api(value = "控制指令接口", description = "控制指令接口", tags = "控制指令接口") @Api(value = "控制指令接口", description = "控制指令接口", tags = "控制指令接口")
public class ControlCommandController { public class ControlCommandController {
@Autowired private final ControlCommandStrategyService controlCommandStrategyService;
private ControlCommandService hkControlCommandService;
/** /**
* 信号机方案下发 * 信号机方案下发
* *
* @param schemeSendVO 方案下发VO * @param schemeSendVO 方案下发VO
* @return {@link Result}<{@link T}> * @return
*/ */
@ApiOperation(value = "信号机方案下发-基础方案下发", notes = "信号机方案下发-基础方案下发") @ApiOperation(value = "信号机方案下发-基础方案下发", notes = "信号机方案下发-基础方案下发")
@PostMapping("/schemeSend") @PostMapping("/schemeSend")
public <T> Result<T> schemeSend(@RequestBody SchemeSendVO schemeSendVO) throws Exception { public JsonViewObject schemeSend(@RequestBody @Validated SchemeSendVO schemeSendVO) throws Exception {
return hkControlCommandService.schemeSend(schemeSendVO); return controlCommandStrategyService.schemeSendStrategy(schemeSendVO);
} }
/** /**
* 下发信号机计划 * 下发信号机计划
* *
* @param planSendVO 计划下发VO * @param planSendVO 计划下发VO
* @return {@link Result}<{@link T}> * @return
*/ */
@ApiOperation(value = "计划下发-计划信息、时段信息", notes = "计划下发-计划信息、时段信息") @ApiOperation(value = "计划下发-计划信息、时段信息", notes = "计划下发-计划信息、时段信息")
@PostMapping("/planSend") @PostMapping("/planSend")
public <T> Result<T> planSend(@RequestBody PlanSendVO planSendVO) throws Exception { public JsonViewObject planSend(@RequestBody PlanSendVO planSendVO) throws Exception {
return hkControlCommandService.planSend(planSendVO); return controlCommandStrategyService.planSendStrategy(planSendVO);
} }
/** /**
* 时间表下发 * 时间表下发
* *
* @param scheduleSendVO 时间表下发VO * @param scheduleSendVO 时间表下发VO
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
@ApiOperation(value = "时间表下发-时间表信息", notes = "时间表下发-时间表信息") @ApiOperation(value = "时间表下发-时间表信息", notes = "时间表下发-时间表信息")
@PostMapping("/scheduleSend") @PostMapping("/scheduleSend")
public <T> Result<T> scheduleSend(@RequestBody ScheduleSendVO scheduleSendVO) throws Exception { public JsonViewObject scheduleSend(@RequestBody ScheduleSendVO scheduleSendVO) throws Exception {
return hkControlCommandService.scheduleSend(scheduleSendVO); return controlCommandStrategyService.scheduleSendStrategy(scheduleSendVO);
} }
/** /**
* 相位配时下发-(下发相位参数) * 相位配时下发-(下发相位参数)
* *
* @return {@link Result}<{@link T}> * @return
* @throws InterruptedException 中断异常 * @throws InterruptedException 中断异常
*/ */
@ApiOperation(value = "相位配时下发-(下发相位参数)", notes = "相位配时下发-(下发相位参数)") @ApiOperation(value = "相位配时下发-(下发相位参数)", notes = "相位配时下发-(下发相位参数)")
@PostMapping("/phaseTimingSend") @PostMapping("/phaseTimingSend")
public <T> Result<T> phaseTimingSend(@RequestBody PhaseTimingSendVO phaseTimingSendVO) throws Exception { public JsonViewObject phaseTimingSend(@RequestBody PhaseTimingSendVO phaseTimingSendVO) throws Exception {
return hkControlCommandService.phaseTimingSend(phaseTimingSendVO); return controlCommandStrategyService.phaseTimingSendStrategy(phaseTimingSendVO);
} }
/** /**
* 全红控制 * 全红控制
* *
* @param commandVO 控制指令VO * @param commandVO 控制指令VO
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
@ApiOperation(value = "全红控制-路口全红控制/恢复", notes = "全红控制-路口全红控制/恢复") @ApiOperation(value = "全红控制-路口全红控制/恢复", notes = "全红控制-路口全红控制/恢复")
@PostMapping("/allRedControl") @PostMapping("/allRedControl")
public <T> Result<T> allRedControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception { public JsonViewObject allRedControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception {
return hkControlCommandService.setSignalControl(commandVO.getCrossCode(), commandVO.getCommand(), ALL_RED_CONTROL); return controlCommandStrategyService.setSignalControlStrategy(commandVO.getCrossCode(), commandVO.getCommand(), ALL_RED_CONTROL);
} }
/** /**
* 黄闪控制 * 黄闪控制
* *
* @param commandVO 控制指令VO * @param commandVO 控制指令VO
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
@ApiOperation(value = "黄闪控制-路口黄闪控制/恢复", notes = "黄闪控制-路口黄闪控制/恢复") @ApiOperation(value = "黄闪控制-路口黄闪控制/恢复", notes = "黄闪控制-路口黄闪控制/恢复")
@PostMapping("/yellowLightControl") @PostMapping("/yellowLightControl")
public <T> Result<T> yellowLightControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception { public JsonViewObject yellowLightControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception {
return hkControlCommandService.setSignalControl(commandVO.getCrossCode(), commandVO.getCommand(), YELLOW_LIGHT_CONTROL); return controlCommandStrategyService.setSignalControlStrategy(commandVO.getCrossCode(), commandVO.getCommand(), YELLOW_LIGHT_CONTROL);
} }
/** /**
* 关灯控制 * 关灯控制
* *
* @param commandVO 控制指令VO * @param commandVO 控制指令VO
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
@ApiOperation(value = "关灯控制-路口关灯控制/开灯", notes = "关灯控制-路口关灯控制/开灯") @ApiOperation(value = "关灯控制-路口关灯控制/开灯", notes = "关灯控制-路口关灯控制/开灯")
@PostMapping("/closeLightControl") @PostMapping("/closeLightControl")
public <T> Result<T> closeLightControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception { public JsonViewObject closeLightControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception {
return hkControlCommandService.setSignalControl(commandVO.getCrossCode(), commandVO.getCommand(), CLOSE_LIGHT_CONTROL); return controlCommandStrategyService.setSignalControlStrategy(commandVO.getCrossCode(), commandVO.getCommand(), CLOSE_LIGHT_CONTROL);
} }
/** /**
...@@ -123,7 +124,7 @@ public class ControlCommandController { ...@@ -123,7 +124,7 @@ public class ControlCommandController {
* @param code 信号id * @param code 信号id
* @param command 命令 * @param command 命令
* @param stepNum 一步num * @param stepNum 一步num
* @return {@link Result}<{@link T}> * @return
*/ */
@ApiOperation(value = "步进控制-步进控制/恢复", notes = "步进控制-步进控制/恢复") @ApiOperation(value = "步进控制-步进控制/恢复", notes = "步进控制-步进控制/恢复")
@ApiImplicitParams({ @ApiImplicitParams({
...@@ -131,35 +132,35 @@ public class ControlCommandController { ...@@ -131,35 +132,35 @@ public class ControlCommandController {
@ApiImplicitParam(name = "stepNum", value = "0 顺序步进 n 跳过n个相位", paramType = "query", required = true, dataType = "int"), @ApiImplicitParam(name = "stepNum", value = "0 顺序步进 n 跳过n个相位", paramType = "query", required = true, dataType = "int"),
}) })
@PostMapping("/stepControl") @PostMapping("/stepControl")
public <T> Result<T> stepControl(@RequestParam String code, public JsonViewObject stepControl(@RequestParam String code,
@RequestParam Integer command, @RequestParam Integer command,
@RequestParam int stepNum) throws Exception { @RequestParam int stepNum) throws Exception {
return hkControlCommandService.stepControl(code, command, stepNum); return controlCommandStrategyService.stepControlStrategy(code, command, stepNum);
} }
/** /**
* 恢复时间表 * 恢复时间表
* *
* @param code 信号id * @param code 信号id
* @return {@link Result}<{@link T}> * @return
*/ */
@ApiOperation(value = "恢复时间表-恢复路口时间表执行", notes = "恢复时间表-恢复路口时间表执行") @ApiOperation(value = "恢复时间表-恢复路口时间表执行", notes = "恢复时间表-恢复路口时间表执行")
@PostMapping("/recoverSchedule") @PostMapping("/recoverSchedule")
public <T> Result<T> recoverSchedule(@RequestParam String code) throws Exception { public JsonViewObject recoverSchedule(@RequestParam String code) throws Exception {
return hkControlCommandService.recoverSchedule(code); return controlCommandStrategyService.recoverScheduleStrategy(code);
} }
/** /**
* 锁定控制 * 锁定控制
* *
* @param commandVO 控制指令VO * @param commandVO 控制指令VO
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
@ApiOperation(value = "锁定控制-相位锁定/解锁", notes = "锁定控制-相位锁定/解锁") @ApiOperation(value = "锁定控制-相位锁定/解锁", notes = "锁定控制-相位锁定/解锁")
@PostMapping("/lockControl") @PostMapping("/lockControl")
public <T> Result<T> lockControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception { public JsonViewObject lockControl(@RequestBody @Validated ControlCommandVO commandVO) throws Exception {
return hkControlCommandService.lockControl(commandVO); return controlCommandStrategyService.lockControlStrategy(commandVO);
} }
/** /**
...@@ -167,7 +168,7 @@ public class ControlCommandController { ...@@ -167,7 +168,7 @@ public class ControlCommandController {
*/ */
@ApiOperation(value = "相位差下发", notes = "相位差下发") @ApiOperation(value = "相位差下发", notes = "相位差下发")
@PostMapping("/phaseDiffSend") @PostMapping("/phaseDiffSend")
public <T> Result<T> phaseDiffSend() { public JsonViewObject phaseDiffSend() {
return hkControlCommandService.phaseDiffSend(); return controlCommandStrategyService.phaseDiffSendStrategy();
} }
} }
package net.wanji.utc.service.control; package net.wanji.utc.service.control;
import net.wanji.utc.common.Result; import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.service.rpc.RpcService;
import net.wanji.utc.vo.*; import net.wanji.utc.vo.*;
/** /**
...@@ -9,37 +10,37 @@ import net.wanji.utc.vo.*; ...@@ -9,37 +10,37 @@ import net.wanji.utc.vo.*;
* @author wuxiaokai * @author wuxiaokai
* @date 2022/11/15 14:02:36 * @date 2022/11/15 14:02:36
*/ */
public interface ControlCommandService { public interface ControlCommandService extends RpcService {
/** /**
* 方案下发 * 方案下发
*/ */
<T> Result<T> schemeSend(SchemeSendVO schemeSendVO) throws Exception; JsonViewObject schemeSend(SchemeSendVO schemeSendVO) throws Exception;
/** /**
* 计划下发 * 计划下发
* *
* @param planSendVO 计划下发VO * @param planSendVO 计划下发VO
* @return {@link Result}<{@link T}> * @return
*/ */
<T> Result<T> planSend(PlanSendVO planSendVO) throws Exception; JsonViewObject planSend(PlanSendVO planSendVO) throws Exception;
/** /**
* 时间表下发 * 时间表下发
* *
* @param scheduleSendVO 时间表下发VO * @param scheduleSendVO 时间表下发VO
* @return {@link Result}<{@link T}> * @return
*/ */
<T> Result<T> scheduleSend(ScheduleSendVO scheduleSendVO) throws Exception; JsonViewObject scheduleSend(ScheduleSendVO scheduleSendVO) throws Exception;
/** /**
* 锁定控制 * 锁定控制
* *
* @param commandVO 控制指令VO * @param commandVO 控制指令VO
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
<T> Result<T> lockControl(ControlCommandVO commandVO) throws Exception; JsonViewObject lockControl(ControlCommandVO commandVO) throws Exception;
/** /**
* 步进控制 * 步进控制
...@@ -47,10 +48,10 @@ public interface ControlCommandService { ...@@ -47,10 +48,10 @@ public interface ControlCommandService {
* @param code 信号机编号 * @param code 信号机编号
* @param command 1 开始步进 0 取消步进 * @param command 1 开始步进 0 取消步进
* @param stepNum 0 顺序步进 n 跳过n个相位 * @param stepNum 0 顺序步进 n 跳过n个相位
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
<T> Result<T> stepControl(String code, Integer command, Integer stepNum) throws Exception; JsonViewObject stepControl(String code, Integer command, Integer stepNum) throws Exception;
/** /**
* 设置信号机控制模式 * 设置信号机控制模式
...@@ -58,30 +59,30 @@ public interface ControlCommandService { ...@@ -58,30 +59,30 @@ public interface ControlCommandService {
* @param code 信号机编号 * @param code 信号机编号
* @param command 指令 1 开 0 关 * @param command 指令 1 开 0 关
* @param commandType 命令类型 * @param commandType 命令类型
* @return {@link Result}<{@link T}> * @return
* @throws Exception 异常 * @throws Exception 异常
*/ */
<T> Result<T> setSignalControl(String code, Integer command, Integer commandType) throws Exception; JsonViewObject setSignalControl(String code, Integer command, Integer commandType) throws Exception;
/** /**
* 恢复时间表 * 恢复时间表
* *
* @param code 信号机编号 * @param code 信号机编号
* @return {@link Result}<{@link T}> * @return
*/ */
<T> Result<T> recoverSchedule(String code) throws Exception; JsonViewObject recoverSchedule(String code) throws Exception;
/** /**
* 相位配时下发 * 相位配时下发
* *
* @return {@link Result}<{@link T}> * @return
* @throws InterruptedException 中断异常 * @throws InterruptedException 中断异常
*/ */
<T> Result<T> phaseTimingSend(PhaseTimingSendVO phaseTimingSendVO) throws Exception; JsonViewObject phaseTimingSend(PhaseTimingSendVO phaseTimingSendVO) throws Exception;
/** /**
* 相位差下发 * 相位差下发
*/ */
<T> Result<T> phaseDiffSend(); JsonViewObject phaseDiffSend();
} }
package net.wanji.utc.service.control;
import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.vo.*;
/**
* @author duanruiming
* @date 2023/01/12 9:44
*/
public interface ControlCommandStrategyService {
/**
* 方案下发
*/
JsonViewObject schemeSendStrategy(SchemeSendVO schemeSendVO) throws Exception;
/**
* 计划下发
*
* @param planSendVO 计划下发VO
* @return
*/
JsonViewObject planSendStrategy(PlanSendVO planSendVO) throws Exception;
/**
* 时间表下发
*
* @param scheduleSendVO 时间表下发VO
* @return
*/
JsonViewObject scheduleSendStrategy(ScheduleSendVO scheduleSendVO) throws Exception;
/**
* 锁定控制
*
* @param commandVO 控制指令VO
* @return
* @throws Exception 异常
*/
JsonViewObject lockControlStrategy(ControlCommandVO commandVO) throws Exception;
/**
* 步进控制
*
* @param code 信号机编号
* @param command 1 开始步进 0 取消步进
* @param stepNum 0 顺序步进 n 跳过n个相位
* @return
* @throws Exception 异常
*/
JsonViewObject stepControlStrategy(String code, Integer command, Integer stepNum) throws Exception;
/**
* 设置信号机控制模式
*
* @param code 信号机编号
* @param command 指令 1 开 0 关
* @param commandType 命令类型
* @return
* @throws Exception 异常
*/
JsonViewObject setSignalControlStrategy(String code, Integer command, Integer commandType) throws Exception;
/**
* 恢复时间表
*
* @param code 信号机编号
* @return
*/
JsonViewObject recoverScheduleStrategy(String code) throws Exception;
/**
* 相位配时下发
*
* @return
* @throws InterruptedException 中断异常
*/
JsonViewObject phaseTimingSendStrategy(PhaseTimingSendVO phaseTimingSendVO) throws Exception;
/**
* 相位差下发
*/
JsonViewObject phaseDiffSendStrategy();
}
package net.wanji.utc.service.control.impl;
import lombok.RequiredArgsConstructor;
import net.wanji.utc.common.typeenum.BasicEnum;
import net.wanji.utc.common.typeenum.DateStyle;
import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.mapper.*;
import net.wanji.utc.po.*;
import net.wanji.utc.service.control.ControlCommandStrategyService;
import net.wanji.utc.service.control.ControlCommandService;
import net.wanji.utc.util.StringUtils;
import net.wanji.utc.vo.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/**
* @author duanruiming
* @date 2023/01/12 9:53
*/
@Service
@RequiredArgsConstructor
public class ControlCommandStrategyServiceImpl implements ControlCommandStrategyService {
@Resource(name = "hkControlCommandService")
ControlCommandService hkControlCommandService;
@Resource(name = "wanJiControlCommandService")
ControlCommandService wanJiControlCommandService;
private final CrossInfoMapper crossInfoMapper;
private final ManufacturerInfoMapper manufacturerInfoMapper;
private final CrossSchemeMapper crossSchemeMapper;
private final CrossPhaseMapper crossPhaseMapper;
private final CrossSectionMapper crossSectionMapper;
private final CrossPlanMapper crossPlanMapper;
private final CrossSchedulesMapper crossSchedulesMapper;
/**
* 通过路口编号获取厂商编码
*
* @param crossId
* @return
*/
public String getManufacturerCodeByCrossId(String crossId) {
// 获取厂商ID和信号机ID
CrossInfoPO crossInfoPO = crossInfoMapper.selectByPrimaryKey(crossId);
String signalId = crossInfoPO.getCode();
Integer manufacturerId = crossInfoPO.getManufacturerId();
// 获取厂商代码
ManufacturerInfoPO manufacturerInfoPO = manufacturerInfoMapper.selectById(manufacturerId);
return manufacturerInfoPO.getCode();
}
@Transactional(rollbackFor = Exception.class)
@Override
public JsonViewObject schemeSendStrategy(SchemeSendVO schemeSendVO) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(schemeSendVO.getCrossCode());
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.schemeSend(schemeSendVO);
} else {
jsonViewObject = wanJiControlCommandService.schemeSend(schemeSendVO);
}
schemeSendDataInsert(schemeSendVO);
return jsonViewObject;
}
private void schemeSendDataInsert(SchemeSendVO schemeSendVO) {
// 入库操作
List<CrossSchemePO> crossSchemePOList = new ArrayList<>();
schemeSendVO.getPatternList().forEach(pattern -> {
CrossSchemePO crossSchemePO = new CrossSchemePO();
crossSchemePO.setSchemeNo(pattern.getPatternNo());
crossSchemePO.setName(pattern.getPatternName());
crossSchemePO.setCrossId(schemeSendVO.getCrossCode());
crossSchemePO.setCycle(Integer.parseInt(pattern.getCycle()));
crossSchemePO.setCoordPhase(Integer.parseInt(pattern.getCoordPhase()));
crossSchemePO.setOffset(Integer.parseInt(pattern.getOffset()));
crossSchemePO.setSource(2);
crossSchemePO.setIsDeleted(0);
crossSchemePOList.add(crossSchemePO);
pattern.getRings().forEach(ring -> {
List<CrossPhasePO> crossPhasePOList = new ArrayList<>();
ring.getPhaseList().forEach(phase -> {
CrossPhasePO crossPhasePO = new CrossPhasePO();
crossPhasePO.setPhaseNo(phase.getPhaseNo());
crossPhasePO.setName(phase.getPhaseName());
crossPhasePO.setSort(Integer.parseInt(phase.getSort()));
crossPhasePO.setCrossId(schemeSendVO.getCrossCode());
crossPhasePO.setPlanId(Integer.parseInt(pattern.getPatternNo()));
crossPhasePO.setRingNo(Integer.parseInt(ring.getRingNo()));
crossPhasePO.setControlMode(Integer.parseInt(phase.getControlMode()));
crossPhasePO.setPhaseTime(Integer.parseInt(phase.getPhaseTime()));
crossPhasePO.setGreenTime(Integer.parseInt(phase.getGreenTime()));
crossPhasePO.setGreenFlashTime(Integer.parseInt(phase.getGreenFlashTime()));
crossPhasePO.setPedFlashTime(Integer.parseInt(phase.getPedFlashTime()));
crossPhasePO.setYellowTime(Integer.parseInt(phase.getYellowTime()));
crossPhasePO.setRedTime(Integer.parseInt(phase.getRedTime()));
crossPhasePO.setMinGreenTime(Integer.parseInt(phase.getMinGreenTime()));
crossPhasePO.setMaxGreenTime(Integer.parseInt(phase.getMaxGreenTime()));
crossPhasePOList.add(crossPhasePO);
});
// 入库路口相位表
crossPhaseMapper.insertBatch(crossPhasePOList);
});
});
// 入库信号方案表
crossSchemeMapper.insertBatch(crossSchemePOList);
}
@Transactional(rollbackFor = Exception.class)
@Override
public JsonViewObject planSendStrategy(PlanSendVO planSendVO) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(planSendVO.getCrossCode());
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.planSend(planSendVO);
} else {
jsonViewObject = wanJiControlCommandService.planSend(planSendVO);
}
planSendDataInsert(planSendVO);
return jsonViewObject;
}
private void planSendDataInsert(PlanSendVO planSendVO) {
List<CrossPlanPO> crossPlanPOList = new ArrayList<>();
planSendVO.getPlanList().forEach(plan -> {
CrossPlanPO crossPlanPO = new CrossPlanPO();
crossPlanPO.setPlanNo(plan.getPlanNo());
crossPlanPO.setName(plan.getPlanDescribe());
crossPlanPO.setCrossId(planSendVO.getCrossCode());
crossPlanPOList.add(crossPlanPO);
List<CrossSectionPO> crossSectionPOList = new ArrayList<>();
plan.getSectionList().forEach(section -> {
CrossSectionPO crossSectionPO = new CrossSectionPO();
crossSectionPO.setSectionNo(section.getSectionNo());
crossSectionPO.setStartTime(section.getBeginTime());
crossSectionPO.setEndTime(section.getEndTime());
crossSectionPO.setCrossId(planSendVO.getCrossCode());
crossSectionPO.setPlanId(Integer.parseInt(plan.getPlanNo()));
crossSectionPO.setControlMode(Integer.parseInt(section.getControlMode()));
crossSectionPO.setScemeId(Integer.parseInt(section.getPatternNo()));
crossSectionPOList.add(crossSectionPO);
});
// 入库路口时段表
crossSectionMapper.insertBatch(crossSectionPOList);
});
// 入库路口计划表
crossPlanMapper.insertBatch(crossPlanPOList);
}
@Transactional(rollbackFor = Exception.class)
@Override
public JsonViewObject scheduleSendStrategy(ScheduleSendVO scheduleSendVO) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(scheduleSendVO.getCrossCode());
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.scheduleSend(scheduleSendVO);
} else {
jsonViewObject = wanJiControlCommandService.scheduleSend(scheduleSendVO);
}
scheduleSendDataInsert(scheduleSendVO);
return jsonViewObject;
}
private void scheduleSendDataInsert(ScheduleSendVO scheduleSendVO) {
// 1、入库操作
SimpleDateFormat sdf = new SimpleDateFormat(DateStyle.YYYY_MM_DD.getValue());
ArrayList<CrossSchedulesPO> crossSchedulesPOS = new ArrayList<>();
scheduleSendVO.getSchedules().forEach(schedule -> {
schedule.getWeeks().forEach(week -> {
CrossSchedulesPO schedulesPO = new CrossSchedulesPO();
if (week.getWeekNum() >= 6) {
schedulesPO.setName("周末");
} else {
schedulesPO.setName("工作日");
}
schedulesPO.setCrossId(scheduleSendVO.getCrossCode());
schedulesPO.setPlanId(week.getPlanNo());
schedulesPO.setWeek(week.getWeekNum());
schedulesPO.setSpecialDate(null);
crossSchedulesPOS.add(schedulesPO);
});
schedule.getSpecialDays().forEach(specialDay -> {
CrossSchedulesPO schedulesPO = new CrossSchedulesPO();
schedulesPO.setName("特殊日期");
schedulesPO.setCrossId(scheduleSendVO.getCrossCode());
schedulesPO.setPlanId(specialDay.getPlanNo());
schedulesPO.setWeek(null);
try {
schedulesPO.setSpecialDate(sdf.parse(specialDay.getDateStr()));
} catch (ParseException e) {
schedulesPO.setSpecialDate(null);
}
crossSchedulesPOS.add(schedulesPO);
});
});
// 入库时间表
crossSchedulesMapper.insertBatch(crossSchedulesPOS);
}
@Override
public JsonViewObject lockControlStrategy(ControlCommandVO commandVO) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(commandVO.getCrossCode());
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.lockControl(commandVO);
} else {
jsonViewObject = wanJiControlCommandService.lockControl(commandVO);
}
return jsonViewObject;
}
@Override
public JsonViewObject stepControlStrategy(String crossId, Integer command, Integer stepNum) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(crossId);
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.stepControl(crossId, command, stepNum);
} else {
jsonViewObject = wanJiControlCommandService.stepControl(crossId, command, stepNum);
}
return jsonViewObject;
}
@Override
public JsonViewObject setSignalControlStrategy(String crossId, Integer command, Integer commandType) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(crossId);
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.setSignalControl(crossId, command, commandType);
} else {
jsonViewObject = wanJiControlCommandService.setSignalControl(crossId, command, commandType);
}
return jsonViewObject;
}
@Override
public JsonViewObject recoverScheduleStrategy(String crossId) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(crossId);
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.recoverSchedule(crossId);
} else {
jsonViewObject = wanJiControlCommandService.recoverSchedule(crossId);
}
return jsonViewObject;
}
@Override
public JsonViewObject phaseTimingSendStrategy(PhaseTimingSendVO phaseTimingSendVO) throws Exception {
JsonViewObject jsonViewObject;
String manufacturerIdCode = getManufacturerCodeByCrossId(phaseTimingSendVO.getCrossCode());
if (StringUtils.equals(BasicEnum.ManufacturerEnum.HK.getCode(), manufacturerIdCode)) {
jsonViewObject = hkControlCommandService.phaseTimingSend(phaseTimingSendVO);
} else {
jsonViewObject = wanJiControlCommandService.phaseTimingSend(phaseTimingSendVO);
}
return jsonViewObject;
}
@Override
public JsonViewObject phaseDiffSendStrategy() {
return null;
}
}
...@@ -7,16 +7,17 @@ import com.google.common.collect.Lists; ...@@ -7,16 +7,17 @@ import com.google.common.collect.Lists;
import com.hikvision.artemis.sdk.ArtemisHttpUtil; import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig; import com.hikvision.artemis.sdk.config.ArtemisConfig;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.utc.common.Result;
import net.wanji.utc.common.baseentity.BaseCrossInfo; import net.wanji.utc.common.baseentity.BaseCrossInfo;
import net.wanji.utc.common.exception.ControlException; import net.wanji.utc.common.exception.ControlException;
import net.wanji.utc.common.typeenum.BasicEnum; import net.wanji.utc.common.typeenum.BasicEnum;
import net.wanji.utc.common.typeenum.DateStyle;
import net.wanji.utc.dto.hk.DownloadPlanSpandsDTO; import net.wanji.utc.dto.hk.DownloadPlanSpandsDTO;
import net.wanji.utc.dto.hk.DownloadScheduleDTO; import net.wanji.utc.dto.hk.DownloadScheduleDTO;
import net.wanji.utc.dto.hk.DownloadTimeSpandsDTO; import net.wanji.utc.dto.hk.DownloadTimeSpandsDTO;
import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.mapper.*; import net.wanji.utc.mapper.*;
import net.wanji.utc.po.*; import net.wanji.utc.po.CrossInfoPO;
import net.wanji.utc.po.CrossPhasePO;
import net.wanji.utc.po.ManufacturerInfoPO;
import net.wanji.utc.service.control.ControlCommandService; import net.wanji.utc.service.control.ControlCommandService;
import net.wanji.utc.service.runninginfo.HkLightsStatusService; import net.wanji.utc.service.runninginfo.HkLightsStatusService;
import net.wanji.utc.util.FieldUtil; import net.wanji.utc.util.FieldUtil;
...@@ -25,8 +26,6 @@ import net.wanji.utc.vo.*; ...@@ -25,8 +26,6 @@ import net.wanji.utc.vo.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -69,363 +68,243 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -69,363 +68,243 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
private ManufacturerInfoMapper manufacturerInfoMapper; private ManufacturerInfoMapper manufacturerInfoMapper;
@Override @Override
public <T> Result<T> schemeSend(SchemeSendVO schemeSendVO) throws Exception { public JsonViewObject schemeSend(SchemeSendVO schemeSendVO) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
// 厂商 HK // 厂商 HK
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(schemeSendVO.getCrossCode()); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(schemeSendVO.getCrossCode());
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { // 1、组装参数, 下发海康信号机
DownloadPlanSpandsDTO dto = new DownloadPlanSpandsDTO();
// 1、组装参数, 下发海康信号机 // 将路口code转换为信号机code
DownloadPlanSpandsDTO dto = new DownloadPlanSpandsDTO(); //dto.setCrossCode(schemeSendVO.getCrossCode());
// 将路口code转换为信号机code dto.setCrossCode(manufacturerInfoPO.getName());
//dto.setCrossCode(schemeSendVO.getCrossCode()); List<DownloadPlanSpandsDTO.Pattern> patternList = new ArrayList<>();
dto.setCrossCode(manufacturerInfoPO.getName()); schemeSendVO.getPatternList().forEach(pattern -> {
List<DownloadPlanSpandsDTO.Pattern> patternList = new ArrayList<>(); DownloadPlanSpandsDTO.Pattern pattern1 = new DownloadPlanSpandsDTO.Pattern();
schemeSendVO.getPatternList().forEach(pattern -> { pattern1.setPatternNo(pattern.getPatternNo());
DownloadPlanSpandsDTO.Pattern pattern1 = new DownloadPlanSpandsDTO.Pattern(); pattern1.setPatternName(pattern.getPatternName());
pattern1.setPatternNo(pattern.getPatternNo()); pattern1.setCoordPhase(pattern.getCoordPhase());
pattern1.setPatternName(pattern.getPatternName()); pattern1.setOffset(pattern.getOffset());
pattern1.setCoordPhase(pattern.getCoordPhase()); pattern1.setCycle(pattern.getCycle());
pattern1.setOffset(pattern.getOffset()); List<DownloadPlanSpandsDTO.Pattern.Ring> rings = new ArrayList<>();
pattern1.setCycle(pattern.getCycle()); pattern.getRings().forEach(ring -> {
List<DownloadPlanSpandsDTO.Pattern.Ring> rings = new ArrayList<>(); DownloadPlanSpandsDTO.Pattern.Ring ring1 = new DownloadPlanSpandsDTO.Pattern.Ring();
pattern.getRings().forEach(ring -> { ring1.setRingNo(ring.getRingNo());
DownloadPlanSpandsDTO.Pattern.Ring ring1 = new DownloadPlanSpandsDTO.Pattern.Ring(); List<DownloadPlanSpandsDTO.Pattern.Ring.Phase> phaseList = new ArrayList<>();
ring1.setRingNo(ring.getRingNo()); ring.getPhaseList().forEach(phase -> {
List<DownloadPlanSpandsDTO.Pattern.Ring.Phase> phaseList = new ArrayList<>(); DownloadPlanSpandsDTO.Pattern.Ring.Phase phase1 = new DownloadPlanSpandsDTO.Pattern.Ring.Phase();
ring.getPhaseList().forEach(phase -> { phase1.setPhaseNo(phase.getPhaseNo());
DownloadPlanSpandsDTO.Pattern.Ring.Phase phase1 = new DownloadPlanSpandsDTO.Pattern.Ring.Phase(); phase1.setPhaseName(phase.getPhaseName());
phase1.setPhaseNo(phase.getPhaseNo()); phase1.setPhaseLength(phase.getPhaseTime());
phase1.setPhaseName(phase.getPhaseName()); phase1.setPhaseSequence(phase.getSort());
phase1.setPhaseLength(phase.getPhaseTime()); phase1.setLanes(Lists.newArrayList());
phase1.setPhaseSequence(phase.getSort()); phaseList.add(phase1);
phase1.setLanes(Lists.newArrayList());
phaseList.add(phase1);
});
ring1.setPhaseList(phaseList);
rings.add(ring1);
}); });
pattern1.setRings(rings); ring1.setPhaseList(phaseList);
patternList.add(pattern1); rings.add(ring1);
}); });
dto.setPatternList(patternList); pattern1.setRings(rings);
// 下发信号机方案 patternList.add(pattern1);
Map<String, Object> fieldMap = FieldUtil.fieldMethod(dto); });
Map<String, String> path = PathUtil.getPathMapByApiCode("downloadPlanSpands"); dto.setPatternList(patternList);
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, // 下发信号机方案
path, Map<String, Object> fieldMap = FieldUtil.fieldMethod(dto);
JSON.toJSONString(fieldMap), null, null, "application/json", null); Map<String, String> path = PathUtil.getPathMapByApiCode("downloadPlanSpands");
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
JSONObject obj = JSON.parseObject(strResult); path,
if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) { JSON.toJSONString(fieldMap), null, null, "application/json", null);
// 入库操作
List<CrossSchemePO> crossSchemePOList = new ArrayList<>();
schemeSendVO.getPatternList().forEach(pattern -> {
CrossSchemePO crossSchemePO = new CrossSchemePO();
crossSchemePO.setSchemeNo(pattern.getPatternNo());
crossSchemePO.setName(pattern.getPatternName());
crossSchemePO.setCrossId(schemeSendVO.getCrossCode());
crossSchemePO.setCycle(Integer.parseInt(pattern.getCycle()));
crossSchemePO.setCoordPhase(Integer.parseInt(pattern.getCoordPhase()));
crossSchemePO.setOffset(Integer.parseInt(pattern.getOffset()));
crossSchemePO.setSource(2);
crossSchemePO.setIsDeleted(0);
crossSchemePOList.add(crossSchemePO);
pattern.getRings().forEach(ring -> {
List<CrossPhasePO> crossPhasePOList = new ArrayList<>();
ring.getPhaseList().forEach(phase -> {
CrossPhasePO crossPhasePO = new CrossPhasePO();
crossPhasePO.setPhaseNo(phase.getPhaseNo());
crossPhasePO.setName(phase.getPhaseName());
crossPhasePO.setSort(Integer.parseInt(phase.getSort()));
crossPhasePO.setCrossId(schemeSendVO.getCrossCode());
crossPhasePO.setPlanId(Integer.parseInt(pattern.getPatternNo()));
crossPhasePO.setRingNo(Integer.parseInt(ring.getRingNo()));
crossPhasePO.setControlMode(Integer.parseInt(phase.getControlMode()));
crossPhasePO.setPhaseTime(Integer.parseInt(phase.getPhaseTime()));
crossPhasePO.setGreenTime(Integer.parseInt(phase.getGreenTime()));
crossPhasePO.setGreenFlashTime(Integer.parseInt(phase.getGreenFlashTime()));
crossPhasePO.setPedFlashTime(Integer.parseInt(phase.getPedFlashTime()));
crossPhasePO.setYellowTime(Integer.parseInt(phase.getYellowTime()));
crossPhasePO.setRedTime(Integer.parseInt(phase.getRedTime()));
crossPhasePO.setMinGreenTime(Integer.parseInt(phase.getMinGreenTime()));
crossPhasePO.setMaxGreenTime(Integer.parseInt(phase.getMaxGreenTime()));
crossPhasePOList.add(crossPhasePO);
});
// 入库路口相位表
crossPhaseMapper.insertBatch(crossPhasePOList);
});
});
// 入库信号方案表
crossSchemeMapper.insertBatch(crossSchemePOList);
return Result.success("下发信号机方案成功"); JSONObject obj = JSON.parseObject(strResult);
} if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
return Result.error(obj.getString("msg")); return jsonViewObject.success("海康下发信号机方案成功");
} else {
return null;
} }
return jsonViewObject.fail(obj.getString("msg"));
} }
@Override @Override
public <T> Result<T> planSend(PlanSendVO planSendVO) throws Exception { public JsonViewObject planSend(PlanSendVO planSendVO) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
// 厂商 HK // 厂商 HK
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(planSendVO.getCrossCode()); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(planSendVO.getCrossCode());
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { // 1、下发信号机计划拼接参数
// 1、下发信号机计划拼接参数 DownloadTimeSpandsDTO downloadTimeSpandsDTO = new DownloadTimeSpandsDTO();
DownloadTimeSpandsDTO downloadTimeSpandsDTO = new DownloadTimeSpandsDTO(); List<DownloadTimeSpandsDTO.Data> dataList = new ArrayList<>();
List<DownloadTimeSpandsDTO.Data> dataList = new ArrayList<>(); DownloadTimeSpandsDTO.Data data = new DownloadTimeSpandsDTO.Data();
DownloadTimeSpandsDTO.Data data = new DownloadTimeSpandsDTO.Data(); //data.setCrossCode(planSendVO.getCrossCode());
//data.setCrossCode(planSendVO.getCrossCode()); data.setCrossCode(manufacturerInfoPO.getName());
data.setCrossCode(manufacturerInfoPO.getName()); List<DownloadTimeSpandsDTO.Data.Plan> planList = new ArrayList<>();
List<DownloadTimeSpandsDTO.Data.Plan> planList = new ArrayList<>(); planSendVO.getPlanList().forEach(plan -> {
planSendVO.getPlanList().forEach(plan -> { DownloadTimeSpandsDTO.Data.Plan plan1 = new DownloadTimeSpandsDTO.Data.Plan();
DownloadTimeSpandsDTO.Data.Plan plan1 = new DownloadTimeSpandsDTO.Data.Plan(); plan1.setPlanNo(plan.getPlanNo());
plan1.setPlanNo(plan.getPlanNo()); List<DownloadTimeSpandsDTO.Data.Plan.Section> sectionList = new ArrayList<>();
List<DownloadTimeSpandsDTO.Data.Plan.Section> sectionList = new ArrayList<>(); plan.getSectionList().forEach(section -> {
plan.getSectionList().forEach(section -> { DownloadTimeSpandsDTO.Data.Plan.Section section1 = new DownloadTimeSpandsDTO.Data.Plan.Section();
DownloadTimeSpandsDTO.Data.Plan.Section section1 = new DownloadTimeSpandsDTO.Data.Plan.Section(); section1.setTimeSecNo(section.getSectionNo());
section1.setTimeSecNo(section.getSectionNo()); section1.setPatternNo(section.getPatternNo());
section1.setPatternNo(section.getPatternNo()); section1.setControlType(section.getControlMode());
section1.setControlType(section.getControlMode()); section1.setBeginTime(section.getBeginTime());
section1.setBeginTime(section.getBeginTime()); sectionList.add(section1);
sectionList.add(section1);
});
plan1.setSectionList(sectionList);
planList.add(plan1);
}); });
data.setPlanList(planList); plan1.setSectionList(sectionList);
dataList.add(data); planList.add(plan1);
downloadTimeSpandsDTO.setData(dataList); });
data.setPlanList(planList);
// 1、下发信号机计划 dataList.add(data);
Map<String, Object> fieldMap = FieldUtil.fieldMethod(downloadTimeSpandsDTO); downloadTimeSpandsDTO.setData(dataList);
Map<String, String> path = PathUtil.getPathMapByApiCode("downloadTimeSpands");
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, // 1、下发信号机计划
path, Map<String, Object> fieldMap = FieldUtil.fieldMethod(downloadTimeSpandsDTO);
JSON.toJSONString(fieldMap), null, null, "application/json", null); Map<String, String> path = PathUtil.getPathMapByApiCode("downloadTimeSpands");
JSONObject obj = JSON.parseObject(strResult); String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) { path,
// 2、入库操作 JSON.toJSONString(fieldMap), null, null, "application/json", null);
List<CrossPlanPO> crossPlanPOList = new ArrayList<>(); JSONObject obj = JSON.parseObject(strResult);
planSendVO.getPlanList().forEach(plan -> { if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
CrossPlanPO crossPlanPO = new CrossPlanPO(); return jsonViewObject.success("下发信号机计划成功");
crossPlanPO.setPlanNo(plan.getPlanNo());
crossPlanPO.setName(plan.getPlanDescribe());
crossPlanPO.setCrossId(planSendVO.getCrossCode());
crossPlanPOList.add(crossPlanPO);
List<CrossSectionPO> crossSectionPOList = new ArrayList<>();
plan.getSectionList().forEach(section -> {
CrossSectionPO crossSectionPO = new CrossSectionPO();
crossSectionPO.setSectionNo(section.getSectionNo());
crossSectionPO.setStartTime(section.getBeginTime());
crossSectionPO.setEndTime(section.getEndTime());
crossSectionPO.setCrossId(planSendVO.getCrossCode());
crossSectionPO.setPlanId(Integer.parseInt(plan.getPlanNo()));
crossSectionPO.setControlMode(Integer.parseInt(section.getControlMode()));
crossSectionPO.setScemeId(Integer.parseInt(section.getPatternNo()));
crossSectionPOList.add(crossSectionPO);
});
// 入库路口时段表
crossSectionMapper.insertBatch(crossSectionPOList);
});
// 入库路口计划表
crossPlanMapper.insertBatch(crossPlanPOList);
return Result.success("下发信号机计划成功");
}
return Result.error(obj.getString("msg"));
} else {
// todo else
return null;
} }
return jsonViewObject.fail(obj.getString("msg"));
} }
@Override @Override
public <T> Result<T> scheduleSend(ScheduleSendVO param) throws Exception { public JsonViewObject scheduleSend(ScheduleSendVO param) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
// 厂商 HK // 厂商 HK
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(param.getCrossCode()); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(param.getCrossCode());
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { // 1、通过获取当前运行的日期数据,获取最新的日期方案id
// 1、通过获取当前运行的日期数据,获取最新的日期方案id JSONArray body = new JSONArray();
JSONArray body = new JSONArray(); //body.add(param.getCrossCode());
//body.add(param.getCrossCode()); body.add(manufacturerInfoPO.getName());
body.add(manufacturerInfoPO.getName()); Map<String, String> path = PathUtil.getPathMapByApiCode("uploadDate");
Map<String, String> path = PathUtil.getPathMapByApiCode("uploadDate"); String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path,
path, body.toString(), null, null, "application/json", null);
body.toString(), null, null, "application/json", null); JSONObject object = JSON.parseObject(strResult);
JSONObject object = JSON.parseObject(strResult); // 日期 id
// 日期 id int id = 1;
int id = 1; if (object.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
if (object.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) { // 获取日期列表
// 获取日期列表 JSONArray schedulesArray = object.getJSONArray("data").getJSONObject(0).getJSONArray("schedules");
JSONArray schedulesArray = object.getJSONArray("data").getJSONObject(0).getJSONArray("schedules"); JSONObject scheduleObj = schedulesArray.getJSONObject(schedulesArray.size() - 1);
JSONObject scheduleObj = schedulesArray.getJSONObject(schedulesArray.size() - 1); id = scheduleObj.getInteger("id");
id = scheduleObj.getInteger("id"); }
} // 下发信号机日期拼接参数
// 下发信号机日期拼接参数 DownloadScheduleDTO dto = new DownloadScheduleDTO();
DownloadScheduleDTO dto = new DownloadScheduleDTO(); //dto.setCrossCode(param.getCrossCode());
//dto.setCrossCode(param.getCrossCode()); dto.setCrossCode(manufacturerInfoPO.getName());
dto.setCrossCode(manufacturerInfoPO.getName()); List<DownloadScheduleDTO.Schedule> schedules = new ArrayList<>();
List<DownloadScheduleDTO.Schedule> schedules = new ArrayList<>(); for (ScheduleSendVO.Schedule schedule : param.getSchedules()) {
for (ScheduleSendVO.Schedule schedule : param.getSchedules()) { List<ScheduleSendVO.Schedule.Week> scheduleWeeks = schedule.getWeeks();
List<ScheduleSendVO.Schedule.Week> scheduleWeeks = schedule.getWeeks(); List<ScheduleSendVO.Schedule.SpecialDay> scheduleDays = schedule.getSpecialDays();
List<ScheduleSendVO.Schedule.SpecialDay> scheduleDays = schedule.getSpecialDays(); if (null != scheduleWeeks && scheduleWeeks.size() > 0) {
if (null != scheduleWeeks && scheduleWeeks.size() > 0) { // 去重,获取所有的运行方案号
// 去重,获取所有的运行方案号 Set<Integer> planNos = new HashSet<>();
Set<Integer> planNos = new HashSet<>(); scheduleWeeks.forEach(week -> planNos.add(week.getPlanNo()));
scheduleWeeks.forEach(week -> planNos.add(week.getPlanNo())); if (null != scheduleDays && scheduleDays.size() > 0) {
if (null != scheduleDays && scheduleDays.size() > 0) { scheduleDays.forEach(specialDay -> planNos.add(specialDay.getPlanNo()));
scheduleDays.forEach(specialDay -> planNos.add(specialDay.getPlanNo()));
}
int num = 0;
for (Integer planNo : planNos) {
DownloadScheduleDTO.Schedule schedule1 = new DownloadScheduleDTO.Schedule();
// scheduleNo 日期号 ,支持返回【1~128】
if (id + planNos.size() > 128) {
schedule1.setScheduleNo(128 - planNos.size() - (++num));
} else {
schedule1.setScheduleNo(id + (++num));
}
// 0 说明 dates 内的日期是日期集合,1 说明是dates 内的数据是日期范围
schedule1.setIsPeriod(0);
// 特殊日期列表
List<String> dates = new ArrayList<>();
schedule.getSpecialDays().forEach(specialDay -> {
if (specialDay.getPlanNo().equals(planNo)) {
dates.add(specialDay.getDateStr());
}
});
schedule1.setDates(dates);
// 星期列表
List<String> weeks = new ArrayList<>();
schedule.getWeeks().forEach(week -> {
if (week.getPlanNo().equals(planNo)) {
weeks.add(String.valueOf(week.getWeekNum()));
}
});
schedule1.setWeeks(weeks);
schedule1.setPlanNo(planNo);
schedules.add(schedule1);
}
} }
} int num = 0;
dto.setSchedules(schedules); for (Integer planNo : planNos) {
// 2、下发时间表 DownloadScheduleDTO.Schedule schedule1 = new DownloadScheduleDTO.Schedule();
Map<String, Object> fieldMap = FieldUtil.fieldMethod(dto); // scheduleNo 日期号 ,支持返回【1~128】
for (DownloadScheduleDTO.Schedule schedule : dto.getSchedules()) { if (id + planNos.size() > 128) {
List<Map<String, Object>> mapSchedules = (List<Map<String, Object>>) fieldMap.get("schedules"); schedule1.setScheduleNo(128 - planNos.size() - (++num));
for (Map<String, Object> mapSchedule : mapSchedules) { } else {
if (mapSchedule.get("planNo").equals(schedule.getPlanNo())) { schedule1.setScheduleNo(id + (++num));
mapSchedule.put("weeks", schedule.getWeeks());
mapSchedule.put("dates", schedule.getDates());
break;
} }
} // 0 说明 dates 内的日期是日期集合,1 说明是dates 内的数据是日期范围
} schedule1.setIsPeriod(0);
Map<String, String> downloadSchedulePath = PathUtil.getPathMapByApiCode("downloadTimeSpands"); // 特殊日期列表
String updateResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, List<String> dates = new ArrayList<>();
downloadSchedulePath, schedule.getSpecialDays().forEach(specialDay -> {
JSON.toJSONString(fieldMap), null, null, "application/json", null); if (specialDay.getPlanNo().equals(planNo)) {
JSONObject obj = JSON.parseObject(updateResult); dates.add(specialDay.getDateStr());
if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
// 1、入库操作
SimpleDateFormat sdf = new SimpleDateFormat(DateStyle.YYYY_MM_DD.getValue());
ArrayList<CrossSchedulesPO> crossSchedulesPOS = new ArrayList<>();
param.getSchedules().forEach(schedule -> {
schedule.getWeeks().forEach(week -> {
CrossSchedulesPO schedulesPO = new CrossSchedulesPO();
if (week.getWeekNum() >= 6) {
schedulesPO.setName("周末");
} else {
schedulesPO.setName("工作日");
} }
schedulesPO.setCrossId(param.getCrossCode());
schedulesPO.setPlanId(week.getPlanNo());
schedulesPO.setWeek(week.getWeekNum());
schedulesPO.setSpecialDate(null);
crossSchedulesPOS.add(schedulesPO);
}); });
schedule.getSpecialDays().forEach(specialDay -> { schedule1.setDates(dates);
CrossSchedulesPO schedulesPO = new CrossSchedulesPO(); // 星期列表
schedulesPO.setName("特殊日期"); List<String> weeks = new ArrayList<>();
schedulesPO.setCrossId(param.getCrossCode()); schedule.getWeeks().forEach(week -> {
schedulesPO.setPlanId(specialDay.getPlanNo()); if (week.getPlanNo().equals(planNo)) {
schedulesPO.setWeek(null); weeks.add(String.valueOf(week.getWeekNum()));
try {
schedulesPO.setSpecialDate(sdf.parse(specialDay.getDateStr()));
} catch (ParseException e) {
schedulesPO.setSpecialDate(null);
} }
crossSchedulesPOS.add(schedulesPO);
}); });
}); schedule1.setWeeks(weeks);
// 入库时间表 schedule1.setPlanNo(planNo);
crossSchedulesMapper.insertBatch(crossSchedulesPOS); schedules.add(schedule1);
}
return Result.success("时间表下发成功"); }
}
dto.setSchedules(schedules);
// 2、下发时间表
Map<String, Object> fieldMap = FieldUtil.fieldMethod(dto);
for (DownloadScheduleDTO.Schedule schedule : dto.getSchedules()) {
List<Map<String, Object>> mapSchedules = (List<Map<String, Object>>) fieldMap.get("schedules");
for (Map<String, Object> mapSchedule : mapSchedules) {
if (mapSchedule.get("planNo").equals(schedule.getPlanNo())) {
mapSchedule.put("weeks", schedule.getWeeks());
mapSchedule.put("dates", schedule.getDates());
break;
}
} }
return Result.error(obj.getString("msg"));
} else {
// todo else
return null;
} }
Map<String, String> downloadSchedulePath = PathUtil.getPathMapByApiCode("downloadTimeSpands");
String updateResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
downloadSchedulePath,
JSON.toJSONString(fieldMap), null, null, "application/json", null);
JSONObject obj = JSON.parseObject(updateResult);
if (obj.get(HK_CODE_KEY).equals(HK_SUCCESS_STRING_CODE)) {
return jsonViewObject.success("时间表下发成功");
}
return jsonViewObject.fail(obj.getString("msg"));
} }
@Override @Override
public <T> Result<T> lockControl(ControlCommandVO commandVO) throws Exception { public JsonViewObject lockControl(ControlCommandVO commandVO) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(commandVO.getCrossCode()); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(commandVO.getCrossCode());
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { if (commandVO.getCommand().equals(TRUE)) {
if (commandVO.getCommand().equals(TRUE)) { Map<String, Object> param = new HashMap<String, Object>() {
Map<String, Object> param = new HashMap<String, Object>() { {
{ //put("crossCode", commandVO.getCrossCode());
//put("crossCode", commandVO.getCrossCode()); put("crossCode", manufacturerInfoPO.getName());
put("crossCode", manufacturerInfoPO.getName()); put("controlType", LOCK_RUNNING_CONTROL);
put("controlType", LOCK_RUNNING_CONTROL);
}
};
// 控制命令为灯态锁定时,设置相关车道参数信息
//List<SignalRunring> runrings = getSignalInfoVos(commandVO.getCrossCode()).get(0).getRunrings();
// HK 为单环
// 获取当前运行方案的相位id
LightsStatusVO statusVO = getSignalInfoVos(manufacturerInfoPO.getName()).get(0);
Integer phaseId = Integer.valueOf(statusVO.getPhaseId());
// 获取某一路口下海康相位和车道关系
//Map<Integer, JSONArray> laneArrayMap = getPhaseRelationLanes(commandVO.getCrossCode());
Map<Integer, JSONArray> laneArrayMap = getPhaseRelationLanes(manufacturerInfoPO.getName());
JSONArray jsonArray = laneArrayMap.get(phaseId);
List<Map<String, Object>> laneList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Map<String, Object> laneMap = new HashMap<>();
laneMap.put("laneNo", jsonObject.getInteger("laneNo"));
laneMap.put("turn", jsonObject.getInteger("turn"));
laneMap.put("direction", jsonObject.getInteger("direction"));
laneList.add(laneMap);
}
param.put("laneInfos", laneList);
param.put("controlNo", 0);
// 控制时长,单位 s,0 则持续控制
param.put("duration", Objects.isNull(commandVO.getDuration()) || commandVO.getDuration() == 0 ? 999 : commandVO.getDuration());
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
PathUtil.getPathMapByApiCode("setSignalControl"),
JSON.toJSONString(param), null, null, "application/json", null);
JSONObject obj = JSON.parseObject(strResult);
if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) {
return Result.success("相位锁定成功");
} }
return Result.error(obj.getString("msg")); };
} else { // 控制命令为灯态锁定时,设置相关车道参数信息
//return controlSignal(commandVO.getCrossCode(), UNLOCK_RUNNING_CONTROL); //List<SignalRunring> runrings = getSignalInfoVos(commandVO.getCrossCode()).get(0).getRunrings();
return controlSignal(manufacturerInfoPO.getName(), UNLOCK_RUNNING_CONTROL); // HK 为单环
// 获取当前运行方案的相位id
LightsStatusVO statusVO = getSignalInfoVos(manufacturerInfoPO.getName()).get(0);
Integer phaseId = Integer.valueOf(statusVO.getPhaseId());
// 获取某一路口下海康相位和车道关系
//Map<Integer, JSONArray> laneArrayMap = getPhaseRelationLanes(commandVO.getCrossCode());
Map<Integer, JSONArray> laneArrayMap = getPhaseRelationLanes(manufacturerInfoPO.getName());
JSONArray jsonArray = laneArrayMap.get(phaseId);
List<Map<String, Object>> laneList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Map<String, Object> laneMap = new HashMap<>();
laneMap.put("laneNo", jsonObject.getInteger("laneNo"));
laneMap.put("turn", jsonObject.getInteger("turn"));
laneMap.put("direction", jsonObject.getInteger("direction"));
laneList.add(laneMap);
} }
param.put("laneInfos", laneList);
param.put("controlNo", 0);
// 控制时长,单位 s,0 则持续控制
param.put("duration", Objects.isNull(commandVO.getDuration()) || commandVO.getDuration() == 0 ? 999 : commandVO.getDuration());
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
PathUtil.getPathMapByApiCode("setSignalControl"),
JSON.toJSONString(param), null, null, "application/json", null);
JSONObject obj = JSON.parseObject(strResult);
if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) {
return jsonViewObject.success("相位锁定成功");
}
return jsonViewObject.fail(obj.getString("msg"));
} else { } else {
// todo else //return controlSignal(commandVO.getCrossCode(), UNLOCK_RUNNING_CONTROL);
return null; return controlSignal(manufacturerInfoPO.getName(), UNLOCK_RUNNING_CONTROL);
} }
} }
/** /**
...@@ -460,112 +339,95 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -460,112 +339,95 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
} }
@Override @Override
public <T> Result<T> stepControl(String code, Integer command, Integer stepNum) throws Exception { public JsonViewObject stepControl(String code, Integer command, Integer stepNum) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(code); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(code);
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { if (command.equals(TRUE)) {
if (command.equals(TRUE)) {
Map<String, Object> param = new HashMap<String, Object>() { Map<String, Object> param = new HashMap<String, Object>() {
{ {
//put("crossCode", code); //put("crossCode", code);
put("crossCode", manufacturerInfoPO.getName()); put("crossCode", manufacturerInfoPO.getName());
put("controlType", STEP_CONTROL); put("controlType", STEP_CONTROL);
} }
}; };
int controlNo = 0; int controlNo = 0;
if (0 != stepNum) { if (0 != stepNum) {
//根据当前实时灯态获取运行的相位 //根据当前实时灯态获取运行的相位
//LightsStatusVO lightsStatusVO = getSignalInfoVos(code).get(0); //LightsStatusVO lightsStatusVO = getSignalInfoVos(code).get(0);
LightsStatusVO lightsStatusVO = getSignalInfoVos(manufacturerInfoPO.getName()).get(0); LightsStatusVO lightsStatusVO = getSignalInfoVos(manufacturerInfoPO.getName()).get(0);
//暂时按单环处理 //暂时按单环处理
String phaseId = lightsStatusVO.getPhaseId(); String phaseId = lightsStatusVO.getPhaseId();
//获取方案数据列表 //获取方案数据列表
List<CrossPhasePO> baseCrossPhasePlanList = crossPhaseMapper.selectByCrossIdAndPlanId(lightsStatusVO.getCode(), lightsStatusVO.getPhasePlanId()); List<CrossPhasePO> baseCrossPhasePlanList = crossPhaseMapper.selectByCrossIdAndPlanId(lightsStatusVO.getCode(), lightsStatusVO.getPhasePlanId());
Map<String, List<CrossPhasePO>> groupByPhase = baseCrossPhasePlanList.stream().collect(Collectors.groupingBy(CrossPhasePO::getPhaseNo)); Map<String, List<CrossPhasePO>> groupByPhase = baseCrossPhasePlanList.stream().collect(Collectors.groupingBy(CrossPhasePO::getPhaseNo));
//根据相位获取当前相序 //根据相位获取当前相序
int newPhaseOrderId = 0; int newPhaseOrderId = 0;
for (String key : groupByPhase.keySet()) { for (String key : groupByPhase.keySet()) {
CrossPhasePO crossPhase = groupByPhase.get(key).get(0); CrossPhasePO crossPhase = groupByPhase.get(key).get(0);
if (crossPhase.getPhaseNo().equals(phaseId)) { if (crossPhase.getPhaseNo().equals(phaseId)) {
newPhaseOrderId = (crossPhase.getSort() + stepNum) % groupByPhase.size(); newPhaseOrderId = (crossPhase.getSort() + stepNum) % groupByPhase.size();
}
}
//根据相序获取相位
for (String key : groupByPhase.keySet()) {
CrossPhasePO crossPhase = groupByPhase.get(key).get(0);
if (newPhaseOrderId == crossPhase.getSort()) {
controlNo = Integer.parseInt(crossPhase.getPhaseNo());
}
} }
} }
param.put("controlNo", controlNo); //根据相序获取相位
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, for (String key : groupByPhase.keySet()) {
PathUtil.getPathMapByApiCode("setSignalControl"), CrossPhasePO crossPhase = groupByPhase.get(key).get(0);
JSON.toJSONString(param), null, null, "application/json", null); if (newPhaseOrderId == crossPhase.getSort()) {
JSONObject obj = JSON.parseObject(strResult); controlNo = Integer.parseInt(crossPhase.getPhaseNo());
if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) { }
return Result.success();
} }
return Result.error(obj.getString("msg"));
} else {
//return controlSignal(code, CANCEL_STEP_CONTROL);
return controlSignal(manufacturerInfoPO.getName(), CANCEL_STEP_CONTROL);
} }
param.put("controlNo", controlNo);
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
PathUtil.getPathMapByApiCode("setSignalControl"),
JSON.toJSONString(param), null, null, "application/json", null);
JSONObject obj = JSON.parseObject(strResult);
if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) {
return jsonViewObject.success();
}
return jsonViewObject.fail(obj.getString("msg"));
} else { } else {
// todo else //return controlSignal(code, CANCEL_STEP_CONTROL);
return null; return controlSignal(manufacturerInfoPO.getName(), CANCEL_STEP_CONTROL);
} }
} }
@Override @Override
public <T> Result<T> setSignalControl(String code, Integer command, Integer commandType) throws Exception { public JsonViewObject setSignalControl(String code, Integer command, Integer commandType) throws Exception {
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(code); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(code);
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { Integer runningMode = command.equals(TRUE) ? commandType : NORMAL_RUNNING_CONTROL;
Integer runningMode = command.equals(TRUE) ? commandType : NORMAL_RUNNING_CONTROL; //return controlSignal(code, runningMode);
//return controlSignal(code, runningMode); return controlSignal(manufacturerInfoPO.getName(), runningMode);
return controlSignal(manufacturerInfoPO.getName(), runningMode);
} else {
// todo else
return null;
}
} }
@Override @Override
public <T> Result<T> recoverSchedule(String code) throws Exception { public JsonViewObject recoverSchedule(String code) throws Exception {
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(code); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(code);
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { //return controlSignal(code, NORMAL_RUNNING_CONTROL);
//return controlSignal(code, NORMAL_RUNNING_CONTROL); return controlSignal(manufacturerInfoPO.getName(), NORMAL_RUNNING_CONTROL);
return controlSignal(manufacturerInfoPO.getName(), NORMAL_RUNNING_CONTROL);
} else {
// todo else
return null;
}
} }
@Override @Override
public <T> Result<T> phaseTimingSend(PhaseTimingSendVO phaseTimingSendVO) throws Exception { public JsonViewObject phaseTimingSend(PhaseTimingSendVO phaseTimingSendVO) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(phaseTimingSendVO.getCrossCode()); ManufacturerInfoPO manufacturerInfoPO = checkCrossCode(phaseTimingSendVO.getCrossCode());
if (manufacturerInfoPO.getCode().equals(BasicEnum.ManufacturerEnum.HK.getCode())) { // 将路口code转换为信号机code
// 将路口code转换为信号机code phaseTimingSendVO.setCrossCode(manufacturerInfoPO.getName());
phaseTimingSendVO.setCrossCode(manufacturerInfoPO.getName()); Map<String, Object> param = FieldUtil.fieldMethod(phaseTimingSendVO);
Map<String, Object> param = FieldUtil.fieldMethod(phaseTimingSendVO); Map<String, String> path = PathUtil.getPathMapByApiCode("setPhaseRlatLanes");
Map<String, String> path = PathUtil.getPathMapByApiCode("setPhaseRlatLanes"); String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path,
path, JSON.toJSONString(param), null, null, "application/json", null);
JSON.toJSONString(param), null, null, "application/json", null); JSONObject obj = JSON.parseObject(strResult);
JSONObject obj = JSON.parseObject(strResult); if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) {
if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) { return jsonViewObject.success();
return Result.success();
}
return Result.error(obj.getString("msg"));
} else {
// todo else
return null;
} }
return jsonViewObject.fail(obj.getString("msg"));
} }
@Override @Override
public <T> Result<T> phaseDiffSend() { public JsonViewObject phaseDiffSend() {
return null; return null;
} }
...@@ -573,7 +435,8 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -573,7 +435,8 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
* @param code 信号机编号 * @param code 信号机编号
* @param runningMode 0-多时段控制模式 1-关灯、2-黄闪、3-全红、11-取消步进控制、12-灯态锁定、13-灯态解锁 * @param runningMode 0-多时段控制模式 1-关灯、2-黄闪、3-全红、11-取消步进控制、12-灯态锁定、13-灯态解锁
*/ */
private <T> Result<T> controlSignal(String code, Integer runningMode) throws Exception { private JsonViewObject controlSignal(String code, Integer runningMode) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
//执行恢复时间表方案命令 //执行恢复时间表方案命令
if (NORMAL_RUNNING_CONTROL.equals(runningMode) || CANCEL_STEP_CONTROL.equals(runningMode)) { if (NORMAL_RUNNING_CONTROL.equals(runningMode) || CANCEL_STEP_CONTROL.equals(runningMode)) {
//根据实时灯态获取当前运行模式 //根据实时灯态获取当前运行模式
...@@ -602,9 +465,9 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -602,9 +465,9 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
JSON.toJSONString(param), null, null, "application/json", null); JSON.toJSONString(param), null, null, "application/json", null);
JSONObject obj = JSON.parseObject(strResult); JSONObject obj = JSON.parseObject(strResult);
if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) { if (HK_SUCCESS_STRING_CODE.equals(obj.get(HK_CODE_KEY))) {
return Result.success(); return jsonViewObject.success();
} }
return Result.error(obj.getString("msg")); return jsonViewObject.fail(obj.getString("msg"));
} }
/** /**
......
package net.wanji.utc.service.control.impl;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.service.control.ControlCommandService;
import net.wanji.utc.util.HttpRestUtil;
import net.wanji.utc.util.StringUtils;
import net.wanji.utc.vo.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.HashMap;
/**
* @author duanruiming
* @date 2023/01/12 13:18
*/
@Service("wanJiControlCommandService")
@RequiredArgsConstructor
public class WanJiControlCommandServiceImpl implements ControlCommandService {
private final HttpRestUtil httpRestUtil;
@Value("url")
private String rpcUri;
/**
* @param schemeSendVO
* @return
* @throws Exception
*/
@Override
public JsonViewObject schemeSend(SchemeSendVO schemeSendVO) throws Exception {
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(schemeSendVO));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议下发方案成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject planSend(PlanSendVO planSendVO) throws Exception {
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(planSendVO));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议下发计划成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject scheduleSend(ScheduleSendVO scheduleSendVO) throws Exception {
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(scheduleSendVO));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议下发时间表成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject lockControl(ControlCommandVO commandVO) throws Exception {
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(commandVO));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议锁定控制成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject stepControl(String crossId, Integer command, Integer stepNum) throws Exception {
HashMap<String, Object> paraMap = new HashMap<>();
paraMap.put("crossId", crossId);
paraMap.put("command", command);
paraMap.put("stepNum", stepNum);
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(paraMap));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议步进控制成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject setSignalControl(String crossId, Integer command, Integer commandType) throws Exception {
HashMap<String, Object> paraMap = new HashMap<>();
paraMap.put("crossId", crossId);
paraMap.put("command", command);
paraMap.put("commandType", commandType);
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(paraMap));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议设置信号机控制模式成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject recoverSchedule(String crossId) throws Exception {
HashMap<String, Object> paraMap = new HashMap<>();
paraMap.put("crossId", crossId);
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(paraMap));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议恢复时间表成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject phaseTimingSend(PhaseTimingSendVO phaseTimingSendVO) throws Exception {
JsonViewObject jsonViewObject = rpcService(httpRestUtil, rpcUri, null, JSONObject.toJSONString(phaseTimingSendVO));
if (StringUtils.endsWithIgnoreCase("success", jsonViewObject.getStatus())) {
return jsonViewObject.success("万集标准协议下发相位配时成功!");
}
return jsonViewObject;
}
@Override
public JsonViewObject phaseDiffSend() {
return null;
}
}
package net.wanji.utc.service.rpcservice; package net.wanji.utc.service.rpc;
import net.wanji.utc.entity.JsonViewObject; import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.util.HttpRestUtil; import net.wanji.utc.util.HttpRestUtil;
...@@ -10,7 +10,7 @@ import java.util.Objects; ...@@ -10,7 +10,7 @@ import java.util.Objects;
* @author duanruiming * @author duanruiming
* @date 2023/01/09 9:57 * @date 2023/01/09 9:57
*/ */
public interface rpcService { public interface RpcService {
/** /**
* 远程调用信号机设备 * 远程调用信号机设备
......
package net.wanji.utc.service.runninginfo; package net.wanji.utc.service.runninginfo;
import net.wanji.utc.po.SignalStatusLogPO; import net.wanji.utc.po.SignalStatusLogPO;
import net.wanji.utc.service.rpcservice.rpcService; import net.wanji.utc.service.rpc.RpcService;
import net.wanji.utc.vo.LightsStatusVO; import net.wanji.utc.vo.LightsStatusVO;
import java.util.List; import java.util.List;
...@@ -10,7 +10,7 @@ import java.util.List; ...@@ -10,7 +10,7 @@ import java.util.List;
* @author duanruiming * @author duanruiming
* @date 2023/01/11 17:32 * @date 2023/01/11 17:32
*/ */
public interface WanJiRunningStatusService extends rpcService { public interface WanJiCommonRunningStatusService extends RpcService {
/** /**
* 标准获取路口实时运行状态接口,包括告警数据 * 标准获取路口实时运行状态接口,包括告警数据
* @param crossIdList * @param crossIdList
......
...@@ -15,7 +15,7 @@ import net.wanji.utc.po.SignalStatusLogPO; ...@@ -15,7 +15,7 @@ import net.wanji.utc.po.SignalStatusLogPO;
import net.wanji.utc.service.runninginfo.HkLightsStatusService; import net.wanji.utc.service.runninginfo.HkLightsStatusService;
import net.wanji.utc.service.runninginfo.HkRunningStatusService; import net.wanji.utc.service.runninginfo.HkRunningStatusService;
import net.wanji.utc.service.runninginfo.SignalStatusService; import net.wanji.utc.service.runninginfo.SignalStatusService;
import net.wanji.utc.service.runninginfo.WanJiRunningStatusService; import net.wanji.utc.service.runninginfo.WanJiCommonRunningStatusService;
import net.wanji.utc.util.ListUtil; import net.wanji.utc.util.ListUtil;
import net.wanji.utc.util.RedisUtil; import net.wanji.utc.util.RedisUtil;
import net.wanji.utc.vo.LightsStatusVO; import net.wanji.utc.vo.LightsStatusVO;
...@@ -38,7 +38,7 @@ public class SignalStatusServiceImpl implements SignalStatusService { ...@@ -38,7 +38,7 @@ public class SignalStatusServiceImpl implements SignalStatusService {
private final HkLightsStatusService hkLightsStatusService; private final HkLightsStatusService hkLightsStatusService;
private final RedisUtil redisUtil; private final RedisUtil redisUtil;
private final SignalStatusLogMapper signalStatusLogMapper; private final SignalStatusLogMapper signalStatusLogMapper;
private final WanJiRunningStatusService wanJiRunningStatusService; private final WanJiCommonRunningStatusService wanJiRunningStatusService;
@Override @Override
@Transactional @Transactional
......
...@@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor; ...@@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.utc.entity.JsonViewObject; import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.po.SignalStatusLogPO; import net.wanji.utc.po.SignalStatusLogPO;
import net.wanji.utc.service.runninginfo.WanJiRunningStatusService; import net.wanji.utc.service.runninginfo.WanJiCommonRunningStatusService;
import net.wanji.utc.util.HttpRestUtil; import net.wanji.utc.util.HttpRestUtil;
import net.wanji.utc.vo.LightsStatusVO; import net.wanji.utc.vo.LightsStatusVO;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -21,7 +21,7 @@ import java.util.Map; ...@@ -21,7 +21,7 @@ import java.util.Map;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class WanJiRunningStatusServiceImpl implements WanJiRunningStatusService { public class WanJiCommonRunningStatusServiceImpl implements WanJiCommonRunningStatusService {
private final HttpRestUtil httpRestUtil; private final HttpRestUtil httpRestUtil;
@Value("url") @Value("url")
...@@ -43,6 +43,6 @@ public class WanJiRunningStatusServiceImpl implements WanJiRunningStatusService ...@@ -43,6 +43,6 @@ public class WanJiRunningStatusServiceImpl implements WanJiRunningStatusService
@Override @Override
public JsonViewObject rpcService(HttpRestUtil httpRestUtil, String url, Map<String, String> headers, String param) { public JsonViewObject rpcService(HttpRestUtil httpRestUtil, String url, Map<String, String> headers, String param) {
return WanJiRunningStatusService.super.rpcService(httpRestUtil, url, headers, param); return WanJiCommonRunningStatusService.super.rpcService(httpRestUtil, url, headers, param);
} }
} }
...@@ -2,7 +2,7 @@ package net.wanji.utc.service.staticinfo; ...@@ -2,7 +2,7 @@ package net.wanji.utc.service.staticinfo;
import net.wanji.utc.common.Result; import net.wanji.utc.common.Result;
import net.wanji.utc.po.CrossSchedulesPO; import net.wanji.utc.po.CrossSchedulesPO;
import net.wanji.utc.service.rpcservice.rpcService; import net.wanji.utc.service.rpc.RpcService;
import net.wanji.utc.vo.PlanSectionVO; import net.wanji.utc.vo.PlanSectionVO;
import net.wanji.utc.vo.SchemePhaseLightsVO; import net.wanji.utc.vo.SchemePhaseLightsVO;
...@@ -12,7 +12,7 @@ import java.util.List; ...@@ -12,7 +12,7 @@ import java.util.List;
* @author duanruiming * @author duanruiming
* @date 2023/01/09 9:20 * @date 2023/01/09 9:20
*/ */
public interface WanjiCommonStaticInfoService extends rpcService { public interface WanJiCommonStaticInfoService extends RpcService {
/** /**
* 静态参数,获取万集标准方案数据-方案信息、相位信息、灯组信息 * 静态参数,获取万集标准方案数据-方案信息、相位信息、灯组信息
......
...@@ -8,7 +8,7 @@ import net.wanji.utc.dto.PlanSectionDTO; ...@@ -8,7 +8,7 @@ import net.wanji.utc.dto.PlanSectionDTO;
import net.wanji.utc.dto.SchemePhaseLightsDTO; import net.wanji.utc.dto.SchemePhaseLightsDTO;
import net.wanji.utc.mapper.*; import net.wanji.utc.mapper.*;
import net.wanji.utc.po.*; import net.wanji.utc.po.*;
import net.wanji.utc.service.staticinfo.WanjiCommonStaticInfoService; import net.wanji.utc.service.staticinfo.WanJiCommonStaticInfoService;
import net.wanji.utc.service.staticinfo.*; import net.wanji.utc.service.staticinfo.*;
import net.wanji.utc.vo.PlanSectionVO; import net.wanji.utc.vo.PlanSectionVO;
import net.wanji.utc.vo.SchemePhaseLightsVO; import net.wanji.utc.vo.SchemePhaseLightsVO;
...@@ -39,7 +39,7 @@ public class StaticInfoServiceImpl implements StaticInfoService { ...@@ -39,7 +39,7 @@ public class StaticInfoServiceImpl implements StaticInfoService {
private final CrossPlanMapper crossPlanMapper; private final CrossPlanMapper crossPlanMapper;
private final CrossSectionMapper crossSectionMapper; private final CrossSectionMapper crossSectionMapper;
private final CrossSchedulesMapper crossSchedulesMapper; private final CrossSchedulesMapper crossSchedulesMapper;
private final WanjiCommonStaticInfoService wanjiCommonStaticInfoService; private final WanJiCommonStaticInfoService wanjiCommonStaticInfoService;
@Override @Override
@Transactional @Transactional
......
...@@ -7,7 +7,7 @@ import net.wanji.utc.common.Result; ...@@ -7,7 +7,7 @@ import net.wanji.utc.common.Result;
import net.wanji.utc.entity.JsonViewObject; import net.wanji.utc.entity.JsonViewObject;
import net.wanji.utc.mapper.*; import net.wanji.utc.mapper.*;
import net.wanji.utc.po.*; import net.wanji.utc.po.*;
import net.wanji.utc.service.staticinfo.WanjiCommonStaticInfoService; import net.wanji.utc.service.staticinfo.WanJiCommonStaticInfoService;
import net.wanji.utc.util.HttpRestUtil; import net.wanji.utc.util.HttpRestUtil;
import net.wanji.utc.vo.PlanSectionVO; import net.wanji.utc.vo.PlanSectionVO;
import net.wanji.utc.vo.SchemePhaseLightsVO; import net.wanji.utc.vo.SchemePhaseLightsVO;
...@@ -27,7 +27,7 @@ import java.util.Objects; ...@@ -27,7 +27,7 @@ import java.util.Objects;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class WanjiCommonStaticInfoServiceImpl implements WanjiCommonStaticInfoService { public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoService {
private final HttpRestUtil httpRestUtil; private final HttpRestUtil httpRestUtil;
@Value("url") @Value("url")
...@@ -123,6 +123,6 @@ public class WanjiCommonStaticInfoServiceImpl implements WanjiCommonStaticInfoSe ...@@ -123,6 +123,6 @@ public class WanjiCommonStaticInfoServiceImpl implements WanjiCommonStaticInfoSe
@Override @Override
public JsonViewObject rpcService(HttpRestUtil httpRestUtil, String url, Map<String, String> headers, String param) { public JsonViewObject rpcService(HttpRestUtil httpRestUtil, String url, Map<String, String> headers, String param) {
return WanjiCommonStaticInfoService.super.rpcService(httpRestUtil, url, headers, param); return WanJiCommonStaticInfoService.super.rpcService(httpRestUtil, url, headers, param);
} }
} }
...@@ -6,6 +6,7 @@ import lombok.Data; ...@@ -6,6 +6,7 @@ import lombok.Data;
import javax.validation.constraints.Max; import javax.validation.constraints.Max;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
...@@ -16,10 +17,10 @@ import javax.validation.constraints.NotNull; ...@@ -16,10 +17,10 @@ import javax.validation.constraints.NotNull;
*/ */
@Data @Data
@ApiModel(value = "ControlCommandVO", description = "相位锁定实体类") @ApiModel(value = "ControlCommandVO", description = "相位锁定实体类")
public class ControlCommandVO{ public class ControlCommandVO {
@ApiModelProperty(value = "路口编号", notes = "路口编号") @ApiModelProperty(value = "路口编号", notes = "路口编号")
@NotNull(message = "路口编号不可为空") @NotBlank(message = "路口编号不可为空")
private String crossCode; private String crossCode;
/** /**
......
...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
/** /**
...@@ -19,9 +21,11 @@ import java.util.List; ...@@ -19,9 +21,11 @@ import java.util.List;
public class PhaseTimingSendVO { public class PhaseTimingSendVO {
@ApiModelProperty(value = "路口编号", notes = "路口编号") @ApiModelProperty(value = "路口编号", notes = "路口编号")
@NotBlank(message = "路口编号不可为空")
private String crossCode; private String crossCode;
@ApiModelProperty(value = "需要下发的相位列表", notes = "需要下发的相位列表") @ApiModelProperty(value = "需要下发的相位列表", notes = "需要下发的相位列表")
@NotEmpty(message = "相位列表不可为空")
private List<Phase> phaseList; private List<Phase> phaseList;
/** /**
......
...@@ -4,8 +4,9 @@ import io.swagger.annotations.ApiModel; ...@@ -4,8 +4,9 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.wanji.utc.common.baseentity.BaseCrossInfo;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
/** /**
...@@ -20,8 +21,10 @@ import java.util.List; ...@@ -20,8 +21,10 @@ import java.util.List;
public class PlanSendVO { public class PlanSendVO {
@ApiModelProperty(value = "路口编号", notes = "路口编号") @ApiModelProperty(value = "路口编号", notes = "路口编号")
@NotBlank(message = "路口编号不可为空")
private String crossCode; private String crossCode;
@ApiModelProperty(value = "计划列表", notes = "计划列表") @ApiModelProperty(value = "计划列表", notes = "计划列表")
@NotEmpty(message = "计划列表不可为空")
private List<Plan> planList; private List<Plan> planList;
@Setter @Setter
......
...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
/** /**
...@@ -19,8 +21,10 @@ import java.util.List; ...@@ -19,8 +21,10 @@ import java.util.List;
public class ScheduleSendVO { public class ScheduleSendVO {
@ApiModelProperty(value = "路口编号", notes = "路口编号") @ApiModelProperty(value = "路口编号", notes = "路口编号")
@NotBlank(message = "路口编号不可为空")
private String crossCode; private String crossCode;
@ApiModelProperty(value = "时间表", notes = "时间表") @ApiModelProperty(value = "时间表", notes = "时间表")
@NotEmpty(message = "时间表不可为空")
private List<Schedule> schedules; private List<Schedule> schedules;
@Setter @Setter
......
...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List; import java.util.List;
/** /**
...@@ -19,9 +21,11 @@ import java.util.List; ...@@ -19,9 +21,11 @@ import java.util.List;
public class SchemeSendVO { public class SchemeSendVO {
@ApiModelProperty(value = "路口编号", notes = "路口编号") @ApiModelProperty(value = "路口编号", notes = "路口编号")
@NotBlank(message = "路口编号不可为空")
private String crossCode; private String crossCode;
@ApiModelProperty(value = "方案列表", notes = "方案列表") @ApiModelProperty(value = "方案列表", notes = "方案列表")
@NotEmpty(message = "方案列表不可为空")
private List<Pattern> patternList; private List<Pattern> patternList;
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment