Commit 473b1826 authored by wuxiaokai's avatar wuxiaokai

控制指令接口-相位锁定/解锁

parent e6e80b11
...@@ -73,11 +73,11 @@ public class Constants { ...@@ -73,11 +73,11 @@ public class Constants {
/** /**
* 相位(灯态)锁定 * 相位(灯态)锁定
*/ */
public static final Integer LOCK_RUNNING_MODE = 12; public static final Integer LOCK_RUNNING_CONTROL = 12;
/** /**
* 相位(灯态)解锁: 0-多时段控制模式 * 相位(灯态)解锁: 0-多时段控制模式
*/ */
public static final Integer UNLOCK_RUNNING_MODE = 13; public static final Integer UNLOCK_RUNNING_CONTROL = 13;
/** /**
* 恢复正常方案: 0-多时段控制模式 * 恢复正常方案: 0-多时段控制模式
*/ */
......
...@@ -9,6 +9,8 @@ import net.wanji.utc.common.typeenum.BasicEnum; ...@@ -9,6 +9,8 @@ import net.wanji.utc.common.typeenum.BasicEnum;
import net.wanji.utc.mapper.CrossInfoMapper; import net.wanji.utc.mapper.CrossInfoMapper;
import net.wanji.utc.po.CrossInfoPO; import net.wanji.utc.po.CrossInfoPO;
import net.wanji.utc.service.ControlCommandService; import net.wanji.utc.service.ControlCommandService;
import net.wanji.utc.util.ListUtil;
import net.wanji.utc.vo.PhaseLock;
import net.wanji.utc.vo.plansend.PlanSendVO; import net.wanji.utc.vo.plansend.PlanSendVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -16,6 +18,8 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,6 +18,8 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import static net.wanji.utc.common.ResultEnum.BODY_NOT_MATCH; import static net.wanji.utc.common.ResultEnum.BODY_NOT_MATCH;
/** /**
...@@ -189,6 +193,32 @@ public class ControlCommandController { ...@@ -189,6 +193,32 @@ public class ControlCommandController {
} }
} }
/**
* 锁定控制
*
* @param signalId 信号id
* @return {@link Result}<{@link T}>
*/
@ApiOperation(value = "锁定控制-相位锁定/解锁", notes = "锁定控制-相位锁定/解锁")
@PostMapping("/lockControl")
public <T> Result<T> lockControl(@RequestParam String signalId, @RequestBody PhaseLock phaseLock) {
if (mock) {
return Result.success();
}
try {
Integer manufacturerId = check(signalId);
if (manufacturerId.equals(BasicEnum.ManufacturerEnum.HK.getCode())) {
return hkControlCommandService.lockControl(signalId, phaseLock);
} else {
// todo else
return null;
}
} catch (Exception ex) {
log.error("锁定控制-相位锁定/解锁异常:{}", ex.getMessage());
throw new ControlException("锁定控制-相位锁定/解锁异常");
}
}
private Integer check(String signalId) { private Integer check(String signalId) {
CrossInfoPO crossInfoPO = crossInfoMapper.selectByCode(signalId); CrossInfoPO crossInfoPO = crossInfoMapper.selectByCode(signalId);
if (crossInfoPO == null) { if (crossInfoPO == null) {
......
...@@ -4,6 +4,8 @@ import net.wanji.utc.common.Result; ...@@ -4,6 +4,8 @@ import net.wanji.utc.common.Result;
import net.wanji.utc.vo.PhaseLock; import net.wanji.utc.vo.PhaseLock;
import net.wanji.utc.vo.plansend.PlanSendVO; import net.wanji.utc.vo.plansend.PlanSendVO;
import java.util.List;
/** /**
* 控制指令 service * 控制指令 service
* *
...@@ -31,10 +33,10 @@ public interface ControlCommandService { ...@@ -31,10 +33,10 @@ public interface ControlCommandService {
* 锁定控制 * 锁定控制
* *
* @param signalId 信号机编号 * @param signalId 信号机编号
* @param locks 相位锁定实体类 * @param phaseLock 相位锁定实体类
* @return {@link Result}<{@link T}> * @return {@link Result}<{@link T}>
*/ */
<T> Result<T> lockControl(String signalId, PhaseLock... locks); <T> Result<T> lockControl(String signalId, PhaseLock phaseLock) throws Exception;
/** /**
* 步进控制 * 步进控制
......
...@@ -11,6 +11,7 @@ import net.wanji.utc.common.baseentity.BaseCrossInfo; ...@@ -11,6 +11,7 @@ import net.wanji.utc.common.baseentity.BaseCrossInfo;
import net.wanji.utc.common.constant.Constants; import net.wanji.utc.common.constant.Constants;
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.entity.SignalRunring;
import net.wanji.utc.mapper.CrossPhaseMapper; import net.wanji.utc.mapper.CrossPhaseMapper;
import net.wanji.utc.po.CrossPhasePO; import net.wanji.utc.po.CrossPhasePO;
import net.wanji.utc.service.ControlCommandService; import net.wanji.utc.service.ControlCommandService;
...@@ -67,14 +68,82 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -67,14 +68,82 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
} }
@Override @Override
public <T> Result<T> lockControl(String signalId, PhaseLock... locks) { public <T> Result<T> lockControl(String signalId, PhaseLock phaseLock) throws Exception{
return null; if (phaseLock.getCommand().equals(TRUE)) {
return updateManualLock(signalId, phaseLock.getLockTime());
} else {
return controlSignal(signalId, UNLOCK_RUNNING_CONTROL);
}
}
private <T> Result<T> updateManualLock(String signalId, Integer lockTime) throws Exception {
JSONObject param = new JSONObject();
param.put("crossCode", signalId);
param.put("controlType", LOCK_RUNNING_CONTROL);
setSignalControlLaneInfos(signalId, param);
param.put("controlNo", 0);
//控制时长,单位 s,0 则持续控制
param.put("duration", lockTime * 60);
return setSignalControl(param);
}
/**
* 控制命令为灯态锁定时,设置相关车道参数信息
*
* @param signalId, 信号机id
* @param obj
*/
private void setSignalControlLaneInfos(String signalId, JSONObject obj) throws Exception {
//获取当前运行方案的相位id
List<SignalLightStateVo> signalInfos = getSignalInfoVos(signalId);
List<SignalRingVo> runrings = signalInfos.get(0).getRings();
//HK 为单环
Integer phaseId = Integer.valueOf(runrings.get(0).getPhaseId());
//获取某一路口下海康相位和车道关系
Map<Integer, JSONArray> laneArrayMap = new HashMap<>();
getPhaseRelationLanes(signalId, laneArrayMap, new HashMap<>());
obj.put("laneInfos", laneArrayMap.get(phaseId));
}
/**
* 获取某一路口下海康相位和车道关系
*
* @param crossCode 信号机唯一编号
* @param laneArrayMap 相位与车道集合
* @param laneNoMap 转向和方向与车道关系集合
*/
private void getPhaseRelationLanes(String crossCode, Map<Integer, JSONArray> laneArrayMap, Map<String, Integer> laneNoMap) throws Exception {
Map<String, String> path = getPathMapByApiCode("queryPhaseRlatLanes");
Map<String, String> queryMap = new HashMap<>();
queryMap.put("crossCode", crossCode);
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, null, queryMap, null, "application/json", null);
JSONObject object = JSON.parseObject(strResult);
if (HK_SUCCESS_CODE.equals(object.getInteger(HK_CODE_KEY))) {
JSONObject data = object.getJSONObject("data");
JSONArray phaseList = data.getJSONArray("phaseList");
for (int i = 0; i < phaseList.size(); i++) {
JSONObject lanesObject = phaseList.getJSONObject(i);
Integer phaseNo = lanesObject.getInteger("phaseNo");
JSONArray laneList = lanesObject.getJSONArray("lanes");
// 存入相位与车道集合
laneArrayMap.put(phaseNo, laneList);
for (int j = 0; j < laneList.size(); j++) {
JSONObject laneObject = laneList.getJSONObject(j);
String key = laneObject.getString("direction") + SEPARATOR_UNDER_LINE + laneObject.getString("turn");
// 存入方向和转向对应的车道编号
laneNoMap.put(key, laneObject.getInteger("laneNo"));
}
}
}
} }
@Override @Override
public <T> Result<T> stepControl(String signalId, String sourceType, String signalType, Integer command, Integer stepNum) { public <T> Result<T> stepControl(String signalId, String sourceType, String signalType, Integer command, Integer stepNum) {
if (command.equals(TRUE)) return updateManualStep(signalId, STEP_CONTROL, stepNum); if (command.equals(TRUE)) {
else return controlSignal(signalId, CANCEL_STEP_CONTROL); return updateManualStep(signalId, STEP_CONTROL, stepNum);
} else {
return controlSignal(signalId, CANCEL_STEP_CONTROL);
}
} }
@Override @Override
...@@ -170,8 +239,7 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -170,8 +239,7 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
private <T> Result<T> setSignalControl(JSONObject bodyObjectParam) { private <T> Result<T> setSignalControl(JSONObject bodyObjectParam) {
try { try {
Map<String, String> path = Constants.getPathMapByApiCode("updateLockPhase"); String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, getPathMapByApiCode("updateLockPhase"), bodyObjectParam.toJSONString(), null, null, "application/json", null);
String strResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, bodyObjectParam.toJSONString(), null, null, "application/json", null);
JSONObject object = JSON.parseObject(strResult); JSONObject object = JSON.parseObject(strResult);
if (HK_SUCCESS_CODE.equals(object.getInteger(HK_CODE_KEY))) { if (HK_SUCCESS_CODE.equals(object.getInteger(HK_CODE_KEY))) {
return Result.success(); return Result.success();
......
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