Commit c0d99f74 authored by 董国亮's avatar 董国亮

优化下发,处理异常

parent 7a246d65
......@@ -80,27 +80,27 @@ public class InduceSendServiceImpl implements InduceSendService {
public void send(MessageParam param) throws IOException, TemplateException {
//生成诱导屏推送sourceId
String messageId = UUID.randomUUID().toString().toLowerCase();
InduceHist induceHist=new InduceHist();
InduceHist induceHist = new InduceHist();
param.setSourceId(messageId);
induceHist.setSourceId(messageId);
GreenwaveInduces greenwaveinduces=greenwaveInducesService.getById(param.getInduceId());
GreenwaveInduces greenwaveinduces = greenwaveInducesService.getById(param.getInduceId());
// 读取图片模板参数
InduceTemplate induceTemplate = induceTemplateService.getById(param.getTemplateId());
if(param.getFlg()==1) {
if (param.getFlg() == 1) {
LambdaQueryWrapper<DeviceInduces> deviceQueryWrapper = new LambdaQueryWrapper<>();
deviceQueryWrapper.eq(DeviceInduces::getEquipCode, induceTemplate.getEquipCode());
DeviceInduces deviceInduces = deviceInducesService.getOne(deviceQueryWrapper);
if(Objects.nonNull(deviceInduces)) {
if (Objects.nonNull(deviceInduces)) {
param.setResolutionWidth(deviceInduces.getResolutionWidth().intValue());
param.setResolutionHeight(deviceInduces.getResolutionHeight().intValue());
}
}
// 获取图片字节数组
BufferedImage image = null;
try {
byte[] imageBytes = induceTemplate.getFileContent();
if (imageBytes != null || imageBytes.length > 0) {
// 将字节数组转换为字节对象
BufferedImage image =null;
try {
image = ImageIO.read(new ByteArrayInputStream(imageBytes));
// 修改图像中文字
//addTextToImage(image, param.getContents(), induceTemplate.getTextX(), induceTemplate.getTextY(), induceTemplate.getTextSize(), induceTemplate.getTextSign());
......@@ -117,26 +117,26 @@ public class InduceSendServiceImpl implements InduceSendService {
// 图片生成操作
boolean upDown = param.getContents()[0].contains("▲") || param.getContents()[0].contains("▼");
createImageWithText(induceTemplate, image, param.getContents(), induceTemplate.getTextSign(), upDown, topLeftX, topLeftY, bottomRightX, bottomRightY);
}catch (Exception ex){
}
} catch (Exception ex) {
log.error(ex.getMessage());
}
// 测试阶段保存图片到本地
// ImageIO.write(image, "bmp", new File("D:\\tmp\\" + induceTemplate.getFileName()));
// 上传文件至ftp
if (param.getFlg() == 1) {
String dirName=LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String fileName=param.getEquipCode()+"_"+UUID.randomUUID().toString()+".bmp";
String filePath = uploadFile(image,dirName, fileName);
String dirName = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String fileName = param.getEquipCode() + "_" + UUID.randomUUID().toString() + ".bmp";
String filePath = uploadFile(image, dirName, fileName);
param.setFtpPath(filePath);
induceHist.setFilePath(PATH + dirName+"/"+fileName);
if(Objects.nonNull(param.getContents()) && param.getContents().length>0) {
induceHist.setFilePath(PATH + dirName + "/" + fileName);
if (Objects.nonNull(param.getContents()) && param.getContents().length > 0) {
induceHist.setInduceSpeed(param.getContents()[0]);
}
if(Objects.nonNull(greenwaveinduces)) {
if (Objects.nonNull(greenwaveinduces)) {
greenwaveinduces.setSourceId(PATH + dirName + "/" + fileName);
}
}
log.info("上传文件至ftp-filePath:{}", param.getFtpPath());
}
// //如果已发布,则调用下屏服务
// if(greenwaveinduces.getStatus()==1){
// param.setFlg(2);
......@@ -155,7 +155,7 @@ public class InduceSendServiceImpl implements InduceSendService {
// rabbitTemplate.convertAndSend("",queueName, messageSend);
// }
// 推送mq消息
String message = convertMessage(param.getFlg()==1?"induce_up.xml":"induce_down.xml",param);
String message = convertMessage(param.getFlg() == 1 ? "induce_up.xml" : "induce_down.xml", param);
// 去掉所有转义字符(\n、\t、\b、等)
// message = message.replaceAll("[\\n\\t\\r]", ""); // 可以根据需要添加更多字符
// 可以去掉反斜杠
......@@ -165,23 +165,23 @@ public class InduceSendServiceImpl implements InduceSendService {
// messageProperties.setContentType("text/plain"); // 设置内容类型为text/plain
// 创建Message并设置内容
// Message messageSend = new Message(message.getBytes(), messageProperties);
if(sending)
{
if (sending) {
rabbitTemplate.convertAndSend("", queueName, message);
}
log.info("mqtt发送信息-topic:{},queueName:{},message:{}", queueName, message);
//1、增加下发记录log 2、计数 3、标记已发布状体
if (Objects.nonNull(induceTemplate) && Objects.nonNull(induceTemplate.getEquipCode()) && param.getFlg() == 1) {
induceHist.setEquipCode(induceTemplate.getEquipCode());
induceHist.setGreenId(param.getGreenId());
induceHistService.save(induceHist);
}
//保存诱导状态信息
if(Objects.nonNull(greenwaveinduces) && param.getFlg()==1) {
greenwaveinduces.setInducesCount(Objects.isNull(greenwaveinduces.getInducesCount()) ? 0 : greenwaveinduces.getInducesCount() + ((param.getFlg()==1)?1:0));
greenwaveinduces.setStatus(param.getFlg()==1?1:0);
if (Objects.nonNull(greenwaveinduces)) {
greenwaveinduces.setInducesCount(Objects.isNull(greenwaveinduces.getInducesCount()) ? 0 : greenwaveinduces.getInducesCount() + ((param.getFlg() == 1) ? 1 : 0));
greenwaveinduces.setStatus(param.getFlg() == 1 ? 1 : 0);
greenwaveInducesService.saveOrUpdate(greenwaveinduces);
}
}
}
@Override
public String uploadFile(BufferedImage image,String directoryName, String fileName) {
......
......@@ -93,9 +93,9 @@ public class InducesMonitorTask {
/**
* #绿波调度计划扫描周期
* 5 分钟 300000
* 2 分钟 120000
*/
@Scheduled(fixedRate = 300000)
@Scheduled(fixedRate = 120000)
public void refresh() throws Exception {
long start = System.currentTimeMillis();
AtomicLong synCount = new AtomicLong();
......@@ -106,7 +106,7 @@ public class InducesMonitorTask {
for(GreenwaveInfoPO greenwaveInfoPO :greenwaveInfoPOList) {
AtomicBoolean flag = new AtomicBoolean(false);//是否已发布优化
AtomicReference<Integer> strategyId=new AtomicReference<Integer>(0);
AtomicReference<Integer> strategyId = new AtomicReference<Integer>(0);
//1、查询所有绿波带路口信息,获取路口下的绿波策略计划
List<GreenwaveCrossPO> greenwaveCrossList = greenwaveCrossMapper.selectByGreenwaveId(greenwaveInfoPO.getId());
greenwaveCrossList.stream().forEach(o -> {
......@@ -115,7 +115,7 @@ public class InducesMonitorTask {
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("策略计划--->"+greenwaveInfoPO.getId()+"=="+strategyPlanInfoEntity.getPlanDetails());
System.out.println("策略计划--->" + greenwaveInfoPO.getId() + "==" + strategyPlanInfoEntity.getPlanDetails());
//2、检查绿波时段,判断是否在绿波时段内,如果不在,则判断是否执行过上屏操作,如果执行过,则调用下屏服务(此出屏幕自动处理,无需逻辑)
//[{"dailyPlanId":1,"weeks":[1,2,3,4,5]}]
List<StrategyControlDetailList.ExecutePlan.PlanDetail> planDetails = new ArrayList<>();
......@@ -175,16 +175,16 @@ public class InducesMonitorTask {
// 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) {
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(greenOptHistEntity.getCreateTime());
greenwaveInducesHist.setGreenId(greenwaveInfoPO.getId());
greenwaveInducesHist.setDir(getDir(greenOptHistEntity.getDir()));
greenwaveInducesHistService.save(greenwaveInducesHist);
}else{
greenwaveInducesHist=greenwaveInducesHistList.get(0);
} else {
greenwaveInducesHist = greenwaveInducesHistList.get(0);
}
greenwaveInducesHist.setStrategyId(strategyId.get());
greenwaveInducesHist.setStrategyName(greenwaveInfoPO.getName());//当前策略名称
......@@ -192,9 +192,9 @@ public class InducesMonitorTask {
greenwaveInducesHist.setControlOptTimes(greenOptHistEntity.getControlTime() + "|" + DateUtil.format(DateUtil.addSecond(greenOptHistEntity.getControlTime(), greenOptHistEntity.getControlDuration()), Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));//执行时段
}
greenwaveInducesHist.setType(greenOptHistEntity.getType());// 执行策略
String upDown="";
String upDown = "";
// 计算绿波速度变化趋势
if(Objects.nonNull(greenwaveInducesHist.getMinSpeed()) && Objects.nonNull(greenwaveInducesHist.getMaxSpeed()) && Objects.nonNull(greenOptHistEntity.getMinSpeed()) && Objects.nonNull(greenOptHistEntity.getMaxSpeed())) {
if (Objects.nonNull(greenwaveInducesHist.getMinSpeed()) && Objects.nonNull(greenwaveInducesHist.getMaxSpeed()) && Objects.nonNull(greenOptHistEntity.getMinSpeed()) && Objects.nonNull(greenOptHistEntity.getMaxSpeed())) {
if (greenwaveInducesHist.getMinSpeed() > greenOptHistEntity.getMinSpeed() || greenwaveInducesHist.getMaxSpeed() > greenOptHistEntity.getMaxSpeed()) {
upDown = "▼ ";
}
......@@ -219,26 +219,26 @@ public class InducesMonitorTask {
messageParam.setFlg(1);
messageParam.setGreenId(greenwaveInfoPO.getId());
messageParam.setContents(new String[]{(upDown+(Objects.nonNull(greenOptHistEntity.getMinSpeed())?greenOptHistEntity.getMinSpeed().intValue()+"-":"")+(Objects.nonNull(greenOptHistEntity.getMaxSpeed())?greenOptHistEntity.getMaxSpeed().intValue():""))+"km/h"});
messageParam.setContents(new String[]{(upDown + (Objects.nonNull(greenOptHistEntity.getMinSpeed()) ? greenOptHistEntity.getMinSpeed().intValue() + "-" : "") + (Objects.nonNull(greenOptHistEntity.getMaxSpeed()) ? greenOptHistEntity.getMaxSpeed().intValue() : "")) + "km/h"});
messageParam.setType("TFMH");
try {
if(greenwaveInducesHist.getStatus()==0||greenwaveInducesHist.getModifyTime().before(greenOptHistEntity.getCreateTime())) {
if (greenwaveInducesHist.getStatus() == 0 || greenwaveInducesHist.getModifyTime().before(greenOptHistEntity.getCreateTime())) {
LambdaQueryWrapper<GreenwaveInduces> greenwaveInducesQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesQueryWrapper.eq(GreenwaveInduces::getGreenId, greenwaveInfoPO.getId());
greenwaveInducesQueryWrapper.eq(GreenwaveInduces::getDir, getDir(greenOptHistEntity.getDir()));
List<GreenwaveInduces> greenwaveInducesList = greenwaveInducesService.list(greenwaveInducesQueryWrapper);
for(GreenwaveInduces greenwaveCross :greenwaveInducesList){
for (GreenwaveInduces greenwaveCross : greenwaveInducesList) {
LambdaQueryWrapper<InduceTemplate> induceTemplateQueryWrapper = new LambdaQueryWrapper<>();
induceTemplateQueryWrapper.eq(InduceTemplate::getEquipCode, greenwaveCross.getEquipCode());
induceTemplateQueryWrapper.eq(InduceTemplate::getDefaultTemplate, 1);//筛选默认模板进行自动发送,目前屏幕轮播参数无效
List<InduceTemplate> induceTemplateList=induceTemplateService.list(induceTemplateQueryWrapper);
for(InduceTemplate induceTemplate:induceTemplateList) {
List<InduceTemplate> induceTemplateList = induceTemplateService.list(induceTemplateQueryWrapper);
for (InduceTemplate induceTemplate : induceTemplateList) {
messageParam.setTemplateId(induceTemplate.getId());
messageParam.setInduceId(greenwaveCross.getId());
messageParam.setEquipCode(greenwaveCross.getEquipCode());
messageParam.setPlayorder(1);//induceTemplateList.size()
messageParam.setDuration(greenwaveCross.getDuration());
if ( greenwaveInducesHist.getControlOptTimes().split("\\|").length > 0 && DateUtil.isBetween(new Date(), DateUtil.parse(greenwaveInducesHist.getControlOptTimes().split("\\|")[0], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND), DateUtil.parse(greenwaveInducesHist.getControlOptTimes().split("\\|")[1], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND))) {
if (greenwaveInducesHist.getControlOptTimes().split("\\|").length > 0 && DateUtil.isBetween(new Date(), DateUtil.parse(greenwaveInducesHist.getControlOptTimes().split("\\|")[0], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND), DateUtil.parse(greenwaveInducesHist.getControlOptTimes().split("\\|")[1], Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND))) {
messageParam.setStartTime(greenwaveInducesHist.getControlOptTimes().split("\\|")[0]);
messageParam.setEndTime(greenwaveInducesHist.getControlOptTimes().split("\\|")[1]);
} else {
......@@ -259,48 +259,53 @@ public class InducesMonitorTask {
}
greenwaveInducesHistService.updateById(greenwaveInducesHist);
synCount.getAndIncrement();
log.info("同步绿波状态信息成功->" + greenwaveInfoPO.getName()+greenwaveInducesHist.getDir());
log.info("同步绿波状态信息成功->" + greenwaveInfoPO.getName() + greenwaveInducesHist.getDir());
}
}
}
//如果没有绿波方案则调用下屏服务
else{
else {
LambdaQueryWrapper<GreenwaveInducesHist> greenwaveInducesHistQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesHistQueryWrapper.eq(GreenwaveInducesHist::getGreenId, greenwaveInfoPO.getId());
List<GreenwaveInducesHist> greenwaveInducesHistList = greenwaveInducesHistService.list(greenwaveInducesHistQueryWrapper);
greenwaveInducesHistList.stream().forEach(n -> {
//调用下屏
try {
// try {
if (n.getStatus() == 1) {
MessageParam messageParam = new MessageParam();
messageParam.setFlg(2);
LambdaQueryWrapper<GreenwaveInduces> greenwaveInducesQueryWrapper = new LambdaQueryWrapper<>();
greenwaveInducesQueryWrapper.eq(GreenwaveInduces::getGreenId, greenwaveInfoPO.getId());
List<GreenwaveInduces> greenwaveInducesList = greenwaveInducesService.list(greenwaveInducesQueryWrapper);
greenwaveInducesList.stream().forEach(v -> {
messageParam.setEquipCode(v.getEquipCode());
messageParam.setSourceId(v.getSourceId());
for (GreenwaveInduces greenwaveInduces : greenwaveInducesList) {
messageParam.setEquipCode(greenwaveInduces.getEquipCode());
messageParam.setSourceId(greenwaveInduces.getSourceId());
messageParam.setGreenId(greenwaveInduces.getGreenId());
messageParam.setInduceId(greenwaveInduces.getId());
messageParam.setType("TFMH");
//屏蔽此处功能,因为上屏的时候可以设置生效时间
try {
induceSendService.send(messageParam);
//保存绿波状态
n.setStatus(0);
n.setModifyTime(new Date());
Thread.sleep(1000);
} catch (TemplateException e) {
log.info("发送下屏信息异常" + e.getMessage());
} catch (IOException e) {
log.info(e.getMessage());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (TemplateException e) {
log.info("发送下屏信息异常"+e.getMessage());
}
log.info("发送下屏信息成功.");
});
}
} catch (Exception e) {
log.error("发送下屏信息失败");
}
//保存绿波状态
n.setStatus(0);
n.setModifyTime(new Date());
// } catch (Exception e) {
// log.error("发送下屏信息失败"+e.getMessage());
// }
greenwaveInducesHistService.updateById(n);
log.info("同步绿波状态信息(下屏)->" + greenwaveInfoPO.getName()+"####"+n.getDir());
synCount.getAndIncrement();
log.info("同步绿波状态信息(下屏)->" + greenwaveInfoPO.getName() + "####" + n.getDir());
// synCount.getAndIncrement();
});
}
}
......
......@@ -5,7 +5,7 @@
<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 2;
select * from t_strategy_green_opt_hist where `green_id` = #{greenId} and `control_method`=1 and TIMESTAMPDIFF(SECOND,`control_time`, now()) &lt; `control_duration` order by create_time desc limit 2;
</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