Commit 06f3f7be authored by wuxiaokai's avatar wuxiaokai

控制指令接口-黄闪控制,关灯控制,步进控制

parent 95eb7b4a
...@@ -64,19 +64,19 @@ public class Constants { ...@@ -64,19 +64,19 @@ public class Constants {
/** /**
* 恢复正常方案: 0-多时段控制模式 * 恢复正常方案: 0-多时段控制模式
*/ */
public static final Integer NORMAL_RUNNING_MODE = 0; public static final Integer NORMAL_RUNNING_CONTROL = 0;
/** /**
* 关灯 * 关灯
*/ */
public static final Integer OFF_LIGHT_MODE = 1; public static final Integer CLOSE_LIGHT_CONTROL = 1;
/** /**
* 黄闪 * 黄闪
*/ */
public static final Integer YELLOW_RUNNING_MODE = 2; public static final Integer YELLOW_LIGHT_CONTROL = 2;
/** /**
* 手动全红 * 手动全红
*/ */
public static final Integer RED_RUNNING_MODE = 3; public static final Integer ALL_RED_CONTROL = 3;
/** /**
* 定周期控制 * 定周期控制
*/ */
...@@ -84,11 +84,11 @@ public class Constants { ...@@ -84,11 +84,11 @@ public class Constants {
/** /**
* 步进控制 * 步进控制
*/ */
public static final Integer STEP_UPDATE_MODE = 10; public static final Integer STEP_CONTROL = 10;
/** /**
* 取消步进 * 取消步进
*/ */
public static final Integer CANCEL_STEP_MODE = 11; public static final Integer CANCEL_STEP_CONTROL = 11;
public static ApiInfoPO getManufacturerUrlMap(String key) { public static ApiInfoPO getManufacturerUrlMap(String key) {
return manufacturerUrlMap.get(key); return manufacturerUrlMap.get(key);
......
package net.wanji.utc.common.exception; package net.wanji.utc.common.exception;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import net.wanji.utc.common.BaseInfoInterface; import net.wanji.utc.common.BaseInfoInterface;
......
...@@ -6,13 +6,14 @@ import net.wanji.utc.common.typeenum.BasicEnum; ...@@ -6,13 +6,14 @@ 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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import static net.wanji.utc.common.ResultEnum.BODY_NOT_MATCH; import static net.wanji.utc.common.ResultEnum.BODY_NOT_MATCH;
/** /**
...@@ -28,26 +29,96 @@ public class ControlCommandController { ...@@ -28,26 +29,96 @@ public class ControlCommandController {
@Value("${signal.mock}") @Value("${signal.mock}")
private boolean mock; private boolean mock;
@Autowired @Resource
private CrossInfoMapper crossInfoMapper; private CrossInfoMapper crossInfoMapper;
@Autowired @Resource
private ControlCommandService hkControlCommandService; private ControlCommandService hkControlCommandService;
/**
* 全红控制
*
* @param signalId 信号机id
* @param command 指令
* @return {@link Result}<{@link T}>
*/
@PostMapping("/allRedControl") @PostMapping("/allRedControl")
public <T> Result<T> allRedControl(@RequestParam String signalId, @RequestParam Integer command) { public <T> Result<T> allRedControl(@RequestParam String signalId, @RequestParam Integer command) {
if (mock) return Result.success(); if (mock) return Result.success();
CrossInfoPO crossInfoPO = crossInfoMapper.selectByCode(signalId); Integer manufacturerId = check(signalId);
if (crossInfoPO == null) { if (manufacturerId.equals(BasicEnum.ManufacturerEnum.HK.getCode())) {
throw new ControlException(BODY_NOT_MATCH.getResultCode(), "参数错误,信号机ID不正确。"); return hkControlCommandService.allRedControl(signalId, null, null, command);
} else {
// todo else
return null;
}
}
/**
* 黄闪控制
*
* @param signalId 信号id
* @param command 命令
* @return {@link Result}<{@link T}>
*/
@PostMapping("/yellowLightControl")
public <T> Result<T> yellowLightControl(@RequestParam String signalId, @RequestParam Integer command) {
if (mock) return Result.success();
Integer manufacturerId = check(signalId);
if (manufacturerId.equals(BasicEnum.ManufacturerEnum.HK.getCode())) {
return hkControlCommandService.yellowLightControl(signalId, null, null, command);
} else {
// todo else
return null;
}
}
/**
* 关灯控制
*
* @param signalId 信号id
* @param command 命令
* @return {@link Result}<{@link T}>
*/
@PostMapping("/closeLightControl")
public <T> Result<T> closeLightControl(@RequestParam String signalId, @RequestParam Integer command) {
if (mock) return Result.success();
Integer manufacturerId = check(signalId);
if (manufacturerId.equals(BasicEnum.ManufacturerEnum.HK.getCode())) {
return hkControlCommandService.closeLightControl(signalId, null, null, command);
} else {
// todo else
return null;
} }
Integer manufacturerId = crossInfoPO.getManufacturerId(); }
Result<T> result = new Result<>();
/**
* 步进控制
*
* @param signalId 信号id
* @param command 命令
* @param stepNum 一步num
* @return {@link Result}<{@link T}>
*/
@PostMapping("/stepControl")
public <T> Result<T> stepControl(@RequestParam String signalId,
@RequestParam Integer command,
@RequestParam int stepNum) {
if (mock) return Result.success();
Integer manufacturerId = check(signalId);
if (manufacturerId.equals(BasicEnum.ManufacturerEnum.HK.getCode())) { if (manufacturerId.equals(BasicEnum.ManufacturerEnum.HK.getCode())) {
result = hkControlCommandService.allRedControl(signalId, null, null, command); return hkControlCommandService.stepControl(signalId, null, null, command, stepNum);
} else { } else {
// todo else // todo else
return null;
}
}
private Integer check(String signalId) {
CrossInfoPO crossInfoPO = crossInfoMapper.selectByCode(signalId);
if (crossInfoPO == null) {
throw new ControlException(BODY_NOT_MATCH.getResultCode(), "参数错误,信号机ID不正确。");
} }
return result; return crossInfoPO.getManufacturerId();
} }
} }
...@@ -3,6 +3,8 @@ package net.wanji.utc.mapper; ...@@ -3,6 +3,8 @@ package net.wanji.utc.mapper;
import net.wanji.utc.po.CrossPhasePO; import net.wanji.utc.po.CrossPhasePO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* @author Kent HAN * @author Kent HAN
* @date 2022/11/18 10:44 * @date 2022/11/18 10:44
...@@ -11,4 +13,6 @@ public interface CrossPhaseMapper { ...@@ -11,4 +13,6 @@ public interface CrossPhaseMapper {
void deleteOne(@Param("crossId") String crossId, @Param("phaseNo") String phaseNo); void deleteOne(@Param("crossId") String crossId, @Param("phaseNo") String phaseNo);
void insertOne(CrossPhasePO crossPhasePO); void insertOne(CrossPhasePO crossPhasePO);
List<CrossPhasePO> selectByCrossIdAndPlanId(@Param("crossId") String crossId, @Param("planId") String planId);
} }
...@@ -10,16 +10,21 @@ import net.wanji.utc.common.baseentity.BaseCrossInfo; ...@@ -10,16 +10,21 @@ 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.TCrossPhase;
import net.wanji.utc.mapper.CrossPhaseMapper;
import net.wanji.utc.po.CrossPhasePO;
import net.wanji.utc.service.ControlCommandService; import net.wanji.utc.service.ControlCommandService;
import net.wanji.utc.service.HkGetSignalMethodService; import net.wanji.utc.service.HkGetSignalMethodService;
import net.wanji.utc.vo.PhaseLock; import net.wanji.utc.vo.PhaseLock;
import net.wanji.utc.vo.signal.SignalLightStateVo; import net.wanji.utc.vo.signal.SignalLightStateVo;
import net.wanji.utc.vo.signal.SignalRingVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import static net.wanji.utc.common.constant.Constants.*; import static net.wanji.utc.common.constant.Constants.*;
...@@ -37,6 +42,9 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -37,6 +42,9 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
@Resource @Resource
private ArtemisConfig artemisConfig; private ArtemisConfig artemisConfig;
@Resource
private CrossPhaseMapper crossPhaseMapper;
@Override @Override
public <T> Result<T> schemeSend() { public <T> Result<T> schemeSend() {
return null; return null;
...@@ -59,23 +67,26 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -59,23 +67,26 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
@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) {
return null; if (command.equals(TRUE)) return updateManualStep(signalId, STEP_CONTROL, stepNum);
else return updateManual(signalId, CANCEL_STEP_CONTROL);
} }
@Override @Override
public <T> Result<T> allRedControl(String signalId, String sourceType, String signalType, Integer command) { public <T> Result<T> allRedControl(String signalId, String sourceType, String signalType, Integer command) {
Integer runningMode = command.equals(Constants.TRUE) ? RED_RUNNING_MODE : NORMAL_RUNNING_MODE; Integer runningMode = command.equals(TRUE) ? ALL_RED_CONTROL : NORMAL_RUNNING_CONTROL;
return updateManual(signalId, runningMode); return updateManual(signalId, runningMode);
} }
@Override @Override
public <T> Result<T> yellowLightControl(String signalId, String sourceType, String signalType, Integer command) { public <T> Result<T> yellowLightControl(String signalId, String sourceType, String signalType, Integer command) {
return null; Integer runningMode = command.equals(TRUE) ? YELLOW_LIGHT_CONTROL : NORMAL_RUNNING_CONTROL;
return updateManual(signalId, runningMode);
} }
@Override @Override
public <T> Result<T> closeLightControl(String signalId, String sourceType, String signalType, Integer command) { public <T> Result<T> closeLightControl(String signalId, String sourceType, String signalType, Integer command) {
return null; Integer runningMode = command.equals(TRUE) ? CLOSE_LIGHT_CONTROL : NORMAL_RUNNING_CONTROL;
return updateManual(signalId, runningMode);
} }
@Override @Override
...@@ -93,13 +104,47 @@ public class HKControlCommandServiceImpl implements ControlCommandService { ...@@ -93,13 +104,47 @@ public class HKControlCommandServiceImpl implements ControlCommandService {
return null; return null;
} }
private <T> Result<T> updateManualStep(String signalId, Integer runningMode, Integer stepNum) {
JSONObject bodyObjectParam = new JSONObject();
bodyObjectParam.put("crossCode", signalId);
bodyObjectParam.put("controlType", runningMode);
int controlNo = 0;
if (0 != stepNum) {
//根据当前实时灯态获取运行的相位
SignalLightStateVo signalInfoVo = getSignalInfoVos(signalId).get(0);
//暂时按单环处理
SignalRingVo signalRunring = signalInfoVo.getRings().get(0);
String phaseId = signalRunring.getPhaseId();
//获取方案数据列表
List<CrossPhasePO> baseCrossPhasePlanList = crossPhaseMapper.selectByCrossIdAndPlanId(signalInfoVo.getTelesemeId(), signalInfoVo.getPhasePlanId());
Map<String, List<CrossPhasePO>> groupByPhase = baseCrossPhasePlanList.stream().collect(Collectors.groupingBy(CrossPhasePO::getPhaseNo));
//根据相位获取当前相序
int newPhaseOrderId = 0;
for (String key : groupByPhase.keySet()) {
CrossPhasePO crossPhase = groupByPhase.get(key).get(0);
if (crossPhase.getPhaseNo().equals(phaseId)) {
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());
}
}
}
bodyObjectParam.put("controlNo", controlNo);
return setSignalControl(bodyObjectParam);
}
/** /**
* @param signalId 信号机编号 * @param signalId 信号机编号
* @param runningMode 0-多时段控制模式 1-关灯、2-黄闪、3-全红、11-取消步进控制、12-灯态锁定、13-灯态解锁 * @param runningMode 0-多时段控制模式 1-关灯、2-黄闪、3-全红、11-取消步进控制、12-灯态锁定、13-灯态解锁
*/ */
private <T> Result<T> updateManual(String signalId, Integer runningMode) { private <T> Result<T> updateManual(String signalId, Integer runningMode) {
//执行恢复时间表方案命令 //执行恢复时间表方案命令
if (NORMAL_RUNNING_MODE.equals(runningMode) || CANCEL_STEP_MODE.equals(runningMode)) { if (NORMAL_RUNNING_CONTROL.equals(runningMode) || CANCEL_STEP_CONTROL.equals(runningMode)) {
//根据实时灯态获取当前运行模式 //根据实时灯态获取当前运行模式
SignalLightStateVo signalInfoVo = getSignalInfoVos(signalId).get(0); SignalLightStateVo signalInfoVo = getSignalInfoVos(signalId).get(0);
//如果当前模式已经是定周期,就不在执行恢复时间表方案指令 //如果当前模式已经是定周期,就不在执行恢复时间表方案指令
......
...@@ -32,5 +32,15 @@ ...@@ -32,5 +32,15 @@
where cross_id = #{crossId} and phase_no = #{phaseNo} where cross_id = #{crossId} and phase_no = #{phaseNo}
</delete> </delete>
<sql id="baseColumn">
id,phase_no,name,sort,cross_id,plan_id,ring_no,control_mode,phase_time,green_time,
green_flash_time,ped_flash_time,yellow_time,red_time,min_green_time,max_green_time
</sql>
<select id="selectByCrossIdAndPlanId" resultMap="BaseResultMap">
select
<include refid="baseColumn"/>
from t_cross_phase where cross_id = #{crossId} and planId = #{planId}
</select>
</mapper> </mapper>
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