Commit 607378a0 authored by fengyasheng's avatar fengyasheng

交通分析报告-干线信息查询

parent bb4fb909
package net.wanji.opt.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/12/10 17:27
*/
@Getter
@AllArgsConstructor
public enum RoadLevelEnum {
HIGHWAY(41000, "高速公路"),
NATIONAL_HIGHWAY(42000, "国道"),
URBAN_EXPRESSWAY(43000, "城市快速路"),
URBAN_MAIN_ROAD(44000, "城市主干道"),
URBAN_SECONDARY_ROAD(45000, "城市次干道"),
URBAN_ORDINARY_ROAD(47000, "城市普通道路"),
PROVINCIAL_ROAD(51000, "省道"),
COUNTY_ROAD(52000, "县道"),
TOWN_ROAD(53000, "乡道"),
RURAL_INTERNAL_ROAD(54000, "县乡村内部道路"),
SMALL_ROAD(49, "小路");
private Integer code;
private String desc;
public static String getDesc(Integer code) {
for (RoadLevelEnum value : RoadLevelEnum.values()) {
if (Objects.equals(code, value.getCode())) {
return value.desc;
}
}
return "";
}
}
......@@ -10,20 +10,14 @@ import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.po.BaseAreaInfoPO;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.crosssignal.CrossSignalPlanReasonResult;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.greenproblem.GreenCrossProblemTrendAnalysisResult;
import net.wanji.opt.servicev2.judgeanalysis.BaseAreaInfoService;
import net.wanji.opt.servicev2.judgeanalysis.CrossSignalPlanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
/**
* <p>
......
package net.wanji.opt.controllerv2.judgeanalysis;
package net.wanji.opt.controllerv2.report;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
......@@ -6,25 +6,14 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.AbstractRestServer;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.Page;
import net.wanji.common.framework.rest.impl.AbstractRestServerImpl;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.po.BaseAreaInfoPO;
import net.wanji.opt.entity.BaseAreaInfo;
import net.wanji.opt.servicev2.judgeanalysis.BaseAreaInfoService;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import net.wanji.opt.servicev2.report.BaseAreaInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.ws.rs.core.MediaType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
......
package net.wanji.opt.controllerv2.report;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.po.BaseAreaInfoPO;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfo;
import net.wanji.opt.servicev2.report.BaseAreaInfoService;
import net.wanji.opt.servicev2.report.GreenWaveCrossRidService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 区域基础信息 接口API
* </p>
* @version 1.0
* @author
* @Date 2025-03-18
*/
@RestController
@Slf4j
@RequestMapping("/green-wave-cross-rid")
@Api(value="GreenWaveCrossRidController", description="干线分析报告接口", tags = "干线分析报告")
public class GreenWaveCrossRidController {
@Autowired
private GreenWaveCrossRidService greenWaveCrossRidService;
@ApiOperation(httpMethod="GET",value="干线基础信息", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"),
})
@GetMapping(value = "/getGreenInfoList")
public JsonViewObject getGreenInfoList(@RequestParam(value = "ids", required = false, defaultValue = "2") String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
JSONObject object = greenWaveCrossRidService.getGreenInfoList(ids);
jsonViewObject.success(object);
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
}
package net.wanji.opt.dao.mapper.report;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfo;
import net.wanji.opt.synthesis.pojo.*;
import net.wanji.opt.synthesis.pojo.vo.CrossOrGreenWaveTypeEntity;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 干线报告
* </p>
* @author
* @date 2025/3/15
*/
public interface GreenWaveCrossRidMapper {
List<GreenWaveCrossRidInfo> getGreenInfoList(@Param("id") String id);
}
package net.wanji.opt.entity.report;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "GreenWaveCrossRidInfo", description = "干线信息")
public class GreenWaveCrossRidInfo {
// 主表 t_greenwave_info 字段
@ApiModelProperty(value = "绿波干线id")
private Integer id; // a.id
@ApiModelProperty(value = "干线名称")
private String greenwaveName; // a.name AS greenwave_name
@ApiModelProperty(value = "干线方向")
private String greenDir; // a.name AS greenwave_name
@ApiModelProperty(value = "干线方向")
private String greenDirName; // a.name AS greenwave_name
@ApiModelProperty(value = "干线长度")
private String length; // a.name AS greenwave_name
// 表 t_greenwave_cross 字段
@ApiModelProperty(value = "路口id")
private String crossId; // b.cross_id
@ApiModelProperty(value = "路口名称")
private String crossName; // c.name AS cross_name
@ApiModelProperty(value = "路口顺序")
private Integer sort; // b.sort
@ApiModelProperty(value = "驶入方向")
private String inDir; // b.in_dir
@ApiModelProperty(value = "驶出方向")
private String outDir; // b.out_dir
@ApiModelProperty(value = "是否重点路口 0-否 1-是 ")
private Integer isKeyRoute; // b.is_key_route
// 表 t_base_cross_info 字段
@ApiModelProperty(value = "是否信控路口 0-否 1-是")
private Integer isSignal; // c.is_signal
// 表 t_base_rid_info 字段
@ApiModelProperty(value = "车道等级")
private Integer level; // d.level
@ApiModelProperty(value = "车道等级名称")
private String levelName; // d.level
@ApiModelProperty(value = "路段id")
private String rid; // d.id AS rid
// 车道数量统计字段
@ApiModelProperty(value = "驶入车道数")
private Integer inLaneCount; // COALESCE(in_lane_count.count, 0)
@ApiModelProperty(value = "驶出车道数")
private Integer outLaneCount; // COALESCE(out_lane_count.count, 0)
@ApiModelProperty(value = "全部车道数")
private Integer allLaneCount;
@ApiModelProperty(value = "全部路口")
List<GreenWaveCrossRidInfo> greenWaveCrossRidInfoList;
}
package net.wanji.opt.entity.report;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "GreenWaveCrossRidInfoVO", description = "干线信息")
public class GreenWaveCrossRidInfoVO {
// 主表 t_greenwave_info 字段
@ApiModelProperty(value = "绿波干线id")
private Integer id; // a.id
@ApiModelProperty(value = "干线名称")
private String greenwaveName; // a.name AS greenwave_name
@ApiModelProperty(value = "干线方向")
private String greenDir; // a.name AS greenwave_name
@ApiModelProperty(value = "干线方向")
private String greenDirName; // a.name AS greenwave_name
@ApiModelProperty(value = "干线长度")
private String length; // a.name AS greenwave_name
@ApiModelProperty(value = "信控路口数量")
private Integer signalCross; // c.is_signal
// 表 t_base_rid_info 字段
@ApiModelProperty(value = "车道等级")
private Integer level; // d.level
@ApiModelProperty(value = "车道等级名称")
private String levelName; // d.level
@ApiModelProperty(value = "路段id")
private String rid; // d.id AS rid
@ApiModelProperty(value = "全部车道数")
private Integer allLaneCount;
@ApiModelProperty(value = "全部路口")
List<GreenWaveCrossRidInfo> greenWaveCrossRidInfoList;
}
package net.wanji.opt.servicev2.judgeanalysis;
package net.wanji.opt.servicev2.report;
import com.alibaba.fastjson.JSONObject;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
......
package net.wanji.opt.servicev2.report;
import com.alibaba.fastjson.JSONObject;
import net.wanji.databus.po.BaseAreaInfoPO;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfo;
import java.util.List;
/**
* <p>
* 区域基础信息
* </p>
*
* @Author wangtao
* @Date 2025-03-18
*/
public interface GreenWaveCrossRidService {
JSONObject getGreenInfoList(String ids);
}
package net.wanji.opt.servicev2.judgeanalysis.impl;
package net.wanji.opt.servicev2.report.impl;
import com.alibaba.fastjson.JSONObject;
import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.common.gts.service.GtsService;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.BaseAreaInfoMapper;
......@@ -11,10 +9,9 @@ import net.wanji.databus.dao.mapper.BaseCrossInfoMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.databus.po.BaseAreaInfoPO;
import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.opt.entity.BaseAreaInfo;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.servicev2.judgeanalysis.BaseAreaInfoService;
import net.wanji.opt.servicev2.report.BaseAreaInfoService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
......@@ -23,7 +20,6 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
......
package net.wanji.opt.servicev2.report.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.common.enums.CrossDirEnum;
import net.wanji.opt.common.enums.RoadLevelEnum;
import net.wanji.opt.dao.mapper.report.GreenWaveCrossRidMapper;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfo;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfoVO;
import net.wanji.opt.servicev2.report.GreenWaveCrossRidService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 区域基础信息
* </p>
*
* @Author wangtao
* @Date 2025-03-18
*/
@Slf4j
@Component
@Service
public class GreenWaveCrossRidServiceImpl implements GreenWaveCrossRidService {
@Resource
private GreenWaveCrossRidMapper greenWaveCrossRidMapper;
@Override
public JSONObject getGreenInfoList(String ids) {
String[] idList = ids.split(",");
JSONObject jsonObject = new JSONObject();
List<GreenWaveCrossRidInfoVO> list = new ArrayList<>();
for (String id : idList) {
List<GreenWaveCrossRidInfo> greenWaveCrossRidInfoList = greenWaveCrossRidMapper.getGreenInfoList(id);
int signal = 0;
for (GreenWaveCrossRidInfo greenWaveCrossRidInfo : greenWaveCrossRidInfoList) {
if(!ObjectUtils.isEmpty(greenWaveCrossRidInfo.getIsSignal()) && greenWaveCrossRidInfo.getIsSignal() == 1){
signal++;
}
}
String greenDir = greenWaveCrossRidInfoList.get(1).getGreenDir();
String[] dirs = greenDir.split(",");
String content = StrUtil.format("{}{}走向",CrossDirEnum.getDesc(Integer.valueOf(dirs[0])),CrossDirEnum.getDesc(Integer.valueOf(dirs[1]))) ;
GreenWaveCrossRidInfoVO greenWaveCrossRidInfoVO = new GreenWaveCrossRidInfoVO();
GreenWaveCrossRidInfo greenWaveCrossRidInfo = greenWaveCrossRidInfoList.get(1);
BeanUtils.copyProperties(greenWaveCrossRidInfo,greenWaveCrossRidInfoVO);
greenWaveCrossRidInfoVO.setGreenDirName(content);
greenWaveCrossRidInfoVO.setLevelName(RoadLevelEnum.getDesc(greenWaveCrossRidInfo.getLevel()));
greenWaveCrossRidInfoVO.setAllLaneCount(greenWaveCrossRidInfo.getInLaneCount() + greenWaveCrossRidInfo.getOutLaneCount());
greenWaveCrossRidInfoVO.setSignalCross(signal);
greenWaveCrossRidInfoVO.setGreenWaveCrossRidInfoList(greenWaveCrossRidInfoList);
list.add(greenWaveCrossRidInfoVO);
}
jsonObject.put("dataList",list);
return jsonObject;
}
}
<?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.opt.dao.mapper.report.GreenWaveCrossRidMapper">
<select id="getGreenInfoList" resultType="net.wanji.opt.entity.report.GreenWaveCrossRidInfo">
SELECT
a.id,
a.name AS greenwave_name,
a.green_dir,
a.length,
b.cross_id,
b.sort,
b.in_dir,
b.out_dir,
b.is_key_route,
c.is_signal,
d.level,
d.id as rid,
c.name AS cross_name,
COALESCE(in_lane_count.count, 0) AS in_lane_count, -- type=2, dir=b.in_dir 的车道数量
COALESCE(out_lane_count.count, 0) AS out_lane_count -- type=3, dir=b.out_dir 的车道数量
FROM
t_greenwave_info AS a
LEFT JOIN
t_greenwave_cross AS b ON a.id = b.green_id
LEFT JOIN
t_base_cross_info AS c ON b.cross_id = c.id
LEFT JOIN
t_base_rid_info AS d ON b.cross_id = d.end_cross_id and b.in_dir = d.in_dir
LEFT JOIN
(SELECT cross_id, COUNT(1) AS count,dir
FROM t_base_lane_info
WHERE type = 2
GROUP BY cross_id, dir) AS in_lane_count
ON b.cross_id = in_lane_count.cross_id AND b.in_dir = in_lane_count.dir
LEFT JOIN
(SELECT cross_id, COUNT(1) AS count,dir
FROM t_base_lane_info
WHERE type = 3
GROUP BY cross_id, dir) AS out_lane_count
ON b.cross_id = out_lane_count.cross_id AND b.out_dir = out_lane_count.dir where a.id = #{id} ORDER BY sort;
</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