Commit 77827f7f authored by zhouleilei's avatar zhouleilei

Merge remote-tracking branch 'origin/master'

parents 4e36080c c8bd4dae
package net.wanji.opt.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.synthesis.pojo.SynthesisOptimizeLogEntity;
/**
* @author duanruiming
* @date 2024/11/06 17:20
*/
public interface SynthesisOptimizeLogInfoMapper extends BaseMapper<SynthesisOptimizeLogEntity> {
}
package net.wanji.opt.kafka;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.opt.dao.mapper.SynthesisOptimizeLogInfoMapper;
import net.wanji.opt.synthesis.pojo.SynthesisOptimizeLogEntity;
import net.wanji.opt.synthesis.pojo.SynthesisOptimizeLogInfo;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.BeanUtils;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.listener.KafkaListenerErrorHandler;
import org.springframework.kafka.listener.ListenerExecutionFailedException;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* @author duanruiming
* @date 2024/11/05 20:45
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class SynthesisConsumerHandler implements KafkaListenerErrorHandler {
@Resource
private SynthesisOptimizeLogInfoMapper synthesisOptimizeLogInfoMapper;
private String str = "{\n" +
" \"cross_id\":\"cross0001\", \n" +
"\t\"control_id\":\"123456\", \n" +
"\t\"provider\":\"hisense\", \n" +
"\t\"plan_no\":4, \n" +
"\t\"cycle\":100, \n" +
"\t\"offset\":10, \n" +
"\t\"ring_cnt\":3, \n" +
"\t\"ring_set\":[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]],\n" +
"\t\"seq_id\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], \n" +
"\t\"red_time\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n" +
"\t\"yellow_time\":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],\n" +
"\t\"green_time\":[20,0,10,20,20,30,60,0,0,0,0,0,0,0,0,0],\n" +
"\t\"green_flash\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n" +
"\t\"person_flash\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n" +
"\t\"min_green\":[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3], \n" +
"\t\"max_green\":[100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100],\n" +
"\t\"direction\":[[[1,2],[3,4]],[[5,6],[7,8]],[[9,10],[11,12]]],\n" +
"\t\"timestamp\":\"2024-11-10 10:10:10\",\n" +
"\t\"strategy\":0,\n" +
"\t\"greenbelt_id\": \"road1\"\n" +
"}";
@Transactional
@KafkaListener(topics = {"t_synthesis_optimize_log_info"})
public void crossSchemeOptLogSave(ConsumerRecord<Object, Object> record, Acknowledgment acknowledgment) throws Exception {
try {
String data = String.valueOf(record.value());
if (StringUtils.isNotBlank(data)) {
ObjectMapper instance = JacksonUtils.getInstance();
SynthesisOptimizeLogInfo synthesisOptimizeLogInfo = instance.readValue(data, SynthesisOptimizeLogInfo.class);
SynthesisOptimizeLogEntity synthesisOptimizeLogEntity = new SynthesisOptimizeLogEntity();
BeanUtils.copyProperties(synthesisOptimizeLogInfo, synthesisOptimizeLogEntity);
synthesisOptimizeLogEntity.setRingSet(instance.writeValueAsString(synthesisOptimizeLogInfo.getRingSet()));
synthesisOptimizeLogEntity.setDirection(instance.writeValueAsString(synthesisOptimizeLogInfo.getDirection()));
synthesisOptimizeLogEntity.setSeqId(instance.writeValueAsString(synthesisOptimizeLogInfo.getSeqId()));
synthesisOptimizeLogEntity.setRedTime(instance.writeValueAsString(synthesisOptimizeLogInfo.getRedTime()));
synthesisOptimizeLogEntity.setYellowTime(instance.writeValueAsString(synthesisOptimizeLogInfo.getYellowTime()));
synthesisOptimizeLogEntity.setGreenTime(instance.writeValueAsString(synthesisOptimizeLogInfo.getGreenTime()));
synthesisOptimizeLogEntity.setGreenFlash(instance.writeValueAsString(synthesisOptimizeLogInfo.getGreenFlash()));
synthesisOptimizeLogEntity.setPersonFlash(instance.writeValueAsString(synthesisOptimizeLogInfo.getPersonFlash()));
synthesisOptimizeLogEntity.setMinGreen(instance.writeValueAsString(synthesisOptimizeLogInfo.getMinGreen()));
synthesisOptimizeLogEntity.setMaxGreen(instance.writeValueAsString(synthesisOptimizeLogInfo.getMaxGreen()));
synthesisOptimizeLogInfoMapper.insert(synthesisOptimizeLogEntity);
}
acknowledgment.acknowledge();
} catch (Exception e) {
log.error("消费神思方案优化历史数据异常:", e);
throw new Exception(e);
}
}
@Override
@NonNull
public Object handleError(Message<?> message, ListenerExecutionFailedException e) {
return new Object();
}
@Override
@NonNull
public Object handleError(Message<?> message, ListenerExecutionFailedException exception, Consumer<?, ?> consumer) {
String errorMessage = String.format("监听主题:%s,消费者详情:%s,异常信息:%s,消息详情:%s",
consumer.listTopics(), consumer.groupMetadata(), exception, message);
log.error(errorMessage);
return KafkaListenerErrorHandler.super.handleError(message, exception, consumer);
}
}
\ No newline at end of file
...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation; ...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dao.mapper.SynthesisOptimizeLogInfoMapper;
import net.wanji.opt.po.StrategyControlDataEntity; import net.wanji.opt.po.StrategyControlDataEntity;
import net.wanji.opt.synthesis.pojo.StrategyControlVO; import net.wanji.opt.synthesis.pojo.StrategyControlVO;
import net.wanji.opt.synthesis.service.StrategyControlService; import net.wanji.opt.synthesis.service.StrategyControlService;
...@@ -28,6 +29,8 @@ public class StrategyControlController { ...@@ -28,6 +29,8 @@ public class StrategyControlController {
@Resource @Resource
private StrategyControlService strategyControlService; private StrategyControlService strategyControlService;
@Resource
SynthesisOptimizeLogInfoMapper synthesisOptimizeLogInfoMapper;
@ApiOperation(value = "策略控制信息操作", notes = "策略控制信息操作", @ApiOperation(value = "策略控制信息操作", notes = "策略控制信息操作",
response = JsonViewObject.class, response = JsonViewObject.class,
......
...@@ -25,7 +25,7 @@ public class StrategyControlDataReq { ...@@ -25,7 +25,7 @@ public class StrategyControlDataReq {
private Integer strategy; private Integer strategy;
private String schedule_start; private String schedule_start;
private String schedule_end; private String schedule_end;
private List<Time_table> time; private List<Time_table> time_table;
/** /**
* 调控频率(秒),策略下发的频率(只针对失衡和绿波带有效) * 调控频率(秒),策略下发的频率(只针对失衡和绿波带有效)
*/ */
......
package net.wanji.opt.synthesis.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @author duanruiming
* @date 2024/11/06 18:25
*/
@Data
@TableName("t_synthesis_optimize_log_info")
public class SynthesisOptimizeLogEntity {
@TableId(type = IdType.AUTO)
private Integer id; // 自增ID
@TableField("cross_id")
private String crossId; // 路口Id
@TableField("control_id")
private String controlId; // 信号机路口id
private String provider; // 信号机厂商hisense/ehualu
@TableField("plan_no")
private Integer planNo; // 基础配时方案号
private Integer cycle; // 周期
private Integer offset; // 相位差
@TableField("ring_cnt")
private Integer ringCnt; // 环数量
@TableField("ring_set")
private String ringSet; // 环中相位顺序
@TableField("seq_id")
private String seqId; // 相位id
@TableField("red_time")
private String redTime; // 红灯时间
@TableField("yellow_time")
private String yellowTime; // 黄灯时间
@TableField("green_time")
private String greenTime; // 绿灯时间
@TableField("green_flash")
private String greenFlash; // 绿闪时间
@TableField("person_flash")
private String personFlash; // 行闪时间
@TableField("min_green")
private String minGreen; // 最小绿
@TableField("max_green")
private String maxGreen; // 最大绿
private String direction; // 相位方向
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date timestamp; // 结束时间
private Integer strategy; // 策略类型,0=绿波带,1=失衡
@TableField("greenbelt_id")
private String greenbeltId; // 所属绿波带id(失衡可为空)
}
\ No newline at end of file
package net.wanji.opt.synthesis.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.Date;
/**
* @author duanruiming
* @date 2024/11/06 17:18
*/
@Data
public class SynthesisOptimizeLogInfo {
@TableId(type = IdType.AUTO)
private Integer id; // 自增ID
@TableField("cross_id")
@JsonProperty("cross_id")
private String crossId; // 路口Id
@TableField("control_id")
@JsonProperty("control_id")
private String controlId; // 信号机路口id
private String provider; // 信号机厂商hisense/ehualu
@TableField("plan_no")
@JsonProperty("plan_no")
private Integer planNo; // 基础配时方案号
private Integer cycle; // 周期
private Integer offset; // 相位差
@TableField("ring_cnt")
@JsonProperty("ring_cnt")
private Integer ringCnt; // 环数量
@TableField("ring_set")
@JsonProperty("ring_set")
private int[][][] ringSet; // 环中相位顺序
@TableField("seq_id")
@JsonProperty("seq_id")
private int[] seqId; // 相位id
@TableField("red_time")
@JsonProperty("red_time")
private int[] redTime; // 红灯时间
@TableField("yellow_time")
@JsonProperty("yellow_time")
private int[] yellowTime; // 黄灯时间
@TableField("green_time")
@JsonProperty("green_time")
private int[] greenTime; // 绿灯时间
@TableField("green_flash")
@JsonProperty("green_flash")
private int[] greenFlash; // 绿闪时间
@TableField("person_flash")
@JsonProperty("person_flash")
private int[] personFlash; // 行闪时间
@TableField("min_green")
@JsonProperty("min_green")
private int[] minGreen; // 最小绿
@TableField("max_green")
@JsonProperty("max_green")
private int[] maxGreen; // 最大绿
private Integer[][][] direction; // 相位方向
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date timestamp; // 结束时间
private Integer strategy; // 策略类型,0=绿波带,1=失衡
@TableField("greenbelt_id")
@JsonProperty("greenbelt_id")
private String greenbeltId; // 所属绿波带id(失衡可为空)
}
\ No newline at end of file
...@@ -8,6 +8,7 @@ import net.wanji.opt.synthesis.pojo.Result; ...@@ -8,6 +8,7 @@ import net.wanji.opt.synthesis.pojo.Result;
import net.wanji.opt.synthesis.pojo.StrategyControlReq; import net.wanji.opt.synthesis.pojo.StrategyControlReq;
import net.wanji.opt.synthesis.service.PushStrategyControlService; import net.wanji.opt.synthesis.service.PushStrategyControlService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
...@@ -18,9 +19,11 @@ import org.springframework.stereotype.Service; ...@@ -18,9 +19,11 @@ import org.springframework.stereotype.Service;
@Slf4j @Slf4j
public class PushStrategyControlServiceImpl implements PushStrategyControlService { public class PushStrategyControlServiceImpl implements PushStrategyControlService {
@Value("${synthesis.strategyUrl}")
private String url;
@Override @Override
public Result push(StrategyControlReq req) throws Exception { public Result push(StrategyControlReq req) throws Exception {
String url = ""; //String url = "http://37.12.182.50:8082/api/traffic/strategy/info";
try { try {
ObjectMapper mapper = JacksonUtils.getInstance(); ObjectMapper mapper = JacksonUtils.getInstance();
String resultStr = RestTemplateTool.post(url, mapper.writeValueAsString(req)); String resultStr = RestTemplateTool.post(url, mapper.writeValueAsString(req));
......
...@@ -70,6 +70,7 @@ public class StrategyControlServiceImpl implements StrategyControlService { ...@@ -70,6 +70,7 @@ public class StrategyControlServiceImpl implements StrategyControlService {
BeanUtils.copyProperties(entity, dataVO); BeanUtils.copyProperties(entity, dataVO);
entity.setTime(JacksonUtils.getInstance().writeValueAsString(dataVO.getTime())); entity.setTime(JacksonUtils.getInstance().writeValueAsString(dataVO.getTime()));
if (StringUtils.equals("insert", dataVO.getAction())) { if (StringUtils.equals("insert", dataVO.getAction())) {
entity.setId(null);
strategyControlInfoMapper.insert(entity); strategyControlInfoMapper.insert(entity);
} else if (StringUtils.equals("update", dataVO.getAction())) { } else if (StringUtils.equals("update", dataVO.getAction())) {
strategyControlInfoMapper.updateById(entity); strategyControlInfoMapper.updateById(entity);
...@@ -100,10 +101,10 @@ public class StrategyControlServiceImpl implements StrategyControlService { ...@@ -100,10 +101,10 @@ public class StrategyControlServiceImpl implements StrategyControlService {
timeTable.setWeek(item.getWeek()); timeTable.setWeek(item.getWeek());
timeTables.add(timeTable); timeTables.add(timeTable);
}); });
detailData.setTime(timeTables); detailData.setTime_table(timeTables);
detailData.setFreq(dataVO.getFrequency()); detailData.setFreq(dataVO.getFrequency());
detailData.setStatus(dataVO.getStatus()); detailData.setStatus(dataVO.getStatus());
detailData.setAction(dataVO.getAction()); detailData.setAction(StringUtils.equals("update", dataVO.getAction()) ? "insert" : dataVO.getAction());
dataReqList.add(detailData); dataReqList.add(detailData);
req.setData(dataReqList); req.setData(dataReqList);
} }
......
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