diff --git a/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java b/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java index 0b2f6f5..e4e2615 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java +++ b/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java @@ -7,6 +7,7 @@ import com.muyu.auth.form.RegisterBody; import com.muyu.auth.service.SysFirmService; import com.muyu.auth.service.SysLoginService; import com.muyu.cloud.common.many.datasource.constents.DatasourceContent; +import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.core.domain.Result; import com.muyu.common.core.utils.JwtUtils; import com.muyu.common.core.utils.StringUtils; @@ -14,6 +15,8 @@ import com.muyu.common.security.auth.AuthUtil; import com.muyu.common.security.service.TokenService; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.system.domain.LoginUser; +import com.muyu.common.system.domain.SysUser; +import com.muyu.common.system.remote.RemoteUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.log4j.Log4j2; @@ -32,6 +35,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; +import java.util.Date; /** * token 控制 @@ -51,6 +55,9 @@ public class TokenController { @Autowired private SysFirmService sysFirmService; + @Autowired + private RemoteUserService remoteUserService; + @PostMapping("login") @Operation(summary = "登录", description = "登录") public Result login (@RequestBody LoginBody form) { @@ -120,6 +127,13 @@ public class TokenController { } else { log.warn("数据库 {} 创建成功", settlement.getDatabaseName()); + + SysUser sysUser = new SysUser(); + sysUser.setCreateTime(new Date()); + sysUser.setUserName(settlement.getFirmName()); + sysUser.setDatabaseName(settlement.getDatabaseName()); + remoteUserService.addUser(sysUser, SecurityConstants.INNER); + // 切换到新的数据库连接 Connection connection = null; try { diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml index 57dca73..fdf3847 100644 --- a/cloud-auth/src/main/resources/bootstrap.yml +++ b/cloud-auth/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: four # Spring spring: application: diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java index f823509..5d462ce 100644 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java @@ -36,7 +36,7 @@ public class RabbitMQConsumerUtil { * @param message * @param channel */ - @RabbitListener(queuesToDeclare = @Queue(name = "basic")) +// @RabbitListener(queuesToDeclare = @Queue(name = "basic")) public void rabbitMQBasicConsumer(String data ,Message message , Channel channel) { log.info("当前时间:{} :RabbitMQConsumerUtil : {}", new Date(), message); try { diff --git a/cloud-common/cloud-common-saas/pom.xml b/cloud-common/cloud-common-saas/pom.xml index 6c0d2f6..bb7f692 100644 --- a/cloud-common/cloud-common-saas/pom.xml +++ b/cloud-common/cloud-common-saas/pom.xml @@ -33,9 +33,10 @@ com.muyu cloud-common-security - - - + + com.mysql + mysql-connector-j + diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java index 7245b4d..f1e6ffd 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java @@ -1,36 +1,32 @@ package com.muyu.cloud.common.many.datasource; - import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; import com.muyu.cloud.common.many.datasource.constents.DatasourceContent; import com.muyu.cloud.common.many.datasource.domain.model.DataSourceInfo; import com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory; +import com.muyu.cloud.common.many.datasource.init.InitDataSource; import com.muyu.cloud.common.many.datasource.role.DynamicDataSource; +import com.muyu.cloud.common.saas.domain.Datasource; import com.muyu.cloud.common.saas.domain.model.EntInfo; import com.muyu.cloud.common.saas.exception.SaaSException; import com.muyu.common.core.domain.Result; import com.muyu.common.core.utils.SpringUtils; -import com.muyu.common.system.domain.Datasource; -import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.RemoteSaaSService; -import com.muyu.common.system.remote.RemoteUserService; import lombok.extern.log4j.Log4j2; import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - /** - * 多数据源 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: 多数据源 * @Version: 1.0 @@ -39,9 +35,14 @@ import java.util.Map; @Component @AutoConfiguration(before = {MybatisPlusAutoConfiguration.class, MybatisAutoConfiguration.class}) public class ManyDataSource implements ApplicationRunner{ + + @Autowired + private InitDataSource initDataSource; + + private List dataSourceInfoList(){ RemoteSaaSService remoteSaaSService = SpringUtils.getBean(RemoteSaaSService.class); - Result> tableDataInfoResult = remoteSaaSService.findDatabaseList(); + Result> tableDataInfoResult = initDataSource.initDatasource(); if (tableDataInfoResult==null){ throw new SaaSException("saas远调数据源错误"); } @@ -63,7 +64,6 @@ public class ManyDataSource implements ApplicationRunner{ return null; } } - // private List dataPrimarySourceInfoList(){ // List list = new ArrayList<>(); // list.add( @@ -75,7 +75,6 @@ public class ManyDataSource implements ApplicationRunner{ // ); // return list; // } - @Bean public DynamicDataSource dynamicDataSource(DruidDataSourceFactory druidDataSourceFactory) { // 企业列表 企业CODE,端口,IP @@ -94,7 +93,6 @@ public class ManyDataSource implements ApplicationRunner{ dynamicDataSource.setDefineTargetDataSources(dataSourceMap); return dynamicDataSource; } - @Override public void run(ApplicationArguments args) { DruidDataSourceFactory druidDataSourceFactory = SpringUtils.getBean(DruidDataSourceFactory.class); diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java index bb27584..b69b858 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java @@ -1,8 +1,7 @@ package com.muyu.cloud.common.many.datasource.constents; /** - * 数据源常量 - * @author liuwu + * @author DongZl * @description: 数据源常量 * @Date 2023-8-1 上午 11:02 */ @@ -17,8 +16,4 @@ public class DatasourceContent { public final static String IP = "47.101.53.251"; public final static Integer PORT = 3306; - - public static String getDatasourceUrl(String databaseName) { - return String.format(DATASOURCE_URL,USER_NAME,PASSWORD,IP,PORT, databaseName); - } } diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java index 6406cfc..73cc26e 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java @@ -8,8 +8,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * 数据源实体类 - * @author liuwu + * @author DongZl * @description: 数据源实体类 * @Date 2023-8-1 上午 11:15 */ diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java index 30eee74..7ceb782 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java @@ -8,8 +8,7 @@ import org.springframework.stereotype.Component; import java.sql.SQLException; /** - * Druid工厂 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: Druid工厂 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java index 5cafaa0..e53229a 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java @@ -6,7 +6,7 @@ import org.springframework.util.Assert; /** * 数据源切换处理 * - * @author liuwu + * @author Dongzl */ @Slf4j public class DynamicDataSourceHolder { diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/init/InitDataSource.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/init/InitDataSource.java new file mode 100644 index 0000000..3dc4237 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/init/InitDataSource.java @@ -0,0 +1,58 @@ +package com.muyu.cloud.common.many.datasource.init; + + +import com.muyu.cloud.common.saas.domain.Datasource; +import com.muyu.common.core.domain.Result; +import lombok.extern.log4j.Log4j2; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +@Component +@Log4j2 +public class InitDataSource { + + public static final String USER="root"; + public static final String PASSWORD="Lw030106"; + + @Bean + @Primary + public Result> initDatasource(){ + ArrayList list = new ArrayList<>(); + + try { + DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); + Connection connection= DriverManager.getConnection("jdbc:mysql://47.101.53.251:3306/datasource?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&useSSL=false",USER,PASSWORD); + String sql="select * from `datasource` "; + + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + + while (rs.next()){ + Datasource datasource = new Datasource(); + datasource.setId(rs.getInt("id")); + datasource.setFirmName(rs.getString("firm_name")); + datasource.setDatabaseName(rs.getString("database_name")); + list.add(datasource); + } + + } catch (SQLException e) { + throw new RuntimeException(e); + } + return Result.success(list); + }; + + + + + + + + + + +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java index 042fe95..241ce32 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java @@ -1,8 +1,7 @@ package com.muyu.cloud.common.saas.contents; /** - * SAAS常量 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: SAAS常量 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java index db7e230..5c1985a 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java @@ -6,7 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author: liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: 企业信息 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java index 60e5054..b2b4cc7 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java @@ -4,8 +4,7 @@ package com.muyu.cloud.common.saas.exception; import com.muyu.common.core.exception.ServiceException; /** - * SaaS异常类 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: SaaS异常类 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java index 997fe6b..d4d87b6 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java @@ -1,10 +1,9 @@ package com.muyu.cloud.common.saas.interceptor; -import com.alibaba.fastjson2.JSONObject; -import com.muyu.cloud.common.saas.contents.SaaSConstant; import com.muyu.cloud.common.many.datasource.holder.DynamicDataSourceHolder; -import com.muyu.cloud.common.saas.exception.SaaSException; import com.muyu.cloud.common.many.datasource.role.DynamicDataSource; +import com.muyu.cloud.common.saas.contents.SaaSConstant; +import com.muyu.cloud.common.saas.exception.SaaSException; import com.muyu.common.core.utils.ServletUtils; import com.muyu.common.core.utils.SpringUtils; import jakarta.servlet.http.HttpServletRequest; @@ -14,8 +13,7 @@ import org.springframework.web.servlet.AsyncHandlerInterceptor; /** - * SAAS拦截器 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: SAAS拦截器 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..4076e9f --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,4 @@ +com.muyu.cloud.common.saas.interceptor.WebMvcSaaSConfig +com.muyu.cloud.common.many.datasource.ManyDataSource +com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory +com.muyu.cloud.common.many.datasource.init.InitDataSource diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java index 1154a72..d3cd939 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java @@ -8,6 +8,7 @@ import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; import com.muyu.common.system.domain.LoginUser; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -52,4 +53,12 @@ public interface RemoteUserService { */ @PostMapping("/user/enterprise") ResultsettlementEnterpriseInfo(@RequestBody Business enterprise, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 用户添加 + * @param sysUser + * @return + */ + @PostMapping("/user/addUser") + public Result addUser(@RequestBody SysUser sysUser,@RequestHeader(SecurityConstants.FROM_SOURCE)String source); } diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java index f725a4c..c9045dd 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java @@ -45,6 +45,12 @@ public class RemoteUserFallbackFactory implements FallbackFactory addUser(SysUser sysUser, String source) { + return Result.error("用户添加失败"); + } + + }; } } diff --git a/cloud-modules/cloud-event/pom.xml b/cloud-modules/cloud-event/pom.xml index d9321b3..363a82f 100644 --- a/cloud-modules/cloud-event/pom.xml +++ b/cloud-modules/cloud-event/pom.xml @@ -114,6 +114,18 @@ com.muyu cloud-common-rabbit + + com.muyu.common + saas-common + 3.6.3 + compile + + + com.muyu + saas-cache + 3.6.3 + compile + com.muyu diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java index b5bac67..89babbf 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java @@ -55,7 +55,6 @@ public class MqConsumer { /** * -----------------------------------以下为异步业务操作---------------------------- */ - List carList = sysCarCacheService.get("carList"); /** diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java index bfbfd04..95e33bd 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java @@ -29,6 +29,9 @@ public class AddDatabaseListener implements EventListener { values.add((String) value); }); + + + } @Override diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/IncidentService.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/IncidentService.java new file mode 100644 index 0000000..4f60079 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/IncidentService.java @@ -0,0 +1,16 @@ +package com.muyu.event.service; + +import com.alibaba.fastjson2.JSONObject; + +/** + * @author liuxinyue + * @Package:com.muyu.event.service + * @name:IncidentService + * @Date:2024/10/9 15:02 + */ +public interface IncidentService { + + void warnEventProcess(JSONObject jsonObject) throws Exception; + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/IncidentServiceImpl.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/IncidentServiceImpl.java new file mode 100644 index 0000000..fb90eb9 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/IncidentServiceImpl.java @@ -0,0 +1,160 @@ +package com.muyu.event.service.impl; +import com.alibaba.fastjson2.JSONObject; +import com.muyu.cache.MessageTemplateTypeCacheService; +import com.muyu.cache.SysCarCacheService; +import com.muyu.cache.WarnRuleCacheService; +import com.muyu.cache.WarnStrategyCacheService; +import com.muyu.common.domain.MessageTemplateType; +import com.muyu.common.domain.SysCar; +import com.muyu.common.domain.resp.SysCarVo; +import com.muyu.common.domain.resp.WarnRuleResp; +import com.muyu.common.domain.resp.WarnStrategyResp; +import com.muyu.event.consumer.MessageConsumer; +import com.muyu.event.service.IncidentService; +import lombok.extern.log4j.Log4j2; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.ConsumerRecords; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; +/** + * @author liuxinyue + * @Package:com.muyu.event.service.impl + * @name:IncidentServiceImpl + * @Date:2024/10/9 15:02 + */ +@Log4j2 +@Service +public class IncidentServiceImpl implements IncidentService { + private static int DURATION_SECONDS = 5; + private static List receivedStrings = new ArrayList<>(); + private static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private static int elapsedSeconds = 0; + private static String file="elapsed"; + private static List messageTemplateTypes=null; + private static Long msgTypeId=null; + //滑窗时间 + private static Long slideTime=null; + //增长率 + private static Long slideFrequency=null; + //预警策略 + @Resource + private WarnStrategyCacheService warnStrategyCacheService; + //车辆 + @Resource + private SysCarCacheService sysCarCacheService; + //预警规则 + @Resource + private WarnRuleCacheService warnRuleCacheService; + //报文模版 + @Resource + private MessageTemplateTypeCacheService messageTemplateTypeCacheService; + + private final String topic="four_car"; + + @Autowired + private MessageConsumer messageConsumer; + + @Autowired + public KafkaConsumer consumer; + + @Override + public void warnEventProcess(JSONObject jsonObject) throws Exception { + + receivedStrings.add(jsonObject); + //协议解析:每秒穿过来一个JSONObject jsonObject; 添加进receivedStrings + //根据这个车辆VIN查询出他对应的车辆类型 + String carVin=null; + //报文模版的ID + Integer templateId=null; + for (JSONObject receivedString : receivedStrings) { + carVin = (String) receivedString.get("carVin"); + } + SysCar carByVin = null; + List carVoList = sysCarCacheService.get(sysCarCacheService.keyPre()); + Map carMap = carVoList.stream() + .collect(Collectors.toMap(SysCarVo::getCarVin, Function.identity())); + //获取到了这个车辆的信息 + carByVin = carMap.get(carVin); + //获取到这辆车绑定的报文模版 + templateId=carByVin.getTemplateId(); + //这个是这辆车对应的所有策略 + List carWithWarnStrategyList=null; + List warnStrategyResps = warnStrategyCacheService.get(warnStrategyCacheService.keyPre()); + for (WarnStrategyResp warnStrategyResp : warnStrategyResps) { + if(warnStrategyResp.getCarTypeId()==carByVin.getCarTypeId()){ + carWithWarnStrategyList.add(warnStrategyResp); + } + } + //该车对应的所有预警规则 + List warnRuleResp=null; + List warnRuleResps = warnRuleCacheService.get(warnRuleCacheService.keyPre()); + for (WarnStrategyResp warnStrategyResp : carWithWarnStrategyList) { + for (WarnRuleResp ruleResp : warnRuleResps) { + if(warnStrategyResp.getId().equals(ruleResp.getStrategyId())){ + warnRuleResp.add(ruleResp); + } + } + } + //报文模版 + messageTemplateTypes = messageTemplateTypeCacheService.get(messageTemplateTypeCacheService.keyPre()); + for (WarnRuleResp ruleResp : warnRuleResp) { + //每一个规则他绑定了报文模版里面对应的一个配置 比如:电池,或者车速 + msgTypeId = ruleResp.getMsgTypeId(); + //将规则中对应的滑窗时间赋值为DURATION_SECONDS + DURATION_SECONDS = Math.toIntExact(ruleResp.getSlideTime()); + slideFrequency = ruleResp.getSlideFrequency(); + } + // 定义一个任务,每秒执行一次 + Runnable task = new Runnable() { + @Override + public void run() { + // 清理超过的数据 + cleanUpOldStrings(); + // 检查超速条件 + checkForSpeeding(); + } + }; + // 每隔1秒执行一次任务 + scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); + } + // 清理超过60秒的数据 + private static void cleanUpOldStrings() { + long currentTime = System.currentTimeMillis(); + receivedStrings.removeIf(jsonObject -> + currentTime - jsonObject.getLong("time") > TimeUnit.SECONDS.toMillis(DURATION_SECONDS) + ); + } + // 检查是否有超速情况 + private static void checkForSpeeding() { + if (receivedStrings.size() < 2) return; // 如果数据不足,直接返回 + for (int i = 0; i < receivedStrings.size(); i++) { + JSONObject current = receivedStrings.get(i); + JSONObject next = receivedStrings.get(i + 1); + for (MessageTemplateType messageTemplateType : messageTemplateTypes) { + if(messageTemplateType.getMessageTemplateTypeId().equals(msgTypeId)){ + Short currentElapsed = current.getShort(messageTemplateType.getMessageField()); + Short nextElapsed = next.getShort(messageTemplateType.getMessageField()); + if (nextElapsed > currentElapsed + slideFrequency) { + log.info("出错啦,出错啦,您的"+messageTemplateType.getMessageField()+"不正常,请检查!!!"); + } + } + } + } + } + + + +} diff --git a/cloud-modules/cloud-event/src/main/resources/bootstrap.yml b/cloud-modules/cloud-event/src/main/resources/bootstrap.yml index 1bc0fa4..a3e909a 100644 --- a/cloud-modules/cloud-event/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-event/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: lxy # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: diff --git a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml index 3a1eb6a..0b5c562 100644 --- a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: lxy # Spring spring: diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml index c5e8cb9..a70108e 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: lxy # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java index f8ef4d5..13bce5c 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java @@ -302,4 +302,11 @@ public class SysUserController extends BaseController { public Result deptTree (SysDept dept) { return success(deptService.selectDeptTreeList(dept)); } + + + @PostMapping("/addUser") + public Result addUser(@RequestBody SysUser sysUser){ + Integer i = userService.addUser(sysUser); + return Result.success(i); + } } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java index 3dc6b0b..4015eff 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -158,5 +158,8 @@ public interface SysUserMapper extends BaseMapper { List selectCompanyList(); + Integer addUser(SysUser sysUser); + + } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java index 7dc514c..6ac720a 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java @@ -230,5 +230,6 @@ public interface SysUserService extends IService { List selectCompanyList(); + Integer addUser(SysUser sysUser); } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index bc4162a..7c46437 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -518,4 +518,9 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.selectCompanyList(); } + @Override + public Integer addUser(SysUser sysUser) { + return userMapper.addUser(sysUser); + } + } diff --git a/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml b/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml index 6023ef5..95edafd 100644 --- a/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -24,6 +24,7 @@ + @@ -204,6 +205,7 @@ status, create_by, remark, + database_name, create_time )values( #{userId}, @@ -218,6 +220,7 @@ #{status}, #{createBy}, #{remark}, + #{databaseName} sysdate() ) @@ -228,6 +231,11 @@ INSERT INTO `saas`.`tb_enterprise` (`enterprise_id`, `enterprise_name`, `enterprise_car_count`, `enterprise_fence_count`, `enterprise_database_name`) VALUES (NULL, #{firmName}, 0, 0, #{databaseName}); + + INSERT INTO `four`.`sys_user` + (`dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`, `database_name`) + VALUES ( 105, #{userName}, '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '47.101.53.251', '2024-05-23 15:08:18', 'admin', #{createTime}, '', NULL, '测试员', #{databaseName}); + update sys_user diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java index 48bb64c..9eb42bd 100644 --- a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java @@ -30,9 +30,7 @@ import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; - /** - * * @author liuxinyue * @Package:com.muyu.mqtt.configure * @Project:cloud-server @@ -60,7 +58,6 @@ public class MqttConfigure { @PostConstruct public void MQTTMonitoring(){ - String topic = "car"; int qos = 2; String broker = "tcp://47.101.53.251:1883"; @@ -107,7 +104,6 @@ public class MqttConfigure { me.printStackTrace(); } } - public JSONObject messageParsing(String templateMessage) { //给一个JSON对象 JSONObject jsonObject = new JSONObject(); @@ -115,7 +111,8 @@ public class MqttConfigure { if (templateMessage.length() < 18) { throw new RuntimeException("The vehicle message is incorrect"); } - //将报文进行切割 + //将 templateMessage 按空格切割成多个字符串,得到一个字符串数组 hexArray。接着, + // 将每个十六进制字符串转换成十进制整数,然后再转换为字符,最后将所有字符拼接成一个完整的字符串 result。 String[] hexArray = templateMessage.split(" "); StringBuilder result = new StringBuilder(); for (String hex : hexArray) { diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/controller/TemplateController.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/controller/TemplateController.java deleted file mode 100644 index 1e55cda..0000000 --- a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/controller/TemplateController.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.muyu.template.controller; - -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import lombok.extern.log4j.Log4j2; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author liuxinyue - * @Package:com.muyu.template.controller - * @name:TemplateController - * @Date:2024/10/7 10:28 - */ -@RestController -@RequestMapping("/template") -@AllArgsConstructor -@Tag(name = "协议解析管理",description = "协议解析管理") -@Log4j2 -public class TemplateController { -} diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java index e7d8821..753bc2e 100644 --- a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java @@ -1,203 +1,135 @@ package com.muyu.template; import cn.hutool.json.JSONObject; -import com.alibaba.fastjson2.JSON; -import com.muyu.common.domain.*; -import com.muyu.common.redis.service.RedisService; +import com.muyu.cache.MessageTemplateTypeCacheService; +import com.muyu.cache.SysCarCacheService; +import com.muyu.cache.WarnRuleCacheService; +import com.muyu.cache.WarnStrategyCacheService; +import com.muyu.common.domain.MessageTemplateType; +import com.muyu.common.domain.SysCar; +import com.muyu.common.domain.resp.SysCarVo; +import com.muyu.common.domain.resp.WarnRuleResp; +import com.muyu.common.domain.resp.WarnStrategyResp; import lombok.extern.log4j.Log4j2; -import org.springframework.data.redis.core.RedisTemplate; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author liuxinyue * @Package:com.muyu.template - * @name:test - * @Date:2024/10/4 9:42 + * @name:test2 + * @Date:2024/10/6 10:34 */ @Log4j2 public class test { - - private static int DURATION_SECONDS = 60; + private static int DURATION_SECONDS = 5; private static List receivedStrings = new ArrayList<>(); - private static int elapsedSeconds = 0; private static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private static int elapsedSeconds = 0; private static String file="elapsed"; + private static List messageTemplateTypes=null; + private static Long msgTypeId=null; + //滑窗时间 + private static Long slideTime=null; + //增长率 + private static Long slideFrequency=null; + //预警策略 @Resource - private RedisTemplate redisTemplate; - + private WarnStrategyCacheService warnStrategyCacheService; + //车辆 @Resource - private RedisService redisService; + private SysCarCacheService sysCarCacheService; + //预警规则 + @Resource + private WarnRuleCacheService warnRuleCacheService; + //报文模版 + @Resource + private MessageTemplateTypeCacheService messageTemplateTypeCacheService; public void main(String[] args) { - String message="7E 36 33 59 43 5a 44 59 36 33 33 36 43 38 48 34 43 41 31 37 32 37 36 36 38 35 39 37 37 38 39 31 32 31 2e 34 37 34 30 30 30 30 33 31 2e 32 33 30 30 30 31 30 31 38 2e 30 30 30 31 38 38 31 2e 37 39 30 30 30 30 35 36 31 30 30 30 33 31 30 30 30 36 38 39 39 30 30 30 30 30 50 31 30 39 30 39 2e 35 30 30 32 34 30 30 30 30 31 33 32 36 35 37 33 39 30 36 37 30 30 30 30 32 31 31 30 30 31 33 32 35 30 30 30 30 36 37 30 30 30 2e 32 32 30 30 30 30 37 35 30 30 30 30 31 33 31 30 30 30 30 35 37 30 30 30 30 33 30 30 30 34 30 30 30 37 39 30 30 30 30 32 30 30 30 30 30 31 37 30 30 30 30 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 55 7E"; - //车类型 - Long carTypeId=null; - //查找车对应的类型 - List carList = redisService.getCacheList("car"); - for (SysCar sysCar : carList) { - if(sysCar.getCarVin().equals("1HGCM82633A123456")){ - //获取到车的类型ID - carTypeId = sysCar.getCarTypeId(); + //协议解析:每秒穿过来一个JSONObject jsonObject; 添加进receivedStrings + //根据这个车辆VIN查询出他对应的车辆类型 + String carVin=null; + //报文模版的ID + Integer templateId=null; + for (JSONObject receivedString : receivedStrings) { + carVin = receivedString.getStr("carVin"); + } + SysCar carByVin = null; + List carVoList = sysCarCacheService.get(sysCarCacheService.keyPre()); + Map carMap = carVoList.stream() + .collect(Collectors.toMap(SysCarVo::getCarVin, Function.identity())); + //获取到了这个车辆的信息 + carByVin = carMap.get(carVin); + //获取到这辆车绑定的报文模版 + templateId=carByVin.getTemplateId(); + //这个是这辆车对应的所有策略 + List carWithWarnStrategyList=null; + List warnStrategyResps = warnStrategyCacheService.get(warnStrategyCacheService.keyPre()); + for (WarnStrategyResp warnStrategyResp : warnStrategyResps) { + if(warnStrategyResp.getCarTypeId()==carByVin.getCarTypeId()){ + carWithWarnStrategyList.add(warnStrategyResp); } } - - //查找车类型对应的策略 - List warnStrategyList = null; - //该车绑定的报文模版 - Long templateId=null; - //获取到车的类型之后 查找对应的策略 - List warnStrategy = redisService.getCacheList("warnStrategy"); - for (WarnStrategy strategy : warnStrategy) { - if(strategy.getCarTypeId().equals(carTypeId)){ - templateId=strategy.getTemplateId(); - warnStrategyList.add(strategy); - } - } - - //报文模版 根据templateId取出对应的模版 - List templateTypeList1=null; - List templateTypeList = redisService.getCacheList("templateTypeList"); - for (MessageTemplateType messageTemplateType : templateTypeList) { - if(messageTemplateType.getTemplateId().equals(templateId)){ - templateTypeList1.add(messageTemplateType); - } - } - - //获取策略对应的规则列表 - List warnRule = redisService.getCacheList("warnRule"); - //车辆对应的规则 - List warnRuleList = null; - for (WarnRule rule : warnRule) { - for (WarnStrategy strategy : warnStrategyList) { - if(rule.getStrategyId()==strategy.getId()){ - warnRuleList.add(rule); + //该车对应的所有预警规则 + List warnRuleResp=null; + List warnRuleResps = warnRuleCacheService.get(warnRuleCacheService.keyPre()); + for (WarnStrategyResp warnStrategyResp : carWithWarnStrategyList) { + for (WarnRuleResp ruleResp : warnRuleResps) { + if(warnStrategyResp.getId().equals(ruleResp.getStrategyId())){ + warnRuleResp.add(ruleResp); } } } - - String templateIds=null; - for (WarnRule rule : warnRuleList) { - //滑窗时间 - Long slideTime = rule.getSlideTime(); - if(slideTime!=null){ - DURATION_SECONDS= Math.toIntExact(slideTime); - } - templateIds+=","+rule.getMsgTypeId(); + //报文模版 + messageTemplateTypes = messageTemplateTypeCacheService.get(messageTemplateTypeCacheService.keyPre()); + for (WarnRuleResp ruleResp : warnRuleResp) { + //每一个规则他绑定了报文模版里面对应的一个配置 比如:电池,或者车速 + msgTypeId = ruleResp.getMsgTypeId(); + //将规则中对应的滑窗时间赋值为DURATION_SECONDS + DURATION_SECONDS = Math.toIntExact(ruleResp.getSlideTime()); + slideFrequency = ruleResp.getSlideFrequency(); } - - String[] templateIdSplit = templateIds.split(","); - //最终获取到的报文模版 使用他进行比较 - List messageTemplateTypes=null; - for (String s : templateIdSplit) { - for (MessageTemplateType messageTemplateType : templateTypeList1) { - if(s.equals(messageTemplateType.getTemplateId())){ - messageTemplateTypes.add(messageTemplateType); - } + // 定义一个任务,每秒执行一次 + Runnable task = new Runnable() { + @Override + public void run() { + // 清理超过的数据 + cleanUpOldStrings(); + // 检查超速条件 + checkForSpeeding(); } - } - - JSONObject entries = messageParsing(message); - //将解析后的数据添加到List receivedStrings中 - receivedStrings.add(entries); - cleanUpOldStrings(); - checkForSpeeding(); + }; + // 每隔1秒执行一次任务 + scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); } - - - // 清理超过指定秒数内的数据 + // 清理超过60秒的数据 private static void cleanUpOldStrings() { long currentTime = System.currentTimeMillis(); receivedStrings.removeIf(jsonObject -> currentTime - jsonObject.getLong("time") > TimeUnit.SECONDS.toMillis(DURATION_SECONDS) ); } - // 检查是否有超速情况 private static void checkForSpeeding() { if (receivedStrings.size() < 2) return; // 如果数据不足,直接返回 - for (int i = 0; i < receivedStrings.size() - 1; i++) { - JSONObject current = receivedStrings.get(i); - JSONObject next = receivedStrings.get(i + 1); - Short currentElapsed = current.getShort(file); - Short nextElapsed = next.getShort(file); - // 检查条件,如果相差大于12,则记录错误 - if (nextElapsed > currentElapsed + 12) { - System.out.println("出错啦,出错啦,车子超速啦!!!"); - } - } - } - - - - //解析报文的方法 - public JSONObject messageParsing(String templateMessage) { - //给一个JSON对象 - JSONObject jsonObject = new JSONObject(); - //先截取出VIN码 然后根据VIN码查询这个车属于什么类型 - if (templateMessage.length() < 18) { - throw new RuntimeException("The vehicle message is incorrect"); - } - //将报文进行切割 - String[] hexArray = templateMessage.split(" "); - StringBuilder result = new StringBuilder(); - for (String hex : hexArray) { - int decimal = Integer.parseInt(hex, 16); - result.append((char) decimal); - } - //取出VIN码 - String carVin = result.substring(0, 18 - 1); - log.info("carVin码为:" + carVin); - //根据VIN码获取车辆信息 - SysCar carByVin = null; - List carList = redisService.getCacheList("carList"); - for (SysCar sysCar : carList) { - if(sysCar.getCarVin().equals(carVin)){ - carByVin=sysCar; - } - } - log.info("车辆信息为:" + carByVin); - //对应车辆所对应的报文模版 - Integer templateId = carByVin.getTemplateId(); - List templateTypeList; - //key - String redisKey = "messageTemplateType" + templateId; - //key存在 - if (redisTemplate.hasKey(redisKey)) { - - List list = redisTemplate.opsForList().range(redisKey, 0, -1); - - templateTypeList = list.stream().map(o -> JSON.parseObject(o.toString(), MessageTemplateType.class)) - .toList(); - } else { - List templateTypeList1=null; - List templateTypeList2 = redisService.getCacheList("templateTypeList"); - for (MessageTemplateType messageTemplateType : templateTypeList2) { - if(messageTemplateType.getTemplateId()==templateId){ - templateTypeList1.add(messageTemplateType); + for (int i = 0; i < receivedStrings.size(); i++) { + JSONObject current = receivedStrings.get(i); + JSONObject next = receivedStrings.get(i + 1); + for (MessageTemplateType messageTemplateType : messageTemplateTypes) { + if(messageTemplateType.getMessageTemplateTypeId().equals(msgTypeId)){ + Short currentElapsed = current.getShort(messageTemplateType.getMessageField()); + Short nextElapsed = next.getShort(messageTemplateType.getMessageField()); + if (nextElapsed > currentElapsed + slideFrequency) { + log.info("出错啦,出错啦,您的"+messageTemplateType.getMessageField()+"不正常,请检查!!!"); + } } } - templateTypeList = templateTypeList1; - templateTypeList.forEach( - templateType -> - redisTemplate.opsForList().rightPush( - redisKey, JSON.toJSONString(templateType) - ) - ); } - //将模版里面有的配置进行循环 - for (MessageTemplateType messageTemplateType : templateTypeList) { - //开始位置 - Integer startIndex = messageTemplateType.getStartIndex() - 1; - //结束位置 - Integer endIndex = messageTemplateType.getEndIndex(); - //将每个解析后的字段都存入到JSON对象中 - jsonObject.put(messageTemplateType.getMessageField(),result.substring(startIndex, endIndex)); - } - log.info("解析后的报文是:" + jsonObject); - - return jsonObject; } } diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test2.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test2.java deleted file mode 100644 index 32f1447..0000000 --- a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test2.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.muyu.template; -import com.alibaba.fastjson.JSONObject; -import lombok.extern.log4j.Log4j2; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -/** - * @author liuxinyue - * @Package:com.muyu.template - * @name:test2 - * @Date:2024/10/6 10:34 - */ -@Log4j2 -public class test2 { - - private static final int DURATION_SECONDS = 5; - private static List receivedStrings = new ArrayList<>(); - private static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - private static int elapsedSeconds = 0; - private static String file="elapsed"; - - public static void main(String[] args) { - // 定义一个任务,每秒执行一次 - Runnable task = new Runnable() { - @Override - public void run() { - JSONObject stringFromSource = getStringFromSource(); // 模拟获取字符串 - receivedStrings.add(stringFromSource); - System.out.println("Received: " + stringFromSource); - // 清理超过的数据 - cleanUpOldStrings(); - // 检查超速条件 - checkForSpeeding(); - } - }; - // 每隔1秒执行一次任务 - scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); - } - - - // 模拟从某个源获取字符串的方法 - private static JSONObject getStringFromSource() { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("message", "Hello World"); - jsonObject.put("time", System.currentTimeMillis()); - jsonObject.put("elapsed", elapsedSeconds); - return jsonObject; - } - - - // 清理超过60秒的数据 - private static void cleanUpOldStrings() { - long currentTime = System.currentTimeMillis(); - receivedStrings.removeIf(jsonObject -> - currentTime - jsonObject.getLong("time") > TimeUnit.SECONDS.toMillis(DURATION_SECONDS) - ); - } - - // 检查是否有超速情况 - private static void checkForSpeeding() { - if (receivedStrings.size() < 2) return; // 如果数据不足,直接返回 - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("message", "Hello World"); - jsonObject.put("time", System.currentTimeMillis()); - jsonObject.put("elapsed", 100); - - for (int i = 0; i < receivedStrings.size() - 1; i++) { - JSONObject current = receivedStrings.get(i); - JSONObject next = receivedStrings.get(i + 1); - - Short currentElapsed = current.getShort(file); - Short nextElapsed = next.getShort(file); - receivedStrings.add(jsonObject); - // 检查条件,如果相差大于12,则记录错误 - if (nextElapsed > currentElapsed + 12) { - System.out.println("出错啦,出错啦,车子超速啦!!!"); - } - } - } - - -} diff --git a/cloud-modules/cloud-modules-template/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-template/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..1ff0cd8 --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/resources/bootstrap.yml @@ -0,0 +1,62 @@ +# Tomcat +server: + port: 15277 + +# nacos线上地址 +nacos: + addr: 47.101.53.251:8848 + user-name: nacos + password: nacos + namespace: lxy +# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all +# Spring +spring: + mvc: + pathmatch: + matching-strategy: ant_path_matcher + amqp: + deserialization: + trust: + all: true + main: + allow-bean-definition-overriding: true + application: + # 应用名称 + name: cloud-template + 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} + +logging: + level: + com.muyu.system.mapper: DEBUG diff --git a/cloud-modules/saas/pom.xml b/cloud-modules/saas/pom.xml index 7e02284..ec2653a 100644 --- a/cloud-modules/saas/pom.xml +++ b/cloud-modules/saas/pom.xml @@ -52,6 +52,13 @@ kafka-clients + + + + + + + diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java index 3c2cd95..87cbb7f 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java @@ -30,7 +30,7 @@ public class MessageTemplateType implements Serializable { * 主键 */ @TableId(value = "message_template_type_id",type = IdType.AUTO) - private String messageTemplateTypeId; + private Long messageTemplateTypeId; /** * 报文类别 */ diff --git a/cloud-modules/saas/saas-server/pom.xml b/cloud-modules/saas/saas-server/pom.xml index 4286b11..1546f6d 100644 --- a/cloud-modules/saas/saas-server/pom.xml +++ b/cloud-modules/saas/saas-server/pom.xml @@ -106,6 +106,7 @@ com.muyu cloud-common-xxl + org.apache.iotdb service-rpc diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java index 7186808..4232b74 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java @@ -1,9 +1,14 @@ 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.EnableCustomConfig; import com.muyu.common.security.annotation.EnableMyFeignClients; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + /** * saas模块启动类 * @author YuPing @@ -11,7 +16,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @Version 1.0 * @Data 2024-09-28 17:34:31 */ -@SpringBootApplication +@SpringBootApplication(exclude = { + DataSourceAutoConfiguration.class, + DruidDataSourceAutoConfigure.class, + DynamicDataSourceAutoConfiguration.class +}) +@EnableCustomConfig @EnableMyFeignClients public class SaasApplication { public static void main(String[] args) { diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java index 6311e4c..6bdfd55 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java @@ -21,8 +21,6 @@ import java.util.List; * @Date 2024/9/29 12:06 */ - - @RestController @RequestMapping("/carType") @AllArgsConstructor diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java index fbe366d..8b315dc 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java @@ -6,6 +6,7 @@ import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.Enterprise; import com.muyu.common.system.domain.Business; +import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.util.PageUtils; import com.muyu.server.controller.form.DeleteEnterpriseByIds; @@ -27,6 +28,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; +import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -95,8 +97,14 @@ public class EnterpriseController { business.setDatabaseName(form.getEnterpriseDatabaseName()); remoteUserService.settlementEnterpriseInfo(business, SecurityConstants.INNER); + SysUser sysUser = new SysUser(); + sysUser.setDatabaseName(form.getEnterpriseDatabaseName()); + sysUser.setUserName(form.getEnterpriseName()); + sysUser.setCreateTime(new Date()); + remoteUserService.addUser(sysUser, SecurityConstants.INNER); String createDatabaseUrl="jdbc:mysql://"+ DatasourceContent.IP+":"+DatasourceContent.PORT+"?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; String createDatabaseSql = "CREATE DATABASE IF NOT EXISTS " + form.getEnterpriseDatabaseName() + ";"; + try (Connection adminConn = DriverManager.getConnection(createDatabaseUrl, DatasourceContent.USER_NAME, DatasourceContent.PASSWORD); Statement stmt = adminConn.createStatement()) { @@ -122,6 +130,8 @@ public class EnterpriseController { ClassPathResource rc = new ClassPathResource("static/saas.sql"); EncodedResource er = new EncodedResource(rc, "utf-8"); ScriptUtils.executeSqlScript(connection, er); + + } } catch (SQLException e) { diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java index 4b4d6c9..30228b0 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java @@ -17,7 +17,8 @@ import java.util.List; import java.util.concurrent.ExecutionException; /** - * @Author:liuxinyue + * 报文模版管理 + * @author liuxinyue * @Package:com.template.controller * @Project:cloud-server-c * @name:TemplateController diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/service/impl/CarTypeServiceImpl.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/service/impl/CarTypeServiceImpl.java index 5e6cd80..e1a584c 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/service/impl/CarTypeServiceImpl.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/service/impl/CarTypeServiceImpl.java @@ -10,6 +10,7 @@ import com.muyu.server.service.CarTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.List; /** diff --git a/cloud-modules/saas/saas-server/src/main/resources/bootstrap.yml b/cloud-modules/saas/saas-server/src/main/resources/bootstrap.yml index 7ce8b80..02b5edc 100644 --- a/cloud-modules/saas/saas-server/src/main/resources/bootstrap.yml +++ b/cloud-modules/saas/saas-server/src/main/resources/bootstrap.yml @@ -11,76 +11,6 @@ nacos: # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: - kafka: - producer: - # Kafka服务器 - bootstrap-servers: 150.158.33.234:9092 - # 开启事务,必须在开启了事务的方法中发送,否则报错 - transaction-id-prefix: kafkaTx- - # 发生错误后,消息重发的次数,开启事务必须设置大于0。 - retries: 3 - # acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。 - # acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。 - # acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。 - acks: all - # 开启事务时,必须设置为all - # 当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。 - batch-size: 16384 - # 生产者内存缓冲区的大小。 - buffer-memory: 1024000 - # 键的序列化方式 - key-serializer: org.apache.kafka.common.serialization.StringSerializer - # 值的序列化方式(建议使用Json,这种序列化方式可以无需额外配置传输实体类) - value-serializer: org.apache.kafka.common.serialization.StringSerializer - consumer: - # Kafka服务器 - group-id: my-kafka - # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D - #auto-commit-interval: 2s - # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理: - # earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费分区的记录 - # latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据(在消费者启动之后生成的记录) - # none:当各分区都存在已提交的offset时,从提交的offset开始消费;只要有一个分区不存在已提交的offset,则抛出异常 - auto-offset-reset: latest - # 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量 - enable-auto-commit: true - # 键的反序列化方式 - #key-deserializer: org.apache.kafka.common.serialization.StringDeserializer - key-deserializer: org.apache.kafka.common.serialization.StringSerializer - # 值的反序列化方式(建议使用Json,这种序列化方式可以无需额外配置传输实体类) - value-deserializer: org.apache.kafka.common.serialization.StringSerializer - # 这个参数定义了poll方法最多可以拉取多少条消息,默认值为500。如果在拉取消息的时候新消息不足500条,那有多少返回多少;如果超过500条,每次只返回500。 - # 这个默认值在有些场景下太大,有些场景很难保证能够在5min内处理完500条消息, - # 如果消费者无法在5分钟内处理完500条消息的话就会触发reBalance, - # 然后这批消息会被分配到另一个消费者中,还是会处理不完,这样这批消息就永远也处理不完。 - # 要避免出现上述问题,提前评估好处理一条消息最长需要多少时间,然后覆盖默认的max.poll.records参数 - # 注:需要开启BatchListener批量监听才会生效,如果不开启BatchListener则不会出现reBalance情况 - max-poll-records: 500 - bootstrap-servers: 150.158.33.234:9092 - auto-commit-interval: 5000 - fetch-max-wait: 500 - fetch-min-size: 1 - heartbeat-interval: 3000 - properties: - # 两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance - max: - poll: - interval: - ms: 600000 - # 当broker多久没有收到consumer的心跳请求后就触发reBalance,默认值是10s - session: - timeout: - ms: 10000 - listener: - # 在侦听器容器中运行的线程数,一般设置为 机器数*分区数 - concurrency: 4 - # 自动提交关闭,需要设置手动消息确认 - ack-mode: manual_immediate - # 消费监听接口监听的主题不存在时,默认会报错,所以设置为false忽略错误 - missing-topics-fatal: false - # 两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance - poll-timeout: 600000 - mvc: pathmatch: matching-strategy: ant_path_matcher diff --git a/cloud-modules/saas/saas-server/src/main/resources/mapper/EnterpriseMapper.xml b/cloud-modules/saas/saas-server/src/main/resources/mapper/EnterpriseMapper.xml index cc25010..aa32d53 100644 --- a/cloud-modules/saas/saas-server/src/main/resources/mapper/EnterpriseMapper.xml +++ b/cloud-modules/saas/saas-server/src/main/resources/mapper/EnterpriseMapper.xml @@ -31,15 +31,14 @@ insert into tb_enterprise set enterprise_name = #{enterpriseName}, enterprise_car_count = #{enterpriseCarCount}, - enterprise_fence_count = #{enterpriseFenceCount}, - enterprise_database_name=#{enterpriseDatabaseName} + enterprise_fence_count = #{enterpriseFenceCount} @@ -48,8 +47,7 @@ update tb_enterprise set enterprise_name = #{enterpriseName}, enterprise_car_count = #{enterpriseCarCount}, - enterprise_fence_count = #{enterpriseFenceCount}, - enterprise_database_name=#{enterpriseDatabaseName} + enterprise_fence_count = #{enterpriseFenceCount} where enterprise_id = #{enterpriseId} and enterprise_id != 0 diff --git a/cloud-modules/saas/saas-server/src/main/resources/mapper/SysCarMapper.xml b/cloud-modules/saas/saas-server/src/main/resources/mapper/SysCarMapper.xml index 77a3724..792d531 100644 --- a/cloud-modules/saas/saas-server/src/main/resources/mapper/SysCarMapper.xml +++ b/cloud-modules/saas/saas-server/src/main/resources/mapper/SysCarMapper.xml @@ -77,5 +77,7 @@ - + diff --git a/cloud-modules/saas/saas-server/src/main/resources/mapper/TemplateNeedMapper.xml b/cloud-modules/saas/saas-server/src/main/resources/mapper/TemplateNeedMapper.xml new file mode 100644 index 0000000..5ea4090 --- /dev/null +++ b/cloud-modules/saas/saas-server/src/main/resources/mapper/TemplateNeedMapper.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/cloud-modules/saas/saas-server/src/main/resources/mapper/breakdown/SysCarFaultMapper.xml b/cloud-modules/saas/saas-server/src/main/resources/mapper/breakdown/SysCarFaultMapper.xml new file mode 100644 index 0000000..44abe85 --- /dev/null +++ b/cloud-modules/saas/saas-server/src/main/resources/mapper/breakdown/SysCarFaultMapper.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, fault_code, fault_name, type_id, fault_label, fault_bit, fault_value, fault_rank, fault_desc, fault_min_threshold, fault_max_threshold, status, warn_status, remark, create_by, create_time, update_by, update_time,car_type_id from sys_car_fault + + + + + + + + + insert into sys_car_fault + + fault_code, + fault_name, + type_id, + fault_label, + fault_bit, + fault_value, + fault_rank, + fault_desc, + fault_min_threshold, + fault_max_threshold, + status, + warn_status, + remark, + create_by, + create_time, + update_by, + update_time, + car_type_id + + + #{faultCode}, + #{faultName}, + #{typeId}, + #{faultLabel}, + #{faultBit}, + #{faultValue}, + #{faultRank}, + #{faultDesc}, + #{faultMinThreshold}, + #{faultMaxThreshold}, + #{status}, + #{warnStatus}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{catTypeId} + + + + + update sys_car_fault + + fault_code = #{faultCode}, + fault_name = #{faultName}, + type_id = #{typeId}, + fault_label = #{faultLabel}, + fault_bit = #{faultBit}, + fault_value = #{faultValue}, + fault_rank = #{faultRank}, + fault_desc = #{faultDesc}, + fault_min_threshold = #{faultMinThreshold}, + fault_max_threshold = #{faultMaxThreshold}, + status = #{status}, + warn_status = #{warnStatus}, + remark = #{remark}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + car_type_id=#{catTypeId} + + where id = #{id} + + + + delete from sys_car_fault where id = #{id} + + + + delete from sys_car_fault where id in + + #{id} + + + + + update sys_car_fault set warn_status = 0 where id = #{id} + + + update sys_car_fault set warn_status = 1 where id = #{id} + + diff --git a/cloud-modules/saas/saas-server/src/main/resources/mapper/message/DataTypeMapper.xml b/cloud-modules/saas/saas-server/src/main/resources/mapper/message/DataTypeMapper.xml new file mode 100644 index 0000000..52d673c --- /dev/null +++ b/cloud-modules/saas/saas-server/src/main/resources/mapper/message/DataTypeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cloud-modules/saas/saas-server/src/main/resources/mapper/message/MessageTemplateTypeMapper.xml b/cloud-modules/saas/saas-server/src/main/resources/mapper/message/MessageTemplateTypeMapper.xml new file mode 100644 index 0000000..9385d6c --- /dev/null +++ b/cloud-modules/saas/saas-server/src/main/resources/mapper/message/MessageTemplateTypeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cloud-modules/saas/saas-server/src/main/resources/mapper/message/TemplateMapper.xml b/cloud-modules/saas/saas-server/src/main/resources/mapper/message/TemplateMapper.xml new file mode 100644 index 0000000..ec3778a --- /dev/null +++ b/cloud-modules/saas/saas-server/src/main/resources/mapper/message/TemplateMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + +