Compare commits

...

2 Commits

Author SHA1 Message Date
黄大举 64823b766e kafka实现消息接收,直接编译成对象 2024-04-02 23:08:57 +08:00
李永杰 deebcff5bb 故障日志 2024-04-01 14:02:04 +08:00
20 changed files with 1610 additions and 5 deletions

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.muyu</groupId>
<artifactId>muyu</artifactId>
<version>3.6.3</version>
</parent>
<artifactId>muyu-analyze</artifactId>
<properties>
<maven.compiler.source>20</maven.compiler.source>
<maven.compiler.target>20</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.8.0</version>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- mqtt -->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Swagger UI -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.fox.version}</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- RuoYi Common DataSource -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-datasource</artifactId>
</dependency>
<!-- RuoYi Common DataScope -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-datascope</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-log</artifactId>
</dependency>
<!-- RuoYi Common Swagger -->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-file-remote</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,36 @@
package com.muyu.analyze;
import com.muyu.common.security.annotation.EnableCustomConfig;
import com.muyu.common.security.annotation.EnableRyFeignClients;
import com.muyu.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
*
*
* @author muyu
*/
@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@EnableScheduling
public class MuYuAnalyzeApplication
{
public static void main(String[] args)
{
SpringApplication.run(MuYuAnalyzeApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 系统模块启动成功 ლ(´ڡ`ლ)゙ \n" +
" .-------. ____ __ \n" +
" | _ _ \\ \\ \\ / / \n" +
" | ( ' ) | \\ _. / ' \n" +
" |(_ o _) / _( )_ .' \n" +
" | (_,_).' __ ___(_ o _)' \n" +
" | |\\ \\ | || |(_,_)' \n" +
" | | \\ `' /| `-' / \n" +
" | | \\ / \\ / \n" +
" ''-' `'-' `-..-' ");
}
}

View File

@ -0,0 +1,48 @@
package com.muyu.analyze.config;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@Configuration
public class KafkaConfig {
// Kafka Bootstrap Servers
public static final String BOOTSTRAP_SERVERS = "10.10.26.5:9092";
// 默认主题
public static final String DEFAULT_TOPIC = "test";
public static final String DEFAULT_KEY = "10001";
public static Properties properties1(){
// 1构建 Properties 对象 存放 kafka 生产者配置信息
Properties properties1 = new Properties();
// 设置 kafka 连接地址(从配置文件/环境变量获取)
properties1.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaConfig.BOOTSTRAP_SERVERS);
// 设置 键值 序列化
properties1.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer .class.getName());
properties1.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
return properties1;
}
public static Properties properties2(){
Properties properties2 = new Properties();
properties2.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "10.10.26.5:9092");
properties2.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
properties2.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
properties2.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group");
return properties2;
}
}

View File

@ -0,0 +1,34 @@
package com.muyu.analyze.consumer;
import com.muyu.analyze.domian.VehicleData;
import com.muyu.analyze.utils.AnalyzeUtils;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
*
* @author zhuwenqiang
* @date 2023/3/1
*/
@Component
public class Consumer {
@KafkaListener(topics="test", groupId = "group",properties = {"bootstrap.servers=10.10.26.5:9092"})
public void getMessage(String message) {
VehicleData analyze = AnalyzeUtils.analyze(message);
System.out.println("kafka 消费者监听,接收到消息:" + analyze);
}
}

View File

