From b4ad3e4f4739697f14b8ab9002e613bf267f96c7 Mon Sep 17 00:00:00 2001 From: lijiayao <13831655+xiao-yao-charge-forward@user.noreply.gitee.com> Date: Sun, 7 Apr 2024 21:41:38 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E7=94=B5=E5=AD=90=E5=9B=B4?= =?UTF-8?q?=E6=A0=8F=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- couplet-common/couplet-common-event/pom.xml | 28 ++ .../couplet/analyze/msg/utils/MsgUtils.java | 338 ++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../common/redis/service/RedisService.java | 14 + couplet-common/pom.xml | 1 + .../couplet-analyze-msg/pom.xml | 7 +- .../service/impl/BreakdownServiceImpl.java | 58 ++- .../impl/ElectronicFenceServiceImpl.java | 21 +- .../impl/breakdown/BreakdownEvent.java | 3 +- couplet-modules/couplet-analyze/pom.xml | 69 ---- couplet-modules/couplet-business/pom.xml | 5 - .../server/controller/FenceController.java | 4 +- .../business/server/service/FenceService.java | 3 +- .../server/service/impl/FenceServiceImpl.java | 33 +- .../src/main/resources/bootstrap.yml | 2 - .../com/couplet/mq/service/MqConsumer.java | 329 ++++++++--------- .../src/main/resources/bootstrap.yml | 6 +- pom.xml | 45 --- 18 files changed, 603 insertions(+), 364 deletions(-) create mode 100644 couplet-common/couplet-common-event/pom.xml create mode 100644 couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java create mode 100644 couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/couplet-common/couplet-common-event/pom.xml b/couplet-common/couplet-common-event/pom.xml new file mode 100644 index 0000000..f0150b5 --- /dev/null +++ b/couplet-common/couplet-common-event/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + com.couplet + couplet-common + 3.6.3 + + + couplet-common-event + + 事件系统 + + 17 + 17 + UTF-8 + + + + + com.couplet + couplet-common-redis + + + + diff --git a/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java b/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java new file mode 100644 index 0000000..1e2800a --- /dev/null +++ b/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java @@ -0,0 +1,338 @@ +package com.couplet.analyze.msg.utils; + +import com.couplet.analyze.msg.domain.CoupletMsgData; +import lombok.extern.slf4j.Slf4j; + +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Random; + +/** + * @author DongXiaoDong + * @version 1.0 + * @date 2024/4/6 14:12 + * @description + */ +@Slf4j +public class MsgUtils { + + public static String generateGTA() { + // 生成四位以"GTA"开头的字符串 + String prefix = "GTA"; + // 生成三位随机数字 + String randomNumber = generateRandomNumber(4); + // 拼接字符串 + return prefix + randomNumber; + } + + public static String generateRandomNumber(int length) { + // 生成随机数 + Random random = new Random(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + // 生成0到9之间的随机数字,并转换为字符串 + sb.append(random.nextInt(10)); + } + return sb.toString(); + } + + /** + * 将16进制字符串转换为ASCII字符串 + * @param s 16进制字符串 + * @return ASCII字符串 + */ + public static String hexToString(String s) { + if (s == null || s.equals("")) { + return null; + } + s = s.replace(" ", ""); + byte[] baKeyword = new byte[s.length() / 2]; + for (int i = 0; i < baKeyword.length; i++) { + try { + baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16)); + } catch (Exception e) { + e.printStackTrace(); + } + } + try { + s = new String(baKeyword, StandardCharsets.UTF_8); + } catch (Exception e1) { + e1.printStackTrace(); + return s; + } + return s; + } + + /** + * 将解析后的数据进行截取封装 + * @param str + * @return + */ + public static List sendMsg(String str) { + List coupletMsgDataList = new ArrayList<>(); + CoupletMsgData coupletMsgData = new CoupletMsgData(); + + coupletMsgData.setVin(str.substring(1,18)); + + log.info("vin=="+coupletMsgData.getVin()); + + //时间 + String tim =str.substring(18,31); + long timestamp = Long.parseLong(tim); + + Date date = new Date(timestamp); + coupletMsgData.setCreateTime(date); + + //经度 + String lt = str.substring(31,42); + // 如果末尾是零,则舍去 + int endIndex = lt.length() - 1; + while (lt.charAt(endIndex) == '0'){ + endIndex--; + } + + String longitude = lt.substring(0, endIndex + 1); + coupletMsgData.setLongitude(longitude); + + //维度 + String latitudeIndex =str.substring(42,52); + int endIndexT = latitudeIndex.length() - 1; + while (latitudeIndex.charAt(endIndexT) == '0'){ + endIndexT--; + } + + String latitude = latitudeIndex.substring(0, endIndexT + 1); + coupletMsgData.setLatitude(latitude); + + //速度speed + String speed =str.substring(52,58); + coupletMsgData.setSpeed(speed); + + //里程 + BigDecimal mileage= new BigDecimal(str.substring(58,69)); + mileage=mileage.stripTrailingZeros(); + coupletMsgData.setMileage(mileage); + + //总电压 + String voltage =str.substring(69,75); + while (voltage.endsWith("0")) { + voltage = voltage.substring(0, voltage.length() - 1); // 去除末尾的零 + } + coupletMsgData.setVoltage(voltage); + + //总电流 + String current =str.substring(75,80); + while (current.endsWith("0")){ + current=current.substring(0,current.length()-1); + } + coupletMsgData.setCurrent(current); + + //绝缘电阻 resistance + String res =str.substring(80,89); + String resistance = res.substring(0, 5); + coupletMsgData.setResistance(resistance); + + //档位 + String gear =str.substring(89,90); + coupletMsgData.setGear(gear); + + //accelerationPedal 加速踏板行程值 + String accelerationPedal =str.substring(90,91); + coupletMsgData.setAccelerationPedal(accelerationPedal); + + //brakePedal 制动踏板行程值 + String brakePedal =str.substring(92,93); + coupletMsgData.setBrakePedal(brakePedal); + + //fuelConsumptionRate 燃料消耗率 + String fuelConsumptionRate =str.substring(94,99); + coupletMsgData.setFuelConsumptionRate(fuelConsumptionRate); + + //motorControllerTemperature 电机控制器温度 + String motorControllerTemperature =str.substring(99,105); + while (motorControllerTemperature.endsWith("0")){ + motorControllerTemperature=motorControllerTemperature.substring(0,motorControllerTemperature.length()-1); + } + coupletMsgData.setMotorControllerTemperature(motorControllerTemperature); + + //motorSpeed 电机转速 + String motorSpeed =str.substring(105,110); + coupletMsgData.setMotorSpeed(motorSpeed); + + //motorTorque 电机转矩 + String motorTorque =str.substring(110,114); + while (motorTorque.endsWith("0")){ + motorTorque=motorTorque.substring(0,motorTorque.length()-1); + } + coupletMsgData.setMotorTorque(motorTorque); + + //motorTemperature 电机温度 + String motorTemperature =str.substring(114,120); + while (motorTemperature.endsWith("0")){ + motorTemperature=motorTemperature.substring(0,motorTemperature.length()-1); + } + coupletMsgData.setMotorTemperature(motorTemperature); + + //motorVoltage 电机电压 + String motorVoltage =str.substring(120,125); + while (motorVoltage.endsWith("0")){ + motorVoltage=motorVoltage.substring(0,motorVoltage.length()-1); + } + coupletMsgData.setMotorVoltage(motorVoltage); + + //motorCurrent 电机电流 + String motorCurrent =str.substring(125,133); + while (motorCurrent.endsWith("0")){ + motorCurrent=motorCurrent.substring(0,motorCurrent.length()-1); + } + coupletMsgData.setMotorCurrent(motorCurrent); + + //remainingBattery 动力电池剩余电量SOC + BigDecimal remainingBattery = new BigDecimal(str.substring(133,138)); + coupletMsgData.setRemainingBattery(remainingBattery); + + //maximumFeedbackPower 当前状态允许的最大反馈功率 + String maximumFeedbackPower =str.substring(139,144); + while (maximumFeedbackPower.endsWith("0")){ + maximumFeedbackPower=maximumFeedbackPower.substring(0,maximumFeedbackPower.length()-1); + } + coupletMsgData.setMaximumFeedbackPower(maximumFeedbackPower); + + //maximumDischargePower 当前状态允许最大放电功率 + String maximumDischargePower =str.substring(145,151); + while (maximumDischargePower.endsWith("0")){ + maximumDischargePower=maximumDischargePower.substring(0,maximumDischargePower.length()-1); + } + coupletMsgData.setMaximumDischargePower(maximumDischargePower); + + //selfCheckCounter BMS自检计数器 + String selfCheckCounter =str.substring(151,153); + String selfCheckCounterReplace = selfCheckCounter.replace("0", ""); + coupletMsgData.setSelfCheckCounter(selfCheckCounterReplace); + + //totalBatteryCurrent 动力电池充放电电流 + String totalBatteryCurrent =str.substring(153,158); + while (totalBatteryCurrent.endsWith("0")){ + totalBatteryCurrent=totalBatteryCurrent.substring(0,totalBatteryCurrent.length()-1); + } + coupletMsgData.setTotalBatteryCurrent(totalBatteryCurrent); + + //totalBatteryVoltage 动力电池负载端总电压V3 + String totalBatteryVoltage =str.substring(158,164); + while (totalBatteryVoltage.endsWith("0")){ + totalBatteryVoltage=totalBatteryVoltage.substring(0,totalBatteryVoltage.length()-1); + } + coupletMsgData.setTotalBatteryVoltage(totalBatteryVoltage); + + //singleBatteryMaxVoltage 单次最大电压 + String singleBatteryMaxVoltage =str.substring(164,168); + while (singleBatteryMaxVoltage.endsWith("0")){ + singleBatteryMaxVoltage=singleBatteryMaxVoltage.substring(0,singleBatteryMaxVoltage.length()-1); + } + coupletMsgData.setSingleBatteryMaxVoltage(singleBatteryMaxVoltage); + + //singleBatteryMinVoltage 单体电池最低电压 + String singleBatteryMinVoltage =str.substring(168,172); + while (singleBatteryMinVoltage.endsWith("0")){ + singleBatteryMinVoltage=singleBatteryMinVoltage.substring(0,singleBatteryMinVoltage.length()-1); + } + + coupletMsgData.setSingleBatteryMinVoltage(singleBatteryMinVoltage); + + //singleBatteryMaxTemperature 单体电池最高温度 + String singleBatteryMaxTemperature =str.substring(172,178); + while (singleBatteryMaxTemperature.endsWith("0")){ + singleBatteryMaxTemperature=singleBatteryMaxTemperature.substring(0,singleBatteryMaxTemperature.length()-1); + } + coupletMsgData.setSingleBatteryMaxTemperature(singleBatteryMaxTemperature); + + //singleBatteryMinTemperature 单体电池最低温度 + String singleBatteryMinTemperature =str.substring(178,184); + while (singleBatteryMinTemperature.endsWith("0")){ + singleBatteryMinTemperature=singleBatteryMinTemperature.substring(0,singleBatteryMinTemperature.length()-1); + } + coupletMsgData.setSingleBatteryMinTemperature(singleBatteryMinTemperature); + + //availableBatteryCapacity 可用电池容量 + String availableBatteryCapacity =str.substring(184,190); + while (availableBatteryCapacity.endsWith("0")){ + availableBatteryCapacity=availableBatteryCapacity.substring(0,availableBatteryCapacity.length()-1); + } + coupletMsgData.setAvailableBatteryCapacity(availableBatteryCapacity); + + //vehicleStatus 车辆状态 + int vehicleStatus = Integer.parseInt(str.substring(190,191)); + coupletMsgData.setVehicleStatus(vehicleStatus); + + //chargingStatus 充电状态 + int chargingStatus = Integer.parseInt(str.substring(191,192)); + coupletMsgData.setChargingStatus(chargingStatus); + + //operatingStatus 运行状态 + int operatingStatus = Integer.parseInt(str.substring(192,193)); + coupletMsgData.setOperatingStatus(operatingStatus); + + //socStatus SOC + int socStatus = Integer.parseInt(str.substring(193,194)); + coupletMsgData.setSocStatus(socStatus); + + //chargingEnergyStorageStatus 可充电储能装置工作状态 + int chargingEnergyStorageStatus = Integer.parseInt(str.substring(194,195)); + coupletMsgData.setChargingEnergyStorageStatus(chargingEnergyStorageStatus); + + //driveMotorStatus 驱动电机状态 + int driveMotorStatus = Integer.parseInt(str.substring(195,196)); + coupletMsgData.setDriveMotorStatus(driveMotorStatus); + + //positionStatus 定位是否有效 + int positionStatus = Integer.parseInt(str.substring(196,197)); + coupletMsgData.setPositionStatus(positionStatus); + + //easStatus EAS(汽车防盗系统)状态 + int easStatus = Integer.parseInt(str.substring(197,198)); + coupletMsgData.setEasStatus(easStatus); + + //ptcStatus PTC(电动加热器)状态 + int ptcStatus = Integer.parseInt(str.substring(198,199)); + coupletMsgData.setPtcStatus(ptcStatus); + + //epsStatus + int epsStatus = Integer.parseInt(str.substring(199,200)); + coupletMsgData.setEpsStatus(epsStatus); + + //absStatus EPS(电动助力系统)状态 + int absStatus = Integer.parseInt(str.substring(200,201)); + coupletMsgData.setAbsStatus(absStatus); + + //mcuStatus MCU(电机/逆变器)状态 + int mcuStatus = Integer.parseInt(str.substring(201,202)); + coupletMsgData.setMcuStatus(mcuStatus); + + //heatingStatus 动力电池加热状态 + int heatingStatus = Integer.parseInt(str.substring(202,203)); + coupletMsgData.setHeatingStatus(heatingStatus); + + //batteryStatus 动力电池当前状态 + int batteryStatus = Integer.parseInt(str.substring(203,204)); + coupletMsgData.setBatteryStatus(batteryStatus); + + //batteryInsulationStatus 动力电池保温状态 + int batteryInsulationStatus = Integer.parseInt(str.substring(204,205)); + coupletMsgData.setBatteryInsulationStatus(batteryInsulationStatus); + + //dcdcStatus DCDC(电力交换系统)状态 + int dcdcStatus = Integer.parseInt(str.substring(205,206)); + coupletMsgData.setDcdcStatus(dcdcStatus); + + //chgStatus CHG(充电机)状态 + int chgStatus = Integer.parseInt(str.substring(206,207)); + coupletMsgData.setChgStatus(chgStatus); + + coupletMsgDataList.add(coupletMsgData); + + return coupletMsgDataList; + } +} diff --git a/couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..eca240b --- /dev/null +++ b/couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.couplet.common.core.utils.SpringUtils diff --git a/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java b/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java index 3db9232..4d382f6 100644 --- a/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java +++ b/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java @@ -166,8 +166,21 @@ public class RedisService { setOperation.add(it.next()); } return setOperation; + } /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet (final String key, final T dataSet) { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + setOperation.add(dataSet); + return setOperation; } + /** * 获得缓存的set * @@ -179,6 +192,7 @@ public class RedisService { return redisTemplate.opsForSet().members(key); } + /** * 缓存Map * diff --git a/couplet-common/pom.xml b/couplet-common/pom.xml index e1454b0..abf1afa 100644 --- a/couplet-common/pom.xml +++ b/couplet-common/pom.xml @@ -19,6 +19,7 @@ couplet-common-datasource couplet-common-system couplet-common-business + couplet-common-event diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml b/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml index 55191f0..5cac2c7 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml @@ -86,13 +86,10 @@ org.eclipse.paho.client.mqttv3 1.2.5 + com.couplet - couplet-modules-mq - - - com.couplet - couplet-common-business + couplet-common-event diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/BreakdownServiceImpl.java b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/BreakdownServiceImpl.java index b11c941..5563610 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/BreakdownServiceImpl.java +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/BreakdownServiceImpl.java @@ -74,9 +74,7 @@ public class BreakdownServiceImpl extends KeyExpirationEventMessageListener impl //获取过期的key String key = "breakdown"; log.debug("失效+key is:"+ key); - HashSet objects = new HashSet<>(); - objects.add(coupletMsgData); - redisService.setCacheSet(key, objects); + redisService.setCacheSet(key, coupletMsgData); long expireTime = 30; redisService.expire(key, expireTime, TimeUnit.MINUTES); scheduledRedis(); @@ -98,112 +96,108 @@ public class BreakdownServiceImpl extends KeyExpirationEventMessageListener impl } public void scheduledRedis() { - // Get all members of the set - Set members = redisService.getCacheSet("breakdown"); - if (members.size()!=0){ - for (String member : members){ - CoupletMsgData code = JSON.parseObject(member, CoupletMsgData.class); - String vin = code.getVin(); - Set breakdownIds = redisService.getCacheSet(vin+":"+"breakdown"); + String key = "breakdown"; + Set members = redisService.getCacheSet(key); + if (members.size()>0){ + for (CoupletMsgData member : members) { + Set breakdownIds = redisService.getCacheSet(member.getVin()+":"+key); if (breakdownIds.size()==0){ CoupletTroubleCode troubleCode = new CoupletTroubleCode(); troubleCode.setTroubleStartTime(new Date()); - troubleCode.setTroubleVin(code.getVin()); + troubleCode.setTroubleVin(member.getVin()); // 随机生成故障码 String faultCode = MsgUtils.generateGTA(); troubleCode.setTroubleCode(faultCode); // 检查车辆状态,若为0,则设置故障位置为"190" - if(code.getVehicleStatus() == 0) { + if(member.getVehicleStatus() == 0) { troubleCode.setTroublePosition("190"); } // 检查充电状态,若为0,则设置故障位置为"191" - if (code.getChargingStatus() == 0) { + if (member.getChargingStatus() == 0) { troubleCode.setTroublePosition("191"); } // 检查运行状态,若为0,则设置故障位置为"192" - if (code.getOperatingStatus() == 0) { + if (member.getOperatingStatus() == 0) { troubleCode.setTroublePosition("192"); } // 检查电池荷电状态(SOC), 若为0,则设置故障位置为"193" - if (code.getSocStatus() == 0) { + if (member.getSocStatus() == 0) { troubleCode.setTroublePosition("193"); } // 检查充电能源存储状态,若为0,则设置故障位置为"194" - if (code.getChargingEnergyStorageStatus() == 0) { + if (member.getChargingEnergyStorageStatus() == 0) { troubleCode.setTroublePosition("194"); } // 检查驱动电机状态,若为0,则设置故障位置为"195" - if (code.getDriveMotorStatus() == 0) { + if (member.getDriveMotorStatus() == 0) { troubleCode.setTroublePosition("195"); } // 检查定位状态,若为0,则设置故障位置为"196" - if (code.getPositionStatus() == 0) { + if (member.getPositionStatus() == 0) { troubleCode.setTroublePosition("196"); } // 检查电子驻车系统(EAS)状态,若为0,则设置故障位置为"197" - if (code.getEasStatus() == 0) { + if (member.getEasStatus() == 0) { troubleCode.setTroublePosition("197"); } // 检查PTC(正温度系数热敏电阻)状态,若为0,则设置故障位置为"198" - if (code.getPtcStatus() == 0) { + if (member.getPtcStatus() == 0) { troubleCode.setTroublePosition("198"); } // 检查电动助力转向系统(EPS)状态,若为0,则设置故障位置为"199" - if (code.getEpsStatus() == 0) { + if (member.getEpsStatus() == 0) { troubleCode.setTroublePosition("199"); } // 检查防抱死制动系统(ABS)状态,若为0,则设置故障位置为"200" - if (code.getAbsStatus() == 0) { + if (member.getAbsStatus() == 0) { troubleCode.setTroublePosition("200"); } // 检查主控制器(MCU)状态,若为0,则设置故障位置为"201" - if (code.getMcuStatus() == 0) { + if (member.getMcuStatus() == 0) { troubleCode.setTroublePosition("201"); } // 检查加热状态,若为0,则设置故障位置为"202" - if (code.getHeatingStatus() == 0) { + if (member.getHeatingStatus() == 0) { troubleCode.setTroublePosition("202"); } // 检查电池状态,若为0,则设置故障位置为"203" - if (code.getBatteryStatus() == 0) { + if (member.getBatteryStatus() == 0) { troubleCode.setTroublePosition("203"); } // 检查电池绝缘状态,若为0,则设置故障位置为"204" - if (code.getBatteryInsulationStatus() == 0) { + if (member.getBatteryInsulationStatus() == 0) { troubleCode.setTroublePosition("204"); } // 检查直流-直流转换器(DC/DC)状态,若为0,则设置故障位置为"205" - if (code.getDcdcStatus() == 0) { + if (member.getDcdcStatus() == 0) { troubleCode.setTroublePosition("205"); } // 检查充电机(CHG)状态,若为0,则设置故障位置为"206" - if (code.getChgStatus() == 0) { + if (member.getChgStatus() == 0) { troubleCode.setTroublePosition("206"); } remoteTroubleService.newFaultData(troubleCode); - HashSet objects = new HashSet<>(); - objects.add(code.getVin()+":"+code); - redisService.setCacheSet(vin+":"+"breakdown", objects); + redisService.setCacheSet(member.getVin()+":"+key, member.getVin()+":"+member); long expireTime = 30; - redisService.expire(vin+":"+"breakdown", expireTime, TimeUnit.MINUTES); + redisService.expire(member.getVin()+":"+key, expireTime, TimeUnit.MINUTES); } } diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/ElectronicFenceServiceImpl.java b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/ElectronicFenceServiceImpl.java index 6186eb7..fd228be 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/ElectronicFenceServiceImpl.java +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/ElectronicFenceServiceImpl.java @@ -44,11 +44,11 @@ public class ElectronicFenceServiceImpl implements IncidentService { ArrayList fences = new ArrayList<>(); if (redisService.hasKey(fenceKey)) { log.info("电子围栏事件redis存在......."); - redisService.getCacheObject(); - for (String s : fence) { - Fence parseObject = JSON.parseObject(s, Fence.class); - fences.add(parseObject); - } +// redisService.getCacheObject(); +// for (String s : fence) { +// Fence parseObject = JSON.parseObject(s, Fence.class); +// fences.add(parseObject); +// } // jingdu; // longitude; // weidu; @@ -64,10 +64,12 @@ public class ElectronicFenceServiceImpl implements IncidentService { String[] strings = s.split(","); if (strings.length == 2){ + // 经度 Double trim = Double.valueOf(strings[0].trim()); + // 纬度 Double trim1 = Double.valueOf(strings[1].trim()); - boolean a = trim<= Double.valueOf(coupletMsgData.getLongitude()); - boolean b = trim1 < Double.valueOf(coupletMsgData.getLatitude()); + boolean a = trim <= Double.valueOf(coupletMsgData.getLongitude()); + boolean b = trim1 <= Double.valueOf(coupletMsgData.getLatitude()); if (a && b){ log.info("电子围栏报警啦!!!!您的车驶出范围啦!!!"); }else { @@ -78,12 +80,9 @@ public class ElectronicFenceServiceImpl implements IncidentService { }else { throw new RuntimeException("电子围栏经纬度格式错误"+strings); } - - } - } - log.info("更改的电子围栏内容是:"+fence); +// log.info("更改的电子围栏内容是:"+fence); log.info("电子围栏事件结束......."); } diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/breakdown/BreakdownEvent.java b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/breakdown/BreakdownEvent.java index 67d7dcf..ddfdd89 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/breakdown/BreakdownEvent.java +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/service/impl/breakdown/BreakdownEvent.java @@ -1,5 +1,6 @@ package com.couplet.analyze.msg.service.impl.breakdown; +import com.couplet.common.redis.service.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; @@ -12,7 +13,7 @@ import org.springframework.stereotype.Component; @Component public class BreakdownEvent { @Autowired - private StringRedisTemplate redisTemplate; + private RedisService redisService; diff --git a/couplet-modules/couplet-analyze/pom.xml b/couplet-modules/couplet-analyze/pom.xml index 51c0ee2..a616071 100644 --- a/couplet-modules/couplet-analyze/pom.xml +++ b/couplet-modules/couplet-analyze/pom.xml @@ -21,73 +21,4 @@ UTF-8 - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-discovery - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-sentinel - - - - - org.springframework.boot - spring-boot-starter-actuator - - - - - io.springfox - springfox-swagger-ui - ${swagger.fox.version} - - - - - com.mysql - mysql-connector-j - - - - - com.couplet - couplet-common-datasource - - - - - com.couplet - couplet-common-datascope - - - - - com.couplet - couplet-common-log - - - - - com.couplet - couplet-common-swagger - - - - org.springframework.kafka - spring-kafka - - - diff --git a/couplet-modules/couplet-business/pom.xml b/couplet-modules/couplet-business/pom.xml index 6f04112..2a6efe6 100644 --- a/couplet-modules/couplet-business/pom.xml +++ b/couplet-modules/couplet-business/pom.xml @@ -87,11 +87,6 @@ spring-boot-starter-amqp - - com.couplet - couplet-analyze-msg - - org.springframework.boot diff --git a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/controller/FenceController.java b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/controller/FenceController.java index 5f38304..bf29810 100644 --- a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/controller/FenceController.java +++ b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/controller/FenceController.java @@ -51,11 +51,11 @@ public class FenceController extends BaseController { @PostMapping("/fenceAdd") @RequiresPermissions("couplet:fence:fenceAdd") @Log(title = "电子围栏新增",businessType = BusinessType.INSERT) - public Result fenceInsert(HttpServletRequest request, @RequestBody FenceRequest fenceRequest){ + public Result fenceInsert(@RequestBody FenceRequest fenceRequest){ // if (!fenceService.checkFenceKeyUnique(fenceRequest.getFenceName())) { // return error("新增参数'" + fenceRequest.getFenceName() + "'失败,参数键名已存在"); // } - fenceService.fenceInsert(request,fenceRequest); + fenceService.fenceInsert(fenceRequest); return Result.success("新增成功"); } diff --git a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/FenceService.java b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/FenceService.java index 8a05254..b43dfa1 100644 --- a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/FenceService.java +++ b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/FenceService.java @@ -6,7 +6,6 @@ import com.couplet.common.domain.request.FenceConfig; import com.couplet.common.domain.request.FenceRequest; import com.couplet.common.domain.request.FenceUpdateRequest; -import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -27,7 +26,7 @@ public interface FenceService extends IService { * * @param fenceRequest */ - void fenceInsert(HttpServletRequest request, FenceRequest fenceRequest); + void fenceInsert(FenceRequest fenceRequest); /** * 删除电子围栏 diff --git a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java index c7d3faf..696896d 100644 --- a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java +++ b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java @@ -9,13 +9,13 @@ import com.couplet.common.domain.Fence; import com.couplet.common.domain.request.FenceConfig; import com.couplet.common.domain.request.FenceRequest; import com.couplet.common.domain.request.FenceUpdateRequest; +import com.couplet.common.redis.service.RedisService; import com.couplet.common.security.utils.SecurityUtils; import com.couplet.mq.remote.RemoteFenceService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.concurrent.TimeUnit; @@ -41,7 +41,7 @@ public class FenceServiceImpl extends ServiceImpl implements * 注入redis模板 */ @Autowired - private StringRedisTemplate redisTemplate; + private RedisService redisService; /** * 远程调用队列服务 */ @@ -55,6 +55,7 @@ public class FenceServiceImpl extends ServiceImpl implements } @Override + @Transactional(rollbackFor = Exception.class) public void changeFenceStatus(FenceUpdateRequest fenceUpdateRequest) { String username = SecurityUtils.getUsername(); @@ -63,45 +64,31 @@ public class FenceServiceImpl extends ServiceImpl implements /** * 电子围栏发送改变 */ - redisTemplate.opsForValue().set("changeFenceStatus", JSON.toJSONString(fenceUpdateRequest), 10, TimeUnit.MINUTES); +// redisService.setCacheObject("fence:info"+fenceUpdateRequest.getFenceId(),fenceUpdateRequest, 10, TimeUnit.MINUTES); + redisService.setCacheObject("fence:info:"+fenceUpdateRequest.getFenceId(),fenceUpdateRequest); + redisService.expire("fence:info:"+fenceUpdateRequest.getFenceId(),10,TimeUnit.MINUTES); remoteFenceService.fenceQueue(fenceUpdateRequest); } /** * 业务实现:添加围栏 * - * @param request * @param fenceRequest */ + @Transactional(rollbackFor = Exception.class) @Override - public void fenceInsert(HttpServletRequest request, FenceRequest fenceRequest) { + public void fenceInsert(FenceRequest fenceRequest) { String username = SecurityUtils.getUsername(); fenceRequest.setCrateName(username); //先添加围栏 fenceMapper.insertFence(fenceRequest); - String[] logoIds = fenceRequest.getLogoIds(); - String[] parts = new String[0]; - for (String logoId : logoIds) { - //把前台传入的字符串分割成数组 - parts = logoId.split(","); - //再添加围栏和标识中间表 - fenAndLogoService.addBach(fenceRequest.getFenceId(), parts); - } - /** - * 电子围栏发送改变 - */ - redisTemplate.opsForValue().set("fenceInsert", JSON.toJSONString(fenceRequest), 10, TimeUnit.MINUTES); + fenAndLogoService.addBach(fenceRequest.getFenceId(), fenceRequest.getLogoIds()); } @Override public void removeByFenceId(Long fenceId) { fenceMapper.removeByFenceId(fenceId); - /** - * 电子围栏发送改变 - */ - redisTemplate.opsForValue().set("removeByFenceId", JSON.toJSONString(fenceId), 10, TimeUnit.MINUTES); - } @Override diff --git a/couplet-modules/couplet-business/src/main/resources/bootstrap.yml b/couplet-modules/couplet-business/src/main/resources/bootstrap.yml index b88e464..d900876 100644 --- a/couplet-modules/couplet-business/src/main/resources/bootstrap.yml +++ b/couplet-modules/couplet-business/src/main/resources/bootstrap.yml @@ -16,11 +16,9 @@ spring: discovery: # 服务注册地址 server-addr: 121.89.211.230:8848 - namespace: 172469 config: # 配置中心地址 server-addr: 121.89.211.230:8848 - namespace: 172469 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/MqConsumer.java b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/MqConsumer.java index 32720f4..626af8d 100644 --- a/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/MqConsumer.java +++ b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/MqConsumer.java @@ -1,164 +1,165 @@ -package com.couplet.mq.service; - -import com.couplet.mq.domain.User; -import com.rabbitmq.client.Channel; -import lombok.extern.slf4j.Slf4j; -import org.springframework.amqp.core.Message; -import org.springframework.amqp.rabbit.annotation.RabbitHandler; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -/** - * @ProjectName: five-groups-couplet - * @Author: LiuYunHu - * @CreateTime: 2024/3/28 - * @Description: MQ消费者类 - */ - -@Component -@Slf4j -@SuppressWarnings("all") -@RabbitListener(queues = "queueName") -public class MqConsumer { - @Autowired - private StringRedisTemplate redis; - - /* 线程池执行 - - //创建一个定长线程池 - private final Executor executor = Executors.newFixedThreadPool(5); - - @Async - @RabbitHandler - public void process(User param, Channel channel, Message message) { - executor.execute(() -> { - try { - handleMessage(param, channel, message); - } catch (IOException e) { - log.error("处理消息失败:{}", e); - } - }); - } - - //处理信息的方法 - private void handleMessage(User param, Channel channel, Message message) throws IOException { - log.info("消费者收到消息为:{},{}" + param, message.getMessageProperties().getDeliveryTag()); - - long deliveryTag = message.getMessageProperties().getDeliveryTag(); - String messageId = message.getMessageProperties().getMessageId(); - - if (!redis.hasKey("value:" + messageId)) { - redis.opsForValue().set("value:" + messageId, "" + deliveryTag, 5, TimeUnit.MINUTES); - } - - // 1 添加成功新数据 0已有重复值,不允许再添加 - Long add = redis.opsForSet().add("set:" + messageId, "set:" + messageId); - //过期时间 - redis.expire("set:" + messageId, 5, TimeUnit.MINUTES); - - - try { - if (add == 1) { - //第一次 消费 - System.out.println("*****************************"); - System.out.println("消费者收到消息:" + param); - System.out.println("*****************************"); - log.info("消费结束"); - - channel.basicAck(deliveryTag, false); - - } else { - //重复消费 - log.error("重复消费"); - channel.basicReject(deliveryTag, false); - - //删除缓存 - redis.opsForSet().remove("set:" + messageId, "set:" + messageId); - } - - - } catch (Exception e) { - log.error("消息没有成功消费!"); - - String s = redis.opsForValue().get("value:" + messageId); - - long oldTag = Long.parseLong(s); - - if (deliveryTag == (oldTag + 2)) { - log.error("确实消费不了,不入队了!"); - channel.basicNack(deliveryTag, false, false); - } else { - log.info("消息消费失败,重新入队"); - channel.basicNack(deliveryTag, false, true); - } - } - - } - -**/ - - @RabbitHandler - public void process(User param, Channel channel, Message message) throws IOException { - log.info("消费者收到消息为:{},{}" + param, message.getMessageProperties().getDeliveryTag()); - - long deliveryTag = message.getMessageProperties().getDeliveryTag(); - String messageId = message.getMessageProperties().getMessageId(); - - if (!redis.hasKey("value:" + messageId)) { - redis.opsForValue().set("value:" + messageId, "" + deliveryTag, 5, TimeUnit.MINUTES); - } - - // 1 添加成功新数据 0已有重复值,不允许再添加 - Long add = redis.opsForSet().add("set:" + messageId, "set:" + messageId); - //过期时间 - redis.expire("set:" + messageId, 5, TimeUnit.MINUTES); - - - try { - if (add == 1) { - //第一次 消费 - System.out.println("*****************************"); - System.out.println("消费者收到消息:" + param); - System.out.println("*****************************"); - log.info("消费结束"); - - //确认消费 - channel.basicAck(deliveryTag, false); - - } else { - //重复消费 - log.error("重复消费"); - //拒绝消费 - channel.basicReject(deliveryTag, false); - - //删除缓存 - redis.opsForSet().remove("set:" + messageId, "set:" + messageId); - } - - - } catch (Exception e) { - log.error("消息没有成功消费!"); - - String s = redis.opsForValue().get("value:" + messageId); - - long oldTag = Long.parseLong(s); - - if (deliveryTag == (oldTag + 2)) { - log.error("确实消费不了,不入队了!"); - - - //拒绝消费 - channel.basicNack(deliveryTag, false, false); - } else { - log.info("消息消费失败,重新入队"); - //重新入队 - channel.basicNack(deliveryTag, false, true); - } - } - } -} +//package com.couplet.mq.service; +// +//import com.couplet.common.redis.service.RedisService; +//import com.couplet.mq.domain.User; +//import com.rabbitmq.client.Channel; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.amqp.core.Message; +//import org.springframework.amqp.rabbit.annotation.RabbitHandler; +//import org.springframework.amqp.rabbit.annotation.RabbitListener; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.data.redis.core.StringRedisTemplate; +//import org.springframework.stereotype.Component; +// +//import java.io.IOException; +//import java.util.concurrent.TimeUnit; +// +///** +// * @ProjectName: five-groups-couplet +// * @Author: LiuYunHu +// * @CreateTime: 2024/3/28 +// * @Description: MQ消费者类 +// */ +// +//@Component +//@Slf4j +//@SuppressWarnings("all") +//@RabbitListener(queues = "queueName") +//public class MqConsumer { +// @Autowired +// private RedisService redis; +// +// /* 线程池执行 +// +// //创建一个定长线程池 +// private final Executor executor = Executors.newFixedThreadPool(5); +// +// @Async +// @RabbitHandler +// public void process(User param, Channel channel, Message message) { +// executor.execute(() -> { +// try { +// handleMessage(param, channel, message); +// } catch (IOException e) { +// log.error("处理消息失败:{}", e); +// } +// }); +// } +// +// //处理信息的方法 +// private void handleMessage(User param, Channel channel, Message message) throws IOException { +// log.info("消费者收到消息为:{},{}" + param, message.getMessageProperties().getDeliveryTag()); +// +// long deliveryTag = message.getMessageProperties().getDeliveryTag(); +// String messageId = message.getMessageProperties().getMessageId(); +// +// if (!redis.hasKey("value:" + messageId)) { +// redis.opsForValue().set("value:" + messageId, "" + deliveryTag, 5, TimeUnit.MINUTES); +// } +// +// // 1 添加成功新数据 0已有重复值,不允许再添加 +// Long add = redis.opsForSet().add("set:" + messageId, "set:" + messageId); +// //过期时间 +// redis.expire("set:" + messageId, 5, TimeUnit.MINUTES); +// +// +// try { +// if (add == 1) { +// //第一次 消费 +// System.out.println("*****************************"); +// System.out.println("消费者收到消息:" + param); +// System.out.println("*****************************"); +// log.info("消费结束"); +// +// channel.basicAck(deliveryTag, false); +// +// } else { +// //重复消费 +// log.error("重复消费"); +// channel.basicReject(deliveryTag, false); +// +// //删除缓存 +// redis.opsForSet().remove("set:" + messageId, "set:" + messageId); +// } +// +// +// } catch (Exception e) { +// log.error("消息没有成功消费!"); +// +// String s = redis.opsForValue().get("value:" + messageId); +// +// long oldTag = Long.parseLong(s); +// +// if (deliveryTag == (oldTag + 2)) { +// log.error("确实消费不了,不入队了!"); +// channel.basicNack(deliveryTag, false, false); +// } else { +// log.info("消息消费失败,重新入队"); +// channel.basicNack(deliveryTag, false, true); +// } +// } +// +// } +// +//**/ +// +// @RabbitHandler +// public void process(User param, Channel channel, Message message) throws IOException { +// log.info("消费者收到消息为:{},{}" + param, message.getMessageProperties().getDeliveryTag()); +// +// long deliveryTag = message.getMessageProperties().getDeliveryTag(); +// String messageId = message.getMessageProperties().getMessageId(); +// +// if (!redis.hasKey("value:" + messageId)) { +// redis.setCacheObject("value:" + messageId, "" + deliveryTag, 5, TimeUnit.MINUTES); +// } +// +// // 1 添加成功新数据 0已有重复值,不允许再添加 +// Long add = redis.opsForSet().add("set:" + messageId, "set:" + messageId); +// //过期时间 +// redis.expire("set:" + messageId, 5, TimeUnit.MINUTES); +// +// +// try { +// if (add == 1) { +// //第一次 消费 +// System.out.println("*****************************"); +// System.out.println("消费者收到消息:" + param); +// System.out.println("*****************************"); +// log.info("消费结束"); +// +// //确认消费 +// channel.basicAck(deliveryTag, false); +// +// } else { +// //重复消费 +// log.error("重复消费"); +// //拒绝消费 +// channel.basicReject(deliveryTag, false); +// +// //删除缓存 +// redis.opsForSet().remove("set:" + messageId, "set:" + messageId); +// } +// +// +// } catch (Exception e) { +// log.error("消息没有成功消费!"); +// +// String s = redis.opsForValue().get("value:" + messageId); +// +// long oldTag = Long.parseLong(s); +// +// if (deliveryTag == (oldTag + 2)) { +// log.error("确实消费不了,不入队了!"); +// +// +// //拒绝消费 +// channel.basicNack(deliveryTag, false, false); +// } else { +// log.info("消息消费失败,重新入队"); +// //重新入队 +// channel.basicNack(deliveryTag, false, true); +// } +// } +// } +//} diff --git a/couplet-modules/couplet-modules-onLine/src/main/resources/bootstrap.yml b/couplet-modules/couplet-modules-onLine/src/main/resources/bootstrap.yml index d5c530c..647dee5 100644 --- a/couplet-modules/couplet-modules-onLine/src/main/resources/bootstrap.yml +++ b/couplet-modules/couplet-modules-onLine/src/main/resources/bootstrap.yml @@ -33,10 +33,10 @@ logging: mqtt: server: broker: tcp://115.159.47.13:1883 -# broker: mqtt://115.159.47.13:1883 + # broker: mqtt://115.159.47.13:1883 username: password: - clientId: fluxMq + clientId: xiaoyao qos: 0 - topic: test + topic: xiaoyao diff --git a/pom.xml b/pom.xml index 1829b65..3defd5f 100644 --- a/pom.xml +++ b/pom.xml @@ -211,63 +211,18 @@ couplet-modules-system ${couplet.version} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - com.couplet couplet-modules-mq ${couplet.version} - - com.couplet couplet-common-business ${couplet.version} - com.couplet From 78afcf9eccfc2276045966da02a60a1c68555b0f Mon Sep 17 00:00:00 2001 From: liuyunhu <3286117488@qq.com> Date: Sun, 7 Apr 2024 22:29:32 +0800 Subject: [PATCH 2/5] =?UTF-8?q?4.7=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- couplet-auth/src/main/resources/bootstrap.yml | 2 + .../couplet/remote/RemoteVehicleService.java | 5 + .../factory/RemoteVehicleFallbackFactory.java | 6 ++ .../src/main/resources/bootstrap.yml | 2 + .../service/impl/VehicleServiceImpl.java | 95 ++++++++++++++----- .../couplet/business/server/time/Timer.java | 72 -------------- .../src/main/resources/bootstrap.yml | 2 + 7 files changed, 87 insertions(+), 97 deletions(-) delete mode 100644 couplet-modules/couplet-business/src/main/java/com/couplet/business/server/time/Timer.java diff --git a/couplet-auth/src/main/resources/bootstrap.yml b/couplet-auth/src/main/resources/bootstrap.yml index 427f682..68c3c25 100644 --- a/couplet-auth/src/main/resources/bootstrap.yml +++ b/couplet-auth/src/main/resources/bootstrap.yml @@ -17,9 +17,11 @@ spring: discovery: # 服务注册地址 server-addr: 121.89.211.230:8848 + namespace: 172469 config: # 配置中心地址 server-addr: 121.89.211.230:8848 + namespace: 172469 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/RemoteVehicleService.java b/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/RemoteVehicleService.java index 8f1a275..ec9a53a 100644 --- a/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/RemoteVehicleService.java +++ b/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/RemoteVehicleService.java @@ -4,7 +4,9 @@ import com.couplet.common.core.constant.ServiceNameConstants; import com.couplet.common.core.domain.Result; import com.couplet.common.domain.Vehicle; import com.couplet.common.domain.VehicleMiddle; +import com.couplet.common.domain.request.VehicleListParams; import com.couplet.remote.factory.RemoteVehicleFallbackFactory; +import lombok.extern.java.Log; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -62,4 +64,7 @@ public interface RemoteVehicleService { @PostMapping("/vehicleAndLogo/queryByLogoIds/{vehicleId}") public Result> queryByLogoIds(@PathVariable("vehicleId") Long vehicleId); + @PostMapping("/list") + public Result list(@RequestBody VehicleListParams listParams); + } diff --git a/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/factory/RemoteVehicleFallbackFactory.java b/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/factory/RemoteVehicleFallbackFactory.java index 34ed01e..1cda3b4 100644 --- a/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/factory/RemoteVehicleFallbackFactory.java +++ b/couplet-common/couplet-common-business/src/main/java/com/couplet/remote/factory/RemoteVehicleFallbackFactory.java @@ -3,6 +3,7 @@ package com.couplet.remote.factory; import com.couplet.common.core.domain.Result; import com.couplet.common.domain.Vehicle; import com.couplet.common.domain.VehicleMiddle; +import com.couplet.common.domain.request.VehicleListParams; import com.couplet.remote.RemoteVehicleService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,6 +62,11 @@ public class RemoteVehicleFallbackFactory implements FallbackFactory> queryByLogoIds(Long vehicleId) { return Result.error("车辆服务调用失败:"+cause.getMessage()); } + + @Override + public Result list(VehicleListParams listParams) { + return Result.error("车辆服务调用失败:"+cause.getMessage()); + } }; } } diff --git a/couplet-gateway/src/main/resources/bootstrap.yml b/couplet-gateway/src/main/resources/bootstrap.yml index 091e68a..6dc39fe 100644 --- a/couplet-gateway/src/main/resources/bootstrap.yml +++ b/couplet-gateway/src/main/resources/bootstrap.yml @@ -15,9 +15,11 @@ spring: discovery: # 服务注册地址 server-addr: 121.89.211.230:8848 + namespace: 172469 config: # 配置中心地址 server-addr: 121.89.211.230:8848 + namespace: 172469 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/VehicleServiceImpl.java b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/VehicleServiceImpl.java index 06fcf6a..5dd54a5 100644 --- a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/VehicleServiceImpl.java +++ b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/VehicleServiceImpl.java @@ -16,9 +16,10 @@ import com.couplet.common.domain.VehicleType; import com.couplet.common.domain.request.VehicleEditParams; import com.couplet.common.domain.request.VehicleInsertParams; import com.couplet.common.domain.request.VehicleListParams; -import com.couplet.mq.remote.RemoteFenceService; +import com.couplet.common.redis.service.RedisService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.util.List; @@ -36,10 +37,12 @@ public class VehicleServiceImpl extends ServiceImpl impl //车辆mapper @Autowired private VehicleMapper vehicleMapper; + @Autowired + private RedisService redis; //远程发送mq - @Autowired - private RemoteFenceService remoteFenceService; +// @Autowired +// private RemoteFenceService remoteFenceService; //车辆类型服务 @Autowired @@ -133,7 +136,7 @@ public class VehicleServiceImpl extends ServiceImpl impl String result = ""; if ((editParams.getLogoIds() == null || editParams.getLogoIds().isEmpty())) { - result = "未选择电子围栏"; + result = "未选择标识"; Result.error(result); } @@ -172,16 +175,16 @@ public class VehicleServiceImpl extends ServiceImpl impl vehicleAndLogoService.vehicleBindLogo(editParams.getVehicleId(), editParams.getLogoIds()); - //mq - List logoList = getBindLogoById(editParams.getVehicleId()); - if (0 != logoList.size()) { - String ids = ""; - for (Long l : logoList) { - ids = "," + l; - } - ids = ids.substring(1); - remoteFenceService.vehicleQueue(editParams.getVehicleId() + "-" + ids); - } +// //mq +// List logoList = getBindLogoById(editParams.getVehicleId()); +// if (0 != logoList.size()) { +// String ids = ""; +// for (Long l : logoList) { +// ids = "," + l; +// } +// ids = ids.substring(1); +// remoteFenceService.vehicleQueue(editParams.getVehicleId() + "-" + ids); +// } result = "编辑成功!"; @@ -201,7 +204,7 @@ public class VehicleServiceImpl extends ServiceImpl impl String result = ""; if ((insertParams.getLogoIds() == null || insertParams.getLogoIds().isEmpty())) { - result = "未选择电子围栏"; + result = "未选择标识"; Result.error(result); } @@ -251,16 +254,16 @@ public class VehicleServiceImpl extends ServiceImpl impl //执行添加电子围栏 int i = vehicleAndLogoService.vehicleBindLogo(vehicle.getVehicleId(), insertParams.getLogoIds()); - - List logoList = getBindLogoById(vehicle.getVehicleId()); - if (0 != logoList.size()) { - String ids = ""; - for (Long l : logoList) { - ids = "," + l; - } - ids = ids.substring(1); - remoteFenceService.vehicleQueue(vehicle.getVehicleId() + "-" + ids); - } +// +// List logoList = getBindLogoById(vehicle.getVehicleId()); +// if (0 != logoList.size()) { +// String ids = ""; +// for (Long l : logoList) { +// ids = "," + l; +// } +// ids = ids.substring(1); +// remoteFenceService.vehicleQueue(vehicle.getVehicleId() + "-" + ids); +// } result = "新增成功!"; @@ -334,4 +337,46 @@ public class VehicleServiceImpl extends ServiceImpl impl } + + @Scheduled(cron = "0/1 * * * * *") + public void aa() { + System.out.println("********************************************************"); + } + + //判断车辆是否下线 + @Scheduled(cron = "0/1 * * * * *") + public void downLine() { + log.info("定时器启动"); + //先查询车辆列表 + List list = this.list(new VehicleListParams(null, null, null, null)); + + + list.forEach(vehicle -> { + try { + //只针对已经上线的车辆 + if (redis.hasKey(vehicle.getVin())) { + + //如果vin的缓存 时间还剩一秒,则判断为已经下线 + if (redis.getExpire(vehicle.getVin()) <= 3) { + log.info(vehicle.getVin() + "的车辆已经下线"); + + //执行修改下线状态的方法 +// Integer i = this.onOrOutLineByVIN(vehicle.getVin() + "," + 0); + Integer i = this.onOrOutLineByVIN(vehicle.getVin() , 0); + + if (0 == i) { + log.error("下线状态修改失败"); + } else { + log.info("下线状态修改成功"); + } + + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + }); + + } + } diff --git a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/time/Timer.java b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/time/Timer.java deleted file mode 100644 index c2c3925..0000000 --- a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/time/Timer.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.couplet.business.server.time; - -import com.couplet.business.server.service.VehicleService; -import com.couplet.common.domain.Vehicle; -import com.couplet.common.domain.request.VehicleListParams; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * @ProjectName: five-groups-couplet - * @Author: LiuYunHu - * @CreateTime: 2024/4/4 - * @Description: 车辆定时器 - */ -@Component -@Slf4j -public class Timer { - //redis - @Autowired - private StringRedisTemplate redis; - //查询车辆列表 - @Autowired - private VehicleService vehicleService; - - - @Scheduled(cron = "0/1 * * * * *") - public void aa() { - System.out.println("********************************************************"); - } - - //判断车辆是否下线 - @Scheduled(cron = "0/1 * * * * *") - public void downLine() { - log.info("定时器启动"); - - //先查询车辆列表 - List list = vehicleService.list(new VehicleListParams(null, null, null, null)); - - - list.forEach(vehicle -> { - try { - //只针对已经上线的车辆 - if (redis.hasKey(vehicle.getVin())) { - - //如果vin的缓存 时间还剩一秒,则判断为已经下线 - if (redis.getExpire(vehicle.getVin()) <= 3) { - log.info(vehicle.getVin() + "的车辆已经下线"); - - //执行修改下线状态的方法 - Integer i = vehicleService.onOrOutLineByVIN(vehicle.getVin(), 0); - - if (0 == i) { - log.error("下线状态修改失败"); - } else { - log.info("下线状态修改成功"); - } - - } - } - } catch (Exception e) { - log.error(e.getMessage()); - } - }); - - } - -} diff --git a/couplet-modules/couplet-system/src/main/resources/bootstrap.yml b/couplet-modules/couplet-system/src/main/resources/bootstrap.yml index d9315bd..91453d0 100644 --- a/couplet-modules/couplet-system/src/main/resources/bootstrap.yml +++ b/couplet-modules/couplet-system/src/main/resources/bootstrap.yml @@ -15,9 +15,11 @@ spring: discovery: # 服务注册地址 server-addr: 121.89.211.230:8848 + namespace: 172469 config: # 配置中心地址 server-addr: 121.89.211.230:8848 + namespace: 172469 # 配置文件格式 file-extension: yml # 共享配置 From 8bbaadea94cd0eb79da9f56172238afdc81e63c3 Mon Sep 17 00:00:00 2001 From: lijiayao <13831655+xiao-yao-charge-forward@user.noreply.gitee.com> Date: Sun, 7 Apr 2024 22:32:02 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E7=94=B5=E5=AD=90=E5=9B=B4?= =?UTF-8?q?=E6=A0=8F=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/event/AnalyzeEventCache.java | 51 +++ .../couplet/analyze/msg/utils/MsgUtils.java | 338 ------------------ ...ot.autoconfigure.AutoConfiguration.imports | 2 +- .../common/redis/service/RedisService.java | 13 + .../couplet-analyze-msg/pom.xml | 1 + .../server/service/impl/FenceServiceImpl.java | 7 +- pom.xml | 6 + 7 files changed, 75 insertions(+), 343 deletions(-) create mode 100644 couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/event/AnalyzeEventCache.java delete mode 100644 couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java diff --git a/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/event/AnalyzeEventCache.java b/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/event/AnalyzeEventCache.java new file mode 100644 index 0000000..32d043a --- /dev/null +++ b/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/event/AnalyzeEventCache.java @@ -0,0 +1,51 @@ +package com.couplet.analyze.common.event; + +import com.couplet.common.redis.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Set; + +/** + * @Author: LiJiaYao + * @Date: 2024/4/7 + * @Description: + */ + +public class AnalyzeEventCache { + + @Autowired + private RedisService redisService; + + public String encode(String vin){ + return "event:arr"+vin; + } + /** + * 添加事件 + */ + public void addEvent(String vin, String eventValue) { + redisService.setCacheSet(encode(vin), eventValue); + } + + /** + * 修改事件 + */ + public void updateEvent(String vin,String eventValue){ + redisService.setCacheSet(encode(vin), eventValue); + } + /** + * 删除事件 + */ + public void removeEvent(String vin,String eventName){ + redisService.deleteSet(encode(vin), eventName); + } + /** + * 获取事件集合 + * + * @return + */ + public Set getEventList(String vin){ + + return redisService.getCacheSet(encode(vin)); + } + +} diff --git a/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java b/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java deleted file mode 100644 index 1e2800a..0000000 --- a/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/msg/utils/MsgUtils.java +++ /dev/null @@ -1,338 +0,0 @@ -package com.couplet.analyze.msg.utils; - -import com.couplet.analyze.msg.domain.CoupletMsgData; -import lombok.extern.slf4j.Slf4j; - -import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Random; - -/** - * @author DongXiaoDong - * @version 1.0 - * @date 2024/4/6 14:12 - * @description - */ -@Slf4j -public class MsgUtils { - - public static String generateGTA() { - // 生成四位以"GTA"开头的字符串 - String prefix = "GTA"; - // 生成三位随机数字 - String randomNumber = generateRandomNumber(4); - // 拼接字符串 - return prefix + randomNumber; - } - - public static String generateRandomNumber(int length) { - // 生成随机数 - Random random = new Random(); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < length; i++) { - // 生成0到9之间的随机数字,并转换为字符串 - sb.append(random.nextInt(10)); - } - return sb.toString(); - } - - /** - * 将16进制字符串转换为ASCII字符串 - * @param s 16进制字符串 - * @return ASCII字符串 - */ - public static String hexToString(String s) { - if (s == null || s.equals("")) { - return null; - } - s = s.replace(" ", ""); - byte[] baKeyword = new byte[s.length() / 2]; - for (int i = 0; i < baKeyword.length; i++) { - try { - baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16)); - } catch (Exception e) { - e.printStackTrace(); - } - } - try { - s = new String(baKeyword, StandardCharsets.UTF_8); - } catch (Exception e1) { - e1.printStackTrace(); - return s; - } - return s; - } - - /** - * 将解析后的数据进行截取封装 - * @param str - * @return - */ - public static List sendMsg(String str) { - List coupletMsgDataList = new ArrayList<>(); - CoupletMsgData coupletMsgData = new CoupletMsgData(); - - coupletMsgData.setVin(str.substring(1,18)); - - log.info("vin=="+coupletMsgData.getVin()); - - //时间 - String tim =str.substring(18,31); - long timestamp = Long.parseLong(tim); - - Date date = new Date(timestamp); - coupletMsgData.setCreateTime(date); - - //经度 - String lt = str.substring(31,42); - // 如果末尾是零,则舍去 - int endIndex = lt.length() - 1; - while (lt.charAt(endIndex) == '0'){ - endIndex--; - } - - String longitude = lt.substring(0, endIndex + 1); - coupletMsgData.setLongitude(longitude); - - //维度 - String latitudeIndex =str.substring(42,52); - int endIndexT = latitudeIndex.length() - 1; - while (latitudeIndex.charAt(endIndexT) == '0'){ - endIndexT--; - } - - String latitude = latitudeIndex.substring(0, endIndexT + 1); - coupletMsgData.setLatitude(latitude); - - //速度speed - String speed =str.substring(52,58); - coupletMsgData.setSpeed(speed); - - //里程 - BigDecimal mileage= new BigDecimal(str.substring(58,69)); - mileage=mileage.stripTrailingZeros(); - coupletMsgData.setMileage(mileage); - - //总电压 - String voltage =str.substring(69,75); - while (voltage.endsWith("0")) { - voltage = voltage.substring(0, voltage.length() - 1); // 去除末尾的零 - } - coupletMsgData.setVoltage(voltage); - - //总电流 - String current =str.substring(75,80); - while (current.endsWith("0")){ - current=current.substring(0,current.length()-1); - } - coupletMsgData.setCurrent(current); - - //绝缘电阻 resistance - String res =str.substring(80,89); - String resistance = res.substring(0, 5); - coupletMsgData.setResistance(resistance); - - //档位 - String gear =str.substring(89,90); - coupletMsgData.setGear(gear); - - //accelerationPedal 加速踏板行程值 - String accelerationPedal =str.substring(90,91); - coupletMsgData.setAccelerationPedal(accelerationPedal); - - //brakePedal 制动踏板行程值 - String brakePedal =str.substring(92,93); - coupletMsgData.setBrakePedal(brakePedal); - - //fuelConsumptionRate 燃料消耗率 - String fuelConsumptionRate =str.substring(94,99); - coupletMsgData.setFuelConsumptionRate(fuelConsumptionRate); - - //motorControllerTemperature 电机控制器温度 - String motorControllerTemperature =str.substring(99,105); - while (motorControllerTemperature.endsWith("0")){ - motorControllerTemperature=motorControllerTemperature.substring(0,motorControllerTemperature.length()-1); - } - coupletMsgData.setMotorControllerTemperature(motorControllerTemperature); - - //motorSpeed 电机转速 - String motorSpeed =str.substring(105,110); - coupletMsgData.setMotorSpeed(motorSpeed); - - //motorTorque 电机转矩 - String motorTorque =str.substring(110,114); - while (motorTorque.endsWith("0")){ - motorTorque=motorTorque.substring(0,motorTorque.length()-1); - } - coupletMsgData.setMotorTorque(motorTorque); - - //motorTemperature 电机温度 - String motorTemperature =str.substring(114,120); - while (motorTemperature.endsWith("0")){ - motorTemperature=motorTemperature.substring(0,motorTemperature.length()-1); - } - coupletMsgData.setMotorTemperature(motorTemperature); - - //motorVoltage 电机电压 - String motorVoltage =str.substring(120,125); - while (motorVoltage.endsWith("0")){ - motorVoltage=motorVoltage.substring(0,motorVoltage.length()-1); - } - coupletMsgData.setMotorVoltage(motorVoltage); - - //motorCurrent 电机电流 - String motorCurrent =str.substring(125,133); - while (motorCurrent.endsWith("0")){ - motorCurrent=motorCurrent.substring(0,motorCurrent.length()-1); - } - coupletMsgData.setMotorCurrent(motorCurrent); - - //remainingBattery 动力电池剩余电量SOC - BigDecimal remainingBattery = new BigDecimal(str.substring(133,138)); - coupletMsgData.setRemainingBattery(remainingBattery); - - //maximumFeedbackPower 当前状态允许的最大反馈功率 - String maximumFeedbackPower =str.substring(139,144); - while (maximumFeedbackPower.endsWith("0")){ - maximumFeedbackPower=maximumFeedbackPower.substring(0,maximumFeedbackPower.length()-1); - } - coupletMsgData.setMaximumFeedbackPower(maximumFeedbackPower); - - //maximumDischargePower 当前状态允许最大放电功率 - String maximumDischargePower =str.substring(145,151); - while (maximumDischargePower.endsWith("0")){ - maximumDischargePower=maximumDischargePower.substring(0,maximumDischargePower.length()-1); - } - coupletMsgData.setMaximumDischargePower(maximumDischargePower); - - //selfCheckCounter BMS自检计数器 - String selfCheckCounter =str.substring(151,153); - String selfCheckCounterReplace = selfCheckCounter.replace("0", ""); - coupletMsgData.setSelfCheckCounter(selfCheckCounterReplace); - - //totalBatteryCurrent 动力电池充放电电流 - String totalBatteryCurrent =str.substring(153,158); - while (totalBatteryCurrent.endsWith("0")){ - totalBatteryCurrent=totalBatteryCurrent.substring(0,totalBatteryCurrent.length()-1); - } - coupletMsgData.setTotalBatteryCurrent(totalBatteryCurrent); - - //totalBatteryVoltage 动力电池负载端总电压V3 - String totalBatteryVoltage =str.substring(158,164); - while (totalBatteryVoltage.endsWith("0")){ - totalBatteryVoltage=totalBatteryVoltage.substring(0,totalBatteryVoltage.length()-1); - } - coupletMsgData.setTotalBatteryVoltage(totalBatteryVoltage); - - //singleBatteryMaxVoltage 单次最大电压 - String singleBatteryMaxVoltage =str.substring(164,168); - while (singleBatteryMaxVoltage.endsWith("0")){ - singleBatteryMaxVoltage=singleBatteryMaxVoltage.substring(0,singleBatteryMaxVoltage.length()-1); - } - coupletMsgData.setSingleBatteryMaxVoltage(singleBatteryMaxVoltage); - - //singleBatteryMinVoltage 单体电池最低电压 - String singleBatteryMinVoltage =str.substring(168,172); - while (singleBatteryMinVoltage.endsWith("0")){ - singleBatteryMinVoltage=singleBatteryMinVoltage.substring(0,singleBatteryMinVoltage.length()-1); - } - - coupletMsgData.setSingleBatteryMinVoltage(singleBatteryMinVoltage); - - //singleBatteryMaxTemperature 单体电池最高温度 - String singleBatteryMaxTemperature =str.substring(172,178); - while (singleBatteryMaxTemperature.endsWith("0")){ - singleBatteryMaxTemperature=singleBatteryMaxTemperature.substring(0,singleBatteryMaxTemperature.length()-1); - } - coupletMsgData.setSingleBatteryMaxTemperature(singleBatteryMaxTemperature); - - //singleBatteryMinTemperature 单体电池最低温度 - String singleBatteryMinTemperature =str.substring(178,184); - while (singleBatteryMinTemperature.endsWith("0")){ - singleBatteryMinTemperature=singleBatteryMinTemperature.substring(0,singleBatteryMinTemperature.length()-1); - } - coupletMsgData.setSingleBatteryMinTemperature(singleBatteryMinTemperature); - - //availableBatteryCapacity 可用电池容量 - String availableBatteryCapacity =str.substring(184,190); - while (availableBatteryCapacity.endsWith("0")){ - availableBatteryCapacity=availableBatteryCapacity.substring(0,availableBatteryCapacity.length()-1); - } - coupletMsgData.setAvailableBatteryCapacity(availableBatteryCapacity); - - //vehicleStatus 车辆状态 - int vehicleStatus = Integer.parseInt(str.substring(190,191)); - coupletMsgData.setVehicleStatus(vehicleStatus); - - //chargingStatus 充电状态 - int chargingStatus = Integer.parseInt(str.substring(191,192)); - coupletMsgData.setChargingStatus(chargingStatus); - - //operatingStatus 运行状态 - int operatingStatus = Integer.parseInt(str.substring(192,193)); - coupletMsgData.setOperatingStatus(operatingStatus); - - //socStatus SOC - int socStatus = Integer.parseInt(str.substring(193,194)); - coupletMsgData.setSocStatus(socStatus); - - //chargingEnergyStorageStatus 可充电储能装置工作状态 - int chargingEnergyStorageStatus = Integer.parseInt(str.substring(194,195)); - coupletMsgData.setChargingEnergyStorageStatus(chargingEnergyStorageStatus); - - //driveMotorStatus 驱动电机状态 - int driveMotorStatus = Integer.parseInt(str.substring(195,196)); - coupletMsgData.setDriveMotorStatus(driveMotorStatus); - - //positionStatus 定位是否有效 - int positionStatus = Integer.parseInt(str.substring(196,197)); - coupletMsgData.setPositionStatus(positionStatus); - - //easStatus EAS(汽车防盗系统)状态 - int easStatus = Integer.parseInt(str.substring(197,198)); - coupletMsgData.setEasStatus(easStatus); - - //ptcStatus PTC(电动加热器)状态 - int ptcStatus = Integer.parseInt(str.substring(198,199)); - coupletMsgData.setPtcStatus(ptcStatus); - - //epsStatus - int epsStatus = Integer.parseInt(str.substring(199,200)); - coupletMsgData.setEpsStatus(epsStatus); - - //absStatus EPS(电动助力系统)状态 - int absStatus = Integer.parseInt(str.substring(200,201)); - coupletMsgData.setAbsStatus(absStatus); - - //mcuStatus MCU(电机/逆变器)状态 - int mcuStatus = Integer.parseInt(str.substring(201,202)); - coupletMsgData.setMcuStatus(mcuStatus); - - //heatingStatus 动力电池加热状态 - int heatingStatus = Integer.parseInt(str.substring(202,203)); - coupletMsgData.setHeatingStatus(heatingStatus); - - //batteryStatus 动力电池当前状态 - int batteryStatus = Integer.parseInt(str.substring(203,204)); - coupletMsgData.setBatteryStatus(batteryStatus); - - //batteryInsulationStatus 动力电池保温状态 - int batteryInsulationStatus = Integer.parseInt(str.substring(204,205)); - coupletMsgData.setBatteryInsulationStatus(batteryInsulationStatus); - - //dcdcStatus DCDC(电力交换系统)状态 - int dcdcStatus = Integer.parseInt(str.substring(205,206)); - coupletMsgData.setDcdcStatus(dcdcStatus); - - //chgStatus CHG(充电机)状态 - int chgStatus = Integer.parseInt(str.substring(206,207)); - coupletMsgData.setChgStatus(chgStatus); - - coupletMsgDataList.add(coupletMsgData); - - return coupletMsgDataList; - } -} diff --git a/couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index eca240b..cb7030c 100644 --- a/couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/couplet-common/couplet-common-event/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -com.couplet.common.core.utils.SpringUtils +com.couplet.analyze.common.event.AnalyzeEventCache diff --git a/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java b/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java index 4d382f6..676d61f 100644 --- a/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java +++ b/couplet-common/couplet-common-redis/src/main/java/com/couplet/common/redis/service/RedisService.java @@ -1,6 +1,7 @@ package com.couplet.common.redis.service; import com.couplet.common.domain.CoupletVehicleData; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.*; import org.springframework.stereotype.Component; @@ -180,7 +181,17 @@ public class RedisService { return setOperation; } + /** + * 删除set + * @param key + * @param setValue + */ + public void deleteSet(String key, String setValue) { + //缓存的键值 + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + setOperation.remove(setValue); //缓存的数据 + } /** * 获得缓存的set * @@ -274,4 +285,6 @@ public class RedisService { public Collection keys (final String pattern) { return redisTemplate.keys(pattern); } + + } diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml b/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml index 5cac2c7..be591db 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml @@ -11,6 +11,7 @@ couplet-analyze-msg + 解析系统 17 17 diff --git a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java index 696896d..94c1ab1 100644 --- a/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java +++ b/couplet-modules/couplet-business/src/main/java/com/couplet/business/server/service/impl/FenceServiceImpl.java @@ -11,7 +11,6 @@ import com.couplet.common.domain.request.FenceRequest; import com.couplet.common.domain.request.FenceUpdateRequest; import com.couplet.common.redis.service.RedisService; import com.couplet.common.security.utils.SecurityUtils; -import com.couplet.mq.remote.RemoteFenceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -45,8 +44,8 @@ public class FenceServiceImpl extends ServiceImpl implements /** * 远程调用队列服务 */ - @Autowired - private RemoteFenceService remoteFenceService; +// @Autowired +// private RemoteFenceService remoteFenceService; @Override public List pageQuery(FenceConfig fenceConfig) { @@ -68,7 +67,7 @@ public class FenceServiceImpl extends ServiceImpl implements redisService.setCacheObject("fence:info:"+fenceUpdateRequest.getFenceId(),fenceUpdateRequest); redisService.expire("fence:info:"+fenceUpdateRequest.getFenceId(),10,TimeUnit.MINUTES); - remoteFenceService.fenceQueue(fenceUpdateRequest); +// remoteFenceService.fenceQueue(fenceUpdateRequest); } /** diff --git a/pom.xml b/pom.xml index 3defd5f..139c8c9 100644 --- a/pom.xml +++ b/pom.xml @@ -236,6 +236,12 @@ couplet-analyze-msg ${couplet.version} + + + com.couplet + couplet-common-event + ${couplet.version} + From 16d72968d47f0295908e75e8fcdc32d4e75e2ff3 Mon Sep 17 00:00:00 2001 From: lijiayao <13831655+xiao-yao-charge-forward@user.noreply.gitee.com> Date: Sun, 7 Apr 2024 22:37:13 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E7=94=B5=E5=AD=90=E5=9B=B4?= =?UTF-8?q?=E6=A0=8F=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../couplet-analyze-msg/pom.xml | 4 + .../analyze/msg/consumer/FenceConsumer.java | 166 ++++++++-------- .../analyze/msg/consumer/MsgConsumer.java | 182 +++++++++--------- .../analyze/msg/consumer/VehicleConsumer.java | 136 ++++++------- 4 files changed, 246 insertions(+), 242 deletions(-) diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml b/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml index be591db..006bb88 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/pom.xml @@ -92,6 +92,10 @@ com.couplet couplet-common-event + + org.springframework.kafka + spring-kafka + diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/FenceConsumer.java b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/FenceConsumer.java index e4e33f1..53716a3 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/FenceConsumer.java +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/FenceConsumer.java @@ -1,84 +1,84 @@ -package com.couplet.analyze.msg.consumer; - -import com.couplet.common.core.text.Convert; -import com.couplet.common.domain.request.FenceUpdateRequest; -import com.couplet.common.redis.service.RedisService; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.Message; -import org.springframework.amqp.rabbit.annotation.RabbitHandler; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.BoundSetOperations; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -/** - * @Author: LiJiaYao - * @Date: 2024/4/4 - * @Description: - */ -@Log4j2 -@Component -@RabbitListener(queues = "fenceQueue") -public class FenceConsumer { - @Autowired - private RedisService redisService; - - @RabbitHandler - public void fenceConsumer(FenceUpdateRequest fenceUpdateRequest, Channel channel, Message message) throws IOException { - - log.info("电子围栏消息进入队列,传入的数据是:[{}]", fenceUpdateRequest); - - String messageId = message.getMessageProperties().getMessageId(); - long deliveryTag = message.getMessageProperties().getDeliveryTag(); - if (!redisService.hasKey("电子围栏消息不丢失:" + messageId)) { - redisService.setCacheObject("电子围栏消息不丢失:" + messageId, "" + deliveryTag); - } -// if (redisService.hasKey("fence")){ -// redisService.deleteObject("fence"); +//package com.couplet.analyze.msg.consumer; +// +//import com.couplet.common.core.text.Convert; +//import com.couplet.common.domain.request.FenceUpdateRequest; +//import com.couplet.common.redis.service.RedisService; +//import com.rabbitmq.client.Channel; +//import lombok.extern.log4j.Log4j2; +//import org.springframework.amqp.core.Message; +//import org.springframework.amqp.rabbit.annotation.RabbitHandler; +//import org.springframework.amqp.rabbit.annotation.RabbitListener; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.data.redis.core.BoundSetOperations; +//import org.springframework.stereotype.Component; +// +//import java.io.IOException; +//import java.util.HashMap; +//import java.util.HashSet; +//import java.util.Set; +//import java.util.concurrent.TimeUnit; +// +///** +// * @Author: LiJiaYao +// * @Date: 2024/4/4 +// * @Description: +// */ +//@Log4j2 +//@Component +//@RabbitListener(queues = "fenceQueue") +//public class FenceConsumer { +// @Autowired +// private RedisService redisService; +// +// @RabbitHandler +// public void fenceConsumer(FenceUpdateRequest fenceUpdateRequest, Channel channel, Message message) throws IOException { +// +// log.info("电子围栏消息进入队列,传入的数据是:[{}]", fenceUpdateRequest); +// +// String messageId = message.getMessageProperties().getMessageId(); +// long deliveryTag = message.getMessageProperties().getDeliveryTag(); +// if (!redisService.hasKey("电子围栏消息不丢失:" + messageId)) { +// redisService.setCacheObject("电子围栏消息不丢失:" + messageId, "" + deliveryTag); // } - - HashSet objects = new HashSet<>(); - objects.add(messageId); - - BoundSetOperations set = redisService.setCacheSet("电子围栏消息不重复:" + messageId, objects); - redisService.expire("电子围栏消息不重复:" + messageId, 5, TimeUnit.MINUTES); - try { - if (set != null) { - HashMap hashMap = new HashMap<>(); - HashSet hashSet = new HashSet<>(); - hashSet.add(fenceUpdateRequest); - hashMap.put(fenceUpdateRequest.getFenceId()+"",fenceUpdateRequest); -// redisTemplate.opsForH("fence", JSON.toJSONString(hashMap),10,TimeUnit.MINUTES); -// redisTemplate.opsForHash().put("fence", fenceUpdateRequest.getFenceId()+"", JSON.toJSONString(hashMap)); - - String key = Convert.toStr(fenceUpdateRequest.getFenceId()); - redisService.setCacheObject(key,fenceUpdateRequest); - redisService.expire(key, 10, TimeUnit.MINUTES); - //判断车辆是否有实时数据,如果没有则删除数据 - channel.basicAck(deliveryTag, false); - } else { - log.error("电子围栏消息不能重复消费:[{}]", fenceUpdateRequest); - channel.basicReject(deliveryTag, false); - } - } catch (IOException e) { - log.error("电子围栏消息未进入队列,传入的信息是:【{}】", fenceUpdateRequest); - String s = redisService.getCacheObject("电子围栏消息不丢失:" + messageId); - - Long o = Long.valueOf(s); - if (deliveryTag == o + 2) { - log.error("电子围栏消息已丢失,无法传入的信息是:【{}】", fenceUpdateRequest); - channel.basicNack(deliveryTag, false, false); - } else { - log.error("电子围栏消息已丢失,已再次传入的信息是:【{}】", fenceUpdateRequest); - channel.basicNack(deliveryTag, true, false); - } - } - } -} +//// if (redisService.hasKey("fence")){ +//// redisService.deleteObject("fence"); +//// } +// +// HashSet objects = new HashSet<>(); +// objects.add(messageId); +// +// BoundSetOperations set = redisService.setCacheSet("电子围栏消息不重复:" + messageId, objects); +// redisService.expire("电子围栏消息不重复:" + messageId, 5, TimeUnit.MINUTES); +// try { +// if (set != null) { +// HashMap hashMap = new HashMap<>(); +// HashSet hashSet = new HashSet<>(); +// hashSet.add(fenceUpdateRequest); +// hashMap.put(fenceUpdateRequest.getFenceId()+"",fenceUpdateRequest); +//// redisTemplate.opsForH("fence", JSON.toJSONString(hashMap),10,TimeUnit.MINUTES); +//// redisTemplate.opsForHash().put("fence", fenceUpdateRequest.getFenceId()+"", JSON.toJSONString(hashMap)); +// +// String key = Convert.toStr(fenceUpdateRequest.getFenceId()); +// redisService.setCacheObject(key,fenceUpdateRequest); +// redisService.expire(key, 10, TimeUnit.MINUTES); +// //判断车辆是否有实时数据,如果没有则删除数据 +// channel.basicAck(deliveryTag, false); +// } else { +// log.error("电子围栏消息不能重复消费:[{}]", fenceUpdateRequest); +// channel.basicReject(deliveryTag, false); +// } +// } catch (IOException e) { +// log.error("电子围栏消息未进入队列,传入的信息是:【{}】", fenceUpdateRequest); +// String s = redisService.getCacheObject("电子围栏消息不丢失:" + messageId); +// +// Long o = Long.valueOf(s); +// if (deliveryTag == o + 2) { +// log.error("电子围栏消息已丢失,无法传入的信息是:【{}】", fenceUpdateRequest); +// channel.basicNack(deliveryTag, false, false); +// } else { +// log.error("电子围栏消息已丢失,已再次传入的信息是:【{}】", fenceUpdateRequest); +// channel.basicNack(deliveryTag, true, false); +// } +// } +// } +//} diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/MsgConsumer.java b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/MsgConsumer.java index feaf03f..f184f7f 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/MsgConsumer.java +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/MsgConsumer.java @@ -1,91 +1,91 @@ -package com.couplet.analyze.msg.consumer; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.couplet.analyze.msg.domain.CoupletMsgData; -import com.couplet.analyze.msg.mapper.IncidentMapper; -import com.couplet.analyze.msg.service.impl.realTimeData.RealTimeJudge; -import com.couplet.common.domain.request.RealTimeDataRequest; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.Message; -import org.springframework.amqp.rabbit.annotation.RabbitHandler; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -/** - * @Author: LiJiaYao - * @Date: 2024/4/4 - * @Description: - */ -@Log4j2 -@Component -@RabbitListener(queues = "finByVinQueueName") -public class MsgConsumer { - @Autowired - private StringRedisTemplate redisTemplate; - @Autowired - private IncidentMapper incidentMapper; - - @RabbitHandler - public void realTimeDataConsumer(RealTimeDataRequest realTimeDataRequest, Channel channel, Message message) throws IOException { - - log.info("消息进入队列,传入的数据是:[{}]", realTimeDataRequest); - - String messageId = message.getMessageProperties().getMessageId(); - long deliveryTag = message.getMessageProperties().getDeliveryTag(); - if (!redisTemplate.hasKey("消息不丢失:" + messageId)) { - redisTemplate.opsForValue().set("消息不丢失:" + messageId, "" + deliveryTag, 1, TimeUnit.MINUTES); - } - - Long add = redisTemplate.opsForSet().add("消息不重复:" + messageId, messageId); - redisTemplate.expire("消息不重复:" + messageId, 5, TimeUnit.MINUTES); - try { - if (0 < add) { - JSONObject jsonObject = JSONObject.parseObject(String.valueOf(realTimeDataRequest)); - Long userId = jsonObject.getLong("userId"); - String vin = jsonObject.getString("vin"); - RealTimeDataRequest request = new RealTimeDataRequest(); - request.setVin(vin); - request.setUserId(userId); - RealTimeJudge.addRealTime(request); - //判断车辆是否有实时数据,如果没有则删除数据 - if (RealTimeJudge.isJudge(realTimeDataRequest.getVin())){ - log.info("开始实时数据传输:[{}]",realTimeDataRequest.getVin()); - } - CoupletMsgData incident = incidentMapper.queryByIncident(realTimeDataRequest.getVin()); - if (incident == null){ - log.error("没有数据......"); - } - redisTemplate.opsForList().rightPush("coupletMsgData", JSON.toJSONString(incident)); - - channel.basicAck(deliveryTag, false); - } else { - log.error("消息不能重复消费:[{}]", realTimeDataRequest); - channel.basicReject(deliveryTag, false); - } - } catch (IOException e) { - - log.error("消息未进入队列,传入的信息是:【{}】", realTimeDataRequest); - String s = redisTemplate.opsForValue().get("消息不丢失:" + messageId); - - Long o = Long.valueOf(s); - if (deliveryTag == o + 2) { - log.error("消息已丢失,无法传入的信息是:【{}】", realTimeDataRequest); - channel.basicNack(deliveryTag, false, false); - } else { - log.error("消息已丢失,已再次传入的信息是:【{}】", realTimeDataRequest); - channel.basicNack(deliveryTag, true, false); - } - - } - - - } - -} +//package com.couplet.analyze.msg.consumer; +// +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONObject; +//import com.couplet.analyze.msg.domain.CoupletMsgData; +//import com.couplet.analyze.msg.mapper.IncidentMapper; +//import com.couplet.analyze.msg.service.impl.realTimeData.RealTimeJudge; +//import com.couplet.common.domain.request.RealTimeDataRequest; +//import com.rabbitmq.client.Channel; +//import lombok.extern.log4j.Log4j2; +//import org.springframework.amqp.core.Message; +//import org.springframework.amqp.rabbit.annotation.RabbitHandler; +//import org.springframework.amqp.rabbit.annotation.RabbitListener; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.data.redis.core.StringRedisTemplate; +//import org.springframework.stereotype.Component; +// +//import java.io.IOException; +//import java.util.concurrent.TimeUnit; +// +///** +// * @Author: LiJiaYao +// * @Date: 2024/4/4 +// * @Description: +// */ +//@Log4j2 +//@Component +//@RabbitListener(queues = "finByVinQueueName") +//public class MsgConsumer { +// @Autowired +// private StringRedisTemplate redisTemplate; +// @Autowired +// private IncidentMapper incidentMapper; +// +// @RabbitHandler +// public void realTimeDataConsumer(RealTimeDataRequest realTimeDataRequest, Channel channel, Message message) throws IOException { +// +// log.info("消息进入队列,传入的数据是:[{}]", realTimeDataRequest); +// +// String messageId = message.getMessageProperties().getMessageId(); +// long deliveryTag = message.getMessageProperties().getDeliveryTag(); +// if (!redisTemplate.hasKey("消息不丢失:" + messageId)) { +// redisTemplate.opsForValue().set("消息不丢失:" + messageId, "" + deliveryTag, 1, TimeUnit.MINUTES); +// } +// +// Long add = redisTemplate.opsForSet().add("消息不重复:" + messageId, messageId); +// redisTemplate.expire("消息不重复:" + messageId, 5, TimeUnit.MINUTES); +// try { +// if (0 < add) { +// JSONObject jsonObject = JSONObject.parseObject(String.valueOf(realTimeDataRequest)); +// Long userId = jsonObject.getLong("userId"); +// String vin = jsonObject.getString("vin"); +// RealTimeDataRequest request = new RealTimeDataRequest(); +// request.setVin(vin); +// request.setUserId(userId); +// RealTimeJudge.addRealTime(request); +// //判断车辆是否有实时数据,如果没有则删除数据 +// if (RealTimeJudge.isJudge(realTimeDataRequest.getVin())){ +// log.info("开始实时数据传输:[{}]",realTimeDataRequest.getVin()); +// } +// CoupletMsgData incident = incidentMapper.queryByIncident(realTimeDataRequest.getVin()); +// if (incident == null){ +// log.error("没有数据......"); +// } +// redisTemplate.opsForList().rightPush("coupletMsgData", JSON.toJSONString(incident)); +// +// channel.basicAck(deliveryTag, false); +// } else { +// log.error("消息不能重复消费:[{}]", realTimeDataRequest); +// channel.basicReject(deliveryTag, false); +// } +// } catch (IOException e) { +// +// log.error("消息未进入队列,传入的信息是:【{}】", realTimeDataRequest); +// String s = redisTemplate.opsForValue().get("消息不丢失:" + messageId); +// +// Long o = Long.valueOf(s); +// if (deliveryTag == o + 2) { +// log.error("消息已丢失,无法传入的信息是:【{}】", realTimeDataRequest); +// channel.basicNack(deliveryTag, false, false); +// } else { +// log.error("消息已丢失,已再次传入的信息是:【{}】", realTimeDataRequest); +// channel.basicNack(deliveryTag, true, false); +// } +// +// } +// +// +// } +// +//} diff --git a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/VehicleConsumer.java b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/VehicleConsumer.java index bf8b0e6..e92dbb4 100644 --- a/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/VehicleConsumer.java +++ b/couplet-modules/couplet-analyze/couplet-analyze-msg/src/main/java/com/couplet/analyze/msg/consumer/VehicleConsumer.java @@ -1,68 +1,68 @@ -package com.couplet.analyze.msg.consumer; - -import com.couplet.common.core.text.Convert; -import com.couplet.common.redis.service.RedisService; -import com.rabbitmq.client.Channel; -import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.Message; -import org.springframework.amqp.rabbit.annotation.RabbitHandler; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.BoundSetOperations; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.concurrent.TimeUnit; - -/** - * @Author: LiJiaYao - * @Date: 2024/4/4 - * @Description: - */ -@Log4j2 -@Component -@RabbitListener(queues = "vehicleQueue") -public class VehicleConsumer { - @Autowired - private RedisService redisService; - @RabbitHandler - public void vehicleConsumer(String vehicleAndLogo, Channel channel, Message message) throws IOException { - log.info("车辆消息进入队列,传入的数据是:[{}]", vehicleAndLogo); - String messageId = message.getMessageProperties().getMessageId(); - long deliveryTag = message.getMessageProperties().getDeliveryTag(); - if (!redisService.hasKey("车辆消息不丢失:" + messageId)) { - redisService.setCacheObject("车辆消息不丢失:" + messageId, "" + deliveryTag); - } - HashSet objects = new HashSet<>(); - objects.add(messageId); - BoundSetOperations set = redisService.setCacheSet("车辆信息消息不重复:" + messageId, objects); - redisService.expire("车辆信息消息不重复:" + messageId, 5, TimeUnit.MINUTES); - try { - if (set != null) { -// String key = Convert.toStr(id); - - String key = "id"; - redisService.setCacheObject(key, vehicleAndLogo); - redisService.expire(key, 10, TimeUnit.MINUTES); - //判断车辆是否有实时数据,如果没有则删除数据 - channel.basicAck(deliveryTag, false); - } else { - log.error("车辆消息不能重复消费:[{}]", vehicleAndLogo); - channel.basicReject(deliveryTag, false); - } - } catch (IOException e) { - log.error("车辆消息未进入队列,传入的信息是:【{}】", vehicleAndLogo); - String s = redisService.getCacheObject("车辆消息不丢失:" + messageId); - Long o = Long.valueOf(s); - if (deliveryTag == o + 2) { - log.error("车辆消息已丢失,无法传入的信息是:【{}】", vehicleAndLogo); - channel.basicNack(deliveryTag, false, false); - } else { - log.error("车辆消息已丢失,已再次传入的信息是:【{}】", vehicleAndLogo); - channel.basicNack(deliveryTag, true, false); - } - } - } -} +//package com.couplet.analyze.msg.consumer; +// +//import com.couplet.common.core.text.Convert; +//import com.couplet.common.redis.service.RedisService; +//import com.rabbitmq.client.Channel; +//import lombok.extern.log4j.Log4j2; +//import org.springframework.amqp.core.Message; +//import org.springframework.amqp.rabbit.annotation.RabbitHandler; +//import org.springframework.amqp.rabbit.annotation.RabbitListener; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.data.redis.core.BoundSetOperations; +//import org.springframework.stereotype.Component; +// +//import java.io.IOException; +//import java.util.HashSet; +//import java.util.List; +//import java.util.concurrent.TimeUnit; +// +///** +// * @Author: LiJiaYao +// * @Date: 2024/4/4 +// * @Description: +// */ +//@Log4j2 +//@Component +//@RabbitListener(queues = "vehicleQueue") +//public class VehicleConsumer { +// @Autowired +// private RedisService redisService; +// @RabbitHandler +// public void vehicleConsumer(String vehicleAndLogo, Channel channel, Message message) throws IOException { +// log.info("车辆消息进入队列,传入的数据是:[{}]", vehicleAndLogo); +// String messageId = message.getMessageProperties().getMessageId(); +// long deliveryTag = message.getMessageProperties().getDeliveryTag(); +// if (!redisService.hasKey("车辆消息不丢失:" + messageId)) { +// redisService.setCacheObject("车辆消息不丢失:" + messageId, "" + deliveryTag); +// } +// HashSet objects = new HashSet<>(); +// objects.add(messageId); +// BoundSetOperations set = redisService.setCacheSet("车辆信息消息不重复:" + messageId, objects); +// redisService.expire("车辆信息消息不重复:" + messageId, 5, TimeUnit.MINUTES); +// try { +// if (set != null) { +//// String key = Convert.toStr(id); +// +// String key = "id"; +// redisService.setCacheObject(key, vehicleAndLogo); +// redisService.expire(key, 10, TimeUnit.MINUTES); +// //判断车辆是否有实时数据,如果没有则删除数据 +// channel.basicAck(deliveryTag, false); +// } else { +// log.error("车辆消息不能重复消费:[{}]", vehicleAndLogo); +// channel.basicReject(deliveryTag, false); +// } +// } catch (IOException e) { +// log.error("车辆消息未进入队列,传入的信息是:【{}】", vehicleAndLogo); +// String s = redisService.getCacheObject("车辆消息不丢失:" + messageId); +// Long o = Long.valueOf(s); +// if (deliveryTag == o + 2) { +// log.error("车辆消息已丢失,无法传入的信息是:【{}】", vehicleAndLogo); +// channel.basicNack(deliveryTag, false, false); +// } else { +// log.error("车辆消息已丢失,已再次传入的信息是:【{}】", vehicleAndLogo); +// channel.basicNack(deliveryTag, true, false); +// } +// } +// } +//} From 1c6cebb2ccc74ad40fd6f4d851378173a8076ad6 Mon Sep 17 00:00:00 2001 From: lijiayao <13831655+xiao-yao-charge-forward@user.noreply.gitee.com> Date: Sun, 7 Apr 2024 22:37:47 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E7=94=B5=E5=AD=90=E5=9B=B4?= =?UTF-8?q?=E6=A0=8F=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../couplet-common-event/.gitignore | 38 +++++++++++++++++++ .../common/contents/AnalyzeEventContents.java | 27 +++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 couplet-common/couplet-common-event/.gitignore create mode 100644 couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/contents/AnalyzeEventContents.java diff --git a/couplet-common/couplet-common-event/.gitignore b/couplet-common/couplet-common-event/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/couplet-common/couplet-common-event/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/contents/AnalyzeEventContents.java b/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/contents/AnalyzeEventContents.java new file mode 100644 index 0000000..f920863 --- /dev/null +++ b/couplet-common/couplet-common-event/src/main/java/com/couplet/analyze/common/contents/AnalyzeEventContents.java @@ -0,0 +1,27 @@ +package com.couplet.analyze.common.contents; + +/** + * @Author: LiJiaYao + * @Date: 2024/4/7 + * @Description: 事件内容 + */ +public class AnalyzeEventContents { + + /** + * 故障 + */ + String BREAKDOWN = "breakdown"; + /** + * 电子围栏 + */ + String ELECTRONIC_FENCE = "electronic-fence"; + /** + * 实时数据 + */ + String REAL_TIME_DATA = "real-time-data"; + + /** + * 存储 + */ + String STORED_EVENT = "stored-event"; +}