Commit 70c81cea authored by zhoushiguang's avatar zhoushiguang
parents 7b89ffc9 32e29485
......@@ -147,6 +147,19 @@ public class PlanSendController {
return jsonViewObject.success(ringPhasePO);
}
@AspectLog(description = "根据路口号和时间(据当前时间半小时)返回相位列表-方案优化对比", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "根据路口号和时间(据当前时间半小时)返回相位列表-方案优化对比)", notes = "根据路口号和时间(据当前时间半小时)返回相位列表-方案优化对比")
@PostMapping("/phaseListByTimeRingNew")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SaveSchemeConfigDTO.PhaseListElement.class),
})
public JsonViewObject phaseListByTimeRingNew(@RequestBody CrossIdAndTimeDTO crossIdAndTimeDTO) {
RingPhasePO ringPhasePO = planSendService.phaseListByTimeRingNew(crossIdAndTimeDTO);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
return jsonViewObject.success(ringPhasePO);
}
@AspectLog(description = "下发数据到UTC", operationType = BaseEnum.OperationTypeEnum.UPDATE)
@ApiOperation(value = "下发数据到UTC", notes = "下发数据到UTC")
@PostMapping("/saveToUtc")
......
......@@ -33,6 +33,7 @@ public interface PlanSendService {
// RingPhasePO phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO);
RingPhasePO phaseListByTimeSingleRingNew(CrossIdAndTimeDTO crossIdAndTimeDTO);
RingPhasePO phaseListByTimeRingNew(CrossIdAndTimeDTO crossIdAndTimeDTO);
List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO);
/**
......
......@@ -15,10 +15,7 @@ import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.*;
import net.wanji.databus.po.BaseCrossLightsPO;
import net.wanji.databus.po.CrossBaseLaneInfoPO;
import net.wanji.databus.po.CrossLaneLightsPO;
import net.wanji.databus.po.SaveToUtcPO;
import net.wanji.databus.po.*;
import net.wanji.databus.vo.*;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.web.common.enums.CrossDirChangeEnum;
......@@ -41,7 +38,6 @@ import javax.validation.constraints.NotNull;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author Kent HAN
......@@ -728,15 +724,19 @@ public class PlanSendServiceImpl implements PlanSendService {
if (schemeId == 85){
return ringPhasePO;
}
CrossIdBO crossIdBO = new CrossIdBO();
/*CrossIdBO crossIdBO = new CrossIdBO();
crossIdBO.setCrossId(crossIdAndTimeDTO.getCrossId());
SaveSchemeConfigDTO saveSchemeConfigDTO = schemeConfigServiceImpl.listSchemeConfig(crossIdBO);
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = saveSchemeConfigDTO.getPhaseSchemeList();
*/
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = schemeConfigServiceImpl.buildPhaseSchemeListByCrossIdAndSchemeNo(crossIdAndTimeDTO.getCrossId(), String.valueOf(schemeId));
if (ObjectUtil.isEmpty(phaseSchemeList)){
return ringPhasePO;
}
List<SaveSchemeConfigDTO.PhaseScheme> collected = phaseSchemeList.stream().filter(x -> x.getSchemeNo().equals(content.getSchemeNo())).collect(Collectors.toList());
SaveSchemeConfigDTO.PhaseScheme phaseScheme = collected.get(0);
/*List<SaveSchemeConfigDTO.PhaseScheme> collected = phaseSchemeList.stream().filter(x -> x.getSchemeNo().equals(content.getSchemeNo())).collect(Collectors.toList());
SaveSchemeConfigDTO.PhaseScheme phaseScheme = collected.get(0);*/
SaveSchemeConfigDTO.PhaseScheme phaseScheme = phaseSchemeList.get(0);
SaveSchemeConfigDTO.RingListElement ringListElement = phaseScheme.getRingList().get(0);
List<SaveSchemeConfigDTO.GroupListElement> groupList = ringListElement.getGroupList();
SaveSchemeConfigDTO.GroupListElement groupListElement = groupList.get(0);
......@@ -796,6 +796,132 @@ public class PlanSendServiceImpl implements PlanSendService {
return ringPhasePO;
}
@Override
public RingPhasePO phaseListByTimeRingNew(CrossIdAndTimeDTO crossIdAndTimeDTO) {
RingPhasePO ringPhasePO = new RingPhasePO();
List<SaveSchemeConfigDTO.PhaseListElement> oriPhaseList = new ArrayList<>();
List<SaveSchemeConfigDTO.PhaseListElement> optPhaseList = new ArrayList<>();
QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO = new QueryByCrossIdAndTimeDTO();
queryByCrossIdAndTimeDTO.setCrossId(crossIdAndTimeDTO.getCrossId());
queryByCrossIdAndTimeDTO.setDatetime(crossIdAndTimeDTO.getDatetime());
JsonViewObject jsonViewObject = utcFeignClients.selectSchemeByParams(queryByCrossIdAndTimeDTO);
if (jsonViewObject.getCode() != 200){
return ringPhasePO;
}
ObjectMapper objectMapper = JacksonUtils.getInstance();
BaseCrossSchemePO content = objectMapper.convertValue(jsonViewObject.getContent(), BaseCrossSchemePO.class);
if (ObjectUtil.isEmpty(content)){
return ringPhasePO;
}
int schemeId = Integer.valueOf(content.getSchemeNo());
//黃闪
if (schemeId == 85){
return ringPhasePO;
}
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = schemeConfigServiceImpl.buildPhaseSchemeListByCrossIdAndSchemeNo(crossIdAndTimeDTO.getCrossId(), String.valueOf(schemeId));
if (ObjectUtil.isEmpty(phaseSchemeList)){
return ringPhasePO;
}
SaveSchemeConfigDTO.PhaseScheme phaseScheme = phaseSchemeList.get(0);
SaveSchemeConfigDTO.RingListElement ringListElement = phaseScheme.getRingList().get(0);
List<SaveSchemeConfigDTO.GroupListElement> groupList = ringListElement.getGroupList();
SaveSchemeConfigDTO.GroupListElement groupListElement = groupList.get(0);
oriPhaseList = groupListElement.getPhaseList();
if (ObjectUtil.isNotEmpty(oriPhaseList)) {
//修改方向
oriPhaseList.forEach(x -> {
List<SaveSchemeConfigDTO.DirListElement> dirList = x.getDirList();
if (ObjectUtil.isNotNull(dirList)){
dirList.forEach(dir -> {
dir.setDir(CrossDirChangeEnum.getMsgByCode(dir.getDir()).getDir());
});
}
});
//TODO 查询当前时间前后半小时的数据
CrossSchemeQueryDTO crossSchemeQueryDT = new CrossSchemeQueryDTO();
crossSchemeQueryDT.setCrossId(crossIdAndTimeDTO.getCrossId());
crossSchemeQueryDT.setPattern(String.valueOf(schemeId));
crossSchemeQueryDT.setDatetime(crossIdAndTimeDTO.getDatetime());
JsonViewObject viewObject = utcFeignClients.selectCrossSchemeOptLogByParams(crossSchemeQueryDT);
Integer optCode = viewObject.getCode();
if (optCode != 200 ) {
optPhaseList = oriPhaseList;
log.error("远程调用,获取优化后的方案信息 异常,路口id:{},方案号:", crossIdAndTimeDTO.getCrossId(), schemeId);
} else {
ObjectMapper mapper = JacksonUtils.getInstance();
SchemeOptLogPO schemeOptLogPO = mapper.convertValue(viewObject.getContent(), new TypeReference<SchemeOptLogPO>() {
});
List<CrossSchemeStageOptLogPO> beforeTime = schemeOptLogPO.getBeforeTime();
List<CrossSchemeStageOptLogPO> afterTime = schemeOptLogPO.getAfterTime();
//30分钟之前有数据,取就行 ;如果30分钟之前没有数,则取原方案
if (CollectionUtil.isNotEmpty(beforeTime)){
for (int i = 0; i < beforeTime.size(); i++) {
if (i == oriPhaseList.size()){
break;
}
CrossSchemeStageOptLogPO optLogPO = beforeTime.get(i);
SaveSchemeConfigDTO.PhaseListElement phaseListElement = oriPhaseList.get(i);
SaveSchemeConfigDTO.PhaseListElement optPhase = new SaveSchemeConfigDTO.PhaseListElement();
BeanUtils.copyProperties(phaseListElement,optPhase);
Integer yellowTime = phaseListElement.getYellowTime();
Integer redTime = phaseListElement.getRedTime();
//相位时间
Integer phaseTime = optLogPO.getPhaseTime();
//绿灯时间
int greenTime = phaseTime - yellowTime - redTime;
if (greenTime <= 0){
optPhase.setGreenTime(phaseTime);
optPhase.setYellowTime(0);
optPhase.setRedTime(0);
}else {
optPhase.setGreenTime(greenTime);
}
optPhaseList.add(optPhase);
}
oriPhaseList.clear();
oriPhaseList.addAll(optPhaseList);
}
if (CollectionUtil.isNotEmpty(afterTime)){
optPhaseList.clear();
for (int i = 0; i < afterTime.size(); i++) {
if (i == oriPhaseList.size()){
break;
}
CrossSchemeStageOptLogPO optLogPO = beforeTime.get(i);
SaveSchemeConfigDTO.PhaseListElement phaseListElement = oriPhaseList.get(i);
SaveSchemeConfigDTO.PhaseListElement optPhase = new SaveSchemeConfigDTO.PhaseListElement();
BeanUtils.copyProperties(phaseListElement,optPhase);
Integer yellowTime = phaseListElement.getYellowTime();
Integer redTime = phaseListElement.getRedTime();
//相位时间
Integer phaseTime = optLogPO.getPhaseTime();
//绿灯时间
int greenTime = phaseTime - yellowTime - redTime;
if (greenTime <= 0){
optPhase.setGreenTime(phaseTime);
optPhase.setYellowTime(0);
optPhase.setRedTime(0);
}else {
optPhase.setGreenTime(greenTime);
}
optPhaseList.add(optPhase);
}
}else {
optPhaseList = oriPhaseList;
}
}
}
ringPhasePO.setOriPhaseList(oriPhaseList);
ringPhasePO.setOptPhaseList(optPhaseList);
return ringPhasePO;
}
@Override
public List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTimeSingleRing(CrossIdAndTimeDTO crossIdAndTimeDTO) {
List<SaveSchemeConfigDTO.PhaseListElement> phaseListByTime = new ArrayList<>();
......
......@@ -236,6 +236,45 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
}
return phaseSchemeList;
}
/**
* 通过方案号和路口号构造方案列表
*
* @param crossId
* @return java.util.List<net.wanji.web.dto.SaveSchemeConfigDTO.PhaseScheme>
* @author Kent HAN
* @date 2023/1/12 9:23
*/
public List<SaveSchemeConfigDTO.PhaseScheme> buildPhaseSchemeListByCrossIdAndSchemeNo(String crossId,String schemeNo) {
List<SaveSchemeConfigDTO.PhaseScheme> phaseSchemeList = new ArrayList<>();
List<BaseCrossSchemePO> baseCrossSchemePOList = baseCrossSchemeMapper.listCrossSchemeInfo(crossId,schemeNo,null);
for (BaseCrossSchemePO baseCrossSchemePO : baseCrossSchemePOList) {
SaveSchemeConfigDTO.PhaseScheme phaseScheme = new SaveSchemeConfigDTO.PhaseScheme();
phaseScheme.setSchemeNo(baseCrossSchemePO.getSchemeNo());
phaseScheme.setName(baseCrossSchemePO.getName());
phaseScheme.setSchemeId(baseCrossSchemePO.getId());
// 获取协调相位号
Integer coordPhaseId = baseCrossSchemePO.getCoordPhase();
if (coordPhaseId != null) {
CrossPhasePO crossPhasePO = crossPhaseMapper.selectById(coordPhaseId);
if (crossPhasePO != null) {
phaseScheme.setCoordPhaseNo(crossPhasePO.getPhaseNo());
}
}
phaseScheme.setCycle(baseCrossSchemePO.getCycle());
phaseScheme.setOffset(baseCrossSchemePO.getOffset());
phaseScheme.setStatus(baseCrossSchemePO.getStatus());
// 构造环列表
Integer schemeId = baseCrossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, schemeNo);
List<SaveSchemeConfigDTO.RingListElement> ringList = buildRingList(crossId, schemeId);
phaseScheme.setRingList(ringList);
// 构造特殊控制列表
List<SaveSchemeConfigDTO.PhaseListElement> specialControlList = buildSpecialControlList(crossId, schemeId);
phaseScheme.setSpecialControlModeList(specialControlList);
phaseSchemeList.add(phaseScheme);
}
return phaseSchemeList;
}
/**
* 构造特殊控制列表
......
......@@ -150,4 +150,8 @@ public interface FeignCommon {
@PostMapping("/staticInfo/selectSchemeByParams")
JsonViewObject selectSchemeByParams(@RequestBody QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO);
// 根据条件查询临时方案下发日志
@PostMapping("/staticInfo/selectCrossSchemeOptLogByParams")
JsonViewObject selectCrossSchemeOptLogByParams(@RequestBody CrossSchemeQueryDTO crossSchemeQueryDT);
}
package net.wanji.opt.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import net.wanji.common.utils.tool.StringUtils;
/**
* @author duanruiming
* @date 2025/01/07 20:24
*/
@Getter
@AllArgsConstructor
public enum EventInfoTypeEnum {
// 事件类型转化
PHASE_EMPTY(5, "701","相位空放"),
CROSS_UNBALANCE(1, "702","路口失衡"),
CROSS_OVERFLOW(3, "703","路口溢出"),
CROSS_DEADLOCK(4, "704","路口死锁"),
GREEN_SLOW(6, "705","干线-缓行"),
GREEN_CONGEST(7, "706","干线-拥堵"),
CROSS_CONGEST(2, "707","路口拥堵");
private Integer optType;
private String eventType;
private String desc;
/**
* 通过事件类型获取优化类型
* @param eventType
* @return
*/
public static Integer getOptType(String eventType) {
for (EventInfoTypeEnum value : EventInfoTypeEnum.values()) {
if (StringUtils.equalsIgnoreCase(eventType, value.getEventType())) {
return value.getOptType();
}
}
return null;
}
}
......@@ -2,18 +2,17 @@ package net.wanji.opt.controller.induce;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.Constants;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.DateUtil;
import net.wanji.opt.dto.induce.MessageParam;
import net.wanji.opt.entity.GreenwaveInduces;
import net.wanji.opt.entity.GreenwaveInducesHist;
import net.wanji.opt.entity.InduceHist;
import net.wanji.opt.entity.InduceTemplate;
import net.wanji.opt.dto.induce.MessageParam;
import net.wanji.opt.service.induce.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
......@@ -24,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Objects;
......@@ -158,12 +157,15 @@ public class InduceSendController {
@ApiOperation(value = "根据设备编号和发布时间获取诱导发布图片", notes = "根据设备编号和发布时间获取诱导发布图片")
@GetMapping(value = "/fileCodeHist")
public ResponseEntity<byte[]> ftpFileByCodeAndTime(@RequestParam("equipCode") String equipCode, @RequestParam("date") Date date) {
public ResponseEntity<byte[]> ftpFileByCodeAndTime(@RequestParam("equipCode") String equipCode, @RequestParam("date") String date) {
LambdaQueryWrapper<InduceHist> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(InduceHist::getEquipCode, equipCode);
queryWrapper.le(InduceHist::getCreateTime, date);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date curDate = new Date();
String curDateStr = format.format(curDate);
String dateTime = curDateStr.concat(" ").concat(date);
queryWrapper.eq(InduceHist::getCreateTime, dateTime);
queryWrapper.orderByDesc(InduceHist::getCreateTime);
queryWrapper.last("limit 1");
InduceHist pictureFile = this.induceHistService.getOne(queryWrapper,false);
if (Objects.isNull(pictureFile) || pictureFile.getFilePath() == null) {
return ResponseEntity.status(HttpStatus.OK)
......
......@@ -11,14 +11,16 @@ import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.CrossDirStatusDataPO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.po.trend.HoloEventInfoPO;
import net.wanji.opt.service.CrossIndexService;
import net.wanji.opt.vo.AIOptResultVO;
import net.wanji.opt.vo.CrossOptResult;
import net.wanji.opt.vo.crossStatusCountVO;
import net.wanji.opt.vo.CrossStatusCountVO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -103,16 +105,32 @@ public class CrossIndexController {
return JsonViewObject.newInstance().success(results);
}
@ApiOperation(value = "问题诊断", notes = "优化监测-问题诊断", response = JsonViewObject.class,
@ApiOperation(value = "优化监测-问题诊断", notes = "优化监测-问题诊断", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/crossStatusCount")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AddOrUpdateSceneDTO.class),
})
public JsonViewObject crossStatusCount(String crossId) {
crossStatusCountVO result = new crossStatusCountVO();
List<CrossStatusCountVO> results = new ArrayList<>();
try {
result = crossIndexService.crossStatusCount(crossId);
results = crossIndexService.crossStatusCount(crossId);
} catch (Exception e) {
JsonViewObject.newInstance().fail("优化监测-问题诊断");
}
return JsonViewObject.newInstance().success(results);
}
@ApiOperation(value = "交通体检-路口监测-事件方向转向", notes = "交通体检-路口监测-事件方向转向", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/crossEventDirTurn")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = HoloEventInfoPO.class),
})
public JsonViewObject crossEventDirTurn(String crossId) {
HoloEventInfoPO result = new HoloEventInfoPO();
try {
result = crossIndexService.crossEventDirTurn(crossId);
} catch (Exception e) {
JsonViewObject.newInstance().fail("优化监测-问题诊断");
}
......
package net.wanji.opt.po.trend;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
......@@ -108,6 +109,22 @@ public class HoloEventInfoPO implements Serializable {
private Integer alarmStatus;
@ApiModelProperty(value = "时间轴", notes = "")
@TableField(exist = false)
private String timeAxis;
/**
* 事件方向转向
*/
@ApiModelProperty(name = "事件方向,溢出方向", notes = "")
private String dir;
@ApiModelProperty(name = "事件方向,溢出方向", notes = "")
private String turn;
@ApiModelProperty(name = "失衡指数1-10", notes = "")
private Double unbalanceIndex;
/**
* 溢出程度的刻画(没溢出:1,即将溢出:3,溢出:5,溢停:7)
*/
@ApiModelProperty(name = "溢出指数1-10", notes = "")
private Double spilloverIndex;
}
\ No newline at end of file
......@@ -5,9 +5,10 @@ import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.CrossDirStatusDataPO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.opt.po.trend.HoloEventInfoPO;
import net.wanji.opt.vo.AIOptResultVO;
import net.wanji.opt.vo.CrossOptResult;
import net.wanji.opt.vo.crossStatusCountVO;
import net.wanji.opt.vo.CrossStatusCountVO;
import java.util.List;
import java.util.Map;
......@@ -27,7 +28,8 @@ public interface CrossIndexService {
List<AIOptResultVO> crossAIList() throws Exception;
crossStatusCountVO crossStatusCount(String crossId);
List<CrossStatusCountVO> crossStatusCount(String crossId) throws Exception;
HoloEventInfoPO crossEventDirTurn(String crossId) throws Exception;
/**
* @Description 查询据当前时间某小时的数据
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.LocalDateTimeUtil;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
......@@ -11,15 +12,18 @@ import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.po.*;
import net.wanji.opt.common.enums.CrossOptResultStrategyEnum;
import net.wanji.opt.common.enums.EventInfoTypeEnum;
import net.wanji.opt.common.enums.OptStatusEnum;
import net.wanji.opt.common.enums.StrategyControlEnum;
import net.wanji.opt.dao.mapper.HoloEventMapper;
import net.wanji.opt.dao.mapper.StrategyCrossResultMapper;
import net.wanji.opt.po.trend.HoloEventInfoPO;
import net.wanji.opt.service.CrossIndexService;
import net.wanji.opt.synthesis.pojo.StrategyCrossResultEntity;
import net.wanji.opt.vo.AIOptResultVO;
import net.wanji.opt.vo.CrossOptResult;
import net.wanji.opt.vo.crossStatusCountVO;
import net.wanji.opt.vo.CrossStatusCountVO;
import org.apache.curator.drivers.EventTrace;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -157,32 +161,49 @@ public class CrossIndexServiceImpl implements CrossIndexService {
}
@Override
public crossStatusCountVO crossStatusCount(String crossId) {
LocalDate currentDate = LocalDate.now();
LocalTime startTime = LocalTime.MIDNIGHT;
LocalDateTime startOfDay = LocalDateTime.of(currentDate, startTime);
LambdaQueryWrapper<StrategyCrossResultEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StrategyCrossResultEntity::getCrossId, crossId);
queryWrapper.ge(StrategyCrossResultEntity::getIssueTime, startOfDay);
List<StrategyCrossResultEntity> list = strategyCrossResultMapper.selectList(queryWrapper);
crossStatusCountVO crossStatusCountVO = new crossStatusCountVO();
if (!CollectionUtils.isEmpty(list)) {
Map<Integer, List<StrategyCrossResultEntity>> listMap = list.stream().collect(Collectors.groupingBy(StrategyCrossResultEntity::getCurrentAlgo));
for (Map.Entry<Integer, List<StrategyCrossResultEntity>> entry : listMap.entrySet()) {
Integer currentAlgo = entry.getKey();
List<StrategyCrossResultEntity> value = entry.getValue();
if (Objects.equals(currentAlgo, CrossOptResultStrategyEnum.ONE.getCode())) {
crossStatusCountVO.setPhaseEmptyCount(value.size());
}
if (Objects.equals(currentAlgo, CrossOptResultStrategyEnum.TWO.getCode())) {
crossStatusCountVO.setUnbalanceCount(value.size());
}
if (Objects.equals(currentAlgo, CrossOptResultStrategyEnum.THREE.getCode())) {
crossStatusCountVO.setOverFlowCount(value.size());
public List<CrossStatusCountVO> crossStatusCount(String crossId) throws Exception {
List<CrossStatusCountVO> results = new ArrayList<>();
try {
LocalDate currentDate = LocalDate.now();
LocalTime startTime = LocalTime.MIDNIGHT;
LocalDateTime startOfDay = LocalDateTime.of(currentDate, startTime);
LambdaQueryWrapper<HoloEventInfoPO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HoloEventInfoPO::getCrossId, crossId);
queryWrapper.ge(HoloEventInfoPO::getStartTime, startOfDay);
List<HoloEventInfoPO> holoEventInfoPOS = holoEventMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(holoEventInfoPOS)) {
Map<String, List<HoloEventInfoPO>> eventTypeMap = holoEventInfoPOS.stream().collect(Collectors.groupingBy(HoloEventInfoPO::getType));
for (Map.Entry<String, List<HoloEventInfoPO>> entry : eventTypeMap.entrySet()) {
String eventType = entry.getKey();
List<HoloEventInfoPO> value = entry.getValue();
// 过滤干线
if (StringUtils.equalsIgnoreCase(eventType, EventInfoTypeEnum.GREEN_SLOW.getEventType())
|| StringUtils.equalsIgnoreCase(eventType, EventInfoTypeEnum.GREEN_CONGEST.getEventType())) {
continue;
}
// 当前事件返回实体
CrossStatusCountVO crossStatusCountVO = new CrossStatusCountVO();
crossStatusCountVO.setType(EventInfoTypeEnum.getOptType(eventType));
crossStatusCountVO.setCount(value.size());
List<CrossStatusCountVO.DirTurn> dirTurns = new ArrayList<>();
if (!CollectionUtils.isEmpty(value)) {
for (HoloEventInfoPO holoEventInfoPO : value) {
CrossStatusCountVO.DirTurn dirTurn = new CrossStatusCountVO.DirTurn();
dirTurn.setDir(holoEventInfoPO.getDir());
dirTurn.setTurn(holoEventInfoPO.getTurn());
dirTurns.add(dirTurn);
}
}
crossStatusCountVO.setList(dirTurns);
results.add(crossStatusCountVO);
}
}
} catch (Exception e) {
log.error("优化监测-问题诊断查询异常:", e);
throw new RuntimeException(e);
}
return crossStatusCountVO;
return results;
}
@Override
......@@ -209,4 +230,22 @@ public class CrossIndexServiceImpl implements CrossIndexService {
return crossDirStatusDataPO;
}
@Override
public HoloEventInfoPO crossEventDirTurn(String crossId) throws Exception {
try {
LambdaQueryWrapper<HoloEventInfoPO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HoloEventInfoPO::getCrossId, crossId);
queryWrapper.orderByDesc(HoloEventInfoPO::getStartTime);
queryWrapper.last("limit 1");
HoloEventInfoPO holoEventInfoPO = holoEventMapper.selectOne(queryWrapper);
if (Objects.nonNull(holoEventInfoPO)) {
return holoEventInfoPO;
}
return null;
} catch (Exception e) {
log.error("交通体检-路口监测-事件方向转向 查询失败:", e);
throw new Exception(e);
}
}
}
......@@ -43,6 +43,18 @@ public class StrategyGreenBeltController {
return JsonViewObject.newInstance().success(greenBeltChartVO);
}
@ApiOperation(value = "绿波时序图历史查询", notes = "绿波时序图历史查询", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/greenBeltChartHist")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenBeltInfoVO.class),
})
public JsonViewObject greenBeltChartHist(Integer greenId, String dateStr) throws Exception {
GreenBeltChartVO greenBeltChartVO = strategyGreenBeltService.selectChartHist(greenId, dateStr);
return JsonViewObject.newInstance().success(greenBeltChartVO);
}
@ApiOperation(value = "绿波时序图当天下发时间", notes = "绿波时序图当天下发时间", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/greenBeltChartControlTime")
......
......@@ -13,6 +13,7 @@ import java.util.List;
public interface StrategyGreenBeltService {
GreenBeltChartVO selectChart(Integer greenId, String dateStr);
GreenBeltChartVO selectChartHist(Integer greenId, String dateStr);
List<GreenBeltStopTimesQueueLengthVO> greenBeltStopTimeQueueLength(Integer greenId);
GreenBeltAreaIndexVO greenBeltAreaIndex(Integer greenId);
List<String> greenBeltChartControlTime(Integer greenId);
......
......@@ -26,6 +26,7 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
......@@ -180,6 +181,53 @@ public class StrategyGreenBeltServiceImpl implements StrategyGreenBeltService {
return null;
}
@Override
public GreenBeltChartVO selectChartHist(Integer greenId, String dateStr) {
try {
ObjectMapper mapper = JacksonUtils.getInstance();
LambdaQueryWrapper<StrategyGreenOptHistEntity> queryWrapper = new LambdaQueryWrapper<>();
// 查询历史时序图
if (StringUtils.isNotBlank(dateStr)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date curDate = new Date();
String curDateStr = format.format(curDate);
String dateTime = curDateStr.concat(" ").concat(dateStr);
queryWrapper.eq(StrategyGreenOptHistEntity::getGreenId, greenId);
queryWrapper.eq(StrategyGreenOptHistEntity::getControlMethod, 1);
queryWrapper.eq(StrategyGreenOptHistEntity::getControlTime, dateTime);
} else {
queryWrapper.eq(StrategyGreenOptHistEntity::getGreenId, greenId);
queryWrapper.eq(StrategyGreenOptHistEntity::getControlMethod, 1);
queryWrapper.orderByDesc(StrategyGreenOptHistEntity::getControlTime);
//queryWrapper.last("LIMIT 2");
queryWrapper.last("limit 2");
}
List<StrategyGreenOptHistEntity> entities = strategyGreenOptHistMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(entities)) {
Map<String, List<StrategyGreenOptHistEntity>> controlTimeMap = entities.stream().collect(Collectors.groupingBy(StrategyGreenOptHistEntity::getControlTime));
// 判断下发是否是正向还是反向 相同时间两条,双向绿波
GreenBeltInfoVO greenBeltInfoVO = new GreenBeltInfoVO();
List<GreenBeltInfoVO.DirGreenDetail> dirGreenDetails = new ArrayList<>();
// 相同时间,双向绿波
if (controlTimeMap.size() == 1) {
setBeltInfo(mapper, entities, greenBeltInfoVO, dirGreenDetails);
} else {
entities.remove(entities.size() - 1);
setBeltInfo(mapper, entities, greenBeltInfoVO, dirGreenDetails);
}
greenBeltInfoVO.setDirGreenDetails(dirGreenDetails);
GreenBeltChartVO greenBeltChartVO = calGreenChart(greenBeltInfoVO);
return greenBeltChartVO;
}
} catch (Exception e) {
log.error("数据转化异常", e);
throw new RuntimeException(e);
}
return null;
}
private static void setBeltInfo(ObjectMapper mapper, List<StrategyGreenOptHistEntity> entities, GreenBeltInfoVO greenBeltInfoVO, List<GreenBeltInfoVO.DirGreenDetail> dirGreenDetails) throws JsonProcessingException {
for (StrategyGreenOptHistEntity entity : entities) {
greenBeltInfoVO.setGreenId(entity.getGreenId());
......
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author duanruiming
* @date 2024/12/11 22:50
* 优化监测问题诊断实体
*/
@Data
@ApiModel(description = "优化监测问题诊断实体")
public class CrossStatusCountVO {
@ApiModelProperty("事件类型 1失衡;2拥堵;3溢出;5相位空放")
private Integer type;
@ApiModelProperty("发生次数")
private Integer count;
@ApiModelProperty("事件方向转向列表")
private List<DirTurn> list;
@Data
public static class DirTurn {
@ApiModelProperty("方向1北.... 7西北")
private String dir;
@ApiModelProperty("转向 1左 2直 3右")
private String turn;
}
}
package net.wanji.opt.vo;
import lombok.Data;
/**
* @author duanruiming
* @date 2024/12/11 22:50
*/
@Data
public class crossStatusCountVO {
private int overFlowCount;
private int unbalanceCount;
private int phaseEmptyCount;
private int congestionCount;
}
package net.wanji.utc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* @ClassName ScheduledConfig
* @Description 定时任务线程池配置
* @Author zhouleilei
* @Date 2025/1/5 17:01
*/
@Configuration
public class ScheduledConfig implements SchedulingConfigurer {
@Bean
public Executor taskExecutor() {
//指定定时任务线程数量,可根据需求自行调节
return Executors.newScheduledThreadPool(10);
}
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.setScheduler(taskExecutor());
}
}
......@@ -186,6 +186,15 @@ public class StaticInfoController {
public JsonViewObject selectSchemeByParams(@Validated @RequestBody QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception {
return staticInfoService.selectSchemeByParams(queryByCrossIdAndTimeDTO);
}
@AspectLog(description = "根据条件查询临时方案下发日志", operationType = BaseEnum.OperationTypeEnum.QUERY)
@PostMapping(value = "/selectCrossSchemeOptLogByParams", produces = MediaType.APPLICATION_JSON)
@ApiOperation(value = "根据条件查询临时方案下发日志", notes = "根据条件查询临时方案下发日志")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = CrossSchedulesPO.class)
})
public JsonViewObject selectSchemeOptLogByParams(@Validated @RequestBody CrossSchemeQueryDTO crossSchemeQueryDTO) throws Exception {
return staticInfoService.selectSchemeOptLogByParams(crossSchemeQueryDTO);
}
}
......@@ -33,5 +33,6 @@ public interface StaticInfoService {
JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject selectSchemeByParams(QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception;
JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception;
}
......@@ -2,6 +2,7 @@ package net.wanji.utc.service.staticinfo;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.dao.entity.CrossSchedulesPO;
import net.wanji.databus.dto.CrossSchemeQueryDTO;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.dto.QueryByCrossIdAndTimeDTO;
import net.wanji.utc.common.Result;
......@@ -56,4 +57,6 @@ public interface WanJiCommonStaticInfoService {
JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject selectSchemeByParams(QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO) throws Exception;
JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception;
}
......@@ -244,4 +244,11 @@ public class StaticInfoServiceImpl implements StaticInfoService {
jsonViewObject = wanjiCommonStaticInfoService.selectSchemeByParams(queryByCrossIdAndTimeDTO);
return jsonViewObject;
}
@Override
public JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
jsonViewObject = wanjiCommonStaticInfoService.selectSchemeOptLogByParams(crossSchemeQueryDT);
return jsonViewObject;
}
}
......@@ -14,11 +14,9 @@ import net.wanji.common.utils.tool.LocalDateTimeUtil;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.CrossSchedulesDTO;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.dto.PlanSectionDTO;
import net.wanji.databus.dto.QueryByCrossIdAndTimeDTO;
import net.wanji.databus.dto.*;
import net.wanji.databus.po.CrossSchemeRings;
import net.wanji.databus.po.SchemeOptLogPO;
import net.wanji.databus.vo.CrossIdVO;
import net.wanji.databus.vo.PlanSectionVO;
import net.wanji.databus.vo.SchemePhaseLightsVO;
......@@ -378,6 +376,20 @@ public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoSe
return jsonViewObject;
}
@Override
public JsonViewObject selectSchemeOptLogByParams(CrossSchemeQueryDTO crossSchemeQueryDT) throws Exception {
String crossId = crossSchemeQueryDT.getCrossId();
String pattern = crossSchemeQueryDT.getPattern();
Date datetime = crossSchemeQueryDT.getDatetime();
long time = datetime.getTime();
SchemeOptLogPO schemeOptLogPO = new SchemeOptLogPO();
List<CrossSchemeStageOptLogPO> beforeTimeList = crossSchemeStageOptLogMapper.getBeforeTimeList(crossId, pattern, time);
List<CrossSchemeStageOptLogPO> afterTimeList = crossSchemeStageOptLogMapper.getAfterTimeList(crossId, pattern, time);
schemeOptLogPO.setBeforeTime(beforeTimeList);
schemeOptLogPO.setAfterTime(afterTimeList);
return JsonViewObject.newInstance().success(schemeOptLogPO);
}
/**
* @return net.wanji.databus.dao.entity.BaseCrossSchemePO
* @Description 获取方案号
......
package net.wanji.utc.task;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dto.CrossSchedulesDTO;
import net.wanji.databus.dto.PlanSectionDTO;
import net.wanji.databus.dto.SchemePhaseLightsDTO;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.utc.cache.CrossInfoCache;
import net.wanji.utc.service.staticinfo.StaticInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.ArrayList;
import java.util.List;
/**
* 定时同步方案等静态信息
*
* @author zhouleilei
* @date 2024/12/25 13:01
*/
//@Component
@Slf4j
@SuppressWarnings("all")
public class SchemeUpdateTask {
@Autowired
StaticInfoService staticInfoService;
@Scheduled(cron = "0 30 0 * * ?")
public void runningStatusAlarm() throws Exception {
for (CrossInfoPO crossInfoPO : CrossInfoCache.crossInfoList) {
if (ObjectUtil.isEmpty(crossInfoPO.getCode())) {
continue;
}
Integer manufacturerId = crossInfoPO.getManufacturerId();
String id = crossInfoPO.getId();
//同步 方案数据-方案信息、相位信息、灯组信息
SchemePhaseLightsDTO schemePhaseLightsDTO = new SchemePhaseLightsDTO();
schemePhaseLightsDTO.setCrossId(id);
staticInfoService.schemePhaseLights(schemePhaseLightsDTO);
//同步 计划数据-计划信息、时段信息
PlanSectionDTO planSectionDTO = new PlanSectionDTO();
planSectionDTO.setCrossId(id);
planSectionDTO.setPlanNo(-1);
staticInfoService.planSection(planSectionDTO);
//同步 时间表数据
CrossSchedulesDTO crossSchedulesDTO = new CrossSchedulesDTO();
if (manufacturerId == 22) {
//海信
crossSchedulesDTO.setManufacturerCode("HISENSE");
} else if (manufacturerId == 23) {
crossSchedulesDTO.setManufacturerCode("EHUALU");
}
List<String> list = new ArrayList<>();
list.add(id);
crossSchedulesDTO.setCrossIdList(list);
staticInfoService.crossSchedules(crossSchedulesDTO);
log.info("路口 {} 定时同步完成", id);
}
}
}
......@@ -2,6 +2,9 @@ package net.wanji.databus.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @ClassName CrossSchemeOptLogMapper
......@@ -10,4 +13,21 @@ import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
* @Date 2024/11/23 14:34
*/
public interface CrossSchemeStageOptLogMapper extends BaseMapper<CrossSchemeStageOptLogPO> {
/**
* @Description 根据路口号,方案号查询时间戳30分钟前的数据
* @Param [crossId, pattern, timeStamp]
* @return java.util.List<net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO>
**/
List<CrossSchemeStageOptLogPO> getBeforeTimeList(@Param("crossId") String crossId, @Param("pattern") String pattern, @Param("timeStamp") long timeStamp);
/**
* @Description 根据路口号,方案号查询时间戳30分钟后的数据
* @Param [crossId, pattern, timeStamp]
* @return java.util.List<net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO>
**/
List<CrossSchemeStageOptLogPO> getAfterTimeList(@Param("crossId") String crossId, @Param("pattern") String pattern, @Param("timeStamp") long timeStamp);
}
package net.wanji.databus.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.Date;
/**
* @ClassName CrossSchemeRings
* @Description 5.15. 方案环图请求
* @Author zhouleilei
* @Date 2024/11/5 10:37
*/
@Data
@Valid
@ApiModel(value="查询临时方案参数", description="")
public class CrossSchemeQueryDTO {
@ApiModelProperty(value = "路口ID")
@Pattern(regexp = "^[A-Za-z0-9]{11}$", message = "路口编号只能包含英文、数字,必须11个字符")
@NotNull(message = "crossId不能为空")
private String crossId;
@ApiModelProperty(value = "方案号")
@NotNull(message = "pattern 不能为空")
private String pattern;
@ApiModelProperty(value = "查询时间 yyyy-MM-dd HH:mm:ss", required = true)
@NotNull(message = "datetime不可为空")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date datetime;
}
......@@ -234,4 +234,11 @@ public class CrossDataRealtimePO {
private Integer emptyPass;
@TableField("service_level")
private String serviceLevel;
/**
* add 20250107 事件
*/
@ApiModelProperty(value = "事件方向", notes = "")
private Integer direction;
@ApiModelProperty(value = "事件转向", notes = "")
private Integer turn;
}
package net.wanji.databus.po;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
import java.util.List;
/**
* @ClassName SchemeOptLogPO
* @Description TODO
* @Author zhouleilei
* @Date 2025/1/7 18:56
*/
@Data
@ApiModel(value="查询方案对比参数", description="")
public class SchemeOptLogPO {
@ApiModelProperty(value = "指定时间之前的数据")
private List<CrossSchemeStageOptLogPO> beforeTime;
@ApiModelProperty(value = "指定时间之后的数据")
private List<CrossSchemeStageOptLogPO> afterTime;
}
......@@ -52,6 +52,9 @@
<result column="optimize_seconds" property="optimizeSeconds"></result>
<result column="empty_pass" property="emptyPass"></result>
<result column="service_level" property="serviceLevel"></result>
<!-- add 20250107 事件方向转向 -->
<result column="direction" property="direction"></result>
<result column="turn" property="turn"></result>
</resultMap>
<sql id="Base_Column_List">
......@@ -61,7 +64,8 @@
clear_rate,load_balance,not_clear_car_nums,green_light_efficiency,effusion_rate,
no_stop_rate,one_stop_rate,two_stop_rate,three_stop_rate,non_motor_flow,v_85,
traffic_flow_A,traffic_flow_B,traffic_flow_C,vehicle_length_ratio_mean,time_occupancy,
strategy, strategy_duration, optimize_count, optimize_seconds, empty_pass, service_level
strategy, strategy_duration, optimize_count, optimize_seconds, empty_pass, service_level,
direction, turn
</sql>
<insert id="insertBatch" parameterType="net.wanji.databus.po.CrossDataHistPO">
......@@ -77,7 +81,7 @@
#{entity.nonMotorFlow},#{entity.v85},#{entity.trafficFlowA},#{entity.trafficFlowB},
#{entity.trafficFlowC},#{entity.vehicleLengthRatioMean},#{entity.timeOccupancy},
#{entity.strategy}, #{entity.strategyDuration}, #{entity.optimizeCount}, #{entity.optimizeSeconds},
#{entity.emptyPass}, #{entity.serviceLevel}
#{entity.emptyPass}, #{entity.serviceLevel}, #{entity.direction}, #{entity.turn}
)
</foreach>
</insert>
......
......@@ -52,6 +52,9 @@
<result column="empty_pass" property="emptyPass"></result>
<result column="strategy" property="strategy"></result>
<result column="service_level" property="serviceLevel"></result>
<!-- add 20250107 事件方向转向 -->
<result column="direction" property="direction"></result>
<result column="turn" property="turn"></result>
</resultMap>
<sql id="Base_Column_List">
......@@ -61,7 +64,8 @@
load_balance,not_clear_car_nums,green_light_efficiency,effusion_rate,
no_stop_rate,one_stop_rate,two_stop_rate,three_stop_rate,non_motor_flow,v_85,
traffic_flow_A,traffic_flow_B,traffic_flow_C,vehicle_length_ratio_mean,time_occupancy,
strategy, strategy_duration, optimize_count, optimize_seconds, empty_pass, service_level
strategy, strategy_duration, optimize_count, optimize_seconds, empty_pass, service_level,
direction, turn
</sql>
<insert id="insertBatch" parameterType="net.wanji.databus.po.CrossDataRealtimePO">
......@@ -77,7 +81,7 @@
#{entity.nonMotorFlow},#{entity.v85},#{entity.trafficFlowA},#{entity.trafficFlowB},#{entity.trafficFlowC},
#{entity.vehicleLengthRatioMean},#{entity.timeOccupancy},
#{entity.strategy}, #{entity.strategyDuration}, #{entity.optimizeCount}, #{entity.optimizeSeconds}, #{entity.emptyPass},
#{entity.serviceLevel}
#{entity.serviceLevel}, #{entity.direction}, #{entity.turn}
)
</foreach>
</insert>
......
<?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.databus.dao.mapper.CrossSchemeStageOptLogMapper">
<select id="getBeforeTimeList" resultType="net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO">
SELECT *
FROM t_cross_scheme_opt_log
WHERE
batch_time = (
SELECT MAX(batch_time) FROM t_cross_scheme_opt_log
WHERE cross_id = #{crossId} AND scheme_id = #{pattern}
AND batch_time >= (#{timeStamp}-30*60*1000) AND batch_time &lt; #{timeStamp})
</select>
<select id="getAfterTimeList" resultType="net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO">
SELECT *
FROM t_cross_scheme_opt_log
WHERE
batch_time = (
SELECT MIN(batch_time) FROM t_cross_scheme_opt_log
WHERE cross_id = #{crossId} AND scheme_id = #{pattern}
AND batch_time >= (#{timeStamp}) AND batch_time &lt; (#{timeStamp}+30*60*1000))
</select>
</mapper>
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