Commit ef86feb1 authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents b11f9c93 c21f74ae
......@@ -16,6 +16,7 @@ import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.impl.AbstractRestServerImpl;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.service.GreenwaveHistProvider;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import net.wanji.opt.vo.GreenwaveCrossMetricsVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -49,6 +50,32 @@ public class GreenwaveHistRestServer {
private GreenwaveHistProvider greenwaveHistProvider;
@GetMapping("/findGreenWaveRunState")
@ApiOperation(httpMethod="GET",value="绿波干线运行状态查询", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "greenId", value = "绿波ID", required = true, dataType = "Integer",defaultValue = "1"),
@ApiImplicitParam(name = "startTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-04 00:00:00"),
@ApiImplicitParam(name = "endTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-05 00:00:00")
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = GreenWaveRunStateVO.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject findGreenWaveRunState(Integer greenId,@RequestParam(defaultValue ="2024-12-04 00:00:00") String startTime,
@RequestParam(defaultValue ="2024-12-05 00:00:00") String endTime) {
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
List<GreenWaveRunStateVO> list = greenwaveHistProvider.findGreenWaveRunState(greenId,startTime,endTime);
jsonView.success(list);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
@GetMapping("/findStatisticIndexTrend")
@ApiOperation(httpMethod="GET",value="绿波历史数据-数据指标统计", notes="")
......
......@@ -102,7 +102,7 @@ public class GreenwaveInducesHistController {
greenwaveDirDTO.setStrategyName(o.getStrategyName());
greenwaveDirDTO.setMinSpeed(o.getMinSpeed());
greenwaveDirDTO.setMinSpeed(o.getMaxSpeed());
greenwaveDirDTO.setMaxSpeed(o.getMaxSpeed());
if (Objects.nonNull(o.getControlOptTimes()) && o.getControlOptTimes().split("\\|").length > 0) {
try {
String startTime = DateUtil.format(DateUtil.parse(o.getControlOptTimes().split("\\|")[0], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND), Constants.DATE_FORMAT.E_DATE_FORMAT_TIME);
......@@ -117,13 +117,13 @@ public class GreenwaveInducesHistController {
}
//获取诱导屏列表
List<InduceDTO> induceDTOList = new ArrayList<>();
greenwaveInducesList.stream().filter(l -> Objects.nonNull(l.getGreenId()) && l.getGreenId().equals(o.getGreenId())).forEach(n -> {
greenwaveInducesList.stream().filter(l -> Objects.nonNull(l.getGreenId()) && l.getGreenId().equals(o.getGreenId()) && Objects.nonNull(l.getDir()) && l.getDir().equals(o.getDir())).forEach(n -> {
InduceDTO induceDTO = new InduceDTO();
induceDTO.setId(n.getId());
induceDTO.setEquipCode(n.getEquipCode());
induceDTO.setStatus(o.getStatus());
//获取屏幕的设备信息
List<DeviceInduces> deviceInduces = deviceInducesList.stream().filter(m -> Objects.nonNull(m.getEquipCode()) && m.getEquipCode().equals(n.getEquipCode())).collect(Collectors.toList());// 过滤条件// 收集结果
List<DeviceInduces> deviceInduces = deviceInducesList.stream().filter(m -> Objects.nonNull(m.getEquipCode()) && m.getEquipCode().equals(n.getEquipCode()) ).collect(Collectors.toList());// 过滤条件// 收集结果
if (Objects.nonNull(deviceInduces) && deviceInduces.size() > 0) {
induceDTO.setEquipName(deviceInduces.get(0).getEquipName());
induceDTO.setRidDir(n.getDir());//
......@@ -195,7 +195,7 @@ public class GreenwaveInducesHistController {
greenwaveDirDTO.setStrategyId(o.getStrategyId());
greenwaveDirDTO.setStrategyName(o.getStrategyName());
greenwaveDirDTO.setMinSpeed(o.getMinSpeed());
greenwaveDirDTO.setMinSpeed(o.getMaxSpeed());
greenwaveDirDTO.setMaxSpeed(o.getMaxSpeed());
if (Objects.nonNull(o.getControlOptTimes()) && o.getControlOptTimes().split("\\|").length > 0) {
try {
String startTime = DateUtil.format(DateUtil.parse(o.getControlOptTimes().split("\\|")[0], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND), Constants.DATE_FORMAT.E_DATE_FORMAT_TIME);
......@@ -210,7 +210,7 @@ public class GreenwaveInducesHistController {
}
//获取诱导屏列表
List<InduceDTO> induceDTOList = new ArrayList<>();
greenwaveInducesList.stream().filter(l -> Objects.nonNull(l.getGreenId()) && l.getGreenId().equals(o.getGreenId())).forEach(n -> {
greenwaveInducesList.stream().filter(l -> Objects.nonNull(l.getGreenId()) && l.getGreenId().equals(o.getGreenId()) && Objects.nonNull(l.getDir()) && l.getDir().equals(o.getDir())).forEach(n -> {
InduceDTO induceDTO = new InduceDTO();
induceDTO.setId(n.getId());
induceDTO.setEquipCode(n.getEquipCode());
......
......@@ -5,6 +5,8 @@ import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
......@@ -53,5 +55,12 @@ public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHis
*/
List<CrossDataHistPO> findGreenWaveCrossIndex(Map<String,Object> params);
/**
* 干线运行状态查询
* @param params
* @return
*/
List<GreenWaveRunStateVO> findGreenWaveRunState(Map<String,Object> params);
}
......@@ -5,6 +5,7 @@ import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import java.util.List;
import java.util.Map;
......@@ -70,4 +71,12 @@ public interface GreenwaveHistProvider extends BaseDubboInterface<GreenwaveHist>
*/
JSONObject findGreenWaveCrossIndex(String crossId, String startTime, String endTime, String groupType) throws DubboProviderException;
/**
* 干线运行状态查询
* @param greenId
* @param startTime
* @param endTime
* @return
*/
List<GreenWaveRunStateVO> findGreenWaveRunState(Integer greenId, String startTime, String endTime) throws DubboProviderException;
}
......@@ -12,6 +12,7 @@ import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.opt.dao.mapper.GreenwaveHistoryMapper;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.service.GreenwaveHistProvider;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
......@@ -103,23 +104,23 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
@Override
public List<Map<String, Object>> findGreenCross(Integer greenId) throws DubboProviderException {
Map<String,Object> params = new HashMap<>();
params.put("greenId",greenId);
Map<String, Object> params = new HashMap<>();
params.put("greenId", greenId);
List<Map<String, Object>> list = greenwaveHistoryMapper.findGreenCross(params);
String dirs = list.stream().map(o->o.get("inDir").toString()).distinct().collect(Collectors.joining(","));
List<Map<String, Object>> list = greenwaveHistoryMapper.findGreenCross(params);
String dirs = list.stream().map(o -> o.get("inDir").toString()).distinct().collect(Collectors.joining(","));
return list;
return list;
}
@Override
public JSONObject findUnCoordinateCrossIndex(String crossId, String greenDir, String startTime, String endTime) {
Map<String,Object> params = new HashMap<>();
params.put("crossId",crossId);
params.put("startDate",startTime);
params.put("endDate",endTime);
params.put("greenDir",greenDir);
Map<String, Object> params = new HashMap<>();
params.put("crossId", crossId);
params.put("startDate", startTime);
params.put("endDate", endTime);
params.put("greenDir", greenDir);
List<GreenwaveHist> list = greenwaveHistoryMapper.findUnCoordinateCrossIndex(params);
......@@ -166,12 +167,12 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
}
@Override
public JSONObject findGreenWaveCrossDirIndex(String crossId, String startTime, String endTime,String groupType) {
Map<String,Object> params = new HashMap<>();
params.put("crossId",crossId);
params.put("startDate",startTime);
params.put("endDate",endTime);
params.put("groupType",groupType);
public JSONObject findGreenWaveCrossDirIndex(String crossId, String startTime, String endTime, String groupType) {
Map<String, Object> params = new HashMap<>();
params.put("crossId", crossId);
params.put("startDate", startTime);
params.put("endDate", endTime);
params.put("groupType", groupType);
List<CrossDirDataHistPO> list = greenwaveHistoryMapper.findGreenWaveCrossDirIndex(params);
......@@ -218,14 +219,13 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
}
@Override
public JSONObject findGreenWaveCrossIndex(String crossId, String startTime, String endTime,String groupType) {
Map<String,Object> params = new HashMap<>();
params.put("crossId",crossId);
params.put("startDate",startTime);
params.put("endDate",endTime);
params.put("groupType",groupType);
public JSONObject findGreenWaveCrossIndex(String crossId, String startTime, String endTime, String groupType) {
Map<String, Object> params = new HashMap<>();
params.put("crossId", crossId);
params.put("startDate", startTime);
params.put("endDate", endTime);
params.put("groupType", groupType);
List<CrossDataHistPO> list = greenwaveHistoryMapper.findGreenWaveCrossIndex(params);
......@@ -246,4 +246,28 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
return jsonObject;
}
@Override
public List<GreenWaveRunStateVO> findGreenWaveRunState(Integer greenId, String startTime, String endTime) {
Map<String, Object> params = new HashMap<>();
params.put("greenId", greenId);
params.put("startDate", startTime);
params.put("endDate", endTime);
int[] stateList = new int[]{1, 2, 3};
List<GreenWaveRunStateVO> list = greenwaveHistoryMapper.findGreenWaveRunState(params);
Map<Integer,GreenWaveRunStateVO> groupList = list.stream().collect(Collectors.toMap(o -> o.getState(), o -> o));
for (int state : stateList) {
if (!groupList.containsKey(state)) {
GreenWaveRunStateVO tmp = new GreenWaveRunStateVO();
tmp.setState(state);
tmp.setGreenId(greenId);
list.add(tmp);
}
}
return list;
}
}
package net.wanji.opt.task;
import com.alibaba.druid.support.json.JSONUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
......@@ -95,25 +96,27 @@ public class InducesMonitorTask {
* #绿波调度计划扫描周期
* 5 分钟 300000
*/
@Scheduled(fixedRate = 300000)
@Scheduled(fixedRate = 30000)
public void refresh() throws Exception {
long start = System.currentTimeMillis();
AtomicLong synCount = new AtomicLong();
try {
log.info("每5分钟刷新绿波优化下发数据...................");
List<GreenwaveInfoPO> greenwaveInfoPOList=greenwaveInfoMapper.selectAll();
List<GreenwaveInducesHist> greenwaveInducesHistss = greenwaveInducesHistService.list();
for(GreenwaveInfoPO greenwaveInfoPO :greenwaveInfoPOList) {
AtomicBoolean flag = new AtomicBoolean(false);//是否已发布优化
AtomicReference<Integer> strategyId=new AtomicReference<Integer>(0);
//1、查询所有绿波带路口信息,获取路口下的绿波策略计划
List<GreenwaveCrossPO> greenwaveCrossList = greenwaveCrossMapper.selectByGreenwaveId(greenwaveInfoPO.getId());
greenwaveCrossList.stream().forEach(o -> {
//System.out.println("绿波路口--->"+o.getGreenwaveName()+"=="+o.getCrossId());
//System.out.println("绿波路口--->"+greenwaveInfoPO.getId()+"=="+o.getCrossId());
//创建路口策略列表
List<StrategyPlanInfoEntity> strategyPlanInfoEntityList = strategyPlanInfoMapper.selectByCrossId(o.getCrossId());
//strategyPlanInfoEntityList.stream().filter(x->Objects.nonNull(x.getCrossId()) && x.getCrossId().equals(o.getCrossId()) ).forEach(x->
for (StrategyPlanInfoEntity strategyPlanInfoEntity : strategyPlanInfoEntityList) {
//System.out.println("策略计划--->"+x.getCrossId()+"=="+x.getPlanDetails());
System.out.println("策略计划--->"+greenwaveInfoPO.getId()+"=="+strategyPlanInfoEntity.getPlanDetails());
//2、检查绿波时段,判断是否在绿波时段内,如果不在,则判断是否执行过上屏操作,如果执行过,则调用下屏服务(此出屏幕自动处理,无需逻辑)
//[{"dailyPlanId":1,"weeks":[1,2,3,4,5]}]
List<StrategyControlDetailList.ExecutePlan.PlanDetail> planDetails = new ArrayList<>();
......@@ -151,8 +154,7 @@ public class InducesMonitorTask {
// 判断当前时间是否在范围内
if (LocalTime.now().isAfter(startTime) && LocalTime.now().isBefore(endTime)) {
System.out.println("当前时间在范围内: " + LocalTime.now());
//3、如果在绿波时段内,未上屏,则获取固定配时绿波信息
//4、获取优化绿波方案,如果不存在,则执行固定绿波方案
//System.out.println("绿波路口--->"+greenwaveInfoPO.getId()+"=="+o.getCrossId());
flag.set(true);
strategyId.set(p.getDailyPlanId());
}
......@@ -164,19 +166,21 @@ public class InducesMonitorTask {
}
}
});
//3、如果在绿波时段内,未上屏,则获取固定配时绿波信息
//4、获取优化绿波方案,如果不存在,则执行固定绿波方案
//如果在绿波时段内,未上屏,则获取固定配时绿波信息
if (flag.get()) {
List<StrategyGreenOptHistEntity> strategyGreenOptHistEntitiesList = strategyGreenOptHistMapper.selectByGreenId(String.valueOf(greenwaveInfoPO.getId())).stream().distinct().collect(Collectors.toList());
if (Objects.nonNull(strategyGreenOptHistEntitiesList)) {
for (StrategyGreenOptHistEntity greenOptHistEntity : strategyGreenOptHistEntitiesList) {
LambdaQueryWrapper<GreenwaveInducesHist> greenwaveInducesHistQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, greenwaveInfoPO.getId());
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getDir, getDir(greenOptHistEntity.getDir()));
List<GreenwaveInducesHist> greenwaveInducesHistList = greenwaveInducesHistService.list(greenwaveInducesHistQueryWrapper);
// LambdaQueryWrapper<GreenwaveInducesHist> greenwaveInducesHistQueryWrapper = new LambdaQueryWrapper<>();
// greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, greenwaveInfoPO.getId());
// greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getDir, getDir(greenOptHistEntity.getDir()));
List<GreenwaveInducesHist> greenwaveInducesHistList=greenwaveInducesHistss.stream().filter(g->g.getGreenId().equals(greenwaveInfoPO.getId()) && g.getDir().equals(getDir(greenOptHistEntity.getDir()))).collect(Collectors.toList());
GreenwaveInducesHist greenwaveInducesHist=null;
if (Objects.isNull(greenwaveInducesHistList) || greenwaveInducesHistList.size()<1) {
greenwaveInducesHist = new GreenwaveInducesHist();
greenwaveInducesHist.setCreateTime(new Date());
greenwaveInducesHist.setCreateTime(greenOptHistEntity.getCreateTime());
greenwaveInducesHist.setGreenId(greenwaveInfoPO.getId());
greenwaveInducesHist.setDir(getDir(greenOptHistEntity.getDir()));
}else{
......@@ -232,21 +236,21 @@ public class InducesMonitorTask {
}
}
greenwaveInducesHist.setStatus(1);
greenwaveInducesHist.setModifyTime(greenOptHistEntity.getCreateTime());
}
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
log.info("发送上屏信息异常" + e.getMessage());
}
greenwaveInducesHist.setModifyTime(greenOptHistEntity.getCreateTime());
greenwaveInducesHistService.saveOrUpdate(greenwaveInducesHist);
synCount.getAndIncrement();
log.info("同步绿波状态信息成功->" + greenwaveInfoPO.getName()+greenOptHistEntity.getDir());
log.info("同步绿波状态信息成功->" + greenwaveInfoPO.getName()+greenwaveInducesHist.getDir());
}
}
}
//如果没有绿波方案则调用下屏服务
if (!flag.get()) {
else{
LambdaQueryWrapper<GreenwaveInducesHist> greenwaveInducesHistQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, greenwaveInfoPO.getId());
List<GreenwaveInducesHist> greenwaveInducesHistList = greenwaveInducesHistService.list(greenwaveInducesHistQueryWrapper);
......@@ -281,7 +285,7 @@ public class InducesMonitorTask {
n.setStatus(0);
n.setModifyTime(new Date());
greenwaveInducesHistService.saveOrUpdate(n);
log.info("同步绿波状态信息(下屏)->" + greenwaveInfoPO.getName());
log.info("同步绿波状态信息(下屏)->" + greenwaveInfoPO.getName()+"####"+n.getDir());
synCount.getAndIncrement();
});
}
......
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.wanji.databus.vo.AbnormalCrossListVO;
import java.util.List;
@NoArgsConstructor
@Data
@ApiModel(value = "GreenWaveRunStateVO", description = "干线运行状态")
public class GreenWaveRunStateVO {
@ApiModelProperty(value = "干线ID")
private Integer greenId;
@ApiModelProperty(value = "干线运行状态 1:畅通 2:缓行 3:拥堵")
private int state;
@ApiModelProperty(value = "状态持续时长,单位秒")
private int duration;
@ApiModelProperty(value = "分析时段总时长,单位秒")
private int totalTime;
}
......@@ -171,6 +171,16 @@
) t
GROUP BY t.cross_id,unit_time
</select>
<!-- 查看干线拥堵运行状态 -->
<select id="findGreenWaveRunState" resultType="net.wanji.opt.vo.GreenWaveRunStateVO">
select type as state,
SUM(TIMESTAMPDIFF(SECOND,start_time, end_time)) duration,
TIMESTAMPDIFF(SECOND,#{startDate}, #{endDate}) total_time
from t_event_info t
where <!-- type in (705,706) and --> start_time > #{startDate}
and start_time &lt; #{endDate}
GROUP BY type
</select>
<!--新增操作 -->
<insert id="save" parameterType="net.wanji.opt.entity.GreenwaveHist">
......
......@@ -52,9 +52,16 @@
<select id="findByMap" resultType="net.wanji.databus.dao.entity.GreenwaveInfoPO" parameterType="java.util.Map">
SELECT <include refid="Base_Column_List"></include>
FROM t_greenwave_info WHERE 1=1
<include refid="sql_query"/>
<if test="keyword != null and keyword != ''">
AND ( locate(#{keyword,jdbcType=VARCHAR}, `name`)>0 )
</if>
</select>
<sql id="sql_query">
<if test="greenId != null ">
<![CDATA[ and `id` = #{greenId} ]]>
</if>
</sql>
</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