Compare commits

..

5 Commits

125 changed files with 2230 additions and 2217 deletions

View File

@ -34,7 +34,7 @@ public class TokenController {
@PostMapping("login") @PostMapping("login")
public Result<?> login (@RequestBody LoginBody form) { 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 // 获取登录token
return Result.success(tokenService.createToken(userInfo)); return Result.success(tokenService.createToken(userInfo));
} }

View File

@ -17,7 +17,18 @@ public class LoginBody {
*/ */
private String password; private String password;
/**
*
*/
private String firmName;
public String getFirmName() {
return firmName;
}
public void setFirmName(String firmName) {
this.firmName = firmName;
}
public String getUsername () { public String getUsername () {
return username; return username;

View File

@ -14,7 +14,7 @@ import com.muyu.common.core.utils.ip.IpUtils;
import com.muyu.common.redis.service.RedisService; import com.muyu.common.redis.service.RedisService;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.Firm; 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.remote.RemoteUserService;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.LoginUser; import com.muyu.common.system.domain.LoginUser;
@ -31,9 +31,6 @@ public class SysLoginService {
@Autowired @Autowired
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@Autowired
private RemoteFirmService remoteFirmService;
@Autowired @Autowired
private SysPasswordService passwordService; 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)) { if (StringUtils.isAnyBlank(username, password)) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写"); recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
@ -71,7 +68,24 @@ public class SysLoginService {
throw new ServiceException("很遗憾访问IP已被列入系统黑名单"); 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())) { if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在"); recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
@ -118,7 +132,7 @@ public class SysLoginService {
throw new ServiceException("密码长度必须在5到20个字符之间"); throw new ServiceException("密码长度必须在5到20个字符之间");
} }
String firmName = registerBody.getFirmName(); String firmName = registerBody.getFirmName();
Result<Firm> byFirmName = remoteFirmService.findByFirmName(firmName); Result<Firm> byFirmName = remoteUserService.findByFirmName(firmName);
Firm data = byFirmName.getData(); Firm data = byFirmName.getData();
if (null != data){ if (null != data){
throw new ServiceException("公司名称已经存在"); throw new ServiceException("公司名称已经存在");

View File

@ -5,9 +5,9 @@ server:
# nacos线上地址 # nacos线上地址
nacos: nacos:
addr: 159.75.188.178:8848 addr: 159.75.188.178:8848
user-name: nacos user-name:
password: nacos password:
namespace: xxy namespace: eight
# Spring # Spring
spring: spring:
application: application:

View File

@ -56,5 +56,5 @@ public class SecurityConstants {
*/ */
public static final String ROLE_PERMISSION = "role_permission"; public static final String ROLE_PERMISSION = "role_permission";
public static final String SAAS_KEY = "ent-code"; public static final String SAAS_KEY = "saas_key";
} }

View File

@ -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>

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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";
}

View File

@ -11,7 +11,8 @@ import com.muyu.cloud.common.saas.domain.model.EntInfo;
import com.muyu.cloud.common.saas.exception.SaaSException; import com.muyu.cloud.common.saas.exception.SaaSException;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.SpringUtils; 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 com.muyu.common.system.remote.RemoteUserService;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
@ -36,16 +37,17 @@ public class ManyDataSource implements ApplicationRunner{
private List<EntInfo> dataSourceInfoList(){ private List<EntInfo> dataSourceInfoList(){
RemoteUserService remoteUserService = SpringUtils.getBean(RemoteUserService.class); RemoteUserService remoteUserService = SpringUtils.getBean(RemoteUserService.class);
Result<List<SysUser>> tableDataInfoResult = remoteUserService.companyList(); Result<List<Firm>> tableDataInfoResult = remoteUserService.selectAll();
if (tableDataInfoResult==null){ if (tableDataInfoResult==null){
throw new SaaSException("saas远调数据源错误"); throw new SaaSException("saas远调数据源错误");
} }
List<SysUser> data = tableDataInfoResult.getData(); List<Firm> data = tableDataInfoResult.getData();
if (tableDataInfoResult.getCode() ==Result.SUCCESS && data !=null){ if (tableDataInfoResult.getCode() ==Result.SUCCESS && data !=null){
List<EntInfo> list = new ArrayList<>(); List<EntInfo> list = new ArrayList<>();
for (SysUser row : data) { for (Firm row : data) {
list.add( list.add(
EntInfo.builder() EntInfo.builder()
.firmKey(row.getFirmName())
.entCode(row.getDatabaseName()) .entCode(row.getDatabaseName())
.ip(DatasourceContent.IP) .ip(DatasourceContent.IP)
.port(DatasourceContent.PORT) .port(DatasourceContent.PORT)
@ -82,7 +84,8 @@ public class ManyDataSource implements ApplicationRunner{
public void run(ApplicationArguments args) { public void run(ApplicationArguments args) {
DruidDataSourceFactory druidDataSourceFactory = SpringUtils.getBean(DruidDataSourceFactory.class); DruidDataSourceFactory druidDataSourceFactory = SpringUtils.getBean(DruidDataSourceFactory.class);
DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class); DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class);
for (EntInfo entInfo : dataSourceInfoList()) { List<EntInfo> entInfos = this.dataSourceInfoList();
for (EntInfo entInfo : entInfos) {
DataSourceInfo dataSourceInfo = DataSourceInfo.hostAndPortBuild( DataSourceInfo dataSourceInfo = DataSourceInfo.hostAndPortBuild(
entInfo.getEntCode(), entInfo.getIp(), entInfo.getPort() entInfo.getEntCode(), entInfo.getIp(), entInfo.getPort()
); );

View File

@ -8,7 +8,6 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
/** /**
* @author DongZl
* @description: * @description:
* @Date 2023-8-1 11:15 * @Date 2023-8-1 11:15
*/ */

View File

@ -19,7 +19,6 @@ public class DruidDataSourceFactory {
/** /**
* @Description: * @Description:
* @Author Dongzl
*/ */
public DruidDataSource create(DataSourceInfo dataSourceInfo) { public DruidDataSource create(DataSourceInfo dataSourceInfo) {
DruidDataSource druidDataSource = new DruidDataSource(); DruidDataSource druidDataSource = new DruidDataSource();
@ -33,7 +32,7 @@ public class DruidDataSourceFactory {
log.info("{} -> 数据源连接成功", dataSourceInfo.getKey()); log.info("{} -> 数据源连接成功", dataSourceInfo.getKey());
return druidDataSource; return druidDataSource;
} catch (SQLException throwables) { } catch (SQLException throwables) {
log.error("数据源 {} 连接失败,用户名:{},密码 {}",dataSourceInfo.getUrl(),dataSourceInfo.getUserName(),dataSourceInfo.getPassword()); log.error("数据源 {} 连接失败,用户名:{},密码 {}, 四百原因:{}",dataSourceInfo.getUrl(),dataSourceInfo.getUserName(),dataSourceInfo.getPassword(),throwables);
return null; return null;
} }
} }

View File

@ -8,5 +8,5 @@ package com.muyu.cloud.common.saas.contents;
*/ */
public class SaaSConstant { public class SaaSConstant {
public final static String SAAS_KEY = "ent-code"; public final static String SAAS_KEY = "saas_key";
} }

View File

@ -17,6 +17,8 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
public class EntInfo { public class EntInfo {
private String firmKey;
private String entCode; private String entCode;
private String ip; private String ip;

View File

@ -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.many.datasource.role.DynamicDataSource;
import com.muyu.cloud.common.saas.contents.SaaSConstant; import com.muyu.cloud.common.saas.contents.SaaSConstant;
import com.muyu.cloud.common.saas.exception.SaaSException; 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.ServletUtils;
import com.muyu.common.core.utils.SpringUtils; import com.muyu.common.core.utils.SpringUtils;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -25,8 +26,11 @@ public class SaaSInterceptor implements AsyncHandlerInterceptor {
return true; return true;
} }
// SaaSConstant.SAAS_KEY
// SecurityConstants.SAAS_KEY
String SaaSKey = ServletUtils.getHeader(request, SaaSConstant.SAAS_KEY); String SaaSKey = ServletUtils.getHeader(request, SaaSConstant.SAAS_KEY);
if (SaaSKey == null) { if (SaaSKey == null || "".equals(SaaSKey)) {
throw new SaaSException("SaaS非法访问"); throw new SaaSException("SaaS非法访问");
}else { }else {
DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class); DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class);

View File

@ -62,6 +62,7 @@ public class TokenService {
Map<String, Object> rspMap = new HashMap<String, Object>(); Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap)); rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("expires_in", expireTime); rspMap.put("expires_in", expireTime);
rspMap.put("saas_key", loginUser.getSysUser().getDatabaseName());
return rspMap; return rspMap;
} }

View File

@ -1,5 +1,6 @@
package com.muyu.common.system.domain; package com.muyu.common.system.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -21,6 +22,7 @@ public class Firm {
/** /**
* *
*/ */
@TableId(value = "firm_id")
private Integer firmId; private Integer firmId;
/** /**

View File

@ -63,4 +63,14 @@ public class LoginUser implements Serializable {
*/ */
private SysUser sysUser; private SysUser sysUser;
/**
*
*/
private Firm firm;
/**
*
*/
private String firmName;
} }

View File

@ -1,5 +1,6 @@
package com.muyu.common.system.domain; 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;
import com.muyu.common.core.annotation.Excel.ColumnType; import com.muyu.common.core.annotation.Excel.ColumnType;
import com.muyu.common.core.annotation.Excel.Type; import com.muyu.common.core.annotation.Excel.Type;

View File

@ -0,0 +1,32 @@
package com.muyu.common.system.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Authorweiran
* @Packagecom.muyu.system.domain
* @Projectcloud-server-8
* @nameSysUserMessage
* @Date2024/10/2 10:25
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysUserMessage {
/**
*
*/
private String username;
/**
*
*/
private String password;
/**
*
*/
private String databaseName;
}

View File

@ -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
* @Packagecom.muyu.common.system.remote
* @Projectcloud-server-8
* @nameRemoteFirmService
* @Date2024/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);
}

View File

@ -3,7 +3,9 @@ package com.muyu.common.system.remote;
import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.core.constant.SecurityConstants;
import com.muyu.common.core.constant.ServiceNameConstants; import com.muyu.common.core.constant.ServiceNameConstants;
import com.muyu.common.core.domain.Result; 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.SysUser;
import com.muyu.common.system.domain.SysUserMessage;
import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory;
import com.muyu.common.system.domain.LoginUser; import com.muyu.common.system.domain.LoginUser;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
@ -42,4 +44,27 @@ public interface RemoteUserService {
@GetMapping("/user/companyList") @GetMapping("/user/companyList")
public Result<List<SysUser>> 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();
} }

View File

@ -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
* @Packagecom.muyu.common.system.remote.factory
* @Projectcloud-server-8
* @nameRemoteFirmFallbackFactory
* @Date2024/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());
}
};
}
}

View File

@ -1,6 +1,8 @@
package com.muyu.common.system.remote.factory; package com.muyu.common.system.remote.factory;
import com.muyu.common.core.domain.Result; 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.remote.RemoteUserService;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.common.system.domain.LoginUser; import com.muyu.common.system.domain.LoginUser;
@ -38,6 +40,26 @@ public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserServ
public Result<List<SysUser>> companyList() { public Result<List<SysUser>> companyList() {
return Result.error("发现用户失败:" + throwable.getMessage()); 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());
}
}; };
} }
} }