@ -0,0 +1,281 @@
package com.muyu.analyze.domian;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author
* @Classname VehicleData
* @Description
* @Date 2021/8/5
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class VehicleData {
/**
* VIN
*/
private String vin;
/**
*
*/
private String dateTime;
/**
* 线
*/
private String drivingRoute;
/**
*
*/
private String longitude;
/**
*
*/
private String latitude;
/**
*
*/
private String speed;
/**
*
*/
private BigDecimal mileage;
/**
*
*/
private String voltage;
/**
*
*/
private String current;
/**
*
*/
private String resistance;
/**
*
*/
private String gear = "P";
/**
*
*/
private String accelerationPedal;
/**
*
*/
private String brakePedal;
/**
*
*/
private String fuelConsumptionRate;
/**
*
*/
private String motorControllerTemperature;
/**
*
*/
private String motorSpeed;
/**
*
*/
private String motorTorque;
/**
*
*/
private String motorTemperature;
/**
*
*/
private String motorVoltage;
/**
*
*/
private String motorCurrent;
/**
* SOC
*/
private BigDecimal remainingBattery;
/**
*
*/
private BigDecimal batteryLevel;
/**
*
*/
private String maximumFeedbackPower;
/**
*
*/
private String maximumDischargePower;
/**
* BMS
*/
private String selfCheckCounter;
/**
*
*/
private String totalBatteryCurrent;
/**
* V3
*/
private String totalBatteryVoltage;
/**
*
*/
private String singleBatteryMaxVoltage;
/**
*
*/
private String singleBatteryMinVoltage;
/**
*
*/
private String singleBatteryMaxTemperature;
/**
*
*/
private String singleBatteryMinTemperature;
/**
*
*/
private String availableBatteryCapacity;
/**
*
*/
private int vehicleStatus = 1;
/**
*
*/
private int chargingStatus = 1;
/**
*
*/
private int operatingStatus = 1;
/**
* SOC
*/
private int socStatus = 1;
/**
*
*/
private int chargingEnergyStorageStatus = 1;
/**
*
*/
private int driveMotorStatus = 1;
/**
*
*/
private int positionStatus = 1;
/**
* EAS()
*/
private int easStatus = 1;
/**
* PTC()
*/
private int ptcStatus = 0;
/**
* EPS()
*/
private int epsStatus = 1;
/**
* ABS()
*/
private int absStatus = 1;
/**
* MCU(/)
*/
private int mcuStatus = 1;
/**
*
*/
private int heatingStatus = 1;
/**
*
*/
private int batteryStatus = 1;
/**
*
*/
private int batteryInsulationStatus = 1;
/**
* DCDC()
*/
private int dcdcStatus = 1;
/**
* CHG()
*/
private int chgStatus = 1;
/**
*
*/
private String vehicleStatusMsg;
/**
*
*/
private String smartHardwareMsg;
/**
*
*/
private String batteryMsg;
}

View File

