Commit bda4b1c0 authored by duanruiming's avatar duanruiming

[add] 干线详情接口

parent ef86feb1
package net.wanji.opt.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.DecimalFormat;
/**
* @author duanruiming
* @date 2024/12/01 16:17
*/
public class Double2TwoDecimalPlacesSerializer extends JsonSerializer<Double> {
private static final DecimalFormat df = new DecimalFormat("#.00");
@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null) {
String formattedValue = df.format(value);
gen.writeString(formattedValue);
} else {
gen.writeNull();
}
}
}
......@@ -5,8 +5,8 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.service.signalopt.GreenBeltInfoService;
import net.wanji.opt.vo.GreenBeltCrossDetailVO;
import net.wanji.opt.vo.GreenBeltFlowStopTimeVO;
import net.wanji.opt.vo.GreenBeltKeyCrossFlowTimeVO;
import net.wanji.opt.vo.GreenBeltSpeedWidthVO;
......@@ -79,4 +79,20 @@ public class GreenBeltController {
}
return JsonViewObject.newInstance().success(map);
}
@ApiOperation(value = "干线详情", notes = "优化监测-干线详情", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/greenBeltCrossDetailList")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenBeltKeyCrossFlowTimeVO.class),
})
public JsonViewObject greenBeltCrossDetailList(Integer greenId) {
GreenBeltCrossDetailVO greenBeltCrossDetailVO = new GreenBeltCrossDetailVO();
try {
greenBeltCrossDetailVO = greenBeltInfoService.greenBeltCrossDetailList(greenId);
} catch (Exception e) {
JsonViewObject.newInstance().fail("优化监测-干线详情");
}
return JsonViewObject.newInstance().success(greenBeltCrossDetailVO);
}
}
package net.wanji.opt.service.signalopt;
import net.wanji.opt.vo.GreenBeltCrossDetailVO;
import net.wanji.opt.vo.GreenBeltFlowStopTimeVO;
import net.wanji.opt.vo.GreenBeltKeyCrossFlowTimeVO;
import net.wanji.opt.vo.GreenBeltSpeedWidthVO;
......@@ -15,4 +16,5 @@ public interface GreenBeltInfoService {
List<GreenBeltFlowStopTimeVO> greenBeltCrossDetailHist(Integer greenId) throws Exception;
Map<String, List<GreenBeltSpeedWidthVO>> greenBeltSpeedWidth(Integer greenId) throws Exception;
Map<String, List<GreenBeltKeyCrossFlowTimeVO>> greenBeltKeyCrossFlowTime(Integer greenId) throws Exception;
GreenBeltCrossDetailVO greenBeltCrossDetailList(Integer greenId) throws Exception;
}
......@@ -8,19 +8,20 @@ import net.wanji.common.framework.Constants;
import net.wanji.common.utils.tool.DateUtil;
import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.dao.entity.GreenwaveCrossPO;
import net.wanji.databus.dao.entity.GreenwaveHistPO;
import net.wanji.databus.dao.mapper.CrossDataHistMapper;
import net.wanji.databus.dao.mapper.GreenwaveHistMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.entity.GreenwaveRealtimePO;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDataRealtimePO;
import net.wanji.opt.cache.BaseCrossInfoCache;
import net.wanji.opt.cache.GreenWaveInfoCache;
import net.wanji.opt.common.enums.GreenBeltDirEnum;
import net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper;
import net.wanji.opt.po.StrategyGreenOptHistEntity;
import net.wanji.opt.service.signalopt.GreenBeltInfoService;
import net.wanji.opt.vo.GreenBeltFlowStopTimeVO;
import net.wanji.opt.vo.GreenBeltInfoVO;
import net.wanji.opt.vo.GreenBeltKeyCrossFlowTimeVO;
import net.wanji.opt.vo.GreenBeltSpeedWidthVO;
import net.wanji.opt.vo.*;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -49,9 +50,52 @@ public class GreenBeltServiceImpl implements GreenBeltInfoService {
@Resource
private StrategyGreenOptHistMapper strategyGreenOptHistMapper;
@Resource
private GreenwaveRealtimeMapper greenwaveRealtimeMapper;
@Resource
private GreenwaveHistMapper greenwaveHistMapper;
@Resource
private GreenwaveCrossMapper greenwaveCrossMapper;
@Resource
private CrossDataRealtimeMapper crossDataRealtimeMapper;
@Resource
private BaseCrossInfoCache baseCrossInfoCache;
@Override
public GreenBeltCrossDetailVO greenBeltCrossDetailList(Integer greenId) throws Exception {
List<GreenwaveCrossPO> crossPOS = greenwaveCrossMapper.selectByGreenwaveId(greenId);
List<CrossDataRealtimePO> realtimePOS = crossDataRealtimeMapper.selectAll();
GreenBeltCrossDetailVO greenBeltCrossDetailVO = new GreenBeltCrossDetailVO();
LambdaQueryWrapper<GreenwaveRealtimePO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(GreenwaveRealtimePO::getGreenId, greenId);
if (!CollectionUtils.isEmpty(crossPOS) && !CollectionUtils.isEmpty(realtimePOS)) {
List<GreenBeltCrossDetailVO.CrossDetail> detailList = new ArrayList<>();
for (GreenwaveCrossPO crossPO : crossPOS) {
String crossId = crossPO.getCrossId();
GreenBeltCrossDetailVO.CrossDetail crossDetail = new GreenBeltCrossDetailVO.CrossDetail();
for (CrossDataRealtimePO realtimePO : realtimePOS) {
if (StringUtils.equalsIgnoreCase(crossPO.getCrossId(), realtimePO.getCrossId())) {
String crossName = baseCrossInfoCache.getCrossName(crossId);
crossDetail.setCrossName(crossName);
crossDetail.setCrossIndex(realtimePO.getTrafficIndex());
detailList.add(crossDetail);
}
}
}
List<GreenwaveRealtimePO> greenRealTimes = greenwaveRealtimeMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(greenRealTimes)) {
double asDouble = greenRealTimes.stream().mapToDouble(GreenwaveRealtimePO::getTrafficIndex).average().getAsDouble();
greenBeltCrossDetailVO.setGreenIndex(asDouble);
}
greenBeltCrossDetailVO.setDetailList(detailList);
Map<Integer, GreenwaveInfoPO> greenWaveMap = GreenWaveInfoCache.greenWaveMap;
GreenwaveInfoPO greenwaveInfoPO = greenWaveMap.get(greenId);
greenBeltCrossDetailVO.setGreenName(greenwaveInfoPO.getName());
}
return greenBeltCrossDetailVO;
}
@Override
public Map<String, List<GreenBeltKeyCrossFlowTimeVO>> greenBeltKeyCrossFlowTime(Integer greenId) throws Exception {
ObjectMapper mapper = JacksonUtils.getInstance();
......
package net.wanji.opt.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.opt.config.Double2TwoDecimalPlacesSerializer;
import java.util.List;
/**
* @author duanruiming
* @date 2024/12/07 11:34
*/
@Data
@ApiModel(value = "优化监测干线详情返回实体")
public class GreenBeltCrossDetailVO {
@ApiModelProperty("干线名称")
private String greenName;
@JsonSerialize(using = Double2TwoDecimalPlacesSerializer.class)
@ApiModelProperty("干线指数")
private Double greenIndex;
private List<CrossDetail> detailList;
@Data
public static class CrossDetail {
@ApiModelProperty("路口名称")
private String crossName;
@JsonSerialize(using = Double2TwoDecimalPlacesSerializer.class)
@ApiModelProperty("路口指数")
private Double crossIndex;
}
}
......@@ -2,10 +2,12 @@ package net.wanji.databus.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.wanji.databus.config.DoubleToTwoDecimalPlacesSerializer;
import java.util.Date;
import java.util.List;
......@@ -51,6 +53,7 @@ public class AbnormalCrossListVO {
@ApiModelProperty(value = "是否拥堵:0否;1是")
private Integer isCongestion;
@ApiModelProperty(value = "交通指数")
@JsonSerialize(using = DoubleToTwoDecimalPlacesSerializer.class)
private Double trafficIndex;
@ApiModelProperty(value = "拥堵指数")
private Double congestionIndex;
......
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