故障报警更新

master
one 2023-12-05 08:21:51 +08:00
parent 3a493b2510
commit 0111e33f7d
6 changed files with 192 additions and 88 deletions

View File

@ -10,75 +10,75 @@ public enum BreakConstant {
/** /**
* *
*/ */
GET001("GTX001","vehicleStatus",0), GTX001("GTX001","车辆状态预警",0),
/** /**
* *
*/ */
GTX002("GTX002","chargingStatus",0), GTX002("GTX002","充电状态预警",0),
/** /**
* *
*/ */
GTX003("GTX003","operatingStatus",0), GTX003("GTX003","运行状态预警",0),
/** /**
* SOC * SOC
*/ */
GTX004("GTX004","socStatus",0), GTX004("GTX004","SOC预警",0),
/** /**
* *
*/ */
GTX005("GTX005","chargingEnergyStorageStatus",0), GTX005("GTX005","可充电储能装置工作状态预警",0),
/** /**
* *
*/ */
GTX006("GTX006","driveMotorStatus",0), GTX006("GTX006","驱动电机状态预警",0),
/** /**
* *
*/ */
GTX007("GTX007","positionStatus",0), GTX007("GTX007","定位是否有效预警",0),
/** /**
* EPS * EPS
*/ */
GTO0001("GTO001","epsStatus",0), GTO0001("GTO001","EPS工作状态预警",0),
/** /**
* EAS * EAS
*/ */
GTO0002("GTO002","easStatus",0), GTO0002("GTO002","EAS工作状态预警",0),
/** /**
* PTC * PTC
*/ */
GTO003("GTO003","ptcStatus",0), GTO003("GTO003","PTC工作状态预警",0),
/** /**
* DCDC * DCDC
*/ */
GTO004("GTO004","dcdcStatus",0), GTO004("GTO004","DCDC工作状态预警",0),
/** /**
* EPS * EPS
*/ */
GTO005("GTO005","epsStatus",0), GTO005("GTO005","EPS工作状态预警",0),
/** /**
* CHG * CHG
*/ */
GTO006("GTO006","chgStatus",0), GTO006("GTO006","CHG工作状态预警",0),
/** /**
* ABS * ABS
*/ */
GTO007("GTO007","absStatus",0), GTO007("GTO007","ABS工作状态预警",0),
/** /**
* MCU * MCU
*/ */
GTO008("GTO008","mcuStatus",0), GTO008("GTO008","MCU工作状态预警",0),
/** /**
* *
*/ */
GTB001("GTB001","heatingStatus",0), GTB001("GTB001","动力电池加热状态预警",0),
/** /**
* *
*/ */
GTB002("GTB002","batteryStatus",0), GTB002("GTB002","动力电池当前状态预警",0),
/** /**
* *
*/ */
GTB003("GTB003","batteryInsulationStatus",0); GTB003("GTB003","动力电池保温状态预警",0);
private String key; private String key;
private String value; private String value;
private Integer status; private Integer status;

View File

@ -1,8 +1,10 @@
package com.god.data.service.impl; package com.god.data.service.impl;
import com.god.common.redis.service.RedisService; import com.god.common.redis.service.RedisService;
import com.god.data.common.domain.BreakConstant;
import com.god.data.common.domain.CarMessage; import com.god.data.common.domain.CarMessage;
import com.god.data.service.EventService; import com.god.data.service.EventService;
import com.god.data.strategy.FaultCodeStrategy;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -20,6 +22,13 @@ import java.util.List;
@Service(value = "FaultAlarm") @Service(value = "FaultAlarm")
@Log4j2 @Log4j2
public class FaultAlarmEvent implements EventService { public class FaultAlarmEvent implements EventService {
/**
*
*/
@Autowired
private FaultCodeStrategy faultCodeStrategy;
@Autowired @Autowired
private RedisService redisService; private RedisService redisService;
@ -35,73 +44,21 @@ public class FaultAlarmEvent implements EventService {
@Override @Override
public void execute(CarMessage carMessage) { public void execute(CarMessage carMessage) {
log.info("故障报警事件执行"); log.info("故障报警事件执行");
HashMap<String, List<String>> stringListHashMap = new HashMap<>();
//创建集合存故障码 //创建集合存故障码
ArrayList<String> strings = new ArrayList<>(); ArrayList<String> strings = new ArrayList<>();
//判断车辆目前的报错故障,添加对应的故障码 faultCodeStrategy.addFaultCodeIfNecessary(carMessage,strings);
if (carMessage.getVehicleStatus()==1){
strings.add("GTX001");
}
if (carMessage.getChargingStatus()==1){
strings.add("GTX002");
}
if (carMessage.getOperatingStatus()==1){
strings.add("GTX003");
}
if (carMessage.getSocStatus()==1){
strings.add("GTX004");
}
if (carMessage.getChargingEnergyStorageStatus()==1){
strings.add("GTX005");
}
if (carMessage.getDriveMotorStatus()==1){
strings.add("GTX006");
}
if (carMessage.getPositionStatus()==1){
strings.add("GTX007");
}
if (carMessage.getEasStatus()==1){
strings.add("GTO002");
}
if (carMessage.getPtcStatus()==1){
strings.add("GTO003");
}
if (carMessage.getEpsStatus()==1){
strings.add("GTO005");
}
if (carMessage.getAbsStatus()==1){
strings.add("GTO007");
}
if (carMessage.getMcuStatus()==1){
strings.add("GTO008");
}
if (carMessage.getHeatingStatus()==1){
strings.add("GTB001");
}
if (carMessage.getBatteryStatus()==1){
strings.add("GTB002");
}
if (carMessage.getBatteryInsulationStatus()==1){
strings.add("GTB003");
}
if (carMessage.getDcdcStatus()==1){
strings.add("GTO004");
}
if (carMessage.getChgStatus()==1){
strings.add("GTO006");
}
//把对应的故障码集合存入rabbitmq //把对应的故障码集合存入rabbitmq
if (strings.size()>0){ if (!strings.isEmpty()){
strings.forEach(obj -> {
BreakConstant breakConstant = BreakConstant.valueOf(obj);
String value = breakConstant.value();
});
rabbitTemplate.convertAndSend("god.car.fault.alarm",strings); rabbitTemplate.convertAndSend("god.car.fault.alarm",strings);
} }
} }
@Override @Override
public void remove(String event) { public void remove(String event) {

View File

@ -34,7 +34,7 @@ public class RealTimeTrajectoryEvent implements EventService {
/** /**
* *
*/ */
public static final String LOCUS = "locus"; public static final String ALL_LOCUS_INFO = "all_locus_info";
/** /**
* *
@ -59,11 +59,10 @@ public class RealTimeTrajectoryEvent implements EventService {
bigDecimals.add(carMessage.getLongitude()); bigDecimals.add(carMessage.getLongitude());
bigDecimals.add(carMessage.getLatitude()); bigDecimals.add(carMessage.getLatitude());
//预防redis空值 避免查询不存在的key返回导致无法操作 //预防redis空值 避免查询不存在的key返回导致无法操作
if (redisService.hasKey(LOCUS + carMessage.getVin())){//vin轨迹的键存在 if (redisService.hasKey(ALL_LOCUS_INFO)){//vin轨迹的键存在
//获取键 对应的 值 //获取键 对应的 值
Map<String, Object> cacheMap = redisService.getCacheMap(LOCUS + carMessage.getVin()); Map<String, Object> cacheMap = redisService.getCacheMap(ALL_LOCUS_INFO);
//前端需要格式 [ [..] , [..] ] 所以需要再次新建一个集合来存之前的集合 //前端需要格式 [ [..] , [..] ] 所以需要再次新建一个集合来存之前的集合
ArrayList<ArrayList<BigDecimal>> orDefault = (ArrayList<ArrayList<BigDecimal>>) cacheMap.getOrDefault(carMessage.getVin(), new ArrayList<ArrayList<BigDecimal>>()); ArrayList<ArrayList<BigDecimal>> orDefault = (ArrayList<ArrayList<BigDecimal>>) cacheMap.getOrDefault(carMessage.getVin(), new ArrayList<ArrayList<BigDecimal>>());
addLocusRedisInfo(cacheMap, addLocusRedisInfo(cacheMap,
orDefault, orDefault,
@ -91,7 +90,7 @@ public class RealTimeTrajectoryEvent implements EventService {
String vin) { String vin) {
lists.add(list); lists.add(list);
map.put(vin,lists); map.put(vin,lists);
redisService.setCacheMap(LOCUS + vin,map); redisService.setCacheMap(ALL_LOCUS_INFO,map);
log.info("实时轨迹事件执行"); log.info("实时轨迹事件执行");
} }

View File

@ -0,0 +1,23 @@
package com.god.data.strategy;
import com.god.data.common.domain.CarMessage;
import java.util.ArrayList;
import java.util.Arrays;
/**
* Description:
*
* @Author: sun-cool-boy
* @Date: 2023/12/4
* @info:
*/
public interface FaultCodeStrategy {
/**
*
* @param carMessage
* @param faultCodes
*/
void addFaultCodeIfNecessary(CarMessage carMessage, ArrayList<String> faultCodes);
}

View File

@ -0,0 +1,75 @@
package com.god.data.strategy.impl;
import com.god.data.common.domain.CarMessage;
import com.god.data.strategy.FaultCodeStrategy;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
/**
* Description:
*
* @Author: sun-cool-boy
* @Date: 2023/12/4
* @info:
*/
@Service
public class FaultCodeStrategyImpl implements FaultCodeStrategy {
@Override
public void addFaultCodeIfNecessary(CarMessage carMessage, ArrayList<String> strings) {
//判断车辆目前的报错故障,添加对应的故障码
if (carMessage.getVehicleStatus()==1){
strings.add("GTX001");
}
if (carMessage.getChargingStatus()==1){
strings.add("GTX002");
}
if (carMessage.getOperatingStatus()==1){
strings.add("GTX003");
}
if (carMessage.getSocStatus()==1){
strings.add("GTX004");
}
if (carMessage.getChargingEnergyStorageStatus()==1){
strings.add("GTX005");
}
if (carMessage.getDriveMotorStatus()==1){
strings.add("GTX006");
}
if (carMessage.getPositionStatus()==1){
strings.add("GTX007");
}
if (carMessage.getEasStatus()==1){
strings.add("GTO002");
}
if (carMessage.getPtcStatus()==1){
strings.add("GTO003");
}
if (carMessage.getEpsStatus()==1){
strings.add("GTO005");
}
if (carMessage.getAbsStatus()==1){
strings.add("GTO007");
}
if (carMessage.getMcuStatus()==1){
strings.add("GTO008");
}
if (carMessage.getHeatingStatus()==1){
strings.add("GTB001");
}
if (carMessage.getBatteryStatus()==1){
strings.add("GTB002");
}
if (carMessage.getBatteryInsulationStatus()==1){
strings.add("GTB003");
}
if (carMessage.getDcdcStatus()==1){
strings.add("GTO004");
}
if (carMessage.getChgStatus()==1){
strings.add("GTO006");
}
}
}

View File

@ -26,10 +26,7 @@ public class SJZTest {
* *
*/ */
public static final String ALL_LOCUS_INFO = "all_locus_info"; public static final String ALL_LOCUS_INFO = "all_locus_info";
/**
*
*/
public static final String LOCUS = "locus";
@Autowired @Autowired
private RedisService redisService; private RedisService redisService;
@ -99,6 +96,59 @@ public class SJZTest {
} }
} }
@Test
public void test3(){
CarMessage one = CarMessage.builder()
.vin("vin123")
.longitude(BigDecimal.valueOf(22.4512439))
.latitude(BigDecimal.valueOf(23.49785))
.build();
CarMessage two = CarMessage.builder()
.vin("vin123")
.longitude(BigDecimal.valueOf(44.91230))
.latitude(BigDecimal.valueOf(55.45456))
.build();
CarMessage three = CarMessage.builder()
.vin("vin123")
.longitude(BigDecimal.valueOf(100.41235))
.latitude(BigDecimal.valueOf(100.41235))
.build();
ArrayList<CarMessage> list = new ArrayList<>();
list.add(one);
list.add(two);
list.add(three);
for (CarMessage carMessage : list) {
//新建一个用于存经纬度的集合 保存精度和维度
ArrayList<BigDecimal> bigDecimals = new ArrayList<>();
bigDecimals.add(carMessage.getLongitude());
bigDecimals.add(carMessage.getLatitude());
if (redisService.hasKey(ALL_LOCUS_INFO)){//vin轨迹的键存在
//获取键 对应的 值
Map<String, Object> cacheMap = redisService.getCacheMap(ALL_LOCUS_INFO);
//前端需要格式 [ [..] , [..] ] 所以需要再次新建一个集合来存之前的集合
ArrayList<ArrayList<BigDecimal>> orDefault = (ArrayList<ArrayList<BigDecimal>>) cacheMap.getOrDefault(carMessage.getVin(), new ArrayList<ArrayList<BigDecimal>>());
addLocusRedisInfo(cacheMap,
orDefault,
bigDecimals,
carMessage.getVin());
}else {
//代表当前vin没有实时轨迹相关数据 直接新建集合存储即可
addLocusRedisInfo(new HashMap<>(),
new ArrayList<>(),
bigDecimals,
carMessage.getVin());
}
}
}
private void addLocusRedisInfo(Map<String, Object> map, private void addLocusRedisInfo(Map<String, Object> map,
ArrayList<ArrayList<BigDecimal>> lists, ArrayList<ArrayList<BigDecimal>> lists,
ArrayList<BigDecimal> list, ArrayList<BigDecimal> list,