Commit 425c88b0 authored by duanruiming's avatar duanruiming

[add] 优化停车次数小数点

parent 4782ba5b
package net.wanji.opt.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/12/11 20:33
*/
@Getter
@AllArgsConstructor
public enum OptStatusEnum {
ONE(1, "优化中"),
TWO(2, "优化完");
private Integer code;
private String desc;
public static String getDesc(Integer code) {
for (OptStatusEnum value : OptStatusEnum.values()) {
if (Objects.equals(code, value.getCode())) {
return value.getDesc();
}
}
return OptStatusEnum.ONE.getDesc();
}
}
...@@ -11,6 +11,7 @@ import net.wanji.databus.po.CrossDirDataRealtimePO; ...@@ -11,6 +11,7 @@ import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.TBaseCrossInfo; import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.service.CrossIndexService; import net.wanji.opt.service.CrossIndexService;
import net.wanji.opt.vo.AIOptResultVO;
import net.wanji.opt.vo.CrossOptResult; import net.wanji.opt.vo.CrossOptResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -83,4 +84,21 @@ public class CrossIndexController { ...@@ -83,4 +84,21 @@ public class CrossIndexController {
return JsonViewObject.newInstance().success(results); return JsonViewObject.newInstance().success(results);
} }
@ApiOperation(value = "AI路口", notes = "优化监测-AI路口", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/crossAIList")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AddOrUpdateSceneDTO.class),
})
public JsonViewObject crossAIList() {
List<AIOptResultVO> results = null;
try {
results = crossIndexService.crossAIList();
} catch (Exception e) {
JsonViewObject.newInstance().fail("优化监测-AI路口");
}
return JsonViewObject.newInstance().success(results);
}
} }
...@@ -4,6 +4,7 @@ import net.wanji.databus.bo.CrossIdBO; ...@@ -4,6 +4,7 @@ import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.po.CrossDataRealtimePO; import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO; import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.TBaseCrossInfo; import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.opt.vo.AIOptResultVO;
import net.wanji.opt.vo.CrossOptResult; import net.wanji.opt.vo.CrossOptResult;
import java.util.List; import java.util.List;
...@@ -21,4 +22,6 @@ public interface CrossIndexService { ...@@ -21,4 +22,6 @@ public interface CrossIndexService {
List<TBaseCrossInfo> crossInfoList(); List<TBaseCrossInfo> crossInfoList();
List<CrossOptResult> crossOptResultList(CrossIdBO crossIdBO) throws Exception; List<CrossOptResult> crossOptResultList(CrossIdBO crossIdBO) throws Exception;
List<AIOptResultVO> crossAIList();
} }
...@@ -11,11 +11,13 @@ import net.wanji.databus.po.CrossDataRealtimePO; ...@@ -11,11 +11,13 @@ import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO; import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.TBaseCrossInfo; import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.opt.common.enums.CrossOptStrategyEnum; import net.wanji.opt.common.enums.CrossOptStrategyEnum;
import net.wanji.opt.common.enums.OptStatusEnum;
import net.wanji.opt.common.enums.StrategyControlEnum;
import net.wanji.opt.dao.mapper.StrategyCrossResultMapper; import net.wanji.opt.dao.mapper.StrategyCrossResultMapper;
import net.wanji.opt.service.CrossIndexService; import net.wanji.opt.service.CrossIndexService;
import net.wanji.opt.synthesis.pojo.StrategyCrossResultEntity; import net.wanji.opt.synthesis.pojo.StrategyCrossResultEntity;
import net.wanji.opt.vo.AIOptResultVO;
import net.wanji.opt.vo.CrossOptResult; import net.wanji.opt.vo.CrossOptResult;
import org.drools.core.util.DateUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -101,4 +103,39 @@ public class CrossIndexServiceImpl implements CrossIndexService { ...@@ -101,4 +103,39 @@ public class CrossIndexServiceImpl implements CrossIndexService {
} }
return crossOptResults; return crossOptResults;
} }
@Override
public List<AIOptResultVO> crossAIList() {
List<AIOptResultVO> results = new ArrayList<>();
LocalDate currentDate = LocalDate.now();
LocalTime startTime = LocalTime.MIDNIGHT;
LocalDateTime startOfDay = LocalDateTime.of(currentDate, startTime);
LambdaQueryWrapper<StrategyCrossResultEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(StrategyCrossResultEntity::getIssueTime, startOfDay);
List<StrategyCrossResultEntity> list = strategyCrossResultMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(list)) {
// 查询出表中当天最新数据
Map<String, Optional<StrategyCrossResultEntity>> crossTimeMap = list.stream().collect(Collectors.groupingBy(StrategyCrossResultEntity::getCrossId,
Collectors.maxBy(Comparator.comparing(StrategyCrossResultEntity::getIssueTime))));
List<StrategyCrossResultEntity> crossMaxTimeList = crossTimeMap.values().stream().map(Optional::get).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(crossMaxTimeList)) {
for (StrategyCrossResultEntity resultEntity : crossMaxTimeList) {
AIOptResultVO aiOptResultVO = new AIOptResultVO();
aiOptResultVO.setId(resultEntity.getCrossId());
aiOptResultVO.setName(resultEntity.getCrossName());
Integer currentAlgo = resultEntity.getCurrentAlgo();
aiOptResultVO.setStrategy(currentAlgo);
// 失衡 均衡调控,其他效率提升
aiOptResultVO.setOptMethod(Objects.equals(1, currentAlgo) ? StrategyControlEnum.ONE.getMethod() : StrategyControlEnum.TWO.getMethod());
// 失衡 优化中,其他,优化完
Integer optStatus = Objects.equals(1, currentAlgo) ? OptStatusEnum.ONE.getCode() : OptStatusEnum.TWO.getCode();
aiOptResultVO.setOptStatus(optStatus);
aiOptResultVO.setOptStatusName(Objects.equals(1, currentAlgo) ? OptStatusEnum.ONE.getDesc() : OptStatusEnum.TWO.getDesc());
results.add(aiOptResultVO);
}
}
}
Collections.sort(results, Comparator.comparingInt(AIOptResultVO::getOptStatus));
return results;
}
} }
package net.wanji.opt.vo;
import lombok.Data;
/**
* @author duanruiming
* @date 2024/12/11 17:52
*/
@Data
public class AIOptResultVO {
private String id;
private String name;
/** 0:无策略 1:绿灯空放 2:失衡 3:溢出 */
private Integer strategy;
private String optMethod;
private String optStatusName;
private Integer optStatus;
}
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