View File

@ -1,4 +1,3 @@
com.muyu.common.system.remote.factory.RemoteUserFallbackFactory com.muyu.common.system.remote.factory.RemoteUserFallbackFactory
com.muyu.common.system.remote.factory.RemoteLogFallbackFactory com.muyu.common.system.remote.factory.RemoteLogFallbackFactory
com.muyu.common.system.remote.factory.RemoteFileFallbackFactory com.muyu.common.system.remote.factory.RemoteFileFallbackFactory
com.muyu.common.system.remote.factory.RemoteFirmFallbackFactory

View File

@ -22,7 +22,6 @@
<module>cloud-common-rabbit</module> <module>cloud-common-rabbit</module>
<module>cloud-common-saas</module> <module>cloud-common-saas</module>
<module>cloud-common-wechat</module> <module>cloud-common-wechat</module>
<module>cloud-common-kafka</module>
</modules> </modules>
<artifactId>cloud-common</artifactId> <artifactId>cloud-common</artifactId>

View File

@ -7,7 +7,7 @@ nacos:
addr: 159.75.188.178:8848 addr: 159.75.188.178:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: xxy namespace: eight
# Spring # Spring
spring: spring:

View File

@ -11,10 +11,6 @@
<artifactId>cloud-modules-carData</artifactId> <artifactId>cloud-modules-carData</artifactId>
<description>
数据处理模块
</description>
<properties> <properties>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target> <maven.compiler.target>17</maven.compiler.target>
@ -87,17 +83,14 @@
<version>2.9.3</version> <version>2.9.3</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.muyu</groupId> <groupId>org.apache.kafka</groupId>
<artifactId>cloud-common-kafka</artifactId> <artifactId>kafka-clients</artifactId>
<version>3.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.iotdb</groupId> <groupId>org.apache.iotdb</groupId>
<artifactId>iotdb-session</artifactId> <artifactId>iotdb-session</artifactId>
<version>0.13.1</version> <version>0.13.1</version>
</dependency> </dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-rabbit</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -1,9 +1,11 @@
package com.muyu.carData; package com.muyu.carData;
import com.muyu.carData.listener.MyListener;
import com.muyu.common.security.annotation.EnableMyFeignClients; import com.muyu.common.security.annotation.EnableMyFeignClients;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import javax.swing.*;
/** /**
* @Author * @Author
@ -17,8 +19,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
public class CarDataApplication { public class CarDataApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication application = new SpringApplication(CarDataApplication.class); SpringApplication.run(CarDataApplication.class,args);
application.addListeners(new MyListener()); 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;");
application.run(args);
} }
} }

View File

@ -0,0 +1,18 @@
package com.muyu.carData.annotation;
import java.lang.annotation.*;
/**
* @Author
* @Packagecom.muyu.carData.annotation
* @Projectcloud-server-8
* @nameIoTTableName
* @Date2024/9/27 19:29
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
public @interface IoTTableName {
String value() default "";
}

View File

@ -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.consumer.KafkaConsumer;
import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.KafkaProducer;
@ -28,7 +28,7 @@ public class KafkaConfig {
//生产者可用于缓冲等待发送到服务器的记录的总内存字节数 //生产者可用于缓冲等待发送到服务器的记录的总内存字节数
configs.put("buffer-memory",3554432); configs.put("buffer-memory",3554432);
/** /**
* , *producerleader,
*acks=0,0,producer.(socket) *acks=0,0,producer.(socket)
* .,,(retries)(),-1. * .,,(retries)(),-1.
*acks=1,1,leader,followerproducer., *acks=1,1,leader,followerproducer.,

View File

@ -0,0 +1,13 @@
package com.muyu.carData.constract;
/**
* @Author
* @Packagecom.muyu.carData.constract
* @Projectcloud-server-8
* @nameIoTDBTableParam
* @Date2024/9/27 20:02
*/
public class IoTDBTableParam {
public static final String SYSLOG_IOT_TABLE = "student";
}

