Commit 023e2b81 authored by hanbing's avatar hanbing

[add] 新信号评价-方案评价-策略、评价指标下拉菜单

parent 295236e4
...@@ -5,15 +5,18 @@ import io.swagger.annotations.ApiOperation; ...@@ -5,15 +5,18 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.opt.bo.ProblemSchemeBO; import net.wanji.opt.bo.ProblemSchemeBO;
import net.wanji.opt.service.impl.SchemeEvaluateServiceImpl; import net.wanji.opt.service.impl.SchemeEvaluateServiceImpl;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO; import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import java.util.List;
/** /**
* 运行评价 * 运行评价
...@@ -42,4 +45,16 @@ public class SchemeEvaluateController { ...@@ -42,4 +45,16 @@ public class SchemeEvaluateController {
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
@ApiOperation(value = "策略-评价指标下拉菜单", notes = "策略-评价指标下拉菜单", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/strategyMetricMenu",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SchemeEvaluateStrategyMetricMenuVO.class),
})
public JsonViewObject strategyMetricMenu(@RequestBody CrossIdBO crossIdBO) {
List<SchemeEvaluateStrategyMetricMenuVO> res = schemeEvaluateService.strategyMetricMenu(crossIdBO);
return JsonViewObject.newInstance().success(res);
}
} }
\ No newline at end of file
package net.wanji.opt.service; package net.wanji.opt.service;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.opt.bo.ProblemSchemeBO; import net.wanji.opt.bo.ProblemSchemeBO;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO; import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO;
import java.util.List;
public interface SchemeEvaluateService { public interface SchemeEvaluateService {
SchemeEvaluateProblemSchemeVO problemSchemeList(ProblemSchemeBO problemSchemeBO); SchemeEvaluateProblemSchemeVO problemSchemeList(ProblemSchemeBO problemSchemeBO);
List<SchemeEvaluateStrategyMetricMenuVO> strategyMetricMenu(CrossIdBO crossIdBO);
} }
...@@ -3,7 +3,8 @@ package net.wanji.opt.service.impl; ...@@ -3,7 +3,8 @@ package net.wanji.opt.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.StrategyEnum; import net.wanji.common.enums.StrategyAndMetricsEnum;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO; import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.entity.CrossSectionPO; import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.mapper.BaseCrossSchemeMapper; import net.wanji.databus.dao.mapper.BaseCrossSchemeMapper;
...@@ -20,6 +21,7 @@ import net.wanji.opt.po.strategy.StrategyPO; ...@@ -20,6 +21,7 @@ import net.wanji.opt.po.strategy.StrategyPO;
import net.wanji.opt.service.SchemeEvaluateService; import net.wanji.opt.service.SchemeEvaluateService;
import net.wanji.opt.vo.RunningEvaluateMetricsDetailVO; import net.wanji.opt.vo.RunningEvaluateMetricsDetailVO;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO; import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -107,6 +109,26 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -107,6 +109,26 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
return res; return res;
} }
@Override
public List<SchemeEvaluateStrategyMetricMenuVO> strategyMetricMenu(CrossIdBO crossIdBO) {
List<SchemeEvaluateStrategyMetricMenuVO> voList = new ArrayList<>();
for (Map.Entry<StrategyAndMetricsEnum.Strategy, List<StrategyAndMetricsEnum.Metrics>> entry
: StrategyAndMetricsEnum.STRATEGY_METRICS_MAP.entrySet()) {
SchemeEvaluateStrategyMetricMenuVO vo = new SchemeEvaluateStrategyMetricMenuVO();
vo.setStrategyCode(entry.getKey().getCode());
vo.setStrategyName(entry.getKey().getMsg());
List<String> metricInfoList = new ArrayList<>();
for (StrategyAndMetricsEnum.Metrics metric : entry.getValue()) {
metricInfoList.add(metric.getDescription());
}
vo.setMetrics(metricInfoList);
voList.add(vo);
}
return voList;
}
private List<SchemeEvaluateProblemSchemeVO.BySchemeVO> buildProblemSchemeListByScheme( private List<SchemeEvaluateProblemSchemeVO.BySchemeVO> buildProblemSchemeListByScheme(
Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap) { Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap) {
// 使用一个Map来临时存储按方案名称分组的数据 // 使用一个Map来临时存储按方案名称分组的数据
...@@ -179,11 +201,11 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService { ...@@ -179,11 +201,11 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
Integer strategyId = sceneStrategyPO.getStrategyId(); Integer strategyId = sceneStrategyPO.getStrategyId();
StrategyPO strategyPO = strategyMapper.selectById(strategyId); StrategyPO strategyPO = strategyMapper.selectById(strategyId);
String strategyCode = strategyPO.getStrategyCode(); String strategyCode = strategyPO.getStrategyCode();
if (strategyCode.equals(StrategyEnum.EFFICIENCY.getCode())) { if (strategyCode.equals(StrategyAndMetricsEnum.Strategy.EFFICIENCY.getCode())) {
efficiencyProblemCounts += 1; efficiencyProblemCounts += 1;
} else if (strategyCode.equals(StrategyEnum.BALANCE.getCode())) { } else if (strategyCode.equals(StrategyAndMetricsEnum.Strategy.BALANCE.getCode())) {
balanceProblemCounts += 1; balanceProblemCounts += 1;
} else if (strategyCode.equals(StrategyEnum.SECURITY.getCode())) { } else if (strategyCode.equals(StrategyAndMetricsEnum.Strategy.SECURITY.getCode())) {
securityProblemCounts += 1; securityProblemCounts += 1;
} }
} }
......
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel(value = "SchemeEvaluateStrategyMetricMenuVO", description = "策略-评价指标下拉菜单")
public class SchemeEvaluateStrategyMetricMenuVO {
@ApiModelProperty(value = "策略名称")
private String strategyName;
@ApiModelProperty(value = "策略编号")
private String strategyCode;
@ApiModelProperty(value = "评价指标")
private List<String> metrics;
}
package net.wanji.common.enums;
import java.util.*;
public class StrategyAndMetricsEnum {
public enum Strategy {
BALANCE("100030", "均衡调控"),
EFFICIENCY("100152", "效率提升"),
SECURITY("100010", "安全保障");
private final String code;
private final String msg;
Strategy(String code, String msg) {
this.code = code;
this.msg = msg;
}
public static String getMsgByCode(String code) {
for (Strategy value : Strategy.values()) {
if (value.code.equals(code)) {
return value.msg;
}
}
return null;
}
public String getMsg() {
return msg;
}
public String getCode() {
return code;
}
}
public enum Metrics {
NO_STOP_THROUGH_RATE("不停车通过率"),
STOP_THROUGH_RATE("一/二/三次及以上停车通过率"),
AVERAGE_DELAY("平均延误"),
MAX_QUEUE_LENGTH("最大排队长度"),
STOP_COUNT("停车次数"),
AVERAGE_SPEED("平均速度"),
GREEN_LIGHT_UTILIZATION("绿灯有效利用率"),
SATURATION("饱和度"),
LOAD_BALANCE("负载均衡度"),
OVERFLOW_RATE("溢流率"),
GREEN_INTERVAL_CLEAR("绿灯间隔清空率"),
EMERGENCY_COUNT("三急一速数量");
private final String description;
Metrics(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
public static final Map<Strategy, List<Metrics>> STRATEGY_METRICS_MAP;
static {
Map<Strategy, List<Metrics>> map = new HashMap<>();
map.put(Strategy.EFFICIENCY, Arrays.asList(
Metrics.NO_STOP_THROUGH_RATE,
Metrics.STOP_THROUGH_RATE,
Metrics.AVERAGE_DELAY,
Metrics.MAX_QUEUE_LENGTH,
Metrics.STOP_COUNT,
Metrics.AVERAGE_SPEED
));
map.put(Strategy.BALANCE, Arrays.asList(
Metrics.GREEN_LIGHT_UTILIZATION,
Metrics.SATURATION,
Metrics.LOAD_BALANCE
));
map.put(Strategy.SECURITY, Arrays.asList(
Metrics.OVERFLOW_RATE,
Metrics.GREEN_INTERVAL_CLEAR,
Metrics.EMERGENCY_COUNT
));
STRATEGY_METRICS_MAP = Collections.unmodifiableMap(map);
}
public static void main(String[] args) {
// 示例:获取"效率提升"策略的所有指标
List<Metrics> efficiencyMetrics = STRATEGY_METRICS_MAP.get(Strategy.EFFICIENCY);
System.out.println("效率提升的指标有:");
for (Metrics metric : efficiencyMetrics) {
System.out.println(metric.getDescription());
}
}
}
package net.wanji.common.enums;
/**
* @author Kent HAN
* @date 2022/11/8 17:20
*/
public enum StrategyEnum {
BALANCE("100030", "均衡调控"),
EFFICIENCY("100152", "效率提升"),
SECURITY("100010", "安全保障");
private final String code;
private final String msg;
StrategyEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public static String getMsgByCode(String code) {
for (StrategyEnum value : StrategyEnum.values()) {
if (value.code.equals(code)) {
return value.msg;
}
}
return null;
}
public String getMsg() {
return msg;
}
public String getCode() {
return code;
}
}
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