Commit 86d97bc5 authored by duanruiming's avatar duanruiming

[add] 路口优化->手动优化方案恢复

parent c5476999
......@@ -14,13 +14,14 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import javax.ws.rs.core.MediaType;
/**
* @author duanruiming
* @date 2023/03/01 20:44
*/
@Api(value = "SignalCommandOptController", description = "手动优化数据下发服务")
@Api(value = "SignalCommandOptController", description = "信号优化")
@RequestMapping("/signalControl")
@RestController
public class SignalCommandOptController {
......@@ -38,4 +39,14 @@ public class SignalCommandOptController {
return jsonViewObject;
}
@ApiOperation(value = "手动优化方案恢复", notes = "优化方案恢复", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/schemeOptRestore",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = JsonViewObject.class)})
public JsonViewObject schemeOptRestore(@RequestBody @NotBlank String crossId) throws Exception{
JsonViewObject jsonViewObject = feignProxyService.schemeOptRestore(crossId);
return jsonViewObject;
}
}
......@@ -23,8 +23,6 @@ import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.po.base.CrossSchemePO;
import net.wanji.opt.po.trend.CrossDataRealtimePO;
import net.wanji.opt.service.CrossOptimizeService;
import net.wanji.opt.service.CrossSchedulesService;
import net.wanji.opt.service.CrossSchemeService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
......@@ -32,6 +30,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
......@@ -47,10 +46,6 @@ import java.util.stream.Collectors;
@Slf4j
public class CrossOptimizeServiceImpl implements CrossOptimizeService {
@Resource
CrossSchemeService crossSchemeService;
@Resource
CrossSchedulesService crossSchedulesService;
@Resource
CrossPhaseMapper crossPhaseMapper;
@Resource
......@@ -79,6 +74,17 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
static Set<String> CROSS_OPT = new HashSet<>(); // 记录已优化的路口
/**
* 解决静态方法中不能使用mapper
*/
private static CrossOptimizeServiceImpl crossOptimizeService;
@PostConstruct
public void init() {
crossOptimizeService = this;
crossOptimizeService.crossPhaseMapper = this.crossPhaseMapper;
crossOptimizeService.crossSchemeMapper = this.crossSchemeMapper;
}
@Override
@Transactional
public String realtimeOptimize(List<CrossDataRealtimePO> abnormalCrossList, List<CrossDataRealtimePO> crossDataRealtimePOList) {
......@@ -268,11 +274,9 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
} else {
log.error("当前拥堵路口: {}, 实时监控优化上游路口: {}时,未获取到上游路口的实时转向数据!", crossId, startCrossId);
}
}
}
}
}
}
......@@ -482,7 +486,7 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
* @param phaseTimeOptResultMap
* @return
*/
private SchemeSendVO getSchemeSendVO(String crossId, Map<String, CrossPhaseDTO> phaseMap, Map<String, Integer> phaseTimeOptResultMap) throws Exception {
public static SchemeSendVO getSchemeSendVO(String crossId, Map<String, CrossPhaseDTO> phaseMap, Map<String, Integer> phaseTimeOptResultMap) throws Exception {
String key = String.join(Constants.SystemParam.SEPARATOR_UNDER_LINE, crossId, "1", "s");
CrossPhaseDTO crossPhaseDTO = phaseMap.get(key);
if (Objects.isNull(crossPhaseDTO)) {
......@@ -491,8 +495,8 @@ public class CrossOptimizeServiceImpl implements CrossOptimizeService {
}
Integer schemeId = crossPhaseDTO.getSchemeId();
List<CrossSchemePO> crossSchemePOS = crossSchemeMapper.listCrossSchemeInfo(crossId, null, schemeId);
List<CrossPhasePO> crossPhasePOS = crossPhaseMapper.listCrossPhase(crossId, String.valueOf(schemeId));
List<CrossSchemePO> crossSchemePOS = crossOptimizeService.crossSchemeMapper.listCrossSchemeInfo(crossId, null, schemeId);
List<CrossPhasePO> crossPhasePOS = crossOptimizeService.crossPhaseMapper.listCrossPhase(crossId, String.valueOf(schemeId));
Map<Integer, List<CrossPhasePO>> ringNoPhasePOMap = crossPhasePOS.stream().collect(Collectors.groupingBy(CrossPhasePO::getRingNo));
SchemeSendVO schemeSendVO = new SchemeSendVO();
......
......@@ -9,4 +9,5 @@ import net.wanji.opt.vo.SchemeOptSendVO;
*/
public interface FeignProxyService {
JsonViewObject schemeOptSend(SchemeOptSendVO schemeOptSendVO) throws Exception;
JsonViewObject schemeOptRestore(String crossId) throws Exception;
}
......@@ -20,6 +20,8 @@ import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import static net.wanji.opt.service.impl.CrossOptimizeServiceImpl.getSchemeSendVO;
/**
* @author duanruiming
* @date 2023/03/02 9:11
......@@ -43,7 +45,7 @@ public class FeignProxyServiceImpl implements FeignProxyService {
JsonViewObject jsonViewObject = utcFeignClients.schemeSend(schemeSendVO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
log.error("实时监控路口优化方案下发远程调用异常!", jsonViewObject);
throw new Exception();
return jsonViewObject.fail("手动下发优化方案,UTC服务调用异常");
}
// 将优化记录插入方案优化记录表
......@@ -52,6 +54,19 @@ public class FeignProxyServiceImpl implements FeignProxyService {
return jsonViewObject.success("手动下发优化方案成功");
}
@Override
public JsonViewObject schemeOptRestore(String crossId) throws Exception {
// 下发原始方案
Map<String, CrossPhaseDTO> phaseMap = phaseDirTurnCache.getPhaseDirTurnMap();
SchemeSendVO schemeSendVO = getSchemeSendVO(crossId, phaseMap, Collections.EMPTY_MAP);
JsonViewObject jsonViewObject = utcFeignClients.schemeSend(schemeSendVO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
log.error("实时监控路口优化方案恢复远程调用异常!", jsonViewObject);
return jsonViewObject.fail("手动恢复优化方案,UTC服务调用异常");
}
return null;
}
/**
* 获取方案优化数据,插入到数据库
*
......
......@@ -25,6 +25,7 @@ public class SchemeOptSendVO extends SchemeSendVO {
@ApiModelProperty(value = "是否被关联调整: 1-否; 0-是")
private String relationFlag;
@ApiModelProperty(value = "关联路口方向编号")
@javax.validation.constraints.Pattern(regexp = "^[A-za-z0-9]{11}$", message = "路口编号只能包含英文、数字,必须11个字符")
private String relationCrossId;
@ApiModelProperty(value = "相位号-相位调整时间map")
@NotEmpty
......
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