View File

@ -15,7 +15,7 @@ import org.springframework.stereotype.Component;
import java.time.Duration; import java.time.Duration;
import java.util.Collection; import java.util.Collection;
/** /**
* @Author * @Author
* @Packagecom.muyu.carData.consumer * @Packagecom.muyu.carData.consumer
* @Projectcloud-server-8 * @Projectcloud-server-8
@ -29,7 +29,7 @@ public class MyKafkaConsumer implements InitializingBean {
@Autowired @Autowired
private KafkaConsumer kafkaConsumer; private KafkaConsumer kafkaConsumer;
private final String topicName = "carJsons"; private final String topicName = "test";
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
@ -43,14 +43,13 @@ public class MyKafkaConsumer implements InitializingBean {
for (ConsumerRecord<String, String> consumerRecord : consumerRecords) { for (ConsumerRecord<String, String> consumerRecord : consumerRecords) {
//从consumerRecord中获取消费数据 //从consumerRecord中获取消费数据
String value = consumerRecord.value(); 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(); thread.start();
log.info("启动线程结束监听topic:{}",topicName);
} }
} }

View File

@ -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
* @Packagecom.muyu.carData.domain
* @Projectcloud-server-8
* @nameIoTDBRecord
* @Date2024/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;
}

View File

@ -1,22 +0,0 @@
package com.muyu.carData.event;
import com.alibaba.fastjson.JSONObject;
import org.springframework.context.ApplicationEvent;
/**
* @Author
* @Packagecom.muyu.carData.event
* @Projectcloud-server-8
* @nameEsSaveEvent
* @Date2024/9/29 21:15
*/
public class EsSaveEvent extends ApplicationEvent {
private JSONObject data;
public EsSaveEvent(JSONObject source) {
super(source);
this.data = source;
}
}

