Commit 07602a7b authored by kang.nie@inzymeits.com's avatar kang.nie@inzymeits.com
Browse files

提交代码

parent e0c7be76
package com.ssi.entity.vo;
import com.ssi.entity.VmsTosOrders;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
import java.util.List;
@Getter
@Setter
@ToString
public class VmsTosOrdersVo extends VmsTosOrders {
private int pageIndex = 1;
private int pageSize = 10;
/**
* 0-当前页,1-所有
*/
private int exportType;
private Date queryStartTime;
private Date queryEndTime;
private String orderDescription;
private List<Integer> vehicleTaskLabels;
//加个判断字段subTaskType 0:缓冲区,1 2:扭锁站 其他不改变
private Integer subTaskType;
}
package com.ssi.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
import cn.afterturn.easypoi.excel.annotation.Excel;
@Getter
@Setter
@ToString
public class VmsVehicleAlertHistoryVo {
/**
*
*/
private String id;
/**
*
*/
@ApiModelProperty(value = "")
private String vin;
/**
* 故障代码
*/
@ApiModelProperty(value = "故障代码")
@Excel(name = "报文Id", orderNum = "3", width = 35)
private String faultCode;
/**
* SPN
*/
@ApiModelProperty(value = "SPN")
@Excel(name = "SPN", orderNum = "5", width = 35)
private String spn;
/**
* FMI
*/
@ApiModelProperty(value = "FMI")
@Excel(name = "FMI", orderNum = "4", width = 35)
private String fmi;
/**
* 报警状态 0:未解除 1:已解除
*/
@ApiModelProperty(value = "报警状态 0:未解除 1:已解除")
private Integer troubleStatus;
/**
* 报警时间
*/
@ApiModelProperty(value = "报警时间")
@Excel(name = "报警时间", orderNum = "8", width = 35)
private Date alarmTime;
/**
* 报警位置
*/
@ApiModelProperty(value = "报警位置")
private String alarmPosition;
/**
* 解除报警时间
*/
@ApiModelProperty(value = "解除报警时间")
@Excel(name = "解除时间", orderNum = "9", width = 35)
private Date relieveAlarmTime;
/**
* 车辆编号
*/
@ApiModelProperty(value = "车辆编号")
@Excel(name = "车辆编号", orderNum = "1", width = 35)
private String vehicleNum;
/**
* 故障等级 1 一级 2 二级 3 三级
*/
@ApiModelProperty(value = "故障等级")
@Excel(name = "报警等级", orderNum = "6", replace = {"一般故障_1","严重故障_2","报警_3","事件_4"},width = 35)
private String faultGrade;
/**
* 描述
*/
@ApiModelProperty(value = "故障描述")
private String describition;
/**
* 故障名称
*/
@Excel(name = "报警名称", orderNum = "2", width = 35)
private String faultName;
/**
* 故障类型,V:整车,I:智能,P:平台,OBU:OBU
*/
@Excel(name = "报警类型", orderNum = "7",replace = {"整车系统_V","智能系统_I","车管平台_P","OBU_OBU"}, width = 35)
private String faultType;
@ApiModelProperty(value = "故障源类别")
@Excel(name = "故障源类别", orderNum = "7")
private String faultSourceType;
@ApiModelProperty(value = "故障源类别名称")
@Excel(name = "故障源类别名称", orderNum = "8")
private String faultSourceTypeName;
@ApiModelProperty(value = "故障源识别码")
@Excel(name = "故障源识别码", orderNum = "9")
private String faultLabel;
@ApiModelProperty(value = "故障诊断仪码")
@Excel(name = "故障诊断仪码", orderNum = "10")
private String faultDmCode;
@ApiModelProperty(value = "故障模块")
@Excel(name = "故障模块", orderNum = "11")
private String faultModule;
@ApiModelProperty(value = "故障原因")
@Excel(name = "故障原因", orderNum = "12")
private String faultReason;
@ApiModelProperty(value = "故障解决方案")
@Excel(name = "故障解决方案", orderNum = "13")
private String faultSolution;
}
package com.ssi.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
@Getter
@Setter
@ToString
public class VmsVehicleEmergencyVo {
/**
*id
*/
private Long id;
/**
* 车辆编号
*/
private String vehicleNum;
/**
*vin
*/
@ApiModelProperty(value = "vin")
private String vin;
/**
*
*/
@ApiModelProperty(value = "急停下发时间")
private Date receiveTime;
/**
*
*/
@ApiModelProperty(value = "急停执行成功反馈时间")
private Date feedbackTime;
/**
*
*/
@ApiModelProperty(value = "急停解除时间")
private Date relieveTime;
/**
*
*/
@ApiModelProperty(value = "解除执行成功反馈时间")
private Date relieveSuccessTime;
/**
* 结果: 1:紧停成功,2:紧停失败,17:取消紧停成功,18:取消紧停失败
*/
@ApiModelProperty(value = "结果")
private Integer result;
}
package com.ssi.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import java.util.List;
@Getter
@Setter
@ToString
public class VmsVehicleFaultAnalysisVo extends DayHourTrend implements Serializable {
/**
*vin
*/
@ApiModelProperty(value = "")
private String vin;
/**
* 故障代码
*/
@ApiModelProperty(value = "故障代码")
private String faultCode;
/**
* 车辆编号
*/
@ApiModelProperty(value = "车辆编号")
private String vehicleNum;
/**
* 故障名称
*/
private String faultName;
private List<AnalysisInfoVo> list;
@Data
public static class AnalysisInfoVo implements Serializable {
/**
* 故障次数
*/
private Integer faultNum = 0;
/**
* 故障类型,V:整车,I:智能,P:平台,OBU:OBU
*/
private String faultType;
/**
* 故障等级 1 一级 2 二级 3 三级
*/
private String faultGrade;
}
}
package com.ssi.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Getter
@Setter
@ToString
public class VmsVehicleFaultVo extends DayHourTrend implements Serializable {
/**
*vin
*/
@ApiModelProperty(value = "")
private String vin;
/**
* 故障代码
*/
@ApiModelProperty(value = "故障代码")
private String faultCode;
/**
* 车辆编号
*/
@ApiModelProperty(value = "车辆编号")
private String vehicleNum;
/**
* 故障等级 1 一级 2 二级 3 三级
*/
@ApiModelProperty(value = "故障等级")
private String faultGrade;
/**
* 故障名称
*/
private String faultName;
/**
* 故障类型,V:整车,I:智能,P:平台,OBU:OBU
*/
private String faultType;
/**
* 故障次数
*/
private Integer faultNum = 0;
}
package com.ssi.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
@Getter
@Setter
@ToString
public class VmsVehicleRemoteInstructionVo {
/**
*id
*/
private Long id;
//指令类型:APP、AUTO(自动驾驶)、CONSOLE(远控台)
@ApiModelProperty(value = "")
private String instructionType;
//1、(APP、远控台)接管 ;2、(APP、远控台)退出接管;3、自动驾驶状态启动
@ApiModelProperty(value = "")
private Byte instruction;
@ApiModelProperty(value = "")
private String vin;
@ApiModelProperty(value = "车辆编号")
private String vehicleNum;
@ApiModelProperty(value = "操作人mac地址")
private String mac;
@ApiModelProperty(value = "操作人")
private String operator;
@ApiModelProperty(value = "指令内容")
private String instructionContent;
@ApiModelProperty(value = "")
private Byte result;
@ApiModelProperty(value = "")
private Date createTime;
}
package com.ssi.exception;
import lombok.Getter;
import lombok.Setter;
/**
* 自定义异常
*/
@Getter
@Setter
public class CustomizeException extends RuntimeException {
private String msg;
private int code = -1;
public CustomizeException(String msg) {
super(msg);
this.msg = msg;
}
public CustomizeException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
public CustomizeException(String msg, int code) {
super(msg);
this.msg = msg;
this.code = code;
}
public CustomizeException(String msg, int code, Throwable e) {
super(msg, e);
this.msg = msg;
this.code = code;
}
}
package com.ssi.exception;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.ssi.constant.enums.Status;
import com.ssi.response.SSIResponse;
import org.apache.shiro.authz.AuthorizationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException;
/**
* 异常处理器
*/
@RestControllerAdvice
public class CustomizeExceptionHandler {
private Logger logger = LoggerFactory.getLogger(CustomizeExceptionHandler.class);
/**
* 处理自定义异常
*/
@ExceptionHandler(CustomizeException.class)
public SSIResponse handleCustomizeException(CustomizeException e) {
return SSIResponse.no(Status.ERROR);
}
@ExceptionHandler(NoHandlerFoundException.class)
public SSIResponse handlerNoFoundException(Exception e) {
String idStr = IdWorker.getIdStr();
logger.error("全局跟踪号" + idStr + "开始:");
logger.error(e.getMessage(), e);
logger.error("全局跟踪号" + idStr + "結束:");
return SSIResponse.no(Status.NOTFOUND, "路径不存在,请检查路径是否正确,全局跟踪号" + idStr);
}
@ExceptionHandler(DuplicateKeyException.class)
public SSIResponse handleDuplicateKeyException(DuplicateKeyException e) {
String idStr = IdWorker.getIdStr();
logger.error("全局跟踪号" + idStr + "开始:");
logger.error(e.getMessage(), e);
logger.error("全局跟踪号" + idStr + "結束:");
return SSIResponse.no("数据库中已存在该记录,全局跟踪号" + idStr);
}
@ExceptionHandler(AuthorizationException.class)
public SSIResponse handleAuthorizationException(AuthorizationException e) {
String idStr = IdWorker.getIdStr();
logger.error("全局跟踪号" + idStr + "开始:");
logger.error(e.getMessage(), e);
logger.error("全局跟踪号" + idStr + "結束:");
return SSIResponse.no(Status.UNAUTHORIZED, "没有权限,请联系管理员授权,全局跟踪号" + idStr);
}
// 入参校验异常
@ExceptionHandler(MethodArgumentNotValidException.class)
public SSIResponse handleDuplicateKeyException(MethodArgumentNotValidException e) {
String idStr = IdWorker.getIdStr();
logger.error("全局跟踪号" + idStr + "开始:");
logger.error(e.getMessage(), e);
logger.error("全局跟踪号" + idStr + "結束:");
return SSIResponse.no( "全局跟踪号" + idStr);
}
@ExceptionHandler(Exception.class)
public SSIResponse handleException(Exception e) {
String idStr = IdWorker.getIdStr();
logger.error("全局跟踪号" + idStr + "开始:");
logger.error(e.getMessage(), e);
logger.error("全局跟踪号" + idStr + "結束:");
return SSIResponse.no("请求异常,全局跟踪号" + idStr);
}
}
package com.ssi.kafka.listener;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ssi.entity.VmsFaultCode;
import com.ssi.entity.FaultRecord;
import com.ssi.entity.VmsVehicle;
import com.ssi.mapper.VmsFaultCodeMapper;
import com.ssi.mapper.VmsVehicleMapper;
import com.ssi.websocket.AbnormalWebSocketServer;
import org.apache.commons.collections.CollectionUtils;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 车辆故障报警kafka监听器
*/
@Component
public class AbnormalListener {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private VmsFaultCodeMapper vmsFaultCodeMapper;
@Autowired
private VmsVehicleMapper vmsVehicleMapper;
//@KafkaListener(topics = {"HARBOR_ALERT_UI"})
public void run(ConsumerRecord<String, String> consumerRecord, Acknowledgment acknowledgment) {
try {
String value = consumerRecord.value();
logger.info("kafka异常报警消息消费:" + value);
FaultRecord record = JSON.parseObject(value, FaultRecord.class);
String vin = record.getVin();
VmsVehicle vehicle = vmsVehicleMapper.selectOne(
new LambdaQueryWrapper<VmsVehicle>().eq(VmsVehicle::getVin, vin));
record.setVehicleNum(vehicle.getVehicleNum());
String fmi = record.getFmi();
String spn = record.getSpn();
try {
List<VmsFaultCode> faultCodeList = vmsFaultCodeMapper.selectList(
new LambdaQueryWrapper<VmsFaultCode>()
.eq(VmsFaultCode::getFmi, fmi)
.eq(VmsFaultCode::getSpn, spn));
if (CollectionUtils.isNotEmpty(faultCodeList)) {
VmsFaultCode vmsFaultCode = faultCodeList.get(0);
record.setFaultName(vmsFaultCode.getFaultName());
record.setDescription(vmsFaultCode.getDescribition());
record.setFaultGrade(vmsFaultCode.getFaultGrade());
record.setFaultType(vmsFaultCode.getFaultType());
record.setFaultSolution(vmsFaultCode.getFaultSolution());
}
} catch (Exception e) {
logger.error("获取faultCode异常:{}", e);
}
AbnormalWebSocketServer.sendFaultRecord(record);
} catch (Exception e) {
logger.error("kafka异常报警消息消费:" + e.getMessage());
} finally {
acknowledgment.acknowledge();
}
}
}
package com.ssi.kafka.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ssi.constant.RedisKey;
import com.ssi.constant.enums.V2xEventTypeEnums;
import com.ssi.entity.VehicleRoad;
import com.ssi.entity.VmsFaultCode;
import com.ssi.entity.VmsVehicleAlertProcess;
import com.ssi.model.RedisDataModel;
import com.ssi.service.VmsFaultCodeService;
import com.ssi.service.VmsVehicleAlertProcessService;
import com.ssi.utils.DateUtils;
import com.ssi.websocket.AbnormalWebSocketServer;
import com.ssi.websocket.VehicleRoadCoordinationWebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @author SunnyHotz
* @PackageName:com.ssi.kafka.listener
* @ClassName:FaultCodeListener
* @Description:
* @date 2022/10/31 14:30
*/
@Component
@Slf4j
public class FaultCodeListener {
@Autowired
private VmsVehicleAlertProcessService vmsVehicleAlertProcessService;
@Autowired
private AbnormalWebSocketServer abnormalWebSocketServer;
@Autowired
private RedisDataModel redisDataModel;
@Autowired
private VmsFaultCodeService vmsFaultCodeService;
@KafkaListener(topics = {"HARBOR_D001_TOPIC"})
public void alertFaultCode(ConsumerRecord<String, String> consumerRecord, Acknowledgment acknowledgment){
try {
String value = consumerRecord.value();
// log.info("kafka报警信息获取:" + value);
JSONObject jsonObject = JSON.parseObject(value);
// if(jsonObject.getLong("collectTime")<(System.currentTimeMillis()-60000)){
// return;
// }
JSONArray faultItems = jsonObject.getJSONArray("faultItems");
VmsVehicleAlertProcess saveEntity = new VmsVehicleAlertProcess();
saveEntity.setVin(jsonObject.getString("vin"));
saveEntity.setAlarmPosition(jsonObject.getString("longitude")+","+jsonObject.getString("latitude"));
saveEntity.setAlarmTime(jsonObject.getDate("collectTime"));
if(faultItems.size()>0){
for(int i=0;i<faultItems.size();i++){
JSONObject faultItem = faultItems.getJSONObject(i);
/* if(!Arrays.asList("522","523").contains(faultItem.getString("fmi"))){
return;
}*/
VmsFaultCode qryEntity = vmsFaultCodeService.lambdaQuery()
.eq(VmsFaultCode::getFaultCode,
"A1".equalsIgnoreCase(faultItem.getString("faultCode"))?
"000000".concat(faultItem.getString("faultCode")):faultItem.getString("faultCode"))
.eq(VmsFaultCode::getSpn, faultItem.getString("spn"))
.eq(VmsFaultCode::getFmi, faultItem.getString("fmi"))
// .eq(VmsFaultCode::getFaultType, "P")
.one();
// log.info("报警信息查询对象:{}",qryEntity);
if(Objects.isNull(qryEntity)){
continue;
}
saveEntity.setFaultCode(faultItem.getString("faultCode"));
saveEntity.setFmi(faultItem.getString("fmi"));
saveEntity.setSpn(faultItem.getString("spn"));
saveEntity.setFaultName(qryEntity.getFaultName());
if("A1".equalsIgnoreCase(saveEntity.getFaultCode())){
vmsVehicleAlertProcessService.save(saveEntity);
}
}
//存入redis
redisDataModel.set(RedisKey.ERROR_TOS_INFO.getKeyPrefix().concat(jsonObject.getString("vin")),JSONObject.toJSONString(saveEntity),30000l);
}
// abnormalWebSocketServer.sendInfo(JSON.toJSONString(saveEntity));
} catch (Exception e) {
log.error("kafka报警信消费:" + e.getMessage());
} finally {
acknowledgment.acknowledge();
}
}
}
package com.ssi.kafka.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ssi.model.RedisDataModel;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Component;
/**
* @author SunnyHotz
* @PackageName:com.ssi.kafka.listener
* @ClassName:TrafficLightStatusListener
* @Description:
* @date 2022/9/8 08:35
*/
@Component
@Slf4j
public class TrafficLightStatusListener {
@Autowired
private RedisDataModel redisDataModel;
// @KafkaListener(topics = {"TRAFFIC_CROSS_PHASE_LAMP_STATUS"})
public void run(ConsumerRecord<String, String> consumerRecord, Acknowledgment acknowledgment) {
try {
String value = consumerRecord.value();
log.info("kafka路灯状态消息消费:" + value);
JSONObject jsonObject = JSON.parseObject(value);
JSONArray crossPhaseLampStatus = jsonObject.getJSONArray("crossPhaseLampStatus");
for (int i = 0; i < crossPhaseLampStatus.size(); i++) {
JSONObject crossInfo = crossPhaseLampStatus.getJSONObject(i);
String crossID = crossInfo.getString("crossID");
String phaseLampStatusList = crossInfo.getString("phaseLampStatusList");
redisDataModel.hset("ivccs:vms:traffic:light",crossID,phaseLampStatusList);
}
} catch (Exception e) {
log.error("kafka异常报警消息消费:" + e.getMessage());
} finally {
acknowledgment.acknowledge();
}
}
}
package com.ssi.kafka.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ssi.constant.RedisKey;
import com.ssi.constant.URL;
import com.ssi.entity.VmsFaultCode;
import com.ssi.entity.VmsVehicleAlertProcess;
import com.ssi.service.VmsFaultCodeService;
import com.ssi.service.VmsVehicleAlertProcessService;
import com.ssi.utils.RestTemplateUtil;
import com.ssi.utils.SpringUtils;
import com.ssi.utils.grid.MercatorVehicle;
import com.ssi.utils.grid.RealTimeVehicleSchedule;
import com.ssi.websocket.AbnormalWebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.Timer;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author SunnyHotz
* @PackageName:com.ssi.kafka.listener
* @ClassName:FaultCodeListener
* @Description:
* @date 2022/10/31 14:30
*/
@Component
@Slf4j
public class VehicleRealTimeInfoListener {
private static RealTimeVehicleSchedule scheduleApi = RealTimeVehicleSchedule.getInstance();
private final Map<String,MercatorVehicle> cachedMap = new ConcurrentHashMap<>();
@Value("${command-url}")
private String commandUrl;
public void processRoutingConflict(Map<String, Map<String, Object>> messages){
//实时更新数据
scheduleApi.pushRealTimeVehicleData(messages);
}
public void processVehicleCloseArea(Map<String, Object> messages){
scheduleApi.pushSingleVehicleData(messages);
String vid = String.format("%s-%s", messages.get("vehicleNum"), messages.get("vin"));
if(cachedMap.containsKey(vid)){
messages.put("areaDisplay",1);
}
}
public void clearOutVersionVehicle(Integer versoinNo){
scheduleApi.clearOutVersionVehicle(versoinNo);
}
public void invokeForOrder(MercatorVehicle mercatorVehicle){
if(Objects.isNull(mercatorVehicle)){
return;
}
JSONObject reqEntity = new JSONObject();
reqEntity.put("vin",mercatorVehicle.getVid().split("-")[1]);
if(mercatorVehicle.waitGridSize()>0&&!cachedMap.containsKey(mercatorVehicle.getVid())){//当速度大于0&&阻塞队列>0
log.info("grids ====>vin :{}下发停止指令",mercatorVehicle.getVid());
//下发停止指令
if(sendOperatorOrder(reqEntity, URL.To_ODBU_CANCEL_TASK, 1))
SpringUtils.setLocalCache(RedisKey.DYNAMIC_FENCE_ALERT.getKeyPrefix(),reqEntity.getString("vin"),"封闭区触发任务暂停");
cachedMap.put(mercatorVehicle.getVid(), mercatorVehicle);
}else if(mercatorVehicle.waitGridSize()<1&&mercatorVehicle.getGridsSize()>0&&cachedMap.containsKey(mercatorVehicle.getVid())){
log.info("grids ====>vin :{}下发恢复指令",mercatorVehicle.getVid());
//下发恢复指令
if(!sendOperatorOrder(reqEntity, URL.To_ODBU_RECOVERY_TASK, 1)) {
SpringUtils.setLocalCache(RedisKey.DYNAMIC_FENCE_ORDER_ERROR.getKeyPrefix(), reqEntity.getString("vin"), "下发车辆恢复任务指令,执行异常");
}
SpringUtils.clearStatus(RedisKey.DYNAMIC_FENCE_ALERT.getKeyPrefix(),reqEntity.getString("vin"));
cachedMap.remove(mercatorVehicle.getVid());
}
}
private boolean sendOperatorOrder(JSONObject reqEntity,String url,int retryCount) {
if(retryCount>=0){
ResponseEntity<JSONObject> responseEntity = RestTemplateUtil.getInstance().postForEntity(commandUrl.concat(url), reqEntity, JSONObject.class);
JSONObject resp = responseEntity.getBody();
if(resp.getJSONObject("status")!=null&&"0000".equalsIgnoreCase(resp.getJSONObject("status").getString("code"))){
return true;
}
log.warn("封闭区域触发指令下发结果:{}",resp);
return sendOperatorOrder(reqEntity,url,--retryCount);
}
return false;
}
public boolean isContainVin(String vin){
return this.cachedMap.containsKey(vin);
}
/*
@KafkaListener(topics = {"HARBOR_D00A_TOPIC"})
public void alertFaultCode(ConsumerRecord<String, String> consumerRecord, Acknowledgment acknowledgment){
try {
String value = consumerRecord.value();
// log.info("kafka报警信息获取:" + value);
JSONObject jsonObject = JSON.parseObject(value);
if(jsonObject.getLong("collectTime")<(System.currentTimeMillis()-5000)){
return;
}
// scheduleApi.pushRealTimeVehicleData();
} catch (Exception e) {
log.error("kafka报警信消费:" + e.getMessage());
} finally {
acknowledgment.acknowledge();
}
}
*/
}
package com.ssi.kafka.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ssi.constant.enums.V2xEventTypeEnums;
import com.ssi.entity.VehicleRoad;
import com.ssi.utils.DateUtils;
import com.ssi.utils.SpringUtils;
import com.ssi.websocket.VehicleRoadCoordinationWebSocketServer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 车路协调kafka监听器
*/
@Component
public class VehicleRoadCoordinationListener {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@KafkaListener(topics = {"VMS_V2X_EVENT"})
public void run(ConsumerRecord<String, String> consumerRecord, Acknowledgment acknowledgment) {
try {
String value = consumerRecord.value();
// logger.info("kafka车路协调消费:" + value);
VehicleRoad record = JSON.parseObject(value, VehicleRoad.class);
record.setTime(DateUtils.format(new Date(),DateUtils.DATE_PATTERN));
record.setTypeName(V2xEventTypeEnums.find(record.getType()).getDescript());
VehicleRoadCoordinationWebSocketServer.sendMessage(record);
} catch (Exception e) {
logger.error("kafka车路协调消费:" + e.getMessage());
} finally {
acknowledgment.acknowledge();
}
}
@KafkaListener(topics = {"VMS_CHARGING_ACTION"})
public void chargingAction(ConsumerRecord<String, String> consumerRecord, Acknowledgment acknowledgment) {
try {
//
String value = consumerRecord.value();
logger.info("车辆充电状态信息:" + value);
JSONObject record = JSON.parseObject(value);
record.put("reciveTime",System.currentTimeMillis());
SpringUtils.setLocalCache("VMS_CHARGING_ACTION",record.getString("vin"),record);
} catch (Exception e) {
logger.error("车辆充电状态信息异常:",e);
} finally {
acknowledgment.acknowledge();
}
}
}
package com.ssi.kafka.model;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.SendResult;
import org.springframework.stereotype.Component;
import org.springframework.util.concurrent.ListenableFuture;
import java.util.List;
import java.util.Map;
/**
* 推送数据到kafka,此类暂未使用
*/
@Component
@Slf4j
public class KafkaRecordModel {
@Value("${spring.websocket.history.record:vms_history_record}")
private String topic;
@Value("${meilan.faceRecongition.record:MEILAN_FACE_RECOGNITION_TOPIC}")
private String faceRecongitionTopic;
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void messageBroadcast(List<Map<String, Map<String, Object>>> messages) {
long timestamp = System.currentTimeMillis();
messages.forEach(message -> {
String msg = String.format(
"{\"key\":\"all\",\"timestamp\":%s,\"id\":\"%s\",\"value\":%s,\"msgId\":\"vms_history_data\"}",
timestamp, timestamp, JSON.toJSONString(message));
ListenableFuture<SendResult<String, String>> send
= kafkaTemplate.send(topic, null, timestamp, null, msg);
send.addCallback(result -> {
log.debug(String.format("推送成功:%s", "result"));
}, ex -> {
if (ex != null) {
log.error("推送失败!", ex);
}
});
});
}
public void sendFaceRecongition(String data) {
JSONObject jsonObject = JSON.parseObject(data);
long timestamp = System.currentTimeMillis();
String vin = jsonObject.getString("vin");
kafkaTemplate.send(faceRecongitionTopic, null, timestamp, vin, data);
kafkaTemplate.flush();
}
}
package com.ssi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ssi.entity.CargoShipConfigInfo;
import com.ssi.entity.vo.CargoShipConfigDto;
import java.util.List;
/**
* @Entity com.ssi.entity.CargoShipConfigInfo
*/
public interface CargoShipConfigInfoMapper extends BaseMapper<CargoShipConfigInfo> {
List<CargoShipConfigDto> queryOnWorkingList(CargoShipConfigDto cargoShipConfigDto);
void updateByIsActive();
}
package com.ssi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ssi.entity.DataQualityInspection;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DataQualityInspectionMapper extends BaseMapper<DataQualityInspection> {
}
package com.ssi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ssi.entity.V2xEvent;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface V2xEventMapper extends BaseMapper<V2xEvent> {
@Select("select * from v2x_event order by time desc LIMIT 10")
List<V2xEvent> selectHistory();
}
package com.ssi.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ssi.entity.vo.VehicleCommandVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @author yinjiangqiao
* @email
* @date 2022-07-16 09:32:59
*/
@Mapper
public interface VehicleCommandMapper{
IPage<VehicleCommandVo> vehicleTypeCommandList(IPage<VehicleCommandVo> page, @Param("params") Map<String, Object> params);
List<VehicleCommandVo> exportCommandList(@Param("params") Map<String, Object> params);
}
package com.ssi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ssi.entity.VmsVehicleEmergencyStop;
import com.ssi.entity.vo.VmsVehicleEmergencyVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/**
* @author zhang liyao
* @email
* @date 2020-07-17 09:47:00
*/
@Mapper
public interface VehicleEmergencyMapper extends BaseMapper<VmsVehicleEmergencyStop> {
IPage<VmsVehicleEmergencyVo> getEmergencyRecordList(IPage<VmsVehicleEmergencyVo> page, @Param("param") Map<String, Object> params);
}
package com.ssi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ssi.entity.VmsVehicleEmergencyStop;
import com.ssi.entity.VmsVehicleRemoteInstruction;
import com.ssi.entity.vo.VmsVehicleEmergencyVo;
import com.ssi.entity.vo.VmsVehicleRemoteInstructionVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @author zhang liyao
* @email
* @date 2020-07-17 09:47:00
*/
@Mapper
public interface VehicleRemoteInstructionMapper extends BaseMapper<VmsVehicleRemoteInstruction> {
IPage<VmsVehicleRemoteInstructionVo> getRemoteInstructionList(IPage<VmsVehicleRemoteInstructionVo> page, @Param("param") Map<String, Object> params);
List<String> getAppChargedTask();
}
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