Commit 310e5878 authored by 董国亮's avatar 董国亮

诱导下发代码优化

parent f708007b
......@@ -10,13 +10,11 @@ import net.wanji.common.framework.Constants;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.DateUtil;
import net.wanji.opt.entity.GreenwaveInduces;
import net.wanji.opt.entity.GreenwaveInducesHist;
import net.wanji.opt.entity.InduceHist;
import net.wanji.opt.entity.InduceTemplate;
import net.wanji.opt.dto.induce.MessageParam;
import net.wanji.opt.service.induce.GreenwaveInducesService;
import net.wanji.opt.service.induce.InduceHistService;
import net.wanji.opt.service.induce.InduceSendService;
import net.wanji.opt.service.induce.InduceTemplateService;
import net.wanji.opt.service.induce.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
......@@ -48,11 +46,26 @@ public class InduceSendController {
@Autowired
private GreenwaveInducesService greenwaveInducesService;
@Autowired
private GreenwaveInducesHistService greenwaveInducesHistService;
@ApiOperation(value = "发送诱导信息", notes = "发送诱导信息", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON)
@PostMapping("/send")
public JsonViewObject send(@RequestBody MessageParam param) {
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
if(Objects.nonNull(param.getGreenId())) {
LambdaQueryWrapper<GreenwaveInducesHist> greenwaveInducesHistQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, param.getGreenId());
List<GreenwaveInducesHist> greenwaveInducesHistList = greenwaveInducesHistService.list(greenwaveInducesHistQueryWrapper);
if (Objects.nonNull(greenwaveInducesHistList) && greenwaveInducesHistList.size() > 0 && Objects.nonNull(greenwaveInducesHistList.get(0).getControlOptTimes()) && greenwaveInducesHistList.get(0).getControlOptTimes().split("|").length > 0 && DateUtil.isBetween(new Date(), DateUtil.parse(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[0], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND), DateUtil.parse(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[1], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND))) {
param.setStartTime(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[0]);
param.setEndTime(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[1]);
} else {
param.setStartTime(DateUtil.format(new Date(), Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));
param.setEndTime(DateUtil.format(System.currentTimeMillis() + 1000 * 30, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));
}
}
induceSendService.send(param);
return jsonView.success();
} catch (Exception e) {
......@@ -70,6 +83,11 @@ public class InduceSendController {
LambdaQueryWrapper<GreenwaveInduces> greenwaveInducesQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesQueryWrapper.eq(GreenwaveInduces::getGreenId, param.getGreenId());
List<GreenwaveInduces> greenwaveInducesList=greenwaveInducesService.list(greenwaveInducesQueryWrapper);
LambdaQueryWrapper<GreenwaveInducesHist> greenwaveInducesHistQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, param.getGreenId());
List<GreenwaveInducesHist> greenwaveInducesHistList=greenwaveInducesHistService.list(greenwaveInducesHistQueryWrapper);
for(GreenwaveInduces greenwaveInduces:greenwaveInducesList)
{
LambdaQueryWrapper<InduceTemplate> induceTemplateQueryWrapper = new LambdaQueryWrapper<>();
......@@ -81,8 +99,13 @@ public class InduceSendController {
param.setEquipCode(greenwaveInduces.getEquipCode());
param.setPlayorder(induceTemplateList.size());
param.setDuration(greenwaveInduces.getDuration());
if (Objects.nonNull(greenwaveInducesHistList) && greenwaveInducesHistList.size() > 0 && Objects.nonNull(greenwaveInducesHistList.get(0).getControlOptTimes()) && greenwaveInducesHistList.get(0).getControlOptTimes().split("|").length > 0 && DateUtil.isBetween(new Date(), DateUtil.parse(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[0], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND), DateUtil.parse(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[1], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND))) {
param.setStartTime(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[0]);
param.setEndTime(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[1]);
} else {
param.setStartTime(DateUtil.format(new Date(), Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));
param.setEndTime(DateUtil.format(System.currentTimeMillis() + 1000 * 30, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));
}
induceSendService.send(param);
}
}
......
......@@ -5,8 +5,13 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.GreenwaveCrossPOExt;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.CrossDataRealtimeMapper;
import net.wanji.databus.dao.mapper.GreenwaveCrossMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
......@@ -17,7 +22,6 @@ import net.wanji.opt.dto.induce.MessageParam;
import net.wanji.opt.entity.GreenwaveInduces;
import net.wanji.opt.entity.GreenwaveInducesHist;
import net.wanji.opt.po.StrategyGreenOptHistEntity;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.opt.service.induce.GreenwaveInducesHistService;
import net.wanji.opt.service.induce.GreenwaveInducesService;
import net.wanji.opt.service.induce.InduceSendService;
......@@ -38,6 +42,7 @@ import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
......@@ -81,19 +86,20 @@ public class InducesMonitorTask {
* #绿波调度计划扫描周期
* 5 分钟 300000
*/
//@Scheduled(fixedRate = 300000)
@Scheduled(fixedRate = 300000)
public void refresh() throws Exception {
long start = System.currentTimeMillis();
AtomicLong synCount = new AtomicLong();
try {
log.info("每5分钟刷新绿波优化下发数据...................");
// List<GreenwaveInfoPO> greenwaveInfoPOList=greenwaveInfoMapper.selectAll();
// for(GreenwaveInfoPO greenwaveInfoPO :greenwaveInfoPOList) {
List<GreenwaveInfoPO> greenwaveInfoPOList=greenwaveInfoMapper.selectAll();
for(GreenwaveInfoPO greenwaveInfoPO :greenwaveInfoPOList) {
AtomicBoolean flag = new AtomicBoolean(false);//是否已发布优化
AtomicReference<Integer> strategyId=new AtomicReference<Integer>(0);
//1、查询所有绿波带路口信息,获取路口下的绿波策略计划
List<GreenwaveCrossPOExt> greenwaveCrossList = greenwaveCrossMapper.selectAllGreeenCross();
List<GreenwaveCrossPO> greenwaveCrossList = greenwaveCrossMapper.selectByGreenwaveId(greenwaveInfoPO.getId());
greenwaveCrossList.stream().forEach(o -> {
//System.out.println("绿波路口--->"+o.getGreenwaveName()+"=="+o.getCrossId());
AtomicBoolean flag = new AtomicBoolean(false);//是否已发布优化
//创建路口策略列表
List<StrategyPlanInfoEntity> strategyPlanInfoEntityList = strategyPlanInfoMapper.selectByCrossId(o.getCrossId());
//strategyPlanInfoEntityList.stream().filter(x->Objects.nonNull(x.getCrossId()) && x.getCrossId().equals(o.getCrossId()) ).forEach(x->
......@@ -138,28 +144,42 @@ public class InducesMonitorTask {
System.out.println("当前时间在范围内: " + LocalTime.now());
//3、如果在绿波时段内,未上屏,则获取固定配时绿波信息
//4、获取优化绿波方案,如果不存在,则执行固定绿波方案
List<StrategyGreenOptHistEntity> strategyGreenOptHistEntitiesList = strategyGreenOptHistMapper.selectByGreenId(String.valueOf(o.getGreenId())).stream().distinct().collect(Collectors.toList());
flag.set(true);
strategyId.set(p.getDailyPlanId());
}
}
}
});
}
}
}
}
});
//如果在绿波时段内,未上屏,则获取固定配时绿波信息
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, o.getGreenId());
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getDir, getDir(greenOptHistEntity.getDir()));
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, greenwaveInfoPO.getId());
// greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getDir, getDir(greenOptHistEntity.getDir()));
GreenwaveInducesHist greenwaveInducesHist = greenwaveInducesHistService.getOne(greenwaveInducesHistQueryWrapper);
if (Objects.isNull(greenwaveInducesHist)) {
greenwaveInducesHist = new GreenwaveInducesHist();
greenwaveInducesHist.setCreateTime(new Date());
greenwaveInducesHist.setGreenId(o.getGreenId());
greenwaveInducesHist.setGreenId(greenwaveInfoPO.getId());
greenwaveInducesHist.setDir(getDir(greenOptHistEntity.getDir()));
}
greenwaveInducesHist.setStrategyId(strategyPlanInfoEntity.getPlanId());
greenwaveInducesHist.setStrategyName(o.getGreenwaveName());//当前策略名称
greenwaveInducesHist.setControlOptTimes(greenOptHistEntity.getControlTime());//执行时段
greenwaveInducesHist.setType(strategyPlanInfoEntity.getType());// 执行策略
greenwaveInducesHist.setStrategyId(strategyId.get());
greenwaveInducesHist.setStrategyName(greenwaveInfoPO.getName());//当前策略名称
if(StringUtils.isNotBlank(greenOptHistEntity.getControlTime()) && greenOptHistEntity.getControlDuration()>0) {
greenwaveInducesHist.setControlOptTimes(greenOptHistEntity.getControlTime() + "|" + DateUtil.format(DateUtil.addSecond(greenOptHistEntity.getControlTime(),greenOptHistEntity.getControlDuration()), Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));//执行时段
}
greenwaveInducesHist.setType(greenOptHistEntity.getType());// 执行策略
greenwaveInducesHist.setMinSpeed(greenOptHistEntity.getMinSpeed());
greenwaveInducesHist.setMaxSpeed(greenOptHistEntity.getMaxSpeed());
greenwaveInducesHist.setDir(greenOptHistEntity.getDirType());
//5、获取绿波信息,调用上屏服务;发布互联网诱导方案
flag.set(true);
//[{"crossId":"13MOD0B5SI0","phaseStartTime":32.0,"phaseEndTime":122.0,"greenStartTime":35.0,"speed":"39.71","offset":208.0,"travelTime":57.0,"distance":"628.81"},{"crossId":"13MQJ0B5SI0","phaseStartTime":43.0,"phaseEndTime":158.0,"greenStartTime":0.0,"speed":"35.54","offset":69.0,"travelTime":42.0,"distance":"414.62"},{"crossId":"13MS20B5SI0","phaseStartTime":32.0,"phaseEndTime":142.0,"greenStartTime":8.0,"speed":"22.72","offset":114.0,"travelTime":116.0,"distance":"732.00"},{"crossId":"13MUK0B5SH0","phaseStartTime":0.0,"phaseEndTime":135.0,"greenStartTime":0.0,"speed":"42.33","offset":50.0,"travelTime":45.0,"distance":"529.16"},{"crossId":"13N0F0B5SH0","phaseStartTime":25.0,"phaseEndTime":156.0,"greenStartTime":70.0,"speed":"40.67","offset":0.0,"travelTime":40.0,"distance":"451.89"},{"crossId":"13N200B5SH0","phaseStartTime":23.0,"phaseEndTime":150.0,"greenStartTime":0.0,"speed":"-1.00","offset":112.0,"travelTime":-1.0,"distance":"-1.00"}]
List<GreenBeltInfoVO.CrossGreenDetail> crossGreenDetailList = new ArrayList<>();
try {
......@@ -168,24 +188,18 @@ public class InducesMonitorTask {
} catch (JsonProcessingException e) {
log.error("绿波详情转换失败:" + greenOptHistEntity.getGreenId() + "---" + e.getMessage());
}
greenwaveInducesHist.setStatus(1);
// greenwaveInducesHist.setStatus(1);
greenwaveInducesHist.setModifyTime(new Date());
greenwaveInducesHistService.saveOrUpdate(greenwaveInducesHist);
synCount.getAndIncrement();
log.info("同步绿波状态信息成功->" + o.getPlanName());
}
}
}
}
}
});
}
log.info("同步绿波状态信息成功->" +greenwaveInfoPO.getName());
}
}
}
//如果没有绿波方案则调用下屏服务
if (!flag.get()) {
LambdaQueryWrapper<GreenwaveInducesHist> greenwaveInducesHistQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, o.getGreenId());
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, greenwaveInfoPO.getId());
List<GreenwaveInducesHist> greenwaveInducesHistList = greenwaveInducesHistService.list(greenwaveInducesHistQueryWrapper);
greenwaveInducesHistList.stream().forEach(n -> {
//调用下屏
......@@ -194,7 +208,7 @@ public class InducesMonitorTask {
MessageParam messageParam = new MessageParam();
messageParam.setFlg(2);
LambdaQueryWrapper<GreenwaveInduces> greenwaveInducesQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesQueryWrapper.eq(GreenwaveInduces::getGreenId, o.getGreenId());
greenwaveInducesQueryWrapper.eq(GreenwaveInduces::getGreenId, greenwaveInfoPO.getId());
List<GreenwaveInduces> greenwaveInducesList = greenwaveInducesService.list(greenwaveInducesQueryWrapper);
greenwaveInducesList.stream().forEach(v -> {
messageParam.setEquipCode(v.getEquipCode());
......@@ -209,14 +223,14 @@ public class InducesMonitorTask {
log.error("发送下屏信息失败");
}
//保存绿波状态
//n.setStatus(0);
//greenwaveInducesHistService.saveOrUpdate(n);
log.info("同步绿波状态信息(下屏)->" + o.getPlanName());
n.setStatus(0);
n.setModifyTime(new Date());
greenwaveInducesHistService.saveOrUpdate(n);
log.info("同步绿波状态信息(下屏)->" + greenwaveInfoPO.getName());
synCount.getAndIncrement();
});
}
});
//}
}
} catch (Exception e) {
throw new Exception("每5分钟刷新绿波下发状态失败", e);
} finally {
......
......@@ -4,4 +4,8 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper">
<select id="selectByGreenId" resultType="net.wanji.opt.po.StrategyGreenOptHistEntity" parameterType="String" >
select * from t_strategy_green_opt_hist where `green_id` = #{greenId} and TIMESTAMPDIFF(SECOND,`control_time`, now()) &lt; `control_duration` order by create_time desc limit 1;
</select>
</mapper>
\ No newline at end of file
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