View File

@ -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
* @Packagecom.muyu.carData.interfaces
* @Projectcloud-server-8
* @nameIoTDBRecordable
* @Date2024/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;
}
}

View File

@ -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
* @Packagecom.muyu.carData.listener
* @Projectcloud-server-8
* @nameCustomEventListener
* @Date2024/9/29 23:49
*/
@Component
public class CustomEventListener {
@EventListener
public void handMyEvent(EsSaveEvent event){
//处理事件详情
}
}

View File

@ -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
* @Packagecom.muyu.carData.listener
* @Projectcloud-server-8
* @nameMyListener
* @Date2024/9/29 21:18
*/
@Log4j2
public class MyListener implements ApplicationListener<EsSaveEvent> {
@Override
public void onApplicationEvent(EsSaveEvent event) {
log.info("监听到自定义事件........");
}
}

View File

@ -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
* @Packagecom.muyu.carData.pulisher
* @Projectcloud-server-8
* @nameCustomEventPublisher
* @Date2024/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);
}
}

View File

@ -1,4 +1,4 @@
package com.muyu.carData.controller; package com.muyu.carData.testcontroller;
import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Cache;
import com.muyu.carData.config.cacheconfig.CaffeineConfig; import com.muyu.carData.config.cacheconfig.CaffeineConfig;

View File

