Commit 21927e5b authored by duanruiming's avatar duanruiming

[add] 路口策略历史优化查询

parent 77c41809
...@@ -39,7 +39,7 @@ public class BaseCrossInfoCache implements CommandLineRunner { ...@@ -39,7 +39,7 @@ public class BaseCrossInfoCache implements CommandLineRunner {
/** /**
* 通过路口编号查询经纬度 * 通过路口编号查询经纬度
*/ */
public String getCoordinateByCrossId(String crossId) { public static String getCoordinateByCrossId(String crossId) {
for (BaseCrossInfoPO baseCrossInfoPO : crossInfoList) { for (BaseCrossInfoPO baseCrossInfoPO : crossInfoList) {
if (StringUtils.equals(crossId, baseCrossInfoPO.getId())) { if (StringUtils.equals(crossId, baseCrossInfoPO.getId())) {
return baseCrossInfoPO.getLocation(); return baseCrossInfoPO.getLocation();
......
package net.wanji.opt.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.synthesis.pojo.StrategyCrossResultEntity;
/**
* @author duanruiming
* @date 2024/12/01 14:23
*/
public interface StrategyCrossResultMapper extends BaseMapper<StrategyCrossResultEntity> {
}
package net.wanji.opt.synthesis.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/12/01 14:44
*/
@Getter
@AllArgsConstructor
public enum StrategyCrossAlgoEnum {
ZERO(0, "无策略"),
ONE(1, "绿灯空放"),
TWO(2, "失衡"),
THREE(3, "溢出");
private Integer code;
private String desc;
public static String getDescByCode(Integer code) {
for (StrategyCrossAlgoEnum value : StrategyCrossAlgoEnum.values()) {
if (Objects.equals(code, value.code)) {
return value.getDesc();
}
}
return "无策略";
}
}
package net.wanji.opt.synthesis.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @author duanruiming
* @date 2024/12/01 14:12
*/
@Data
@TableName("t_strategy_cross_result")
public class StrategyCrossResultEntity {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField("cross_id")
private String crossId;
@TableField("cross_name")
private String crossName;
@TableField("current_algo")
private Integer currentAlgo;
@TableField("request_time")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private String requestTime;
@TableField("issue_time")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private String issueTime;
@TableField("response_code")
private Integer responseCode;
@TableField("timing_plan")
private String timingPlan;
@TableField("insert_time")
private String insertTime;
@TableField("rtn_type")
private Integer rtnType;
@TableField("extend_time")
private Integer extendTime;
@TableField("block_region")
private Integer blockRegion;
@TableField("block_type")
private Integer blockType;
@TableField("count_down")
private Integer countDown;
@TableField("video_stamp")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private String videoStamp;
@TableField("signal_machine_stamp")
private Long signalMachineStamp;
@TableField("control_dir")
private String controlDir;
@TableField("data")
private String data;
@TableField("duration")
private Integer duration;
@TableField("empty_turn")
private Integer emptyTurn;
@TableField("empty_dir")
private String empty_dir;
}
...@@ -11,17 +11,17 @@ import lombok.extern.slf4j.Slf4j; ...@@ -11,17 +11,17 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.DateStyle; import net.wanji.common.enums.DateStyle;
import net.wanji.common.framework.Constants; import net.wanji.common.framework.Constants;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.licenseUtils.DateUtils;
import net.wanji.common.utils.tool.JacksonUtils; import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.databus.dao.entity.GreenwaveInfoPO; import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.BaseCrossInfoMapper; import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper; import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.databus.po.BaseCrossInfoPO; import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.opt.cache.BaseCrossInfoCache;
import net.wanji.opt.cache.GreenWaveInfoCache; import net.wanji.opt.cache.GreenWaveInfoCache;
import net.wanji.opt.dao.mapper.*; import net.wanji.opt.dao.mapper.*;
import net.wanji.opt.po.StrategyGreenOptHistEntity; import net.wanji.opt.po.StrategyGreenOptHistEntity;
import net.wanji.opt.synthesis.enums.StrategyCrossAlgoEnum;
import net.wanji.opt.synthesis.pojo.*; import net.wanji.opt.synthesis.pojo.*;
import net.wanji.opt.synthesis.pojo.request.StrategyHistReq;
import net.wanji.opt.synthesis.service.PushStrategyControlService; import net.wanji.opt.synthesis.service.PushStrategyControlService;
import net.wanji.opt.synthesis.service.StrategyControlService; import net.wanji.opt.synthesis.service.StrategyControlService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -31,10 +31,10 @@ import org.springframework.util.CollectionUtils; ...@@ -31,10 +31,10 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -62,6 +62,8 @@ public class StrategyControlServiceImpl implements StrategyControlService { ...@@ -62,6 +62,8 @@ public class StrategyControlServiceImpl implements StrategyControlService {
private GreenwaveInfoMapper greenwaveInfoMapper; private GreenwaveInfoMapper greenwaveInfoMapper;
@Resource @Resource
private StrategyGreenOptHistMapper strategyGreenOptHistMapper; private StrategyGreenOptHistMapper strategyGreenOptHistMapper;
@Resource
private StrategyCrossResultMapper strategyCrossResultMapper;
@Override @Override
...@@ -165,19 +167,47 @@ public class StrategyControlServiceImpl implements StrategyControlService { ...@@ -165,19 +167,47 @@ public class StrategyControlServiceImpl implements StrategyControlService {
@Override @Override
public JsonViewObject crossStrategyHistList() throws Exception { public JsonViewObject crossStrategyHistList() throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<StrategyControlHistVO> results = new ArrayList<>(); List<StrategyControlHistVO> results = new ArrayList<>();
LocalDate currentDate = LocalDate.now(); LocalDate currentDate = LocalDate.now();
LocalDateTime midnight = currentDate.atStartOfDay(); LocalDateTime midnight = currentDate.atStartOfDay();
// 查询当前绿波历史记录
setGreenOptHist(results, midnight, format);
setCrossOptHist(results, midnight);
return JsonViewObject.newInstance().success(results);
}
private void setCrossOptHist(List<StrategyControlHistVO> results, LocalDateTime midnight) {
LambdaQueryWrapper<StrategyCrossResultEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(StrategyCrossResultEntity::getIssueTime, midnight);
List<StrategyCrossResultEntity> resultEntities = strategyCrossResultMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(resultEntities)) {
for (StrategyCrossResultEntity resultEntity : resultEntities) {
StrategyControlHistVO histVO = new StrategyControlHistVO();
String crossId = resultEntity.getCrossId();
histVO.setId(crossId);
histVO.setName(resultEntity.getCrossName());
String coordinateByCrossId = BaseCrossInfoCache.getCoordinateByCrossId(crossId);
histVO.setWkt(coordinateByCrossId.replace("POINT(", "").replace(" ", ",").replace(")", ""));
histVO.setStrategy(resultEntity.getCurrentAlgo());
histVO.setStrategyName(StrategyCrossAlgoEnum.getDescByCode(resultEntity.getCurrentAlgo()));
histVO.setOptTime(resultEntity.getIssueTime());
histVO.setResult(Objects.equals(200, resultEntity.getResponseCode()) ? "成功" : "失败");
results.add(histVO);
}
}
}
private void setGreenOptHist(List<StrategyControlHistVO> results, LocalDateTime midnight, SimpleDateFormat format) throws ParseException {
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(StrategyGreenOptHistEntity::getControlTime, midnight); queryWrapper.ge(StrategyGreenOptHistEntity::getControlTime, midnight);
List<StrategyGreenOptHistEntity> entities = strategyGreenOptHistMapper.selectList(queryWrapper); List<StrategyGreenOptHistEntity> entities = strategyGreenOptHistMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(entities)) { if (!CollectionUtils.isEmpty(entities)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<Integer, GreenwaveInfoPO> greenWaveMap = GreenWaveInfoCache.greenWaveMap; Map<Integer, GreenwaveInfoPO> greenWaveMap = GreenWaveInfoCache.greenWaveMap;
for (StrategyGreenOptHistEntity entity : entities) { for (StrategyGreenOptHistEntity entity : entities) {
StrategyControlHistVO histVO = new StrategyControlHistVO(); StrategyControlHistVO histVO = new StrategyControlHistVO();
histVO.setId(String.valueOf(entity.getGreenId())); histVO.setId(String.valueOf(entity.getGreenId()));
if(greenWaveMap.isEmpty()) { if (greenWaveMap.isEmpty()) {
continue; continue;
} }
String controlTime = entity.getControlTime(); String controlTime = entity.getControlTime();
...@@ -204,29 +234,6 @@ public class StrategyControlServiceImpl implements StrategyControlService { ...@@ -204,29 +234,6 @@ public class StrategyControlServiceImpl implements StrategyControlService {
results.add(histVO); results.add(histVO);
} }
} }
//LambdaQueryWrapper<StrategyControlDataEntity> queryWrapper = new LambdaQueryWrapper<>();
//queryWrapper.isNotNull(StrategyControlDataEntity::getScheduleStart);
//queryWrapper.orderByDesc(StrategyControlDataEntity::getScheduleEnd);
//List<StrategyControlDataEntity> entities = strategyControlInfoMapper.selectList(queryWrapper);
//if (!CollectionUtils.isEmpty(entities)) {
// for (StrategyControlDataEntity entity : entities) {
// Integer type = entity.getBizType();
// if (type == 0) {
// BaseCrossInfoPO baseCrossInfoPO = baseCrossInfoMapper.selectById(entity.getBizId());
// entity.setCrossName(baseCrossInfoPO.getName());
// String location = baseCrossInfoPO.getLocation();
// location = location.replace("POINT(", "").replace(" ", ",").replace(")", "");
// entity.setWkt(location);
// }
// if (type == 1) {
// GreenwaveInfoPO greenwaveInfoPO = greenwaveInfoMapper.selectById(Integer.valueOf(entity.getBizId()));
// entity.setCrossName(greenwaveInfoPO.getName());
// entity.setWkt(greenwaveInfoPO.getWkt());
// }
// results.add(entity);
// }
//}
return JsonViewObject.newInstance().success(results);
} }
@Override @Override
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.StrategyCrossResultMapper">
</mapper>
\ No newline at end of file
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