Commit 269e2df2 authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 9ec1d5c9 09d61c1a
...@@ -696,7 +696,14 @@ public class PlanSendServiceImpl implements PlanSendService { ...@@ -696,7 +696,14 @@ public class PlanSendServiceImpl implements PlanSendService {
Integer phaseTime = optLogPO.getPhaseTime(); Integer phaseTime = optLogPO.getPhaseTime();
//绿灯时间 //绿灯时间
int greenTime = phaseTime - yellowTime - redTime; int greenTime = phaseTime - yellowTime - redTime;
optPhase.setGreenTime(greenTime); if (greenTime <= 0){
optPhase.setGreenTime(phaseTime);
optPhase.setYellowTime(0);
optPhase.setRedTime(0);
}else {
optPhase.setGreenTime(greenTime);
}
optPhaseList.add(optPhase); optPhaseList.add(optPhase);
} }
} }
......
package net.wanji.opt.constant;
/**
* @ClassName ServiceLevelEnum
* @Description
* @Date 2021/4/15 11:13
* @Version 1.0
*/
public enum ServiceLevelEnum {
CROSS_PHASE_EMPTY("A",1 ),
CROSS_UNBALANCE("B",2 ),
CROSS_OVERFLOW("C",3 ),
CROSS_DEADLOCK("D",4 ),
GREEN_WAVE_SLOW_RUN("E",5 ),
GREEN_WAVE_CONGEST("F",6 ),
;
String type;
Integer val;
ServiceLevelEnum(String type, Integer val ) {
this.type = type;
this.val = val;
}
public String getType(){
return type;
}
public Integer getVal() {
return val;
}
public static ServiceLevelEnum getByType(String type){
for (ServiceLevelEnum abnormalEnum : ServiceLevelEnum.values()) {
if(abnormalEnum.getType().equals(type)){
return abnormalEnum;
}
}
return null;
}
public static ServiceLevelEnum getByVal(Integer type){
for (ServiceLevelEnum abnormalEnum : ServiceLevelEnum.values()) {
if(abnormalEnum.getVal().equals(type)){
return abnormalEnum;
}
}
return null;
}
}
...@@ -83,7 +83,7 @@ public class InduceTemplate implements Serializable { ...@@ -83,7 +83,7 @@ public class InduceTemplate implements Serializable {
* 是否默认模板 0:否 1:是 * 是否默认模板 0:否 1:是
*/ */
@TableField("default_template") @TableField("default_template")
private Integer defaultTemplate=0; private Integer defaultTemplate;
/** /**
* 创建时间 * 创建时间
......
...@@ -288,9 +288,9 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH ...@@ -288,9 +288,9 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
} }
int totalTime = Seconds.secondsBetween(startDateTime,endDateTime).getSeconds(); int totalTime = Seconds.secondsBetween(startDateTime,endDateTime).getSeconds();
for (GreenWaveRunStateVO vo : list ) { for (GreenWaveRunStateVO vo : list ) {
if (vo.getDuration()<=0) { // if (vo.getDuration()<=0) {
vo.setDuration(getRandomValue(totalTime / 10, 120)); // vo.setDuration(getRandomValue(totalTime / 10, 120));
} // }
vo.setTotalTime(totalTime); vo.setTotalTime(totalTime);
} }
......
...@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.CrossStatusEnum; import net.wanji.common.enums.CrossStatusEnum;
...@@ -23,11 +24,13 @@ import net.wanji.databus.po.BaseCrossInfoPO; ...@@ -23,11 +24,13 @@ import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.databus.po.CrossDataHistPO; import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossTurnInfoPO; import net.wanji.databus.po.CrossTurnInfoPO;
import net.wanji.databus.po.LaneInfoPO; import net.wanji.databus.po.LaneInfoPO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.databus.vo.RunningEvaluateCrossListVO; import net.wanji.databus.vo.RunningEvaluateCrossListVO;
import net.wanji.opt.bo.CrossNameBO; import net.wanji.opt.bo.CrossNameBO;
import net.wanji.opt.bo.MetricsDetailBO; import net.wanji.opt.bo.MetricsDetailBO;
import net.wanji.opt.common.KafkaConsumerUtil; import net.wanji.opt.common.KafkaConsumerUtil;
import net.wanji.opt.constant.EventAbnormalEnum; import net.wanji.opt.constant.EventAbnormalEnum;
import net.wanji.opt.constant.ServiceLevelEnum;
import net.wanji.opt.dto.PhaseEmptyResult; import net.wanji.opt.dto.PhaseEmptyResult;
import net.wanji.opt.service.GreenwaveHistProvider; import net.wanji.opt.service.GreenwaveHistProvider;
import net.wanji.opt.service.RunningEvaluateService; import net.wanji.opt.service.RunningEvaluateService;
...@@ -150,54 +153,44 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService { ...@@ -150,54 +153,44 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
String crossId = bo.getCrossId(); String crossId = bo.getCrossId();
List<CrossDataHistPO> crossDataHistPOList = buildCrossDataHistPOList(bo, crossId); List<CrossDataHistPO> crossDataHistPOList = buildCrossDataHistPOList(bo, crossId);
for (CrossDataHistPO po : crossDataHistPOList) {
//历史未存服务水平字段数据置为A,否则分组报异常
po.setServiceLevel(po.getServiceLevel()==null?"A":po.getServiceLevel());
}
String startTime = net.wanji.common.utils.tool.DateUtil.formatDate(bo.getStartDate(),"yyyy-MM-dd HH:mm:ss"); String startTime = net.wanji.common.utils.tool.DateUtil.formatDate(bo.getStartDate(), "yyyy-MM-dd HH:mm:ss");
String endTime = net.wanji.common.utils.tool.DateUtil.formatDate(bo.getEndDate(),"yyyy-MM-dd HH:mm:ss"); String endTime = net.wanji.common.utils.tool.DateUtil.formatDate(bo.getEndDate(), "yyyy-MM-dd HH:mm:ss");
List<GreenWaveRunStateVO> runStateList = greenwaveHistProvider.findGreenWaveRunState(null,bo.getCrossId(), startTime,endTime ,"701,702,703");
Map<Integer,GreenWaveRunStateVO> groupList = runStateList.stream().collect(Collectors.toMap(o -> o.getState(), o -> o));
// 服务水平
double sumA = crossDataHistPOList.stream()
.filter(po -> isInTimeRange(po.getBatchTime()))
.mapToDouble(po -> po.getFlow() * po.getSturation())
.sum();
int sumB = crossDataHistPOList.stream() //按服务水平分组
.filter(po -> isInTimeRange(po.getBatchTime())) Map<String, List<CrossDataHistPO>> groupByServerLevel = crossDataHistPOList.stream().collect(Collectors.groupingBy(o -> o.getServiceLevel()));
.mapToInt(CrossDataHistPO::getFlow) double total = 0;
.sum(); for (Map.Entry<String, List<CrossDataHistPO>> entry1 : groupByServerLevel.entrySet()) {
String key = entry1.getKey();
total += ServiceLevelEnum.getByType(key).getVal() * entry1.getValue().size();
}
int avgService = (int) Math.round(total/crossDataHistPOList.size());
String serviceLevel = ServiceLevelEnum.getByVal(avgService).getType();
double saturation = sumA / sumB;
String serviceLevel = CrossUtil.getServiceLevel(saturation);
vo.setServiceLevel(serviceLevel); vo.setServiceLevel(serviceLevel);
// *******************************************************************************************************//
List<GreenWaveRunStateVO> runStateList = greenwaveHistProvider.findGreenWaveRunState(null, bo.getCrossId(), startTime, endTime, "701,702,703");
Map<Integer, GreenWaveRunStateVO> groupList = runStateList.stream().collect(Collectors.toMap(o -> o.getState(), o -> o));
// List<CrossDataHistPO> congestionEventList = buildCongestionEvents(crossDataHistPOList); // 获取拥堵事件集合 vo.setUnbalanceTimes(groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType()) == null ? 0 : groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType()).getCount());
// vo.setCongestionTimes(congestionEventList.size()); int unbalanceSum = groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType()) == null ? 0 : groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType()).getDuration();
// int congestionSum = congestionEventList.stream() vo.setUnbalanceSum(Math.round(unbalanceSum/60));
// .filter(Objects::nonNull)
// .map(CrossDataHistPO::getDuration)
// .filter(Objects::nonNull)
// .mapToInt(Integer::intValue)
// .sum();
// vo.setCongestionSum(congestionSum);
vo.setUnbalanceTimes(groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType())==null?0:groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType()).getCount()); vo.setSpilloverTimes(groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType()) == null ? 0 : groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType()).getCount());
int unbalanceSum = groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType())==null?0:groupList.get(EventAbnormalEnum.CROSS_UNBALANCE.getType()).getDuration(); int spilloverSum = groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType()) == null ? 0 : groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType()).getDuration();
vo.setUnbalanceSum(unbalanceSum); vo.setSpilloverSum(Math.round(spilloverSum/60));
vo.setSpilloverTimes(groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType())==null?0:groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType()).getCount());
int spilloverSum =groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType())==null?0:groupList.get(EventAbnormalEnum.CROSS_OVERFLOW.getType()).getDuration();
vo.setSpilloverSum(spilloverSum);
int emptyPhaseCount = groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType()) == null ? 0 : groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType()).getCount();
int emptyPhaseSum = groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType()) == null ? 0 : groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType()).getDuration();
int emptyPhaseCount = groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType())==null?0:groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType()).getCount();
int emptyPhaseSum = groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType())==null?0:groupList.get(EventAbnormalEnum.CROSS_PHASE_EMPTY.getType()).getDuration();
vo.setEmptyPhaseTimes(emptyPhaseCount); vo.setEmptyPhaseTimes(emptyPhaseCount);
vo.setEmptyPhaseSum(emptyPhaseSum); vo.setEmptyPhaseSum(Math.round(emptyPhaseSum/60));
// *******************************************************************************************************//
return vo; return vo;
} }
......
...@@ -80,27 +80,27 @@ public class InduceSendServiceImpl implements InduceSendService { ...@@ -80,27 +80,27 @@ public class InduceSendServiceImpl implements InduceSendService {
public void send(MessageParam param) throws IOException, TemplateException { public void send(MessageParam param) throws IOException, TemplateException {
//生成诱导屏推送sourceId //生成诱导屏推送sourceId
String messageId = UUID.randomUUID().toString().toLowerCase(); String messageId = UUID.randomUUID().toString().toLowerCase();
InduceHist induceHist=new InduceHist(); InduceHist induceHist = new InduceHist();
param.setSourceId(messageId); param.setSourceId(messageId);
induceHist.setSourceId(messageId); induceHist.setSourceId(messageId);
GreenwaveInduces greenwaveinduces=greenwaveInducesService.getById(param.getInduceId()); GreenwaveInduces greenwaveinduces = greenwaveInducesService.getById(param.getInduceId());
// 读取图片模板参数 // 读取图片模板参数
InduceTemplate induceTemplate = induceTemplateService.getById(param.getTemplateId()); InduceTemplate induceTemplate = induceTemplateService.getById(param.getTemplateId());
if(param.getFlg()==1) { if (param.getFlg() == 1) {
LambdaQueryWrapper<DeviceInduces> deviceQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<DeviceInduces> deviceQueryWrapper = new LambdaQueryWrapper<>();
deviceQueryWrapper.eq(DeviceInduces::getEquipCode, induceTemplate.getEquipCode()); deviceQueryWrapper.eq(DeviceInduces::getEquipCode, induceTemplate.getEquipCode());
DeviceInduces deviceInduces = deviceInducesService.getOne(deviceQueryWrapper); DeviceInduces deviceInduces = deviceInducesService.getOne(deviceQueryWrapper);
if(Objects.nonNull(deviceInduces)) { if (Objects.nonNull(deviceInduces)) {
param.setResolutionWidth(deviceInduces.getResolutionWidth().intValue()); param.setResolutionWidth(deviceInduces.getResolutionWidth().intValue());
param.setResolutionHeight(deviceInduces.getResolutionHeight().intValue()); param.setResolutionHeight(deviceInduces.getResolutionHeight().intValue());
} }
}
// 获取图片字节数组 // 获取图片字节数组
byte[] imageBytes = induceTemplate.getFileContent(); BufferedImage image = null;
if (imageBytes != null || imageBytes.length > 0) { try {
// 将字节数组转换为字节对象 byte[] imageBytes = induceTemplate.getFileContent();
BufferedImage image =null; if (imageBytes != null || imageBytes.length > 0) {
try { // 将字节数组转换为字节对象
image = ImageIO.read(new ByteArrayInputStream(imageBytes)); image = ImageIO.read(new ByteArrayInputStream(imageBytes));
// 修改图像中文字 // 修改图像中文字
//addTextToImage(image, param.getContents(), induceTemplate.getTextX(), induceTemplate.getTextY(), induceTemplate.getTextSize(), induceTemplate.getTextSign()); //addTextToImage(image, param.getContents(), induceTemplate.getTextX(), induceTemplate.getTextY(), induceTemplate.getTextSize(), induceTemplate.getTextSign());
...@@ -117,26 +117,26 @@ public class InduceSendServiceImpl implements InduceSendService { ...@@ -117,26 +117,26 @@ public class InduceSendServiceImpl implements InduceSendService {
// 图片生成操作 // 图片生成操作
boolean upDown = param.getContents()[0].contains("▲") || param.getContents()[0].contains("▼"); boolean upDown = param.getContents()[0].contains("▲") || param.getContents()[0].contains("▼");
createImageWithText(induceTemplate, image, param.getContents(), induceTemplate.getTextSign(), upDown, topLeftX, topLeftY, bottomRightX, bottomRightY); createImageWithText(induceTemplate, image, param.getContents(), induceTemplate.getTextSign(), upDown, topLeftX, topLeftY, bottomRightX, bottomRightY);
}catch (Exception ex){
log.error(ex.getMessage());
} }
// 测试阶段保存图片到本地 } catch (Exception ex) {
log.error(ex.getMessage());
}
// 测试阶段保存图片到本地
// ImageIO.write(image, "bmp", new File("D:\\tmp\\" + induceTemplate.getFileName())); // ImageIO.write(image, "bmp", new File("D:\\tmp\\" + induceTemplate.getFileName()));
// 上传文件至ftp // 上传文件至ftp
if (param.getFlg() == 1) { String dirName = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String dirName=LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String fileName = param.getEquipCode() + "_" + UUID.randomUUID().toString() + ".bmp";
String fileName=param.getEquipCode()+"_"+UUID.randomUUID().toString()+".bmp"; String filePath = uploadFile(image, dirName, fileName);
String filePath = uploadFile(image,dirName, fileName); param.setFtpPath(filePath);
param.setFtpPath(filePath); induceHist.setFilePath(PATH + dirName + "/" + fileName);
induceHist.setFilePath(PATH + dirName+"/"+fileName); if (Objects.nonNull(param.getContents()) && param.getContents().length > 0) {
if(Objects.nonNull(param.getContents()) && param.getContents().length>0) { induceHist.setInduceSpeed(param.getContents()[0]);
induceHist.setInduceSpeed(param.getContents()[0]); }
} if (Objects.nonNull(greenwaveinduces)) {
if(Objects.nonNull(greenwaveinduces)) { greenwaveinduces.setSourceId(PATH + dirName + "/" + fileName);
greenwaveinduces.setSourceId(PATH + dirName + "/" + fileName);
}
} }
log.info("上传文件至ftp-filePath:{}", param.getFtpPath()); log.info("上传文件至ftp-filePath:{}", param.getFtpPath());
}
// //如果已发布,则调用下屏服务 // //如果已发布,则调用下屏服务
// if(greenwaveinduces.getStatus()==1){ // if(greenwaveinduces.getStatus()==1){
// param.setFlg(2); // param.setFlg(2);
...@@ -154,34 +154,34 @@ public class InduceSendServiceImpl implements InduceSendService { ...@@ -154,34 +154,34 @@ public class InduceSendServiceImpl implements InduceSendService {
// Message messageSend = new Message(message.getBytes(), messageProperties); // Message messageSend = new Message(message.getBytes(), messageProperties);
// rabbitTemplate.convertAndSend("",queueName, messageSend); // rabbitTemplate.convertAndSend("",queueName, messageSend);
// } // }
// 推送mq消息 // 推送mq消息
String message = convertMessage(param.getFlg()==1?"induce_up.xml":"induce_down.xml",param); String message = convertMessage(param.getFlg() == 1 ? "induce_up.xml" : "induce_down.xml", param);
// 去掉所有转义字符(\n、\t、\b、等) // 去掉所有转义字符(\n、\t、\b、等)
// message = message.replaceAll("[\\n\\t\\r]", ""); // 可以根据需要添加更多字符 // message = message.replaceAll("[\\n\\t\\r]", ""); // 可以根据需要添加更多字符
// 可以去掉反斜杠 // 可以去掉反斜杠
// message = message.replace("\\", ""); // message = message.replace("\\", "");
// 创建MessageProperties并设置内容类型 // 创建MessageProperties并设置内容类型
// MessageProperties messageProperties = new MessageProperties(); // MessageProperties messageProperties = new MessageProperties();
// messageProperties.setContentType("text/plain"); // 设置内容类型为text/plain // messageProperties.setContentType("text/plain"); // 设置内容类型为text/plain
// 创建Message并设置内容 // 创建Message并设置内容
// Message messageSend = new Message(message.getBytes(), messageProperties); // Message messageSend = new Message(message.getBytes(), messageProperties);
if(sending) if (sending) {
{ rabbitTemplate.convertAndSend("", queueName, message);
rabbitTemplate.convertAndSend("", queueName, message); }
} log.info("mqtt发送信息-topic:{},queueName:{},message:{}", queueName, message);
log.info("mqtt发送信息-topic:{},queueName:{},message:{}", queueName, message); //1、增加下发记录log 2、计数 3、标记已发布状体
//1、增加下发记录log 2、计数 3、标记已发布状体 if (Objects.nonNull(induceTemplate) && Objects.nonNull(induceTemplate.getEquipCode()) && param.getFlg() == 1) {
induceHist.setEquipCode(induceTemplate.getEquipCode()); induceHist.setEquipCode(induceTemplate.getEquipCode());
induceHist.setGreenId(param.getGreenId()); induceHist.setGreenId(param.getGreenId());
induceHistService.save(induceHist); induceHistService.save(induceHist);
//保存诱导状态信息
if(Objects.nonNull(greenwaveinduces) && param.getFlg()==1) {
greenwaveinduces.setInducesCount(Objects.isNull(greenwaveinduces.getInducesCount()) ? 0 : greenwaveinduces.getInducesCount() + ((param.getFlg()==1)?1:0));
greenwaveinduces.setStatus(param.getFlg()==1?1:0);
greenwaveInducesService.saveOrUpdate(greenwaveinduces);
}
} }
} //保存诱导状态信息
if (Objects.nonNull(greenwaveinduces)) {
greenwaveinduces.setInducesCount(Objects.isNull(greenwaveinduces.getInducesCount()) ? 0 : greenwaveinduces.getInducesCount() + ((param.getFlg() == 1) ? 1 : 0));
greenwaveinduces.setStatus(param.getFlg() == 1 ? 1 : 0);
greenwaveInducesService.saveOrUpdate(greenwaveinduces);
}
}
@Override @Override
public String uploadFile(BufferedImage image,String directoryName, String fileName) { public String uploadFile(BufferedImage image,String directoryName, String fileName) {
......
...@@ -48,7 +48,13 @@ ...@@ -48,7 +48,13 @@
<!-- 统计指标查询 --> <!-- 统计指标查询 -->
<select id="findStatisticIndex" resultMap="BaseResultMap"> <select id="findStatisticIndex" resultMap="BaseResultMap">
SELECT SELECT
green_id,road_direction, green_id,
(case
when road_direction='n2s' then '南向北'
when road_direction='s2n' then '北向南'
when road_direction='e2w' then '东向西'
when road_direction='w2e' then '西向东'
end ) road_direction,
DATE_FORMAT( start_time, '%Y-%m-%d %H:%i:00' ) start_time, DATE_FORMAT( start_time, '%Y-%m-%d %H:%i:00' ) start_time,
round(AVG(speed),2) speed, round(AVG(speed),2) speed,
round(AVG(delay_time)) delay_time, round(AVG(delay_time)) delay_time,
......
...@@ -5,7 +5,11 @@ ...@@ -5,7 +5,11 @@
<mapper namespace="net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper"> <mapper namespace="net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper">
<select id="selectByGreenId" resultType="net.wanji.opt.po.StrategyGreenOptHistEntity" parameterType="String" > <select id="selectByGreenId" resultType="net.wanji.opt.po.StrategyGreenOptHistEntity" parameterType="String" >
select * from t_strategy_green_opt_hist where `green_id` = #{greenId} and TIMESTAMPDIFF(SECOND,`control_time`, now()) &lt; `control_duration` order by create_time desc limit 2; select * from t_strategy_green_opt_hist a
inner join (
-- 先查询出最后一条数据的时间
select `green_id`, MAX(`control_time`) control_time from t_strategy_green_opt_hist group by `green_id`
) b on a.`green_id` = b.`green_id` and a.`control_time` = b.`control_time` and a.`green_id` = #{greenId} and a.`control_method` = 1 and TIMESTAMPDIFF(SECOND,a.`control_time`, now()) &lt; a.`control_duration`
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
</select> </select>
<select id="selectByCrossName" resultType="net.wanji.databus.vo.RunningEvaluateCrossListVO"> <select id="selectByCrossName" resultType="net.wanji.databus.vo.RunningEvaluateCrossListVO">
select t1.cross_id as crossId, t1.sturation as sturation, t2.name as crossName, t1.congestion_index select t1.cross_id as crossId, t1.sturation as sturation, t2.name as crossName, t1.traffic_index congestionIndex, t1.service_level serviceLevel
from t_cross_data_realtime t1 join t_base_cross_info t2 on t1.cross_id = t2.id and t2.is_signal = 1 from t_cross_data_realtime t1 join t_base_cross_info t2 on t1.cross_id = t2.id and t2.is_signal = 1
<where> <where>
<if test="crossName != null and crossName != ''"> <if test="crossName != null and crossName != ''">
......
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