@ -1,4 +1,4 @@
package com.muyu.carData.controller; package com.muyu.carData.testcontroller;
import com.muyu.carData.config.lotdbconfig.IotDBSessionConfig; import com.muyu.carData.config.lotdbconfig.IotDBSessionConfig;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ -44,13 +44,11 @@ public class IotDBController {
@GetMapping("/insertData/{insertSize}/{count}") @GetMapping("/insertData/{insertSize}/{count}")
public String insert(@PathVariable(name = "insertSize") int insertSize,@PathVariable(name = "count") int count) throws IoTDBConnectionException, StatementExecutionException { public String insert(@PathVariable(name = "insertSize") int insertSize,@PathVariable(name = "count") int count) throws IoTDBConnectionException, StatementExecutionException {
Session session = iotDBSessionConfig.iotSession(); Session session = iotDBSessionConfig.iotSession();
//schemaList 属性及类型
List<MeasurementSchema> schemaList = new ArrayList<>(); List<MeasurementSchema> schemaList = new ArrayList<>();
schemaList.add(new MeasurementSchema("id", TSDataType.INT32)); schemaList.add(new MeasurementSchema("id", TSDataType.INT32));
schemaList.add(new MeasurementSchema("name", TSDataType.TEXT)); schemaList.add(new MeasurementSchema("name", TSDataType.TEXT));
schemaList.add(new MeasurementSchema("sex", TSDataType.TEXT)); schemaList.add(new MeasurementSchema("sex", TSDataType.TEXT));
//tablet 封装数据
Tablet tablet = new Tablet("root.yang.baling", schemaList); Tablet tablet = new Tablet("root.yang.baling", schemaList);
//以当前时间戳作为插入的起始时间戳 //以当前时间戳作为插入的起始时间戳

View File

@ -1,6 +1,7 @@
package com.muyu.carData.controller; package com.muyu.carData.testcontroller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.muyu.carData.pojo.Student;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.producer.ProducerRecord;
@ -24,15 +25,21 @@ public class KafkaProducerController {
@Autowired @Autowired
private KafkaProducer kafkaProducer; private KafkaProducer kafkaProducer;
private final String topicName = "carJsons"; private final String topicName = "test";
@GetMapping("/producer") @GetMapping("/produceTest")
public String produceTest(JSONObject data) { public String produceTest() {
try { try {
Student stu = Student.builder().id(2)
.name("杨闪闪")
.sex("男")
.build();
String stuStr = JSONObject.toJSONString(stu);
log.info("Topic:{}", topicName); log.info("Topic:{}", topicName);
log.info("转换为JSON{}",data); log.info("Java对象{}",stu);
log.info("转换为JSON{}",stuStr);
//使用KafkaProducer发送消息 //使用KafkaProducer发送消息
ProducerRecord<String, String> stringProducerRecord = new ProducerRecord(topicName, data); ProducerRecord<String, String> stringProducerRecord = new ProducerRecord<>(topicName, stuStr);
kafkaProducer.send(stringProducerRecord); kafkaProducer.send(stringProducerRecord);
}catch (Exception e){ }catch (Exception e){
log.error("Producer写入Topic异常,异常信息是:{}",e.getMessage()); log.error("Producer写入Topic异常,异常信息是:{}",e.getMessage());
@ -40,6 +47,4 @@ public class KafkaProducerController {
return "消息发送成功"; return "消息发送成功";
} }
} }

View File

@ -1,2 +0,0 @@
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -11,7 +11,6 @@ import java.util.function.Supplier;
/** /**
* *
*
* @author 17353 * @author 17353
*/ */
@Data @Data
@ -19,7 +18,7 @@ import java.util.function.Supplier;
@NoArgsConstructor @NoArgsConstructor
@Builder @Builder
@Tag(name = "车辆报文模板实体类") @Tag(name = "车辆报文模板实体类")
@TableName(value = "car_message", autoResultMap = true) @TableName(value = "car_message",autoResultMap = true)
public class CarMessage { public class CarMessage {
//报文类型模块表 //报文类型模块表
/** /**
@ -69,11 +68,8 @@ public class CarMessage {
*/ */
private Integer carMessageState; private Integer carMessageState;
private String carMessageName;
/** /**
* *
*
* @param carMessage * @param carMessage
* @param supplier * @param supplier
* @return * @return
@ -96,7 +92,6 @@ public class CarMessage {
/** /**
* *
*
* @param carMessage * @param carMessage
* @return * @return
*/ */
@ -132,4 +127,7 @@ public class CarMessage {
*/ */
} }

View File

@ -29,12 +29,14 @@ public class Firm {
/** /**
* *
*/ */
@TableField(exist = false)
private String firmName; private String firmName;
/** /**
* *
*/ */
private String databaseName; private String databaseName;
/**
* Id
*/
private long permissionId;
} }

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.domain
* @Projectcloud-server-8
* @nameFirmPermission
* @Date2024/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();
}
}

View File

@ -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;
}

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.domain.req
* @Projectcloud-server-8
* @nameFirmPermissionAddReq
* @Date2024/10/8 19:48
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Tag(name = "企业权限新增请求对象",description = "企业权限新增请求对象")
public class FirmPermissionAddReq {
/**
*
*/
private String permissionLevel;
/**
*
*/
private Integer carNumber;
/**
*
*/
private Integer carTypeNumber;
}

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.domain.req
* @Projectcloud-server-8
* @nameFirmPermissionUpdReq
* @Date2024/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;
}

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.domain.req
* @Projectcloud-server-8
* @nameFirmUpdPermissionReq
* @Date2024/10/7 22:22
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Tag(name = "修改权限请求对象",description = "修改权限请求对象")
public class FirmUpdPermissionReq {
/**
* Id
*/
private Integer firmId;
/**
*
*/
private String permissionLevel;
}

View File

@ -38,7 +38,7 @@ public class CarInformationResp {
*/ */
// @TableName(value = "car_information_VIN") // @TableName(value = "car_information_VIN")
@TableField(value = "car_information_VIN") @TableField(value = "car_information_VIN")
private String carInformationVin; private String carInformationVIN;
/** /**
* *
*/ */

View File

@ -1,6 +1,7 @@
package com.muyu.domain.resp; package com.muyu.domain.resp;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.muyu.domain.SysUser; import com.muyu.domain.SysUser;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -108,8 +109,28 @@ public class FirmListResp {
/** /**
* *
*/ */
@TableField(exist = false) // @TableField(exist = false)
private String firmName; private String firmName;
/**
* Id
*/
private long permissionId;
/**
*
*/
private String permissionLevel;
/**
*
*/
private Integer carNumber;
/**
*
*/
private Integer carTypeNumber;
/** /**
* *

View File

@ -19,6 +19,11 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-saas</artifactId>
<version>3.6.3</version>
</dependency>
<!-- <dependency> --> <!-- <dependency> -->
<!-- <groupId>com.muyu</groupId> --> <!-- <groupId>com.muyu</groupId> -->
<!-- <artifactId>cloud-common-rabbit</artifactId> --> <!-- <artifactId>cloud-common-rabbit</artifactId> -->
@ -28,22 +33,11 @@
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </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 --> <!-- SpringCloud Alibaba Nacos Config -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency> </dependency>
<!--apache.kafka<-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel --> <!-- SpringCloud Alibaba Sentinel -->
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
@ -94,11 +88,6 @@
<artifactId>pagehelper</artifactId> <artifactId>pagehelper</artifactId>
<version>6.0.0</version> <version>6.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.muyu</groupId>
<artifactId>cloud-common-kafka</artifactId>
<version>3.6.3</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>cloud-electronic</finalName> <finalName>cloud-electronic</finalName>

View File

@ -1,9 +1,12 @@
package com.muyu.server; 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 com.muyu.common.security.annotation.EnableMyFeignClients;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/** /**
* @Author * @Author
@ -13,7 +16,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @Date2024/9/17 9:56 * @Date2024/9/17 9:56
*/ */
@EnableMyFeignClients @EnableMyFeignClients
@SpringBootApplication @SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
DruidDataSourceAutoConfigure.class,
DynamicDataSourceAutoConfiguration.class
})
@MapperScan("com.muyu.server.mapper") @MapperScan("com.muyu.server.mapper")
public class IntegrationApplication { public class IntegrationApplication {
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -37,9 +37,7 @@ public class CarFenceClazzController {
@Operation(summary = "查询数据",description = "查询数据") @Operation(summary = "查询数据",description = "查询数据")
public Result<List<CarFenceClazz>> selectConnect(){ public Result<List<CarFenceClazz>> selectConnect(){
List<CarFenceClazz> connects = carFenceClazzService.list(); List<CarFenceClazz> connects = carFenceClazzService.list();
log.info("查询数据成功");
return Result.success( return Result.success(
connects, "操作成功" connects, "操作成功"
); );
} }

View File

@ -43,7 +43,6 @@ public class CarFenceController {
@Validated @RequestBody CarFenceReq req @Validated @RequestBody CarFenceReq req
){ ){
Page<CarFenceResp> connects = carFenceService.selectCarFence(req); Page<CarFenceResp> connects = carFenceService.selectCarFence(req);
log.info("查询数据:"+ connects);
return Result.success( return Result.success(
connects, "操作成功" connects, "操作成功"
); );
@ -58,13 +57,11 @@ public class CarFenceController {
@Validated @RequestBody CarFence carFence @Validated @RequestBody CarFence carFence
){ ){
Boolean connects = carFenceService.addCarFence(carFence); Boolean connects = carFenceService.addCarFence(carFence);
log.info("shd");
return connects?Result.success( return connects?Result.success(
null, "操作成功" null, "操作成功"
):Result.success( ):Result.success(
null, "操作失败" null, "操作失败"
); );
} }
/** /**
@ -76,8 +73,6 @@ public class CarFenceController {
@Validated @RequestBody CarGroupReq req @Validated @RequestBody CarGroupReq req
){ ){
Boolean connects = carFenceService.addCarGroup(req); Boolean connects = carFenceService.addCarGroup(req);
log.info("添加数据:"+ connects);
return connects?Result.success( return connects?Result.success(
null, "操作成功" null, "操作成功"
):Result.success( ):Result.success(

View File

@ -8,10 +8,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** /**
* *
@ -31,7 +28,7 @@ public class FirmManageController {
/** /**
* *
* @param firmListReq * @param firmListReq
* @return * @return
*/ */
@ -43,5 +40,17 @@ public class FirmManageController {
} }
// /**
// * 删除企业信息
// * @param firmId
// * @return
// */
// @PostMapping("/firmmessagedel/{firmId}")
// @Operation(summary = "删除企业信息",description = "删除企业信息")
// public Result firmmessagedel(@PathVariable Integer firmId){
//
// }
} }

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.server.controller
* @Projectcloud-server-8
* @nameFirmPermission
* @Date2024/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();
}
}