@ -0,0 +1,318 @@
package com.muyu.analyze.utils;
import com.muyu.analyze.domian.VehicleData;
import java.math.BigDecimal;
import java.util.Stack;
/**
* @ProjectName: cloud-vehicles
* @PackageName: com.muyu.analyze.config
* @Description TODO
* @Author HuangDaJu
* @Date 2024/4/2 21:33
* @Version 1.0
*/
public class AnalyzeUtils {
public static VehicleData analyze(String aa) {
VehicleData vehicleData = new VehicleData();
/**
* VIN private String vin;
*/
String vin = aa.substring(0, 17);
vehicleData.setVin(vin);
/**
* private String dateTime;
*/
String time = aa.substring(17, 30);
vehicleData.setDateTime(time);
/**
* 线 private String drivingRoute;
*/
/**
* private String longitude;
*/
String longitude = aa.substring(30, 41);
vehicleData.setLongitude(longitude);
/**
* private String latitude;
*/
String latitude = aa.substring(41, 51);
vehicleData.setLatitude(latitude);
/**
* private String speed;
*/
String speed = aa.substring(51, 57);
vehicleData.setSpeed(speed);
/**
* private BigDecimal mileage;
*/
String mileage = aa.substring(57, 68);
vehicleData.setMileage(new BigDecimal(mileage));
/**
* private String voltage;
*/
String voltage = aa.substring(68, 74);
vehicleData.setVoltage(voltage);
/**
* private String current;
*/
String current = aa.substring(74, 79);
vehicleData.setCurrent(current);
/**
* private String resistance;
*/
String resistance = aa.substring(79, 88);
vehicleData.setResistance(resistance);
/**
* private String gear = "P";
*/
String gear = aa.substring(88, 89);
vehicleData.setGear(gear);
/**
* private String accelerationPedal;
*/
String accelerationPedal = aa.substring(89, 91);
vehicleData.setAccelerationPedal(accelerationPedal);
/**
* private String brakePedal;
*/
String brakePedal =aa.substring(91,93);
vehicleData.setBrakePedal(brakePedal);
/**
* private String fuelConsumptionRate;
*/
String fuelConsumptionRate =aa.substring(93,98);
vehicleData.setFuelConsumptionRate(fuelConsumptionRate);
/**
* private String motorControllerTemperature;
*/
String motorControllerTemperature =aa.substring(98,104);
vehicleData.setMotorControllerTemperature(motorControllerTemperature);
/**
* private String motorSpeed;
*/
String motorSpeed =aa.substring(104,109);
vehicleData.setMotorSpeed(motorSpeed);
/**
* private String motorTorque;
*/
String motorTorque = aa.substring(109, 113);
vehicleData.setMotorTorque(motorTorque);
/**
* private String motorTemperature;
*/
String motorTemperature = aa.substring(113, 119);
vehicleData.setMotorTemperature(motorTemperature);
/**
* private String motorVoltage;
*/
String motorVoltage = aa.substring(119, 124);
vehicleData.setMotorVoltage(motorVoltage);
/**
* private String motorCurrent;
*/
// 电机电流: 10446000
String motorCurrent = aa.substring(124, 132);
vehicleData.setMotorCurrent(motorCurrent);
// 动力电池剩余电量 SOC: 44103.
/**
* SOC private BigDecimal remainingBattery;
*/
String remainingBattery = aa.substring(132, 138);
vehicleData.setRemainingBattery(new BigDecimal(remainingBattery));
// 当前状态允许的最大反馈功率: 400000
/**
* private String maximumFeedbackPower;
*/
String maximumFeedbackPower = aa.substring(138, 144);
vehicleData.setMaximumFeedbackPower(maximumFeedbackPower);
// 当前状态允许最大放电功率: 130000
/**
* private String maximumDischargePower;
*/
String maximumDischargePower = aa.substring(144, 150);
vehicleData.setMaximumDischargePower(maximumDischargePower);
// BMS 自检计数器: 20
/**
* BMSprivate String selfCheckCounter;
*/
String selfCheckCounter = aa.substring(150, 152);
vehicleData.setSelfCheckCounter(selfCheckCounter);
// 动力电池充放电电流: 00000
/**
* private String totalBatteryCurrent;
*/
String totalBatteryCurrent = aa.substring(152, 157);
vehicleData.setTotalBatteryCurrent(totalBatteryCurrent);
// 动力电池负载端总电压 V3: 605000
/**
* V3 private String totalBatteryVoltage;
*/
String totalBatteryVoltage = aa.substring(157, 163);
vehicleData.setTotalBatteryVoltage(totalBatteryVoltage);
// 单次最大电压: 4000
/**
* private String singleBatteryMaxVoltage;
*/
String singleBatteryMaxVoltage = aa.substring(163, 167);
vehicleData.setSingleBatteryMaxVoltage(singleBatteryMaxVoltage);
// 单体电池最低电压: 3000
/**
* private String singleBatteryMinVoltage;
*/
String singleBatteryMinVoltage = aa.substring(167, 171);
vehicleData.setSingleBatteryMinVoltage(singleBatteryMinVoltage);
// 单体电池最高温度: 650000
/**
* private String singleBatteryMaxTemperature;
*/
String singleBatteryMaxTemperature = aa.substring(171, 177);
vehicleData.setSingleBatteryMaxTemperature(singleBatteryMaxTemperature);
// 单体电池最低温度: 600000
/**
* private String singleBatteryMinTemperature;
*/
String singleBatteryMinTemperature = aa.substring(177, 183);
vehicleData.setSingleBatteryMinTemperature(singleBatteryMinTemperature);
// 动力电池可用容量: 530000
/**
* private String availableBatteryCapacity;
*/
String availableBatteryCapacity = aa.substring(183, 189);
vehicleData.setAvailableBatteryCapacity(availableBatteryCapacity);
// 车辆状态: 0
String vehicleStatus = aa.substring(189, 190);
vehicleData.setVehicleStatus(Integer.parseInt(vehicleStatus));
// 充电状态: 1
String chargingStatus = aa.substring(190, 191);
vehicleData.setChargingStatus(Integer.parseInt(chargingStatus));
// 运行状态: 1
String operatingStatus = aa.substring(191, 192);
vehicleData.setOperatingStatus(Integer.parseInt(operatingStatus));
// SOC: 1
String socStatus = aa.substring(192, 193);
vehicleData.setSocStatus(Integer.parseInt(socStatus));
// 可充电储能装置工作状态: 0
String chargingEnergyStorageStatus = aa.substring(193, 194);
vehicleData.setChargingEnergyStorageStatus(Integer.parseInt(chargingEnergyStorageStatus));
// 驱动电机状态: 1
String driveMotorStatus = aa.substring(194, 195);
vehicleData.setDriveMotorStatus(Integer.parseInt(driveMotorStatus));
// 定位是否有效: 1
String positionStatus = aa.substring(195, 196);
vehicleData.setPositionStatus(Integer.parseInt(positionStatus));
// EAS: 1
String easStatus = aa.substring(196, 197);
vehicleData.setEasStatus(Integer.parseInt(easStatus));
// PTC: 1
String ptcStatus = aa.substring(197, 198);
vehicleData.setPtcStatus(Integer.parseInt(ptcStatus));
// EPS: 1
String epsStatus = aa.substring(198, 199);
vehicleData.setEpsStatus(Integer.parseInt(epsStatus));
// ABS: 1
String absStatus = aa.substring(199, 200);
vehicleData.setAbsStatus(Integer.parseInt(absStatus));
// MCU: 1
String mcuStatus = aa.substring(200, 201);
vehicleData.setMcuStatus(Integer.parseInt(mcuStatus));
// 动力电池加热状态: 1
String heatingStatus = aa.substring(201, 202);
vehicleData.setHeatingStatus(Integer.parseInt(heatingStatus));
// 动力电池当前状态: 1
String batteryStatus = aa.substring(202, 203);
vehicleData.setBatteryStatus(Integer.parseInt(batteryStatus));
// 动力电池保温状态: 1
String batteryInsulationStatus = aa.substring(203, 204);
vehicleData.setBatteryInsulationStatus(Integer.parseInt(batteryInsulationStatus));
// DCDC: 1
String dcdcStatus = aa.substring(204, 205);
vehicleData.setDcdcStatus(Integer.parseInt(dcdcStatus));
// CHG: 1
String chgStatus = aa.substring(205, 206);
vehicleData.setChgStatus(Integer.parseInt(chgStatus));
System.out.println(vehicleData);
return vehicleData;
}
}

