diff --git a/cloud-auth/pom.xml b/cloud-auth/pom.xml index 0a76aae..c38fc2b 100644 --- a/cloud-auth/pom.xml +++ b/cloud-auth/pom.xml @@ -16,6 +16,13 @@ + + + com.baomidou + mybatis-plus-boot-starter + 3.5.5 + + com.alibaba.cloud @@ -34,6 +41,11 @@ spring-cloud-starter-alibaba-sentinel + + com.muyu + cloud-common-saas + + org.springframework.boot @@ -57,6 +69,19 @@ com.muyu cloud-common-api-doc + + com.mysql + mysql-connector-j + + + + com.muyu + cloud-common-saas + + + cn.hutool + hutool-all + 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 d870762..0b2f6f5 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 @@ -1,8 +1,12 @@ package com.muyu.auth.controller; +import com.muyu.auth.form.EnterpriseSettlement; +import com.muyu.auth.form.Firm; import com.muyu.auth.form.LoginBody; 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.domain.Result; import com.muyu.common.core.utils.JwtUtils; import com.muyu.common.core.utils.StringUtils; @@ -10,7 +14,13 @@ 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 io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.support.EncodedResource; +import org.springframework.jdbc.datasource.init.ScriptUtils; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -18,12 +28,19 @@ import org.springframework.web.bind.annotation.RestController; import jakarta.servlet.http.HttpServletRequest; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + /** * token 控制 * * @author muyu */ +@Log4j2 @RestController +@Tag(name = "auth",description = "auth") public class TokenController { @Autowired private TokenService tokenService; @@ -31,8 +48,17 @@ public class TokenController { @Autowired private SysLoginService sysLoginService; + @Autowired + private SysFirmService sysFirmService; + @PostMapping("login") + @Operation(summary = "登录", description = "登录") public Result login (@RequestBody LoginBody form) { + //查询企业是否存在 + Firm firm = sysFirmService.findFirmByName(form.getFirmName()); + if (firm.getDatabaseName() == null){ + return Result.error(null,"企业不存在"); + } // 用户登录 LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); // 获取登录token @@ -40,6 +66,7 @@ public class TokenController { } @DeleteMapping("logout") + @Operation(summary = "退出", description = "退出") public Result logout (HttpServletRequest request) { String token = SecurityUtils.getToken(request); if (StringUtils.isNotEmpty(token)) { @@ -53,6 +80,7 @@ public class TokenController { } @PostMapping("refresh") + @Operation(summary = "刷新token", description = "刷新token") public Result refresh (HttpServletRequest request) { LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { @@ -64,9 +92,58 @@ public class TokenController { } @PostMapping("register") + @Operation(summary = "注册用户", description = "注册用户") public Result register (@RequestBody RegisterBody registerBody) { // 用户注册 sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); return Result.success(); } + + /** + * 企业入入驻 + * @param settlement + * @return + */ + @PostMapping("/enterprise") + @Operation(summary = "企业入驻", description = "企业入驻") + public Result enterprise( @RequestBody EnterpriseSettlement settlement){ + + 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 " + settlement.getDatabaseName() + ";"; + try (Connection adminConn = DriverManager.getConnection(createDatabaseUrl, DatasourceContent.USER_NAME, DatasourceContent.PASSWORD); + Statement stmt = adminConn.createStatement()) { + + boolean success = stmt.execute(createDatabaseSql); + if (success) { + log.info("数据库 {} 创建失败", settlement.getDatabaseName()); + + } else { + log.warn("数据库 {} 创建成功", settlement.getDatabaseName()); + + // 切换到新的数据库连接 + Connection connection = null; + try { + String url = "jdbc:mysql://47.101.53.251:3306/" + settlement.getDatabaseName() + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; + String user = "root"; + String pwd = "Lw030106"; + String driverClassName = "com.mysql.cj.jdbc.Driver"; + Class.forName(driverClassName); + connection = DriverManager.getConnection(url, user, pwd); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + ClassPathResource rc = new ClassPathResource("static/saas.sql"); + EncodedResource er = new EncodedResource(rc, "utf-8"); + ScriptUtils.executeSqlScript(connection, er); + } + + } catch (SQLException e) { + e.printStackTrace(); + log.error("连接数据库时发生错误或创建数据库失败", e); + } + //企业入驻 + sysLoginService.enterprise(settlement.getDatabaseName(),settlement.getFirmName()); + + return Result.success(); + } } diff --git a/cloud-auth/src/main/java/com/muyu/auth/form/EnterpriseSettlement.java b/cloud-auth/src/main/java/com/muyu/auth/form/EnterpriseSettlement.java new file mode 100644 index 0000000..5696a6a --- /dev/null +++ b/cloud-auth/src/main/java/com/muyu/auth/form/EnterpriseSettlement.java @@ -0,0 +1,23 @@ +package com.muyu.auth.form; + +import lombok.Data; + +/** + * 企业入驻 + * @author 袁子龙 + * @package com.muyu.auth.form + * @name EnterpriseSettlement + * @date 2024/9/30 11:25 + */ +@Data +public class EnterpriseSettlement { + /** + * 企业名称 + */ + private String firmName; + /** + * 数据库名称 + */ + private String databaseName; + +} diff --git a/cloud-auth/src/main/java/com/muyu/auth/form/Firm.java b/cloud-auth/src/main/java/com/muyu/auth/form/Firm.java new file mode 100644 index 0000000..0ddc387 --- /dev/null +++ b/cloud-auth/src/main/java/com/muyu/auth/form/Firm.java @@ -0,0 +1,28 @@ +package com.muyu.auth.form; + +import lombok.Data; + +/** + * 企业登录对象 + * @author 袁子龙 + * @package com.muyu.auth.form + * @name Enterprise + * @date 2024/9/30 10:30 + */ +@Data +public class Firm { + + /** + * 企业id + */ + private Integer id; + /** + * 企业名称 + */ + private String firmName; + /** + * 数据库名称 + */ + private String databaseName; + +} diff --git a/cloud-auth/src/main/java/com/muyu/auth/form/LoginBody.java b/cloud-auth/src/main/java/com/muyu/auth/form/LoginBody.java index 354122e..7701310 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/form/LoginBody.java +++ b/cloud-auth/src/main/java/com/muyu/auth/form/LoginBody.java @@ -1,10 +1,14 @@ package com.muyu.auth.form; +import lombok.Data; + /** * 用户登录对象 * * @author muyu */ + +@Data public class LoginBody { /** * 用户名 @@ -16,20 +20,11 @@ public class LoginBody { */ private String password; + /** + * 企业名称 + */ + private String firmName; - public String getUsername () { - return username; - } - public void setUsername (String username) { - this.username = username; - } - public String getPassword () { - return password; - } - - public void setPassword (String password) { - this.password = password; - } } diff --git a/cloud-auth/src/main/java/com/muyu/auth/service/SysFirmService.java b/cloud-auth/src/main/java/com/muyu/auth/service/SysFirmService.java new file mode 100644 index 0000000..8ac333c --- /dev/null +++ b/cloud-auth/src/main/java/com/muyu/auth/service/SysFirmService.java @@ -0,0 +1,57 @@ +package com.muyu.auth.service; + +import com.muyu.auth.form.Firm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.data.redis.core.RedisTemplate; + + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +/** + * 数据源 + * @author 袁子龙 + * @package com.muyu.auth.service + * @name SysFirmService + * @date 2024/9/30 11:05 + */ +@Component +public class SysFirmService { + //数据库账号 + static final String USER="root"; + //数据库密码 + static final String PASSWORD="Lw030106"; + + @Autowired + private RedisTemplate redisTemplate; + public Firm findFirmByName(String firmName){ + Firm firm = new Firm(); + 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` where firm_name = '"+firmName+"'"; + + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + + + while (rs.next()){ + firm.setId(rs.getInt("id")); + firm.setFirmName(rs.getString("firm_name")); + firm.setDatabaseName(rs.getString("database_name")); + } + + } catch (Exception e) { + throw new RuntimeException(e); + } + + //数据源不为空 + if (firm!=null){ + redisTemplate.opsForValue().set("datasource",firm.getDatabaseName()); + } + return firm; + }; +} diff --git a/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java b/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java index ff0af1a..665a504 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java +++ b/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java @@ -1,5 +1,6 @@ package com.muyu.auth.service; + import com.muyu.common.core.constant.CacheConstants; import com.muyu.common.core.constant.Constants; import com.muyu.common.core.constant.SecurityConstants; @@ -12,7 +13,10 @@ import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.ip.IpUtils; import com.muyu.common.redis.service.RedisService; import com.muyu.common.security.utils.SecurityUtils; + + import com.muyu.common.system.remote.RemoteUserService; +import com.muyu.common.system.domain.Business; import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.LoginUser; import org.springframework.beans.factory.annotation.Autowired; @@ -124,4 +128,29 @@ public class SysLoginService { } recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功"); } + + /** + * 企业入驻 + * @param databaseName + * @param fileName + */ + public void enterprise (String databaseName,String fileName) { + // 参数校验 数据库名或企业名称不能为空 + if (StringUtils.isAnyBlank(databaseName, fileName)) { + throw new ServiceException("数据库名或企业名称不能为空"); + } + + if (databaseName.length() < UserConstants.PASSWORD_MIN_LENGTH || databaseName.length() > UserConstants.PASSWORD_MAX_LENGTH) { + throw new ServiceException("数据库名长度必须在5到20个字符之间"); + } + if (fileName.length() < UserConstants.Firm_NAME_MIN_LENGTH || fileName.length() > UserConstants.Firm_NAME_MAX_LENGTH) { + throw new ServiceException("企业名称长度必须在2到20个字符之间"); + } + Business settlement = new Business(); + settlement.setDatabaseName(databaseName); + settlement.setFirmName(fileName); + + remoteUserService.settlementEnterpriseInfo(settlement, SecurityConstants.INNER); + + } } diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml index fdf3847..57dca73 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: four + namespace: yzl # Spring spring: application: diff --git a/cloud-auth/src/main/resources/static/saas.sql b/cloud-auth/src/main/resources/static/saas.sql new file mode 100644 index 0000000..ba9d697 --- /dev/null +++ b/cloud-auth/src/main/resources/static/saas.sql @@ -0,0 +1,374 @@ +/* + Navicat Premium Data Transfer + + Source Server : 组 + Source Server Type : MySQL + Source Server Version : 80401 + Source Host : 47.101.53.251:3306 + Source Schema : saas + + Target Server Type : MySQL + Target Server Version : 80401 + File Encoding : 65001 + + Date: 04/10/2024 16:01:07 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for car_type +-- ---------------------------- +DROP TABLE IF EXISTS `car_type`; +CREATE TABLE `car_type` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '车辆类型Id', + `type_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '车辆类型', + `template_id` int NULL DEFAULT NULL COMMENT '报文模版Id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '车辆类型' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for data_type +-- ---------------------------- +DROP TABLE IF EXISTS `data_type`; +CREATE TABLE `data_type` ( + `data_type_id` int NOT NULL AUTO_INCREMENT COMMENT '报文数据类型Id', + `data_type_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '报文数据类型', + PRIMARY KEY (`data_type_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '报文数据类型' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for electronic_fence +-- ---------------------------- +DROP TABLE IF EXISTS `electronic_fence`; +CREATE TABLE `electronic_fence` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '围栏主键', + `name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '围栏名称', + `fence_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '围栏类型(驶入,驶出)', + `longitude_latitude` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '经纬度信息', + `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '电子围栏状态(正常,停用)', + `fence_desc` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '描述信息', + `create_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '电子围栏' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for electronic_fence_group +-- ---------------------------- +DROP TABLE IF EXISTS `electronic_fence_group`; +CREATE TABLE `electronic_fence_group` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '自增主键', + `group_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '围栏组名称', + `group_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '围栏组类型', + `priority` int NULL DEFAULT NULL COMMENT '围栏组优先级(0-99)', + `status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '启用状态', + `create_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '围栏组' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for fence_group_mid +-- ---------------------------- +DROP TABLE IF EXISTS `fence_group_mid`; +CREATE TABLE `fence_group_mid` ( + `id` int NOT NULL AUTO_INCREMENT, + `group_id` int NULL DEFAULT NULL COMMENT '围栏组外键', + `fence_id` int NULL DEFAULT NULL COMMENT '电子围栏外键', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '电子围栏-围栏组(中间表)' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for message_template +-- ---------------------------- +DROP TABLE IF EXISTS `message_template`; +CREATE TABLE `message_template` ( + `message_id` int(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT, + `vin_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'VIN 码', + `time_stamp` datetime NULL DEFAULT NULL COMMENT '时间戳', + `long_itude` double NULL DEFAULT NULL COMMENT '经度', + `latitude` double NULL DEFAULT NULL COMMENT '纬度', + `speed_vehicle` double NULL DEFAULT NULL COMMENT '车速', + `total_mileage` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '总里程', + `total_voltage` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '总电压', + `combined_current` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '总电流', + `insulation_resistance` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '绝缘电阻', + `gear_position` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '档位', + `accelerator_pedal_travel_value` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '加速踏板行程值', + `brake_pedal_travel_value` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '制动踏板行程值', + `specific_fuel_consumption` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '燃料消耗率', + `motor_controller_temperature` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电机控制器温度', + `motor_speed` double NULL DEFAULT NULL COMMENT '电机转速', + `motor_torque` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电机转矩', + `motor_temperature` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电机温度', + `motor_voltage` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电机电压', + `motor_current` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电机电流', + `power_battery_remaining_soc` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '剩余电池电量', + `maximum_feedback_power` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最大反馈功率', + `maximum_discharge_power` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最大放电功率', + `bms_self_check_counter` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'BMS自检计数器', + `power_battery` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '动力电池', + `total_voltage_load_side` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '总电压负载侧', + `maximum_voltage` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最大电压', + `minimum_voltage` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最小电压', + `maximum_temperature` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最高温度', + `minimum_temperature` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最低温度', + `available_capacity` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '可用功率', + `vehicle_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '车辆状态', + `charging_state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '充电状态', + `operational_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '行驶状态', + `soc` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单芯片系统', + `energy_storage_devices` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '能源存储设备', + `drive_motor_condition` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '驱动电机转态', + `whether_works` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '是否有效', + `eas` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电子防窃系统', + `ptc` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '正常温度系数', + `eps` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '蓄电池', + `abs` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '防抱死制动系统', + `mcu` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单片机', + `heating_state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '加热状态', + `power_battery_status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '电源电池状态', + `state_battery_insulation` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态电池绝缘', + `dcdc` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '直流直流变换器', + `chg` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '变化', + `check_digit` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '校验数位', + `cutoff_bit` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '截止点', + PRIMARY KEY (`message_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '报文模版' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for message_template_type +-- ---------------------------- +DROP TABLE IF EXISTS `message_template_type`; +CREATE TABLE `message_template_type` ( + `message_template_type_id` int NOT NULL AUTO_INCREMENT, + `message_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '编码', + `message_field` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '标签', + `start_index` int NULL DEFAULT NULL COMMENT '起始位', + `end_index` int NULL DEFAULT NULL COMMENT '终值位', + `data_type_id` int NULL DEFAULT NULL COMMENT '报文数据类型Id', + `data_type_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '报文数据类型名称', + `fixed_value` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最小值', + `range_value` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最大值', + `template_id` int NULL DEFAULT NULL COMMENT '模版Id', + `message_class` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '报文类别', + PRIMARY KEY (`message_template_type_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '报文模版类型' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for message_value +-- ---------------------------- +DROP TABLE IF EXISTS `message_value`; +CREATE TABLE `message_value` ( + `message_id` bigint NOT NULL AUTO_INCREMENT COMMENT '报文主键', + `template_id` bigint NULL DEFAULT NULL COMMENT '模版外键', + `message_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报文编码', + `message_label` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报文标签', + `message_start_index` int NULL DEFAULT NULL COMMENT '起始位', + `message_end_index` int NULL DEFAULT NULL COMMENT '终止位', + `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `message_class` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`message_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 61 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '报文' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for sys_car +-- ---------------------------- +DROP TABLE IF EXISTS `sys_car`; +CREATE TABLE `sys_car` ( + `id` int NOT NULL AUTO_INCREMENT, + `car_vin` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'VIN码', + `car_type_id` int NULL DEFAULT NULL COMMENT '车辆类型Id', + `state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '状态', + `fence_id` int NULL DEFAULT NULL COMMENT '电子围栏', + `car_motor_manufacturer` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '车辆电机厂商', + `car_motor_model` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电机型号', + `car_battery_manufacturer` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '车辆电池厂商', + `car_battery_model` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '电池型号', + `strategy_id` int NULL DEFAULT NULL COMMENT '策略ID', + `group_id` int NULL DEFAULT NULL COMMENT '围栏组ID', + `create_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注', + `template_id` int NULL DEFAULT NULL COMMENT '报文模版ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '车辆基础信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for sys_car_enterprise +-- ---------------------------- +DROP TABLE IF EXISTS `sys_car_enterprise`; +CREATE TABLE `sys_car_enterprise` ( + `id` int NOT NULL AUTO_INCREMENT, + `enterprise_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '企业名称', + `name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户姓名', + `position` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户职位', + `province` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '公司所在省', + `city` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '公司所在市', + `county` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '公司所在县/区', + `address` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '公司详细地址', + `credit_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '统一社会信用代码', + `business_license` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '营业执照', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '企业' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_car_fault +-- ---------------------------- +DROP TABLE IF EXISTS `sys_car_fault`; +CREATE TABLE `sys_car_fault` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '参数主键', + `fault_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '故障码编码', + `fault_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '故障名', + `type_id` int NULL DEFAULT NULL COMMENT '故障类型', + `fault_label` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '故障标签', + `fault_bit` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '故障位', + `fault_value` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '故障值', + `fault_rank` int NULL DEFAULT NULL COMMENT '故障级别 (0.低 ,1.中 ,2.高)', + `fault_desc` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '故障描述信息', + `fault_min_threshold` int NULL DEFAULT NULL COMMENT '故障最小阈值', + `fault_max_threshold` int NULL DEFAULT NULL COMMENT '故障最大阈值', + `status` int NULL DEFAULT 1 COMMENT '启用状态(1.待处理 2.处理中 3.已处理 4.忽略)', + `warn_status` int NULL DEFAULT 0 COMMENT '是否警告(0.开启 1.禁止)', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注', + `create_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建者', + `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更新者', + `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `car_type_id` int NULL DEFAULT NULL COMMENT '车辆类型', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '故障码' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_car_fault_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_car_fault_log`; +CREATE TABLE `sys_car_fault_log` ( + `id` int NOT NULL AUTO_INCREMENT, + `sys_car_fault_id` int NOT NULL COMMENT '故障码编号', + `create_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '开始时间', + `update_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '结束时间', + `vin` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'VIN码', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容', + `status` int NULL DEFAULT 2 COMMENT '1- 解决 2- 处理中 3-忽略', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '故障日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_car_fault_message +-- ---------------------------- +DROP TABLE IF EXISTS `sys_car_fault_message`; +CREATE TABLE `sys_car_fault_message` ( + `id` int NOT NULL AUTO_INCREMENT, + `content` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容', + `status` int NULL DEFAULT NULL COMMENT '1-已读 2-未读', + `create_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '开始时间', + `update_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime NULL DEFAULT NULL COMMENT '结束时间', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '站内信' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_car_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_car_log`; +CREATE TABLE `sys_car_log` ( + `id` int NOT NULL AUTO_INCREMENT, + `car_vin` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'VIN码', + `start_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `end_time` datetime NULL DEFAULT NULL COMMENT '结束时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '车辆日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for t_template +-- ---------------------------- +DROP TABLE IF EXISTS `t_template`; +CREATE TABLE `t_template` ( + `template_id` int NOT NULL AUTO_INCREMENT, + `house_id` int NULL DEFAULT NULL, + `template_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '报文模版名称', + `template_describe` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '报文模版描述', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`template_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '报文模版表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for tb_enterprise +-- ---------------------------- +DROP TABLE IF EXISTS `tb_enterprise`; +CREATE TABLE `tb_enterprise` ( + `enterprise_id` int NOT NULL AUTO_INCREMENT COMMENT '企业编号', + `enterprise_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '企业名称', + `enterprise_car_count` int NULL DEFAULT 0 COMMENT '企业车辆数量', + `enterprise_fence_count` int NULL DEFAULT 0 COMMENT '企业电子围栏数量', + `enterprise_database_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '企业数据库', + PRIMARY KEY (`enterprise_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '企业运营' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for warn_logs +-- ---------------------------- +DROP TABLE IF EXISTS `warn_logs`; +CREATE TABLE `warn_logs` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '预警日志id', + `vin` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '车辆vin码', + `warn_rule_id` int NULL DEFAULT NULL COMMENT '规则id', + `start_time` datetime NULL DEFAULT NULL COMMENT '开始时间', + `end_time` datetime NULL DEFAULT NULL COMMENT '结束时间', + `max_value` int NULL DEFAULT NULL COMMENT '最大值', + `min_value` int NULL DEFAULT NULL COMMENT '最小值', + `avg_value` int NULL DEFAULT NULL COMMENT '平均值', + `median_value` int NULL DEFAULT NULL COMMENT '中位数', + `status` int NULL DEFAULT NULL COMMENT '是否发送预警', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '车辆预警记录表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for warn_rule +-- ---------------------------- +DROP TABLE IF EXISTS `warn_rule`; +CREATE TABLE `warn_rule` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '规则id', + `rule_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '规则名称', + `strategy_id` int NULL DEFAULT NULL COMMENT '策略id', + `msg_type_id` int NULL DEFAULT NULL COMMENT '报文数据类型id', + `slide_time` int NULL DEFAULT NULL COMMENT '滑窗时间', + `slide_frequency` int NULL DEFAULT NULL COMMENT '滑窗频率', + `growth_rate` int NULL DEFAULT NULL COMMENT '增长率', + `volatility_rate` int NULL DEFAULT NULL COMMENT '波动率', + `decrease_rate` int NULL DEFAULT NULL COMMENT '下降率', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '车辆预警规则表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for warn_strategy +-- ---------------------------- +DROP TABLE IF EXISTS `warn_strategy`; +CREATE TABLE `warn_strategy` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '策略id', + `car_type_id` int NULL DEFAULT NULL COMMENT '车辆类型id', + `strategy_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '策略名称', + `template_id` int NULL DEFAULT NULL COMMENT '报文模版id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '车辆预警策略表' ROW_FORMAT = DYNAMIC; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheAbsBasic.java b/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheAbsBasic.java index bc3a38c..286c20e 100644 --- a/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheAbsBasic.java +++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheAbsBasic.java @@ -8,6 +8,10 @@ package com.muyu.cache;/** import com.muyu.common.redis.service.RedisService; import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; + import static cn.hutool.core.lang.ansi.AnsiEncoder.encode; /** @@ -23,7 +27,7 @@ public abstract class CacheAbsBasic implements CacheBasic{ @Override public void put(K key, V value) { - redisService.setCacheObject(encodeKey(key), value); // 编码 --> 缓存基础的对象 Integer String 实体类等 + redisService.setCacheObject(encodeKey(key), value,24L, TimeUnit.HOURS); // 编码 --> 缓存基础的对象 Integer String 实体类等 } @Override diff --git a/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheBasic.java b/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheBasic.java index 11ed9d5..4b2191c 100644 --- a/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheBasic.java +++ b/cloud-common/cloud-common-cache/src/main/java/com/muyu/cache/CacheBasic.java @@ -1,5 +1,7 @@ package com.muyu.cache; +import java.util.List; + /** * @author yuping * @package com.muyu.cache diff --git a/cloud-common/cloud-common-core/pom.xml b/cloud-common/cloud-common-core/pom.xml index 7cd55ff..9d4b3c5 100644 --- a/cloud-common/cloud-common-core/pom.xml +++ b/cloud-common/cloud-common-core/pom.xml @@ -138,10 +138,10 @@ - - - - + + + + javax.annotation diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/KafkaConstant.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/KafkaConstant.java new file mode 100644 index 0000000..53d4c2c --- /dev/null +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/KafkaConstant.java @@ -0,0 +1,49 @@ +package com.muyu.common.core.constant; + +/** + * kafka常量信息 + * @program: cloud-server + * @author: cuiyongxing + * @create: 2024-09-28 12:18 + **/ +public class KafkaConstant { + + public static final String BOOTSTRAP_SERVERS = "bootstrap.servers"; + + public static final String RETRIES = "retries"; + + public static final String ACKS = "acks"; + + public static final String BATCH_SIZE = "batch.size"; + + public static final String BUFFER_MEMORY = "buffer-memory"; + + public static final String KEY_SERIALIZER = "key.serializer"; + + public static final String VALUE_SERIALIZER = "value.serializer"; + + public static final String ENABLE_AUTO_COMMIT = "enable.auto.commit"; + + public static final String AUTO_COMMIT_INTERVAL = "auto.commit.interval.ms"; + + public static final String AUTO_OFFSET_RESET = "auto.offset.reset"; + + public static final String FETCH_MAX_WAIT = "fetch.max.wait"; + + public static final String FETCH_MIN_SIZE = "fetch.min.size"; + + public static final String HEARTBEAT_INTERVAL = "heartbeat.interval"; + + public static final String MAX_POLL_RECORDS = "max.poll.records"; + + public static final String KEY_DESERIALIZER = "key.deserializer"; + + public static final String VALUE_DESERIALIZER = "value.deserializer"; + + public static final String TOPIC = "topic"; + + public static final String GROUP_ID = "group.id"; + + + +} diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java index 0df401c..9e0d6a9 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/UserConstants.java @@ -110,4 +110,16 @@ public class UserConstants { public static final int PASSWORD_MIN_LENGTH = 5; public static final int PASSWORD_MAX_LENGTH = 20; + + /** + * 企业名称长度限制 + */ + public static final int Firm_NAME_MIN_LENGTH = 2; + public static final int Firm_NAME_MAX_LENGTH = 20; + + /** + * 数据库名称长度限制 + */ + public static final int DATABASE_NAME_MIN_LENGTH = 2; + public static final int DATABASE_NAME_MAX_LENGTH = 20; } diff --git a/cloud-common/cloud-common-kafka/pom.xml b/cloud-common/cloud-common-kafka/pom.xml new file mode 100644 index 0000000..abe86fc --- /dev/null +++ b/cloud-common/cloud-common-kafka/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + com.muyu + cloud-common + 3.6.3 + + + cloud-common-kafka + + cloud-common-kafka消息队列 + + + 17 + 17 + UTF-8 + + + + + + + + + + org.apache.kafka + kafka-clients + + + com.muyu + cloud-common-core + + + + + + + diff --git a/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaConsumerConfig.java b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaConsumerConfig.java new file mode 100644 index 0000000..a874b95 --- /dev/null +++ b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaConsumerConfig.java @@ -0,0 +1,94 @@ +package com.muyu.common.kafka.config; + +import com.muyu.common.core.constant.KafkaConstant; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.Map; + +/** + * kafka消费者配置类 + * @program: cloud-server + * @author: cuiyongxing + * @create: 2024-09-28 14:28 + **/ +@Configuration +public class KafkaConsumerConfig { + + /** + * 服务端id+端口号 + */ + @Value("${spring.kafka.consumer.bootstrap-servers}") + private String bootstrapServers; + + /** + * 偏移量 + */ + @Value("${spring.kafka.consumer.enable-auto-commit}") + private Boolean enableAutoCommit; + + /** + * 自动提交时间间隔 + */ + @Value("${spring.kafka.consumer.auto-commit-interval}") + private Integer autoCommitInterval; + + /** + * 偏移量配置 + */ + @Value("${spring.kafka.consumer.auto-offset-reset}") + private String autoOffsetReset; + + /** + * 阻塞最大时间 + */ + @Value("${spring.kafka.consumer.fetch-max-wait}") + private Integer fetchMaxWait; + + /** + * 请求最小字节 + */ + @Value("${spring.kafka.consumer.fetch-min-size}") + private Integer fetchMinSize; + + /** + * 心跳间隔时间 + */ + @Value("${spring.kafka.consumer.heartbeat-interval}") + private Integer heartbeatInterval; + + /** + * 最大记录条数 + */ + @Value("${spring.kafka.consumer.max-poll-records}") + private Integer maxPollRecords; + + /** + * 消费组 + */ + @Value("${spring.kafka.consumer.group-id}") + private String groupId; + + + @Bean + public KafkaConsumer kafkaConsumer(){ + Map configs = new HashMap<>(); + configs.put(KafkaConstant.BOOTSTRAP_SERVERS, bootstrapServers); + configs.put(KafkaConstant.ENABLE_AUTO_COMMIT, enableAutoCommit); + configs.put(KafkaConstant.AUTO_COMMIT_INTERVAL, autoCommitInterval); + configs.put(KafkaConstant.AUTO_OFFSET_RESET, autoOffsetReset); + configs.put(KafkaConstant.FETCH_MAX_WAIT, fetchMaxWait); + configs.put(KafkaConstant.FETCH_MIN_SIZE, fetchMinSize); + configs.put(KafkaConstant.HEARTBEAT_INTERVAL, heartbeatInterval); + configs.put(KafkaConstant.MAX_POLL_RECORDS, maxPollRecords); + configs.put(KafkaConstant.GROUP_ID, groupId); + StringDeserializer keyDeserializer = new StringDeserializer(); + StringDeserializer valueDeserializer = new StringDeserializer(); + return new KafkaConsumer(configs, keyDeserializer, valueDeserializer); + } + +} diff --git a/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaProducerConfig.java b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaProducerConfig.java new file mode 100644 index 0000000..d805b25 --- /dev/null +++ b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaProducerConfig.java @@ -0,0 +1,66 @@ +package com.muyu.common.kafka.config; + +import com.muyu.common.core.constant.KafkaConstant; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +import java.util.HashMap; +import java.util.Map; + +/** + * kafka生产者配置信息 + * @program: cloud-server + * @author: cuiyongxing + * @create: 2024-09-28 12:03 + **/ +@Configuration +public class KafkaProducerConfig { + + /** + * 服务端ip+端口号 + */ + @Value("${spring.kafka.producer.bootstrap-servers}") + private String bootstrapServers; + /** + * 重试次数 + */ + @Value("${spring.kafka.producer.retries}") + private Integer retries; + + /** + * 默认批量大小 + */ + @Value("${spring.kafka.producer.batch-size}") + private Integer batchSize; + /** + * 总内存字节数 + */ + @Value("${spring.kafka.producer.buffer-memory}") + private Integer bufferMemory; + + /** + * 偏移量 + */ + @Value("${spring.kafka.producer.acks}") + private String acks; + + + @Bean + public KafkaProducer kafkaProducer() { + Map configs = new HashMap<>(); + configs.put(KafkaConstant.BOOTSTRAP_SERVERS, bootstrapServers); + configs.put(KafkaConstant.RETRIES, retries); + configs.put(KafkaConstant.BATCH_SIZE, batchSize); + configs.put(KafkaConstant.BUFFER_MEMORY, bufferMemory); + configs.put(KafkaConstant.ACKS, acks); + StringSerializer keySerializer = new StringSerializer(); + StringSerializer valueSerializer = new StringSerializer(); + KafkaProducer kafkaProducer = new KafkaProducer<>(configs, keySerializer, valueSerializer); + return kafkaProducer; + } + +} diff --git a/cloud-common/cloud-common-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..e87908e --- /dev/null +++ b/cloud-common/cloud-common-kafka/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,2 @@ +com.muyu.common.kafka.config.KafkaConsumerConfig +com.muyu.common.kafka.config.KafkaProducerConfig diff --git a/cloud-common/cloud-common-rabbit/pom.xml b/cloud-common/cloud-common-rabbit/pom.xml index fa6d383..f8daff2 100644 --- a/cloud-common/cloud-common-rabbit/pom.xml +++ b/cloud-common/cloud-common-rabbit/pom.xml @@ -17,6 +17,10 @@ UTF-8 + + cloud-common-rabbit 消息队列服务 + + @@ -28,8 +32,10 @@ com.muyu - cloud-common-core + cloud-common-redis + + - \ No newline at end of file + diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java deleted file mode 100644 index 51cb359..0000000 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.muyu.common.rabbit; - -import org.springframework.amqp.rabbit.connection.ConnectionFactory; -import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.converter.MappingJackson2MessageConverter; -import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; - -@Configuration -public class RabbitListenerConfigurer implements org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer { - - static { - System.setProperty("spring.amqp.deserialization.trust.all", "true"); - } - - //以下配置RabbitMQ消息服务 - @Autowired - public ConnectionFactory connectionFactory; - - - /** - * 处理器方法工厂 - * @return - */ - @Bean - public DefaultMessageHandlerMethodFactory handlerMethodFactory() { - DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); - // 这里的转换器设置实现了 通过 @Payload 注解 自动反序列化message body - factory.setMessageConverter(new MappingJackson2MessageConverter()); - return factory; - } - - @Override - public void configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) { - rabbitListenerEndpointRegistrar.setMessageHandlerMethodFactory(handlerMethodFactory()); - } - -} - diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/MyConfirmCallback.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/MyConfirmCallback.java new file mode 100644 index 0000000..4c31cd4 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/MyConfirmCallback.java @@ -0,0 +1,47 @@ +package com.muyu.rabbitmq.config; + +import lombok.AllArgsConstructor; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * @ClassName: + * @Description: 消息发送到 交换机的确认 回调方法 + */ +@Component +@AllArgsConstructor +public class MyConfirmCallback implements RabbitTemplate.ConfirmCallback { + + + private RabbitTemplate rabbitTemplate; + +// public MyConfirmCallback(RabbitTemplate rabbitTemplate) { +// this.rabbitTemplate = rabbitTemplate; +// // 设置 消息发送到交换机成功 的回调 +// this.rabbitTemplate.setConfirmCallback(this); +// } + + @PostConstruct + public void init() { + this.rabbitTemplate.setConfirmCallback(this); + } + + /** + * 发送消息到交换机的回调方法 消息发送成功或者失败都会执行 + * + * @param correlationData correlation data for the callback. 消息的元数据 + * @param ack true for ack, false for nack + * @param cause An optional cause, for nack, when available, otherwise null. + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (ack) { + System.out.println("消息发送到交换机成功~"); + } else { + System.out.println("消息发送到交换机失败,失败的原因:" + cause); + } + } +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitAdminConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitAdminConfig.java new file mode 100644 index 0000000..cca4318 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitAdminConfig.java @@ -0,0 +1,49 @@ +package com.muyu.rabbitmq.config; + + + +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @ClassName: RabbitAdminConfig + * @Description: RabbitAdmin配置类 + */ +@Configuration +public class RabbitAdminConfig { + @Value("${spring.rabbitmq.host}") + private String host; + @Value("${spring.rabbitmq.username}") + private String username; + @Value("${spring.rabbitmq.password}") + private String password; + @Value("${spring.rabbitmq.port}") + private Integer port; + + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(); + cachingConnectionFactory.setHost(host); + cachingConnectionFactory.setPort(port); + cachingConnectionFactory.setUsername(username); + cachingConnectionFactory.setPassword(password); + return cachingConnectionFactory; + + } + + @Bean + public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + rabbitAdmin.setAutoStartup(true); + return rabbitAdmin; + } + +} + + + + diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitmqConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitmqConfig.java new file mode 100644 index 0000000..1b08976 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitmqConfig.java @@ -0,0 +1,20 @@ +package com.muyu.rabbitmq.config; + +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * JSON 消息转换器 自动将发送的消息转换成 json 字符串 并且 消费者接收到消息的时候自动反序列化 成需要的对象 + */ +@Configuration +public class RabbitmqConfig { + + + // 消息转换配置 + @Bean + public MessageConverter jsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/ReturnCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/ReturnCallbackConfig.java new file mode 100644 index 0000000..e1c217b --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/ReturnCallbackConfig.java @@ -0,0 +1,37 @@ +package com.muyu.rabbitmq.config; + +import lombok.AllArgsConstructor; +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 消息发送到 队列的确认 + */ +@Component +@AllArgsConstructor +public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback { + + + private final RabbitTemplate rabbitTemplate; + + @PostConstruct // @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + public void init() { + rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送到 队列失败的时候执行 + * + * @param returnedMessage the returned message and metadata. + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + System.out.println("消息" + returnedMessage.getMessage().toString() + + "被交换机" + returnedMessage.getExchange() + "回退!" + + "退回原因为:" + returnedMessage.getReplyText()); + // 回退了所有的信息,可做补偿机制 记录发送的日志 + } +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/constants/RabbitmqConstants.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/constants/RabbitmqConstants.java new file mode 100644 index 0000000..5826edd --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/constants/RabbitmqConstants.java @@ -0,0 +1,35 @@ +package com.muyu.rabbitmq.constants; + +/** + * + * @author: 刘武 + * @date: 2024/7/10 + * @Description: rabbitmq常量 + * @Version 1.0.0 + */ +public interface RabbitmqConstants { + + //普通队列 + String BASIC_QUEUE_NAME = "BASIC_QUEUE_NAME"; + + String lOG_QUEUE_NAME = "LOG_QUEUE_NAME"; + //延迟队列 + //队列名称 + String DELAYED_QUEUE_NAME = "delayed_queue"; + //交换机名称 + String DELAYED_EXCHANGE_NAME = "DELAYED_EXCHANGE"; + //交换机 + String DELAYED_ROUTING_KEY = "delayed"; + /** + * 上下线监听交换机 + */ + String TOP_BOTTOM_STITCHING = "top_bottom_stitching"; + /** + * 上线规则 + */ + String TOP_RULE = "car.top.data"; + /** + * 车辆下线规则 + */ + String BOTTOM_RULE = "car.bottom.data"; +} 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 new file mode 100644 index 0000000..f823509 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java @@ -0,0 +1,150 @@ +package com.muyu.rabbitmq.consumer; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.common.redis.service.RedisService; +//import com.muyu.rabbitmq.util.CacheUtil; +import com.rabbitmq.client.Channel; +import lombok.AllArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Date; + +/** + * @ClassName: RabbitMQConsumerUtil + * @Description: rabbitmq消费者 + */ +@Component +@Log4j2 +@AllArgsConstructor +public class RabbitMQConsumerUtil { + + private final RedisService redisService; + +// @Autowired +// private CacheUtil cacheUtil; + + + /** + * 普通消费者 + * @param data 数据类型 + * @param message + * @param channel + */ + @RabbitListener(queuesToDeclare = @Queue(name = "basic")) + public void rabbitMQBasicConsumer(String data ,Message message , Channel channel) { + log.info("当前时间:{} :RabbitMQConsumerUtil : {}", new Date(), message); + try { + // 获取到消息 开始消费 + log.info("消息消费者接收到消息,消息内容:{}", JSONObject.toJSONString(data)); + + + Long add = redisService.redisTemplate.opsForSet().add(data, message.getMessageProperties().getMessageId()); + + if (add != 1) { + return; + } + + /** + * -----------------------------------以下为异步业务操作---------------------------- + */ + String carList = (String) redisService.redisTemplate.opsForValue().get("carList"); + + + + /** + * ------------------------------------------------------------------------------ + */ + // 消费消息成功之后需要确认 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean multiple 是否批量确认 true 批量 确认小于等于当前投递序号的消息 false 单个确认 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + log.info("xxx消费者接收到消息,消息内容:{},消费成功...", message); + + } catch (Exception e) { + log.error("xxx消费者接收到消息,消息内容:{},消费消息异常,异常信息:{}", message, e); + // 消息回退 拒绝消费消息 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean requeue 是否回到原来的队列 + try { + channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); +// channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException ex) { + log.error("xxx消费者接收到消息,消息内容:{},回退消息异常,异常信息:{}", message, ex); + } + }finally { + try { + channel.close(); + } catch (Exception e) { + log.error("xxx消费者关闭Channel异常,消息内容:{},异常信息:{}", message, e); + } + } + } + + + /** + * 普通消费者 + * @param data 数据类型 + * @param message + * @param channel + */ + public void carUpConsumer(String data,Message message , Channel channel) { + log.info("当前时间:{} :RabbitMQConsumerUtil : {}", new Date(), message); + try { + // 获取到消息 开始消费 + log.info("消息消费者接收到消息,消息内容:{}", JSONObject.toJSONString(data)); + + + Long add = redisService.redisTemplate.opsForSet().add(data, message.getMessageProperties().getMessageId()); + + if (add != 1) { + return; + } + + + /** + * -----------------------------------以下为异步业务操作---------------------------- + */ + log.info("[ 根据vin拿到缓存 ] vin为 --》 {}",data); + log.info("[ 存入本地缓存 ] 数据为 --》 {}",data); + log.info("[ 存入本地缓存 ] 数据为 --》 {}",data); + /** + * ------------------------------------------------------------------------------ + */ + // 消费消息成功之后需要确认 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean multiple 是否批量确认 true 批量 确认小于等于当前投递序号的消息 false 单个确认 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + log.info("xxx消费者接收到消息,消息内容:{},消费成功...", message); + + } catch (Exception e) { + log.error("xxx消费者接收到消息,消息内容:{},消费消息异常,异常信息:{}", message, e); + // 消息回退 拒绝消费消息 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean requeue 是否回到原来的队列 + try { + channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); +// channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException ex) { + log.error("xxx消费者接收到消息,消息内容:{},回退消息异常,异常信息:{}", message, ex); + } + }finally { + try { + channel.close(); + } catch (Exception e) { + log.error("xxx消费者关闭Channel异常,消息内容:{},异常信息:{}", message, e); + } + } + } + + + + + + +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/producer/RabbitMQProducerUtil.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/producer/RabbitMQProducerUtil.java new file mode 100644 index 0000000..3d9a148 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/producer/RabbitMQProducerUtil.java @@ -0,0 +1,174 @@ +package com.muyu.rabbitmq.producer; + +import com.muyu.common.core.domain.Result; +import com.muyu.rabbitmq.constants.RabbitmqConstants; +import lombok.AllArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.MessageProperties; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +/** + * @ClassName: RabbitMQProducer + * @Description: rabbitmq生产者 + */ +@Component +@AllArgsConstructor +@Log4j2 +public class RabbitMQProducerUtil { + //redis工具类对象 + + //rabbit + private final RabbitTemplate rabbitTemplate; + + + /** + * 简单模型 + * + * @param param 传递的消息 (如果是对象需要序列化) + * @return 结果集 + * 一对一消费,只有一个消费者能接收到 + */ + public void basicSendMessage(String queueName, String param) { + + log.info("【简单模型mq】 : method: 【 basicSendMessage 】 - ages: 【 String : {}, Object : {}】 ---> 【 消息发送中。。。 】", RabbitmqConstants.BASIC_QUEUE_NAME, param); + // 发送简单模型消息 + // 第一个参数: 绑定规则 相当于 队列名称 + // 第二个参数:消息内容 + rabbitTemplate.convertAndSend(queueName, param, message -> { + message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); + return message; + } ); + + log.info("【简单模型mq】 : method: 【 basicSendMessage 】- queue: 【 {} 】 ---> 【 消息发送成功 】", RabbitmqConstants.BASIC_QUEUE_NAME); + + + } + +// /** +// * Work queue 工作模型 +// * +// * @param obj 传递的消息 (如果是对象需要序列化) +// * @return 结果集 +// * 多个消费者,你一个我一个分配消费消息,有预取机制,默认公平消费,可配置 能者多劳模式(),谁完成的快,谁多做一点 +// */ +// public Result workSendMessage(String queueName, Object obj, String msg) { +// +// log.info("【工作模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", queueName, obj, msg); +// // 发送简单模型消息 +// // 第一个参数: 绑定规则 相当于 队列名称 +// // 第二个参数:消息内容 +// rabbitTemplate.convertAndSend(queueName, obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【工作模型mq】 : method: 【 workSendMessage 】- queue: 【 {} 】 ---> 【 消息发送成功 】", queueName); +// +// return Result.success("消息发送成功"); +// } +// +// /** +// * Publish/Subscribe 发布订阅者模型 +// * 多个消费者,多个消费者可以同时接收到消息 有交换机 类型 fanout +// * +// * @param exchange 交换机名称 +// * @param obj 发送的消息Object +// * @param msg 响应的内容 +// * @return 结果集 +// */ +// public Result publishSubscribeSendMessage(String exchange, Object obj, String msg) { +// +// log.info("【订阅模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", exchange, obj, msg); +// // 发送简单模型消息 +// // 第一个参数: exchange 交换机的名称 +// // 第二个参数: 绑定规则 发布订阅者模型 不写 默认 "" 只要绑定就行 不需要规则 +// // 第三个参数:消息内容 +// rabbitTemplate.convertAndSend(exchange, "", obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【订阅模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); +// +// return Result.success("消息发送成功"); +// } +// +// /** +// * Routing路由模型 +// * 使用的是 Direct 类型的交换机,会将接收到的消息根据 规则 路由到指定的Queue(队列),因此称为路由模式 +// * +// * @param exchange 交换机名称 +// * @param rule 绑定规则 一个字符串即可 +// * @param obj 发送的消息Object +// * @param msg 响应的内容 +// * @return 结果集 +// */ +// public Result routingSendMessage(String exchange, String rule, Object obj, String msg) { +// +// log.info("【路由模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", exchange, obj, msg); +// // 发送简单模型消息 +// // 第一个参数: 绑定规则 相当于 队列名称 +// // 第二个参数:消息内容 +// rabbitTemplate.convertAndSend(exchange, rule, obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【路由模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); +// +// return Result.success("消息发送成功"); +// } +// +// +// /** +// * Topic主题模型模型 +// * 使用的是 topic 类型的交换机 +// * +// * @param exchange 交换机名称 +// * @param rule 绑定规则 可以绑定多个单词以 . 拼接 也可以使用 #(匹配 零个 一个 或 多个 单词) 或 *(匹配 一个 单词) 通配符(例如:name.msg, *.msg, age.# ) +// * @param obj 发送的消息Object +// * @param msg 响应的内容 +// * @return 结果集 +// */ +// public Result topicSendMessage(String exchange, String rule, Object obj) { +// +// log.info("【主题模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {} 】 ---> 【 消息发送中。。。 】", exchange, obj); +// // 发送简单模型消息 +// // 第一个参数: 绑定规则 相当于 队列名称 +// // 第二个参数:消息内容 +// rabbitTemplate.convertAndSend(exchange, rule, obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【主题模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); +// +// return Result.success(obj,"消息发送成功"); +// } + + + /** + * 延迟队列模型 + * @param param 传输内容 + * @param delayTime 延迟时间 + * @return 结果集 + */ +// public Result delayedSendMessage(Long delayTime, Object param) { +// log.info("【延迟队列模型】 : method: 【 delayedSendMessage 】 消息内容:{}---> 【 消息发送中。。。 】",param); +// +// rabbitTemplate.convertAndSend(RabbitmqConstants.DELAYED_EXCHANGE_NAME, RabbitmqConstants.DELAYED_ROUTING_KEY,param, message -> { +// MessageProperties messageProperties = message.getMessageProperties(); +// messageProperties.setMessageId(UUID.randomUUID().toString()); +// messageProperties.setDelayLong(delayTime); +// return message; +// }); +// log.info("【延迟队列模型】 : method: 【 delayedSendMessage 】 消息内容:{}---> 【 消息发送成功 】",param); +// +// return Result.success(param,"消息发送成功"); +// +// } + +} diff --git a/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 189ea2c..cffeca7 100644 --- a/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1,6 @@ -com.muyu.common.rabbit.RabbitListenerConfigurer \ No newline at end of file +com.muyu.rabbitmq.producer.RabbitMQProducerUtil +com.muyu.rabbitmq.consumer.RabbitMQConsumerUtil +com.muyu.rabbitmq.config.RabbitmqConfig +com.muyu.rabbitmq.config.MyConfirmCallback +com.muyu.rabbitmq.config.RabbitAdminConfig +com.muyu.rabbitmq.config.ReturnCallbackConfig diff --git a/cloud-common/cloud-common-saas/pom.xml b/cloud-common/cloud-common-saas/pom.xml index 41b57fd..6c0d2f6 100644 --- a/cloud-common/cloud-common-saas/pom.xml +++ b/cloud-common/cloud-common-saas/pom.xml @@ -11,6 +11,10 @@ cloud-common-saas + + cloud-common-saas 模块 + + 17 17 @@ -33,6 +37,7 @@ + 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 8ea974e..7245b4d 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 @@ -29,7 +29,8 @@ import java.util.List; import java.util.Map; /** - * @Author: DongZeLiang + * 多数据源 + * @author liuwu * @date: 2024/6/3 * @Description: 多数据源 * @Version: 1.0 @@ -40,7 +41,7 @@ import java.util.Map; public class ManyDataSource implements ApplicationRunner{ private List dataSourceInfoList(){ RemoteSaaSService remoteSaaSService = SpringUtils.getBean(RemoteSaaSService.class); -Result> tableDataInfoResult = remoteSaaSService.findDatabaseList(); + Result> tableDataInfoResult = remoteSaaSService.findDatabaseList(); if (tableDataInfoResult==null){ throw new SaaSException("saas远调数据源错误"); } 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 b69b858..bb27584 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,7 +1,8 @@ package com.muyu.cloud.common.many.datasource.constents; /** - * @author DongZl + * 数据源常量 + * @author liuwu * @description: 数据源常量 * @Date 2023-8-1 上午 11:02 */ @@ -16,4 +17,8 @@ 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 73cc26e..6406cfc 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,7 +8,8 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @author DongZl + * 数据源实体类 + * @author liuwu * @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 7ceb782..30eee74 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,7 +8,8 @@ import org.springframework.stereotype.Component; import java.sql.SQLException; /** - * @Author: DongZeLiang + * Druid工厂 + * @author liuwu * @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 e53229a..5cafaa0 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 Dongzl + * @author liuwu */ @Slf4j public class DynamicDataSourceHolder { 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 241ce32..042fe95 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,7 +1,8 @@ package com.muyu.cloud.common.saas.contents; /** - * @Author: DongZeLiang + * SAAS常量 + * @author liuwu * @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 5c1985a..db7e230 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: DongZeLiang + * @Author: liuwu * @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 b2b4cc7..60e5054 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,7 +4,8 @@ package com.muyu.cloud.common.saas.exception; import com.muyu.common.core.exception.ServiceException; /** - * @Author: DongZeLiang + * SaaS异常类 + * @author liuwu * @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 0efef00..997fe6b 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 @@ -14,7 +14,8 @@ import org.springframework.web.servlet.AsyncHandlerInterceptor; /** - * @Author: DongZeLiang + * SAAS拦截器 + * @author liuwu * @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 deleted file mode 100644 index 70148cf..0000000 --- a/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1,3 +0,0 @@ -com.muyu.cloud.common.saas.interceptor.WebMvcSaaSConfig -com.muyu.cloud.common.many.datasource.ManyDataSource -com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory diff --git a/cloud-common/cloud-common-swagger/pom.xml b/cloud-common/cloud-common-swagger/pom.xml index 6aa037d..5dbca7f 100644 --- a/cloud-common/cloud-common-swagger/pom.xml +++ b/cloud-common/cloud-common-swagger/pom.xml @@ -1,23 +1,26 @@ - + 4.0.0 com.muyu cloud-common 3.6.3 - 4.0.0 - + com.bwie cloud-common-swagger - - cloud-common-swagger swagger2文档聚合 + cloud-common-swagger系统接口 + + 17 + 17 + UTF-8 + - org.springframework.boot diff --git a/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/annotation/EnableCustomSwagger2.java b/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/annotation/EnableCustomSwagger2.java index 0d36ba9..c788b2e 100644 --- a/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/annotation/EnableCustomSwagger2.java +++ b/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/annotation/EnableCustomSwagger2.java @@ -1,10 +1,21 @@ package com.muyu.common.swagger.annotation; +import com.muyu.common.swagger.config.SwaggerAutoConfiguration; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + /** * @author 袁子龙 * @package:com.muyu.common.swagger.annotation * @name:EnableCustomSwagger2 * @date:2024/9/29 10:01 */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@Import({SwaggerAutoConfiguration.class}) public @interface EnableCustomSwagger2 { + } diff --git a/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerBeanPostProcessor.java b/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerBeanPostProcessor.java index be3d265..04e4cf3 100644 --- a/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerBeanPostProcessor.java +++ b/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerBeanPostProcessor.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.stream.Collectors; /** + * 在 springboot 2.6.x 不兼容问题的处理 * @author 袁子龙 * @package:com.muyu.common.swagger.config * @name:SwaggerBeanPostProcessor diff --git a/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerProperties.java b/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerProperties.java index 9be178f..c99b9a2 100644 --- a/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerProperties.java +++ b/cloud-common/cloud-common-swagger/src/main/java/com/muyu/common/swagger/config/SwaggerProperties.java @@ -300,4 +300,3 @@ public class SwaggerProperties { } } } - diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/Business.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/Business.java new file mode 100644 index 0000000..1773299 --- /dev/null +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/Business.java @@ -0,0 +1,42 @@ +package com.muyu.common.system.domain; + +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.annotation.Excel.ColumnType; +import com.muyu.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 企业对象 + * @author 袁子龙 + * @package com.muyu.common.system.domain + * @name Enterprise + * @date 2024/9/30 12:05 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class Business extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 企业Id + */ + @Excel(name = "企业序号",cellType = ColumnType.NUMERIC, prompt = "企业编号") + private Integer id; + /** + * 企业名称 + */ + @Excel(name = "企业名称") + private String firmName; + /** + * 数据库名称 + */ + @Excel(name = "数据库名称") + private String databaseName; +} 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 4bcc4ff..1154a72 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 @@ -3,8 +3,7 @@ package com.muyu.common.system.remote; import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.core.constant.ServiceNameConstants; import com.muyu.common.core.domain.Result; -import com.muyu.common.core.web.page.TableDataInfo; -import com.muyu.common.system.domain.SysFirmUser; +import com.muyu.common.system.domain.Business; import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; import com.muyu.common.system.domain.LoginUser; @@ -44,4 +43,13 @@ public interface RemoteUserService { @GetMapping("/user/companyList") Result> companyList(); + + /** + * 入驻企业信息 + * @param enterprise + * @param source + * @return + */ + @PostMapping("/user/enterprise") + ResultsettlementEnterpriseInfo(@RequestBody Business enterprise, @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 071490a..f725a4c 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 @@ -1,8 +1,7 @@ package com.muyu.common.system.remote.factory; import com.muyu.common.core.domain.Result; -import com.muyu.common.core.web.page.TableDataInfo; -import com.muyu.common.system.domain.SysFirmUser; +import com.muyu.common.system.domain.Business; import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.LoginUser; @@ -41,6 +40,11 @@ public class RemoteUserFallbackFactory implements FallbackFactory settlementEnterpriseInfo(Business enterprise, String source) { + return Result.error("入驻企业失败"); + } + }; } } diff --git a/cloud-common/pom.xml b/cloud-common/pom.xml index 39e986c..2ed8868 100644 --- a/cloud-common/pom.xml +++ b/cloud-common/pom.xml @@ -23,6 +23,7 @@ cloud-common-saas cloud-common-swagger cloud-common-cache + cloud-common-kafka cloud-common @@ -32,4 +33,5 @@ cloud-common通用模块 + diff --git a/cloud-modules/cloud-event/pom.xml b/cloud-modules/cloud-event/pom.xml index eb13417..d9321b3 100644 --- a/cloud-modules/cloud-event/pom.xml +++ b/cloud-modules/cloud-event/pom.xml @@ -54,13 +54,6 @@ spring-boot-starter-actuator - - - org.springframework.kafka - spring-kafka - - - com.mysql @@ -110,11 +103,23 @@ node-commons 1.3.2 + - org.springframework.kafka - spring-kafka + com.muyu + cloud-common-kafka + 3.6.3 + + com.muyu + cloud-common-rabbit + + + + com.muyu + saas-cache + 3.6.3 + diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventCustom.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventCustom.java new file mode 100644 index 0000000..609c8a4 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventCustom.java @@ -0,0 +1,26 @@ +package com.muyu.event.basic; + +import com.alibaba.fastjson2.JSONObject; +import org.springframework.context.ApplicationEvent; + +/** + * 事件类型 + * @author 刘武 + * @package:com.muyu.event.Basic + * @name:EventCustom + * @date:2024/9/29 21:17 + */ +public class EventCustom extends ApplicationEvent { + + private JSONObject data; + + public EventCustom(Object source,JSONObject data) { + super(source); + this.data=data; + } + + public JSONObject getData(){ + return data; + } + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventListener.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventListener.java new file mode 100644 index 0000000..cceaeb9 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventListener.java @@ -0,0 +1,17 @@ +package com.muyu.event.basic; + + +import org.springframework.context.ApplicationListener; + +/** + * 事件监听接口 + * @author 刘武 + * @package:com.muyu.event.basic + * @name:EventListener + * @date:2024/9/29 21:21 + */ +public interface EventListener extends ApplicationListener { + + void onEvent(EventCustom event); + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventPublisher.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventPublisher.java new file mode 100644 index 0000000..f724836 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventPublisher.java @@ -0,0 +1,31 @@ +package com.muyu.event.basic; + +import com.alibaba.fastjson2.JSONB; +import com.alibaba.fastjson2.JSONObject; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.stereotype.Component; + +/** + * 策略发送事件 + * @author 刘武 + * @package:com.muyu.event.basic + * @name:EventPublisher + * @date:2024/9/29 22:01 + */ +@Component +public class EventPublisher implements ApplicationEventPublisherAware { + + private ApplicationEventPublisher publisher; + + @Override + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { + this.publisher=applicationEventPublisher; + } + + public void publishEvent(JSONObject jsonObject){ + EventCustom event = new EventCustom(this, jsonObject); + publisher.publishEvent(event); + } + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventHandler.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventHandler.java deleted file mode 100644 index 85b3488..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.muyu.event.basics; - -/** - * @author 刘武 - * @package: - * @name:EventHandler - * @date:2024/9/29 - */ -public class EventHandler { - - private static final ThreadLocal EVENT_THREAD = new ThreadLocal<>(); - - public static void set(final EventQueueConfig handler) { - EVENT_THREAD.set(handler); - } - - public static EventQueueConfig get() { - return EVENT_THREAD.get(); - } - - public static void remove(){ - EVENT_THREAD.remove(); - } - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventProcessBasics.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventProcessBasics.java deleted file mode 100644 index 98b7684..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventProcessBasics.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.muyu.event.basics; - - -public abstract class EventProcessBasics { - - /** - * 下一个事件对象 - */ - protected EventProcessBasics nextEvent; - - /** - * 下一个事件 - * @param nextHandler 下一个事件处理 - */ - public void setNextHandler(EventProcessBasics nextHandler) { - this.nextEvent = nextHandler; - } - - /** - * 事件处理抽象类 - * @param eventKey 事件唯一key - */ - public abstract void handleEvent(String eventKey); - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventQueueConfig.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventQueueConfig.java deleted file mode 100644 index daf4bb2..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/EventQueueConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.muyu.event.basics; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.concurrent.LinkedBlockingDeque; - -/** - * @author 刘武 - * @package: - * @name:EventQueueConfig - * @date:2024/9/29 - */ -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class EventQueueConfig { - - private LinkedBlockingDeque taskNodeQueue = new LinkedBlockingDeque<>(); - - public void addEvent(EventProcessBasics obj){ - this.taskNodeQueue.add(obj); - } - - public boolean hashEventNext(){ - return !taskNodeQueue.isEmpty(); - } - - private EventProcessBasics nextTaskNode(){ - return taskNodeQueue.poll(); - } -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/StartEvent.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/StartEvent.java deleted file mode 100644 index 74d882b..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basics/StartEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.muyu.event.basics; - - -import com.muyu.event.domian.EventActuate; -import org.springframework.context.ApplicationEvent; - -import java.util.List; - -/** - * @author 刘武 - * @package: - * @name:StartEvent - * @date:2024/9/29 - */ - -public class StartEvent extends ApplicationEvent { - - private EventActuate eventActuate; - - public StartEvent(EventActuate source) { - super(source); - this.eventActuate = source; - } - - public EventActuate getEventActuate() { - return eventActuate; - } -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/EventConfig.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/EventConfig.java new file mode 100644 index 0000000..747cb86 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/EventConfig.java @@ -0,0 +1,23 @@ +package com.muyu.event.config; + + +import com.muyu.event.listener.AddDatabaseListener; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author 刘武 + * @package:com.muyu.event.config + * @name:EventConfig + * @date:2024/9/29 21:13 + */ +@Configuration +public class EventConfig { + + @Bean + public AddDatabaseListener addDatabaseListener() { + return new AddDatabaseListener(); + } + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java index eb71267..8016558 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java @@ -66,9 +66,7 @@ public class IoTDBConfig { measurements.add("car_vin"); measurements.add("information"); - session.insertRecord(TABLENAME,System.currentTimeMillis(),measurements,list); - //关闭连接 session.close(); } catch (IoTDBConnectionException e) { diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaConsumerConfig.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaConsumerConfig.java deleted file mode 100644 index 36610d7..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaConsumerConfig.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.muyu.event.config; - - -import org.apache.kafka.clients.consumer.ConsumerConfig; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; -import org.springframework.kafka.config.KafkaListenerContainerFactory; -import org.springframework.kafka.core.ConsumerFactory; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; -import org.springframework.kafka.listener.ConcurrentMessageListenerContainer; -import org.springframework.kafka.listener.ContainerProperties; -import org.springframework.kafka.support.serializer.JsonDeserializer; - - -import java.util.HashMap; -import java.util.Map; - -/** - * @author 徐一杰 - * @date 2022/10/31 18:05 - * kafka配置,也可以写在yml,这个文件会覆盖yml - */ -@SpringBootConfiguration -public class KafkaConsumerConfig { - - /** - * 配置 Kafka的 主机地址 - */ - @Value("${spring.kafka.consumer.bootstrap-servers}") - private String bootstrapServers; - /** - * 配置分分组 - */ - @Value("${spring.kafka.consumer.group-id}") - private String groupId; - /** - * 是否自动提交 偏移量 - */ - @Value("${spring.kafka.consumer.enable-auto-commit}") - private boolean enableAutoCommit; - /** - * 消费者与Kafka的心跳续约的会话超时时间 - */ - @Value("${spring.kafka.properties.session.timeout.ms}") - private String sessionTimeout; - /** - * 两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance - */ - @Value("${spring.kafka.properties.max.poll.interval.ms}") - private String maxPollIntervalTime; - - @Value("${spring.kafka.consumer.max-poll-records}") - private String maxPollRecords; - - @Value("${spring.kafka.consumer.auto-offset-reset}") - private String autoOffsetReset; - - @Value("${spring.kafka.listener.concurrency}") - private Integer concurrency; - - @Value("${spring.kafka.listener.missing-topics-fatal}") - private boolean missingTopicsFatal; - - @Value("${spring.kafka.listener.poll-timeout}") - private long pollTimeout; - - @Bean - public Map consumerConfigs() { - Map propsMap = new HashMap<>(16); - propsMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); - propsMap.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); - //是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量 - propsMap.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, enableAutoCommit); - //自动提交的时间间隔,自动提交开启时生效 - propsMap.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "2000"); - //该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理: - //earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费分区的记录 - //latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据(在消费者启动之后生成的记录) - //none:当各分区都存在已提交的offset时,从提交的offset开始消费;只要有一个分区不存在已提交的offset,则抛出异常 - propsMap.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, autoOffsetReset); - //两次poll之间的最大间隔,默认值为5分钟。如果超过这个间隔会触发reBalance - propsMap.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, maxPollIntervalTime); - //这个参数定义了poll方法最多可以拉取多少条消息,默认值为500。如果在拉取消息的时候新消息不足500条,那有多少返回多少;如果超过500条,每次只返回500。 - //这个默认值在有些场景下太大,有些场景很难保证能够在5min内处理完500条消息, - //如果消费者无法在5分钟内处理完500条消息的话就会触发reBalance, - //然后这批消息会被分配到另一个消费者中,还是会处理不完,这样这批消息就永远也处理不完。 - //要避免出现上述问题,提前评估好处理一条消息最长需要多少时间,然后覆盖默认的max.poll.records参数 - //注:需要开启BatchListener批量监听才会生效,如果不开启BatchListener则不会出现reBalance情况 - propsMap.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, maxPollRecords); - //当broker多久没有收到consumer的心跳请求后就触发reBalance,默认值是10s - propsMap.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, sessionTimeout); - //序列化(建议使用Json,这种序列化方式可以无需额外配置传输实体类) - propsMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class); - propsMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class); - return propsMap; - } - - @Bean - public ConsumerFactory consumerFactory() { - // 配置消费者的 Json 反序列化的可信赖包,反序列化实体类需要 - try (JsonDeserializer deserializer = new JsonDeserializer<>()) { - deserializer.trustedPackages("*"); - return new DefaultKafkaConsumerFactory<>(consumerConfigs(), new JsonDeserializer<>(), deserializer); - } - } - - /** - * kafka监听容器工厂 负责 从 Kafka的主题中 取出消息进行消费 可以设置消费者的配置 - * @return - */ - @Bean - public KafkaListenerContainerFactory> kafkaListenerContainerFactory() { - ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>(); - factory.setConsumerFactory(consumerFactory()); - //在侦听器容器中运行的线程数,一般设置为 机器数*分区数 - factory.setConcurrency(concurrency); - // 消费监听接口监听的主题不存在时,默认会报错,所以设置为false忽略错误 - factory.setMissingTopicsFatal(missingTopicsFatal); - // 自动提交关闭,需要设置手动消息确认 - factory.getContainerProperties().setAckMode(ContainerProperties.AckMode.MANUAL_IMMEDIATE); - factory.getContainerProperties().setPollTimeout(pollTimeout); - // 设置为批量监听,需要用List接收 - // factory.setBatchListener(true); - return factory; - } - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaProviderConfig.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaProviderConfig.java deleted file mode 100644 index 1fdcf05..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaProviderConfig.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.muyu.event.config; - -import org.apache.kafka.clients.producer.ProducerConfig; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.kafka.core.DefaultKafkaProducerFactory; -import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.core.ProducerFactory; -import org.springframework.kafka.transaction.KafkaTransactionManager; - -import java.util.HashMap; -import java.util.Map; - -/** - * 主题生产者的配置类 - */ -@Configuration -public class KafkaProviderConfig { - - /** - * kafka 的主机地址 - */ - @Value("${spring.kafka.producer.bootstrap-servers}") - private String bootstrapServers; - /** - * 配置 Kafka的事务 - */ - @Value("${spring.kafka.producer.transaction-id-prefix}") - private String transactionIdPrefix; - /** - * 发送确认机制 - */ - @Value("${spring.kafka.producer.acks}") - private String acks; - /** - * 发送重试 - */ - @Value("${spring.kafka.producer.retries}") - private String retries; - /** - * 发送消息的批次大小 - */ - @Value("${spring.kafka.producer.batch-size}") - private String batchSize; - /** - * 消息的缓冲区内存大小 - */ - @Value("${spring.kafka.producer.buffer-memory}") - private String bufferMemory; - - /** - * 设置 健的序列化方式 - */ - @Value("${spring.kafka.producer.key-serializer}") - private String keySerializer; - - /** - * 设置 值的序列化方式 - */ - @Value("${spring.kafka.producer.value-serializer}") - private String valueSerializer; - - /** - * 构建 map 配置消息生产者对象的配置 - * @return - */ - @Bean - public Map producerConfigs() { - Map props = new HashMap<>(16); - props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); - //acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。 - //acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。 - //acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。 - //开启事务必须设为all - props.put(ProducerConfig.ACKS_CONFIG, acks); - //发生错误后,消息重发的次数,开启事务必须大于0 - props.put(ProducerConfig.RETRIES_CONFIG, retries); - //当多个消息发送到相同分区时,生产者会将消息打包到一起,以减少请求交互. 而不是一条条发送 - //批次的大小可以通过batch.size 参数设置.默认是16KB - //较小的批次大小有可能降低吞吐量(批次大小为0则完全禁用批处理)。 - //比如说,kafka里的消息5秒钟Batch才凑满了16KB,才能发送出去。那这些消息的延迟就是5秒钟 - //实测batchSize这个参数没有用 - props.put(ProducerConfig.BATCH_SIZE_CONFIG, batchSize); - //有的时刻消息比较少,过了很久,比如5min也没有凑够16KB,这样延时就很大,所以需要一个参数. 再设置一个时间,到了这个时间, - //即使数据没达到16KB,也将这个批次发送出去 - props.put(ProducerConfig.LINGER_MS_CONFIG, "5000"); - //生产者内存缓冲区的大小 - props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, bufferMemory); - //反序列化,和生产者的序列化方式对应 - props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, keySerializer); - props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, valueSerializer); - return props; - } - - /** - * 构建 主题生产者工厂 - * @return - */ - @Bean - public ProducerFactory producerFactory() { - DefaultKafkaProducerFactory factory = new DefaultKafkaProducerFactory<>(producerConfigs()); - //开启事务,会导致 LINGER_MS_CONFIG 配置失效 - factory.setTransactionIdPrefix(transactionIdPrefix); - return factory; - } - - /** - * 配置 Kafka的事务管理器 - * @param producerFactory - * @return - */ - @Bean - public KafkaTransactionManager kafkaTransactionManager(ProducerFactory producerFactory) { - return new KafkaTransactionManager<>(producerFactory); - } - - /** - * 构建 KafkaTemplate - * @return - */ - @Bean - public KafkaTemplate kafkaTemplate() { - return new KafkaTemplate<>(producerFactory()); - } - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaSendResultHandler.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaSendResultHandler.java deleted file mode 100644 index c0fa863..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/KafkaSendResultHandler.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.muyu.event.config; - -import jakarta.annotation.Nullable; -import org.apache.kafka.clients.producer.ProducerRecord; -import org.apache.kafka.clients.producer.RecordMetadata; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.support.ProducerListener; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -@Component -public class KafkaSendResultHandler implements ProducerListener { - - @Autowired - private KafkaTemplate kafkaTemplate; - - /** - * bean 初始化方法 - */ - @PostConstruct - public void init(){ - this.kafkaTemplate.setProducerListener(this); - } - - /** - * 消息发送到Kafka成功的回调 - * @param producerRecord - * @param recordMetadata - */ - @Override - public void onSuccess(ProducerRecord producerRecord, RecordMetadata recordMetadata){ - System.out.println("信息发送成功:"+ producerRecord.toString()); - } - - /** - * 息发送到 Kafka 失败的回调 - * @param producerRecord the failed record - * @param recordMetadata The metadata for the record that was sent (i.e. the partition - * and offset). If an error occurred, metadata will contain only valid topic and maybe - * the partition. If the partition is not provided in the ProducerRecord and an error - * occurs before partition is assigned, then the partition will be set to - * RecordMetadata.UNKNOWN_PARTITION. - * @param exception the exception thrown - */ - @Override - public void onError(ProducerRecord producerRecord, @Nullable RecordMetadata recordMetadata, - Exception exception){ - System.out.println("消息发送失败: "+ producerRecord.toString()); - } - - - - - - - - - - - - - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/MyKafkaListenerErrorHandler.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/MyKafkaListenerErrorHandler.java deleted file mode 100644 index 7c72f48..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/MyKafkaListenerErrorHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.muyu.event.config; - - -import lombok.NonNull; -import org.apache.kafka.clients.consumer.Consumer; -import org.springframework.kafka.listener.KafkaListenerErrorHandler; -import org.springframework.kafka.listener.ListenerExecutionFailedException; -import org.springframework.messaging.Message; -import org.springframework.stereotype.Component; - -@Component -public class MyKafkaListenerErrorHandler implements KafkaListenerErrorHandler { - - @Override - @NonNull - public Object handleError(@NonNull Message message, - ListenerExecutionFailedException exception) { - return new Object(); - } - - @Override - @NonNull - public Object handleError(@NonNull Message message, - @NonNull ListenerExecutionFailedException exception, - Consumer consumer) { - System.out.println("消息详情:"+ message); - System.out.println("异常信息:"+ exception); - System.out.println("消费者详情:" +consumer.groupMetadata()); - System.out.println("监听主题:"+ consumer.listTopics()); - return KafkaListenerErrorHandler.super.handleError(message, exception, consumer); - } - - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/constant/EventConstant.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/constant/EventConstant.java deleted file mode 100644 index fa152ac..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/constant/EventConstant.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.muyu.event.constant; - - -/** - * 事件常量 - * @author 刘武 - * @package:com.muyu.event.constant - * @name:EventConstant - * @date:2024/9/28 19:25 - */ - -public interface EventConstant { - - String STORAGE_EVENT = "storageEvent"; -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/KafkaConsumer.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/KafkaConsumer.java deleted file mode 100644 index 6fe4eb6..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/KafkaConsumer.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.muyu.event.consumer; - -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.kafka.support.Acknowledgment; - -/** - * kafka监听 - * @author 刘武 - * @package:com.muyu.event.consumer - * @name:KafkaConsumer - * @date:2024/9/28 23:34 - */ - -public class KafkaConsumer { - - - @KafkaListener(topics = "data") - public void dataKafkaConsumer(ConsumerRecord consumerRecord, Acknowledgment acknowledgment){ - Object key = consumerRecord.key(); - Object value = consumerRecord.value(); - - //事件调用 - - - //消息确认消费 - acknowledgment.acknowledge(); - } - - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MessageConsumer.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MessageConsumer.java new file mode 100644 index 0000000..5caad0b --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MessageConsumer.java @@ -0,0 +1,52 @@ +package com.muyu.event.consumer; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.event.basic.EventPublisher; +import lombok.extern.log4j.Log4j2; +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.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.Collections; +import java.util.List; + +import static org.bouncycastle.asn1.x500.style.RFC4519Style.l; + +/** + * kafka监听 + * @author 刘武 + * @package:com.muyu.event.consumer + * @name:KafkaConsumer + * @date:2024/9/28 23:34 + */ +@Component +@Log4j2 +public class MessageConsumer implements ApplicationRunner { + + @Autowired + public KafkaConsumer consumer; + @Autowired + private EventPublisher eventPublisher; + + private final String topic="four_car"; + + @Override + public void run(ApplicationArguments args) throws Exception { + List list = Collections.singletonList(topic); + consumer.subscribe(list); + + while (true){ + ConsumerRecords consumerRecords = consumer.poll(Duration.ofMillis(100)); + consumerRecords.forEach(record -> { + String value = record.value(); + JSONObject jsonObject = JSONObject.parseObject(value); + log.info("value:{}",value); + eventPublisher.publishEvent(jsonObject); + }); + } + } +} 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 new file mode 100644 index 0000000..b5bac67 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java @@ -0,0 +1,91 @@ +package com.muyu.event.consumer; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.cache.ElectronicFenceGroupCacheService; +import com.muyu.cache.SysCarCacheService; +import com.muyu.common.domain.database.ElectronicFenceGroup; +import com.muyu.common.domain.resp.SysCarVo; +import com.muyu.common.redis.service.RedisService; +import com.muyu.rabbitmq.consumer.RabbitMQConsumerUtil; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Date; +import java.util.List; + +/** + * rabbitmq 监听器 + * @author 刘武 + * @package:com.muyu.event.consumer + * @name:MqConsumer + * @date:2024/10/2 14:17 + */ + +@Component +@Log4j2 +public class MqConsumer { + + @Autowired + private RedisService redisService; + + @Autowired + private SysCarCacheService sysCarCacheService; + @Autowired + private ElectronicFenceGroupCacheService electronicFenceGroupCacheService; + + @RabbitListener(queuesToDeclare = @Queue(name = "basic")) + public void rabbitMQBasicConsumer(String data , Message message , Channel channel) { + log.info("当前时间:{} :RabbitMQConsumerUtil : {}", new Date(), message); + try { + // 获取到消息 开始消费 + log.info("消息消费者接收到消息,消息内容:{}", JSONObject.toJSONString(data)); + + Long add = redisService.redisTemplate.opsForSet().add(data, message.getMessageProperties().getMessageId()); + + if (add != 1) { + return; + } + + /** + * -----------------------------------以下为异步业务操作---------------------------- + */ + List carList = sysCarCacheService.get("carList"); + + + /** + * ------------------------------------------------------------------------------ + */ + // 消费消息成功之后需要确认 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean multiple 是否批量确认 true 批量 确认小于等于当前投递序号的消息 false 单个确认 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + log.info("xxx消费者接收到消息,消息内容:{},消费成功...", message); + + } catch (Exception e) { + log.error("xxx消费者接收到消息,消息内容:{},消费消息异常,异常信息:{}", message, e); + // 消息回退 拒绝消费消息 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean requeue 是否回到原来的队列 + try { + channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); +// channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException ex) { + log.error("xxx消费者接收到消息,消息内容:{},回退消息异常,异常信息:{}", message, ex); + } + }finally { + try { + channel.close(); + } catch (Exception e) { + log.error("xxx消费者关闭Channel异常,消息内容:{},异常信息:{}", message, e); + } + } + } + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/OnlineConsumer.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/OnlineConsumer.java new file mode 100644 index 0000000..1fecc2e --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/OnlineConsumer.java @@ -0,0 +1,23 @@ +package com.muyu.event.consumer; + +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; + +/** + * 车辆上线监听 + * @author 刘武 + * @package:com.muyu.event.consumer + * @name:OnlineConsumer + * @date:2024/9/30 11:40 + */ +@Component +@Log4j2 +public class OnlineConsumer { + + + + + + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/DataController.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/DataController.java new file mode 100644 index 0000000..d02d4b7 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/DataController.java @@ -0,0 +1,21 @@ +package com.muyu.event.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 数据处理 + * @author 刘武 + * @package:com.muyu.event.controller + * @name:DataController + * @date:2024/9/29 20:16 + */ + +@RestController +@RequestMapping("data") +public class DataController { + + + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java index 3fa091c..d73514c 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java @@ -19,13 +19,12 @@ import java.util.List; * @name:ItodbController * @date:2024/9/28 19:17 */ -@RestController() +@RestController public class IoTDBController { @Autowired private IoTDBService tdbService; - /** * 查询实时车辆信息列表 * @return list @@ -47,7 +46,6 @@ public class IoTDBController { return Result.success(carInformation); }; - /** * 车辆添加 * @param addCarInformation @@ -59,16 +57,4 @@ public class IoTDBController { return Result.success("添加成功"); }; - - - - - - - - - - - - } diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/TestController.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/TestController.java new file mode 100644 index 0000000..cb379a4 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/TestController.java @@ -0,0 +1,68 @@ +package com.muyu.event.controller; + + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.rabbitmq.producer.RabbitMQProducerUtil; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + + +/** + * 测试 + * @author 刘武 + * @package:com.muyu.event.controller + * @name:TestController + * @date:2024/9/29 20:58 + */ +@RestController("test") +public class TestController { + + @Resource + private KafkaProducer kafkaProducer; + @Resource + private RabbitMQProducerUtil rabbitMQProducerUtil; + + + private static final String topic="four_car"; + + @GetMapping("sendKafka") + public String sendKafka(){ + + String message="发送一条信息"; + JSONObject jsonObject = new JSONObject(); + jsonObject.put("cj","hh"); + ProducerRecord producerRecord = new ProducerRecord(topic,jsonObject.toString()); + kafkaProducer.send(producerRecord); + + return "success"; + } + + @GetMapping("sendMq") + public String sendMq(){ + String message="发送一条信息-mq"; + rabbitMQProducerUtil.basicSendMessage("basic",message); + return "success-mq"; + }; + + + + + + + + + + + + + + + + + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java index 8111375..82761e8 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java @@ -13,7 +13,13 @@ import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; - +/** + * 事件实体类 + * @author 刘武 + * @package:com.muyu.event.domain + * @name:Event + * @date:2024/9/28 23:10 + */ @Data @AllArgsConstructor @NoArgsConstructor diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/EventActuate.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/EventActuate.java deleted file mode 100644 index 9ccd57e..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/EventActuate.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.muyu.event.domian; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -import java.util.List; - -/** - * 事件驱动对象 - * @Author 刘武 - * @Data 2024/9/29 - */ -@Data -@SuperBuilder -@AllArgsConstructor -@NoArgsConstructor -public class EventActuate { - /** - * json数据 - */ - private String jsonData; - /** - * 事件驱动key集合 - */ - private List eventKeys; -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/eventDispose/AutoStartupEventListener.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/eventDispose/AutoStartupEventListener.java deleted file mode 100644 index 6eec2db..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/eventDispose/AutoStartupEventListener.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.muyu.event.eventDispose; - - -import com.muyu.event.basics.StartEvent; -import com.muyu.event.domian.EventActuate; -import org.springframework.context.ApplicationListener; -import org.springframework.stereotype.Component; - -/** - * @author 刘武 - * @package: - * @name:AutoStartupEventListener - * @date:2024/9/29 - */ -@Component -public class AutoStartupEventListener implements ApplicationListener { - - @Override - public void onApplicationEvent(StartEvent event) { - - EventActuate eventActuate = event.getEventActuate(); - - } - -} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/eventDispose/StorageEvent.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/eventDispose/StorageEvent.java deleted file mode 100644 index 70d6e79..0000000 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/eventDispose/StorageEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.muyu.event.eventDispose; - - -import com.muyu.event.basics.EventProcessBasics; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.extern.log4j.Log4j2; - -/** - * @author 刘武 - * @package: - * @name:StorageEvent - * @date:2024/9/29 - */ -@EqualsAndHashCode(callSuper = true) -@Log4j2 -@Data -@AllArgsConstructor -public class StorageEvent extends EventProcessBasics { - /** - * 事件名称 - */ - private String eventName; - - @Override - public void handleEvent(String eventKey) { - if (eventKey.equals(eventName)){ - log.info("开始执行 [{}] 事件", eventKey); - - }else if (nextEvent != null){ - nextEvent.handleEvent(eventKey); - }else { - log.info("处理结束,最后处理的事件为 [{}]", eventKey); - } - } -} 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 new file mode 100644 index 0000000..bfbfd04 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java @@ -0,0 +1,38 @@ +package com.muyu.event.listener; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.event.basic.EventCustom; +import com.muyu.event.basic.EventListener; + + +import java.util.ArrayList; +import java.util.List; + +/** + * 添加数据库事件 + * @program: cloud-server + * @author: cuiyongxing + * @create: 2024-09-29 17:34 + **/ +public class AddDatabaseListener implements EventListener { + + + @Override + public void onEvent(EventCustom event) { + + JSONObject jsonObject = event.getData(); + List keys = new ArrayList<>(); + List values = new ArrayList<>(); + + jsonObject.forEach((key, value) -> { + keys.add(key); + values.add((String) value); + }); + + } + + @Override + public void onApplicationEvent(EventCustom event) { + onEvent(event); + } +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/DataService.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/DataService.java new file mode 100644 index 0000000..a06f76c --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/DataService.java @@ -0,0 +1,19 @@ +package com.muyu.event.service; + +/** + * @author 刘武 + * @package:com.muyu.event.service.impl + * @name:DataService + * @date:2024/9/29 20:23 + */ +public interface DataService { + + void warnData(String data); + + + + + + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/TestService.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/TestService.java new file mode 100644 index 0000000..a7e2b7c --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/TestService.java @@ -0,0 +1,10 @@ +package com.muyu.event.service; + +/** + * @author 刘武 + * @package:com.muyu.event.service + * @name:TestService + * @date:2024/9/29 20:59 + */ +public interface TestService { +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/DataServiceImpl.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/DataServiceImpl.java new file mode 100644 index 0000000..649c0ce --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/DataServiceImpl.java @@ -0,0 +1,26 @@ +package com.muyu.event.service.impl; + +import com.muyu.event.service.DataService; +import org.springframework.stereotype.Service; + +/** + * @author 刘武 + * @package:com.muyu.event.service.impl + * @name:DataServiceImpl + * @date:2024/9/29 20:24 + */ +@Service +public class DataServiceImpl implements DataService { + + + + @Override + public void warnData(String data) { + + + + + + + } +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/TestServiceImpl.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/TestServiceImpl.java new file mode 100644 index 0000000..79100a8 --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/service/impl/TestServiceImpl.java @@ -0,0 +1,20 @@ +package com.muyu.event.service.impl; + +import com.muyu.event.service.TestService; +import org.springframework.stereotype.Service; + +/** + * @author 刘武 + * @package:com.muyu.event.service.impl + * @name:TestServiceImpl + * @date:2024/9/29 21:00 + */ +@Service +public class TestServiceImpl implements TestService { + + + + + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/util/CacheUtil.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/util/CacheUtil.java new file mode 100644 index 0000000..c2de42f --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/util/CacheUtil.java @@ -0,0 +1,37 @@ +package com.muyu.event.util; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import org.springframework.stereotype.Component; + +/** + * 缓存工具类 + * + * @program: cloud-server + * @author: 刘武 + * @create: 2024-09-30 10:08 + **/ +@Component +public class CacheUtil { + + private final Cache cache; + + public CacheUtil() { + this.cache = Caffeine.newBuilder() + .maximumSize(500L) + .build(); + } + + public T get(String key) { + return cache.getIfPresent(key); + } + + public void put(String key, T value) { + cache.put(key, value); + } + + public void remove(String key) { + cache.invalidate(key); + } + +} diff --git a/cloud-modules/cloud-event/src/main/resources/bootstrap.yml b/cloud-modules/cloud-event/src/main/resources/bootstrap.yml index f0ff80f..1bc0fa4 100644 --- a/cloud-modules/cloud-event/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-event/src/main/resources/bootstrap.yml @@ -1,14 +1,16 @@ # Tomcat server: port: 10009 + # nacos线上地址 nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: four + namespace: yzl # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring +spring: amqp: deserialization: trust: @@ -51,9 +53,8 @@ nacos: - 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.fence.mapper: DEBUG + com.muyu.system.mapper: DEBUG 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 cb7e8d5..3a1eb6a 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: four + namespace: yzl # Spring spring: diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableColumnServiceImpl.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableColumnServiceImpl.java index 043c83b..b608eb5 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableColumnServiceImpl.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableColumnServiceImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 业务字段 服务层实现 + * 业务字段 业务逻辑层实现 * * @author ruoyi */ diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableServiceImpl.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableServiceImpl.java index 8cdefc5..872897c 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableServiceImpl.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/GenTableServiceImpl.java @@ -40,7 +40,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** - * 业务 服务层实现 + * 业务 业务逻辑层实现 * * @author ruoyi */ 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 0b7bdc1..c5e8cb9 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: four + namespace: yzl # 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 d3aa7ca..f8ef4d5 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 @@ -10,10 +10,7 @@ import com.muyu.common.log.enums.BusinessType; import com.muyu.common.security.annotation.InnerAuth; import com.muyu.common.security.annotation.RequiresPermissions; import com.muyu.common.security.utils.SecurityUtils; -import com.muyu.common.system.domain.SysDept; -import com.muyu.common.system.domain.SysRole; -import com.muyu.common.system.domain.SysUser; -import com.muyu.common.system.domain.LoginUser; +import com.muyu.common.system.domain.*; import com.muyu.system.domain.resp.AuthRoleResp; import com.muyu.system.domain.resp.UserDetailInfoResp; import com.muyu.system.domain.resp.UserInfoResp; @@ -136,6 +133,15 @@ public class SysUserController extends BaseController { return Result.success(userService.registerUser(sysUser)); } + /** + * 入驻企业信息 + */ + @InnerAuth + @PostMapping("/enterprise") + public Result enterprise (@RequestBody Business enterprise){ + + return Result.success(userService.enterprise(enterprise)); + } /** * 获取用户信息 * 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 90ae439..3dc6b0b 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 @@ -1,6 +1,7 @@ package com.muyu.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.Business; import com.muyu.common.system.domain.SysUser; import org.apache.ibatis.annotations.Param; @@ -66,6 +67,20 @@ public interface SysUserMapper extends BaseMapper { */ int insertUser(SysUser user); + /** + * 企业入驻 + * @param enterprise + * @return + */ + int enterprise(Business enterprise); + + /** + * 企业管理添加 + * @param enterprise + * @return + */ + int enterPriseAdd(Business enterprise); + /** * 修改用户信息 * @@ -142,4 +157,6 @@ public interface SysUserMapper extends BaseMapper { List selectCompanyList(); + + } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysConfigService.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysConfigService.java index 4ebc241..dadf990 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysConfigService.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysConfigService.java @@ -6,6 +6,7 @@ import com.muyu.system.domain.SysConfig; import java.util.List; /** + * 配置plus业务层 * @author DongZl * @description: 配置plus业务层 * @Date 2023-11-13 上午 10:06 diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysDeptService.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysDeptService.java index e3d0b28..b259732 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysDeptService.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysDeptService.java @@ -7,7 +7,7 @@ import com.muyu.system.domain.vo.TreeSelect; import java.util.List; /** - * 部门管理 服务层 + * 部门管理 业务逻辑层 * * @author muyu */ 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 a36a4f0..7dc514c 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 @@ -1,6 +1,7 @@ package com.muyu.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.Business; import com.muyu.common.system.domain.SysUser; import java.util.List; @@ -133,6 +134,7 @@ public interface SysUserService extends IService { */ boolean registerUser(SysUser user); + boolean enterprise(Business enterprise); /** * 修改用户信息 * @@ -228,4 +230,5 @@ public interface SysUserService extends IService { List selectCompanyList(); + } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java index bc07cc8..a08ad64 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.Objects; /** + * 配置plus业务实现层 * @author DongZl * @description: 配置plus业务实现层 * @Date 2023-11-13 上午 10:06 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 7bba2ee..bc4162a 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 @@ -8,6 +8,7 @@ import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.bean.BeanValidators; import com.muyu.common.datascope.annotation.DataScope; import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.Business; import com.muyu.common.system.domain.SysRole; import com.muyu.common.system.domain.SysUser; import com.muyu.system.domain.SysPost; @@ -257,6 +258,17 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.insertUser(user) > 0; } + /** + * 企业入驻 + * @param enterprise + * @return + */ + @Override + public boolean enterprise(Business enterprise){ + userMapper.enterPriseAdd(enterprise); + return userMapper.enterprise(enterprise) > 0; + } + /** * 修改保存用户信息 * 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 c23843a..6023ef5 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 @@ -221,6 +221,13 @@ sysdate() ) + + INSERT INTO `datasource`.`datasource` (`id`, `firm_name`, `database_name`) VALUES (NULL, #{firmName}, #{databaseName}); + + + INSERT INTO `saas`.`tb_enterprise` (`enterprise_id`, `enterprise_name`, `enterprise_car_count`, `enterprise_fence_count`, `enterprise_database_name`) + VALUES (NULL, #{firmName}, 0, 0, #{databaseName}); + update sys_user diff --git a/cloud-modules/cloud-modules-template/pom.xml b/cloud-modules/cloud-modules-template/pom.xml new file mode 100644 index 0000000..12015f9 --- /dev/null +++ b/cloud-modules/cloud-modules-template/pom.xml @@ -0,0 +1,109 @@ + + + 4.0.0 + + com.muyu + cloud-modules + 3.6.3 + + + cloud-modules-template + + + cloud-modules-template 协议解析模块 + + + + + + + + + + + + + com.muyu.server + saas-server + 3.6.3 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-datascope + + + + + com.muyu + cloud-common-log + + + + + com.muyu + cloud-common-api-doc + + + + + com.muyu + cloud-common-xxl + + + + org.springframework.boot + spring-boot-starter-data-redis + + + redis.clients + jedis + + + + + 17 + 17 + UTF-8 + + + diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/CloudTemplateApplication.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/CloudTemplateApplication.java new file mode 100644 index 0000000..359305f --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/CloudTemplateApplication.java @@ -0,0 +1,19 @@ +package com.muyu.template; +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; +/** + * @author liuxinyue + * @Package:com.muyu.template + * @name:CloudTemplateApplication + * @Date:2024/9/30 10:36 + */ +@EnableCustomConfig +@EnableMyFeignClients +@SpringBootApplication +public class CloudTemplateApplication { + public static void main(String[] args) { + SpringApplication.run(CloudTemplateApplication.class, args); + } +} 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 new file mode 100644 index 0000000..48bb64c --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java @@ -0,0 +1,174 @@ +package com.muyu.template.config; +import cn.hutool.json.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.muyu.cache.MessageTemplateCacheService; +import com.muyu.cache.MessageTemplateTypeCacheService; +import com.muyu.cache.SysCarCacheService; +import com.muyu.cache.TemplateCacheService; +import com.muyu.common.domain.MessageTemplate; +import com.muyu.common.domain.MessageTemplateType; +import com.muyu.common.domain.SysCar; +import com.muyu.common.domain.Template; +import com.muyu.common.domain.resp.SysCarVo; +import com.muyu.common.redis.service.RedisService; + +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 org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +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 + * @name:MqttConfigure + * @Date:2024/9/28 16:10 + */ +@Log4j2 +@Component +public class MqttConfigure { + + @Autowired + private RedisService redisService; + + @Autowired + private SysCarCacheService service; + + @Autowired + private MessageTemplateCacheService messageTemplateCacheService; + + @Autowired + private MessageTemplateTypeCacheService messageTemplateTypeCacheService; + + @Autowired + private KafkaProducer kafkaProducer; + + @PostConstruct + public void MQTTMonitoring(){ + + String topic = "car"; + int qos = 2; + String broker = "tcp://47.101.53.251:1883"; + String clientId = "lxy"; + try { + MqttClient sampleClient = new MqttClient(broker, clientId); + MqttConnectOptions connOpts = new MqttConnectOptions(); + //是否清空session + connOpts.setCleanSession(false); + log.info("Connecting to broker: " + broker); + //连接 + sampleClient.connect(connOpts); + sampleClient.subscribe(topic,0); + sampleClient.setCallback(new MqttCallback() { + //连接丢失(报错) + @Override + public void connectionLost(Throwable throwable) { + log.error("error:"+throwable.getMessage()); + } + //消息已经接收到 + @Override + public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { + // 将MQTT消息转换为字符串 + String messageContent = new String(mqttMessage.getPayload()); + // 解析JSON字符串 + JSONObject jsonObject = new JSONObject(messageContent); + // 从JSON对象中获取"msg"字段的值 + String msgValue = jsonObject.getStr("msg"); + log.info("接收到的报文为:"+msgValue); + messageParsing(msgValue); + } + //交付完成 + @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(); + } + } + + 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(1, 18 ); + log.info("carVin码为:" + carVin); + //根据VIN码获取车辆信息 + SysCar carByVin = null; + List carList = service.get("carList"); + if(carList==null){ + throw new RuntimeException("Redis未获取到车辆数据!!!"); + }else{ + // 使用 HashMap 存储车信息,以 VIN 作为键 + Map carMap = carList.stream() + .collect(Collectors.toMap(SysCarVo::getCarVin, Function.identity())); + carByVin = carMap.get(carVin); + } + + log.info("车辆信息为:" + carByVin); + //对应车辆所对应的报文模版 + Integer templateId = carByVin.getTemplateId(); + List messageTemplateTypes=null; + String redisKey = "messageTemplateTypeList"; + //key存在 + Boolean b = redisService.hasKey(redisKey); + if (b) { + messageTemplateTypes = messageTemplateTypeCacheService.get(redisKey); + }else{ + throw new RuntimeException("请先将配置存入Redis!!!"); + } + //将模版里面有的配置进行循环 + for (MessageTemplateType messageTemplateType : messageTemplateTypes) { + //开始位置 + Integer startIndex = messageTemplateType.getStartIndex() - 1; + //结束位置 + Integer endIndex = messageTemplateType.getEndIndex(); + //将每个解析后的字段都存入到JSON对象中 + jsonObject.put(messageTemplateType.getMessageField(), result.substring(startIndex, endIndex)); + } + log.info("解析后的报文是:" + jsonObject); + sendKafka(jsonObject); + log.info("发送kafka成功"); + return jsonObject; + } + + //kafka发送消息 + public void sendKafka(JSONObject jsonObject){ + ProducerRecord stringStringProducerRecord = new ProducerRecord<>("four_car", jsonObject.toString()); + kafkaProducer.send(stringStringProducerRecord); + log.info("kafka发送成功"); + } + +} 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 new file mode 100644 index 0000000..1e55cda --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/controller/TemplateController.java @@ -0,0 +1,21 @@ +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 new file mode 100644 index 0000000..e7d8821 --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java @@ -0,0 +1,203 @@ +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 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.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +/** + * @author liuxinyue + * @Package:com.muyu.template + * @name:test + * @Date:2024/10/4 9:42 + */ +@Log4j2 +public class test { + + private static int DURATION_SECONDS = 60; + private static List receivedStrings = new ArrayList<>(); + private static int elapsedSeconds = 0; + private static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private static String file="elapsed"; + @Resource + private RedisTemplate redisTemplate; + + @Resource + private RedisService redisService; + + 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(); + } + } + + //查找车类型对应的策略 + 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); + } + } + } + + String templateIds=null; + for (WarnRule rule : warnRuleList) { + //滑窗时间 + Long slideTime = rule.getSlideTime(); + if(slideTime!=null){ + DURATION_SECONDS= Math.toIntExact(slideTime); + } + templateIds+=","+rule.getMsgTypeId(); + } + + String[] templateIdSplit = templateIds.split(","); + //最终获取到的报文模版 使用他进行比较 + List messageTemplateTypes=null; + for (String s : templateIdSplit) { + for (MessageTemplateType messageTemplateType : templateTypeList1) { + if(s.equals(messageTemplateType.getTemplateId())){ + messageTemplateTypes.add(messageTemplateType); + } + } + } + + JSONObject entries = messageParsing(message); + //将解析后的数据添加到List receivedStrings中 + receivedStrings.add(entries); + cleanUpOldStrings(); + checkForSpeeding(); + } + + + // 清理超过指定秒数内的数据 + 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); + } + } + 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 new file mode 100644 index 0000000..32f1447 --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test2.java @@ -0,0 +1,85 @@ +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/banner.txt b/cloud-modules/cloud-modules-template/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/cloud-modules/cloud-modules-template/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-template/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..0ea8333 --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/resources/logback/dev.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-template/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-template/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..a8f7c06 --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/resources/logback/prod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-template/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-template/src/main/resources/logback/test.xml new file mode 100644 index 0000000..a8f7c06 --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/resources/logback/test.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml index 7739f36..8ac2666 100644 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml @@ -7,12 +7,10 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: sx + namespace: four # Spring spring: - main: - allow-bean-definition-overriding: true application: # 应用名称 name: cloud-vehicleGateway diff --git a/cloud-modules/pom.xml b/cloud-modules/pom.xml index f27c21f..64fc723 100644 --- a/cloud-modules/pom.xml +++ b/cloud-modules/pom.xml @@ -24,8 +24,10 @@ saas cloud-modules-vehiclegateway cloud-event + cloud-modules-template + cloud-modules pom diff --git a/cloud-modules/saas/pom.xml b/cloud-modules/saas/pom.xml index da04f8a..7e02284 100644 --- a/cloud-modules/saas/pom.xml +++ b/cloud-modules/saas/pom.xml @@ -22,6 +22,12 @@ + + + org.springframework.amqp + spring-rabbit + + org.springframework.integration @@ -29,6 +35,12 @@ 6.2.5 + + com.muyu + cloud-common-kafka + 3.6.3 + + org.springframework.kafka @@ -39,6 +51,9 @@ org.apache.kafka kafka-clients + + + diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/CarTypeCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/CarTypeCacheService.java new file mode 100644 index 0000000..08de218 --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/CarTypeCacheService.java @@ -0,0 +1,34 @@ +package com.muyu.cache; + +import com.muyu.common.domain.CarType; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 车辆类型缓存 + * @Version 1.0 + * @Data 2024-09-30 16:31:44 + */ +@Component +public class CarTypeCacheService extends CacheAbsBasic> { + /** + * 缓存key前缀 + * @return + */ + @Override + public String keyPre() { + return "carType:"; + } + + /** + * 解码key + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/DataTypeCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/DataTypeCacheService.java new file mode 100644 index 0000000..aa651cc --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/DataTypeCacheService.java @@ -0,0 +1,35 @@ +package com.muyu.cache; + +import com.muyu.common.domain.DataType; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 数据类型缓存 + * @Version 1.0 + * @Data 2024-09-30 10:57:24 + */ +@Component +public class DataTypeCacheService extends CacheAbsBasic> { + /** + * key前缀 + * @return + */ + @Override + public String keyPre() { + return "DataType"; + } + + + /** + * 解码 + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceCacheService.java index 85634fa..f8d0e4c 100644 --- a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceCacheService.java +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceCacheService.java @@ -3,6 +3,8 @@ package com.muyu.cache; import com.muyu.common.domain.database.ElectronicFence; import org.springframework.stereotype.Component; +import java.util.List; + /** * @Author YuPing * @Description 电子围栏缓存 @@ -10,7 +12,7 @@ import org.springframework.stereotype.Component; * @Data 2024-09-29 20:53:46 */ @Component -public class ElectronicFenceCacheService extends CacheAbsBasic{ +public class ElectronicFenceCacheService extends CacheAbsBasic>{ /** * key前缀 * @return diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceGroupCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceGroupCacheService.java index dcde553..5142e3b 100644 --- a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceGroupCacheService.java +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/ElectronicFenceGroupCacheService.java @@ -3,6 +3,8 @@ package com.muyu.cache; import com.muyu.common.domain.database.ElectronicFenceGroup; import org.springframework.stereotype.Component; +import java.util.List; + /** * @Author YuPing * @Description 围栏组缓存 @@ -10,7 +12,7 @@ import org.springframework.stereotype.Component; * @Data 2024-09-29 20:57:46 */ @Component -public class ElectronicFenceGroupCacheService extends CacheAbsBasic{ +public class ElectronicFenceGroupCacheService extends CacheAbsBasic>{ /** * key前缀 * @return diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/EnterpriseCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/EnterpriseCacheService.java index b2b97a2..9abbdba 100644 --- a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/EnterpriseCacheService.java +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/EnterpriseCacheService.java @@ -3,6 +3,8 @@ package com.muyu.cache; import com.muyu.common.domain.Enterprise; import org.springframework.stereotype.Component; +import java.util.List; + /** * @author yuping * @package com.muyu.cache @@ -10,7 +12,7 @@ import org.springframework.stereotype.Component; * @date 2024/9/29 20:21 企业缓存 */ @Component -public class EnterpriseCacheService extends CacheAbsBasic{ +public class EnterpriseCacheService extends CacheAbsBasic>{ /** * 缓存前缀 * @return diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/MessageTemplateCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/MessageTemplateCacheService.java new file mode 100644 index 0000000..376d385 --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/MessageTemplateCacheService.java @@ -0,0 +1,34 @@ +package com.muyu.cache; + +import com.muyu.common.domain.MessageTemplate; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 报文缓存 + * @Version 1.0 + * @Data 2024-09-30 11:01:13 + */ +@Component +public class MessageTemplateCacheService extends CacheAbsBasic>{ + /** + * key前缀 + * @return + */ + @Override + public String keyPre() { + return "message_template"; + } + + /** + * 解码 + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/MessageTemplateTypeCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/MessageTemplateTypeCacheService.java new file mode 100644 index 0000000..df1fe14 --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/MessageTemplateTypeCacheService.java @@ -0,0 +1,34 @@ +package com.muyu.cache; + +import com.muyu.common.domain.MessageTemplateType; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 报文模版类型缓存 + * @Version 1.0 + * @Data 2024-09-30 11:04:43 + */ +@Component +public class MessageTemplateTypeCacheService extends CacheAbsBasic>{ + /** + * 缓存key前缀 + * @return + */ + @Override + public String keyPre() { + return "messageTemplateType"; + } + + /** + * 解码 + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarCacheService.java new file mode 100644 index 0000000..b5099f1 --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarCacheService.java @@ -0,0 +1,35 @@ +package com.muyu.cache; + +import com.muyu.common.domain.SysCar; +import com.muyu.common.domain.resp.SysCarVo; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 车辆缓存 + * @Version 1.0 + * @Data 2024-09-30 16:35:14 + */ +@Component +public class SysCarCacheService extends CacheAbsBasic>{ + /** + * key前缀 + * @return + */ + @Override + public String keyPre() { + return "car"; + } + + /** + * 解码 + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultCacheService.java index 4ab25cc..66bda2f 100644 --- a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultCacheService.java +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultCacheService.java @@ -3,6 +3,8 @@ package com.muyu.cache; import com.muyu.common.domain.SysCarFault; import org.springframework.stereotype.Component; +import java.util.List; + /** * @Author YuPing * @Description 故障缓存 @@ -10,7 +12,7 @@ import org.springframework.stereotype.Component; * @Data 2024-09-29 21:10:31 */ @Component -public class SysCarFaultCacheService extends CacheAbsBasic{ +public class SysCarFaultCacheService extends CacheAbsBasic>{ /** * 缓存前缀 * @return diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultMessageCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultMessageCacheService.java index d436372..178123f 100644 --- a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultMessageCacheService.java +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/SysCarFaultMessageCacheService.java @@ -3,6 +3,8 @@ package com.muyu.cache; import com.muyu.common.domain.SysCarFaultMessage; import org.springframework.stereotype.Component; +import java.util.List; + /** * @Author YuPing * @Description 站内信缓存 @@ -10,7 +12,7 @@ import org.springframework.stereotype.Component; * @Data 2024-09-29 21:13:19 */ @Component -public class SysCarFaultMessageCacheService extends CacheAbsBasic{ +public class SysCarFaultMessageCacheService extends CacheAbsBasic>{ @Override public String keyPre() { return "sysCarFaultMessage"; diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/TemplateCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/TemplateCacheService.java new file mode 100644 index 0000000..9ca26c7 --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/TemplateCacheService.java @@ -0,0 +1,34 @@ +package com.muyu.cache; + +import com.muyu.common.domain.Template; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 报文模版缓存 + * @Version 1.0 + * @Data 2024-09-30 18:21:46 + */ +@Component +public class TemplateCacheService extends CacheAbsBasic>{ + /** + * 缓存key前缀 + * @return + */ + @Override + public String keyPre() { + return "template"; + } + + /** + * 解码 + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/WarnRuleCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/WarnRuleCacheService.java new file mode 100644 index 0000000..8adc7e2 --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/WarnRuleCacheService.java @@ -0,0 +1,34 @@ +package com.muyu.cache; + +import com.muyu.common.domain.resp.WarnRuleResp; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 预警规则缓存 + * @Version 1.0 + * @Data 2024-09-30 16:37:09 + */ +@Component +public class WarnRuleCacheService extends CacheAbsBasic>{ + /** + * 缓存key前缀 + * @return + */ + @Override + public String keyPre() { + return "warnRule"; + } + + /** + * 解码 + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/WarnStrategyCacheService.java b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/WarnStrategyCacheService.java new file mode 100644 index 0000000..63bcbbb --- /dev/null +++ b/cloud-modules/saas/saas-cache/src/main/java/com/muyu/cache/WarnStrategyCacheService.java @@ -0,0 +1,34 @@ +package com.muyu.cache; + +import com.muyu.common.domain.resp.WarnStrategyResp; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author YuPing + * @Description 预警策略缓存 + * @Version 1.0 + * @Data 2024-09-30 16:38:35 + */ +@Component +public class WarnStrategyCacheService extends CacheAbsBasic> { + /** + * 缓存key前缀 + * @return + */ + @Override + public String keyPre() { + return "warnStrategy"; + } + + /** + * 解码key + * @param key 编码key + * @return + */ + @Override + public String decode(String key) { + return key.replace(keyPre(), ""); + } +} diff --git a/cloud-modules/saas/saas-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-modules/saas/saas-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index d94228b..ada97f4 100644 --- a/cloud-modules/saas/saas-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/cloud-modules/saas/saas-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,5 +1,13 @@ +com.muyu.cache.CarTypeCacheService +com.muyu.cache.DataTypeCacheService com.muyu.cache.ElectronicFenceCacheService com.muyu.cache.ElectronicFenceGroupCacheService com.muyu.cache.EnterpriseCacheService +com.muyu.cache.MessageTemplateCacheService +com.muyu.cache.MessageTemplateTypeCacheService +com.muyu.cache.SysCarCacheService com.muyu.cache.SysCarFaultCacheService com.muyu.cache.SysCarFaultMessageCacheService +com.muyu.cache.TemplateCacheService +com.muyu.cache.WarnRuleCacheService +com.muyu.cache.WarnStrategyCacheService diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/CarType.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/CarType.java index ccaa7ca..3407e9d 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/CarType.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/CarType.java @@ -7,12 +7,11 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * 车辆类型对象 - * @Author:liuxinyue - * @Package:com.sheep.message.domain - * @Project:cloud-server-c - * @name:MessageTemplateType - * @Date:2024/9/18 21:01 + * 车辆类型 + * @author sx + * @package com.muyu.common.domain + * @name CarType + * @date 2024/9/22 14:36 */ @Data @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/DataType.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/DataType.java index dc7ea40..88681e8 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/DataType.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/DataType.java @@ -10,8 +10,8 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import java.io.Serializable; /** - * 数据类型对象 - * @Author:liuxinyue + * 数据类型表 + * @author liuxinyue * @Package:com.sheep.message.domain * @Project:cloud-server-c * @name:DataType @@ -29,10 +29,10 @@ public class DataType implements Serializable{ * 数据类型ID */ @TableId(value = "data_type_id",type = IdType.AUTO) - private Integer dataTypeId; + private Integer DataTypeId; /** * 数据类型名称 */ - private String dataTypeName; + private String DataTypeName; } diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Enterprise.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Enterprise.java index d02f6ab..f4f1a88 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Enterprise.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Enterprise.java @@ -1,11 +1,15 @@ package com.muyu.common.domain; +import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.common.core.annotation.Excel; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author YuPing + * 企业运营实体类 + * @author yuping * @Description 企业运营实体类 * @Version 1.0 * @Data 2024-09-26 20:22:04 @@ -13,21 +17,32 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor +@TableName("enterprise") public class Enterprise { /** * 企业编号 */ + @Excel(name = "企业编号") private Integer enterpriseId; /** * 企业名称 */ + @Excel(name = "企业名称") private String enterpriseName; /** * 企业车辆数量 */ + @Excel(name = "企业拥有车辆数据") private Integer enterpriseCarCount; /** * 企业电子围栏数量 */ + @Excel(name = "企业所属电子围栏") private Integer enterpriseFenceCount; + + /** + * 企业数据库名称 + */ + @Excel(name = "企业所属数据库") + private String enterpriseDatabaseName; } diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplate.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplate.java index 8f21d62..faa8ca0 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplate.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplate.java @@ -1,5 +1,6 @@ package com.muyu.common.domain; +import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.Data; @@ -9,8 +10,8 @@ import lombok.experimental.SuperBuilder; import java.sql.Date; /** - * 新能源车模版 - * @Author:liuxinyue + * 报文模版 + * @author liuxinyue * @Package:com.template.domain * @Project:cloud-server * @name:MessageTemplate @@ -21,6 +22,7 @@ import java.sql.Date; @NoArgsConstructor @SuperBuilder @Tag(name = "报文") +@TableName("message_template") public class MessageTemplate { /** 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 3cdd2a5..3c2cd95 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 @@ -11,8 +11,8 @@ import lombok.experimental.SuperBuilder; import java.io.Serializable; /** - * 模版对应的配置 - * @Author:liuxinyue + * 报文模版 + * @author liuxinyue * @Package:com.sheep.message.domain * @Project:cloud-server-c * @name:MessageTemplateType @@ -26,7 +26,6 @@ import java.io.Serializable; @TableName(value = "message_template_type",autoResultMap = true) public class MessageTemplateType implements Serializable { - /** * 主键 */ diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCar.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCar.java index 85d7e28..c40467d 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCar.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCar.java @@ -10,12 +10,11 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; /** - * 车辆对象 - * @Author:liuxinyue - * @Package:com.sheep.message.domain - * @Project:cloud-server-c - * @name:MessageTemplateType - * @Date:2024/9/18 21:01 + * 车辆管理表 + * @author sx + * @package com.muyu.common.domain + * @name SysCar + * @date 2024-09-29 14:39:33 */ @Data @AllArgsConstructor @@ -23,7 +22,6 @@ import lombok.NoArgsConstructor; @EqualsAndHashCode(callSuper = true) @TableName(value = "sys_car",autoResultMap = true) public class SysCar extends BaseEntity { - @TableId(value = "id",type = IdType.AUTO) private Long id; private String carVin; diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCarEnterprise.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCarEnterprise.java deleted file mode 100644 index b6bf5a6..0000000 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCarEnterprise.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.muyu.common.domain; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.muyu.common.core.annotation.Excel; -import com.muyu.common.core.web.domain.BaseEntity; -import lombok.*; - -/** - * 企业信息 sys_car_enterprise - * @author 袁子龙 - * @package com.muyu.breakdown.domain - * @name: SysCarEnterprise - * @date: 2024/9/26 19:54 - */ - -@Data -@Setter -@Getter -@NoArgsConstructor -@AllArgsConstructor -@TableName("sys_car_enterprise") -public class SysCarEnterprise extends BaseEntity { - private static final long serialVersionUID = 1L; - - /** 企业id*/ - @TableId(type = IdType.AUTO) - private Long id; - - /** 企业名称*/ - @Excel(name = "企业名称") - private String enterpriseName; - /** 用户姓名 */ - @Excel(name = "用户姓名") - private String name; - - @Excel(name = "用户职位") - private String position; - - @Excel(name = "公司所在省") - private String province; - - @Excel(name = "公司所在市") - private String city; - - @Excel(name = "公司所在县/区") - private String county; - - @Excel(name = "公司详细地址") - private String address; - - @Excel(name = "统一社会信用代码") - private String creditCode; - - @Excel(name = "营业执照") - private String businessLicense; - -} diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCarLog.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCarLog.java index 1f1833d..5e008b3 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCarLog.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/SysCarLog.java @@ -11,12 +11,11 @@ import lombok.NoArgsConstructor; import java.util.Date; /** - * 车辆记录对象 - * @Author:liuxinyue - * @Package:com.sheep.message.domain - * @Project:cloud-server-c - * @name:MessageTemplateType - * @Date:2024/9/18 21:01 + * 车辆上下线记录表 + * @author sx + * @package com.muyu.common.domain + * @name SysCarLog + * @date 2024-09-29 14:34:15 */ @Data @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Template.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Template.java index 70dbf2c..7d0bff3 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Template.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/Template.java @@ -3,22 +3,25 @@ package com.muyu.common.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** - * 报文模版对象 - * @Author:liuxinyue + * 报文模版 + * @author liuxinyue * @Package:com.template.domain * @Project:cloud-server-c * @name:Template * @Date:2024/9/20 12:04 */ + @Data @AllArgsConstructor @NoArgsConstructor @@ -47,5 +50,7 @@ public class Template { /** * 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; } diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnLogs.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnLogs.java index 6127a4c..f4f1c2c 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnLogs.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnLogs.java @@ -14,7 +14,7 @@ import java.util.Date; /** * 预警日志对象 warn_logs * - * @author muyu + * @author sx * @date 2024-09-20 */ diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnRule.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnRule.java index aa0005d..46bfb6c 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnRule.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnRule.java @@ -11,7 +11,7 @@ import lombok.NoArgsConstructor; /** * 预警规则对象 warn_rule * - * @author muyu + * @author sx * @date 2024-09-20 */ diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnStrategy.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnStrategy.java index fc29da5..0c84bba 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnStrategy.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/WarnStrategy.java @@ -11,7 +11,7 @@ import lombok.NoArgsConstructor; /** * 预警策略对象 warn_strategy * - * @author muyu + * @author sx * @date 2024-09-20 */ diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFence.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFence.java index 1d1e476..1b6eebc 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFence.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFence.java @@ -16,7 +16,8 @@ import lombok.experimental.SuperBuilder; import java.util.function.Supplier; /** - * @Author:yuping + * 电子围栏表 + * @author yuping * @Package:com.muyu.fence.domain * @Project:cloud-server * @name:ElectronicFence diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFenceGroup.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFenceGroup.java index 17b2f28..f23aafb 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFenceGroup.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/ElectronicFenceGroup.java @@ -16,7 +16,8 @@ import lombok.experimental.SuperBuilder; import java.util.function.Supplier; /** - * @Author:yuping + * 围栏组 + * @author yuping * @Package:com.muyu.fence.domain * @Project:cloud-server * @name:ElectronicFenceGroup diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/FenceGroupMid.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/FenceGroupMid.java index e668aac..6fea0c2 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/FenceGroupMid.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/database/FenceGroupMid.java @@ -9,7 +9,8 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author:yuping + * 围栏组连接表 + * @author yuping * @Package:com.muyu.fence.domain * @Project:cloud-server * @name:FenceGroupMid diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceAddReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceAddReq.java index a2fecad..33eaaa1 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceAddReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceAddReq.java @@ -10,7 +10,8 @@ import lombok.NoArgsConstructor; import java.util.Date; /** - * @Author:yuping + * 电动围栏添加请求参数 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:ElectroicAdd diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceListReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceListReq.java index 5265c85..6963ad3 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceListReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceListReq.java @@ -8,7 +8,8 @@ import lombok.NoArgsConstructor; import java.util.Date; /** - * @Author:yuping + * 电子围栏列表请求参数 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:ElectroicFenceReq diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceUpdReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceUpdReq.java index f0369c7..5be5b88 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceUpdReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectroicFenceUpdReq.java @@ -6,7 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author:yuping + * 电子围栏更新请求参数 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:ElectroicFenceUpdReq diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupAddReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupAddReq.java index dc32d20..33e570a 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupAddReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupAddReq.java @@ -9,7 +9,8 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Author:yuping + * 围栏组添加请求参数 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:ElectronicFenceGroupAddReq diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupListReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupListReq.java index 833e64c..5513c6c 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupListReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupListReq.java @@ -8,7 +8,8 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author:yuping + * 围栏组列表请求参数 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:ElectronicFenceGroupListReq diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupUpdReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupUpdReq.java index 73fad79..c87dc42 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupUpdReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/ElectronicFenceGroupUpdReq.java @@ -11,7 +11,8 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Author:yuping + * 围栏组修改请求参数 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:ElectronicFenceGroupAddReq diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceAndGroupBoundReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceAndGroupBoundReq.java index 0d6c4e0..36e4331 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceAndGroupBoundReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceAndGroupBoundReq.java @@ -9,7 +9,8 @@ import lombok.NoArgsConstructor; import java.util.List; /** - * @Author:yuping + * 用于绑定围栏和围栏组的请求 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:FenceAndGroupBoundReq diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceWayReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceWayReq.java index d420edc..58baef3 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceWayReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/FenceWayReq.java @@ -5,7 +5,8 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author:yuping + *围栏方式请求参数 + * @author yuping * @Package:com.muyu.fence.domain * @Project:cloud-server * @name:FenceWay diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/SysCarReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/SysCarReq.java index a773921..c1e9f8d 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/SysCarReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/SysCarReq.java @@ -5,6 +5,13 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +/** + * 汽车请求参数 + * @author sx + * @package com.muyu.common.domain.req + * @name SysCarReq + * @date 2024/9/22 14:36 + */ @Data @AllArgsConstructor @NoArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/WarnStrategyReq.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/WarnStrategyReq.java index 7ac776f..6f5eea2 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/WarnStrategyReq.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/req/WarnStrategyReq.java @@ -8,7 +8,7 @@ import lombok.NoArgsConstructor; /** * 预警策略对象 warn_strategy * - * @author muyu + * @author sx * @date 2024-09-20 */ diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/CarTypeResp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/CarTypeResp.java index ac4a196..4bd3d64 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/CarTypeResp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/CarTypeResp.java @@ -8,6 +8,13 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +/** + * 车辆类型返回对象 + * @author sx + * @package com.muyu.common.domain.resp + * @name CarTypeResp + * @date 2024/9/22 14:36 + */ @Data @AllArgsConstructor @NoArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceGroupResp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceGroupResp.java index bfc8e7f..d1d0ca7 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceGroupResp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceGroupResp.java @@ -10,12 +10,13 @@ import lombok.NoArgsConstructor; import java.util.List; + /** - * @Author:yuping - * @Package:com.muyu.fence.domain.resp - * @Project:cloud-server - * @name:ElectronicFenceGroupResp - * @Date:2024/9/22 10:22 + * 回显围栏组及绑定的电子围栏 + * @author yuping + * @package com.muyu.fence.domain.resp + * @name ElectronicFenceGroupResp + * @date 2024/9/22 14:36 */ @Data @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceResp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceResp.java index e20b965..1e27cfd 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceResp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/ElectronicFenceResp.java @@ -7,12 +7,14 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; /** - * @Author:yuping + *电子围栏组 + * @author yuping * @Package:com.muyu.fence.domain * @Project:cloud-server * @name:ElectronicFence * @Date:2024/9/17 16:34 */ + @Data @AllArgsConstructor @NoArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/GroupFenceListresp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/GroupFenceListresp.java index c6f947a..bbf2d6d 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/GroupFenceListresp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/GroupFenceListresp.java @@ -9,7 +9,8 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author:yuping + * 围栏组列表 + * @author yuping * @Package:com.muyu.fence.domain.req * @Project:cloud-server * @name:GroupFenceListresp diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarFaultLogVo.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarFaultLogVo.java index 59dcebb..30e3d5d 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarFaultLogVo.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarFaultLogVo.java @@ -6,7 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author:liuxinyue + * 故障记录 + * @author liuxinyue * @Package:com.muyu.domain.resp * @Project:cloud-server * @name:SysCarFaultLogVo diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java index e7f12b8..966d328 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java @@ -2,15 +2,20 @@ package com.muyu.common.domain.resp; import com.muyu.common.core.annotation.Excel; import com.muyu.common.domain.SysCar; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; +import lombok.*; +/** + * 车辆管理返回值 + * @author sx + * @package com.muyu.common.domain.resp + * @name SysCarVo + * @date 2024/9/22 14:36 + */ @Data @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) public class SysCarVo extends SysCar { @Excel(name = "车辆类型名称") diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnLogsResp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnLogsResp.java index 7af5b86..e7ba4ae 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnLogsResp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnLogsResp.java @@ -7,6 +7,13 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +/** + * 预警日志对象 + * @author sx + * @package com.muyu.common.domain.resp + * @name WarnLogsResp + * @date 2024/9/22 14:36 + */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnRuleResp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnRuleResp.java index 6d3466c..d91ec09 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnRuleResp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnRuleResp.java @@ -6,6 +6,13 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +/** + * 预警规则返回对象 + * @author sx + * @package com.muyu.common.domain.resp + * @name WarnRuleResp + * @date 2024/9/22 14:36 + */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnStrategyResp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnStrategyResp.java index 2fc423a..1faf781 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnStrategyResp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/WarnStrategyResp.java @@ -7,6 +7,13 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +/** + * 预警策略返回对象 + * @author sx + * @package com.muyu.common.domain.resp + * @anme WarnStrategyResp + * @date 2024/9/22 14:36 + */ @Data @NoArgsConstructor @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceModel.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceModel.java index 7d3bef3..67e50a6 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceModel.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceModel.java @@ -14,6 +14,10 @@ import lombok.NoArgsConstructor; /** * 电子围栏规则计算模型 + * @author yuping + * @package com.muyu.fence.domain + * @name ElectricFenceModel + * @date 2024/9/22 14:36 */ @Data @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceResultTmp.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceResultTmp.java index efb592b..c047d8d 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceResultTmp.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectricFenceResultTmp.java @@ -15,6 +15,10 @@ import java.util.Date; */ /** * 电子围栏转换临时对象 + * @author yuping + * @package com.muyu.fence.domain.utils + * @name ElectricFenceResultTmp + * @date 2024/9/22 14:36 */ @Data @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceResult.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceResult.java index bf7a50e..5f7bd4c 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceResult.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceResult.java @@ -18,6 +18,10 @@ import java.util.Date; /** * 电子围栏分析结果数据结构 + * @author yuping + * @package com.muyu.fence.domain + * @name ElectronicFenceResult + * @date 2024/9/22 14:36 */ @Data @AllArgsConstructor diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceSetting.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceSetting.java index 4238c01..2f6571b 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceSetting.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/utils/ElectronicFenceSetting.java @@ -10,7 +10,8 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; /** - * @Author:yuping + *电子围栏设置 + * @author yuping * @Package:com.muyu.fence.domain * @Project:cloud-server * @name:ElectronicFenceSetting diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaCommonProperties.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaCommonProperties.java deleted file mode 100644 index a713ae1..0000000 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaCommonProperties.java +++ /dev/null @@ -1,239 +0,0 @@ -package com.muyu.common.util; - -import java.util.Collection; -import java.util.Collections; - -/** - * kafka通用配置 - * @author liuxinyue - * @Package:com.muyu.common.util - * @name:KafkaCommonProperties - * @Date:2024/9/29 12:26 - */ -public class KafkaCommonProperties{ - - /** - * Kafka主机 - */ - private String kafkaHost = "47.101.53.251:9092"; - - /** - * 生产者:要求leader请求结束前收到的确认次数,来控制发送数据的持久化 - * 消息确认: - * 0:生产者不等待服务器确认,此时retry参数不生效 - * 1:leader写入记录到log,不会等待follower的确认即向生产者发送通知 - * all:leader等待所有副本通知,然后向生产者发送通知,保证所有数据落盘到所有副本,功能同设置为-1 - */ - private String ack = "all"; - - /** - * 生产者重试次数 - */ - private Integer retryTimes = 1; - - /** - * 生产者:向同一分区发送打包发送的数据量,单位:bytes,默认16384bytes=16K - */ - private Integer batchSize = 16384; - - /** - * 生产者:批量发送消息的间隔时间(延迟时间),单位:毫秒 - */ - private Integer lingerMs = 1; - - /** - * 生产者:可以使用的最大缓存空间,单位:bytes,默认33554432bytes=32M. - */ - private Integer bufferMemory = 33554432; - - /** - * 生产者:键编码器 - */ - private String keyEncoder = "org.apache.kafka.common.serialization.StringSerializer"; - - /** - * 生产者:值编码器 - */ - private String valueEncoder = "org.apache.kafka.common.serialization.StringSerializer"; - - /** - * 消费者:消费topic的组ID - */ - private String groupId = "my-group-id"; - - /** - * 消费者:后台定期提交offset - */ - private String autoCommit = "true"; - - /** - * 消费者提交offset的时间间隔:单位:毫秒,当enable.auto.commit为true时生效 - */ - private String autoCommitIntervalMs = "1000"; - - /** - * 消费者:键解码器 - */ - private String keyDecoder = "org.apache.kafka.common.serialization.StringDeserializer"; - - /** - * 消费者:值解码器 - */ - private String valueDecoder = "org.apache.kafka.common.serialization.StringDeserializer"; - - /** - * 消费者:重启后配置offset - * earliest:消费者恢复到当前topic最早的offset - * latest:消费者从最新的offset开始消费 - * none:如果消费者组没找到之前的offset抛出异常 - * 其他任何值都会抛出异常 - */ - private String autoOffsetReset = "latest"; - - /** - * TOPIC - */ - private Collection topic = Collections.singleton("my-topic"); - - public KafkaCommonProperties() { - - } - - public KafkaCommonProperties(String kafkaHost, String ack, Integer retryTimes, Integer batchSize, Integer lingerMs, Integer bufferMemory, String keyEncoder, String valueEncoder, String groupId, String autoCommit, String autoCommitIntervalMs, String keyDecoder, String valueDecoder, String autoOffsetReset, Collection topic) { - this.kafkaHost = kafkaHost; - this.ack = ack; - this.retryTimes = retryTimes; - this.batchSize = batchSize; - this.lingerMs = lingerMs; - this.bufferMemory = bufferMemory; - this.keyEncoder = keyEncoder; - this.valueEncoder = valueEncoder; - this.groupId = groupId; - this.autoCommit = autoCommit; - this.autoCommitIntervalMs = autoCommitIntervalMs; - this.keyDecoder = keyDecoder; - this.valueDecoder = valueDecoder; - this.autoOffsetReset = autoOffsetReset; - this.topic = topic; - } - - public String getKafkaHost() { - return kafkaHost; - } - - public void setKafkaHost(String kafkaHost) { - this.kafkaHost = kafkaHost; - } - - public String getAck() { - return ack; - } - - public void setAck(String ack) { - this.ack = ack; - } - - public Integer getRetryTimes() { - return retryTimes; - } - - public void setRetryTimes(Integer retryTimes) { - this.retryTimes = retryTimes; - } - - public Integer getBatchSize() { - return batchSize; - } - - public void setBatchSize(Integer batchSize) { - this.batchSize = batchSize; - } - - public Integer getLingerMs() { - return lingerMs; - } - - public void setLingerMs(Integer lingerMs) { - this.lingerMs = lingerMs; - } - - public Integer getBufferMemory() { - return bufferMemory; - } - - public void setBufferMemory(Integer bufferMemory) { - this.bufferMemory = bufferMemory; - } - - public String getKeyEncoder() { - return keyEncoder; - } - - public void setKeyEncoder(String keyEncoder) { - this.keyEncoder = keyEncoder; - } - - public String getValueEncoder() { - return valueEncoder; - } - - public void setValueEncoder(String valueEncoder) { - this.valueEncoder = valueEncoder; - } - - public String getGroupId() { - return groupId; - } - - public void setGroupId(String groupId) { - this.groupId = groupId; - } - - public String getAutoCommit() { - return autoCommit; - } - - public void setAutoCommit(String autoCommit) { - this.autoCommit = autoCommit; - } - - public String getAutoCommitIntervalMs() { - return autoCommitIntervalMs; - } - - public void setAutoCommitIntervalMs(String autoCommitIntervalMs) { - this.autoCommitIntervalMs = autoCommitIntervalMs; - } - - public String getKeyDecoder() { - return keyDecoder; - } - - public void setKeyDecoder(String keyDecoder) { - this.keyDecoder = keyDecoder; - } - - public String getValueDecoder() { - return valueDecoder; - } - - public void setValueDecoder(String valueDecoder) { - this.valueDecoder = valueDecoder; - } - - public String getAutoOffsetReset() { - return autoOffsetReset; - } - - public void setAutoOffsetReset(String autoOffsetReset) { - this.autoOffsetReset = autoOffsetReset; - } - - public Collection getTopic() { - return topic; - } - - public void setTopic(Collection topic) { - this.topic = topic; - } -} diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaConstants.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaConstants.java new file mode 100644 index 0000000..064911a --- /dev/null +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaConstants.java @@ -0,0 +1,16 @@ +package com.muyu.common.util; + +/** + * @author liuxinyue + * @Package:com.muyu.common.util + * @name:KafkaConstants + * @Date:2024/9/29 20:22 + */ +public class KafkaConstants { + + + public final static String KafkaTopic="kafka_topic_test"; + + public final static String KafkaGrop="kafka_group_test"; + +} diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaConsumerConfig.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaConsumerConfig.java new file mode 100644 index 0000000..bdd2095 --- /dev/null +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaConsumerConfig.java @@ -0,0 +1,43 @@ +package com.muyu.common.util; + +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.common.serialization.Deserializer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; + +/** + * @author liuxinyue + * @Package:com.muyu.common.util + * @name:KafkaConsumerConfig + * @Date:2024/9/29 20:19 + */ +@Configuration +public class KafkaConsumerConfig +{ + + @Bean + public KafkaConsumer kafkaConsumer(){ + HashMap map = new HashMap<>(); + map.put("bootstrap.servers", "47.101.53.251:9092"); + map.put("enable.auto.commit",true); + map.put("auto.commit.interval", 5000); + map.put("auto.offset.reset", "latest"); + map.put("fetch.max.wait", 500); + map.put("fetch.min.size", 1); + map.put("heartbeat-interval", 3000); + map.put("max.poll.records", 500); + map.put("group.id", KafkaConstants.KafkaGrop); + //指定key使用的反序列化类 + Deserializer keyDeserializer = new StringDeserializer(); + //指定value使用的反序列化类 + Deserializer valueDeserializer = new StringDeserializer(); + //创建Kafka消费者 + KafkaConsumer kafkaConsumer = new KafkaConsumer(map, keyDeserializer, valueDeserializer); + return kafkaConsumer; + } + + +} diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaProducerTest.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaProducerTest.java deleted file mode 100644 index 004dff9..0000000 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaProducerTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.muyu.common.util; - -import org.apache.kafka.clients.producer.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Objects; -import java.util.Properties; -/** - * kafka生产 - * @author liuxinyue - * @Package:com.muyu.common.util - * @name:KafkaProducerTest - * @Date:2024/9/29 12:27 - */ -public class KafkaProducerTest { - private static final Logger logger = LoggerFactory.getLogger(KafkaProducerTest.class); - - public static KafkaProducer getDefaultKafkaProducer(KafkaCommonProperties kafkaCommonProperties) { - Properties properties = new Properties(); - properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaCommonProperties.getKafkaHost()); - properties.put(ProducerConfig.ACKS_CONFIG, kafkaCommonProperties.getAck()); - properties.put(ProducerConfig.RETRIES_CONFIG, kafkaCommonProperties.getRetryTimes()); - properties.put(ProducerConfig.BATCH_SIZE_CONFIG, kafkaCommonProperties.getBatchSize()); - properties.put(ProducerConfig.LINGER_MS_CONFIG, kafkaCommonProperties.getLingerMs()); - properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG, kafkaCommonProperties.getBufferMemory()); - properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, kafkaCommonProperties.getKeyEncoder()); - properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, kafkaCommonProperties.getValueEncoder()); - return new KafkaProducer<>(properties); - } - - static class MyProducerCallback implements Callback { - - @Override - public void onCompletion(RecordMetadata metadata, Exception exception) { - if (Objects.nonNull(exception)) { - logger.error(">>>>>>>>>>Producer生产消息异常:", exception); - } - if (Objects.nonNull(metadata)) { - logger.info(">>>>>>>>>>Producer生产消息:metadata:{},partition:{}, offset:{}", metadata, metadata.partition(), metadata.offset()); - } - } - } - - public static void main(String[] args) { - KafkaCommonProperties kafkaCommonProperties = new KafkaCommonProperties(); - KafkaProducer producer = getDefaultKafkaProducer(kafkaCommonProperties); - String message = "hello world "; - try { - for (int i = 0; i < 10; i++) { - // 异步写入数据 - String topic = kafkaCommonProperties.getTopic().toArray()[0].toString(); - ProducerRecord producerRecord = new ProducerRecord<>(topic, message + i); - producer.send(producerRecord, new MyProducerCallback()); - } - } catch (Exception ex) { - logger.error(">>>>>>>>生产数据异常:", ex); - throw new RuntimeException(ex); - } finally { - producer.close(); - } - } - -} diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaProviderConfig.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaProviderConfig.java new file mode 100644 index 0000000..9ca8d40 --- /dev/null +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/KafkaProviderConfig.java @@ -0,0 +1,38 @@ +package com.muyu.common.util; + +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.common.serialization.Serializer; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; + +/** + * @author liuxinyue + * @Package:com.muyu.common.util + * @name:KafkaProviderConfig + * @Date:2024/9/29 20:15 + */ +@Configuration +public class KafkaProviderConfig{ + + @Bean + public KafkaProducer KafkaProvider(){ + + HashMap map = new HashMap<>(); + map.put("bootstrap.servers", "47.101.53.251:9092"); + map.put("retries", "2"); + map.put("batch.size", 16384); + map.put("buffer-memory", 33554432); + map.put("acks", "-1"); + Serializer keySerializer = new StringSerializer(); + //指定value使用的序列化类 + Serializer valueSerializer = new StringSerializer(); + //创建Kafka生产者 + KafkaProducer kafkaProducer = new KafkaProducer(map, keySerializer, valueSerializer); + return kafkaProducer; + } + + +} diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/PageUtils.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/PageUtils.java index 146d370..9c6539a 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/PageUtils.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/util/PageUtils.java @@ -5,7 +5,8 @@ import lombok.Data; import java.util.List; /** - * @Author mengyu + * 分页封装类 + * @author sx * @Description 分页封装类 * @Version 1.0 * @Data 2024-09-08 14:58:59 diff --git a/cloud-modules/saas/saas-server/pom.xml b/cloud-modules/saas/saas-server/pom.xml index 5d7bfd0..4286b11 100644 --- a/cloud-modules/saas/saas-server/pom.xml +++ b/cloud-modules/saas/saas-server/pom.xml @@ -24,6 +24,12 @@ + + + org.springframework.boot + spring-boot-starter-amqp + + com.muyu saas-cache @@ -36,6 +42,11 @@ 3.6.3 + + com.muyu + cloud-common-saas + + com.alibaba.cloud 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 ce9a6ac..7186808 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,11 +1,12 @@ package com.muyu.server; + import com.muyu.common.security.annotation.EnableMyFeignClients; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; - /** - * @Author YuPing + * saas模块启动类 + * @author YuPing * @Description saas模块启动类 * @Version 1.0 * @Data 2024-09-28 17:34:31 diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/KafkaConsumerConfig.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/KafkaConsumerConfig.java deleted file mode 100644 index 7184006..0000000 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/KafkaConsumerConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.muyu.server.config; - -import org.apache.kafka.clients.consumer.KafkaConsumer; -import org.apache.kafka.common.serialization.Deserializer; -import org.apache.kafka.common.serialization.StringDeserializer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.HashMap; -import java.util.Map; - -/** - * - * @author liuxinyue - * @Package:com.muyu.mqtt.configure - * @Project:cloud-server - * @name:KafkaConsumerConfig - * @Date:2024/9/28 23:42 - */ -@Configuration -public class KafkaConsumerConfig { - @Bean - public KafkaConsumer kafkaConsumer() { - Map configs = new HashMap<>(); - //kafka服务端的IP和端口,格式:(ip:port) - configs.put("bootstrap.servers", "47.101.53.251: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", "kafka_grop"); - //指定key使用的反序列化类 - Deserializer keyDeserializer = new StringDeserializer(); - //指定value使用的反序列化类 - Deserializer valueDeserializer = new StringDeserializer(); - //创建Kafka消费者 - KafkaConsumer kafkaConsumer = new KafkaConsumer(configs, keyDeserializer, valueDeserializer); - return kafkaConsumer; - } -} diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/KafkaProviderConfig.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/KafkaProviderConfig.java deleted file mode 100644 index 15ac1ef..0000000 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/KafkaProviderConfig.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.muyu.server.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.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.HashMap; -import java.util.Map; - -/** - * - * @author liuxinyue - * @Package:com.muyu.mqtt.configure - * @Project:cloud-server - * @name:KafkaProviderConfig - * @Date:2024/9/28 23:50 - */ -@Configuration -public class KafkaProviderConfig { - - @Bean - public KafkaProducer kafkaProducer() { - Map 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; - } - -} diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/MqttConfigure.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/MqttConfigure.java deleted file mode 100644 index 1b2be06..0000000 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/config/MqttConfigure.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.muyu.server.config; - -import cn.hutool.json.JSONObject; -import com.muyu.server.service.TemplateService; -import lombok.extern.log4j.Log4j2; -import org.eclipse.paho.client.mqttv3.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -/** - * - * @author liuxinyue - * @Package:com.muyu.mqtt.configure - * @Project:cloud-server - * @name:MqttConfigure - * @Date:2024/9/28 16:10 - */ -@Log4j2 -@Component -public class MqttConfigure { - - @Autowired - private TemplateService templateService; - - - @PostConstruct - public void MQTTMonitoring(){ - String topic = "vehicle"; - int qos = 2; - String broker = "tcp://47.101.53.251:1883"; - String clientId = "测试mqtt"; - try { - MqttClient sampleClient = new MqttClient(broker, clientId); - MqttConnectOptions connOpts = new MqttConnectOptions(); - //是否清空session - connOpts.setCleanSession(true); - log.info("Connecting to broker: " + broker); - //连接 - sampleClient.connect(connOpts); - sampleClient.subscribe(topic,qos); - sampleClient.setCallback(new MqttCallback() { - //连接丢失(报错) - @Override - public void connectionLost(Throwable throwable) { - log.error("error:"+throwable.getMessage()); - } - //消息已经接收到 - @Override - public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { - // 将MQTT消息转换为字符串 - String messageContent = new String(mqttMessage.getPayload()); - // 解析JSON字符串 - JSONObject jsonObject = new JSONObject(messageContent); - // 从JSON对象中获取"msg"字段的值 - String msgValue = jsonObject.getStr("msg"); - templateService.messageParsing(msgValue); - log.info("接收到的值为:"+msgValue); - } - //交付完成 - @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(); - } - } -} 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 8e434db..6311e4c 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 @@ -2,6 +2,7 @@ package com.muyu.server.controller; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.CarType; +import com.muyu.common.redis.service.RedisService; import com.muyu.server.service.CarTypeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -10,6 +11,8 @@ import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 车辆类型管理 * @author liuxingue @@ -29,6 +32,9 @@ public class CarTypeController { @Autowired private CarTypeService carTypeService; + @Autowired + private RedisService redisService; + /** * 车辆类型列表 * @return @@ -36,7 +42,9 @@ public class CarTypeController { @GetMapping("/selectCarTypeList") @Operation(summary = "车辆类型列表",description = "车辆类型列表") public Result selectCarTypeList(){ - return Result.success(carTypeService.selectCarTypeList()); + List car = redisService.getCacheList("car"); + log.info("取出来的集合是:"+car); + return Result.success(carTypeService.selectCarTypeList()); } /** diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/DataTypeController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/DataTypeController.java index 4941a22..326d416 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/DataTypeController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/DataTypeController.java @@ -1,5 +1,6 @@ package com.muyu.server.controller; +import com.muyu.cache.DataTypeCacheService; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.DataType; import com.muyu.server.service.DataTypeService; @@ -34,6 +35,9 @@ public class DataTypeController { @Autowired private DataTypeService dataTypeService; + @Autowired + private DataTypeCacheService dataTypeCacheService; + /** * 数据类型列表 @@ -42,7 +46,10 @@ public class DataTypeController { @PostMapping("/dataTypeList") @Operation(summary = "数据类型列表",description = "数据类型列表") public Result> dataTypeList() { - return Result.success(dataTypeService.list()); + + List list = dataTypeService.list(); + dataTypeCacheService.put("List",list); + return Result.success(list); } } 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 39a5e55..fbe366d 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 @@ -1,8 +1,12 @@ package com.muyu.server.controller; import cn.hutool.core.bean.BeanUtil; +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.domain.Enterprise; +import com.muyu.common.system.domain.Business; +import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.util.PageUtils; import com.muyu.server.controller.form.DeleteEnterpriseByIds; import com.muyu.server.controller.form.InsertEnterprise; @@ -14,8 +18,15 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.support.EncodedResource; +import org.springframework.jdbc.datasource.init.ScriptUtils; import org.springframework.web.bind.annotation.*; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; import java.util.HashMap; import java.util.Map; @@ -35,6 +46,9 @@ public class EnterpriseController { @Autowired private EnterpriseService enterpriseService; + @Autowired + private RemoteUserService remoteUserService; + /** * 查询分页企业信息 @@ -72,6 +86,48 @@ public class EnterpriseController { enterprise.setEnterpriseFenceCount(form.getEnterpriseFenceCount()); int rows = enterpriseService.insert(enterprise); + if (rows == 0){ + return Result.error("新增失败"); + } + + Business business = new Business(); + business.setFirmName(form.getEnterpriseName()); + business.setDatabaseName(form.getEnterpriseDatabaseName()); + remoteUserService.settlementEnterpriseInfo(business, 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()) { + + boolean success = stmt.execute(createDatabaseSql); + if (success) { + log.info("数据库 {} 创建失败", form.getEnterpriseDatabaseName()); + + } else { + log.warn("数据库 {} 创建成功", form.getEnterpriseDatabaseName()); + + // 切换到新的数据库连接 + Connection connection = null; + try { + String url = "jdbc:mysql://47.101.53.251:3306/" + form.getEnterpriseDatabaseName() + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; + String user = "root"; + String pwd = "Lw030106"; + String driverClassName = "com.mysql.cj.jdbc.Driver"; + Class.forName(driverClassName); + connection = DriverManager.getConnection(url, user, pwd); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + ClassPathResource rc = new ClassPathResource("static/saas.sql"); + EncodedResource er = new EncodedResource(rc, "utf-8"); + ScriptUtils.executeSqlScript(connection, er); + } + + } catch (SQLException e) { + e.printStackTrace(); + log.error("连接数据库时发生错误或创建数据库失败", e); + } return Result.success(rows); } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java index 698be1d..4127e0c 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java @@ -1,19 +1,23 @@ package com.muyu.server.controller; +import com.alibaba.fastjson2.JSONObject; +import com.muyu.cache.SysCarCacheService; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.SysCar; import com.muyu.common.domain.req.SysCarReq; import com.muyu.common.domain.resp.SysCarFaultLogVo; +import com.muyu.common.domain.resp.SysCarVo; + import com.muyu.server.service.SysCarService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; - import java.util.List; - /** * 车辆管理 * @author sx @@ -30,6 +34,14 @@ public class SysCarController { @Autowired private SysCarService sysCarService; + @Autowired + private RabbitTemplate rabbitTemplate; + + @Autowired + private SysCarCacheService sysCarCacheService; + + + /** * 车辆列表 * @param sysCarReq 参数 @@ -60,7 +72,7 @@ public class SysCarController { return Result.success(sysCarService.addSysCar(sysCar)); } - @PostMapping("/updateSysCar") + @PutMapping @Operation(summary = "车辆修改",description = "车辆修改") public Result updateSysCar(@RequestBody SysCar sysCar){ return Result.success(sysCarService.updateSysCar(sysCar)); @@ -79,7 +91,7 @@ public class SysCarController { * @param carVin * @return */ - @PostMapping("/findFenceByCarVin/{carVin}") + @PostMapping("/findFenceCarVin/{carVin}") @Operation(summary = "根据车辆的VIN码查询该车的故障记录",description = "根据车辆的VIN码查询该车的故障记录") public Result> findFenceByCarVin(@PathVariable("carVin") String carVin){ return Result.success(sysCarService.findFenceByCarVin(carVin)); @@ -91,8 +103,10 @@ public class SysCarController { * @return */ @PostMapping("/findCarByVin") -// @Operation(summary = "根据VIN码查询车信息",description = "根据VIN码查询车信息") + @Operation(summary = "根据VIN码查询车信息",description = "根据VIN码查询车信息") public Result findCarByVin(@RequestParam("carVin") String carVin){ + List carList = sysCarCacheService.get("carList"); + log.info("从redis取出的数据为:"+carList); return Result.success(sysCarService.findCarByVin(carVin)); } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarFaultController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarFaultController.java index 0b06241..5949f2e 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarFaultController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarFaultController.java @@ -85,7 +85,7 @@ public class SysCarFaultController extends BaseController @Validated @RequestBody SysCarFault sysCarFault) { //判断故障码是否重复 - SysCarFault selectFaultByFaultCode = sysCarFaultService.selectFaultByFaultCode(sysCarFault.getFaultCode()); + List selectFaultByFaultCode = sysCarFaultService.selectFaultByFaultCode(sysCarFault.getFaultCode()); if (selectFaultByFaultCode!=null){ return error("新增车辆故障 ,故障码已存在"); } 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 c087753..4b4d6c9 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 @@ -10,34 +10,29 @@ import lombok.extern.log4j.Log4j2; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.sql.SQLException; import java.util.List; import java.util.concurrent.ExecutionException; /** - * 报文模版管理 - * @author liuxinyue + * @Author:liuxinyue * @Package:com.template.controller * @Project:cloud-server-c * @name:TemplateController * @Date:2024/9/20 12:12 */ +@Log4j2 @RestController @RequestMapping("/template") @AllArgsConstructor @Tag(name = "报文模版管理",description = "报文模版管理") -@Log4j2 public class TemplateController { @Autowired private TemplateService templateService; - /** * 报文模版列表 * @return @@ -61,6 +56,18 @@ public class TemplateController { return Result.success(); } + /** + * 报文模版添加0002222220 + * @param template + * @return + */ + @PostMapping("/addTemplate") + @Operation(summary = "报文模版添加",description = "报文模版添加") + public Result addTemplate(@RequestBody Template template) { + boolean save = templateService.save(template); + log.info("添加的结果为:"+save); + return Result.success(); + } } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/WarnStrategyController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/WarnStrategyController.java index 8c0a9ee..ba1136c 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/WarnStrategyController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/WarnStrategyController.java @@ -5,6 +5,9 @@ import javax.annotation.Resource; import com.muyu.common.domain.WarnStrategy; import com.muyu.common.domain.req.WarnStrategyReq; import com.muyu.server.service.WarnStrategyService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.log4j.Log4j2; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.DeleteMapping; @@ -23,6 +26,8 @@ import com.muyu.common.core.domain.Result; */ @RestController @RequestMapping("/strategy") +@Log4j2 +@Tag(name = "预警策略管理",description = "预警策略管理") public class WarnStrategyController extends BaseController { @Resource @@ -32,6 +37,7 @@ public class WarnStrategyController extends BaseController * 查询预警策略列表 */ @PostMapping("/selectWarnStrategyList") + @Operation(summary = "预警策略列表",description = "预警策略列表") public Result selectWarnStrategyList(@RequestBody WarnStrategyReq warnStrategyReq) { return Result.success(warnStrategyService.selectWarnStrategyList(warnStrategyReq)); @@ -42,6 +48,7 @@ public class WarnStrategyController extends BaseController * 获取预警策略详细信息 */ @GetMapping( "selectById/{id}") + @Operation(summary = "预警策略详细信息",description = "预警策略详细信息") public Result selectById(@PathVariable("id") Long id) { return success(warnStrategyService.selectWarnStrategyById(id)); @@ -51,6 +58,7 @@ public class WarnStrategyController extends BaseController * 新增预警策略 */ @PostMapping("/addWarnStrategy") + @Operation(summary = "预警策略添加",description = "预警策略添加") public Result addWarnStrategy(@RequestBody WarnStrategy warnStrategy) { Integer i = warnStrategyService.addWarnStrategy(warnStrategy); @@ -61,6 +69,7 @@ public class WarnStrategyController extends BaseController * 修改预警策略 */ @PostMapping("/updWarnStrategy") + @Operation(summary = "预警策略修改",description = "预警策略修改") public Result updWarnStrategy(@RequestBody WarnStrategy warnStrategy) { Integer i = warnStrategyService.updWarnStrategy(warnStrategy); @@ -71,6 +80,7 @@ public class WarnStrategyController extends BaseController * 删除预警策略 */ @DeleteMapping("deleteWarnStrategy/{id}") + @Operation(summary = "预警策略删除",description = "预警策略删除") public Result deleteWarnStrategy(@PathVariable("id") Long id) { Integer i = warnStrategyService.deleteWarnStrategy(id); @@ -83,6 +93,7 @@ public class WarnStrategyController extends BaseController * 根据车辆类型ID查询策略 */ @GetMapping("/selectListByCarType/{carTypeId}") + @Operation(summary = "根据车辆类型ID查询策略",description = "根据车辆类型ID查询策略") public Result selectListByCarType(@PathVariable("carTypeId") Long carTypeId) { return Result.success(warnStrategyService.selectListByCarType(carTypeId)); } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/InsertEnterprise.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/InsertEnterprise.java index ef2c82e..7a2225b 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/InsertEnterprise.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/InsertEnterprise.java @@ -22,4 +22,7 @@ public class InsertEnterprise { @NotNull(message = "enterpriseFenceCount企业围栏组不能为空") private Integer enterpriseFenceCount; + + @NotNull(message = "enterpriseDatabaseName企业数据库名称不能为空") + private String enterpriseDatabaseName; } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/UpdateEnterprise.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/UpdateEnterprise.java index 2b62125..9fda537 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/UpdateEnterprise.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/form/UpdateEnterprise.java @@ -28,4 +28,7 @@ public class UpdateEnterprise { @NotNull(message = "enterpriseFenceCount企业围栏组不能为空") private Integer enterpriseFenceCount; + + @NotNull(message = "enterpriseDatabaseName企业数据库名称不能为空") + private String enterpriseDatabaseName; } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/DataTypeMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/DataTypeMapper.java index 3cc55bf..53b3ac9 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/DataTypeMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/DataTypeMapper.java @@ -5,7 +5,8 @@ import com.muyu.common.domain.DataType; import org.apache.ibatis.annotations.Mapper; /** - * @Author:liuxinyue + * 数据类型表 Mapper 接口 + * @author liuxinyue * @Package:com.sheep.mapper * @Project:cloud-server-c * @name:DataTypeMapper diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceGroupMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceGroupMapper.java index b5604d1..2f49677 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceGroupMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceGroupMapper.java @@ -5,7 +5,8 @@ import com.muyu.common.domain.database.ElectronicFenceGroup; import org.apache.ibatis.annotations.Mapper; /** - * @Author:yuping + * 围栏组 Mapper 接口 + * @author yuping * @Package:com.muyu.fence.mapper * @Project:cloud-server * @name:FenceGroupMapper diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceMapper.java index 0a230db..367b2e2 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/ElectronicFenceMapper.java @@ -5,7 +5,8 @@ import com.muyu.common.domain.database.ElectronicFence; import org.apache.ibatis.annotations.Mapper; /** - * @Author:yuping + * 电子围栏 Mapper接口 + * @author yuping * @Package:com.muyu.fence.mapper * @Project:cloud-server * @name:ElectronicFenceMapper diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/EnterpriseDao.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/EnterpriseMapper.java similarity index 69% rename from cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/EnterpriseDao.java rename to cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/EnterpriseMapper.java index 7e64554..27779c3 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/EnterpriseDao.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/EnterpriseMapper.java @@ -2,13 +2,21 @@ package com.muyu.server.mapper; import com.muyu.common.domain.Enterprise; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +/** + * 企业信息Mapper接口 + * @author yupnig + * @package com.muyu.server.mapper + * @name EnterpriseMapper + * @date 2024-09-29 14:31:06 + */ @Mapper -public interface EnterpriseDao { +public interface EnterpriseMapper { // 查询分页信息 public ArrayList selectEnterprise(Map param); //查询企业记录总数 @@ -26,5 +34,5 @@ public interface EnterpriseDao { //删除企业信息 - public int deleteByIds(Integer[] ids); + public int deleteByIds(@Param("ids") Integer[] ids); } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/FenceGroupMidMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/FenceGroupMidMapper.java index 7f57792..96a09d9 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/FenceGroupMidMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/FenceGroupMidMapper.java @@ -5,7 +5,8 @@ import com.muyu.common.domain.database.FenceGroupMid; import org.apache.ibatis.annotations.Mapper; /** - * @Author:yuping + * 围栏组连接表 Mapper接口 + * @author yuping * @Package:com.muyu.fence.mapper * @Project:cloud-server * @name:FenceGroupMidMapper diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/KafkaMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/KafkaMapper.java new file mode 100644 index 0000000..3afe4f4 --- /dev/null +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/KafkaMapper.java @@ -0,0 +1,14 @@ +package com.muyu.server.mapper; + +import org.apache.ibatis.annotations.Mapper; + +/** + * kafka + * @author liuxinyue + * @Package:com.muyu.server.mapper + * @name:KafkaMapper + * @Date:2024/9/29 20:53 + */ +@Mapper +public interface KafkaMapper { +} diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/MessageTemplateTypeMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/MessageTemplateTypeMapper.java index 129aafb..d2f6ebc 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/MessageTemplateTypeMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/MessageTemplateTypeMapper.java @@ -5,7 +5,8 @@ import com.muyu.common.domain.MessageTemplateType; import org.apache.ibatis.annotations.Mapper; /** - * @Author:liuxinyue + * 报文模版类型 Mapper 接口 + * @author liuxinyue * @Package:com.sheep.message.mapper * @Project:cloud-server-c * @name:MessageTemplateTypeMapper diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMapper.java index 2ef819c..a500004 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMapper.java @@ -17,16 +17,6 @@ import java.util.List; @Mapper public interface SysCarFaultMapper extends BaseMapper { - //根据添加的故障码进行查询 - @Select("select fault_code from sys_car_fault where fault_code=#{faultCode}") - SysCarFault selectFaultByFaultCode(String faultCode); - - /** - * 查询故障码信息 - * @param ids 故障码信息主键 - * @return 故障码信息 - */ - public List selectSysCarFaultIds(String[] ids); diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMessageMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMessageMapper.java index 5d4622a..9253762 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMessageMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarFaultMessageMapper.java @@ -17,12 +17,8 @@ import java.util.List; @Mapper public interface SysCarFaultMessageMapper extends BaseMapper { - // 查询状态等于1的记录 - @Select("select * from sys_car_fault_message where status=1") - public ListlistStatusOnt( ); - //查询状态等于2的记录 - @Select("select * from sys_car_fault_message where status=2") - public ListlistStatusTwo( ); + + diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarLogMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarLogMapper.java index 69cf4b1..a7deb7d 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarLogMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarLogMapper.java @@ -4,6 +4,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.muyu.common.domain.SysCarLog; import org.apache.ibatis.annotations.Mapper; +/** + * 车辆上下线记录 Mapper接口 + * @author sx + * @package com.muyu.server.mapper + * @name SysCarLogMapper + * @date 2024-09-29 14:37:11 + */ @Mapper public interface SysCarLogMapper extends BaseMapper { } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarMapper.java index d57d045..70a990c 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/SysCarMapper.java @@ -10,6 +10,13 @@ import org.apache.ibatis.annotations.Param; import java.util.List; +/** + * 车辆管理 Mapper 接口 + * @author sx + * @package com.muyu.server.mapper + * @name SysCarMapper + * @date 2024-09-29 14:38:40 + */ @Mapper public interface SysCarMapper extends BaseMapper { List selectSysCarVoList(SysCarReq sysCarReq); @@ -21,6 +28,6 @@ public interface SysCarMapper extends BaseMapper { SysCar findCarByVin(@Param("carVin") String carVin); - SysCar selectByCarVin(@Param("carVin") String carVin); + } diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/TemplateMapper.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/TemplateMapper.java index b732762..85b6277 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/TemplateMapper.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/mapper/TemplateMapper.java @@ -9,7 +9,8 @@ import org.apache.ibatis.annotations.Param; import java.util.List; /** - * @Author:liuxinyue + *报文模版 + * @author liuxinyue * @Package:com.template.mapper * @Project:cloud-server-c * @name:TemplateMapper @@ -18,6 +19,6 @@ import java.util.List; @Mapper public interface TemplateMapper extends BaseMapper