View File

@ -9,8 +9,6 @@ import com.muyu.domain.req.CarInformationListReq;
import com.muyu.domain.req.CarInformationUpdReq; import com.muyu.domain.req.CarInformationUpdReq;
import com.muyu.domain.resp.CarInformationResp; import com.muyu.domain.resp.CarInformationResp;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List; import java.util.List;
@ -20,12 +18,4 @@ import java.util.List;
@Mapper @Mapper
public interface CarInformationMapper extends MPJBaseMapper<CarInformation> { 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);
} }

View File

@ -2,7 +2,7 @@ package com.muyu.server.mapper;
import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.base.MPJBaseMapper;
import com.muyu.domain.Firm; import com.muyu.domain.Firm;
import com.muyu.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.domain.req.FirmListReq; import com.muyu.domain.req.FirmListReq;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.server.mapper
* @Projectcloud-server-8
* @nameFirmPermissionMapper
* @Date2024/10/7 21:32
*/
@Mapper
public interface FirmPermissionMapper extends MPJBaseMapper<FirmPermission> {
}

View File

@ -1,9 +1,7 @@
package com.muyu.server.service; package com.muyu.server.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.domain.CarMessage; import com.muyu.domain.CarMessage;
import com.muyu.domain.resp.CarInformationResp;
import com.muyu.domain.resp.CarMessageResp; import com.muyu.domain.resp.CarMessageResp;
import java.util.List; import java.util.List;
@ -45,12 +43,4 @@ public interface CarMessageService extends IService<CarMessage> {
*/ */
List<CarMessageResp> selectJoinList(Long id); List<CarMessageResp> selectJoinList(Long id);
//报文切割
/**
*
*
*
*/
JSONObject inciseCarMessage(String testString);
} }

View File

@ -0,0 +1,12 @@
package com.muyu.server.service;
/**
*
* @Authorweiran
* @Packagecom.muyu.server.service
* @Projectcloud-server-8
* @nameDataSourceDel
* @Date2024/10/10 9:30
*/
public interface DataSourceDel {
}

View File

@ -1,8 +1,9 @@
package com.muyu.server.service; package com.muyu.server.service;
import com.baomidou.mybatisplus.extension.service.IService; 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.FirmListReq;
import com.muyu.domain.req.FirmUpdPermissionReq;
import com.muyu.domain.resp.FirmTotalListResp; import com.muyu.domain.resp.FirmTotalListResp;
import java.util.List; import java.util.List;
@ -17,10 +18,18 @@ import java.util.List;
*/ */
public interface FirmManageService extends IService<SysUser> { public interface FirmManageService extends IService<SysUser> {
/** /**
* *
* @param firmListReq * @param firmListReq
* @return * @return
*/ */
FirmTotalListResp firmmessageList(FirmListReq firmListReq); FirmTotalListResp firmmessageList(FirmListReq firmListReq);
/**
*
* @param firmUpdPermissionReq
* @param permissionId
*/
void updpermission(FirmUpdPermissionReq firmUpdPermissionReq, long permissionId);
} }

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.server.service
* @Projectcloud-server-8
* @nameFirmPermissionService
* @Date2024/10/7 21:31
*/
public interface FirmPermissionService extends IService<FirmPermission> {
/**
*
* @param firmUpdPermissionReq
* @return
*/
void updpermission(FirmUpdPermissionReq firmUpdPermissionReq);
/**
*
* @return
*/
List<FirmPermission> permissionlist();
}

View File

@ -1,8 +1,5 @@
package com.muyu.server.service.impl; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.muyu.common.core.utils.StringUtils; 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.CarMessageType;
import com.muyu.domain.CarType; import com.muyu.domain.CarType;
import com.muyu.domain.resp.CarMessageResp; import com.muyu.domain.resp.CarMessageResp;
import com.muyu.server.mapper.CarInformationMapper;
import com.muyu.server.mapper.CarMessageMapper; import com.muyu.server.mapper.CarMessageMapper;
import com.muyu.server.service.CarMessageService; import com.muyu.server.service.CarMessageService;
import lombok.extern.log4j.Log4j2;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* *
*/ */
@Log4j2
@Service @Service
public class CarMessageServiceImpl public class CarMessageServiceImpl
extends ServiceImpl<CarMessageMapper,CarMessage> extends ServiceImpl<CarMessageMapper,CarMessage>
@ -32,11 +23,6 @@ public class CarMessageServiceImpl
@Resource @Resource
private CarMessageMapper carMessageMapper; private CarMessageMapper carMessageMapper;
@Resource
private CarInformationMapper carInformationMapper;
/** /**
* *
* @param * @param
@ -105,81 +91,5 @@ public class CarMessageServiceImpl
.eq(StringUtils.isNotNull(id),CarMessage::getCarMessageCartype, id)); .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;
//
// }
} }

View File

@ -0,0 +1,18 @@
package com.muyu.server.service.impl;
import com.muyu.server.service.DataSourceDel;
import org.springframework.stereotype.Service;
/**
*
* @Authorweiran
* @Packagecom.muyu.server.service.impl
* @Projectcloud-server-8
* @nameDataSourceDelImpl
* @Date2024/10/10 9:30
*/
@Service
public class DataSourceDelImpl implements DataSourceDel {
String url="jdbc:mysql://159.75.188.178:3306/";
}

