Commit 7652f699 authored by duanruiming's avatar duanruiming

[add] 策略历史优化查询

parent e69d4323
package net.wanji.opt.cache;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author duanruiming
* @date 2024/11/29 11:19
*/
@Component
@Slf4j
public class GreenWaveInfoCache implements CommandLineRunner {
public static final Map<Integer, GreenwaveInfoPO> greenWaveMap = new HashMap<>();
@Resource
private GreenwaveInfoMapper greenwaveInfoMapper;
@Override
public void run(String... args) throws Exception {
try {
List<GreenwaveInfoPO> greenWaveInfoPOS = greenwaveInfoMapper.selectAll();
if (!CollectionUtils.isEmpty(greenWaveInfoPOS)) {
for (GreenwaveInfoPO greenWaveInfoPO : greenWaveInfoPOS) {
greenWaveMap.put(greenWaveInfoPO.getId(), greenWaveInfoPO);
}
}
} catch (Exception e) {
log.error("绿波信息初始化失败:", e);
throw new RuntimeException("绿波信息初始化失败!");
}
}
}
......@@ -10,6 +10,7 @@ import net.wanji.opt.synthesis.pojo.StrategyControlDataEntity;
import net.wanji.opt.synthesis.pojo.StrategyControlDetailList;
import net.wanji.opt.synthesis.pojo.StrategyControlVO;
import net.wanji.opt.synthesis.pojo.StrategyFactoryEntity;
import net.wanji.opt.synthesis.pojo.request.StrategyHistReq;
import net.wanji.opt.synthesis.service.StrategyControlService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
......
package net.wanji.opt.synthesis.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author duanruiming
* @date 2024/11/29 11:03
*/
@Data
@ApiModel(value = "StrategyControlHistVO", description = "策略控制操作实体")
public class StrategyControlHistVO {
@ApiModelProperty("路口编号干线编号")
private String id;
@ApiModelProperty("路口名称干线名称")
private String name;
@ApiModelProperty("策略号")
private Integer strategy;
@ApiModelProperty("策略名称")
private String strategyName;
@ApiModelProperty("优化时间")
private String optTime;
@ApiModelProperty("优化结果")
private String result;
@ApiModelProperty("经纬度")
private String wkt;
}
package net.wanji.opt.synthesis.pojo.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author duanruiming
* @date 2024/11/29 11:10
*/
@Data
@ApiModel(value = "StrategyHistReq", description = "策略控制历史请求实体")
public class StrategyHistReq {
@ApiModelProperty("路口编号/干线编号")
private String id;
@ApiModelProperty("当前日期,为空查询时间")
private Date currentDate;
}
......@@ -5,6 +5,7 @@ import net.wanji.opt.synthesis.pojo.StrategyControlDataEntity;
import net.wanji.opt.synthesis.pojo.StrategyControlDetailList;
import net.wanji.opt.synthesis.pojo.StrategyControlVO;
import net.wanji.opt.synthesis.pojo.StrategyFactoryEntity;
import net.wanji.opt.synthesis.pojo.request.StrategyHistReq;
/**
* @author duanruiming
......
......@@ -11,16 +11,17 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.DateStyle;
import net.wanji.common.framework.Constants;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.licenseUtils.DateUtils;
import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.opt.dao.mapper.StrategyControlInfoMapper;
import net.wanji.opt.dao.mapper.StrategyDailyPlanInfoMapper;
import net.wanji.opt.dao.mapper.StrategyFactoryMapper;
import net.wanji.opt.dao.mapper.StrategyPlanInfoMapper;
import net.wanji.opt.cache.GreenWaveInfoCache;
import net.wanji.opt.dao.mapper.*;
import net.wanji.opt.po.StrategyGreenOptHistEntity;
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.StrategyControlService;
import org.apache.commons.lang3.StringUtils;
......@@ -31,6 +32,9 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
......@@ -56,6 +60,8 @@ public class StrategyControlServiceImpl implements StrategyControlService {
private StrategyFactoryMapper strategyFactoryMapper;
@Resource
private GreenwaveInfoMapper greenwaveInfoMapper;
@Resource
private StrategyGreenOptHistMapper strategyGreenOptHistMapper;
@Override
......@@ -159,30 +165,68 @@ public class StrategyControlServiceImpl implements StrategyControlService {
@Override
public JsonViewObject crossStrategyHistList() throws Exception {
List<StrategyControlDataEntity> resulsts = new ArrayList<>();
LambdaQueryWrapper<StrategyControlDataEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.isNotNull(StrategyControlDataEntity::getScheduleStart);
queryWrapper.orderByDesc(StrategyControlDataEntity::getScheduleEnd);
List<StrategyControlDataEntity> entities = strategyControlInfoMapper.selectList(queryWrapper);
List<StrategyControlHistVO> results = new ArrayList<>();
LocalDate currentDate = LocalDate.now();
LocalDateTime midnight = currentDate.atStartOfDay();
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(StrategyGreenOptHistEntity::getControlTime, midnight);
List<StrategyGreenOptHistEntity> entities = strategyGreenOptHistMapper.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);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<Integer, GreenwaveInfoPO> greenWaveMap = GreenWaveInfoCache.greenWaveMap;
for (StrategyGreenOptHistEntity entity : entities) {
StrategyControlHistVO histVO = new StrategyControlHistVO();
histVO.setId(String.valueOf(entity.getGreenId()));
if(greenWaveMap.isEmpty()) {
continue;
}
String controlTime = entity.getControlTime();
Date parse = format.parse(controlTime);
GreenwaveInfoPO greenwaveInfoPO = greenWaveMap.get(entity.getGreenId());
if (Objects.nonNull(greenwaveInfoPO)) {
histVO.setName(greenwaveInfoPO.getName());
histVO.setWkt(greenwaveInfoPO.getWkt());
}
if (type == 1) {
GreenwaveInfoPO greenwaveInfoPO = greenwaveInfoMapper.selectById(Integer.valueOf(entity.getBizId()));
entity.setCrossName(greenwaveInfoPO.getName());
entity.setWkt(greenwaveInfoPO.getWkt());
LambdaQueryWrapper<StrategyControlDataEntity> strategyQuery = new LambdaQueryWrapper<>();
strategyQuery.eq(StrategyControlDataEntity::getBizId, entity.getGreenId());
strategyQuery.eq(StrategyControlDataEntity::getBizType, 1);
strategyQuery.le(StrategyControlDataEntity::getScheduleStart, parse);
strategyQuery.ge(StrategyControlDataEntity::getScheduleEnd, parse);
// 应该是下发时间在调度下发时间内,但是目前神思下发可能没有走策略
List<StrategyControlDataEntity> strategyList = strategyControlInfoMapper.selectList(strategyQuery);
if (!CollectionUtils.isEmpty(strategyList)) {
StrategyControlDataEntity strategyControlDataEntity = strategyList.get(0);
histVO.setStrategy(strategyControlDataEntity.getStrategy());
histVO.setStrategyName("绿波带");
}
resulsts.add(entity);
histVO.setOptTime(entity.getControlTime());
histVO.setResult(Objects.equals(1, entity.getControlMethod()) ? "失败" : "成功");
results.add(histVO);
}
}
return JsonViewObject.newInstance().success(resulsts);
//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
......
......@@ -61,8 +61,7 @@ public class CrossRunSchemeCache implements CommandLineRunner {
Integer schemeId = getCurrentSchemeId(crossSectionPOS, currentTime, currentPlanId);
CrossSchemePO crossSchemePO = crossSchemeMapper.selectSchemePOById(schemeId);
if (Objects.nonNull(crossSchemePO)) {
currentRunSchemeNoCache.put(crossId, crossSchemePO.getSchemeNo());
}
}
}
}
}
......
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