Compare commits
5 Commits
Author | SHA1 | Date |
---|---|---|
|
b6a61dcef1 | |
|
82a7117e22 | |
|
3e73a8598a | |
|
df1c9ad9e8 | |
|
7063af945e |
|
@ -34,7 +34,7 @@ public class TokenController {
|
|||
@PostMapping("login")
|
||||
public Result<?> login (@RequestBody LoginBody form) {
|
||||
// 用户登录
|
||||
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
|
||||
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(),form.getFirmName());
|
||||
// 获取登录token
|
||||
return Result.success(tokenService.createToken(userInfo));
|
||||
}
|
||||
|
|
|
@ -17,7 +17,18 @@ public class LoginBody {
|
|||
*/
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
private String firmName;
|
||||
|
||||
public String getFirmName() {
|
||||
return firmName;
|
||||
}
|
||||
|
||||
public void setFirmName(String firmName) {
|
||||
this.firmName = firmName;
|
||||
}
|
||||
|
||||
public String getUsername () {
|
||||
return username;
|
||||
|
|
|
@ -14,7 +14,7 @@ import com.muyu.common.core.utils.ip.IpUtils;
|
|||
import com.muyu.common.redis.service.RedisService;
|
||||
import com.muyu.common.security.utils.SecurityUtils;
|
||||
import com.muyu.common.system.domain.Firm;
|
||||
import com.muyu.common.system.remote.RemoteFirmService;
|
||||
import com.muyu.common.system.domain.SysUserMessage;
|
||||
import com.muyu.common.system.remote.RemoteUserService;
|
||||
import com.muyu.common.system.domain.SysUser;
|
||||
import com.muyu.common.system.domain.LoginUser;
|
||||
|
@ -31,9 +31,6 @@ public class SysLoginService {
|
|||
@Autowired
|
||||
private RemoteUserService remoteUserService;
|
||||
|
||||
@Autowired
|
||||
private RemoteFirmService remoteFirmService;
|
||||
|
||||
@Autowired
|
||||
private SysPasswordService passwordService;
|
||||
|
||||
|
@ -46,7 +43,7 @@ public class SysLoginService {
|
|||
/**
|
||||
* 登录
|
||||
*/
|
||||
public LoginUser login (String username, String password) {
|
||||
public LoginUser login (String username, String password,String firmName) {
|
||||
// 用户名或密码为空 错误
|
||||
if (StringUtils.isAnyBlank(username, password)) {
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
|
||||
|
@ -71,7 +68,24 @@ public class SysLoginService {
|
|||
throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
|
||||
}
|
||||
// 查询用户信息
|
||||
Result<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
|
||||
Result<LoginUser> userResult = null;
|
||||
//根据企业名称查询数据源
|
||||
if (StringUtils.isNotEmpty(firmName)){
|
||||
Result<String> result = remoteUserService.selectByfirmName(firmName);
|
||||
if (result.getData()!=null){
|
||||
SysUserMessage sysUserMessage = new SysUserMessage();
|
||||
sysUserMessage.setUsername(username);
|
||||
sysUserMessage.setPassword(password);
|
||||
sysUserMessage.setDatabaseName(result.getData());
|
||||
//查询这个数据源中的登录账号和密码
|
||||
userResult = remoteUserService.selectuser(sysUserMessage);
|
||||
}
|
||||
}
|
||||
// userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
|
||||
|
@ -118,7 +132,7 @@ public class SysLoginService {
|
|||
throw new ServiceException("密码长度必须在5到20个字符之间");
|
||||
}
|
||||
String firmName = registerBody.getFirmName();
|
||||
Result<Firm> byFirmName = remoteFirmService.findByFirmName(firmName);
|
||||
Result<Firm> byFirmName = remoteUserService.findByFirmName(firmName);
|
||||
Firm data = byFirmName.getData();
|
||||
if (null != data){
|
||||
throw new ServiceException("公司名称已经存在");
|
||||
|
|
|
@ -5,9 +5,9 @@ server:
|
|||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: xxy
|
||||
user-name:
|
||||
password:
|
||||
namespace: eight
|
||||
# Spring
|
||||
spring:
|
||||
application:
|
||||
|
|
|
@ -56,5 +56,5 @@ public class SecurityConstants {
|
|||
*/
|
||||
public static final String ROLE_PERMISSION = "role_permission";
|
||||
|
||||
public static final String SAAS_KEY = "ent-code";
|
||||
public static final String SAAS_KEY = "saas_key";
|
||||
}
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
<?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>cloud-common</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-common-kafka</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka-clients</artifactId>
|
||||
<version>3.0.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 项目公共核心 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-core</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,54 +0,0 @@
|
|||
package com.muyu.common.kafka.config;
|
||||
|
||||
import com.muyu.common.kafka.constants.KafkaConstants;
|
||||
import org.apache.kafka.clients.consumer.KafkaConsumer;
|
||||
import org.apache.kafka.common.serialization.Deserializer;
|
||||
import org.apache.kafka.common.serialization.StringDeserializer;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringBootConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* kafka 消息的消费者 配置类
|
||||
*/
|
||||
@Configuration
|
||||
public class KafkaConsumerConfig {
|
||||
|
||||
@Bean
|
||||
public KafkaConsumer kafkaConsumer() {
|
||||
Map<String, Object> configs = new HashMap<>();
|
||||
//kafka服务端的IP和端口,格式:(ip:port)
|
||||
configs.put("bootstrap.servers", "60.204.221.52:9092");
|
||||
//开启consumer的偏移量(offset)自动提交到Kafka
|
||||
configs.put("enable.auto.commit", true);
|
||||
//consumer的偏移量(offset) 自动提交的时间间隔,单位毫秒
|
||||
configs.put("auto.commit.interval", 5000);
|
||||
//在Kafka中没有初始化偏移量或者当前偏移量不存在情况
|
||||
//earliest, 在偏移量无效的情况下, 自动重置为最早的偏移量
|
||||
//latest, 在偏移量无效的情况下, 自动重置为最新的偏移量
|
||||
//none, 在偏移量无效的情况下, 抛出异常.
|
||||
configs.put("auto.offset.reset", "latest");
|
||||
//请求阻塞的最大时间(毫秒)
|
||||
configs.put("fetch.max.wait", 500);
|
||||
//请求应答的最小字节数
|
||||
configs.put("fetch.min.size", 1);
|
||||
//心跳间隔时间(毫秒)
|
||||
configs.put("heartbeat-interval", 3000);
|
||||
//一次调用poll返回的最大记录条数
|
||||
configs.put("max.poll.records", 500);
|
||||
//指定消费组
|
||||
configs.put("group.id", KafkaConstants.KafkaGrop);
|
||||
//指定key使用的反序列化类
|
||||
Deserializer keyDeserializer = new StringDeserializer();
|
||||
//指定value使用的反序列化类
|
||||
Deserializer valueDeserializer = new StringDeserializer();
|
||||
//创建Kafka消费者
|
||||
KafkaConsumer kafkaConsumer = new KafkaConsumer(configs, keyDeserializer, valueDeserializer);
|
||||
return kafkaConsumer;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
package com.muyu.common.kafka.config;
|
||||
|
||||
import org.apache.kafka.clients.producer.KafkaProducer;
|
||||
import org.apache.kafka.common.serialization.Serializer;
|
||||
import org.apache.kafka.common.serialization.StringSerializer;
|
||||
import org.springframework.boot.SpringBootConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* kafka 消息的生产者 配置类
|
||||
*/
|
||||
@Configuration
|
||||
public class KafkaProviderConfig {
|
||||
|
||||
@Bean
|
||||
public KafkaProducer kafkaProducer() {
|
||||
Map<String, Object> configs = new HashMap<>();
|
||||
//#kafka服务端的IP和端口,格式:(ip:port)
|
||||
configs.put("bootstrap.servers", "47.116.173.119:9092");
|
||||
//客户端发送服务端失败的重试次数
|
||||
configs.put("retries", 2);
|
||||
//多个记录被发送到同一个分区时,生产者将尝试将记录一起批处理成更少的请求.
|
||||
//此设置有助于提高客户端和服务器的性能,配置控制默认批量大小(以字节为单位)
|
||||
configs.put("batch.size", 16384);
|
||||
//生产者可用于缓冲等待发送到服务器的记录的总内存字节数(以字节为单位)
|
||||
configs.put("buffer-memory", 33554432);
|
||||
//生产者producer要求leader节点在考虑完成请求之前收到的确认数,用于控制发送记录在服务端的持久化
|
||||
//acks=0,设置为0,则生产者producer将不会等待来自服务器的任何确认.该记录将立即添加到套接字(socket)缓冲区并视为已发送.在这种情况下,无法保证服务器已收到记录,并且重试配置(retries)将不会生效(因为客户端通常不会知道任何故障),每条记录返回的偏移量始终设置为-1.
|
||||
//acks=1,设置为1,leader节点会把记录写入本地日志,不需要等待所有follower节点完全确认就会立即应答producer.在这种情况下,在follower节点复制前,leader节点确认记录后立即失败的话,记录将会丢失.
|
||||
//acks=all,acks=-1,leader节点将等待所有同步复制副本完成再确认记录,这保证了只要至少有一个同步复制副本存活,记录就不会丢失.
|
||||
configs.put("acks", "-1");
|
||||
//指定key使用的序列化类
|
||||
Serializer keySerializer = new StringSerializer();
|
||||
//指定value使用的序列化类
|
||||
Serializer valueSerializer = new StringSerializer();
|
||||
//创建Kafka生产者
|
||||
KafkaProducer kafkaProducer = new KafkaProducer(configs, keySerializer, valueSerializer);
|
||||
return kafkaProducer;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
package com.muyu.common.kafka.constants;
|
||||
|
||||
|
||||
public class KafkaConstants {
|
||||
|
||||
public final static String KafkaTopic = "carJsons";
|
||||
|
||||
// public final static String KafkaGrop = "kafka_grop";
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
com.muyu.kafkaconfig.KafkaConfig
|
|
@ -11,7 +11,8 @@ import com.muyu.cloud.common.saas.domain.model.EntInfo;
|
|||
import com.muyu.cloud.common.saas.exception.SaaSException;
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.SpringUtils;
|
||||
import com.muyu.common.system.domain.SysUser;
|
||||
import com.muyu.common.system.domain.Firm;
|
||||
import com.muyu.common.system.domain.Firm;
|
||||
import com.muyu.common.system.remote.RemoteUserService;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
|
@ -36,16 +37,17 @@ public class ManyDataSource implements ApplicationRunner{
|
|||
|
||||
private List<EntInfo> dataSourceInfoList(){
|
||||
RemoteUserService remoteUserService = SpringUtils.getBean(RemoteUserService.class);
|
||||
Result<List<SysUser>> tableDataInfoResult = remoteUserService.companyList();
|
||||
Result<List<Firm>> tableDataInfoResult = remoteUserService.selectAll();
|
||||
if (tableDataInfoResult==null){
|
||||
throw new SaaSException("saas远调数据源错误");
|
||||
}
|
||||
List<SysUser> data = tableDataInfoResult.getData();
|
||||
List<Firm> data = tableDataInfoResult.getData();
|
||||
if (tableDataInfoResult.getCode() ==Result.SUCCESS && data !=null){
|
||||
List<EntInfo> list = new ArrayList<>();
|
||||
for (SysUser row : data) {
|
||||
for (Firm row : data) {
|
||||
list.add(
|
||||
EntInfo.builder()
|
||||
.firmKey(row.getFirmName())
|
||||
.entCode(row.getDatabaseName())
|
||||
.ip(DatasourceContent.IP)
|
||||
.port(DatasourceContent.PORT)
|
||||
|
@ -82,7 +84,8 @@ public class ManyDataSource implements ApplicationRunner{
|
|||
public void run(ApplicationArguments args) {
|
||||
DruidDataSourceFactory druidDataSourceFactory = SpringUtils.getBean(DruidDataSourceFactory.class);
|
||||
DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class);
|
||||
for (EntInfo entInfo : dataSourceInfoList()) {
|
||||
List<EntInfo> entInfos = this.dataSourceInfoList();
|
||||
for (EntInfo entInfo : entInfos) {
|
||||
DataSourceInfo dataSourceInfo = DataSourceInfo.hostAndPortBuild(
|
||||
entInfo.getEntCode(), entInfo.getIp(), entInfo.getPort()
|
||||
);
|
||||
|
|
|
@ -8,7 +8,6 @@ import lombok.Data;
|
|||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author DongZl
|
||||
* @description: 数据源实体类
|
||||
* @Date 2023-8-1 上午 11:15
|
||||
*/
|
||||
|
|
|
@ -19,7 +19,6 @@ public class DruidDataSourceFactory {
|
|||
|
||||
/**
|
||||
* @Description: 根据传递的数据源信息测试数据库连接
|
||||
* @Author Dongzl
|
||||
*/
|
||||
public DruidDataSource create(DataSourceInfo dataSourceInfo) {
|
||||
DruidDataSource druidDataSource = new DruidDataSource();
|
||||
|
@ -33,7 +32,7 @@ public class DruidDataSourceFactory {
|
|||
log.info("{} -> 数据源连接成功", dataSourceInfo.getKey());
|
||||
return druidDataSource;
|
||||
} catch (SQLException throwables) {
|
||||
log.error("数据源 {} 连接失败,用户名:{},密码 {}",dataSourceInfo.getUrl(),dataSourceInfo.getUserName(),dataSourceInfo.getPassword());
|
||||
log.error("数据源 {} 连接失败,用户名:{},密码 {}, 四百原因:{}",dataSourceInfo.getUrl(),dataSourceInfo.getUserName(),dataSourceInfo.getPassword(),throwables);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,5 +8,5 @@ package com.muyu.cloud.common.saas.contents;
|
|||
*/
|
||||
public class SaaSConstant {
|
||||
|
||||
public final static String SAAS_KEY = "ent-code";
|
||||
public final static String SAAS_KEY = "saas_key";
|
||||
}
|
||||
|
|
|
@ -17,6 +17,8 @@ import lombok.NoArgsConstructor;
|
|||
@AllArgsConstructor
|
||||
public class EntInfo {
|
||||
|
||||
private String firmKey;
|
||||
|
||||
private String entCode;
|
||||
|
||||
private String ip;
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.muyu.cloud.common.many.datasource.holder.DynamicDataSourceHolder;
|
|||
import com.muyu.cloud.common.many.datasource.role.DynamicDataSource;
|
||||
import com.muyu.cloud.common.saas.contents.SaaSConstant;
|
||||
import com.muyu.cloud.common.saas.exception.SaaSException;
|
||||
import com.muyu.common.core.constant.SecurityConstants;
|
||||
import com.muyu.common.core.utils.ServletUtils;
|
||||
import com.muyu.common.core.utils.SpringUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
@ -25,8 +26,11 @@ public class SaaSInterceptor implements AsyncHandlerInterceptor {
|
|||
return true;
|
||||
}
|
||||
|
||||
// SaaSConstant.SAAS_KEY
|
||||
// SecurityConstants.SAAS_KEY
|
||||
|
||||
String SaaSKey = ServletUtils.getHeader(request, SaaSConstant.SAAS_KEY);
|
||||
if (SaaSKey == null) {
|
||||
if (SaaSKey == null || "".equals(SaaSKey)) {
|
||||
throw new SaaSException("SaaS非法访问");
|
||||
}else {
|
||||
DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class);
|
||||
|
|
|
@ -62,6 +62,7 @@ public class TokenService {
|
|||
Map<String, Object> rspMap = new HashMap<String, Object>();
|
||||
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
|
||||
rspMap.put("expires_in", expireTime);
|
||||
rspMap.put("saas_key", loginUser.getSysUser().getDatabaseName());
|
||||
|
||||
return rspMap;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.muyu.common.system.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
@ -21,6 +22,7 @@ public class Firm {
|
|||
/**
|
||||
* 公司编号
|
||||
*/
|
||||
@TableId(value = "firm_id")
|
||||
private Integer firmId;
|
||||
|
||||
/**
|
||||
|
|
|
@ -63,4 +63,14 @@ public class LoginUser implements Serializable {
|
|||
*/
|
||||
private SysUser sysUser;
|
||||
|
||||
/**
|
||||
* 企业
|
||||
*/
|
||||
private Firm firm;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
private String firmName;
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.muyu.common.system.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.muyu.common.core.annotation.Excel;
|
||||
import com.muyu.common.core.annotation.Excel.ColumnType;
|
||||
import com.muyu.common.core.annotation.Excel.Type;
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package com.muyu.common.system.domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**用户登录时用来查询的信息
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.system.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:SysUserMessage
|
||||
* @Date:2024/10/2 10:25
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SysUserMessage {
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String username;
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String password;
|
||||
/**
|
||||
* 数据库名
|
||||
*/
|
||||
private String databaseName;
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package com.muyu.common.system.remote;
|
||||
|
||||
import com.muyu.common.core.constant.ServiceNameConstants;
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.system.domain.Firm;
|
||||
import com.muyu.common.system.remote.factory.RemoteFirmFallbackFactory;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.common.system.remote
|
||||
* @Project:cloud-server-8
|
||||
* @name:RemoteFirmService
|
||||
* @Date:2024/9/25 22:21
|
||||
*/
|
||||
@FeignClient(contextId = "remoteFirmService", value = ServiceNameConstants.SYSTEM_SERVICE,fallbackFactory = RemoteFirmFallbackFactory.class)
|
||||
public interface RemoteFirmService {
|
||||
|
||||
@RequestMapping("/firm/findByFirmName/{firmName}")
|
||||
public Result<Firm> findByFirmName(@PathVariable("firmName") String firmName);
|
||||
}
|
|
@ -3,7 +3,9 @@ package com.muyu.common.system.remote;
|
|||
import com.muyu.common.core.constant.SecurityConstants;
|
||||
import com.muyu.common.core.constant.ServiceNameConstants;
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.system.domain.Firm;
|
||||
import com.muyu.common.system.domain.SysUser;
|
||||
import com.muyu.common.system.domain.SysUserMessage;
|
||||
import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory;
|
||||
import com.muyu.common.system.domain.LoginUser;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
|
@ -42,4 +44,27 @@ public interface RemoteUserService {
|
|||
|
||||
@GetMapping("/user/companyList")
|
||||
public Result<List<SysUser>> companyList ();
|
||||
|
||||
@GetMapping("/user/selectByfirmName/{firmName}")
|
||||
public Result<String> selectByfirmName(@PathVariable("firmName") String firmName);
|
||||
|
||||
/**
|
||||
* 查询这个数据源中的登录账号和密码
|
||||
* @param sysUserMessage
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/user/selectuser")
|
||||
public Result<LoginUser> selectuser(@RequestBody SysUserMessage sysUserMessage );
|
||||
|
||||
/**
|
||||
* 根据企业码查询对应数据源
|
||||
* @param firmName
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/firm/findByFirmName/{firmName}")
|
||||
public Result<Firm> findByFirmName(@PathVariable("firmName") String firmName);
|
||||
|
||||
|
||||
@RequestMapping("/firm/selectAll")
|
||||
public Result<List<Firm>> selectAll();
|
||||
}
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
package com.muyu.common.system.remote.factory;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.exception.ServiceException;
|
||||
import com.muyu.common.system.domain.Firm;
|
||||
import com.muyu.common.system.remote.RemoteFirmService;
|
||||
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.common.system.remote.factory
|
||||
* @Project:cloud-server-8
|
||||
* @name:RemoteFirmFallbackFactory
|
||||
* @Date:2024/9/25 22:22
|
||||
*/
|
||||
@Component
|
||||
public class RemoteFirmFallbackFactory implements FallbackFactory<RemoteFirmService> {
|
||||
@Override
|
||||
public RemoteFirmService create(Throwable cause) {
|
||||
|
||||
return new RemoteFirmService() {
|
||||
@Override
|
||||
public Result<Firm> findByFirmName(String firmName) {
|
||||
throw new ServiceException(cause.getCause().toString());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
package com.muyu.common.system.remote.factory;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.system.domain.Firm;
|
||||
import com.muyu.common.system.domain.SysUserMessage;
|
||||
import com.muyu.common.system.remote.RemoteUserService;
|
||||
import com.muyu.common.system.domain.SysUser;
|
||||
import com.muyu.common.system.domain.LoginUser;
|
||||
|
@ -38,6 +40,26 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
|
|||
public Result<List<SysUser>> companyList() {
|
||||
return Result.error("发现用户失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> selectByfirmName(String firmName) {
|
||||
return Result.error("信息查询失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<LoginUser> selectuser(SysUserMessage sysUserMessage) {
|
||||
return Result.error("信息查询失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<Firm> findByFirmName(String firmName) {
|
||||
return Result.error("信息查询失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<List<Firm>> selectAll() {
|
||||
return Result.error("信息查询失败:" + throwable.getMessage());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
com.muyu.common.system.remote.factory.RemoteUserFallbackFactory
|
||||
com.muyu.common.system.remote.factory.RemoteLogFallbackFactory
|
||||
com.muyu.common.system.remote.factory.RemoteFileFallbackFactory
|
||||
com.muyu.common.system.remote.factory.RemoteFirmFallbackFactory
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
<module>cloud-common-rabbit</module>
|
||||
<module>cloud-common-saas</module>
|
||||
<module>cloud-common-wechat</module>
|
||||
<module>cloud-common-kafka</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>cloud-common</artifactId>
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: xxy
|
||||
namespace: eight
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -11,10 +11,6 @@
|
|||
|
||||
<artifactId>cloud-modules-carData</artifactId>
|
||||
|
||||
<description>
|
||||
数据处理模块
|
||||
</description>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
|
@ -87,17 +83,14 @@
|
|||
<version>2.9.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-kafka</artifactId>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka-clients</artifactId>
|
||||
<version>3.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.iotdb</groupId>
|
||||
<artifactId>iotdb-session</artifactId>
|
||||
<version>0.13.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-rabbit</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package com.muyu.carData;
|
||||
|
||||
import com.muyu.carData.listener.MyListener;
|
||||
import com.muyu.common.security.annotation.EnableMyFeignClients;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
|
@ -17,8 +19,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||
public class CarDataApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication application = new SpringApplication(CarDataApplication.class);
|
||||
application.addListeners(new MyListener());
|
||||
application.run(args);
|
||||
SpringApplication.run(CarDataApplication.class,args);
|
||||
System.out.println("caused: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;;caused: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package com.muyu.carData.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.annotation
|
||||
* @Project:cloud-server-8
|
||||
* @name:IoTTableName
|
||||
* @Date:2024/9/27 19:29
|
||||
*/
|
||||
@Documented
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
|
||||
public @interface IoTTableName {
|
||||
|
||||
String value() default "";
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.muyu.kafkaconfig;
|
||||
package com.muyu.carData.config.kafkaconfig;
|
||||
|
||||
import org.apache.kafka.clients.consumer.KafkaConsumer;
|
||||
import org.apache.kafka.clients.producer.KafkaProducer;
|
||||
|
@ -28,7 +28,7 @@ public class KafkaConfig {
|
|||
//生产者可用于缓冲等待发送到服务器的记录的总内存字节数
|
||||
configs.put("buffer-memory",3554432);
|
||||
/**
|
||||
* ,用于控制发送记录在服务端的持久化
|
||||
*生产者producer要求leader节点在考虑完成请求之前收到的确认数,用于控制发送记录在服务端的持久化
|
||||
*acks=0,设置为0,则生产者producer将不会等待来自服务器的任何确认.该记录将立即添加到套接字(socket)缓冲区并视为已发送
|
||||
* .在这种情况下,无法保证服务器已收到记录,并且重试配置(retries)将不会生效(因为客户端通常不会知道任何故障),每条记录返回的偏移量始终设置为-1.
|
||||
*acks=1,设置为1,leader节点会把记录写入本地日志,不需要等待所有follower节点完全确认就会立即应答producer.在这种情况下,
|
|
@ -0,0 +1,13 @@
|
|||
package com.muyu.carData.constract;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.constract
|
||||
* @Project:cloud-server-8
|
||||
* @name:IoTDBTableParam
|
||||
* @Date:2024/9/27 20:02
|
||||
*/
|
||||
public class IoTDBTableParam {
|
||||
|
||||
public static final String SYSLOG_IOT_TABLE = "student";
|
||||
}
|
|
@ -15,7 +15,7 @@ import org.springframework.stereotype.Component;
|
|||
import java.time.Duration;
|
||||
import java.util.Collection;
|
||||
|
||||
/**卡夫卡消费者
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.consumer
|
||||
* @Project:cloud-server-8
|
||||
|
@ -29,7 +29,7 @@ public class MyKafkaConsumer implements InitializingBean {
|
|||
@Autowired
|
||||
private KafkaConsumer kafkaConsumer;
|
||||
|
||||
private final String topicName = "carJsons";
|
||||
private final String topicName = "test";
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
|
@ -43,14 +43,13 @@ public class MyKafkaConsumer implements InitializingBean {
|
|||
for (ConsumerRecord<String, String> consumerRecord : consumerRecords) {
|
||||
//从consumerRecord中获取消费数据
|
||||
String value = consumerRecord.value();
|
||||
log.info("从Kafka中消费的原始数据===============>>:{}",value);
|
||||
log.info("从Kafka中消费的原始数据:{}",value);
|
||||
//转换为java对象
|
||||
Student stu = JSONUtil.toBean(value, Student.class);
|
||||
log.info("消费数据转换为Java对象:{}",stu);
|
||||
}
|
||||
}
|
||||
});
|
||||
thread.start();
|
||||
|
||||
log.info("启动线程结束监听topic:{}",topicName);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
package com.muyu.carData.domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:IoTDBRecord
|
||||
* @Date:2024/9/27 19:25
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class IoTDBRecord {
|
||||
|
||||
/**
|
||||
* 节点路径
|
||||
*/
|
||||
private String deviceId;
|
||||
|
||||
/**
|
||||
* 时间戳
|
||||
*/
|
||||
private long time = System.currentTimeMillis();
|
||||
|
||||
/**
|
||||
* 属性
|
||||
*/
|
||||
private List<String> measurementList;
|
||||
|
||||
/**
|
||||
* 属性值
|
||||
*/
|
||||
private List<Object> valueList;
|
||||
|
||||
/**
|
||||
* 数据类型
|
||||
*/
|
||||
private List<String> typeList;
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
package com.muyu.carData.event;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
/**自定义事件
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.event
|
||||
* @Project:cloud-server-8
|
||||
* @name:EsSaveEvent
|
||||
* @Date:2024/9/29 21:15
|
||||
*/
|
||||
public class EsSaveEvent extends ApplicationEvent {
|
||||
|
||||
private JSONObject data;
|
||||
|
||||
|
||||
public EsSaveEvent(JSONObject source) {
|
||||
super(source);
|
||||
this.data = source;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.muyu.carData.interfaces;
|
||||
|
||||
import com.muyu.carData.annotation.IoTTableName;
|
||||
import com.muyu.carData.domain.IoTDBRecord;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.interfaces
|
||||
* @Project:cloud-server-8
|
||||
* @name:IoTDBRecordable
|
||||
* @Date:2024/9/27 19:22
|
||||
* iot基类
|
||||
*/
|
||||
public interface IoTDBRecordable {
|
||||
|
||||
Logger logger = LoggerFactory.getLogger(IoTDBRecordable.class);
|
||||
|
||||
/**
|
||||
* 数据载入方法
|
||||
* @return Record
|
||||
*/
|
||||
default IoTDBRecord toRecord() throws Exception {
|
||||
IoTDBRecord ioTDBRecord = new IoTDBRecord();
|
||||
Object getIoTDBTime = this.getClass().getMethod("getIoTDBTime").invoke(this);
|
||||
if (null != getIoTDBTime){
|
||||
ioTDBRecord.setTime((Long) getIoTDBTime);
|
||||
}
|
||||
Class aClass = this.getClass();
|
||||
IoTTableName name = this.getClass().getAnnotation(IoTTableName.class);
|
||||
ioTDBRecord.setDeviceId(name.value());
|
||||
Field[] declaredFields = aClass.getDeclaredFields();
|
||||
ArrayList<String> measurements = new ArrayList<>();
|
||||
ArrayList<Object> records = new ArrayList<>();
|
||||
ArrayList<String> types = new ArrayList<>();
|
||||
for (Field declaredField : declaredFields) {
|
||||
measurements.add(declaredField.getName());
|
||||
String methodNamePro = declaredField.getName().substring(0, 1).toUpperCase() + declaredField.getName().substring(1);
|
||||
Method methodName = this.getClass().getMethod("get" + methodNamePro);
|
||||
records.add(methodName.invoke(this));
|
||||
types.add(methodName.getReturnType().getName());
|
||||
}
|
||||
ioTDBRecord.setMeasurementList(measurements);
|
||||
ioTDBRecord.setValueList(records);
|
||||
ioTDBRecord.setTypeList(types);
|
||||
return ioTDBRecord;
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
package com.muyu.carData.listener;
|
||||
|
||||
import com.muyu.carData.event.EsSaveEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.listener
|
||||
* @Project:cloud-server-8
|
||||
* @name:CustomEventListener
|
||||
* @Date:2024/9/29 23:49
|
||||
*/
|
||||
@Component
|
||||
public class CustomEventListener {
|
||||
|
||||
@EventListener
|
||||
public void handMyEvent(EsSaveEvent event){
|
||||
//处理事件详情
|
||||
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package com.muyu.carData.listener;
|
||||
|
||||
import com.muyu.carData.event.EsSaveEvent;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
|
||||
/**自定义监听器
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.listener
|
||||
* @Project:cloud-server-8
|
||||
* @name:MyListener
|
||||
* @Date:2024/9/29 21:18
|
||||
*/
|
||||
@Log4j2
|
||||
public class MyListener implements ApplicationListener<EsSaveEvent> {
|
||||
@Override
|
||||
public void onApplicationEvent(EsSaveEvent event) {
|
||||
log.info("监听到自定义事件........");
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package com.muyu.carData.pulisher;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.muyu.carData.event.EsSaveEvent;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**事件发布测试
|
||||
* @Author:张腾
|
||||
* @Package:com.muyu.carData.pulisher
|
||||
* @Project:cloud-server-8
|
||||
* @name:CustomEventPublisher
|
||||
* @Date:2024/9/29 23:51
|
||||
*/
|
||||
@Log4j2
|
||||
@Component
|
||||
@AllArgsConstructor
|
||||
public class CustomEventPublisher {
|
||||
|
||||
private ApplicationEventPublisher applicationEventPublisher;
|
||||
|
||||
public void publish(JSONObject data){
|
||||
EsSaveEvent esSaveEvent = new EsSaveEvent(data);
|
||||
applicationEventPublisher.publishEvent(esSaveEvent);
|
||||
log.info("事件发布成功 - 消息是:{}",data);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.muyu.carData.controller;
|
||||
package com.muyu.carData.testcontroller;
|
||||
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.muyu.carData.config.cacheconfig.CaffeineConfig;
|
|
@ -1,4 +1,4 @@
|
|||
package com.muyu.carData.controller;
|
||||
package com.muyu.carData.testcontroller;
|
||||
|
||||
import com.muyu.carData.config.lotdbconfig.IotDBSessionConfig;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
|
@ -44,13 +44,11 @@ public class IotDBController {
|
|||
@GetMapping("/insertData/{insertSize}/{count}")
|
||||
public String insert(@PathVariable(name = "insertSize") int insertSize,@PathVariable(name = "count") int count) throws IoTDBConnectionException, StatementExecutionException {
|
||||
Session session = iotDBSessionConfig.iotSession();
|
||||
//schemaList 属性及类型
|
||||
List<MeasurementSchema> schemaList = new ArrayList<>();
|
||||
schemaList.add(new MeasurementSchema("id", TSDataType.INT32));
|
||||
schemaList.add(new MeasurementSchema("name", TSDataType.TEXT));
|
||||
schemaList.add(new MeasurementSchema("sex", TSDataType.TEXT));
|
||||
|
||||
//tablet 封装数据
|
||||
Tablet tablet = new Tablet("root.yang.baling", schemaList);
|
||||
|
||||
//以当前时间戳作为插入的起始时间戳
|
|
@ -1,6 +1,7 @@
|
|||
package com.muyu.carData.controller;
|
||||
package com.muyu.carData.testcontroller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.muyu.carData.pojo.Student;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.apache.kafka.clients.producer.KafkaProducer;
|
||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
|
@ -24,15 +25,21 @@ public class KafkaProducerController {
|
|||
@Autowired
|
||||
private KafkaProducer kafkaProducer;
|
||||
|
||||
private final String topicName = "carJsons";
|
||||
private final String topicName = "test";
|
||||
|
||||
@GetMapping("/producer")
|
||||
public String produceTest(JSONObject data) {
|
||||
@GetMapping("/produceTest")
|
||||
public String produceTest() {
|
||||
try {
|
||||
Student stu = Student.builder().id(2)
|
||||
.name("杨闪闪")
|
||||
.sex("男")
|
||||
.build();
|
||||
String stuStr = JSONObject.toJSONString(stu);
|
||||
log.info("Topic:{}", topicName);
|
||||
log.info("转换为JSON:{}",data);
|
||||
log.info("Java对象:{}",stu);
|
||||
log.info("转换为JSON:{}",stuStr);
|
||||
//使用KafkaProducer发送消息
|
||||
ProducerRecord<String, String> stringProducerRecord = new ProducerRecord(topicName, data);
|
||||
ProducerRecord<String, String> stringProducerRecord = new ProducerRecord<>(topicName, stuStr);
|
||||
kafkaProducer.send(stringProducerRecord);
|
||||
}catch (Exception e){
|
||||
log.error("Producer写入Topic异常,异常信息是:{}",e.getMessage());
|
||||
|
@ -40,6 +47,4 @@ public class KafkaProducerController {
|
|||
return "消息发送成功";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
Spring Boot Version: ${spring-boot.version}
|
||||
Spring Application Name: ${spring.application.name}
|
|
@ -1,63 +0,0 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 9702
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
|
||||
# Spring
|
||||
spring:
|
||||
iotdb:
|
||||
username: root
|
||||
password: root
|
||||
ip: 60.204.221.52
|
||||
port: 6667
|
||||
maxSize: 100
|
||||
fetchSize: 10000
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-carData
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
config:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
# 系统共享配置
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# xxl-job 配置文件
|
||||
- application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# rabbit 配置文件
|
||||
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
logging:
|
||||
level:
|
||||
com.muyu.system.mapper: DEBUG
|
|
@ -1,74 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-carData"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -1,81 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-carData"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -1,81 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-carData"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -11,7 +11,6 @@ import java.util.function.Supplier;
|
|||
|
||||
/**
|
||||
* 车辆报文模板实体类
|
||||
*
|
||||
* @author 17353
|
||||
*/
|
||||
@Data
|
||||
|
@ -69,11 +68,8 @@ public class CarMessage {
|
|||
*/
|
||||
private Integer carMessageState;
|
||||
|
||||
private String carMessageName;
|
||||
|
||||
/**
|
||||
* 修改方法
|
||||
*
|
||||
* @param carMessage
|
||||
* @param supplier
|
||||
* @return
|
||||
|
@ -96,7 +92,6 @@ public class CarMessage {
|
|||
|
||||
/**
|
||||
* 添加方法
|
||||
*
|
||||
* @param carMessage
|
||||
* @return
|
||||
*/
|
||||
|
@ -132,4 +127,7 @@ public class CarMessage {
|
|||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -29,12 +29,14 @@ public class Firm {
|
|||
/**
|
||||
* 企业名称
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String firmName;
|
||||
/**
|
||||
* 数据库名称
|
||||
*/
|
||||
private String databaseName;
|
||||
|
||||
/**
|
||||
* 企业权限Id
|
||||
*/
|
||||
private long permissionId;
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
package com.muyu.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.muyu.domain.req.FaultCodeAddReq;
|
||||
import com.muyu.domain.req.FirmPermissionAddReq;
|
||||
import com.muyu.domain.req.FirmPermissionUpdReq;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 企业权限
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmPermission
|
||||
* @Date:2024/10/7 9:13
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@SuperBuilder
|
||||
public class FirmPermission {
|
||||
|
||||
/**
|
||||
* 企业权限Id
|
||||
*/
|
||||
@TableId(value = "permission_id")
|
||||
private long permissionId;
|
||||
|
||||
/**
|
||||
* 权限等级
|
||||
*/
|
||||
private String permissionLevel;
|
||||
|
||||
/**
|
||||
* 车辆数目
|
||||
*/
|
||||
private Integer carNumber;
|
||||
|
||||
/**
|
||||
* 车辆类型数目
|
||||
*/
|
||||
private Integer carTypeNumber;
|
||||
|
||||
|
||||
public static FirmPermission addfirmpermission(FirmPermissionAddReq firmPermissionAddReq){
|
||||
return FirmPermission.builder()
|
||||
.permissionLevel(firmPermissionAddReq.getPermissionLevel())
|
||||
.carNumber(firmPermissionAddReq.getCarNumber())
|
||||
.carTypeNumber(firmPermissionAddReq.getCarTypeNumber())
|
||||
.build();
|
||||
}
|
||||
|
||||
public static FirmPermission updfirmpermission(FirmPermissionUpdReq firmPermissionUpdReq){
|
||||
return FirmPermission.builder()
|
||||
.permissionId(firmPermissionUpdReq.getPermissionId())
|
||||
.permissionLevel(firmPermissionUpdReq.getPermissionLevel())
|
||||
.carNumber(firmPermissionUpdReq.getCarNumber())
|
||||
.carTypeNumber(firmPermissionUpdReq.getCarTypeNumber())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
package com.muyu.domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class KafKaData {
|
||||
private String key;
|
||||
private String type;
|
||||
private String label;
|
||||
private String value;
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.muyu.domain.req;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 企业权限新增请求对象
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.domain.req
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmPermissionAddReq
|
||||
* @Date:2024/10/8 19:48
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Tag(name = "企业权限新增请求对象",description = "企业权限新增请求对象")
|
||||
public class FirmPermissionAddReq {
|
||||
|
||||
/**
|
||||
* 权限等级
|
||||
*/
|
||||
private String permissionLevel;
|
||||
|
||||
/**
|
||||
* 车辆数目
|
||||
*/
|
||||
private Integer carNumber;
|
||||
|
||||
/**
|
||||
* 车辆类型数目
|
||||
*/
|
||||
private Integer carTypeNumber;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.muyu.domain.req;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 企业权限修改请求对象
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.domain.req
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmPermissionUpdReq
|
||||
* @Date:2024/10/8 20:11
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Tag(name = "企业权限修改请求对象",description = "企业权限修改请求对象")
|
||||
public class FirmPermissionUpdReq {
|
||||
|
||||
/**
|
||||
* 企业权限Id
|
||||
*/
|
||||
@TableId(value = "permission_id")
|
||||
private long permissionId;
|
||||
/**
|
||||
* 权限等级
|
||||
*/
|
||||
private String permissionLevel;
|
||||
|
||||
/**
|
||||
* 车辆数目
|
||||
*/
|
||||
private Integer carNumber;
|
||||
|
||||
/**
|
||||
* 车辆类型数目
|
||||
*/
|
||||
private Integer carTypeNumber;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package com.muyu.domain.req;
|
||||
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 修改企业权限请求对象
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.domain.req
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmUpdPermissionReq
|
||||
* @Date:2024/10/7 22:22
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Tag(name = "修改权限请求对象",description = "修改权限请求对象")
|
||||
public class FirmUpdPermissionReq {
|
||||
/**
|
||||
* 企业Id
|
||||
*/
|
||||
private Integer firmId;
|
||||
|
||||
/**
|
||||
* 企业权限等级
|
||||
*/
|
||||
private String permissionLevel;
|
||||
}
|
|
@ -38,7 +38,7 @@ public class CarInformationResp {
|
|||
*/
|
||||
// @TableName(value = "car_information_VIN")
|
||||
@TableField(value = "car_information_VIN")
|
||||
private String carInformationVin;
|
||||
private String carInformationVIN;
|
||||
/**
|
||||
* 车牌号
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.muyu.domain.resp;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.muyu.domain.SysUser;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
|
@ -108,8 +109,28 @@ public class FirmListResp {
|
|||
/**
|
||||
* 企业名称
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
// @TableField(exist = false)
|
||||
private String firmName;
|
||||
/**
|
||||
* 企业权限Id
|
||||
*/
|
||||
private long permissionId;
|
||||
|
||||
/**
|
||||
* 权限等级
|
||||
*/
|
||||
private String permissionLevel;
|
||||
|
||||
/**
|
||||
* 车辆数目
|
||||
*/
|
||||
private Integer carNumber;
|
||||
|
||||
/**
|
||||
* 车辆类型数目
|
||||
*/
|
||||
private Integer carTypeNumber;
|
||||
|
||||
|
||||
/**
|
||||
* 数据库对象构建为返回结果对象
|
||||
|
|
|
@ -19,6 +19,11 @@
|
|||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-saas</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
<!-- <dependency> -->
|
||||
<!-- <groupId>com.muyu</groupId> -->
|
||||
<!-- <artifactId>cloud-common-rabbit</artifactId> -->
|
||||
|
@ -28,22 +33,11 @@
|
|||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
<!-- mqttv3 -->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.paho</groupId>
|
||||
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
|
||||
<version>1.2.2</version>
|
||||
</dependency>
|
||||
<!-- SpringCloud Alibaba Nacos Config -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
<!--apache.kafka<-->
|
||||
<dependency>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka-clients</artifactId>
|
||||
</dependency>
|
||||
<!-- SpringCloud Alibaba Sentinel -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
|
@ -94,11 +88,6 @@
|
|||
<artifactId>pagehelper</artifactId>
|
||||
<version>6.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-kafka</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<finalName>cloud-electronic</finalName>
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package com.muyu.server;
|
||||
|
||||
import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure;
|
||||
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
|
||||
import com.muyu.common.security.annotation.EnableMyFeignClients;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
|
||||
/**
|
||||
* @Author:杨闪闪
|
||||
|
@ -13,7 +16,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||
* @Date:2024/9/17 下午9:56
|
||||
*/
|
||||
@EnableMyFeignClients
|
||||
@SpringBootApplication
|
||||
@SpringBootApplication(exclude = {
|
||||
DataSourceAutoConfiguration.class,
|
||||
DruidDataSourceAutoConfigure.class,
|
||||
DynamicDataSourceAutoConfiguration.class
|
||||
})
|
||||
@MapperScan("com.muyu.server.mapper")
|
||||
public class IntegrationApplication {
|
||||
public static void main(String[] args) {
|
||||
|
|
|
@ -37,9 +37,7 @@ public class CarFenceClazzController {
|
|||
@Operation(summary = "查询数据",description = "查询数据")
|
||||
public Result<List<CarFenceClazz>> selectConnect(){
|
||||
List<CarFenceClazz> connects = carFenceClazzService.list();
|
||||
log.info("查询数据成功");
|
||||
return Result.success(
|
||||
|
||||
connects, "操作成功"
|
||||
);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,6 @@ public class CarFenceController {
|
|||
@Validated @RequestBody CarFenceReq req
|
||||
){
|
||||
Page<CarFenceResp> connects = carFenceService.selectCarFence(req);
|
||||
log.info("查询数据:"+ connects);
|
||||
return Result.success(
|
||||
connects, "操作成功"
|
||||
);
|
||||
|
@ -58,13 +57,11 @@ public class CarFenceController {
|
|||
@Validated @RequestBody CarFence carFence
|
||||
){
|
||||
Boolean connects = carFenceService.addCarFence(carFence);
|
||||
log.info("shd");
|
||||
return connects?Result.success(
|
||||
null, "操作成功"
|
||||
):Result.success(
|
||||
null, "操作失败"
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -76,8 +73,6 @@ public class CarFenceController {
|
|||
@Validated @RequestBody CarGroupReq req
|
||||
){
|
||||
Boolean connects = carFenceService.addCarGroup(req);
|
||||
log.info("添加数据:"+ connects);
|
||||
|
||||
return connects?Result.success(
|
||||
null, "操作成功"
|
||||
):Result.success(
|
||||
|
|
|
@ -8,10 +8,7 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* 企业信息控制层
|
||||
|
@ -31,7 +28,7 @@ public class FirmManageController {
|
|||
|
||||
|
||||
/**
|
||||
* 公司列表信息展示
|
||||
* 企业列表信息展示
|
||||
* @param firmListReq
|
||||
* @return
|
||||
*/
|
||||
|
@ -43,5 +40,17 @@ public class FirmManageController {
|
|||
}
|
||||
|
||||
|
||||
// /**
|
||||
// * 删除企业信息
|
||||
// * @param firmId
|
||||
// * @return
|
||||
// */
|
||||
// @PostMapping("/firmmessagedel/{firmId}")
|
||||
// @Operation(summary = "删除企业信息",description = "删除企业信息")
|
||||
// public Result firmmessagedel(@PathVariable Integer firmId){
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
package com.muyu.server.controller;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.domain.FirmPermission;
|
||||
import com.muyu.domain.req.FirmPermissionAddReq;
|
||||
import com.muyu.domain.req.FirmPermissionUpdReq;
|
||||
import com.muyu.domain.req.FirmUpdPermissionReq;
|
||||
import com.muyu.server.service.FirmPermissionService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 企业权限分配控制层
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.server.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmPermission
|
||||
* @Date:2024/10/7 21:29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/permission")
|
||||
public class FirmPermissionController {
|
||||
@Autowired
|
||||
private FirmPermissionService firmPermissionService;
|
||||
|
||||
/**
|
||||
* 修改企业权限分配
|
||||
* @param firmUpdPermissionReq
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/permissionupd")
|
||||
@Operation(summary = "修改权限分配",description = "修改权限分配")
|
||||
public Result updpermission(@RequestBody FirmUpdPermissionReq firmUpdPermissionReq){
|
||||
firmPermissionService.updpermission(firmUpdPermissionReq);
|
||||
return Result.success(null,"权限更改成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 权限等级列表
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/permissionlist")
|
||||
@Operation(summary = "权限等级列表",description = "权限等级列表")
|
||||
public Result permissionlist(){
|
||||
return Result.success(firmPermissionService.permissionlist());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 企业权限新增
|
||||
* @param firmPermissionAddReq
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/addpermission")
|
||||
@Operation(summary = "企业权限新增",description = "企业权限新增")
|
||||
public Result addpermission(@RequestBody FirmPermissionAddReq firmPermissionAddReq){
|
||||
firmPermissionService.save(FirmPermission.addfirmpermission(firmPermissionAddReq));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 企业权限修改
|
||||
* @param firmPermissionUpdReq
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/updpermission")
|
||||
@Operation(summary = "企业权限修改",description = "企业权限修改")
|
||||
public Result updpermission(@RequestBody FirmPermissionUpdReq firmPermissionUpdReq){
|
||||
firmPermissionService.updateById(FirmPermission.updfirmpermission(firmPermissionUpdReq));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -9,8 +9,6 @@ import com.muyu.domain.req.CarInformationListReq;
|
|||
import com.muyu.domain.req.CarInformationUpdReq;
|
||||
import com.muyu.domain.resp.CarInformationResp;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -20,12 +18,4 @@ import java.util.List;
|
|||
@Mapper
|
||||
public interface CarInformationMapper extends MPJBaseMapper<CarInformation> {
|
||||
|
||||
|
||||
/**
|
||||
* 根据车辆VIN码获取车辆类型(报文模板分类用的值)
|
||||
* @param carInformationVIN
|
||||
* @return
|
||||
*/
|
||||
@Select("SELECT `car_information`.car_Information_Type FROM `car_information` WHERE `car_information`.car_information_VIN = #{carInformationVIN}")
|
||||
Long selectcarMessageCartype(@Param("carInformationVIN") String carInformationVIN);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.muyu.server.mapper;
|
|||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.muyu.domain.Firm;
|
||||
import com.muyu.domain.SysUser;
|
||||
import com.muyu.common.system.domain.SysUser;
|
||||
import com.muyu.domain.req.FirmListReq;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package com.muyu.server.mapper;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.muyu.domain.FirmPermission;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 企业权限分配持久层
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.server.mapper
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmPermissionMapper
|
||||
* @Date:2024/10/7 21:32
|
||||
*/
|
||||
@Mapper
|
||||
public interface FirmPermissionMapper extends MPJBaseMapper<FirmPermission> {
|
||||
}
|
|
@ -1,9 +1,7 @@
|
|||
package com.muyu.server.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.domain.CarMessage;
|
||||
import com.muyu.domain.resp.CarInformationResp;
|
||||
import com.muyu.domain.resp.CarMessageResp;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -45,12 +43,4 @@ public interface CarMessageService extends IService<CarMessage> {
|
|||
*/
|
||||
List<CarMessageResp> selectJoinList(Long id);
|
||||
|
||||
|
||||
//报文切割
|
||||
/**
|
||||
* 分割字符串
|
||||
* 解析字符
|
||||
* 获取报文最终信息
|
||||
*/
|
||||
JSONObject inciseCarMessage(String testString);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package com.muyu.server.service;
|
||||
|
||||
/**
|
||||
* 删除企业数据库业务层
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.server.service
|
||||
* @Project:cloud-server-8
|
||||
* @name:DataSourceDel
|
||||
* @Date:2024/10/10 9:30
|
||||
*/
|
||||
public interface DataSourceDel {
|
||||
}
|
|
@ -1,8 +1,9 @@
|
|||
package com.muyu.server.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.domain.SysUser;
|
||||
import com.muyu.common.system.domain.SysUser;
|
||||
import com.muyu.domain.req.FirmListReq;
|
||||
import com.muyu.domain.req.FirmUpdPermissionReq;
|
||||
import com.muyu.domain.resp.FirmTotalListResp;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -17,10 +18,18 @@ import java.util.List;
|
|||
*/
|
||||
public interface FirmManageService extends IService<SysUser> {
|
||||
|
||||
|
||||
/**
|
||||
* 公司列表信息展示
|
||||
* @param firmListReq
|
||||
* @return
|
||||
*/
|
||||
FirmTotalListResp firmmessageList(FirmListReq firmListReq);
|
||||
|
||||
/**
|
||||
* 修改企业对应权限
|
||||
* @param firmUpdPermissionReq
|
||||
* @param permissionId
|
||||
*/
|
||||
void updpermission(FirmUpdPermissionReq firmUpdPermissionReq, long permissionId);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package com.muyu.server.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.domain.FirmPermission;
|
||||
import com.muyu.domain.req.FirmUpdPermissionReq;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 企业权限分配业务层
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.server.service
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmPermissionService
|
||||
* @Date:2024/10/7 21:31
|
||||
*/
|
||||
public interface FirmPermissionService extends IService<FirmPermission> {
|
||||
|
||||
/**
|
||||
* 修改企业权限分配
|
||||
* @param firmUpdPermissionReq
|
||||
* @return
|
||||
*/
|
||||
void updpermission(FirmUpdPermissionReq firmUpdPermissionReq);
|
||||
|
||||
/**
|
||||
* 权限等级列表
|
||||
* @return
|
||||
*/
|
||||
List<FirmPermission> permissionlist();
|
||||
}
|
|
@ -1,8 +1,5 @@
|
|||
package com.muyu.server.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
|
@ -10,21 +7,15 @@ import com.muyu.domain.CarMessage;
|
|||
import com.muyu.domain.CarMessageType;
|
||||
import com.muyu.domain.CarType;
|
||||
import com.muyu.domain.resp.CarMessageResp;
|
||||
import com.muyu.server.mapper.CarInformationMapper;
|
||||
import com.muyu.server.mapper.CarMessageMapper;
|
||||
import com.muyu.server.service.CarMessageService;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 报文模板展示列表业务实现层
|
||||
*/
|
||||
@Log4j2
|
||||
@Service
|
||||
public class CarMessageServiceImpl
|
||||
extends ServiceImpl<CarMessageMapper,CarMessage>
|
||||
|
@ -32,11 +23,6 @@ public class CarMessageServiceImpl
|
|||
@Resource
|
||||
private CarMessageMapper carMessageMapper;
|
||||
|
||||
@Resource
|
||||
private CarInformationMapper carInformationMapper;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据所属车类别 解析 车辆报文模板
|
||||
* @param
|
||||
|
@ -105,81 +91,5 @@ public class CarMessageServiceImpl
|
|||
.eq(StringUtils.isNotNull(id),CarMessage::getCarMessageCartype, id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject inciseCarMessage(String testString) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//报文处理
|
||||
// @Resource
|
||||
// private RedisTemplate<String ,Objects > redisTemplate;
|
||||
//
|
||||
// /**
|
||||
// * 报文解析
|
||||
// * @param testString
|
||||
// * @return
|
||||
// */
|
||||
// @Override
|
||||
// public JSONObject inciseCarMessage(String testString) {
|
||||
// //根据空格拆分切割数据字符串
|
||||
// String[] split = testString.split(" ");
|
||||
// StringBuilder stringBuilder = new StringBuilder();
|
||||
// for (String conversion : split) {
|
||||
// //将16进制字符串转换为对应的10进制
|
||||
// int inciseindex = Integer.parseInt(conversion, 16);
|
||||
// // 将10进制转换为对应的字符
|
||||
// stringBuilder.append((char) inciseindex);
|
||||
// }
|
||||
// //切取车辆VIN
|
||||
// String substring = stringBuilder.substring(1, 18);
|
||||
// log.info("车辆的VIN码:" + substring);
|
||||
// //根据给定的vehicleVin(车辆VIN号)获取对应的模板车辆分类carMessageCartype
|
||||
// String selectcared = carInformationMapper.selectcarMessageCartype(substring);
|
||||
// //创建接受数据的数组
|
||||
// List<CarMessage> messagesList ;
|
||||
//
|
||||
// try{
|
||||
// String redisKey = "carMessageList" + selectcared;
|
||||
//
|
||||
// if (redisTemplate.hasKey(redisKey)){
|
||||
// List<Objects> list = redisTemplate.opsForList().range(redisKey , 0, -1);
|
||||
// messagesList = list.stream()
|
||||
// .map(objects -> JSON.parseObject(objects.toString(), CarMessage.class))
|
||||
// .toList();
|
||||
// log.info("Redis缓存查询成功");
|
||||
// }else {
|
||||
// messagesList = carInformationMapper.selectcarMessageCartype(selectcared);
|
||||
//
|
||||
// messagesList.forEach(
|
||||
// listReq -> redisTemplate.opsForList().rightPushAll(redisKey, JSON.toString(listReq) )
|
||||
// );
|
||||
// log.info("数据库查询成功");
|
||||
// }
|
||||
// }catch(Exception e){
|
||||
// throw new RuntimeException("获取报文模板失败");
|
||||
// }
|
||||
// //判断报文模板 列表 不为空
|
||||
// if(messagesList.isEmpty()){
|
||||
// throw new RuntimeException("报文模版为空");
|
||||
// }
|
||||
// //存储报文模板解析后的数据
|
||||
// JSONObject jsonObject = new JSONObject();
|
||||
// for (CarMessage carMessage : messagesList) {
|
||||
// //起始位下标
|
||||
// Integer startIndex = carMessage.getCarMessageStartIndex();
|
||||
// //结束位下标
|
||||
// Integer endIndex = carMessage.getCarMessageEndIndex();
|
||||
// //根据报文模板获取保温截取位置
|
||||
// String value = stringBuilder.substring(startIndex, endIndex);
|
||||
// //存入数据
|
||||
// jsonObject.put(carMessage.getMessageTypeName(), value);
|
||||
//
|
||||
// }
|
||||
// return jsonObject;
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package com.muyu.server.service.impl;
|
||||
|
||||
import com.muyu.server.service.DataSourceDel;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 删除企业数据库
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.server.service.impl
|
||||
* @Project:cloud-server-8
|
||||
* @name:DataSourceDelImpl
|
||||
* @Date:2024/10/10 9:30
|
||||
*/
|
||||
@Service
|
||||
public class DataSourceDelImpl implements DataSourceDel {
|
||||
String url="jdbc:mysql://159.75.188.178:3306/";
|
||||
|
||||
}
|
|
@ -1,12 +1,16 @@
|
|||
package com.muyu.server.service.impl;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.common.system.domain.SysUser;
|
||||
import com.muyu.domain.Firm;
|
||||
import com.muyu.domain.SysUser;
|
||||
import com.muyu.domain.FirmPermission;
|
||||
import com.muyu.domain.req.FirmListReq;
|
||||
import com.muyu.domain.req.FirmUpdPermissionReq;
|
||||
import com.muyu.domain.resp.FirmListResp;
|
||||
import com.muyu.domain.resp.FirmTotalListResp;
|
||||
import com.muyu.server.mapper.FirmManageMapper;
|
||||
|
@ -38,16 +42,48 @@ public class FirmManageServiceImpl extends ServiceImpl<FirmManageMapper, SysUser
|
|||
*/
|
||||
@Override
|
||||
public FirmTotalListResp firmmessageList(FirmListReq firmListReq) {
|
||||
long findcount = firmService.findcount();
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
|
||||
long count = this.count(queryWrapper);
|
||||
|
||||
MPJLambdaWrapper<SysUser> wrapper = new MPJLambdaWrapper<>();
|
||||
wrapper.selectAll(SysUser.class)
|
||||
wrapper.select(SysUser::getUserId,
|
||||
SysUser::getDeptId,
|
||||
SysUser::getUserName,
|
||||
SysUser::getNickName,
|
||||
SysUser::getEmail,
|
||||
SysUser::getPhonenumber,
|
||||
SysUser::getSex,
|
||||
SysUser::getAvatar,
|
||||
SysUser::getPassword,
|
||||
SysUser::getStatus,
|
||||
SysUser::getDelFlag,
|
||||
SysUser::getLoginIp,
|
||||
SysUser::getLoginDate,
|
||||
SysUser::getDatabaseName,
|
||||
SysUser::getFirmId)
|
||||
.selectAll(Firm.class)
|
||||
.selectAll(FirmPermission.class)
|
||||
.leftJoin(Firm.class,Firm::getFirmId,SysUser::getFirmId)
|
||||
.leftJoin(FirmPermission.class,FirmPermission::getPermissionId,Firm::getPermissionId)
|
||||
.eq(StringUtils.isNotEmpty(firmListReq.getFirmName()),
|
||||
Firm::getFirmName, firmListReq.getFirmName());
|
||||
wrapper.last("LIMIT "+((firmListReq.getPageNum()-1)*firmListReq.getPageSize())+","+firmListReq.getPageSize());
|
||||
List<FirmListResp> firmListResps = firmManageMapper.selectJoinList(FirmListResp.class, wrapper);
|
||||
return FirmTotalListResp.firmTotalListResp(firmListResps,findcount);
|
||||
return FirmTotalListResp.firmTotalListResp(firmListResps,count);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改企业对应权限
|
||||
* @param firmUpdPermissionReq
|
||||
* @param permissionId
|
||||
*/
|
||||
@Override
|
||||
public void updpermission(FirmUpdPermissionReq firmUpdPermissionReq, long permissionId) {
|
||||
LambdaUpdateWrapper<Firm> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.set(Firm::getPermissionId, permissionId );
|
||||
updateWrapper.eq(Firm::getFirmId, firmUpdPermissionReq.getFirmId());
|
||||
firmService.update(updateWrapper);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package com.muyu.server.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.domain.FirmPermission;
|
||||
import com.muyu.domain.req.FirmUpdPermissionReq;
|
||||
import com.muyu.server.mapper.FirmPermissionMapper;
|
||||
import com.muyu.server.service.FirmManageService;
|
||||
import com.muyu.server.service.FirmPermissionService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 企业权限分配业务实现层
|
||||
* @Author:weiran
|
||||
* @Package:com.muyu.server.service.impl
|
||||
* @Project:cloud-server-8
|
||||
* @name:FirmPermissionServiceImpl
|
||||
* @Date:2024/10/7 21:31
|
||||
*/
|
||||
@Service
|
||||
public class FirmPermissionServiceImpl extends ServiceImpl<FirmPermissionMapper, FirmPermission> implements FirmPermissionService {
|
||||
@Autowired
|
||||
private FirmManageService firmManageService;
|
||||
|
||||
/**
|
||||
* 修改企业权限分配
|
||||
* @param firmUpdPermissionReq
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public void updpermission(FirmUpdPermissionReq firmUpdPermissionReq) {
|
||||
String permissionLevel = firmUpdPermissionReq.getPermissionLevel();
|
||||
//根据权限等级获取对应权限Id
|
||||
LambdaQueryWrapper<FirmPermission> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(FirmPermission::getPermissionLevel, firmUpdPermissionReq.getPermissionLevel());
|
||||
List<FirmPermission> list = this.list(queryWrapper);
|
||||
FirmPermission firmPermission = list.get(0);
|
||||
long permissionId=firmPermission.getPermissionId();
|
||||
//修改企业对应权限
|
||||
firmManageService.updpermission(firmUpdPermissionReq,permissionId);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 权限等级列表
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<FirmPermission> permissionlist() {
|
||||
LambdaQueryWrapper<FirmPermission> queryWrapper = new LambdaQueryWrapper<>();
|
||||
List<FirmPermission> list = this.list(queryWrapper);
|
||||
return list;
|
||||
}
|
||||
}
|
|
@ -26,7 +26,7 @@ public class MessageDao {
|
|||
}
|
||||
|
||||
public void sendMessage(Message message) throws Exception{
|
||||
String sql="INSERT INTO `xxy`.`car_fault_message` (`id`, `sender`, `receiver`, `content`, `status`, `create_time`, `user_id`) " +
|
||||
String sql="INSERT INTO `eight`.`car_fault_message` (`id`, `sender`, `receiver`, `content`, `status`, `create_time`, `user_id`) " +
|
||||
"VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL)";
|
||||
try(PreparedStatement pstmt=connection.prepareStatement(sql)){
|
||||
pstmt.setString(1, message.getContent());
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: xxy
|
||||
namespace: eight
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: xxy
|
||||
namespace: eight
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -1,102 +0,0 @@
|
|||
<?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>cloud-modules</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-modules-protocolparsing</artifactId>
|
||||
<dependencies>
|
||||
<!--远调端Feign-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||
</dependency>
|
||||
<!-- mqttv3 -->
|
||||
<dependency>
|
||||
<groupId>org.eclipse.paho</groupId>
|
||||
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
|
||||
<version>1.2.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
<!-- SpringCloud Alibaba Nacos Config -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
<!--apache.kafka<-->
|
||||
<dependency>
|
||||
<groupId>org.apache.kafka</groupId>
|
||||
<artifactId>kafka-clients</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>
|
||||
<!-- Mysql Connector -->
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
<!-- MuYu Common DataSource -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datasource</artifactId>
|
||||
</dependency>
|
||||
<!-- MuYu Common DataScope -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datascope</artifactId>
|
||||
</dependency>
|
||||
<!-- MuYu Common Log -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-log</artifactId>
|
||||
</dependency>
|
||||
<!-- 接口模块 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-api-doc</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-modules-enterprise-common</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join-boot-starter</artifactId>
|
||||
<version>1.4.13</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper</artifactId>
|
||||
<version>6.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-kafka</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
</project>
|
|
@ -1,15 +0,0 @@
|
|||
package com.muyu;
|
||||
|
||||
import com.muyu.common.security.annotation.EnableMyFeignClients;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
|
||||
@EnableMyFeignClients
|
||||
@SpringBootApplication
|
||||
public class ProtocolApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ProtocolApplication.class, args);
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
package com.muyu.controller;
|
||||
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
|
||||
import com.muyu.domain.CarMessage;
|
||||
import com.muyu.service.CarMessageService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 报文模板展示列表控制层
|
||||
*/
|
||||
@Log4j2
|
||||
@RestController
|
||||
@RequestMapping("/carMessage")
|
||||
@Tag(name = "信息报文模块" )
|
||||
public class CarMessageController {
|
||||
|
||||
|
||||
/**
|
||||
* 测试分割字符
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,135 +0,0 @@
|
|||
package com.muyu.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 车辆报文模板实体类
|
||||
*
|
||||
* @author 17353
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Tag(name = "车辆报文模板实体类")
|
||||
@TableName(value = "car_message", autoResultMap = true)
|
||||
public class CarMessage {
|
||||
//报文类型模块表
|
||||
/**
|
||||
* 自增主键
|
||||
*/
|
||||
private Long messageTypeId;
|
||||
/**
|
||||
* 报文编码
|
||||
*/
|
||||
private String messageTypeCode;
|
||||
/**
|
||||
* 报文名称
|
||||
*/
|
||||
private String messageTypeName;
|
||||
/**
|
||||
* 报文所属类别
|
||||
*/
|
||||
private String messageTypeBelongs;
|
||||
|
||||
//报文拆分位置主表
|
||||
/**
|
||||
* 自增主键
|
||||
*/
|
||||
private Long carMessageId;
|
||||
/**
|
||||
* 车辆类型外键
|
||||
*/
|
||||
private Integer carMessageCartype;
|
||||
/**
|
||||
* 车辆报文类型外键
|
||||
*/
|
||||
private Integer carMessageType;
|
||||
/**
|
||||
* 开始位下标
|
||||
*/
|
||||
private Integer carMessageStartIndex;
|
||||
/**
|
||||
* 结束位下标
|
||||
*/
|
||||
private Integer carMessageEndIndex;
|
||||
/**
|
||||
* 报文数据类型 (固定值 区间随机值)
|
||||
*/
|
||||
private String messageTypeClass;
|
||||
/**
|
||||
* 报文是否开启故障检测(0默认未开启 1开启)
|
||||
*/
|
||||
private Integer carMessageState;
|
||||
|
||||
private String carMessageName;
|
||||
|
||||
/**
|
||||
* 修改方法
|
||||
*
|
||||
* @param carMessage
|
||||
* @param supplier
|
||||
* @return
|
||||
*/
|
||||
public static CarMessage carMessageUpdBuilder(CarMessage carMessage, Supplier<Long> supplier) {
|
||||
return CarMessage.builder()
|
||||
.messageTypeId(supplier.get())
|
||||
.messageTypeCode(carMessage.messageTypeCode)
|
||||
.messageTypeName(carMessage.messageTypeName)
|
||||
.messageTypeBelongs(carMessage.messageTypeBelongs)
|
||||
.carMessageId(carMessage.carMessageId)
|
||||
.carMessageCartype(carMessage.carMessageCartype)
|
||||
.carMessageType(carMessage.carMessageType)
|
||||
.carMessageStartIndex(carMessage.carMessageStartIndex)
|
||||
.carMessageEndIndex(carMessage.carMessageEndIndex)
|
||||
.messageTypeClass(carMessage.messageTypeClass)
|
||||
.carMessageState(carMessage.carMessageState)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加方法
|
||||
*
|
||||
* @param carMessage
|
||||
* @return
|
||||
*/
|
||||
public static CarMessage carMessageAddBuilder(CarMessage carMessage) {
|
||||
return CarMessage.builder()
|
||||
.messageTypeCode(carMessage.messageTypeCode)
|
||||
.messageTypeName(carMessage.messageTypeName)
|
||||
.messageTypeBelongs(carMessage.messageTypeBelongs)
|
||||
.carMessageId(carMessage.carMessageId)
|
||||
.carMessageCartype(carMessage.carMessageCartype)
|
||||
.carMessageType(carMessage.carMessageType)
|
||||
.carMessageStartIndex(carMessage.carMessageStartIndex)
|
||||
.carMessageEndIndex(carMessage.carMessageEndIndex)
|
||||
.messageTypeClass(carMessage.messageTypeClass)
|
||||
.carMessageState(carMessage.carMessageState)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
private Long messageTypeId ;
|
||||
private String messageTypeCode ;
|
||||
private String messageTypeName ;
|
||||
private String messageTypeBelongs ;
|
||||
private String messageTypeClass ;
|
||||
private Long carMessageId ;
|
||||
private Integer carMessageCartype ;
|
||||
private Integer carMessageType ;
|
||||
private Integer carMessageStartIndex ;
|
||||
private Integer carMessageEndIndex ;
|
||||
private Integer carMessageState ;
|
||||
*/
|
||||
|
||||
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
package com.muyu.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 车辆报文所属类型
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain.car
|
||||
* @Project:cloud-server-8
|
||||
* @name:CarMessage
|
||||
* @Date:2024/9/22 下午3:07
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Tag(name = "车辆报文所属类型")
|
||||
@TableName(value = "car_message_type",autoResultMap = true)
|
||||
public class CarMessageType {
|
||||
|
||||
/**
|
||||
* 自增主键
|
||||
*/
|
||||
private Integer messageTypeId ;
|
||||
/**
|
||||
* 报文编码
|
||||
*/
|
||||
private String messageTypeCode ;
|
||||
/**
|
||||
* 报文名称
|
||||
*/
|
||||
private String messageTypeName ;
|
||||
/**
|
||||
* 报文所属类别
|
||||
*/
|
||||
private String messageTypeBelongs ;
|
||||
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
package com.muyu.domain;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class KafKaData {
|
||||
private String key;
|
||||
private String type;
|
||||
private String label;
|
||||
private String value;
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package com.muyu.domain.resp;
|
||||
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 车辆报文信息(预警)响应对象
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain.car
|
||||
* @Project:cloud-server-8
|
||||
* @name:resp
|
||||
* @Date:2024/9/22 下午7:12
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Tag(name = "车辆报文信息")
|
||||
public class CarMessageResp {
|
||||
|
||||
/**
|
||||
* 自增主键
|
||||
*/
|
||||
private Integer carMessageId ;
|
||||
/**
|
||||
* 车辆类型外键
|
||||
*/
|
||||
private Integer carMessageCartype ;
|
||||
/**
|
||||
* 车辆报文外键
|
||||
*/
|
||||
private Integer carMessageType ;
|
||||
/**
|
||||
* 报文名称
|
||||
*/
|
||||
private String messageTypeName ;
|
||||
/**
|
||||
* 开始位下标
|
||||
*/
|
||||
private Integer carMessageStartIndex ;
|
||||
/**
|
||||
* 结束位下标
|
||||
*/
|
||||
private Integer carMessageEndIndex ;
|
||||
/**
|
||||
* 报文数据类型 (固定值 区间随机值)
|
||||
*/
|
||||
private String messageTypeClass ;
|
||||
/**
|
||||
* 报文是否开启故障检测(0默认未开启 1开启)
|
||||
*/
|
||||
private Integer carMessageState ;
|
||||
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package com.muyu.feign;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
|
||||
@FeignClient(name = "cloud-modules-carData")
|
||||
public interface KafkaClient {
|
||||
/**
|
||||
* 处理"/produceTest"的GET请求,用于执行特定的测试任务
|
||||
* 此方法的具体实现将在子类中定义
|
||||
* @return 返回类型为String,表示该方法的执行结果
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/produce/producer")
|
||||
public abstract String producerKafka(JSONObject data);
|
||||
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package com.muyu.mapper;
|
||||
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.muyu.domain.CarInformation;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
/**
|
||||
* 车辆信息管理持久层
|
||||
*/
|
||||
@Mapper
|
||||
public interface CarInformationMapper extends MPJBaseMapper<CarInformation> {
|
||||
|
||||
|
||||
/**
|
||||
* 根据车辆VIN码获取车辆类型(报文模板分类用的值)
|
||||
* @param carInformationVIN
|
||||
* @return
|
||||
*/
|
||||
@Select("SELECT `car_information`.car_Information_Type FROM `car_information` WHERE `car_information`.car_information_VIN = #{carInformationVIN}")
|
||||
Long selectcarMessageCartype(@Param("carInformationVIN") String carInformationVIN);
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
package com.muyu.mapper;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.muyu.domain.CarMessage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 报文模板展示列表持久层
|
||||
*/
|
||||
@Mapper
|
||||
public interface CarMessageMapper extends MPJBaseMapper<CarMessage> {
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package com.muyu.mapper;
|
||||
|
||||
import com.muyu.domain.CarMessage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
@Mapper
|
||||
public interface CarMessagePlusMapper {
|
||||
|
||||
List<CarMessage> selectCarMessageList(@Param("carMessageCartype") Integer carMessageCartype);
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package com.muyu.mapper;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.muyu.domain.CarMessageType;
|
||||
|
||||
|
||||
public interface CarMessageTypeMapper extends MPJBaseMapper<CarMessageType> {
|
||||
}
|
|
@ -1,104 +0,0 @@
|
|||
package com.muyu.server.mqtt;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
import com.muyu.domain.CarMessage;
|
||||
import com.muyu.server.service.CarMessageService;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import org.apache.kafka.clients.producer.KafkaProducer;
|
||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
import org.eclipse.paho.client.mqttv3.*;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
|
||||
@Component
|
||||
public class Demo {
|
||||
@Resource
|
||||
private CarMessageService service;
|
||||
@Resource
|
||||
private KafkaProducer<String, String> kafkaProducer;
|
||||
@PostConstruct
|
||||
public void test() {
|
||||
|
||||
String topic = "vehicle";
|
||||
String content = "Message from MqttPublishSample";
|
||||
int qos = 2;
|
||||
String broker = "tcp://106.15.136.7:1883";
|
||||
String clientId = "JavaSample";
|
||||
|
||||
try {
|
||||
// 第三个参数为空,默认持久化策略
|
||||
MqttClient sampleClient = new MqttClient(broker, clientId);
|
||||
MqttConnectOptions connOpts = new MqttConnectOptions();
|
||||
connOpts.setCleanSession(true);
|
||||
System.out.println("Connecting to broker: "+broker);
|
||||
sampleClient.connect(connOpts);
|
||||
sampleClient.subscribe(topic,0);
|
||||
sampleClient.setCallback(new MqttCallback() {
|
||||
// 连接丢失
|
||||
@Override
|
||||
public void connectionLost(Throwable throwable) {
|
||||
|
||||
}
|
||||
// 连接成功
|
||||
@Override
|
||||
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
|
||||
|
||||
List<CarMessage> list= service.selectCarMessageList(1,2);
|
||||
String str = new String( mqttMessage.getPayload() );
|
||||
System.out.println(str);
|
||||
String[] test = str.split(" ");
|
||||
String[] results = new String[list.size()];
|
||||
List<CompletableFuture<String>> futures = new ArrayList<>();
|
||||
for (CarMessage carmsg : list) {
|
||||
futures.add(CompletableFuture.supplyAsync(() -> {
|
||||
int startIndex = Integer.parseInt(String.valueOf(carmsg.getCarMessageStartIndex())) - 1;
|
||||
int endIndex = Integer.parseInt(String.valueOf(carmsg.getCarMessageEndIndex()));
|
||||
StringBuilder hexBuilder = new StringBuilder();
|
||||
for (int j = startIndex; j < endIndex; j++) {
|
||||
hexBuilder.append(test[j]);
|
||||
}
|
||||
// 创建16进制的对象
|
||||
String hex = hexBuilder.toString();
|
||||
// 转橙字符数组
|
||||
char[] result = new char[hex.length() / 2];
|
||||
for (int x = 0; x < hex.length(); x += 2) {
|
||||
// 先转十进制
|
||||
int high = Character.digit(hex.charAt(x), 16);
|
||||
// 转二进制
|
||||
int low = Character.digit(hex.charAt(x + 1), 16);
|
||||
// 转字符
|
||||
result[x / 2] = (char) ((high << 4) + low);
|
||||
}
|
||||
return new String(result);
|
||||
}));
|
||||
}
|
||||
for (int i = 0; i < futures.size(); i++) {
|
||||
results[i] = futures.get(i).get();
|
||||
}
|
||||
String jsonString = JSONObject.toJSONString( results );
|
||||
ProducerRecord<String, String> producerRecord = new ProducerRecord<>( "carJsons", jsonString);
|
||||
kafkaProducer.send(producerRecord);
|
||||
}
|
||||
// 接收信息
|
||||
@Override
|
||||
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
|
||||
|
||||
}
|
||||
});
|
||||
} catch(MqttException me) {
|
||||
System.out.println("reason "+me.getReasonCode());
|
||||
System.out.println("msg "+me.getMessage());
|
||||
System.out.println("loc "+me.getLocalizedMessage());
|
||||
System.out.println("cause "+me.getCause());
|
||||
System.out.println("excep "+me);
|
||||
me.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,118 +0,0 @@
|
|||
package com.muyu.mqtt;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.muyu.common.kafka.constants.KafkaConstants;
|
||||
|
||||
import com.muyu.domain.CarMessage;
|
||||
import com.muyu.domain.KafKaData;
|
||||
import com.muyu.service.CarMessageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.kafka.clients.producer.KafkaProducer;
|
||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
import org.eclipse.paho.client.mqttv3.*;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* mqtt
|
||||
*
|
||||
* @ClassName MqttTest
|
||||
* @Description
|
||||
* @Date 2024/9/28 23:49
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MqttTest {
|
||||
private static final Integer ID = 1;
|
||||
private static final Integer CODE = 1;
|
||||
|
||||
@Resource
|
||||
private KafkaProducer<String, String> kafkaProducer;
|
||||
@Resource
|
||||
private CarMessageService sysCarMessageService;
|
||||
|
||||
@PostConstruct
|
||||
public void Test() {
|
||||
String topic = "vehicle";
|
||||
String content = "Message from MqttPublishSample";
|
||||
int qos = 2;
|
||||
String broker = "tcp://60.204.221.52:1883";
|
||||
String clientId = "JavaSample";
|
||||
try {
|
||||
// 第三个参数为空,默认持久化策略
|
||||
MqttClient sampleClient = new MqttClient(broker, clientId);
|
||||
MqttConnectOptions connOpts = new MqttConnectOptions();
|
||||
connOpts.setCleanSession(true);
|
||||
System.out.println("Connecting to broker: " + broker);
|
||||
sampleClient.connect(connOpts);
|
||||
sampleClient.subscribe(topic, 0);
|
||||
sampleClient.setCallback(new MqttCallback() {
|
||||
// 连接丢失
|
||||
@Override
|
||||
public void connectionLost(Throwable throwable) {
|
||||
|
||||
}
|
||||
|
||||
// 连接成功
|
||||
@Override
|
||||
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
|
||||
List<CarMessage> list = sysCarMessageService.selectCarMessage(1);
|
||||
String string = new String(mqttMessage.getPayload());
|
||||
log.info(new String(mqttMessage.getPayload()));
|
||||
List<KafKaData> kafKaDataList = new ArrayList<>();
|
||||
String[] test = string.split(" ");
|
||||
// String[] results = new String[list.size()];
|
||||
for (CarMessage carMessage : list) {
|
||||
int startIndex = Integer.parseInt(String.valueOf(carMessage.getCarMessageStartIndex())) - 1;
|
||||
int endIndex = Integer.parseInt(String.valueOf(carMessage.getCarMessageEndIndex()));
|
||||
StringBuilder hexBuilder = new StringBuilder();
|
||||
for (int i = startIndex; i < endIndex; i++) {
|
||||
hexBuilder.append(test[i]);
|
||||
}
|
||||
String hex = hexBuilder.toString();
|
||||
char[] result = new char[hex.length() / 2];
|
||||
for (int x = 0; x < hex.length(); x += 2) {
|
||||
int high = Character.digit(hex.charAt(x), 16);
|
||||
int low = Character.digit(hex.charAt(x + 1), 16);
|
||||
result[x / 2] = (char) ((high << 4) + low);
|
||||
}
|
||||
String value = new String(result);
|
||||
kafKaDataList.add(KafKaData.builder()
|
||||
.key(carMessage.getMessageTypeCode())
|
||||
.label(carMessage.getMessageTypeCode())
|
||||
.value(value)
|
||||
.type("String")
|
||||
.build());
|
||||
}
|
||||
String jsonString = JSONObject.toJSONString(kafKaDataList);
|
||||
ProducerRecord<String, String> producerRecord = new ProducerRecord<>(KafkaConstants.KafkaTopic, jsonString);
|
||||
kafkaProducer.send(producerRecord);
|
||||
log.info("kafka投产:{}", jsonString);
|
||||
// HashMap<String, String> stringStringHashMap = new HashMap<>();
|
||||
// kafKaDataList.forEach(data -> stringStringHashMap.put(data.getKey(), data.getValue()));
|
||||
// jsonString = JSONObject.toJSONString(stringStringHashMap);
|
||||
// System.out.println(jsonString);
|
||||
}
|
||||
|
||||
// 接收信息
|
||||
@Override
|
||||
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
} catch (MqttException me) {
|
||||
System.out.println("reason " + me.getReasonCode());
|
||||
System.out.println("msg " + me.getMessage());
|
||||
System.out.println("loc " + me.getLocalizedMessage());
|
||||
System.out.println("cause " + me.getCause());
|
||||
System.out.println("excep " + me);
|
||||
me.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,166 +0,0 @@
|
|||
package com.muyu.mqtt;//package com.muyu.server.mqtt;
|
||||
//
|
||||
//import com.muyu.analysis.parsing.remote.RemoteClientService;
|
||||
//import com.muyu.common.core.constant.KafkaConstants;
|
||||
//import com.muyu.common.core.constant.RedisConstants;
|
||||
//import com.muyu.common.core.domain.Result;
|
||||
//import com.muyu.enterprise.domain.resp.car.MessageValueListResp;
|
||||
//import com.muyu.server.feign.KafkaClient;
|
||||
//import jakarta.annotation.PostConstruct;
|
||||
//import jakarta.annotation.Resource;
|
||||
//import cn.hutool.json.JSONObject;
|
||||
//import com.alibaba.fastjson.JSON;
|
||||
//import lombok.extern.log4j.Log4j2;
|
||||
//import org.apache.kafka.clients.producer.KafkaProducer;
|
||||
//import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
//import org.eclipse.paho.client.mqttv3.*;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.data.redis.core.RedisTemplate;
|
||||
//import org.springframework.stereotype.Component;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
///**
|
||||
// * 协议解析处理数据发送传送到队列
|
||||
// * @Author:李庆帅
|
||||
// * @Package:com.muyu.analysis.parsing.MQTT
|
||||
// * @Project:cloud-server
|
||||
// * @name:ParsingMQTT
|
||||
// * @Date:2024/9/29 16:08
|
||||
// */
|
||||
//@Log4j2
|
||||
//@Component
|
||||
//public class ParsingMQTT {
|
||||
//
|
||||
// @Resource
|
||||
// private RedisTemplate<String, Object> redisTemplate;
|
||||
//
|
||||
// @Autowired
|
||||
// private KafkaClient remoteServiceClient;
|
||||
//
|
||||
// @Resource
|
||||
// private KafkaProducer<String, String> kafkaProducer;
|
||||
//
|
||||
// /**
|
||||
// * 协议解析
|
||||
// */
|
||||
// @PostConstruct
|
||||
// public void mqttClient() {
|
||||
// String topic = "vehicle";
|
||||
// String broker = "tcp://106.15.136.7:1883";
|
||||
// String clientId = "JavaSample";
|
||||
//
|
||||
// try {
|
||||
// // 第三个参数为空,默认持久化策略
|
||||
// MqttClient sampleClient = new MqttClient(broker, clientId);
|
||||
// MqttConnectOptions connOpts = new MqttConnectOptions();
|
||||
// connOpts.setCleanSession(true);
|
||||
// System.out.println("Connecting to broker: " + broker);
|
||||
// sampleClient.connect(connOpts);
|
||||
// sampleClient.subscribe(topic, 0);
|
||||
// sampleClient.setCallback(new MqttCallback() {
|
||||
// // 连接丢失
|
||||
// @Override
|
||||
// public void connectionLost(Throwable throwable) {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// // 连接成功
|
||||
// @Override
|
||||
// public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
|
||||
// System.out.println(new String(mqttMessage.getPayload()));
|
||||
// JSONObject entries = this.protocolParsing(new String(mqttMessage.getPayload()));
|
||||
//
|
||||
// ProducerRecord<String, String> producerRecord = new ProducerRecord<>(KafkaConstants.MESSAGE_PARSING,
|
||||
// entries.toString() );
|
||||
// kafkaProducer.send(producerRecord);
|
||||
// log.info("解析之后的数据"+entries);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 协议解析
|
||||
// * @param messageStr
|
||||
// * @return
|
||||
// */
|
||||
// public JSONObject protocolParsing(String messageStr) {
|
||||
// //根据空格切割数据
|
||||
// String[] hexArray = messageStr.split(" ");
|
||||
// StringBuilder result = new StringBuilder();
|
||||
// //遍历十六进制数据转换为字符
|
||||
// for (String hex : hexArray) {
|
||||
// int decimal = Integer.parseInt(hex, 16);
|
||||
// result.append((char) decimal);
|
||||
// }
|
||||
// //取出车辆VIN码
|
||||
// String vehicleVin = result.substring(1, 18);
|
||||
// log.info("车辆VIN码: " + vehicleVin);
|
||||
// //根据车辆VIN码查询报文模板ID
|
||||
// Result<Long> byVehicleVin = remoteServiceClient.findByVehicleVin(vehicleVin);
|
||||
// Long templateId = byVehicleVin.getData();
|
||||
// List<MessageValueListResp> templateList;
|
||||
// //从redis缓存中获取报文模板数据
|
||||
// try {
|
||||
// String redisKey = RedisConstants.MESSAGE_TEMPLATE + templateId;
|
||||
// if (redisTemplate.hasKey(redisKey)) {
|
||||
// List<Object> list = redisTemplate.opsForList().range(redisKey, 0, -1);
|
||||
// templateList = list.stream()
|
||||
// .map(obj -> JSON.parseObject(obj.toString(), MessageValueListResp.class))
|
||||
// .toList();
|
||||
// log.info("Redis缓存查询成功");
|
||||
// } else {
|
||||
// Result<List<MessageValueListResp>> byTemplateId = remoteServiceClient.producerKafka(templateId);
|
||||
// templateList = byTemplateId.getData();
|
||||
// templateList.forEach(
|
||||
// listResp ->
|
||||
// redisTemplate.opsForList().rightPush(
|
||||
// redisKey, JSON.toJSONString(listResp)
|
||||
// )
|
||||
// );
|
||||
// log.info("数据库查询成功:"+byTemplateId);
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// log.info("获取报文模板失败");
|
||||
// throw new RuntimeException("获取报文模板失败");
|
||||
// }
|
||||
// //判断报文模板列表不为空
|
||||
// if (templateList.isEmpty()) {
|
||||
// log.info("报文模版为空");
|
||||
// throw new RuntimeException("报文模版为空");
|
||||
// }
|
||||
// //存储报文模版解析后的数据
|
||||
// JSONObject jsonObject = new JSONObject();
|
||||
// for (MessageValueListResp messageValue : templateList) {
|
||||
// //起始位下标
|
||||
// Integer startIndex = messageValue.getMessageStartIndex() - 1;
|
||||
// //结束位下标
|
||||
// Integer endIndex = messageValue.getMessageEndIndex();
|
||||
// //根据报文模版截取数据
|
||||
// String value = result.substring(startIndex, endIndex);
|
||||
// //存入数据
|
||||
// jsonObject.put(messageValue.getMessageLabel(), value);
|
||||
// }
|
||||
// return jsonObject;
|
||||
// }
|
||||
//
|
||||
// // 接收信息
|
||||
// @Override
|
||||
// public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
|
||||
//
|
||||
// }
|
||||
// });
|
||||
// } catch (MqttException me) {
|
||||
// log.info("reason " + me.getReasonCode());
|
||||
// log.info("msg " + me.getMessage());
|
||||
// log.info("loc " + me.getLocalizedMessage());
|
||||
// log.info("cause " + me.getCause());
|
||||
// log.info("excep " + me);
|
||||
// me.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//}
|
|
@ -1,35 +0,0 @@
|
|||
package com.muyu.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.domain.CarMessage;
|
||||
import com.muyu.domain.resp.CarMessageResp;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 报文模板展示列表业务层
|
||||
*/
|
||||
public interface CarMessageService extends IService<CarMessage> {
|
||||
|
||||
|
||||
|
||||
|
||||
//报文切割
|
||||
/**
|
||||
* 分割字符串
|
||||
* 解析字符
|
||||
* 获取报文最终信息
|
||||
*/
|
||||
JSONObject inciseCarMessage(String testString);
|
||||
|
||||
|
||||
List<CarMessage> selectCarMessageList(int modelCode);
|
||||
|
||||
|
||||
List<CarMessage> selectCarMessage(@Param("carMessageCartype") Integer carMessageCartype);
|
||||
|
||||
|
||||
List<CarMessage> selectCarMessageListAll(int i);
|
||||
}
|
|
@ -1,134 +0,0 @@
|
|||
package com.muyu.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.domain.CarMessage;
|
||||
|
||||
import com.muyu.domain.resp.CarMessageResp;
|
||||
import com.muyu.mapper.CarInformationMapper;
|
||||
import com.muyu.mapper.CarMessageMapper;
|
||||
import com.muyu.mapper.CarMessagePlusMapper;
|
||||
import com.muyu.service.CarMessageService;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 报文模板展示列表业务实现层
|
||||
*/
|
||||
@Log4j2
|
||||
@Service
|
||||
public class CarMessageServiceImpl
|
||||
extends ServiceImpl<CarMessageMapper, CarMessage>
|
||||
implements CarMessageService {
|
||||
@Resource
|
||||
private CarMessageMapper carMessageMapper;
|
||||
|
||||
@Resource
|
||||
private CarMessagePlusMapper carMessagePlusMapper;
|
||||
|
||||
@Resource
|
||||
private CarInformationMapper carInformationMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public List<CarMessage> selectCarMessageList(int modelCode) {
|
||||
LambdaQueryWrapper<CarMessage> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(CarMessage::getCarMessageCartype, modelCode);
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CarMessage> selectCarMessage(Integer carMessageCartype) {
|
||||
return carMessagePlusMapper.selectCarMessageList(carMessageCartype);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CarMessage> selectCarMessageListAll(int i) {
|
||||
LambdaQueryWrapper<CarMessage> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(CarMessage::getCarMessageCartype, i);
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject inciseCarMessage(String testString) {
|
||||
return null;
|
||||
}
|
||||
|
||||
//报文处理
|
||||
// @Resource
|
||||
// private RedisTemplate<String ,Objects > redisTemplate;
|
||||
//
|
||||
// /**
|
||||
// * 报文解析
|
||||
// * @param testString
|
||||
// * @return
|
||||
// */
|
||||
// @Override
|
||||
// public JSONObject inciseCarMessage(String testString) {
|
||||
// //根据空格拆分切割数据字符串
|
||||
// String[] split = testString.split(" ");
|
||||
// StringBuilder stringBuilder = new StringBuilder();
|
||||
// for (String conversion : split) {
|
||||
// //将16进制字符串转换为对应的10进制
|
||||
// int inciseindex = Integer.parseInt(conversion, 16);
|
||||
// // 将10进制转换为对应的字符
|
||||
// stringBuilder.append((char) inciseindex);
|
||||
// }
|
||||
// //切取车辆VIN
|
||||
// String substring = stringBuilder.substring(1, 18);
|
||||
// log.info("车辆的VIN码:" + substring);
|
||||
// //根据给定的vehicleVin(车辆VIN号)获取对应的模板车辆分类carMessageCartype
|
||||
// String selectcared = carInformationMapper.selectcarMessageCartype(substring);
|
||||
// //创建接受数据的数组
|
||||
// List<CarMessage> messagesList ;
|
||||
//
|
||||
// try{
|
||||
// String redisKey = "carMessageList" + selectcared;
|
||||
//
|
||||
// if (redisTemplate.hasKey(redisKey)){
|
||||
// List<Objects> list = redisTemplate.opsForList().range(redisKey , 0, -1);
|
||||
// messagesList = list.stream()
|
||||
// .map(objects -> JSON.parseObject(objects.toString(), CarMessage.class))
|
||||
// .toList();
|
||||
// log.info("Redis缓存查询成功");
|
||||
// }else {
|
||||
// messagesList = carInformationMapper.selectcarMessageCartype(selectcared);
|
||||
//
|
||||
// messagesList.forEach(
|
||||
// listReq -> redisTemplate.opsForList().rightPushAll(redisKey, JSON.toString(listReq) )
|
||||
// );
|
||||
// log.info("数据库查询成功");
|
||||
// }
|
||||
// }catch(Exception e){
|
||||
// throw new RuntimeException("获取报文模板失败");
|
||||
// }
|
||||
// //判断报文模板 列表 不为空
|
||||
// if(messagesList.isEmpty()){
|
||||
// throw new RuntimeException("报文模版为空");
|
||||
// }
|
||||
// //存储报文模板解析后的数据
|
||||
// JSONObject jsonObject = new JSONObject();
|
||||
// for (CarMessage carMessage : messagesList) {
|
||||
// //起始位下标
|
||||
// Integer startIndex = carMessage.getCarMessageStartIndex();
|
||||
// //结束位下标
|
||||
// Integer endIndex = carMessage.getCarMessageEndIndex();
|
||||
// //根据报文模板获取保温截取位置
|
||||
// String value = stringBuilder.substring(startIndex, endIndex);
|
||||
// //存入数据
|
||||
// jsonObject.put(carMessage.getMessageTypeName(), value);
|
||||
//
|
||||
// }
|
||||
// return jsonObject;
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
Spring Boot Version: ${spring-boot.version}
|
||||
Spring Application Name: ${spring.application.name}
|
|
@ -1,74 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-electronic"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -1,81 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-electronic"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -1,81 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-electronic"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue