Commit acb62a59 authored by zhoushiguang's avatar zhoushiguang
parents 6d06f3ed 87055487
......@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
......@@ -17,7 +18,9 @@ public class Double2TwoDecimalPlacesSerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null) {
String formattedValue = df.format(value);
// 将 Double 转换为 BigDecimal,避免浮点数精度问题
BigDecimal bd = BigDecimal.valueOf(value).setScale(2, BigDecimal.ROUND_HALF_UP);
String formattedValue = df.format(bd.doubleValue());
gen.writeString(formattedValue);
} else {
gen.writeNull();
......
......@@ -8,6 +8,7 @@ import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.bo.CrossIdBO;
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.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.service.CrossIndexService;
......@@ -118,4 +119,20 @@ public class CrossIndexController {
return JsonViewObject.newInstance().success(result);
}
@ApiOperation(value = "查询各个方向交通状态变化趋势", notes = "查询各个方向交通状态变化趋势", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/crossDirStatusData")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AddOrUpdateSceneDTO.class),
})
public JsonViewObject crossDirStatusData(@RequestBody CrossIdBO crossIdBO) {
CrossDirStatusDataPO result = new CrossDirStatusDataPO();
try {
result = crossIndexService.selectByCrossIdAndHour(crossIdBO.getCrossId(),2);
} catch (Exception e) {
JsonViewObject.newInstance().fail("查询各个方向交通状态变化趋势");
}
return JsonViewObject.newInstance().success(result);
}
}
......@@ -3,6 +3,7 @@ package net.wanji.opt.service;
import net.wanji.databus.bo.CrossIdBO;
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.vo.AIOptResultVO;
import net.wanji.opt.vo.CrossOptResult;
......@@ -27,4 +28,12 @@ public interface CrossIndexService {
List<AIOptResultVO> crossAIList() throws Exception;
crossStatusCountVO crossStatusCount(String crossId);
/**
* @Description 查询据当前时间某小时的数据
* @Param crossId 路口编号
* @Param hour 小时数
* @return java.util.List<net.wanji.databus.po.CrossDirDataHistPO>
**/
CrossDirStatusDataPO selectByCrossIdAndHour(String crossId,int hour);
}
package net.wanji.opt.service.impl;
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.DateUtil;
import net.wanji.common.utils.tool.LocalDateTimeUtil;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.CrossDirDataHistMapper;
import net.wanji.databus.dao.mapper.CrossDirDataRealtimeMapper;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.databus.po.CrossDirDataRealtimePO;
import net.wanji.databus.po.TBaseCrossInfo;
import net.wanji.databus.po.*;
import net.wanji.opt.common.enums.CrossOptStrategyEnum;
import net.wanji.opt.common.enums.OptStatusEnum;
import net.wanji.opt.common.enums.StrategyControlEnum;
......@@ -49,6 +49,8 @@ public class CrossIndexServiceImpl implements CrossIndexService {
private StrategyCrossResultMapper strategyCrossResultMapper;
@Resource
private HoloEventMapper holoEventMapper;
@Resource
private CrossDirDataHistMapper crossDirDataHistMapper;
@Override
public Map<Integer, CrossDirDataRealtimePO> crossDirIndex(CrossIdBO crossIdBO) {
......@@ -183,4 +185,29 @@ public class CrossIndexServiceImpl implements CrossIndexService {
}
return crossStatusCountVO;
}
@Override
public CrossDirStatusDataPO selectByCrossIdAndHour(String crossId, int hour) {
List<CrossDirDataHistPO> crossDirDataHistPOS = crossDirDataHistMapper.selectByCrossIdAndHour(crossId, hour);
CrossDirStatusDataPO crossDirStatusDataPO = new CrossDirStatusDataPO();
if (ObjectUtil.isNotEmpty(crossDirDataHistPOS)){
//LocalDateTimeUtil.formatTimeStamp(Long.valueOf(x.getBatchTime())*1000, "HH:mm")
//根据dirType升序,分组
LinkedHashMap<Integer, List<CrossDirDataHistPO>> stringListMap = crossDirDataHistPOS.stream().sorted(Comparator.comparing(CrossDirDataHistPO::getDirType)).collect(Collectors.groupingBy(x -> x.getDirType(), LinkedHashMap::new, Collectors.toList()));
Set<Integer> stringSet = stringListMap.keySet();
Map<Integer, List<Integer>> dirStatusListMap = new HashMap<>();
for (Integer dir : stringSet) {
List<Integer> list = stringListMap.get(dir).stream().sorted(Comparator.comparing(CrossDirDataHistPO::getBatchTime)).map(x -> x.getStatus()).collect(Collectors.toList());
dirStatusListMap.put(dir,list);
}
//获取第一个方向
Integer firstDir = stringSet.iterator().next();
List<String> timeList = stringListMap.get(firstDir).stream().sorted(Comparator.comparing(CrossDirDataHistPO::getBatchTime)).map(x -> LocalDateTimeUtil.formatTimeStamp(Long.valueOf(x.getBatchTime()) * 1000, "HH:mm")).collect(Collectors.toList());
crossDirStatusDataPO.setTimeList(timeList);
crossDirStatusDataPO.setDirStatusListMap(dirStatusListMap);
}
return crossDirStatusDataPO;
}
}
......@@ -3,8 +3,10 @@ package net.wanji.databus.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import net.wanji.common.utils.tool.JacksonUtils;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
......@@ -17,7 +19,9 @@ public class DoubleToTwoDecimalPlacesSerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null) {
String formattedValue = df.format(value);
// 将 Double 转换为 BigDecimal,避免浮点数精度问题
BigDecimal bd = BigDecimal.valueOf(value).setScale(2, BigDecimal.ROUND_HALF_UP);
String formattedValue = df.format(bd.doubleValue());
gen.writeString(formattedValue);
} else {
gen.writeNull();
......
......@@ -76,4 +76,11 @@ public interface CrossDirDataHistMapper extends BaseMapper<CrossDirDataHistPO> {
List<CrossDirDataHistPO> selectByTimeSection(String boStartDayStr, String boEndDayStr, String startHourMinuteStr, String endHourMinuteStr);
List<CrossDirDataHistPOExt> selectExtByTimeSection(String boStartDayStr, String boEndDayStr, String startHourMinuteStr, String endHourMinuteStr);
/**
* @Description 查询据当前时间两小时的数据
* @Param [crossId, hour]
* @return java.util.List<net.wanji.databus.po.CrossDirDataHistPO>
**/
List<CrossDirDataHistPO> selectByCrossIdAndHour(@Param("crossId") String crossId,@Param("hour") int hour);
}
package net.wanji.databus.po;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* @ClassName CrossDirDataTimeListtPO
* @Description 路口分方向状态数据
* @Author zhouleilei
* @Date 2025/1/2 19:48
*/
@Data
public class CrossDirStatusDataPO {
@ApiModelProperty(value = "时间列表", example = "")
private List<String> timeList;
@ApiModelProperty(value = "路口各方向的状态集合", example = "")
private Map<Integer, List<Integer>> dirStatusListMap;
}
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