View File

@ -1,12 +1,16 @@
package com.muyu.server.service.impl; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.system.domain.SysUser;
import com.muyu.domain.Firm; 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.FirmListReq;
import com.muyu.domain.req.FirmUpdPermissionReq;
import com.muyu.domain.resp.FirmListResp; import com.muyu.domain.resp.FirmListResp;
import com.muyu.domain.resp.FirmTotalListResp; import com.muyu.domain.resp.FirmTotalListResp;
import com.muyu.server.mapper.FirmManageMapper; import com.muyu.server.mapper.FirmManageMapper;
@ -38,16 +42,48 @@ public class FirmManageServiceImpl extends ServiceImpl<FirmManageMapper, SysUser
*/ */
@Override @Override
public FirmTotalListResp firmmessageList(FirmListReq firmListReq) { public FirmTotalListResp firmmessageList(FirmListReq firmListReq) {
long findcount = firmService.findcount(); LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
long count = this.count(queryWrapper);
MPJLambdaWrapper<SysUser> wrapper = new MPJLambdaWrapper<>(); 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(Firm.class)
.selectAll(FirmPermission.class)
.leftJoin(Firm.class,Firm::getFirmId,SysUser::getFirmId) .leftJoin(Firm.class,Firm::getFirmId,SysUser::getFirmId)
.leftJoin(FirmPermission.class,FirmPermission::getPermissionId,Firm::getPermissionId)
.eq(StringUtils.isNotEmpty(firmListReq.getFirmName()), .eq(StringUtils.isNotEmpty(firmListReq.getFirmName()),
Firm::getFirmName, firmListReq.getFirmName()); Firm::getFirmName, firmListReq.getFirmName());
wrapper.last("LIMIT "+((firmListReq.getPageNum()-1)*firmListReq.getPageSize())+","+firmListReq.getPageSize()); wrapper.last("LIMIT "+((firmListReq.getPageNum()-1)*firmListReq.getPageSize())+","+firmListReq.getPageSize());
List<FirmListResp> firmListResps = firmManageMapper.selectJoinList(FirmListResp.class, wrapper); 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);
}
} }

View File

@ -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;
/**
*
* @Authorweiran
* @Packagecom.muyu.server.service.impl
* @Projectcloud-server-8
* @nameFirmPermissionServiceImpl
* @Date2024/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;
}
}

View File

@ -26,7 +26,7 @@ public class MessageDao {
} }
public void sendMessage(Message message) throws Exception{ 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)"; "VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL)";
try(PreparedStatement pstmt=connection.prepareStatement(sql)){ try(PreparedStatement pstmt=connection.prepareStatement(sql)){
pstmt.setString(1, message.getContent()); pstmt.setString(1, message.getContent());

View File

@ -7,7 +7,7 @@ nacos:
addr: 159.75.188.178:8848 addr: 159.75.188.178:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: xxy namespace: eight
# Spring # Spring
spring: spring:

View File

@ -7,7 +7,7 @@ nacos:
addr: 159.75.188.178:8848 addr: 159.75.188.178:8848
user-name: nacos user-name: nacos
password: nacos password: nacos
namespace: xxy namespace: eight
# Spring # Spring
spring: spring:

View File

@ -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>

View File

@ -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);
}
}

View File

@ -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 {
/**
*
*/
}

View File

@ -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 ;
*/
}

View File

@ -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
* @Packagecom.muyu.warn.domain.car
* @Projectcloud-server-8
* @nameCarMessage
* @Date2024/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 ;
}

View File

@ -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;
}

View File

@ -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
* @Packagecom.muyu.warn.domain.car
* @Projectcloud-server-8
* @nameresp
* @Date2024/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 ;
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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> {
}

View File

@ -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);
}

View File

@ -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> {
}

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}

View File

@ -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李庆帅
// * @Packagecom.muyu.analysis.parsing.MQTT
// * @Projectcloud-server
// * @nameParsingMQTT
// * @Date2024/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();
// }
// }
//
//
//
//
//
//}

View File

@ -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);
}

View File

@ -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;
//
// }
}

View File

@ -1,2 +0,0 @@
Spring Boot Version: ${spring-boot.version}
Spring Application Name: ${spring.application.name}

View File

@ -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>

View File

@ -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>

View File

@ -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