View File

@ -0,0 +1,36 @@
# Tomcat
server:
port: 9008
# Spring
spring:
application:
# 应用名称
name: muyu-analyze
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 10.10.26.1:8848
config:
# 配置中心地址
server-addr: 10.10.26.1:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# Kafka
kafka:
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
bootstrap-servers: 10.10.26.5:9092
consumer:
group-id: group
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
#kafka:
# topic: test

View File

@ -0,0 +1,140 @@
package com.muyu.business.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.*;
import com.muyu.business.domain.req.*;
import io.swagger.annotations.*;
import lombok.*;
import lombok.experimental.*;
import org.springframework.format.annotation.*;
import java.io.*;
import java.util.*;
/**
*
* @Author LiYonJie
* @Date 2024/3/30
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("故障日志对象")
@TableName("fault_logs")
public class FaultLogs implements Serializable {
private static final long serialVersionUID = 1L;
/** 故障日志主键*/
@TableId(type = IdType.AUTO)
@ApiModelProperty("故障日志主键")
private Long logId;
/** 车辆VIN*/
@ApiModelProperty("车辆VIN")
private String carVin;
/**
*
*/
@ApiModelProperty("故障码")
private String faultCode;
/**故障名称*/
@ApiModelProperty("故障名称")
private String faultName;
/** 是否产生报警Y正常 N报警 */
@ApiModelProperty("是否产生报警")
private String alarmFlag;
/** 报警开始时间*/
@ApiModelProperty("报警开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startAlarmTime;
/** 报警结束时间*/
@ApiModelProperty("报警结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endAlarmTime;
/** 最近报警时间*/
@ApiModelProperty("最近报警时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date recentlyAlarmTime;
/** 处理时间*/
@ApiModelProperty("处理时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date disposeTime;
/** 处理人*/
private String disposeBy;
/** 处理状态0正常 1故障 2维护中*/
private String disposeStatus;
/** 创建者*/
@ApiModelProperty("创建者")
private String createBy;
/** 创建时间*/
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新者*/
@ApiModelProperty("更新者")
private String updateBy;
/** 更新时间*/
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 备注*/
@ApiModelProperty("备注")
private String remark;
public static FaultLogs addFaultLogsReq(FaultLogsAddReq faultLogsAddReq){
return FaultLogs.builder()
.carVin(faultLogsAddReq.getCarVin())
.faultCode(faultLogsAddReq.getFaultCode())
.faultName(faultLogsAddReq.getFaultName())
.alarmFlag(faultLogsAddReq.getAlarmFlag())
.startAlarmTime(faultLogsAddReq.getStartAlarmTime())
.endAlarmTime(faultLogsAddReq.getEndAlarmTime())
.recentlyAlarmTime(faultLogsAddReq.getRecentlyAlarmTime())
.disposeTime(faultLogsAddReq.getDisposeTime())
.disposeBy(faultLogsAddReq.getDisposeBy())
.disposeStatus(faultLogsAddReq.getDisposeStatus())
.createBy(faultLogsAddReq.getCreateBy())
.createTime(faultLogsAddReq.getCreateTime())
.build();
}
public static FaultLogs updFaultLogsReq(FaultLogsUpdReq faultLogsUpdReq){
return FaultLogs.builder()
.logId(faultLogsUpdReq.getLogId())
.carVin(faultLogsUpdReq.getCarVin())
.faultCode(faultLogsUpdReq.getFaultCode())
.faultName(faultLogsUpdReq.getFaultName())
.alarmFlag(faultLogsUpdReq.getAlarmFlag())
.startAlarmTime(faultLogsUpdReq.getStartAlarmTime())
.endAlarmTime(faultLogsUpdReq.getEndAlarmTime())
.recentlyAlarmTime(faultLogsUpdReq.getRecentlyAlarmTime())
.disposeTime(faultLogsUpdReq.getDisposeTime())
.disposeBy(faultLogsUpdReq.getDisposeBy())
.disposeStatus(faultLogsUpdReq.getDisposeStatus())
.updateBy(faultLogsUpdReq.getUpdateBy())
.updateTime(faultLogsUpdReq.getUpdateTime())
.build();
}
}

View File

@ -0,0 +1,96 @@
package com.muyu.business.domain.req;
import com.fasterxml.jackson.annotation.*;
import lombok.*;
import org.springframework.format.annotation.*;
import java.io.*;
import java.util.*;
/**
*
*
* @Author LiYonJie
* @Date 2024/3/30
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FaultLogsAddReq implements Serializable {
/**
* VIN
*/
private String carVin;
/**
*
*/
private String faultCode;
/**
*
*/
private String faultName;
/**
*
*/
private String alarmFlag;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date startAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date endAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date recentlyAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date disposeTime;
/**
*
*/
private String disposeBy;
/**
* 0 1 2
*/
private String disposeStatus;
/**
*
*/
private String createBy;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date createTime;
/**
*
*/
private String remark;
}

View File

@ -0,0 +1,48 @@
package com.muyu.business.domain.req;
import com.fasterxml.jackson.annotation.*;
import io.swagger.annotations.*;
import lombok.*;
import org.springframework.format.annotation.*;
import java.io.*;
import java.util.*;
/**
*
*
* @Author LiYonJie
* @Date 2024/3/30
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FaultLogsReq implements Serializable {
/**
* VIN
*/
private String carVin;
/**
*
*/
private String faultCode;
/**故障名称*/
private String faultName;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date startAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date endAlarmTime;
}

View File

@ -0,0 +1,100 @@
package com.muyu.business.domain.req;
import com.fasterxml.jackson.annotation.*;
import lombok.*;
import org.springframework.format.annotation.*;
import java.io.*;
import java.util.*;
/**
*
*
* @Author LiYonJie
* @Date 2024/3/30
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FaultLogsUpdReq implements Serializable {
/**
*
*/
private Long logId;
/**
* VIN
*/
private String carVin;
/**
*
*/
private String faultCode;
/**
*
*/
private String faultName;
/**
*
*/
private String alarmFlag;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date startAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date endAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date recentlyAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date disposeTime;
/**
*
*/
private String disposeBy;
/**
* 0 1 2
*/
private String disposeStatus;
/**
*
*/
private String updateBy;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date updateTime;
/**
*
*/
private String remark;
}

View File

@ -0,0 +1,75 @@
package com.muyu.business.domain.res;
import com.fasterxml.jackson.annotation.*;
import lombok.*;
import lombok.experimental.*;
import org.springframework.format.annotation.*;
import java.io.*;
import java.util.*;
/**
*
*
* @Author LiYonJie
* @Date 2024/3/30
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class FaultLogsResponse implements Serializable {
/**
* VIN
*/
private String carVin;
/**
*
*/
private Long faultId;
/**
*
*/
private String alarmFlag;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date startAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date endAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date recentlyAlarmTime;
/**
*
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date disposeTime;
/**
*
*/
private String disposeBy;
/**
* 0 1 2
*/
private String disposeStatus;
}

View File

@ -11,6 +11,7 @@ import com.muyu.system.common.domain.FaultCodeInfo;
import com.muyu.system.common.domain.req.FaultCodeReq;
import com.muyu.system.common.domain.req.FaultCodesAddReq;
import com.muyu.system.common.domain.req.FaultCodesUpdReq;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.validation.annotation.*;
import org.springframework.web.bind.annotation.*;
@ -23,6 +24,8 @@ import java.util.*;
* @author Li YongJie
* @date 2024-03-28
*/
@Api(tags = "故障码管理")
@ApiModel(description = "故障码Controller")
@RestController
@RequestMapping("/faultCodes")
public class FaultCodesController extends BaseController {
@ -36,6 +39,7 @@ public class FaultCodesController extends BaseController {
/**
*
*/
@ApiOperation("故障码列表")
@RequiresPermissions("business:faultCodes:list")
@GetMapping("/list")
public Result<TableDataInfo> list(FaultCodeReq faultCodes) {
@ -47,6 +51,7 @@ public class FaultCodesController extends BaseController {
/**
*
*/
@ApiOperation("新增故障码")
@RequiresPermissions("business:faultCodes:add")
@Log(title = "故障码", businessType = BusinessType.INSERT)
@PostMapping
@ -57,6 +62,7 @@ public class FaultCodesController extends BaseController {
/**
*
*/
@ApiOperation("获取故障码详细信息")
@RequiresPermissions("business:faultCodes:query")
@GetMapping(value = "/{faultId}")
public Result getInfo(@PathVariable("faultId") Long faultId) {
@ -66,6 +72,7 @@ public class FaultCodesController extends BaseController {
/**
*
*/
@ApiOperation("修改故障码")
@RequiresPermissions("business:faultCodes:edit")
@Log(title = "故障码", businessType = BusinessType.UPDATE)
@PutMapping
@ -76,6 +83,7 @@ public class FaultCodesController extends BaseController {
/**
*
*/
@ApiOperation("修改故障码状态")
@RequiresPermissions("business:faultCodes:edit")
@Log(title = "故障码", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
@ -86,6 +94,7 @@ public class FaultCodesController extends BaseController {
/**
*
*/
@ApiOperation("删除故障码")
@RequiresPermissions("business:faultCodes:remove")
@Log(title = "故障码", businessType = BusinessType.DELETE)
@DeleteMapping("/{faultIds}")

View File

@ -0,0 +1,88 @@
package com.muyu.business.controller;
import com.muyu.business.domain.*;
import com.muyu.business.domain.req.*;
import com.muyu.business.service.*;
import com.muyu.common.core.domain.*;
import com.muyu.common.core.web.controller.*;
import com.muyu.common.core.web.page.*;
import com.muyu.common.log.annotation.*;
import com.muyu.common.log.enums.*;
import com.muyu.common.security.annotation.*;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.validation.annotation.*;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* Controller
*
* @Author LiYonJie
* @Date 2024/3/30
*/
@Api(tags = "故障日志管理")
@ApiModel(description = "故障日志Controller")
@RestController
@RequestMapping("/faultLogs")
public class FaultLogsController extends BaseController {
/**
* Service
*/
@Autowired
private FaultLogsService faultLogsService;
@ApiOperation("故障日志列表")
@RequiresPermissions("business:faultLogs:list")
@GetMapping("/list")
public Result<TableDataInfo> list(FaultLogsReq faultLogsReq) {
startPage();
List<FaultLogs> list = faultLogsService.selectFaultLogsList(faultLogsReq);
return getDataTable(list);
}
/**
*
*/
@ApiOperation("新增故障日志")
@RequiresPermissions("business:faultLogs:add")
@Log(title = "故障日志", businessType = BusinessType.INSERT)
@PostMapping
public Result add(@RequestBody @Validated FaultLogsAddReq faultLogsAddReq) {
return toAjax(faultLogsService.insertFaultLogs(FaultLogs.addFaultLogsReq(faultLogsAddReq)));
}
/**
*
*/
@ApiOperation(value = "故障日志详情",hidden = true)
@RequiresPermissions("business:faultLogs:query")
@GetMapping("/{logId}")
public Result detail(@ApiParam(value = "故障日志主键") @PathVariable("logId") Long logId) {
return Result.success(faultLogsService.selectFaultLogsById(logId));
}
/**
*
*/
@ApiOperation(value = "修改故障日志",hidden = true)
@RequiresPermissions("business:faultLogs:edit")
@Log(title = "故障日志", businessType = BusinessType.UPDATE)
@PutMapping
public Result edit(@RequestBody @Validated FaultLogsUpdReq faultLogsUpdReq) {
return toAjax(faultLogsService.updateFaultLogs(FaultLogs.updFaultLogsReq(faultLogsUpdReq)));
}
/**
*
*/
@ApiOperation(value = "删除故障日志",hidden = true)
@RequiresPermissions("business:faultLogs:remove")
@Log(title = "故障日志", businessType = BusinessType.DELETE)
@DeleteMapping("/{logIds}")
public Result remove(@ApiParam(value = "故障日志Id", required = true) @PathVariable("logIds") Long[] logIds) {
return toAjax(faultLogsService.deleteFaultLogsByIds(logIds));
}
}

View File

@ -0,0 +1,13 @@
package com.muyu.business.mapper;
import com.baomidou.mybatisplus.core.mapper.*;
import com.muyu.business.domain.*;
/**
* Mapper
*
* @Author LiYonJie
* @Date 2024/3/30
*/
public interface FaultLogsMapper extends BaseMapper<FaultLogs> {
}

View File

@ -0,0 +1,63 @@
package com.muyu.business.service;
import com.baomidou.mybatisplus.extension.service.*;
import com.muyu.business.domain.*;
import com.muyu.business.domain.req.*;
import java.util.*;
/**
* Service
*
* @Author LiYonJie
* @Date 2024/3/30
*/
public interface FaultLogsService extends IService<FaultLogs> {
/**
*
*
* @param faultLogsReq
* @return
*/
List<FaultLogs> selectFaultLogsList(FaultLogsReq faultLogsReq);
/**
*
*
* @param faultLogs
* @return
*/
int insertFaultLogs(FaultLogs faultLogs);
/**
*
*
* @param logId
* @return
*/
FaultLogs selectFaultLogsById(Long logId);
/**
*
*
* @param faultLogs
* @return
*/
int updateFaultLogs(FaultLogs faultLogs);
/**
*
*
* @param logId
* @return
*/
int deleteFaultLogsById(Long logId);
/**
*
*
* @param logIds
* @return
*/
int deleteFaultLogsByIds(Long[] logIds);
}

View File

@ -0,0 +1,84 @@
package com.muyu.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.*;
import com.baomidou.mybatisplus.extension.service.impl.*;
import com.muyu.business.domain.*;
import com.muyu.business.domain.req.*;
import com.muyu.business.mapper.*;
import com.muyu.business.service.*;
import com.muyu.common.core.utils.*;
import com.muyu.common.security.utils.*;
import lombok.extern.slf4j.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.stereotype.*;
import java.util.*;
/**
* Service
*
* @Author LiYonJie
* @Date 2024/3/30
*/
@Service
@Slf4j
public class FaultLogsServiceImpl extends ServiceImpl<FaultLogsMapper, FaultLogs>
implements FaultLogsService {
/**
* mapper
*/
@Autowired
private FaultLogsMapper faultLogsMapper;
@Override
public List<FaultLogs> selectFaultLogsList(FaultLogsReq faultLogsReq) {
LambdaQueryWrapper<FaultLogs> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StringUtils.isNotEmpty(faultLogsReq.getCarVin()), FaultLogs::getCarVin, faultLogsReq.getCarVin());
wrapper.eq(StringUtils.isNotNull(faultLogsReq.getFaultCode()), FaultLogs::getFaultCode, faultLogsReq.getFaultCode());
wrapper.like(StringUtils.isNotEmpty(faultLogsReq.getFaultName()), FaultLogs::getFaultName, faultLogsReq.getFaultName());
Date startAlarmTime = DateUtils.parseDate(faultLogsReq.getStartAlarmTime());
Date endAlarmTime = DateUtils.parseDate(faultLogsReq.getEndAlarmTime());
// wrapper.gt(StringUtils.isNotNull(faultLogsReq.getStartAlarmTime()), FaultLogs::getStartAlarmTime, startAlarmTime);
// wrapper.lt(StringUtils.isNotNull(faultLogsReq.getEndAlarmTime()), FaultLogs::getEndAlarmTime, endAlarmTime);
log.info("----------------------",startAlarmTime, ";-------------" + endAlarmTime);
wrapper.apply(StringUtils.isNotNull(startAlarmTime),"UNIX_TIMESTAMP(start_alarm_time) >= UNIX_TIMESTAMP('" + startAlarmTime + "')");
wrapper.apply(StringUtils.isNotNull(endAlarmTime),"UNIX_TIMESTAMP(end_alarm_time) <= UNIX_TIMESTAMP('" + endAlarmTime + "')");
return faultLogsMapper.selectList(wrapper);
}
@Override
public int insertFaultLogs(FaultLogs faultLogs) {
faultLogs.setEndAlarmTime(null);
faultLogs.setRecentlyAlarmTime(null);
faultLogs.setDisposeTime(null);
faultLogs.setDisposeBy(null);
faultLogs.setDisposeStatus("1");
faultLogs.setAlarmFlag("N");
faultLogs.setCreateBy(SecurityUtils.getUsername());
faultLogs.setCreateTime(DateUtils.getNowDate());
return faultLogsMapper.insert(faultLogs);
}
@Override
public FaultLogs selectFaultLogsById(Long logId) {
return faultLogsMapper.selectById(logId);
}
@Override
public int updateFaultLogs(FaultLogs faultLogs) {
faultLogs.setUpdateBy(SecurityUtils.getUsername());
faultLogs.setUpdateTime(DateUtils.getNowDate());
return faultLogsMapper.updateById(faultLogs);
}
@Override
public int deleteFaultLogsById(Long logId) {
return faultLogsMapper.deleteById(logId);
}
@Override
public int deleteFaultLogsByIds(Long[] logIds) {
return faultLogsMapper.deleteBatchIds(Arrays.asList(logIds));
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mybatis数据层 namespace命名空间-->
<mapper namespace="com.muyu.business.mapper.FaultLogsMapper">
</mapper>

14
pom.xml
View File

@ -47,6 +47,7 @@
<muyu-business-common.version>3.6.3</muyu-business-common.version>
<muyu-business-remote.version>3.6.3</muyu-business-remote.version>
<muyu-business-server.version>3.6.3</muyu-business-server.version>
<muyu-analyze.version>3.6.3</muyu-analyze.version>
</properties>
@ -276,11 +277,11 @@
<!-- <artifactId>muyu-search-remote</artifactId>-->
<!-- <version>${muyu.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.muyu</groupId>-->
<!-- <artifactId>muyu-search-server</artifactId>-->
<!-- <version>${muyu.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.muyu</groupId>
<artifactId>muyu-analyze</artifactId>
<version>${muyu.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -290,6 +291,9 @@
<module>muyu-visual</module>
<module>muyu-modules</module>
<module>muyu-common</module>
<module>muyu-analyze</module>
</modules>
<packaging>pom</packaging>