From 723cb6556d9d9811933451532069611db54fad15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Sun, 29 Sep 2024 09:06:47 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E9=98=BF=E9=87=8C?= =?UTF-8?q?=E4=BA=91=E7=9A=84RunInstances=E6=8E=A5=E5=8F=A3=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=AE=9E=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-auth/src/main/resources/bootstrap.yml | 2 +- cloud-common/cloud-common-core/pom.xml | 5 + .../muyu/common/core/utils/ip/IpUtils.java | 6 +- .../constents/DatasourceContent.java | 2 +- .../src/main/resources/bootstrap.yml | 4 +- .../src/main/resources/bootstrap.yml | 4 +- .../cloud-modules-car-gateway/pom.xml | 114 +++++++++++++++++ .../cargateway/CarGatewayApplication.java | 23 ++++ .../cargatewaytest/DeleteSample.java | 89 +++++++++++++ .../cargateway/cargatewaytest/Sample.java | 107 ++++++++++++++++ .../CarOneClickOperationController.java | 27 ++++ .../cargateway/controller/TestController.java | 64 ++++++++++ .../cargateway/domain/AliServerConfig.java | 46 +++++++ .../muyu/cargateway/domain/ServerConfig.java | 58 +++++++++ .../cargateway/domain/model/TaskModel.java | 87 +++++++++++++ .../domain/properties/MqttProperties.java | 45 +++++++ .../domain/resp/AliServerConfig.java | 37 ++++++ .../mapper/CarOneClickOperationMapper.java | 15 +++ .../service/CarOneClickOperationService.java | 14 ++ .../Impl/CarOneClickOperationServiceImpl.java | 18 +++ .../muyu/cargateway/test/MqttPublisher.java | 60 +++++++++ .../java/com/muyu/cargateway/test/Sample.java | 120 ++++++++++++++++++ .../src/main/resources/banner.txt | 2 + .../src/main/resources/bootstrap.yml | 60 +++++++++ .../src/main/resources/logback/dev.xml | 74 +++++++++++ .../src/main/resources/logback/prod.xml | 81 ++++++++++++ .../src/main/resources/logback/test.xml | 81 ++++++++++++ .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- cloud-modules/pom.xml | 1 + .../src/main/resources/bootstrap.yml | 2 +- init-file/cloud-system.sql | 4 +- 36 files changed, 1246 insertions(+), 18 deletions(-) create mode 100644 cloud-modules/cloud-modules-car-gateway/pom.xml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml index ce1fb2d..910ec21 100644 --- a/cloud-auth/src/main/resources/bootstrap.yml +++ b/cloud-auth/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 106.54.193.225:8848 user-name: nacos password: nacos namespace: one-saas diff --git a/cloud-common/cloud-common-core/pom.xml b/cloud-common/cloud-common-core/pom.xml index be06f0a..9654ee7 100644 --- a/cloud-common/cloud-common-core/pom.xml +++ b/cloud-common/cloud-common-core/pom.xml @@ -168,6 +168,11 @@ cn.hutool hutool-all + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.2 + diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java index e750583..297243e 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java @@ -58,7 +58,7 @@ public class IpUtils { ip = request.getRemoteAddr(); } - return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + return "0:0:0:0:0:0:0:1".equals(ip) ? "106.54.193.225" : getMultistageReverseProxyIp(ip); } /** @@ -70,7 +70,7 @@ public class IpUtils { */ public static boolean internalIp (String ip) { byte[] addr = textToNumericFormatV4(ip); - return internalIp(addr) || "127.0.0.1".equals(ip); + return internalIp(addr) || "106.54.193.225".equals(ip); } /** @@ -197,7 +197,7 @@ public class IpUtils { return InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { } - return "127.0.0.1"; + return "106.54.193.225"; } /** 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 2ceb282..976d688 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 @@ -13,7 +13,7 @@ public class DatasourceContent { public final static String PASSWORD = "bawei2112A"; - public final static String IP = "127.0.0.1"; + public final static String IP = "106.54.193.225"; public final static Integer PORT = 3306; } diff --git a/cloud-gateway/src/main/resources/bootstrap.yml b/cloud-gateway/src/main/resources/bootstrap.yml index aa98013..cb4e64c 100644 --- a/cloud-gateway/src/main/resources/bootstrap.yml +++ b/cloud-gateway/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 106.54.193.225:8848 user-name: nacos password: nacos namespace: one-saas @@ -50,7 +50,7 @@ spring: eager: true transport: # 控制台地址 - dashboard: 127.0.0.1:8718 + dashboard: 106.54.193.225:8718 # nacos配置持久化 datasource: ds1: diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml index f4097e8..d466843 100644 --- a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml @@ -1,10 +1,10 @@ # Tomcat server: - port: 9702 + port: 10022 # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 106.54.193.225:8848 user-name: nacos password: nacos namespace: one diff --git a/cloud-modules/cloud-modules-car-gateway/pom.xml b/cloud-modules/cloud-modules-car-gateway/pom.xml new file mode 100644 index 0000000..2445efc --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/pom.xml @@ -0,0 +1,114 @@ + + + 4.0.0 + + com.muyu + cloud-modules + 3.6.3 + + + cloud-modules-car-gateway + + + 17 + 17 + UTF-8 + + + + com.muyu + cloud-common-core + + + com.muyu + cloud-common-security + + + + 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-api-doc + + + + + + + + + + + + + + com.aliyun + ecs20140526 + 5.1.8 + + + com.aliyun + tea-openapi + 0.3.2 + + + com.aliyun + tea-console + 0.0.1 + + + com.aliyun + tea-util + 0.2.21 + + + + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java new file mode 100644 index 0000000..e9109de --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java @@ -0,0 +1,23 @@ +package com.muyu.cargateway; + +import com.muyu.common.security.annotation.EnableCustomConfig; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-17-15:00 + * @ Version:1.0 + * @ Description:故障启动类 + * @author Lenovo + */ +@EnableCustomConfig +@EnableFeignClients +@SpringBootApplication +public class CarGatewayApplication { + public static void main(String[] args) { + SpringApplication.run(CarGatewayApplication.class, args); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java new file mode 100644 index 0000000..545d937 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java @@ -0,0 +1,89 @@ +package com.muyu.cargateway.cargatewaytest; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.ecs20140526.models.*; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.models.RuntimeOptions; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-28-21:20 + * @ Version:1.0 + * @ Description:删除实例 + * @author Lenovo + */ +@Log4j2 +@Component +public class DeleteSample implements DisposableBean { + + public static Client createClient() throws Exception { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + Config config = new Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; + return new Client(config); + } + public static void deleteSample() throws Exception { + Client client = DeleteSample.createClient(); + DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); + attributeRequest.setRegionId("cn-shanghai"); + + RuntimeOptions runtimeOptions = new RuntimeOptions(); + + DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); + ArrayList list = new ArrayList<>(); + DescribeInstancesResponseBody body = instancesWithOptions.getBody(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { + list.add(instance.getInstanceId()); + } + log.info("list:"+list); + DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest(); + deleteInstancesRequest.setRegionId("cn-shanghai") + .setDryRun(false) + .setForce(true) + .setTerminateSubscription(true) + .setInstanceId(list); + + RuntimeOptions runtime = new RuntimeOptions(); + try{ + client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); + }catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + } + @Override + public void destroy(){ + try { + log.info("删除实例方法"); + deleteSample(); + } catch (Exception e) { + log.info("删除实例失败"); + throw new RuntimeException(e); + } + log.info("删除实例成功"); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java new file mode 100644 index 0000000..3ebe6bb --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java @@ -0,0 +1,107 @@ +package com.muyu.cargateway.cargatewaytest; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.ecs20140526.models.RunInstancesRequest; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.Common; +import com.aliyun.teautil.models.RuntimeOptions; +import lombok.extern.log4j.Log4j2; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-28-21:10 + * @ Version:1.0 + * @ Description:调用ali的类 + * @author Lenovo + */ +@Log4j2 +@Component +public class Sample implements ApplicationRunner { + + public static Client createClient() throws Exception { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + Config config = new Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; + return new Client(config); + } + public static void generateInstance() throws Exception { + Client client = Sample.createClient(); + RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk(); + //设置系统盘的大小为40GiB + systemDisk.setSize("40"); + //设置系统盘类型为cloud_essd + systemDisk.setCategory("cloud_essd"); + + // 创建创建实例请求对象并设置参数 + + RunInstancesRequest runInstancesRequest = new RunInstancesRequest() + // 设置地域ID + .setRegionId("cn-shanghai") + // 设置镜像ID + .setImageId("m-uf65fvle9qseu9jo5jl3") + // 设置实例规格类型 + .setInstanceType("ecs.t6-c1m1.large") + // 设置安全组ID + .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y") + // 设置虚拟交换机ID + .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3") + // 设置实例名称 + .setInstanceName("server-mqtt") + // 设置付费类型 按量付费 + .setInstanceChargeType("PostPaid") + // 设置系统盘配置 + .setSystemDisk(systemDisk) + // 设置用户名 + .setHostName("root") + // 设置密码 + .setPassword("10160810@a") + // 设置要创创建的实例数量 + .setAmount(1) + .setInternetChargeType("PayByTraffic") + .setInternetMaxBandwidthOut(1); + + RuntimeOptions runtimeOptions = new RuntimeOptions(); + // 尝试执行创建实例请求 + try { + // 复制代码运行请自行打印 API 的返回值 + client.runInstancesWithOptions(runInstancesRequest, runtimeOptions); + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } + } + + @Override + public void run(ApplicationArguments args){ + try { + log.info("开始创建实例"); + generateInstance(); + } catch (Exception e) { + log.info("创建实例失败"); + throw new RuntimeException(e); + } + log.info("创建实例成功"); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java new file mode 100644 index 0000000..df51878 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java @@ -0,0 +1,27 @@ +package com.muyu.cargateway.controller; + +import com.muyu.cargateway.service.CarOneClickOperationService; +import com.muyu.common.core.domain.Result; +import lombok.extern.log4j.Log4j2; +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.RestController; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-26-20:14 + * @ Version:1.0 + * @ Description:车辆一键操作控制层 + * @author Lenovo + */ +@Log4j2 +@RestController +@RequestMapping("/car/oneClick") +public class CarOneClickOperationController { + @Autowired + private CarOneClickOperationService carOneClickOperationService; + + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java new file mode 100644 index 0000000..739be0c --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java @@ -0,0 +1,64 @@ +package com.muyu.cargateway.controller; + +import com.muyu.cargateway.service.CarOneClickOperationService; +import lombok.extern.log4j.Log4j2; +import org.eclipse.paho.client.mqttv3.*; +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.RestController; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-27-20:08 + * @ Version:1.0 + * @ Description:fluxmq连接测试类 + * @author Lenovo + */ +@Log4j2 +@RestController +@RequestMapping("/testCarGateway") +public class TestController { + @PostMapping("/testCarConnect") + public void testCarConnect() { + String topic="carOneClick"; + String message="{\"carId\":\"123456789\",\"operation\":\"turnOn\"}";; + String broker="tcp://106.54.193.225:1883"; + String clientId="javaSample"; + int qos=1; + + try { + MqttClient mqttClient =new MqttClient(broker, clientId); + MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); + mqttConnectOptions.setCleanSession(true); + log.info("连接成功"+broker); + mqttClient.connect(mqttConnectOptions); + + mqttClient.subscribe(topic,0); + mqttClient.setCallback(new MqttCallback() { + @Override + public void connectionLost(Throwable throwable) { + log.info("连接丢失"); + } + + @Override + public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { + log.info(new String(mqttMessage.getPayload())); + } + @Override + public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { + //发布完成时调用 + } + }); + } catch (MqttException e) { + log.info("连接失败"+e.getReasonCode()); + log.info("信息"+e.getMessage()); + log.info("异常"+e); + log.info("异常信息"+e.getLocalizedMessage()); + log.info("异常类型"+e.getClass()); + e.printStackTrace(); + throw new RuntimeException(e); + } + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java new file mode 100644 index 0000000..b6d545a --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliServerConfig.java @@ -0,0 +1,46 @@ +package com.muyu.cargateway.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-28-16:37 + * @ Version:1.0 + * @ Description:创建实例的配置 + * @author Lenovo + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AliServerConfig { + /** + * 主键 + */ + private Long id; + /** + * 地域ID + */ + private String regionId; + /** + * 镜像ID + */ + private String imageId; + /** + * 实例规格 + */ + private String instanceType; + /** + * 安全组ID + */ + private String securityGroupId; + /** + * 虚拟交换机ID + */ + private String vSwitchId; + + +} + diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java new file mode 100644 index 0000000..6628de0 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ServerConfig.java @@ -0,0 +1,58 @@ +package com.muyu.cargateway.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-27-20:56 + * @ Version:1.0 + * @ Description:服务器配置 + * @author Lenovo + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value="server_config") +public class ServerConfig { + /** + * 主键 + */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + /** + * 租户id + */ + private String tenantId; + /** + * 主机地址 + */ + private String host; + /** + * 端口 + */ + private String port; + /** + * 负载的地址 + */ + private String uri; + /** + * 默认MQTT地址 + */ + private String defaultMqttAddr; + /** + * 默认MQTT主题 + */ + private String defaultMqttTopic; + /** + * 默认MQTT QOS + */ + private Integer defaultMqttQos; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java new file mode 100644 index 0000000..f4ea58c --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/TaskModel.java @@ -0,0 +1,87 @@ +package com.muyu.cargateway.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.extern.log4j.Log4j2; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-26-20:23 + * @ Version:1.0 + * @ Description:任务执行模型 + * @author Lenovo + */ +@Data +@Log4j2 +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TaskModel { + /** + * 任务状态 默认为false状态 + * true为执行中,false为未执行 + */ + private final AtomicBoolean status =new AtomicBoolean(Boolean.FALSE); + /** + * 堵塞计数器 + */ + private CountDownLatch countDownLatch; + /** + * 任务执行堵塞队列 + */ + private LinkedBlockingDeque carQueue =new LinkedBlockingDeque<>(); + /** + * 任务是否执行 + * true 执行中 + * false 未执行 + * @return 是否有任务执行 + */ + private boolean isExecution(){ + return !status.get(); + } + /** + * 任务名称 + */ + private String taskName; + /** + * 任务执行次数 + */ + private Integer taskExecutionCount=0; + /** + * 任务开始时间 + */ + private Long taskStartTime; + /** + * 任务成功执行次数 + */ + private AtomicInteger taskSuccessSum=new AtomicInteger(); + /** + * 任务执行失败次数 + */ + private AtomicInteger taskErrorSum=new AtomicInteger(); + + /** + * 判断是否有任务 + * @return true 有任务 + */ + public boolean hashNext(){ + return !carQueue.isEmpty(); + } + + /** + * 获取下一个任务节点 + * @return 任务VIN + */ + public String next(){ + return carQueue.poll(); + } + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java new file mode 100644 index 0000000..f848275 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/properties/MqttProperties.java @@ -0,0 +1,45 @@ +package com.muyu.cargateway.domain.properties; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Lenovo + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-26-22:13 + * @ Version:1.0 + * @ Description:Mqtt的配置 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MqttProperties { + /** + * 节点 + */ + private String broker; + /** + * 主题 + */ + private String topic; + /** + * 用户名 + */ + private String userName; + /** + * 密码 + */ + private String password; + /** + * 客户端id + */ + private String clientId; + /** + * 上报级别 + */ + private int qos = 0; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java new file mode 100644 index 0000000..ded0cc8 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/resp/AliServerConfig.java @@ -0,0 +1,37 @@ +package com.muyu.cargateway.domain.resp; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-26-15:53 + * @ Version:1.0 + * @ Description:调用Ali服务器配置实体类 + * @author Lenovo + */ +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class AliServerConfig { + /** + * 主键 + */ + private Long id; + /** + * 地域id (实例所属的地域ID) + */ + private String regionId; + /** + * 镜像id + */ + private String imageId; + /** + * 实例规格 (实例的资源规格) + */ + private String instanceType; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java new file mode 100644 index 0000000..25cffea --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java @@ -0,0 +1,15 @@ +package com.muyu.cargateway.mapper; + +import org.apache.ibatis.annotations.Mapper; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-26-20:15 + * @ Version:1.0 + * @ Description:车辆一键操作持久层 + * @author Lenovo + */ +@Mapper +public interface CarOneClickOperationMapper { +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java new file mode 100644 index 0000000..27dafaa --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java @@ -0,0 +1,14 @@ +package com.muyu.cargateway.service; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-26-20:15 + * @ Version:1.0 + * @ Description:车辆一键操作业务层 + * @author Lenovo + */ +public interface CarOneClickOperationService { + + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java new file mode 100644 index 0000000..4facb79 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java @@ -0,0 +1,18 @@ +package com.muyu.cargateway.service.Impl; + +import com.muyu.cargateway.service.CarOneClickOperationService; +import org.springframework.stereotype.Service; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-26-20:16 + * @ Version:1.0 + * @ Description:车辆一键操作业务实现层 + * @author Lenovo + */ +@Service +public class CarOneClickOperationServiceImpl implements CarOneClickOperationService { + + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java new file mode 100644 index 0000000..35093cc --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java @@ -0,0 +1,60 @@ +//package com.muyu.cargateway.test; +// +//import lombok.extern.log4j.Log4j2; +//import org.eclipse.paho.client.mqttv3.MqttClient; +//import org.eclipse.paho.client.mqttv3.MqttConnectOptions; +//import org.eclipse.paho.client.mqttv3.MqttException; +//import org.eclipse.paho.client.mqttv3.MqttMessage; +// +///** +// * @ Tool:IntelliJ IDEA +// * @ Author:CHX +// * @ Date:2024-09-27-22:32 +// * @ Version:1.0 +// * @ Description:mqtt +// * @author Lenovo +// */ +//@Log4j2 +//public class MqttPublisher { +// //MQTT代理地址 +// String broker="tcp://106.54.193.225:1883"; +// //客户端ID +// String clientId="car-gateway"; +// //主题 +// String topic="car-gateway"; +// //要发送的内容 +// String content="连接成功"; +// //服务质量 0:最多一次 1:至少一次 2: +// int qos=0; +// MqttClient mqttClient; +// +// { +// try { +// mqttClient = new MqttClient(broker, clientId); +// +// //连接到MQtt代理 +// MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); +// //清空会话 +// mqttConnectOptions.setCleanSession(true); +// //连接 +// mqttClient.connect(mqttConnectOptions); +// log.info("MQTT客户端连接成功"+broker); +// +// //发送消息 +// MqttMessage message = new MqttMessage(content.getBytes()); +// //设置服务的质量 +// message.setQos(qos); +// //开始发送消息 +// mqttClient.publish(topic, message); +// log.info("消息发送成功,消息是:"+content); +// +// //断开连接 +// mqttClient.disconnect(); +// log.info("MQTT断开连接成功"); +// } catch (MqttException e) { +// //输出异常信息 +// e.getStackTrace(); +// throw new RuntimeException(e); +// } +// } +//} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java new file mode 100644 index 0000000..5827423 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java @@ -0,0 +1,120 @@ +//package com.muyu.cargateway.test; +// +//import com.aliyun.ecs20140526.Client; +//import com.aliyun.ecs20140526.models.RunInstancesRequest; +//import com.aliyun.tea.TeaException; +//import com.aliyun.teaopenapi.models.Config; +//import com.aliyun.teautil.Common; +//import com.aliyun.teautil.models.RuntimeOptions; +//import lombok.extern.log4j.Log4j2; +// +//import java.util.Arrays; +//import java.util.List; +// +// +///** +// * @ Tool:IntelliJ IDEA +// * @ Author:CHX +// * @ Date:2024-09-27-23:38 +// * @ Version:1.0 +// * @ Description:调用ali的测试demo类 +// * @author Lenovo +// */ +//@Log4j2 +//public class Sample { +// +// /** +// * description : +// *

使用AK&SK初始化账号Client

+// * @return Client +// * +// * @throws Exception +// */ +// public static Client createClient() throws Exception { +// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 +// Config config = new Config() +// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 +// .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") +// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 +// .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); +// // Endpoint 请参考 https://api.aliyun.com/product/Ecs +// config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; +// return new Client(config); +// } +// +// /** +// * 本程序的入口点 +// * 主要功能是创建阿里云ECS实例 +// * +// * @param args 命令行参数 +// * @throws Exception 如果执行过程中发生错误则抛出异常 +// */ +// public static void main(String[] args) throws Exception { +// // 将命令行参数转换为字符串列表 +// List arg = Arrays.asList(args); +// +// // 创建阿里云ECS客户端 +// Client client = Sample.createClient(); +// +// // 配置系统盘参数 +// RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk() +// // 设置系统盘大小为20G +// .setSize("40") +// // 设置系统盘类型为cloud_essd +// .setCategory("cloud_essd"); +// +// // 创建创建实例请求对象并设置参数 +// +// RunInstancesRequest runInstancesRequest = new RunInstancesRequest() +// // 设置地域ID +// .setRegionId("cn-shanghai") +// // 设置镜像ID +// .setImageId("m-uf65fvle9qseu9jo5jl3") +// // 设置实例规格类型 +// .setInstanceType("ecs.t6-c1m1.large") +// // 设置安全组ID +// .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y") +// // 设置虚拟交换机ID +// .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3") +// // 设置实例名称 +// .setInstanceName("server-mqtt") +// // 设置付费类型 按量付费 +// .setInstanceChargeType("PostPaid") +// // 设置系统盘配置 +// .setSystemDisk(systemDisk) +// // 设置用户名 +// .setHostName("root") +// // 设置密码 +// .setPassword("10160810@a") +// // 设置要创创建的实例数量 +// .setAmount(1); +// +// +// +// +// // 创建运行时选项对象 +// RuntimeOptions runtime = new RuntimeOptions(); +// +// // 尝试执行创建实例请求 +// try { +// // 复制代码运行请自行打印 API 的返回值 +// client.runInstancesWithOptions(runInstancesRequest, runtime); +// } catch (TeaException error) { +// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 +// // 错误 message +// System.out.println(error.getMessage()); +// // 诊断地址 +// System.out.println(error.getData().get("Recommend")); +// com.aliyun.teautil.Common.assertAsString(error.message); +// } catch (Exception _error) { +// TeaException error = new TeaException(_error.getMessage(), _error); +// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 +// // 错误 message +// System.out.println(error.getMessage()); +// // 诊断地址 +// System.out.println(error.getData().get("Recommend")); +// Common.assertAsString(error.message); +// } +// } +//} +// diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt b/cloud-modules/cloud-modules-car-gateway/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car-gateway/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..335687b --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml @@ -0,0 +1,60 @@ +# Tomcat +server: + port: 9702 + +# nacos线上地址 +nacos: + addr: 106.54.193.225:8848 + user-name: nacos + password: nacos + namespace: one +# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all +# Spring +spring: + amqp: + deserialization: + trust: + all: true + main: + allow-bean-definition-overriding: true + application: + # 应用名称 + name: cloud-breakdown + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + config: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # xxl-job 配置文件 + - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # rabbit 配置文件 + - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.muyu.breakdown.mapper: DEBUG diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..34cd186 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car-gateway/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..1193d09 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car-gateway/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/logback/test.xml new file mode 100644 index 0000000..1193d09 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/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-car/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml index 00342f2..a07c11c 100644 --- a/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 106.54.193.225:8848 user-name: nacos password: nacos namespace: public 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 c21b371..a36bd1b 100644 --- a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one-saas 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 f40b3a7..47acae2 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one-saas diff --git a/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml index 388015e..220dec5 100644 --- a/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-system-saas/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one-saas diff --git a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml index a5dd953..2db1105 100644 --- a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one-saas diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml index 756d816..e2b3575 100644 --- a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 106.54.193.225:8848 user-name: nacos password: nacos namespace: one diff --git a/cloud-modules/pom.xml b/cloud-modules/pom.xml index 1d52970..a4d02f4 100644 --- a/cloud-modules/pom.xml +++ b/cloud-modules/pom.xml @@ -18,6 +18,7 @@ cloud-modules-rail cloud-modules-warn cloud-modules-carmanage + cloud-modules-car-gateway cloud-modules diff --git a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml index a62e359..6210ca6 100644 --- a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml +++ b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 127.0.0.1:8848 + addr: 106.54.193.225:8848 user-name: nacos password: nacos namespace: one-saas diff --git a/init-file/cloud-system.sql b/init-file/cloud-system.sql index 3322763..c2c02e7 100644 --- a/init-file/cloud-system.sql +++ b/init-file/cloud-system.sql @@ -639,8 +639,8 @@ CREATE TABLE `sys_user` ( -- Records of sys_user -- ---------------------------- BEGIN; -INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '管理员'); -INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '测试员'); +INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '106.54.193.225', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '管理员'); +INSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '106.54.193.225', '2024-05-23 15:08:18', 'admin', '2024-05-23 15:08:18', '', NULL, '测试员'); COMMIT; -- ---------------------------- From b318c0e30b1ae32af57229b8d38c1fed10213f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Mon, 30 Sep 2024 09:59:01 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=88=B0=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E7=9A=84ID=E5=92=8C=E5=AE=9E=E4=BE=8B=E7=9A=84?= =?UTF-8?q?=E5=85=AC=E7=BD=91ip=E4=BB=A5=E5=8F=8A=E5=AE=9E=E4=BE=8B?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cargateway/cargatewaytest/Sample.java | 107 -------- .../com/muyu/cargateway/domain/Instance.java | 22 ++ .../com/muyu/cargateway/instance/Sample.java | 246 ++++++++++++++++++ .../muyu/cargateway/test/DeleteSample.java | 89 +++++++ .../muyu/cargateway/test/MqttPublisher.java | 60 ----- .../muyu/cargateway/test/SelectSample.java | 79 ++++++ 6 files changed, 436 insertions(+), 167 deletions(-) delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java deleted file mode 100644 index 3ebe6bb..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/Sample.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.muyu.cargateway.cargatewaytest; - -import com.aliyun.ecs20140526.Client; -import com.aliyun.ecs20140526.models.RunInstancesRequest; -import com.aliyun.tea.TeaException; -import com.aliyun.teaopenapi.models.Config; -import com.aliyun.teautil.Common; -import com.aliyun.teautil.models.RuntimeOptions; -import lombok.extern.log4j.Log4j2; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -/** - * @ Tool:IntelliJ IDEA - * @ Author:CHX - * @ Date:2024-09-28-21:10 - * @ Version:1.0 - * @ Description:调用ali的类 - * @author Lenovo - */ -@Log4j2 -@Component -public class Sample implements ApplicationRunner { - - public static Client createClient() throws Exception { - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 - Config config = new Config() - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 - .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); - // Endpoint 请参考 https://api.aliyun.com/product/Ecs - config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; - return new Client(config); - } - public static void generateInstance() throws Exception { - Client client = Sample.createClient(); - RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk(); - //设置系统盘的大小为40GiB - systemDisk.setSize("40"); - //设置系统盘类型为cloud_essd - systemDisk.setCategory("cloud_essd"); - - // 创建创建实例请求对象并设置参数 - - RunInstancesRequest runInstancesRequest = new RunInstancesRequest() - // 设置地域ID - .setRegionId("cn-shanghai") - // 设置镜像ID - .setImageId("m-uf65fvle9qseu9jo5jl3") - // 设置实例规格类型 - .setInstanceType("ecs.t6-c1m1.large") - // 设置安全组ID - .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y") - // 设置虚拟交换机ID - .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3") - // 设置实例名称 - .setInstanceName("server-mqtt") - // 设置付费类型 按量付费 - .setInstanceChargeType("PostPaid") - // 设置系统盘配置 - .setSystemDisk(systemDisk) - // 设置用户名 - .setHostName("root") - // 设置密码 - .setPassword("10160810@a") - // 设置要创创建的实例数量 - .setAmount(1) - .setInternetChargeType("PayByTraffic") - .setInternetMaxBandwidthOut(1); - - RuntimeOptions runtimeOptions = new RuntimeOptions(); - // 尝试执行创建实例请求 - try { - // 复制代码运行请自行打印 API 的返回值 - client.runInstancesWithOptions(runInstancesRequest, runtimeOptions); - } catch (TeaException error) { - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - com.aliyun.teautil.Common.assertAsString(error.message); - } catch (Exception _error) { - TeaException error = new TeaException(_error.getMessage(), _error); - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - Common.assertAsString(error.message); - } - } - - @Override - public void run(ApplicationArguments args){ - try { - log.info("开始创建实例"); - generateInstance(); - } catch (Exception e) { - log.info("创建实例失败"); - throw new RuntimeException(e); - } - log.info("创建实例成功"); - } -} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java new file mode 100644 index 0000000..6323abd --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java @@ -0,0 +1,22 @@ +package com.muyu.cargateway.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-30-9:33 + * @ Version:1.0 + * @ Description: + * @author Lenovo + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Instance { + private String instanceId; + private String ipAddress; + private String status; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java new file mode 100644 index 0000000..52ca067 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java @@ -0,0 +1,246 @@ +package com.muyu.cargateway.instance; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.ecs20140526.models.*; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.Common; +import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.common.redis.service.RedisService; +import lombok.extern.log4j.Log4j2; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-28-21:10 + * @ Version:1.0 + * @ Description:调用ali的类 + * @author Lenovo + */ +@Log4j2 +@Component +public class Sample implements ApplicationRunner , DisposableBean { + + @Autowired + private StringRedisTemplate redisTemplate; + @Autowired + private RedisService redisService; + + public static final String ACCESS_KEY_ID = "LTAI5tDH3FyRx4PRr6anx2TL"; + public static final String ACCESS_KEY_SECRET = "xdQnX2tDattY50raNkUWmHzE2tondP"; + + public static Client createClient() throws Exception { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + Config config = new Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId(ACCESS_KEY_ID) + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret(ACCESS_KEY_SECRET); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; + return new Client(config); + } + + /** + * 创建实例 + * @throws Exception + */ + public void generateInstance() throws Exception { + Client client = Sample.createClient(); + RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk(); + //设置系统盘的大小为40GiB + systemDisk.setSize("40"); + //设置系统盘类型为cloud_essd + systemDisk.setCategory("cloud_essd"); + + // 创建创建实例请求对象并设置参数 + + RunInstancesRequest runInstancesRequest = new RunInstancesRequest() + // 设置地域ID + .setRegionId("cn-shanghai") + // 设置镜像ID + .setImageId("m-uf63y73rquw4ub9znymf") + // 设置实例规格类型 + .setInstanceType("ecs.t6-c1m1.large") + // 设置安全组ID + .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y") + // 设置虚拟交换机ID + .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3") + // 设置实例名称 + .setInstanceName("server-mqtt") + // 设置付费类型 按量付费 + .setInstanceChargeType("PostPaid") + // 设置系统盘配置 + .setSystemDisk(systemDisk) + // 设置用户名 + .setHostName("root") + // 设置密码 + .setPassword("10160810@a") + // 设置要创建的实例数量 + .setAmount(2) + .setInternetChargeType("PayByTraffic") + .setInternetMaxBandwidthOut(1); + + RuntimeOptions runtimeOptions = new RuntimeOptions(); + // 尝试执行创建实例请求 + try { + + + // 复制代码运行请自行打印 API 的返回值 + RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtimeOptions); + log.info("==================实例创建成功"); + RunInstancesResponseBody body = runInstancesResponse.getBody(); + RunInstancesResponseBody.RunInstancesResponseBodyInstanceIdSets instanceIdSets = body.getInstanceIdSets(); + + List instanceIds = new ArrayList<>(); + for (String string : instanceIdSets.instanceIdSet) { + instanceIds.add(string); + } + + + DescribeInstancesResponse describeInstancesResponse = getStrings(client); + log.info("====>实例ID"+instanceIds); + List instancesInstances = describeInstancesResponse.getBody().getInstances().getInstance(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instancesInstances) { + String instanceId = instance.getInstanceId(); + String ipAddress = instance.getPublicIpAddress().getIpAddress().get(0); + String status = instance.getStatus(); + log.info("==================获取到的实例ID为"+instanceId+" IP为"+ipAddress+" 状态为"+status); + instanceIds.add(instanceId); + instanceIds.add(ipAddress); + instanceIds.add(status); + } + + +// for (String string : stringArrayList) { +// log.info("==================获取到的实例ID为"+string); +// } +// redisTemplate.opsForList().rightPush("instanceId",String.valueOf(stringArrayList)); +// log.info("==================redis存储成功"); +// List instanceId = redisTemplate.opsForList().range("instanceId", 0, -1); +// for (String string : instanceId) { +// log.info("==================redis获取实例ID成功"+string); +// } + + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } + } + + /** + * 查询实例的详细信息 + */ + public void selectInstance(){ + + } + + /** + * 删除创建的实例 + * @throws Exception + */ + public void deleteSample() throws Exception { + Client client = Sample.createClient(); + DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); + attributeRequest.setRegionId("cn-shanghai"); + + RuntimeOptions runtimeOptions = new RuntimeOptions(); + + DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); + ArrayList list = new ArrayList<>(); + DescribeInstancesResponseBody body = instancesWithOptions.getBody(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { + list.add(instance.getInstanceId()); + } + log.info("list:"+list); + DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest(); + deleteInstancesRequest.setRegionId("cn-shanghai") + .setDryRun(false) + .setForce(true) + .setTerminateSubscription(true) + .setInstanceId(list); + RuntimeOptions runtime = new RuntimeOptions(); + try{ + client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); + }catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + } + + /** + * 获取实例ID + * @param client + * @return string类型的实例ID集合 + * @throws Exception + */ + @NotNull + private DescribeInstancesResponse getStrings(Client client) throws Exception { + DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); + attributeRequest.setInstanceName("server-mqtt"); + attributeRequest.setRegionId("cn-shanghai"); + + RuntimeOptions runtimeOptions = new RuntimeOptions(); + + DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); + return instancesWithOptions; + } + + @Override + public void run(ApplicationArguments args){ + try { + log.info("开始创建实例"); + generateInstance(); + } catch (Exception e) { + log.info("创建实例失败"); + throw new RuntimeException(e); + } + log.info("创建实例成功"); + } + + @Override + public void destroy(){ + try { + log.info("删除实例方法"); + deleteSample(); + } catch (Exception e) { + log.info("删除实例失败"); + throw new RuntimeException(e); + } + log.info("删除实例成功"); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java new file mode 100644 index 0000000..043c9c6 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java @@ -0,0 +1,89 @@ +//package com.muyu.cargateway.cargatewaytest; +// +//import com.aliyun.ecs20140526.Client; +//import com.aliyun.ecs20140526.models.*; +//import com.aliyun.tea.TeaException; +//import com.aliyun.teaopenapi.models.Config; +//import com.aliyun.teautil.models.RuntimeOptions; +//import lombok.extern.log4j.Log4j2; +//import org.springframework.beans.factory.DisposableBean; +//import org.springframework.stereotype.Component; +// +//import java.util.ArrayList; +// +///** +// * @ Tool:IntelliJ IDEA +// * @ Author:CHX +// * @ Date:2024-09-28-21:20 +// * @ Version:1.0 +// * @ Description:删除实例 +// * @author Lenovo +// */ +//@Log4j2 +//@Component +//public class DeleteSample implements DisposableBean { +// +// public static Client createClient() throws Exception { +// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 +// Config config = new Config() +// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 +// .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") +// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 +// .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); +// // Endpoint 请参考 https://api.aliyun.com/product/Ecs +// config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; +// return new Client(config); +// } +// public static void deleteSample() throws Exception { +// Client client = DeleteSample.createClient(); +// DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); +// attributeRequest.setRegionId("cn-shanghai"); +// +// RuntimeOptions runtimeOptions = new RuntimeOptions(); +// +// DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); +// ArrayList list = new ArrayList<>(); +// DescribeInstancesResponseBody body = instancesWithOptions.getBody(); +// for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { +// list.add(instance.getInstanceId()); +// } +// log.info("list:"+list); +// DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest(); +// deleteInstancesRequest.setRegionId("cn-shanghai") +// .setDryRun(false) +// .setForce(true) +// .setTerminateSubscription(true) +// .setInstanceId(list); +// +// RuntimeOptions runtime = new RuntimeOptions(); +// try{ +// client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); +// }catch (TeaException error) { +// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 +// // 错误 message +// System.out.println(error.getMessage()); +// // 诊断地址 +// System.out.println(error.getData().get("Recommend")); +// com.aliyun.teautil.Common.assertAsString(error.message); +// } catch (Exception _error) { +// TeaException error = new TeaException(_error.getMessage(), _error); +// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 +// // 错误 message +// System.out.println(error.getMessage()); +// // 诊断地址 +// System.out.println(error.getData().get("Recommend")); +// com.aliyun.teautil.Common.assertAsString(error.message); +// } +// } +// @Override +// public void destroy(){ +// try { +// log.info("删除实例方法"); +// deleteSample(); +// } catch (Exception e) { +// log.info("删除实例失败"); +// throw new RuntimeException(e); +// } +// log.info("删除实例成功"); +// } +//} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java deleted file mode 100644 index 35093cc..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/MqttPublisher.java +++ /dev/null @@ -1,60 +0,0 @@ -//package com.muyu.cargateway.test; -// -//import lombok.extern.log4j.Log4j2; -//import org.eclipse.paho.client.mqttv3.MqttClient; -//import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -//import org.eclipse.paho.client.mqttv3.MqttException; -//import org.eclipse.paho.client.mqttv3.MqttMessage; -// -///** -// * @ Tool:IntelliJ IDEA -// * @ Author:CHX -// * @ Date:2024-09-27-22:32 -// * @ Version:1.0 -// * @ Description:mqtt -// * @author Lenovo -// */ -//@Log4j2 -//public class MqttPublisher { -// //MQTT代理地址 -// String broker="tcp://106.54.193.225:1883"; -// //客户端ID -// String clientId="car-gateway"; -// //主题 -// String topic="car-gateway"; -// //要发送的内容 -// String content="连接成功"; -// //服务质量 0:最多一次 1:至少一次 2: -// int qos=0; -// MqttClient mqttClient; -// -// { -// try { -// mqttClient = new MqttClient(broker, clientId); -// -// //连接到MQtt代理 -// MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); -// //清空会话 -// mqttConnectOptions.setCleanSession(true); -// //连接 -// mqttClient.connect(mqttConnectOptions); -// log.info("MQTT客户端连接成功"+broker); -// -// //发送消息 -// MqttMessage message = new MqttMessage(content.getBytes()); -// //设置服务的质量 -// message.setQos(qos); -// //开始发送消息 -// mqttClient.publish(topic, message); -// log.info("消息发送成功,消息是:"+content); -// -// //断开连接 -// mqttClient.disconnect(); -// log.info("MQTT断开连接成功"); -// } catch (MqttException e) { -// //输出异常信息 -// e.getStackTrace(); -// throw new RuntimeException(e); -// } -// } -//} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java new file mode 100644 index 0000000..8444813 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java @@ -0,0 +1,79 @@ +package com.muyu.cargateway.test; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.ecs20140526.models.DescribeInstanceAttributeRequest; +import com.aliyun.ecs20140526.models.DescribeInstancesRequest; +import com.aliyun.ecs20140526.models.DescribeInstancesResponse; +import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.Common; +import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.cargateway.instance.Sample; +import lombok.extern.log4j.Log4j2; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-09-29-20:16 + * @ Version:1.0 + * @ Description:查询实例所有信息 + * @author Lenovo + */ +@Log4j2 +public class SelectSample { + public static Client createClient() throws Exception { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。 + Config config = new Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs.cn-shanghai.aliyuncs.com"; + return new Client(config); + } + + public static void main(String[] args_) throws Exception { + List args = Arrays.asList(args_); + Client client = Sample.createClient(); + DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() + .setRegionId("cn-shanghai"); + RuntimeOptions runtime = new RuntimeOptions(); + try { + // 复制代码运行请自行打印 API 的返回值 + DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(describeInstancesRequest, runtime); + ArrayList list = new ArrayList<>(); + DescribeInstancesResponseBody body = instancesWithOptions.getBody(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { + list.add(instance.getInstanceId()); + list.add(instance.getPublicIpAddress().ipAddress.get(0)); + list.add(instance.getStatus()); + + } + log.info(Common.toJSONString(list)); + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } + + } +} From f5d6b5c00d700fa569b6350bc396048babd87013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Sun, 6 Oct 2024 16:26:36 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E6=8E=A5=E5=8F=97=E5=88=B0vin=20?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=20=E6=97=B6=E9=97=B4=E6=88=B3=20?= =?UTF-8?q?=E9=9A=8F=E6=9C=BA=E6=95=B0=20=E6=8B=BC=E6=8E=A5=E5=AD=98?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-auth/src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- .../cloud-modules-car-gateway/pom.xml | 32 ++--- .../cargatewaytest/DeleteSample.java | 89 ------------ .../cargateway/config/RabbitmqConfig.java | 101 +++++++++++++ .../muyu/cargateway/config/RedisConfig.java | 33 +++++ .../cargateway/config/RestTemplateConfig.java | 48 +++++++ .../CarOneClickOperationController.java | 20 ++- .../cargateway/controller/TestController.java | 64 --------- .../{Instance.java => AliInstance.java} | 11 +- .../muyu/cargateway/domain/ConnectWeight.java | 27 ++++ .../muyu/cargateway/domain/HttpStatus.java | 93 ++++++++++++ .../cargateway/domain/VehicleConnection.java | 35 +++++ .../com/muyu/cargateway/domain/VinIp.java | 27 ++++ .../domain/model/MqttServerModel.java | 29 ++++ .../domain/req/VehicleConnectionReq.java | 38 +++++ .../com/muyu/cargateway/instance/Sample.java | 82 +++++------ .../mapper/CarOneClickOperationMapper.java | 2 + .../service/CarOneClickOperationService.java | 9 +- .../Impl/CarOneClickOperationServiceImpl.java | 29 ++++ .../com/muyu/cargateway/utils/ECSTool.java | 135 ++++++++++++++++++ .../src/main/resources/bootstrap.yml | 4 +- .../mapper/CarOneClickOperationMapper.xml | 14 ++ .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- .../src/main/resources/bootstrap.yml | 2 +- 27 files changed, 703 insertions(+), 231 deletions(-) delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java rename cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/{Instance.java => AliInstance.java} (75%) create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ConnectWeight.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/HttpStatus.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/MqttServerModel.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/req/VehicleConnectionReq.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/utils/ECSTool.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml index 910ec21..930ce5a 100644 --- a/cloud-auth/src/main/resources/bootstrap.yml +++ b/cloud-auth/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 106.54.193.225:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one-saas diff --git a/cloud-gateway/src/main/resources/bootstrap.yml b/cloud-gateway/src/main/resources/bootstrap.yml index cb4e64c..3782dab 100644 --- a/cloud-gateway/src/main/resources/bootstrap.yml +++ b/cloud-gateway/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 106.54.193.225:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one-saas diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml index d466843..cc68191 100644 --- a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 106.54.193.225:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one diff --git a/cloud-modules/cloud-modules-car-gateway/pom.xml b/cloud-modules/cloud-modules-car-gateway/pom.xml index 2445efc..74ddfa6 100644 --- a/cloud-modules/cloud-modules-car-gateway/pom.xml +++ b/cloud-modules/cloud-modules-car-gateway/pom.xml @@ -67,28 +67,28 @@ cloud-common-datascope - - - - - - com.muyu cloud-common-api-doc - - - - - - - - - - + + + org.apache.httpcomponents + httpcore + 4.4.12 + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + org.springframework.boot + spring-boot-starter-amqp + com.aliyun ecs20140526 diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java deleted file mode 100644 index 545d937..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/cargatewaytest/DeleteSample.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.muyu.cargateway.cargatewaytest; - -import com.aliyun.ecs20140526.Client; -import com.aliyun.ecs20140526.models.*; -import com.aliyun.tea.TeaException; -import com.aliyun.teaopenapi.models.Config; -import com.aliyun.teautil.models.RuntimeOptions; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; - -/** - * @ Tool:IntelliJ IDEA - * @ Author:CHX - * @ Date:2024-09-28-21:20 - * @ Version:1.0 - * @ Description:删除实例 - * @author Lenovo - */ -@Log4j2 -@Component -public class DeleteSample implements DisposableBean { - - public static Client createClient() throws Exception { - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 - Config config = new Config() - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 - .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); - // Endpoint 请参考 https://api.aliyun.com/product/Ecs - config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; - return new Client(config); - } - public static void deleteSample() throws Exception { - Client client = DeleteSample.createClient(); - DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); - attributeRequest.setRegionId("cn-shanghai"); - - RuntimeOptions runtimeOptions = new RuntimeOptions(); - - DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); - ArrayList list = new ArrayList<>(); - DescribeInstancesResponseBody body = instancesWithOptions.getBody(); - for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { - list.add(instance.getInstanceId()); - } - log.info("list:"+list); - DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest(); - deleteInstancesRequest.setRegionId("cn-shanghai") - .setDryRun(false) - .setForce(true) - .setTerminateSubscription(true) - .setInstanceId(list); - - RuntimeOptions runtime = new RuntimeOptions(); - try{ - client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); - }catch (TeaException error) { - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - com.aliyun.teautil.Common.assertAsString(error.message); - } catch (Exception _error) { - TeaException error = new TeaException(_error.getMessage(), _error); - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - com.aliyun.teautil.Common.assertAsString(error.message); - } - } - @Override - public void destroy(){ - try { - log.info("删除实例方法"); - deleteSample(); - } catch (Exception e) { - log.info("删除实例失败"); - throw new RuntimeException(e); - } - log.info("删除实例成功"); - } -} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java new file mode 100644 index 0000000..d215a28 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java @@ -0,0 +1,101 @@ +package com.muyu.cargateway.config; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.Exchange; +import org.springframework.amqp.core.ExchangeBuilder; +import org.springframework.amqp.core.Queue; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-04-15:13 + * @ Version:1.0 + * @ Description:rabbitmq配置类 + * @author Lenovo + */ +@Configuration +public class RabbitmqConfig { + // 日志 + private static final Logger logger = LoggerFactory.getLogger(RabbitmqConfig.class); + + /** + * 队列 + */ + public static final String QUEUE_INFORM_EMAIL = "queue_inform_email"; + /** + * 队列 + */ + public static final String QUEUE_INFORM_SMS = "queue_inform_sms"; + /** + * 交换机 + */ + public static final String EXCHANGE_TOPICS_INFORM = "exchange_topics_inform"; + /** + * 路由key + */ + public static final String ROUTINGKEY_EMAIL = "inform.#.email.#"; + /** + * 路由key + */ + public static final String ROUTINGKEY_SMS = "inform.#.sms.#"; + + /** + * 声明交换机,做持久化 + */ + @Bean(EXCHANGE_TOPICS_INFORM) + public Exchange exchangeTopicsInform() { + try { + Exchange exchange = ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build(); + logger.info("创建的交换机为: {}", EXCHANGE_TOPICS_INFORM); + return exchange; + } catch (Exception e) { + logger.error("创建该: {} 交换机失败", EXCHANGE_TOPICS_INFORM, e); + throw e; + } + } + + // 声明QUEUE_INFORM_EMAIL队列 + @Bean(QUEUE_INFORM_EMAIL) + public Queue queueInformEmail() { + try { + Queue queue = new Queue(QUEUE_INFORM_EMAIL); + logger.info("创建的对列为: {}", QUEUE_INFORM_EMAIL); + return queue; + } catch (Exception e) { + logger.error("创建该: {} 队列失败", QUEUE_INFORM_EMAIL, e); + throw e; + } + } + + // 声明QUEUE_INFORM_SMS队列 + @Bean(QUEUE_INFORM_SMS) + public Queue queueInformSms() { + try { + Queue queue = new Queue(QUEUE_INFORM_SMS); + logger.info("创建的对列为: {}", QUEUE_INFORM_SMS); + return queue; + } catch (Exception e) { + logger.error("创建该: {} 队列失败", QUEUE_INFORM_SMS, e); + throw e; + } + } + + //ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey + @Bean + public Binding bindingQueueInformEmail(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue, + @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){ + return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs(); + } + //ROUTINGKEY_SMS队列绑定交换机,指定routingKey + @Bean + public Binding bindingRoutingKeySms(@Qualifier(QUEUE_INFORM_SMS) Queue queue, + @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){ + return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs(); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java new file mode 100644 index 0000000..8687020 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java @@ -0,0 +1,33 @@ +package com.muyu.cargateway.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-04-15:12 + * @ Version:1.0 + * @ Description:Redis配置类 + * @author Lenovo + */ +@Configuration +public class RedisConfig { + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); + + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(new StringRedisSerializer()); + return redisTemplate; + + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java new file mode 100644 index 0000000..0073735 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java @@ -0,0 +1,48 @@ +package com.muyu.cargateway.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-04-15:08 + * @ Version:1.0 + * @ Description:rest配置类 + * @author Lenovo + */ +@Log4j2 +@Configuration +public class RestTemplateConfig { + @Bean + public RestTemplate restTemplate(ClientHttpRequestFactory factory) { + return new RestTemplate(factory); + } + + /** + * 创建并配置客户端HTTP请求工厂实例。 + * 注意:这里设置了连接和读取数据的超时时间,分别设为15秒和5秒。 + * 这些值可以根据实际网络状况和应用需求进行调整。 + * + * @return 配置好的客户端请求工厂对象 + */ + @Bean + public ClientHttpRequestFactory simpleClientHttpRequestFactory() { + try { + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + // 设置读取超时时间为5秒 + factory.setReadTimeout(5000); + // 设置连接超时时间为15秒 + factory.setConnectTimeout(15000); + return factory; + } catch (Exception e) { + // 处理创建工厂或设置超时时间时可能出现的异常 + log.info("创建工厂失败: " + e.getMessage()); + throw new RuntimeException("初始化HTTP请求失败", e); + } + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java index df51878..142bd8c 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java @@ -1,10 +1,13 @@ package com.muyu.cargateway.controller; +import com.muyu.cargateway.domain.req.VehicleConnectionReq; import com.muyu.cargateway.service.CarOneClickOperationService; import com.muyu.common.core.domain.Result; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -13,15 +16,26 @@ import org.springframework.web.bind.annotation.RestController; * @ Author:CHX * @ Date:2024-09-26-20:14 * @ Version:1.0 - * @ Description:车辆一键操作控制层 + * @ Description:车辆 * @author Lenovo */ @Log4j2 @RestController -@RequestMapping("/car/oneClick") +@RequestMapping("/vehicleGateway") +@Tag(name = "连接车辆控制层") public class CarOneClickOperationController { @Autowired private CarOneClickOperationService carOneClickOperationService; - + /** + * 获取http连接的参数 + * @param vehicleConnectionReq + * @return + */ + @PostMapping("/receiveMsg/connect") + public Result receiveMsg(@RequestBody VehicleConnectionReq vehicleConnectionReq){ + log.info("=======>"+vehicleConnectionReq); + carOneClickOperationService.getConnect(vehicleConnectionReq); + return Result.success(); + } } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java deleted file mode 100644 index 739be0c..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/TestController.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.muyu.cargateway.controller; - -import com.muyu.cargateway.service.CarOneClickOperationService; -import lombok.extern.log4j.Log4j2; -import org.eclipse.paho.client.mqttv3.*; -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.RestController; - -/** - * @ Tool:IntelliJ IDEA - * @ Author:CHX - * @ Date:2024-09-27-20:08 - * @ Version:1.0 - * @ Description:fluxmq连接测试类 - * @author Lenovo - */ -@Log4j2 -@RestController -@RequestMapping("/testCarGateway") -public class TestController { - @PostMapping("/testCarConnect") - public void testCarConnect() { - String topic="carOneClick"; - String message="{\"carId\":\"123456789\",\"operation\":\"turnOn\"}";; - String broker="tcp://106.54.193.225:1883"; - String clientId="javaSample"; - int qos=1; - - try { - MqttClient mqttClient =new MqttClient(broker, clientId); - MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); - mqttConnectOptions.setCleanSession(true); - log.info("连接成功"+broker); - mqttClient.connect(mqttConnectOptions); - - mqttClient.subscribe(topic,0); - mqttClient.setCallback(new MqttCallback() { - @Override - public void connectionLost(Throwable throwable) { - log.info("连接丢失"); - } - - @Override - public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { - log.info(new String(mqttMessage.getPayload())); - } - @Override - public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { - //发布完成时调用 - } - }); - } catch (MqttException e) { - log.info("连接失败"+e.getReasonCode()); - log.info("信息"+e.getMessage()); - log.info("异常"+e); - log.info("异常信息"+e.getLocalizedMessage()); - log.info("异常类型"+e.getClass()); - e.printStackTrace(); - throw new RuntimeException(e); - } - } -} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliInstance.java similarity index 75% rename from cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java rename to cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliInstance.java index 6323abd..820c067 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/Instance.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliInstance.java @@ -15,8 +15,17 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class Instance { +public class AliInstance { + /** + *实例ID + */ private String instanceId; + /** + * 实例IP + */ private String ipAddress; + /** + * 实例状态 + */ private String status; } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ConnectWeight.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ConnectWeight.java new file mode 100644 index 0000000..efd0076 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/ConnectWeight.java @@ -0,0 +1,27 @@ +package com.muyu.cargateway.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-04-15:16 + * @ Version:1.0 + * @ Description:车辆服务器 + * @author Lenovo + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ConnectWeight { + /** + * 车辆服务器IP + */ + private String carServerIp; + /** + * 权重值 + */ + private Integer weightValue; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/HttpStatus.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/HttpStatus.java new file mode 100644 index 0000000..8665adb --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/HttpStatus.java @@ -0,0 +1,93 @@ +package com.muyu.cargateway.domain; + +/** + * 返回状态码 + * + * @author ruoyi + */ +public class HttpStatus { + /** + * 操作成功 + */ + public static final int SUCCESS = 200; + + /** + * 对象创建成功 + */ + public static final int CREATED = 201; + + /** + * 请求已经被接受 + */ + public static final int ACCEPTED = 202; + + /** + * 操作已经执行成功,但是没有返回数据 + */ + public static final int NO_CONTENT = 204; + + /** + * 资源已被移除 + */ + public static final int MOVED_PERM = 301; + + /** + * 重定向 + */ + public static final int SEE_OTHER = 303; + + /** + * 资源没有被修改 + */ + public static final int NOT_MODIFIED = 304; + + /** + * 参数列表错误(缺少,格式不匹配) + */ + public static final int BAD_REQUEST = 400; + + /** + * 未授权 + */ + public static final int UNAUTHORIZED = 401; + + /** + * 访问受限,授权过期 + */ + public static final int FORBIDDEN = 403; + + /** + * 资源,服务未找到 + */ + public static final int NOT_FOUND = 404; + + /** + * 不允许的http方法 + */ + public static final int BAD_METHOD = 405; + + /** + * 资源冲突,或者资源被锁 + */ + public static final int CONFLICT = 409; + + /** + * 不支持的数据,媒体类型 + */ + public static final int UNSUPPORTED_TYPE = 415; + + /** + * 系统内部错误 + */ + public static final int ERROR = 500; + + /** + * 接口未实现 + */ + public static final int NOT_IMPLEMENTED = 501; + + /** + * 系统警告消息 + */ + public static final int WARN = 601; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java new file mode 100644 index 0000000..ef3bc10 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java @@ -0,0 +1,35 @@ +package com.muyu.cargateway.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-06-11:05 + * @ Version:1.0 + * @ Description:车辆鉴权的参数 + * @author Lenovo + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class VehicleConnection { + /** + * 车辆VIN + */ + private String vehicleVin; + /** + * 用户名 + */ + private String username; + + private String timestamp; + + private String nonce; + /** + * 密码 + */ + private String password; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java new file mode 100644 index 0000000..7d37381 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java @@ -0,0 +1,27 @@ +package com.muyu.cargateway.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-03-10:10 + * @ Version:1.0 + * @ Description:车辆vin + * @author Lenovo + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class VinIp { + /** + * 车辆的vin + */ + String vin; + /** + * 车辆的ip + */ + String ip; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/MqttServerModel.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/MqttServerModel.java new file mode 100644 index 0000000..2f29353 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/model/MqttServerModel.java @@ -0,0 +1,29 @@ +package com.muyu.cargateway.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-03-10:12 + * @ Version:1.0 + * @ Description:Mqtt服务模型 + * @author Lenovo + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MqttServerModel { + /** + * Mqtt服务节点 + */ + private String broker; + /** + * MQTT订阅主题 + */ + private String topic; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/req/VehicleConnectionReq.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/req/VehicleConnectionReq.java new file mode 100644 index 0000000..3101fac --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/req/VehicleConnectionReq.java @@ -0,0 +1,38 @@ +package com.muyu.cargateway.domain.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-03-10:04 + * @ Version:1.0 + * @ Description:车辆获取连接地址 + * @author Lenovo + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class VehicleConnectionReq { + /** + * 车辆VIN + */ + private String vehicleVin; + /** + * 用户名 + */ + private String username; + /** + * 时间戳 + */ + private String timestamp; + /** + * 随机数 + */ + private String nonce; + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java index 52ca067..4e6b5a7 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java @@ -6,6 +6,7 @@ import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.Common; import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.cargateway.domain.AliInstance; import com.muyu.common.redis.service.RedisService; import lombok.extern.log4j.Log4j2; import org.jetbrains.annotations.NotNull; @@ -13,7 +14,6 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -31,8 +31,6 @@ import java.util.List; @Component public class Sample implements ApplicationRunner , DisposableBean { - @Autowired - private StringRedisTemplate redisTemplate; @Autowired private RedisService redisService; @@ -69,7 +67,7 @@ public class Sample implements ApplicationRunner , DisposableBean { // 设置地域ID .setRegionId("cn-shanghai") // 设置镜像ID - .setImageId("m-uf63y73rquw4ub9znymf") + .setImageId("m-uf6ih0vnl5f51pquns11") // 设置实例规格类型 .setInstanceType("ecs.t6-c1m1.large") // 设置安全组ID @@ -98,65 +96,68 @@ public class Sample implements ApplicationRunner , DisposableBean { // 复制代码运行请自行打印 API 的返回值 RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtimeOptions); - log.info("==================实例创建成功"); + log.info("实例创建成功: {}", runInstancesResponse.getBody().getInstanceIdSets().instanceIdSet); RunInstancesResponseBody body = runInstancesResponse.getBody(); RunInstancesResponseBody.RunInstancesResponseBodyInstanceIdSets instanceIdSets = body.getInstanceIdSets(); + List instanceList = new ArrayList<>(); List instanceIds = new ArrayList<>(); + //遍历实例ID for (String string : instanceIdSets.instanceIdSet) { instanceIds.add(string); } + // 在获取实例详细信息时,确保获取所有必要的信息 + DescribeInstancesResponse describeInstancesResponse = getInstances(client); + List instances = describeInstancesResponse.getBody().getInstances().getInstance(); + List aliInstances = new ArrayList<>(); + instanceIds = new ArrayList<>(); - DescribeInstancesResponse describeInstancesResponse = getStrings(client); - log.info("====>实例ID"+instanceIds); - List instancesInstances = describeInstancesResponse.getBody().getInstances().getInstance(); - for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instancesInstances) { + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instances) { String instanceId = instance.getInstanceId(); String ipAddress = instance.getPublicIpAddress().getIpAddress().get(0); String status = instance.getStatus(); - log.info("==================获取到的实例ID为"+instanceId+" IP为"+ipAddress+" 状态为"+status); + log.info("获取到的实例ID为{} IP为{} 状态为{}", instanceId, ipAddress, status); + aliInstances.add(new AliInstance(instanceId, ipAddress, status)); instanceIds.add(instanceId); - instanceIds.add(ipAddress); - instanceIds.add(status); } - - -// for (String string : stringArrayList) { -// log.info("==================获取到的实例ID为"+string); -// } -// redisTemplate.opsForList().rightPush("instanceId",String.valueOf(stringArrayList)); -// log.info("==================redis存储成功"); -// List instanceId = redisTemplate.opsForList().range("instanceId", 0, -1); -// for (String string : instanceId) { -// log.info("==================redis获取实例ID成功"+string); -// } + //实例信息集合(实例id,ip 状态) 存储在redis中 + redisService.setCacheList("instanceList", aliInstances); + // 实例ID集合 存储在redis中 + redisService.setCacheList("instanceIds", instanceIds); } catch (TeaException error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message - System.out.println(error.getMessage()); + log.info(error.getMessage()); // 诊断地址 - System.out.println(error.getData().get("Recommend")); + log.info(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message - System.out.println(error.getMessage()); + log.info(error.getMessage()); // 诊断地址 - System.out.println(error.getData().get("Recommend")); + log.info(error.getData().get("Recommend")); Common.assertAsString(error.message); } } - /** - * 查询实例的详细信息 + * 获取实例ID + * @param client + * @return string类型的实例ID集合 + * @throws Exception */ - public void selectInstance(){ + @NotNull + private DescribeInstancesResponse getInstances(Client client) throws Exception { + DescribeInstancesRequest request = new DescribeInstancesRequest(); + request.setInstanceName("server-mqtt"); + request.setRegionId("cn-shanghai"); + RuntimeOptions runtimeOptions = new RuntimeOptions(); + return client.describeInstancesWithOptions(request, runtimeOptions); } - /** * 删除创建的实例 * @throws Exception @@ -202,24 +203,6 @@ public class Sample implements ApplicationRunner , DisposableBean { } } - /** - * 获取实例ID - * @param client - * @return string类型的实例ID集合 - * @throws Exception - */ - @NotNull - private DescribeInstancesResponse getStrings(Client client) throws Exception { - DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); - attributeRequest.setInstanceName("server-mqtt"); - attributeRequest.setRegionId("cn-shanghai"); - - RuntimeOptions runtimeOptions = new RuntimeOptions(); - - DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); - return instancesWithOptions; - } - @Override public void run(ApplicationArguments args){ try { @@ -236,6 +219,7 @@ public class Sample implements ApplicationRunner , DisposableBean { public void destroy(){ try { log.info("删除实例方法"); + Thread.sleep(100000); deleteSample(); } catch (Exception e) { log.info("删除实例失败"); diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java index 25cffea..03eed48 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java @@ -1,5 +1,6 @@ package com.muyu.cargateway.mapper; +import com.muyu.cargateway.domain.VehicleConnection; import org.apache.ibatis.annotations.Mapper; /** @@ -12,4 +13,5 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface CarOneClickOperationMapper { + void addConnect(VehicleConnection vehicleConnection); } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java index 27dafaa..42638a6 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java @@ -1,5 +1,7 @@ package com.muyu.cargateway.service; +import com.muyu.cargateway.domain.req.VehicleConnectionReq; + /** * @ Tool:IntelliJ IDEA * @ Author:CHX @@ -10,5 +12,10 @@ package com.muyu.cargateway.service; */ public interface CarOneClickOperationService { - + /** + * 获取连接 + * @param vehicleConnectionReq 车辆连接请求参数 + * @return + */ + void getConnect(VehicleConnectionReq vehicleConnectionReq); } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java index 4facb79..9aa6479 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java @@ -1,6 +1,12 @@ package com.muyu.cargateway.service.Impl; +import com.muyu.cargateway.domain.VehicleConnection; +import com.muyu.cargateway.domain.req.VehicleConnectionReq; +import com.muyu.cargateway.mapper.CarOneClickOperationMapper; import com.muyu.cargateway.service.CarOneClickOperationService; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -11,8 +17,31 @@ import org.springframework.stereotype.Service; * @ Description:车辆一键操作业务实现层 * @author Lenovo */ +@Log4j2 @Service public class CarOneClickOperationServiceImpl implements CarOneClickOperationService { + @Autowired + private CarOneClickOperationMapper carOneClickOperationMapper; + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * 获取连接信息 + * @param vehicleConnectionReq 车辆连接请求参数 + * @return + */ + @Override + public void getConnect(VehicleConnectionReq vehicleConnectionReq) { + log.info("车辆连接请求:{}",vehicleConnectionReq.toString()); + // 发送消息 + rabbitTemplate.convertAndSend("exchange_topics_inform","",vehicleConnectionReq.getVehicleVin()); + + VehicleConnection vehicleConnection = new VehicleConnection(); + vehicleConnection.setVehicleVin(vehicleConnectionReq.getVehicleVin()); + vehicleConnection.setUsername(vehicleConnectionReq.getUsername()); + vehicleConnection.setPassword(vehicleConnectionReq.getVehicleVin()+vehicleConnectionReq.getTimestamp()+vehicleConnectionReq.getNonce()); + carOneClickOperationMapper.addConnect(vehicleConnection); + } } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/utils/ECSTool.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/utils/ECSTool.java new file mode 100644 index 0000000..e96fac4 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/utils/ECSTool.java @@ -0,0 +1,135 @@ +package com.muyu.cargateway.utils; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.ecs20140526.models.DeleteInstanceRequest; +import com.aliyun.ecs20140526.models.DescribeInstancesRequest; +import com.aliyun.ecs20140526.models.DescribeInstancesResponse; +import com.aliyun.ecs20140526.models.RunInstancesRequest; +import com.aliyun.tea.TeaException; +import com.aliyun.teaopenapi.models.Config; +import com.aliyun.teautil.Common; +import com.aliyun.teautil.models.RuntimeOptions; +import lombok.extern.log4j.Log4j2; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-02-16:04 + * @ Version:1.0 + * @ Description:ecs实例工具类 + * @author Lenovo + */ +@Log4j2 +public class ECSTool { + + public static final String ACCESS_KEY_ID = "LTAI5tDH3FyRx4PRr6anx2TL"; + public static final String ACCESS_KEY_SECRET = "xdQnX2tDattY50raNkUWmHzE2tondP"; + + public static Client createClient() throws Exception { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + Config config = new Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId(ACCESS_KEY_ID) + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret(ACCESS_KEY_SECRET); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; + return new Client(config); + } + public static void runEcsInstance(String regionId, String launchTemplateId) throws Exception { + Client client = ECSTool.createClient(); + RunInstancesRequest request = new RunInstancesRequest(); + request.setRegionId(regionId) + .setLaunchTemplateId(launchTemplateId); + RuntimeOptions runtimeOptions = new RuntimeOptions(); + try{ + client.runInstancesWithOptions(request, runtimeOptions); + }catch (Exception error){ + // 处理API调用过程中出现的异常 + System.out.println(error.getMessage()); + if (error instanceof TeaException) { + // 处理特定类型的异常,如TeaException + TeaException teaError = (TeaException) error; + // 打印诊断推荐链接 + System.out.println(teaError.getData().get("Recommend")); + // 断言错误信息 + com.aliyun.teautil.Common.assertAsString(teaError.getMessage()); + } else { + // 处理其他类型的异常 + System.out.println(error.getMessage()); + } + } + } + + /** + *销毁实例 + */ + public static void runEcsRemove(String instanceId) throws Exception { + Client client = ECSTool.createClient(); + DeleteInstanceRequest deleteInstancesRequest = new DeleteInstanceRequest(); + deleteInstancesRequest.setInstanceId(instanceId); + RuntimeOptions runtimeOptions = new RuntimeOptions(); + + try { + // 复制代码运行请自行打印 API 的返回值 + client.deleteInstanceWithOptions(deleteInstancesRequest, runtimeOptions); + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + } + + /** + * 查询实例列表 + * @param regionId 地域ID + */ + public static List findInstance(String regionId) throws Exception { + Client client = ECSTool.createClient(); + DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest(); + describeInstancesRequest.setRegionId(regionId); + RuntimeOptions runtimeOptions = new RuntimeOptions(); + List stringArrayList = new ArrayList<>(); + try { + DescribeInstancesResponse response = client.describeInstancesWithOptions(describeInstancesRequest, runtimeOptions); + List> ipListList = response.getBody().instances.getInstance().stream().map(instance -> instance.publicIpAddress.ipAddress).collect(Collectors.toList()); + for (List strings : ipListList) { + for (String ip : strings) { + stringArrayList.add(ip); + } + return stringArrayList; + } + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + Common.assertAsString(error.message); + } + return null; + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml index 335687b..d9f3d66 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml @@ -1,6 +1,6 @@ # Tomcat server: - port: 9702 + port: 12900 # nacos线上地址 nacos: @@ -19,7 +19,7 @@ spring: allow-bean-definition-overriding: true application: # 应用名称 - name: cloud-breakdown + name: cloud-car-gateway profiles: # 环境配置 active: dev diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml new file mode 100644 index 0000000..8d3f52d --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml @@ -0,0 +1,14 @@ + + + + + + + insert into car_one_click_operation + (vehicle_vin,user_name,password) + values + (#{vehicleVin},#{username},#{password}) + + diff --git a/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml index a07c11c..c5229d5 100644 --- a/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 106.54.193.225:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: public diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml index e2b3575..a12bfd9 100644 --- a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 106.54.193.225:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one diff --git a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml index 6210ca6..e10b6f5 100644 --- a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml +++ b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml @@ -4,7 +4,7 @@ server: # nacos线上地址 nacos: - addr: 106.54.193.225:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one-saas From f38e42f72fea8d69a0691b6f9f8d17a6f81d97e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Sun, 6 Oct 2024 21:41:25 +0800 Subject: [PATCH 04/14] =?UTF-8?q?rabbitmq=E7=9A=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rabbit/RabbitListenerConfigurer.java | 6 ++- .../rabbit/config/ConfirmCallbackConfig.java | 47 +++++++++++++++++++ .../rabbit/config/ReturnCallbackConfig.java | 42 +++++++++++++++++ .../cloud-modules-car-gateway/pom.xml | 10 ++-- .../muyu/cargateway/config/RedisConfig.java | 1 - .../com/muyu/cargateway/instance/Sample.java | 4 +- 6 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java 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 index af09bfd..4e250d0 100644 --- 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 @@ -2,12 +2,16 @@ package com.muyu.common.rabbit; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar; -import javax.annotation.Resource; 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; +import javax.annotation.Resource; + +/** + * @author Lenovo + */ @Configuration public class RabbitListenerConfigurer implements org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer { diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java new file mode 100644 index 0000000..1e25c6f --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java @@ -0,0 +1,47 @@ +package com.muyu.common.rabbit.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + + +/** + * @author Lenovo + */ +@Component +@Log4j2 +public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + */ + @PostConstruct + public void init() { + rabbitTemplate.setConfirmCallback(this); + } + + /** + * 交换机不管是否收到消息的一个回调方法 + * + * @param correlationData 消息相关数据 + * @param ack 交换机是否收到消息 + * @param cause 失败原因 + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (!ack) { + String exchange = correlationData.getReturned().getExchange(); + String message = correlationData.getReturned().getMessage().getBody().toString(); + // 发送异常 + log.error("消息:{},发送到交换机:{}失败,原因是:{}", message, exchange, cause); + } + } + +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java new file mode 100644 index 0000000..ae17741 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java @@ -0,0 +1,42 @@ +package com.muyu.common.rabbit.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 消息发送到队列的确认 + * @author Lenovo + */ +@Component +@Log4j2 +public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + /** + * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + */ + @PostConstruct + public void init() { + rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送失败 则会执行这个方法 + * + * @param returnedMessage the returned message and metadata. + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + log.error("消息:{},被交换机:{} 回退!退回原因为:{}", + returnedMessage.getMessage().toString(), returnedMessage.getExchange(), returnedMessage.getReplyText()); + // TODO 回退了所有的信息,可做补偿机制 + } + +} diff --git a/cloud-modules/cloud-modules-car-gateway/pom.xml b/cloud-modules/cloud-modules-car-gateway/pom.xml index 74ddfa6..814c945 100644 --- a/cloud-modules/cloud-modules-car-gateway/pom.xml +++ b/cloud-modules/cloud-modules-car-gateway/pom.xml @@ -72,6 +72,10 @@ com.muyu cloud-common-api-doc + + com.muyu + cloud-common-rabbit + @@ -84,11 +88,7 @@ httpclient 4.5.13 - - - org.springframework.boot - spring-boot-starter-amqp - + com.aliyun ecs20140526 diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java index 8687020..7b7304e 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java @@ -28,6 +28,5 @@ public class RedisConfig { redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new StringRedisSerializer()); return redisTemplate; - } } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java index 4e6b5a7..2ae8802 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java @@ -85,7 +85,7 @@ public class Sample implements ApplicationRunner , DisposableBean { // 设置密码 .setPassword("10160810@a") // 设置要创建的实例数量 - .setAmount(2) + .setAmount(1) .setInternetChargeType("PayByTraffic") .setInternetMaxBandwidthOut(1); @@ -219,7 +219,7 @@ public class Sample implements ApplicationRunner , DisposableBean { public void destroy(){ try { log.info("删除实例方法"); - Thread.sleep(100000); +// Thread.sleep(100000); deleteSample(); } catch (Exception e) { log.info("删除实例失败"); From f00c530de13d8b1298d38376e05bb455bfd5d648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Mon, 7 Oct 2024 09:43:16 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E6=B7=BB=E5=8A=A0rabbitmq=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=B1=BB,=E4=BD=BF=E7=94=A8=E4=BA=A4?= =?UTF-8?q?=E6=8D=A2=E6=9C=BA=E7=9A=84=E5=B9=BF=E6=92=AD=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-common/cloud-common-rabbit/pom.xml | 2 +- .../rabbit/callback/ConfirmCallback.java | 44 ++++++++++++ .../rabbit/callback/ReturnsCallback.java | 39 ++++++++++ .../rabbit/config/ConfirmCallbackConfig.java | 47 ------------ .../rabbit/config/RabbitAdminConfig.java | 72 +++++++++++++++++++ .../RabbitListenerConfig.java} | 28 +++++--- .../RabbitMQMessageConverterConfig.java | 26 +++++++ .../rabbit/config/ReturnCallbackConfig.java | 42 ----------- ...ot.autoconfigure.AutoConfiguration.imports | 4 +- .../cargateway/config/RabbitmqConfig.java | 14 ++-- .../com/muyu/cargateway/instance/Sample.java | 5 +- .../Impl/CarOneClickOperationServiceImpl.java | 5 +- .../src/main/resources/bootstrap.yml | 23 ++++-- 13 files changed, 238 insertions(+), 113 deletions(-) create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java delete mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java rename cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/{RabbitListenerConfigurer.java => config/RabbitListenerConfig.java} (59%) create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java delete mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java diff --git a/cloud-common/cloud-common-rabbit/pom.xml b/cloud-common/cloud-common-rabbit/pom.xml index fa6d383..53ac6d7 100644 --- a/cloud-common/cloud-common-rabbit/pom.xml +++ b/cloud-common/cloud-common-rabbit/pom.xml @@ -32,4 +32,4 @@ - \ No newline at end of file + diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java new file mode 100644 index 0000000..fe4c6b2 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ConfirmCallback.java @@ -0,0 +1,44 @@ +package com.muyu.common.rabbit.callback; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +/** + * @author Lenovo + * @Description 消息发送到broker确认回调 + */ + +@Slf4j +@Component +public class ConfirmCallback implements RabbitTemplate.ConfirmCallback { + + @Resource + private RabbitTemplate rabbitTemplate; + + /** + * 初始化 + */ + @PostConstruct + public void init() { + this.rabbitTemplate.setConfirmCallback(this); + } + + /** + * 回调确认方法(消息发送之后 消息无论发送成功还是失败都会执行这个回调方法) + * @param correlationData 回调的相关数据 + * @param ack 确认结果(true表示消息已经被broker接收,false表示消息未被broker接收) + * @param cause 失败原因(当ack为false时,表示拒绝接收消息的原因;当ack为true时,该值为空) + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (ack) { + log.info("消息发送到broker成功!"); + } else { + log.info("消息发送到broker失败,失败原因:{}", cause); + } + } +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java new file mode 100644 index 0000000..6145c2c --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/callback/ReturnsCallback.java @@ -0,0 +1,39 @@ +package com.muyu.common.rabbit.callback; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +/** + * @author Lenovo + * @Description 消息发送失败时回调 + */ + +@Slf4j +@Component +public class ReturnsCallback implements RabbitTemplate.ReturnsCallback { + + @Resource + private RabbitTemplate rabbitTemplate; + + /** + * 初始化 + */ + @PostConstruct + public void init() { + rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送到队列失败时执行 + * @param returnedMessage 返回的消息和元数据 + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + log.info("消息:{}被交换机:{}回退!回退原因:{}", returnedMessage.getMessage().toString(), + returnedMessage.getExchange(), returnedMessage.getReplyText()); + } +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java deleted file mode 100644 index 1e25c6f..0000000 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ConfirmCallbackConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.muyu.common.rabbit.config; - -import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.rabbit.connection.CorrelationData; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - - -/** - * @author Lenovo - */ -@Component -@Log4j2 -public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback { - - @Autowired - private RabbitTemplate rabbitTemplate; - - /** - * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 - */ - @PostConstruct - public void init() { - rabbitTemplate.setConfirmCallback(this); - } - - /** - * 交换机不管是否收到消息的一个回调方法 - * - * @param correlationData 消息相关数据 - * @param ack 交换机是否收到消息 - * @param cause 失败原因 - */ - @Override - public void confirm(CorrelationData correlationData, boolean ack, String cause) { - if (!ack) { - String exchange = correlationData.getReturned().getExchange(); - String message = correlationData.getReturned().getMessage().getBody().toString(); - // 发送异常 - log.error("消息:{},发送到交换机:{}失败,原因是:{}", message, exchange, cause); - } - } - -} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java new file mode 100644 index 0000000..d87c912 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java @@ -0,0 +1,72 @@ +package com.muyu.common.rabbit.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; + +/** + * @author Lenovo + * @Description RabbitMQ连接和管理功能配置 + */ + +@Configuration +public class RabbitAdminConfig { + + /** + * RabbitMQ服务器的主机地址 + */ + @Value("${spring.rabbitmq.host}") + private String host; + + /** + * RabbitMQ的用户名 + */ + @Value("${spring.rabbitmq.username}") + private String username; + + /** + * RabbitMQ的密码 + */ + @Value("${spring.rabbitmq.password}") + private String password; + + /** + * RabbitMQ的虚拟主机 + */ + @Value("${spring.rabbitmq.virtualhost}") + private String virtualhost; + + /** + * 创建并初始化RabbitAdmin实例 + * + * @return RabbitAdmin 实例 + */ + @Bean + public RabbitAdmin rabbitAdmin() { + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory()); + rabbitAdmin.setAutoStartup(true); + return rabbitAdmin; + } + + /** + * 创建RabbitMQ连接工厂 + * + * @return ConnectionFactory 实例 + */ + @Bean + public ConnectionFactory connectionFactory() { + CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); + connectionFactory.setAddresses(host); + connectionFactory.setUsername(username); + connectionFactory.setPassword(password); + connectionFactory.setVirtualHost(virtualhost); + + // 配置发送确认回调时,次配置必须配置,否则即使在RabbitTemplate配置了ConfirmCallback也不会生效 + connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED); + connectionFactory.setPublisherReturns(true); + return connectionFactory; + } +} 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/config/RabbitListenerConfig.java similarity index 59% rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitListenerConfig.java index 4e250d0..0c99e3f 100644 --- 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/config/RabbitListenerConfig.java @@ -1,32 +1,38 @@ -package com.muyu.common.rabbit; +package com.muyu.common.rabbit.config; +import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer; 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; -import javax.annotation.Resource; - /** * @author Lenovo + * @Description rabbitMQ的监听器配置 */ + @Configuration -public class RabbitListenerConfigurer implements org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer { +public class RabbitListenerConfig implements RabbitListenerConfigurer { static { + // 设置为信任所有类型的反序列化,确保消息能够正确反序列化 System.setProperty("spring.amqp.deserialization.trust.all", "true"); } - //以下配置RabbitMQ消息服务 - @Resource + /** + * RabbitMQ连接工厂,用于创建连接 + */ + @Autowired public ConnectionFactory connectionFactory; /** - * 处理器方法工厂 - * @return + * 创建处理器方法工厂的bean + * + * @return DefaultMessageHandlerMethodFactory 实例,用于处理消息的转换和方法调用 */ @Bean public DefaultMessageHandlerMethodFactory handlerMethodFactory() { @@ -36,8 +42,14 @@ public class RabbitListenerConfigurer implements org.springframework.amqp.rabbit return factory; } + /** + * 配置RabbitMQ监听器的消息处理方法工厂。 + * + * @param rabbitListenerEndpointRegistrar 实例,用于注册监听器的配置 + */ @Override public void configureRabbitListeners(RabbitListenerEndpointRegistrar rabbitListenerEndpointRegistrar) { + // 注册自定义的消息处理方法工厂 rabbitListenerEndpointRegistrar.setMessageHandlerMethodFactory(handlerMethodFactory()); } diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java new file mode 100644 index 0000000..6096282 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitMQMessageConverterConfig.java @@ -0,0 +1,26 @@ + +package com.muyu.common.rabbit.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; + +/** + * @author Lenovo + * @Description rabbitMQ消息转换器配置 + */ + +@Configuration +public class RabbitMQMessageConverterConfig { + + /** + * 消息转换配置 + * + * @return 消息转换器 + */ + @Bean + public MessageConverter jsonMessageConverter() { + return new Jackson2JsonMessageConverter(); + } +} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java deleted file mode 100644 index ae17741..0000000 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.muyu.common.rabbit.config; - -import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.ReturnedMessage; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -/** - * 消息发送到队列的确认 - * @author Lenovo - */ -@Component -@Log4j2 -public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback { - - @Autowired - private RabbitTemplate rabbitTemplate; - - /** - * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 - */ - @PostConstruct - public void init() { - rabbitTemplate.setReturnsCallback(this); - } - - /** - * 消息发送失败 则会执行这个方法 - * - * @param returnedMessage the returned message and metadata. - */ - @Override - public void returnedMessage(ReturnedMessage returnedMessage) { - log.error("消息:{},被交换机:{} 回退!退回原因为:{}", - returnedMessage.getMessage().toString(), returnedMessage.getExchange(), returnedMessage.getReplyText()); - // TODO 回退了所有的信息,可做补偿机制 - } - -} 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..0b13700 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,3 @@ -com.muyu.common.rabbit.RabbitListenerConfigurer \ No newline at end of file +com.muyu.common.rabbit.config.RabbitListenerConfig +com.muyu.common.rabbit.config.RabbitAdminConfig +com.muyu.common.rabbit.config.RabbitMQMessageConverterConfig diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java index d215a28..75f6e71 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java @@ -1,5 +1,6 @@ package com.muyu.cargateway.config; +import lombok.extern.log4j.Log4j2; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.Exchange; @@ -19,6 +20,7 @@ import org.slf4j.LoggerFactory; * @ Description:rabbitmq配置类 * @author Lenovo */ +@Log4j2 @Configuration public class RabbitmqConfig { // 日志 @@ -52,10 +54,10 @@ public class RabbitmqConfig { public Exchange exchangeTopicsInform() { try { Exchange exchange = ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build(); - logger.info("创建的交换机为: {}", EXCHANGE_TOPICS_INFORM); + log.info("创建的交换机为: {}", EXCHANGE_TOPICS_INFORM); return exchange; } catch (Exception e) { - logger.error("创建该: {} 交换机失败", EXCHANGE_TOPICS_INFORM, e); + log.error("创建该: {} 交换机失败", EXCHANGE_TOPICS_INFORM, e); throw e; } } @@ -65,10 +67,10 @@ public class RabbitmqConfig { public Queue queueInformEmail() { try { Queue queue = new Queue(QUEUE_INFORM_EMAIL); - logger.info("创建的对列为: {}", QUEUE_INFORM_EMAIL); + log.info("创建的队列为: {}", QUEUE_INFORM_EMAIL); return queue; } catch (Exception e) { - logger.error("创建该: {} 队列失败", QUEUE_INFORM_EMAIL, e); + log.error("创建该: {} 队列失败", QUEUE_INFORM_EMAIL, e); throw e; } } @@ -78,10 +80,10 @@ public class RabbitmqConfig { public Queue queueInformSms() { try { Queue queue = new Queue(QUEUE_INFORM_SMS); - logger.info("创建的对列为: {}", QUEUE_INFORM_SMS); + log.info("创建的队列为: {}", QUEUE_INFORM_SMS); return queue; } catch (Exception e) { - logger.error("创建该: {} 队列失败", QUEUE_INFORM_SMS, e); + log.error("创建该: {} 队列失败", QUEUE_INFORM_SMS, e); throw e; } } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java index 2ae8802..450e980 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java @@ -85,7 +85,7 @@ public class Sample implements ApplicationRunner , DisposableBean { // 设置密码 .setPassword("10160810@a") // 设置要创建的实例数量 - .setAmount(1) + .setAmount(2) .setInternetChargeType("PayByTraffic") .setInternetMaxBandwidthOut(1); @@ -109,7 +109,6 @@ public class Sample implements ApplicationRunner , DisposableBean { // 在获取实例详细信息时,确保获取所有必要的信息 DescribeInstancesResponse describeInstancesResponse = getInstances(client); List instances = describeInstancesResponse.getBody().getInstances().getInstance(); - List aliInstances = new ArrayList<>(); instanceIds = new ArrayList<>(); @@ -219,7 +218,7 @@ public class Sample implements ApplicationRunner , DisposableBean { public void destroy(){ try { log.info("删除实例方法"); -// Thread.sleep(100000); + Thread.sleep(10000); deleteSample(); } catch (Exception e) { log.info("删除实例失败"); diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java index 9aa6479..3967b9e 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java @@ -35,8 +35,11 @@ public class CarOneClickOperationServiceImpl implements CarOneClickOperationServ @Override public void getConnect(VehicleConnectionReq vehicleConnectionReq) { log.info("车辆连接请求:{}",vehicleConnectionReq.toString()); + // 发送消息 - rabbitTemplate.convertAndSend("exchange_topics_inform","",vehicleConnectionReq.getVehicleVin()); + rabbitTemplate.convertAndSend("exchange_topics_inform","inform.#.email.#",vehicleConnectionReq.getVehicleVin()); + log.info("发送消息成功:{}",vehicleConnectionReq.getVehicleVin()); + VehicleConnection vehicleConnection = new VehicleConnection(); vehicleConnection.setVehicleVin(vehicleConnectionReq.getVehicleVin()); diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml index d9f3d66..93ed008 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml @@ -4,19 +4,34 @@ server: # nacos线上地址 nacos: - addr: 106.54.193.225:8848 + addr: 47.116.173.119:8848 user-name: nacos password: nacos namespace: one # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: + rabbitmq: + host: 47.116.173.119 + port: 5672 + username: guest + password: guest + virtual-host: / + listener: + simple: + prefetch: 1 # 默认每次取出一条消息消费, 消费完成取下一条 + acknowledge-mode: manual # 设置消费端手动ack确认 + retry: + enabled: true # 是否支持重试 + publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange) + publisher-returns: true #确认消息已发送到队列(Queue) amqp: deserialization: - trust: - all: true + trust: + all: true main: - allow-bean-definition-overriding: true + allow-bean-definition-overriding: true + application: # 应用名称 name: cloud-car-gateway From 99be16cde206f58a725985c2b030d079e17d1d02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Mon, 7 Oct 2024 14:23:45 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E8=BD=AE=E8=AF=A2=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CarOneClickOperationController.java | 7 ++-- .../cargateway/domain/VehicleConnection.java | 8 +++-- .../com/muyu/cargateway/domain/VinIp.java | 4 +-- .../com/muyu/cargateway/instance/Sample.java | 2 +- .../mapper/CarOneClickOperationMapper.java | 5 +++ .../service/CarOneClickOperationService.java | 3 +- .../Impl/CarOneClickOperationServiceImpl.java | 34 +++++++++++++++++-- .../mapper/CarOneClickOperationMapper.xml | 5 +++ 8 files changed, 56 insertions(+), 12 deletions(-) diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java index 142bd8c..b6820e7 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/controller/CarOneClickOperationController.java @@ -1,5 +1,6 @@ package com.muyu.cargateway.controller; +import com.muyu.cargateway.domain.model.MqttServerModel; import com.muyu.cargateway.domain.req.VehicleConnectionReq; import com.muyu.cargateway.service.CarOneClickOperationService; import com.muyu.common.core.domain.Result; @@ -33,9 +34,9 @@ public class CarOneClickOperationController { * @return */ @PostMapping("/receiveMsg/connect") - public Result receiveMsg(@RequestBody VehicleConnectionReq vehicleConnectionReq){ + public Result receiveMsg(@RequestBody VehicleConnectionReq vehicleConnectionReq){ log.info("=======>"+vehicleConnectionReq); - carOneClickOperationService.getConnect(vehicleConnectionReq); - return Result.success(); + MqttServerModel mqttServerModel =carOneClickOperationService.getConnect(vehicleConnectionReq); + return Result.success(mqttServerModel); } } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java index ef3bc10..819d48e 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VehicleConnection.java @@ -24,9 +24,13 @@ public class VehicleConnection { * 用户名 */ private String username; - + /** + * 时间戳 + */ private String timestamp; - + /** + * 随机数 + */ private String nonce; /** * 密码 diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java index 7d37381..b6787f9 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/VinIp.java @@ -19,9 +19,9 @@ public class VinIp { /** * 车辆的vin */ - String vin; + String vehicleVin; /** * 车辆的ip */ - String ip; + String ipAddress; } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java index 450e980..6edfac5 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java @@ -85,7 +85,7 @@ public class Sample implements ApplicationRunner , DisposableBean { // 设置密码 .setPassword("10160810@a") // 设置要创建的实例数量 - .setAmount(2) + .setAmount(1) .setInternetChargeType("PayByTraffic") .setInternetMaxBandwidthOut(1); diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java index 03eed48..1eb1a2f 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java @@ -3,6 +3,8 @@ package com.muyu.cargateway.mapper; import com.muyu.cargateway.domain.VehicleConnection; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * @ Tool:IntelliJ IDEA * @ Author:CHX @@ -14,4 +16,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface CarOneClickOperationMapper { void addConnect(VehicleConnection vehicleConnection); + + + List selectByVehicleVin(String vehicleVin); } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java index 42638a6..71c639f 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/CarOneClickOperationService.java @@ -1,5 +1,6 @@ package com.muyu.cargateway.service; +import com.muyu.cargateway.domain.model.MqttServerModel; import com.muyu.cargateway.domain.req.VehicleConnectionReq; /** @@ -17,5 +18,5 @@ public interface CarOneClickOperationService { * @param vehicleConnectionReq 车辆连接请求参数 * @return */ - void getConnect(VehicleConnectionReq vehicleConnectionReq); + MqttServerModel getConnect(VehicleConnectionReq vehicleConnectionReq); } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java index 3967b9e..5792030 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/service/Impl/CarOneClickOperationServiceImpl.java @@ -1,14 +1,19 @@ package com.muyu.cargateway.service.Impl; import com.muyu.cargateway.domain.VehicleConnection; +import com.muyu.cargateway.domain.VinIp; +import com.muyu.cargateway.domain.model.MqttServerModel; import com.muyu.cargateway.domain.req.VehicleConnectionReq; import com.muyu.cargateway.mapper.CarOneClickOperationMapper; import com.muyu.cargateway.service.CarOneClickOperationService; +import com.muyu.common.redis.service.RedisService; import lombok.extern.log4j.Log4j2; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * @ Tool:IntelliJ IDEA * @ Author:CHX @@ -26,6 +31,8 @@ public class CarOneClickOperationServiceImpl implements CarOneClickOperationServ @Autowired private RabbitTemplate rabbitTemplate; + @Autowired + private RedisService redisService; /** * 获取连接信息 @@ -33,18 +40,39 @@ public class CarOneClickOperationServiceImpl implements CarOneClickOperationServ * @return */ @Override - public void getConnect(VehicleConnectionReq vehicleConnectionReq) { + public MqttServerModel getConnect(VehicleConnectionReq vehicleConnectionReq) { log.info("车辆连接请求:{}",vehicleConnectionReq.toString()); - // 发送消息 + // 使用交换机发送消息 rabbitTemplate.convertAndSend("exchange_topics_inform","inform.#.email.#",vehicleConnectionReq.getVehicleVin()); log.info("发送消息成功:{}",vehicleConnectionReq.getVehicleVin()); VehicleConnection vehicleConnection = new VehicleConnection(); + //车辆vin vehicleConnection.setVehicleVin(vehicleConnectionReq.getVehicleVin()); + //用户名 vehicleConnection.setUsername(vehicleConnectionReq.getUsername()); + //密码(vin+时间戳+随机数) vehicleConnection.setPassword(vehicleConnectionReq.getVehicleVin()+vehicleConnectionReq.getTimestamp()+vehicleConnectionReq.getNonce()); - carOneClickOperationMapper.addConnect(vehicleConnection); + //查询车辆vin集合 + List vehicleConnections =carOneClickOperationMapper.selectByVehicleVin(vehicleConnectionReq.getVehicleVin()); + if(vehicleConnections.isEmpty()){ + //添加 + carOneClickOperationMapper.addConnect(vehicleConnection); + } + log.info("该车辆已存在,不能重复预上线"); + //TODO 返回连接信息 做轮询操作 + + + return new MqttServerModel("tcp://"+"106.15.136.7"+":1883","vehicle"); + } + /** + * 添加车辆绑定IP地址存入redis中 + */ + public void addIpAddress(VinIp vinIp){ + redisService.setCacheObject("vehicle_ip_address:"+vinIp.getVehicleVin(),vinIp.getIpAddress()); + } + } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml index 8d3f52d..814cfa2 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/mapper/CarOneClickOperationMapper.xml @@ -11,4 +11,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" values (#{vehicleVin},#{username},#{password}) + + + From 3180012c6cc58b516ec6a2cda89cb8a30a5768c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Tue, 8 Oct 2024 00:34:28 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../muyu/cargateway/Aliyun/AliYunConfig.java | 41 ++++ .../Aliyun/service/AliYunEcsService.java | 199 ++++++++++++++++ .../cargateway/CarGatewayApplication.java | 2 + .../muyu/cargateway/config/AliProperties.java | 55 +++++ .../cargateway/config/RabbitmqConfig.java | 17 +- .../muyu/cargateway/config/RedisConfig.java | 32 --- .../cargateway/config/RestTemplateConfig.java | 48 ---- .../muyu/cargateway/domain/AliInstance.java | 3 + .../cargateway/instance/DeleteSample.java | 34 +++ .../com/muyu/cargateway/instance/Sample.java | 224 +++--------------- .../mapper/CarOneClickOperationMapper.java | 1 - .../muyu/cargateway/test/DeleteSample.java | 89 ------- .../java/com/muyu/cargateway/test/Sample.java | 120 ---------- .../muyu/cargateway/test/SelectSample.java | 79 ------ .../src/main/resources/bootstrap.yml | 10 + 15 files changed, 384 insertions(+), 570 deletions(-) create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java create mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/DeleteSample.java delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java delete mode 100644 cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java new file mode 100644 index 0000000..489a044 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/AliYunConfig.java @@ -0,0 +1,41 @@ +package com.muyu.cargateway.Aliyun; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.teaopenapi.models.Config; +import com.muyu.cargateway.config.AliProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Lenovo + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-07-18:40 + * @ Version:1.0 + * @ Description:Ali客户端 + */ +@Configuration +public class AliYunConfig { + + @Autowired + private AliProperties aliProperties; + + @Bean + public Client createClient() { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + Config config = new Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId(aliProperties.getAccessKeyId()) + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret(aliProperties.getAccessKeySecret()); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = aliProperties.getEndpoint(); + try { + return new Client(config); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java new file mode 100644 index 0000000..753c3e3 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/Aliyun/service/AliYunEcsService.java @@ -0,0 +1,199 @@ +package com.muyu.cargateway.Aliyun.service; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.ecs20140526.models.*; +import com.aliyun.tea.TeaException; +import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.cargateway.config.AliProperties; +import com.muyu.cargateway.domain.AliInstance; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.redis.service.RedisService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Lenovo + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-07-18:43 + * @ Version:1.0 + * @ Description:ali业务层 + */ +@Log4j2 +@Service +public class AliYunEcsService { + /** + * 阿里云配置 + */ + @Autowired + private AliProperties aliProperties; + /** + * 阿里云客户端 + */ + @Autowired + private Client client; + /** + * redis缓存 + */ + @Autowired + private RedisService redisService; + + /** + * 生成实例 + * + * @param amount 生成数量 + * @return 实例id集合 + */ + public List generateInstance(Integer amount) { + redisService.deleteObject("instanceIds"); + redisService.deleteObject("instanceList"); + // 检查生成实例的数量是否有效 + if (amount == null || amount <= 0) { + throw new ServiceException("生成数量不能小于1"); + } + +// 初始化系统盘配置 + RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk(); + systemDisk.setSize("40"); + systemDisk.setCategory("cloud_essd"); + +// 创建创建实例请求对象并设置参数 + RunInstancesRequest runInstancesRequest = new RunInstancesRequest() + // 设置地域ID + .setRegionId(aliProperties.getRegionId()) + // 设置镜像ID + .setImageId(aliProperties.getImageId()) + // 设置实例规格类型 + .setInstanceType(aliProperties.getInstanceType()) + // 设置安全组ID + .setSecurityGroupId(aliProperties.getSecurityGroupId()) + // 设置虚拟交换机ID + .setVSwitchId(aliProperties.getSwitchId()) + // 设置实例名称 + .setInstanceName("server-mqtt") + // 设置付费类型 按量付费 + .setInstanceChargeType("PostPaid") + // 设置系统盘配置 + .setSystemDisk(systemDisk) + // 设置用户名 + .setHostName("root") + // 设置密码 + .setPassword("10160810@a") + // 设置要创建的实例数量 + .setAmount(amount) + .setInternetChargeType("PayByTraffic") + .setInternetMaxBandwidthOut(1); + + // 创建运行时选项对象 + RuntimeOptions runtimeOptions = new RuntimeOptions(); + + // 尝试执行创建实例请求 + try { + // 复制代码运行请自行打印 API 的返回值 + RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtimeOptions); + if (runInstancesResponse.getStatusCode() != 200) { + throw new ServiceException("查询实例状态失败"); + } + log.info("实例创建成功: {}", runInstancesResponse.getBody().getInstanceIdSets().instanceIdSet); + RunInstancesResponseBody body = runInstancesResponse.getBody(); + RunInstancesResponseBody.RunInstancesResponseBodyInstanceIdSets instanceIdSets = body.getInstanceIdSets(); + return new ArrayList<>(instanceIdSets.instanceIdSet); + } catch (Exception error) { + log.error("创建阿里云实例报错:[{}]", error.getMessage()); + throw new ServiceException(error.getMessage()); + } + } + + /** + * 根据实例id查询实例信息 + * + * @param instanceIds 实例id集合 + */ + public List selectInstance(List instanceIds) throws Exception { + // 检查实例ID列表是否为空,如果为空则抛出异常 + if (instanceIds == null || instanceIds.isEmpty()) { + throw new ServiceException("实例id不能为空"); + } + // 创建查询实例的请求对象 + DescribeInstancesRequest request = new DescribeInstancesRequest() + .setRegionId(aliProperties.getRegionId()); + + // 创建运行时选项对象,用于配置请求的额外参数 + RuntimeOptions runtimeOptions = new RuntimeOptions(); + List aliInstances = new ArrayList<>(); + try { + // 发送请求并获取响应对象 + DescribeInstancesResponse describeInstancesResponse = client.describeInstancesWithOptions(request, runtimeOptions); + // 检查响应状态码,如果为200则表示查询失败,抛出异常 + if (describeInstancesResponse.getStatusCode() != 200) { + throw new ServiceException("查询实例状态失败"); + } + List instance = describeInstancesResponse.getBody().getInstances().getInstance(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance bodyInstance : instance) { + // 实例id + String instanceId = bodyInstance.getInstanceId(); + log.info("实例id为:{}", instanceId); + // ip地址 + String ipAddress = bodyInstance.getPublicIpAddress().getIpAddress().get(0); + log.info("实例ip为:{}", ipAddress); + // 实例状态 + String status = bodyInstance.getStatus(); + log.info("实例状态为:{}", status); + AliInstance aliInstance = new AliInstance(instanceId, ipAddress, status); + aliInstances.add(aliInstance); + } + log.info("查询成功"); + } catch (Exception e) { + log.error("查询服务器实例错误:[{}]", e.getMessage(), e); + throw new RuntimeException(e); + } + return aliInstances; + } + + /** + * 删除实例 + */ + public void deleteInstance() throws Exception { + DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); + attributeRequest.setRegionId(aliProperties.getRegionId()); + + RuntimeOptions runtimeOptions = new RuntimeOptions(); + + DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); + ArrayList list = new ArrayList<>(); + DescribeInstancesResponseBody body = instancesWithOptions.getBody(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { + list.add(instance.getInstanceId()); + } + log.info("list:" + list); + DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest(); + deleteInstancesRequest.setRegionId(aliProperties.getRegionId()) + .setDryRun(false) + .setForce(true) + .setTerminateSubscription(true) + .setInstanceId(list); + RuntimeOptions runtime = new RuntimeOptions(); + try { + client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); + } catch (TeaException error) { + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } catch (Exception _error) { + TeaException error = new TeaException(_error.getMessage(), _error); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + System.out.println(error.getMessage()); + // 诊断地址 + System.out.println(error.getData().get("Recommend")); + com.aliyun.teautil.Common.assertAsString(error.message); + } + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java index e9109de..bce08e8 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/CarGatewayApplication.java @@ -1,6 +1,7 @@ package com.muyu.cargateway; import com.muyu.common.security.annotation.EnableCustomConfig; +import lombok.extern.log4j.Log4j2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @@ -13,6 +14,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; * @ Description:故障启动类 * @author Lenovo */ +@Log4j2 @EnableCustomConfig @EnableFeignClients @SpringBootApplication diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java new file mode 100644 index 0000000..c0ff543 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/AliProperties.java @@ -0,0 +1,55 @@ +package com.muyu.cargateway.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * @author Lenovo + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-07-18:34 + * @ Version:1.0 + * @ Description:Ali配置类 + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "aliyun") +public class AliProperties { + /** + * key + */ + private String accessKeyId; + /** + * secret + */ + private String accessKeySecret; + /** + * 地域 + */ + private String endpoint; + /** + * 地域id + */ + private String regionId; + /** + * 镜像id + */ + private String imageId; + /** + * 实例规格 + */ + private String instanceType; + /** + * 安全组id + */ + private String securityGroupId; + /** + * 虚拟交换机ID + */ + private String switchId; + /** + * 生成实例数量 + */ + private Integer amount; +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java index 75f6e71..734b37f 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RabbitmqConfig.java @@ -1,24 +1,20 @@ package com.muyu.cargateway.config; import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.Binding; -import org.springframework.amqp.core.BindingBuilder; -import org.springframework.amqp.core.Exchange; -import org.springframework.amqp.core.ExchangeBuilder; -import org.springframework.amqp.core.Queue; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** + * @author Lenovo * @ Tool:IntelliJ IDEA * @ Author:CHX * @ Date:2024-10-04-15:13 * @ Version:1.0 * @ Description:rabbitmq配置类 - * @author Lenovo */ @Log4j2 @Configuration @@ -91,13 +87,14 @@ public class RabbitmqConfig { //ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey @Bean public Binding bindingQueueInformEmail(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue, - @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){ + @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs(); } + //ROUTINGKEY_SMS队列绑定交换机,指定routingKey @Bean public Binding bindingRoutingKeySms(@Qualifier(QUEUE_INFORM_SMS) Queue queue, - @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){ + @Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs(); } } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java deleted file mode 100644 index 7b7304e..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RedisConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.muyu.cargateway.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -/** - * @ Tool:IntelliJ IDEA - * @ Author:CHX - * @ Date:2024-10-04-15:12 - * @ Version:1.0 - * @ Description:Redis配置类 - * @author Lenovo - */ -@Configuration -public class RedisConfig { - @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(redisConnectionFactory); - - redisTemplate.setKeySerializer(new StringRedisSerializer()); - redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); - - redisTemplate.setHashKeySerializer(new StringRedisSerializer()); - redisTemplate.setHashValueSerializer(new StringRedisSerializer()); - return redisTemplate; - } -} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java deleted file mode 100644 index 0073735..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/config/RestTemplateConfig.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.muyu.cargateway.config; - -import lombok.extern.log4j.Log4j2; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.ClientHttpRequestFactory; -import org.springframework.http.client.SimpleClientHttpRequestFactory; -import org.springframework.web.client.RestTemplate; - -/** - * @ Tool:IntelliJ IDEA - * @ Author:CHX - * @ Date:2024-10-04-15:08 - * @ Version:1.0 - * @ Description:rest配置类 - * @author Lenovo - */ -@Log4j2 -@Configuration -public class RestTemplateConfig { - @Bean - public RestTemplate restTemplate(ClientHttpRequestFactory factory) { - return new RestTemplate(factory); - } - - /** - * 创建并配置客户端HTTP请求工厂实例。 - * 注意:这里设置了连接和读取数据的超时时间,分别设为15秒和5秒。 - * 这些值可以根据实际网络状况和应用需求进行调整。 - * - * @return 配置好的客户端请求工厂对象 - */ - @Bean - public ClientHttpRequestFactory simpleClientHttpRequestFactory() { - try { - SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); - // 设置读取超时时间为5秒 - factory.setReadTimeout(5000); - // 设置连接超时时间为15秒 - factory.setConnectTimeout(15000); - return factory; - } catch (Exception e) { - // 处理创建工厂或设置超时时间时可能出现的异常 - log.info("创建工厂失败: " + e.getMessage()); - throw new RuntimeException("初始化HTTP请求失败", e); - } - } -} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliInstance.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliInstance.java index 820c067..eb1b4ae 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliInstance.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/domain/AliInstance.java @@ -1,6 +1,7 @@ package com.muyu.cargateway.domain; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -13,6 +14,7 @@ import lombok.NoArgsConstructor; * @author Lenovo */ @Data +@Builder @AllArgsConstructor @NoArgsConstructor public class AliInstance { @@ -28,4 +30,5 @@ public class AliInstance { * 实例状态 */ private String status; + } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/DeleteSample.java new file mode 100644 index 0000000..3bfafc5 --- /dev/null +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/DeleteSample.java @@ -0,0 +1,34 @@ +package com.muyu.cargateway.instance; + +import com.muyu.cargateway.Aliyun.service.AliYunEcsService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @ Tool:IntelliJ IDEA + * @ Author:CHX + * @ Date:2024-10-07-21:51 + * @ Version:1.0 + * @ Description:删除实例方法 + * @author Lenovo + */ +@Log4j2 +@Component +public class DeleteSample implements DisposableBean { + @Autowired + private AliYunEcsService aliYunEcsService; + @Override + public void destroy() { + try { + log.info("=================开始执行删除实例方法"); + Thread.sleep(10000); + aliYunEcsService.deleteInstance(); + } catch (Exception e) { + log.info("删除实例失败"); + throw new RuntimeException(e); + } + log.info("删除实例成功"); + } +} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java index 6edfac5..924f1c9 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/instance/Sample.java @@ -1,229 +1,71 @@ package com.muyu.cargateway.instance; -import com.aliyun.ecs20140526.Client; -import com.aliyun.ecs20140526.models.*; -import com.aliyun.tea.TeaException; -import com.aliyun.teaopenapi.models.Config; -import com.aliyun.teautil.Common; -import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.cargateway.Aliyun.service.AliYunEcsService; +import com.muyu.cargateway.config.AliProperties; import com.muyu.cargateway.domain.AliInstance; import com.muyu.common.redis.service.RedisService; import lombok.extern.log4j.Log4j2; -import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; -import java.util.ArrayList; import java.util.List; /** + * @author Lenovo * @ Tool:IntelliJ IDEA * @ Author:CHX * @ Date:2024-09-28-21:10 * @ Version:1.0 * @ Description:调用ali的类 - * @author Lenovo */ @Log4j2 @Component -public class Sample implements ApplicationRunner , DisposableBean { +public class Sample implements ApplicationRunner{ + @Autowired + private AliYunEcsService aliYunEcsService; + @Autowired + private AliProperties aliProperties; @Autowired private RedisService redisService; - public static final String ACCESS_KEY_ID = "LTAI5tDH3FyRx4PRr6anx2TL"; - public static final String ACCESS_KEY_SECRET = "xdQnX2tDattY50raNkUWmHzE2tondP"; - - public static Client createClient() throws Exception { - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 - Config config = new Config() - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 - .setAccessKeyId(ACCESS_KEY_ID) - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret(ACCESS_KEY_SECRET); - // Endpoint 请参考 https://api.aliyun.com/product/Ecs - config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; - return new Client(config); - } - - /** - * 创建实例 - * @throws Exception - */ - public void generateInstance() throws Exception { - Client client = Sample.createClient(); - RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk(); - //设置系统盘的大小为40GiB - systemDisk.setSize("40"); - //设置系统盘类型为cloud_essd - systemDisk.setCategory("cloud_essd"); - - // 创建创建实例请求对象并设置参数 - - RunInstancesRequest runInstancesRequest = new RunInstancesRequest() - // 设置地域ID - .setRegionId("cn-shanghai") - // 设置镜像ID - .setImageId("m-uf6ih0vnl5f51pquns11") - // 设置实例规格类型 - .setInstanceType("ecs.t6-c1m1.large") - // 设置安全组ID - .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y") - // 设置虚拟交换机ID - .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3") - // 设置实例名称 - .setInstanceName("server-mqtt") - // 设置付费类型 按量付费 - .setInstanceChargeType("PostPaid") - // 设置系统盘配置 - .setSystemDisk(systemDisk) - // 设置用户名 - .setHostName("root") - // 设置密码 - .setPassword("10160810@a") - // 设置要创建的实例数量 - .setAmount(1) - .setInternetChargeType("PayByTraffic") - .setInternetMaxBandwidthOut(1); - - RuntimeOptions runtimeOptions = new RuntimeOptions(); - // 尝试执行创建实例请求 - try { - - - // 复制代码运行请自行打印 API 的返回值 - RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runtimeOptions); - log.info("实例创建成功: {}", runInstancesResponse.getBody().getInstanceIdSets().instanceIdSet); - RunInstancesResponseBody body = runInstancesResponse.getBody(); - RunInstancesResponseBody.RunInstancesResponseBodyInstanceIdSets instanceIdSets = body.getInstanceIdSets(); - - List instanceList = new ArrayList<>(); - List instanceIds = new ArrayList<>(); - //遍历实例ID - for (String string : instanceIdSets.instanceIdSet) { - instanceIds.add(string); - } - // 在获取实例详细信息时,确保获取所有必要的信息 - DescribeInstancesResponse describeInstancesResponse = getInstances(client); - List instances = describeInstancesResponse.getBody().getInstances().getInstance(); - List aliInstances = new ArrayList<>(); - instanceIds = new ArrayList<>(); - - for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : instances) { - String instanceId = instance.getInstanceId(); - String ipAddress = instance.getPublicIpAddress().getIpAddress().get(0); - String status = instance.getStatus(); - log.info("获取到的实例ID为{} IP为{} 状态为{}", instanceId, ipAddress, status); - aliInstances.add(new AliInstance(instanceId, ipAddress, status)); - instanceIds.add(instanceId); - } - //实例信息集合(实例id,ip 状态) 存储在redis中 - redisService.setCacheList("instanceList", aliInstances); - // 实例ID集合 存储在redis中 - redisService.setCacheList("instanceIds", instanceIds); - - } catch (TeaException error) { - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - log.info(error.getMessage()); - // 诊断地址 - log.info(error.getData().get("Recommend")); - com.aliyun.teautil.Common.assertAsString(error.message); - } catch (Exception _error) { - TeaException error = new TeaException(_error.getMessage(), _error); - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - log.info(error.getMessage()); - // 诊断地址 - log.info(error.getData().get("Recommend")); - Common.assertAsString(error.message); - } - } - /** - * 获取实例ID - * @param client - * @return string类型的实例ID集合 - * @throws Exception - */ - @NotNull - private DescribeInstancesResponse getInstances(Client client) throws Exception { - DescribeInstancesRequest request = new DescribeInstancesRequest(); - request.setInstanceName("server-mqtt"); - request.setRegionId("cn-shanghai"); - - RuntimeOptions runtimeOptions = new RuntimeOptions(); - return client.describeInstancesWithOptions(request, runtimeOptions); - } - /** - * 删除创建的实例 - * @throws Exception - */ - public void deleteSample() throws Exception { - Client client = Sample.createClient(); - DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); - attributeRequest.setRegionId("cn-shanghai"); - - RuntimeOptions runtimeOptions = new RuntimeOptions(); - - DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); - ArrayList list = new ArrayList<>(); - DescribeInstancesResponseBody body = instancesWithOptions.getBody(); - for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { - list.add(instance.getInstanceId()); - } - log.info("list:"+list); - DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest(); - deleteInstancesRequest.setRegionId("cn-shanghai") - .setDryRun(false) - .setForce(true) - .setTerminateSubscription(true) - .setInstanceId(list); - RuntimeOptions runtime = new RuntimeOptions(); - try{ - client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); - }catch (TeaException error) { - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - com.aliyun.teautil.Common.assertAsString(error.message); - } catch (Exception _error) { - TeaException error = new TeaException(_error.getMessage(), _error); - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - com.aliyun.teautil.Common.assertAsString(error.message); - } - } - @Override - public void run(ApplicationArguments args){ + public void run(ApplicationArguments args) throws Exception { + List list; try { log.info("开始创建实例"); - generateInstance(); + list = aliYunEcsService.generateInstance(aliProperties.getAmount()); } catch (Exception e) { log.info("创建实例失败"); throw new RuntimeException(e); } log.info("创建实例成功"); - } - - @Override - public void destroy(){ + redisService.setCacheList("instanceIds", list); try { - log.info("删除实例方法"); - Thread.sleep(10000); - deleteSample(); - } catch (Exception e) { - log.info("删除实例失败"); + Thread.sleep(6000); + } catch (InterruptedException e) { throw new RuntimeException(e); } - log.info("删除实例成功"); + List aliInstances = aliYunEcsService.selectInstance(list); + log.info("查询实例信息成功:{}",aliInstances); + // 将查询到的实例信息列表存储到Redis中 + redisService.setCacheList("instanceList", aliInstances); + log.info("redis存储成功:{}", aliInstances); } + +// @Override +// public void destroy(){ +// try { +// log.info("=================开始执行删除实例方法"); +// aliYunEcsService.deleteInstance(); +// redisService.deleteObject("instanceIds"); +// redisService.deleteObject("instanceList"); +// } catch (Exception e) { +// log.info("删除实例失败"); +// throw new RuntimeException(e); +// } +// log.info("删除实例成功"); +// } } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java index 1eb1a2f..3fc31fa 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java +++ b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/mapper/CarOneClickOperationMapper.java @@ -17,6 +17,5 @@ import java.util.List; public interface CarOneClickOperationMapper { void addConnect(VehicleConnection vehicleConnection); - List selectByVehicleVin(String vehicleVin); } diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java deleted file mode 100644 index 043c9c6..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/DeleteSample.java +++ /dev/null @@ -1,89 +0,0 @@ -//package com.muyu.cargateway.cargatewaytest; -// -//import com.aliyun.ecs20140526.Client; -//import com.aliyun.ecs20140526.models.*; -//import com.aliyun.tea.TeaException; -//import com.aliyun.teaopenapi.models.Config; -//import com.aliyun.teautil.models.RuntimeOptions; -//import lombok.extern.log4j.Log4j2; -//import org.springframework.beans.factory.DisposableBean; -//import org.springframework.stereotype.Component; -// -//import java.util.ArrayList; -// -///** -// * @ Tool:IntelliJ IDEA -// * @ Author:CHX -// * @ Date:2024-09-28-21:20 -// * @ Version:1.0 -// * @ Description:删除实例 -// * @author Lenovo -// */ -//@Log4j2 -//@Component -//public class DeleteSample implements DisposableBean { -// -// public static Client createClient() throws Exception { -// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 -// Config config = new Config() -// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 -// .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") -// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 -// .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); -// // Endpoint 请参考 https://api.aliyun.com/product/Ecs -// config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; -// return new Client(config); -// } -// public static void deleteSample() throws Exception { -// Client client = DeleteSample.createClient(); -// DescribeInstancesRequest attributeRequest = new DescribeInstancesRequest(); -// attributeRequest.setRegionId("cn-shanghai"); -// -// RuntimeOptions runtimeOptions = new RuntimeOptions(); -// -// DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(attributeRequest, runtimeOptions); -// ArrayList list = new ArrayList<>(); -// DescribeInstancesResponseBody body = instancesWithOptions.getBody(); -// for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { -// list.add(instance.getInstanceId()); -// } -// log.info("list:"+list); -// DeleteInstancesRequest deleteInstancesRequest = new DeleteInstancesRequest(); -// deleteInstancesRequest.setRegionId("cn-shanghai") -// .setDryRun(false) -// .setForce(true) -// .setTerminateSubscription(true) -// .setInstanceId(list); -// -// RuntimeOptions runtime = new RuntimeOptions(); -// try{ -// client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); -// }catch (TeaException error) { -// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 -// // 错误 message -// System.out.println(error.getMessage()); -// // 诊断地址 -// System.out.println(error.getData().get("Recommend")); -// com.aliyun.teautil.Common.assertAsString(error.message); -// } catch (Exception _error) { -// TeaException error = new TeaException(_error.getMessage(), _error); -// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 -// // 错误 message -// System.out.println(error.getMessage()); -// // 诊断地址 -// System.out.println(error.getData().get("Recommend")); -// com.aliyun.teautil.Common.assertAsString(error.message); -// } -// } -// @Override -// public void destroy(){ -// try { -// log.info("删除实例方法"); -// deleteSample(); -// } catch (Exception e) { -// log.info("删除实例失败"); -// throw new RuntimeException(e); -// } -// log.info("删除实例成功"); -// } -//} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java deleted file mode 100644 index 5827423..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/Sample.java +++ /dev/null @@ -1,120 +0,0 @@ -//package com.muyu.cargateway.test; -// -//import com.aliyun.ecs20140526.Client; -//import com.aliyun.ecs20140526.models.RunInstancesRequest; -//import com.aliyun.tea.TeaException; -//import com.aliyun.teaopenapi.models.Config; -//import com.aliyun.teautil.Common; -//import com.aliyun.teautil.models.RuntimeOptions; -//import lombok.extern.log4j.Log4j2; -// -//import java.util.Arrays; -//import java.util.List; -// -// -///** -// * @ Tool:IntelliJ IDEA -// * @ Author:CHX -// * @ Date:2024-09-27-23:38 -// * @ Version:1.0 -// * @ Description:调用ali的测试demo类 -// * @author Lenovo -// */ -//@Log4j2 -//public class Sample { -// -// /** -// * description : -// *

使用AK&SK初始化账号Client

-// * @return Client -// * -// * @throws Exception -// */ -// public static Client createClient() throws Exception { -// // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 -// Config config = new Config() -// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 -// .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") -// // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 -// .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); -// // Endpoint 请参考 https://api.aliyun.com/product/Ecs -// config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; -// return new Client(config); -// } -// -// /** -// * 本程序的入口点 -// * 主要功能是创建阿里云ECS实例 -// * -// * @param args 命令行参数 -// * @throws Exception 如果执行过程中发生错误则抛出异常 -// */ -// public static void main(String[] args) throws Exception { -// // 将命令行参数转换为字符串列表 -// List arg = Arrays.asList(args); -// -// // 创建阿里云ECS客户端 -// Client client = Sample.createClient(); -// -// // 配置系统盘参数 -// RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk() -// // 设置系统盘大小为20G -// .setSize("40") -// // 设置系统盘类型为cloud_essd -// .setCategory("cloud_essd"); -// -// // 创建创建实例请求对象并设置参数 -// -// RunInstancesRequest runInstancesRequest = new RunInstancesRequest() -// // 设置地域ID -// .setRegionId("cn-shanghai") -// // 设置镜像ID -// .setImageId("m-uf65fvle9qseu9jo5jl3") -// // 设置实例规格类型 -// .setInstanceType("ecs.t6-c1m1.large") -// // 设置安全组ID -// .setSecurityGroupId("sg-uf642d5u4ja5gsiitx8y") -// // 设置虚拟交换机ID -// .setVSwitchId("vsw-uf66lifrkhxqc94xi06v3") -// // 设置实例名称 -// .setInstanceName("server-mqtt") -// // 设置付费类型 按量付费 -// .setInstanceChargeType("PostPaid") -// // 设置系统盘配置 -// .setSystemDisk(systemDisk) -// // 设置用户名 -// .setHostName("root") -// // 设置密码 -// .setPassword("10160810@a") -// // 设置要创创建的实例数量 -// .setAmount(1); -// -// -// -// -// // 创建运行时选项对象 -// RuntimeOptions runtime = new RuntimeOptions(); -// -// // 尝试执行创建实例请求 -// try { -// // 复制代码运行请自行打印 API 的返回值 -// client.runInstancesWithOptions(runInstancesRequest, runtime); -// } catch (TeaException error) { -// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 -// // 错误 message -// System.out.println(error.getMessage()); -// // 诊断地址 -// System.out.println(error.getData().get("Recommend")); -// com.aliyun.teautil.Common.assertAsString(error.message); -// } catch (Exception _error) { -// TeaException error = new TeaException(_error.getMessage(), _error); -// // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 -// // 错误 message -// System.out.println(error.getMessage()); -// // 诊断地址 -// System.out.println(error.getData().get("Recommend")); -// Common.assertAsString(error.message); -// } -// } -//} -// diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java b/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java deleted file mode 100644 index 8444813..0000000 --- a/cloud-modules/cloud-modules-car-gateway/src/main/java/com/muyu/cargateway/test/SelectSample.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.muyu.cargateway.test; - -import com.aliyun.ecs20140526.Client; -import com.aliyun.ecs20140526.models.DescribeInstanceAttributeRequest; -import com.aliyun.ecs20140526.models.DescribeInstancesRequest; -import com.aliyun.ecs20140526.models.DescribeInstancesResponse; -import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody; -import com.aliyun.tea.TeaException; -import com.aliyun.teaopenapi.models.Config; -import com.aliyun.teautil.Common; -import com.aliyun.teautil.models.RuntimeOptions; -import com.muyu.cargateway.instance.Sample; -import lombok.extern.log4j.Log4j2; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - - -/** - * @ Tool:IntelliJ IDEA - * @ Author:CHX - * @ Date:2024-09-29-20:16 - * @ Version:1.0 - * @ Description:查询实例所有信息 - * @author Lenovo - */ -@Log4j2 -public class SelectSample { - public static Client createClient() throws Exception { - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 - // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。 - Config config = new Config() - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 - .setAccessKeyId("LTAI5tDH3FyRx4PRr6anx2TL") - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret("xdQnX2tDattY50raNkUWmHzE2tondP"); - // Endpoint 请参考 https://api.aliyun.com/product/Ecs - config.endpoint = "ecs.cn-shanghai.aliyuncs.com"; - return new Client(config); - } - - public static void main(String[] args_) throws Exception { - List args = Arrays.asList(args_); - Client client = Sample.createClient(); - DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() - .setRegionId("cn-shanghai"); - RuntimeOptions runtime = new RuntimeOptions(); - try { - // 复制代码运行请自行打印 API 的返回值 - DescribeInstancesResponse instancesWithOptions = client.describeInstancesWithOptions(describeInstancesRequest, runtime); - ArrayList list = new ArrayList<>(); - DescribeInstancesResponseBody body = instancesWithOptions.getBody(); - for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.instances.instance) { - list.add(instance.getInstanceId()); - list.add(instance.getPublicIpAddress().ipAddress.get(0)); - list.add(instance.getStatus()); - - } - log.info(Common.toJSONString(list)); - } catch (TeaException error) { - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - Common.assertAsString(error.message); - } catch (Exception _error) { - TeaException error = new TeaException(_error.getMessage(), _error); - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - System.out.println(error.getMessage()); - // 诊断地址 - System.out.println(error.getData().get("Recommend")); - Common.assertAsString(error.message); - } - - } -} diff --git a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml index 93ed008..e33efb2 100644 --- a/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-car-gateway/src/main/resources/bootstrap.yml @@ -73,3 +73,13 @@ spring: logging: level: com.muyu.breakdown.mapper: DEBUG +aliyun: + access-key-id: LTAI5tDH3FyRx4PRr6anx2TL + access-key-secret: xdQnX2tDattY50raNkUWmHzE2tondP + endpoint: ecs-cn-hangzhou.aliyuncs.com + region-id: cn-shanghai + image-id: m-uf6ih0vnl5f51pquns11 + instance-type: ecs.t6-c1m1.large + security-group-id: sg-uf642d5u4ja5gsiitx8y + switch-id: vsw-uf66lifrkhxqc94xi06v3 + amount: 1 From 5143ef67ded7c6e61d3edbe27fa08e80a6e1b7ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E8=B0=83?= <3084898776@qq.com> Date: Tue, 8 Oct 2024 00:45:32 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-auth/pom.xml | 22 ++ .../com/muyu/auth/CloudAuthApplication.java | 11 + .../muyu/auth/controller/TokenController.java | 15 + .../java/com/muyu/auth/form/LoginBody.java | 26 ++ .../muyu/auth/service/SysLoginService.java | 47 +++ .../muyu/auth/service/SysPasswordService.java | 12 + .../auth/service/SysRecordLogService.java | 8 + cloud-auth/src/main/resources/bootstrap.yml | 11 + cloud-common/cloud-common-core/pom.xml | 3 + .../core/constant/SecurityConstants.java | 3 + .../core/constant/ServiceNameConstants.java | 3 + .../core/context/SecurityContextHolder.java | 3 + .../com/muyu/common/core/utils/JwtUtils.java | 3 + .../muyu/common/core/utils/ip/IpUtils.java | 12 + .../com/muyu/common/log/aspect/LogAspect.java | 8 + .../common/log/service/AsyncLogService.java | 3 +- cloud-common/cloud-common-rabbit/pom.xml | 3 + .../rabbit/RabbitListenerConfigurer.java | 41 +++ ...ot.autoconfigure.AutoConfiguration.imports | 4 + .../common/redis/service/RedisService.java | 8 + .../interceptor/HeaderInterceptor.java | 3 + .../common/security/service/TokenService.java | 15 + .../common/security/utils/SecurityUtils.java | 3 + .../muyu/common/system/domain/LoginUser.java | 3 + .../muyu/common/system/domain/SysDept.java | 3 + .../muyu/common/system/domain/SysRole.java | 3 + .../muyu/common/system/domain/SysUser.java | 22 ++ .../system/remote/RemoteUserService.java | 25 ++ .../factory/RemoteUserFallbackFactory.java | 19 ++ ...ot.autoconfigure.AutoConfiguration.imports | 3 + .../com/muyu/common/xxl/XXLJobConfig.java | 6 + cloud-gateway/pom.xml | 2 + .../muyu/gateway/CloudGatewayApplication.java | 3 + .../config/RouterFunctionConfiguration.java | 8 + .../com/muyu/gateway/filter/AuthFilter.java | 17 + .../gateway/filter/ValidateCodeFilter.java | 10 + .../com/muyu/gateway/filter/XssFilter.java | 8 + .../gateway/handler/ValidateCodeHandler.java | 8 + .../service/impl/ValidateCodeServiceImpl.java | 15 + .../muyu/gateway/utils/WebFrameworkUtils.java | 23 ++ .../src/main/resources/bootstrap.yml | 29 ++ .../com/muyu/file/CloudFileApplication.java | 3 + .../file/controller/SysFileController.java | 8 + .../file/service/MinioSysFileServiceImpl.java | 11 + .../src/main/resources/bootstrap.yml | 8 + .../com/muyu/gen/CloudGenApplication.java | 3 + .../muyu/gen/controller/GenController.java | 105 ++++++ .../java/com/muyu/gen/domain/GenTable.java | 3 + .../muyu/gen/mapper/GenTableColumnMapper.java | 56 ++++ .../com/muyu/gen/mapper/GenTableMapper.java | 71 +++++ .../service/GenTableColumnServiceImpl.java | 58 ++++ .../muyu/gen/service/GenTableServiceImpl.java | 263 +++++++++++++++ .../gen/service/IGenTableColumnService.java | 34 ++ .../muyu/gen/service/IGenTableService.java | 96 ++++++ .../src/main/resources/bootstrap.yml | 14 + .../mapper/generator/GenTableColumnMapper.xml | 128 ++++++++ .../mapper/generator/GenTableMapper.xml | 299 ++++++++++++++++++ .../main/resources/vm/java/controller.java.vm | 59 ++++ .../src/main/resources/vm/java/domain.java.vm | 38 +++ .../src/main/resources/vm/java/mapper.java.vm | 86 +++++ .../main/resources/vm/java/service.java.vm | 52 +++ .../resources/vm/java/serviceImpl.java.vm | 140 ++++++++ .../main/resources/vm/java/sub-domain.java.vm | 5 + .../src/main/resources/vm/vue/index.vue.vm | 13 + .../controller/SysConfigController.java | 8 + .../system/controller/SysDeptController.java | 14 + .../controller/SysDictDataController.java | 11 + .../controller/SysDictTypeController.java | 8 + .../controller/SysLogininforController.java | 11 + .../system/controller/SysMenuController.java | 8 + .../controller/SysNoticeController.java | 8 + .../controller/SysOperlogController.java | 8 + .../system/controller/SysPostController.java | 8 + .../controller/SysProfileController.java | 32 ++ .../system/controller/SysRoleController.java | 28 ++ .../system/controller/SysUserController.java | 62 ++++ .../controller/SysUserOnlineController.java | 11 + .../com/muyu/system/mapper/SysDeptMapper.java | 3 + .../com/muyu/system/mapper/SysRoleMapper.java | 11 + .../com/muyu/system/mapper/SysUserMapper.java | 7 + .../muyu/system/mapper/SysUserPostMapper.java | 4 + .../muyu/system/mapper/SysUserRoleMapper.java | 4 + .../com/muyu/system/rabbit/RabbitTest.java | 56 ++++ .../muyu/system/service/SysConfigService.java | 6 + .../muyu/system/service/SysRoleService.java | 16 + .../muyu/system/service/SysUserService.java | 7 + .../service/impl/SysConfigServiceImpl.java | 8 + .../service/impl/SysDeptServiceImpl.java | 19 ++ .../service/impl/SysDictDataServiceImpl.java | 8 + .../service/impl/SysDictTypeServiceImpl.java | 11 + .../impl/SysLogininforServiceImpl.java | 8 + .../service/impl/SysMenuServiceImpl.java | 14 + .../service/impl/SysNoticeServiceImpl.java | 8 + .../service/impl/SysOperLogServiceImpl.java | 8 + .../impl/SysPermissionServiceImpl.java | 23 ++ .../service/impl/SysPostServiceImpl.java | 11 + .../service/impl/SysRoleServiceImpl.java | 44 +++ .../service/impl/SysUserServiceImpl.java | 46 +++ .../src/main/resources/bootstrap.yml | 9 + .../resources/mapper/system/SysDeptMapper.xml | 31 ++ .../resources/mapper/system/SysRoleMapper.xml | 28 ++ .../resources/mapper/system/SysUserMapper.xml | 42 +++ .../mapper/system/SysUserPostMapper.xml | 4 + .../mapper/system/SysUserRoleMapper.xml | 8 + .../src/main/resources/bootstrap.yml | 4 + init-file/cloud-system.sql | 5 + 106 files changed, 2696 insertions(+), 1 deletion(-) create mode 100644 cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java diff --git a/cloud-auth/pom.xml b/cloud-auth/pom.xml index 3921e2a..66dd4f4 100644 --- a/cloud-auth/pom.xml +++ b/cloud-auth/pom.xml @@ -16,11 +16,31 @@ + + + + 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 @@ -45,6 +65,7 @@ cloud-common-api-doc + com.alibaba.cloud @@ -87,6 +108,7 @@ cloud-common-log + diff --git a/cloud-auth/src/main/java/com/muyu/auth/CloudAuthApplication.java b/cloud-auth/src/main/java/com/muyu/auth/CloudAuthApplication.java index c675ad1..ba8e318 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/CloudAuthApplication.java +++ b/cloud-auth/src/main/java/com/muyu/auth/CloudAuthApplication.java @@ -1,8 +1,11 @@ package com.muyu.auth; +<<<<<<< HEAD import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; import com.muyu.common.security.annotation.EnableCustomConfig; +======= +>>>>>>> 813460c (1..) import com.muyu.common.security.annotation.EnableMyFeignClients; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -13,6 +16,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; * * @author muyu */ +<<<<<<< HEAD @EnableCustomConfig @EnableMyFeignClients @SpringBootApplication( @@ -26,5 +30,12 @@ public class CloudAuthApplication { public static void main (String[] args) { SpringApplication.run(CloudAuthApplication.class, args); System.out.println("CloudAuth 模块启动成功!"); +======= +@EnableMyFeignClients +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +public class CloudAuthApplication { + public static void main (String[] args) { + SpringApplication.run(CloudAuthApplication.class, args); +>>>>>>> 813460c (1..) } } 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 8c84466..f919f93 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 @@ -10,7 +10,11 @@ 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; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -25,16 +29,27 @@ import jakarta.servlet.http.HttpServletRequest; */ @RestController public class TokenController { +<<<<<<< HEAD @Resource private TokenService tokenService; @Resource +======= + @Autowired + private TokenService tokenService; + + @Autowired +>>>>>>> 813460c (1..) private SysLoginService sysLoginService; @PostMapping("login") public Result login (@RequestBody LoginBody form) { // 用户登录 +<<<<<<< HEAD LoginUser userInfo = sysLoginService.login(form); +======= + LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); +>>>>>>> 813460c (1..) // 获取登录token return Result.success(tokenService.createToken(userInfo)); } 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 be8e264..19fec8e 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,16 +1,23 @@ package com.muyu.auth.form; +<<<<<<< HEAD import lombok.Data; +======= +>>>>>>> 813460c (1..) /** * 用户登录对象 * * @author muyu */ +<<<<<<< HEAD @Data public class LoginBody { private String firmCode; +======= +public class LoginBody { +>>>>>>> 813460c (1..) /** * 用户名 */ @@ -20,4 +27,23 @@ public class LoginBody { * 用户密码 */ private String password; +<<<<<<< HEAD +======= + + 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; + } +>>>>>>> 813460c (1..) } 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 929536e..38d50d6 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,6 +1,9 @@ package com.muyu.auth.service; +<<<<<<< HEAD import com.muyu.auth.form.LoginBody; +======= +>>>>>>> 813460c (1..) import com.muyu.common.core.constant.CacheConstants; import com.muyu.common.core.constant.Constants; import com.muyu.common.core.constant.SecurityConstants; @@ -13,6 +16,7 @@ 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; +<<<<<<< HEAD import com.muyu.common.system.remote.RemoteSaasService; import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.system.domain.SysUser; @@ -23,6 +27,14 @@ import org.springframework.stereotype.Component; import java.util.Set; +======= +import com.muyu.common.system.remote.RemoteUserService; +import com.muyu.common.system.domain.SysUser; +import com.muyu.common.system.domain.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +>>>>>>> 813460c (1..) /** * 登录校验方法 * @@ -30,6 +42,7 @@ import java.util.Set; */ @Component public class SysLoginService { +<<<<<<< HEAD @Resource private RemoteUserService remoteUserService; @@ -54,6 +67,26 @@ public class SysLoginService { String password = form.getPassword(); // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(firmCode, username, password)) { +======= + @Autowired + private RemoteUserService remoteUserService; + + @Autowired + private SysPasswordService passwordService; + + @Autowired + private SysRecordLogService recordLogService; + + @Autowired + private RedisService redisService; + + /** + * 登录 + */ + public LoginUser login (String username, String password) { + // 用户名或密码为空 错误 + if (StringUtils.isAnyBlank(username, password)) { +>>>>>>> 813460c (1..) recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写"); throw new ServiceException("用户/密码必须填写"); } @@ -76,7 +109,12 @@ public class SysLoginService { throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); } // 查询用户信息 +<<<<<<< HEAD Result userResult = remoteUserService.getUserInfo(firmCode, username, SecurityConstants.INNER); +======= + Result userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER); + +>>>>>>> 813460c (1..) if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) { recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在"); throw new ServiceException("登录用户:" + username + " 不存在"); @@ -86,8 +124,13 @@ public class SysLoginService { throw new ServiceException(userResult.getMsg()); } +<<<<<<< HEAD LoginUser loginUser = userResult.getData(); SysUser user = loginUser.getSysUser(); +======= + LoginUser userInfo = userResult.getData(); + SysUser user = userResult.getData().getSysUser(); +>>>>>>> 813460c (1..) if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) { recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); throw new ServiceException("对不起,您的账号:" + username + " 已被删除"); @@ -98,8 +141,12 @@ public class SysLoginService { } passwordService.validate(user, password); recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功"); +<<<<<<< HEAD return loginUser; +======= + return userInfo; +>>>>>>> 813460c (1..) } public void logout (String loginName) { diff --git a/cloud-auth/src/main/java/com/muyu/auth/service/SysPasswordService.java b/cloud-auth/src/main/java/com/muyu/auth/service/SysPasswordService.java index 3303738..b26f9c7 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/service/SysPasswordService.java +++ b/cloud-auth/src/main/java/com/muyu/auth/service/SysPasswordService.java @@ -6,7 +6,11 @@ import com.muyu.common.core.exception.ServiceException; import com.muyu.common.redis.service.RedisService; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.system.domain.SysUser; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; @@ -18,14 +22,22 @@ import java.util.concurrent.TimeUnit; */ @Component public class SysPasswordService { +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private RedisService redisService; private int maxRetryCount = CacheConstants.PASSWORD_MAX_RETRY_COUNT; private Long lockTime = CacheConstants.PASSWORD_LOCK_TIME; +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private SysRecordLogService recordLogService; /** diff --git a/cloud-auth/src/main/java/com/muyu/auth/service/SysRecordLogService.java b/cloud-auth/src/main/java/com/muyu/auth/service/SysRecordLogService.java index c4ae5e1..9ad7492 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/service/SysRecordLogService.java +++ b/cloud-auth/src/main/java/com/muyu/auth/service/SysRecordLogService.java @@ -6,7 +6,11 @@ import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.ip.IpUtils; import com.muyu.common.system.remote.RemoteLogService; import com.muyu.common.system.domain.SysLogininfor; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Component; /** @@ -16,7 +20,11 @@ import org.springframework.stereotype.Component; */ @Component public class SysRecordLogService { +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private RemoteLogService remoteLogService; /** diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml index 930ce5a..961cc8d 100644 --- a/cloud-auth/src/main/resources/bootstrap.yml +++ b/cloud-auth/src/main/resources/bootstrap.yml @@ -7,7 +7,11 @@ nacos: addr: 47.116.173.119:8848 user-name: nacos password: nacos +<<<<<<< HEAD namespace: one-saas +======= + namespace: one +>>>>>>> 813460c (1..) # Spring spring: application: @@ -40,8 +44,15 @@ spring: file-extension: yml # 共享配置 shared-configs: +<<<<<<< HEAD # 系统环境Config共享配置 - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 系统共享配置 - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +======= + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +>>>>>>> 813460c (1..) diff --git a/cloud-common/cloud-common-core/pom.xml b/cloud-common/cloud-common-core/pom.xml index 9654ee7..de8898d 100644 --- a/cloud-common/cloud-common-core/pom.xml +++ b/cloud-common/cloud-common-core/pom.xml @@ -16,6 +16,7 @@ + com.github.yulichang mybatis-plus-join-boot-starter @@ -168,11 +169,13 @@ cn.hutool hutool-all + org.eclipse.paho org.eclipse.paho.client.mqttv3 1.2.2 + diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java index 0e9b22d..8ce8bd3 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java @@ -45,9 +45,12 @@ public class SecurityConstants { * 角色权限 */ public static final String ROLE_PERMISSION = "role_permission"; +<<<<<<< HEAD /** * SAAS请求头的key */ public static final String SAAS_KEY = "ent-code"; +======= +>>>>>>> 813460c (1..) } diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java index fee414d..5ac04ac 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java @@ -20,6 +20,7 @@ public class ServiceNameConstants { * 文件服务的serviceid */ public static final String FILE_SERVICE = "cloud-file"; +<<<<<<< HEAD /** * 智能车联服务 @@ -29,4 +30,6 @@ public class ServiceNameConstants { public static final String ENT_SERVICE = "cloud-ent"; public static final String SAAS_SERVICE = "cloud-system-saas"; +======= +>>>>>>> 813460c (1..) } diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/context/SecurityContextHolder.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/context/SecurityContextHolder.java index f8866f7..1e6951b 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/context/SecurityContextHolder.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/context/SecurityContextHolder.java @@ -80,6 +80,7 @@ public class SecurityContextHolder { public static void remove () { THREAD_LOCAL.remove(); } +<<<<<<< HEAD public static String getSaasKey() { return get(SecurityConstants.SAAS_KEY); @@ -88,4 +89,6 @@ public class SecurityContextHolder { set(SecurityConstants.SAAS_KEY,saasKey); } +======= +>>>>>>> 813460c (1..) } diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java index c94e051..0ad8ffb 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java @@ -162,6 +162,7 @@ public class JwtUtils { public static String getValue (Claims claims, String key) { return Convert.toStr(claims.get(key), ""); } +<<<<<<< HEAD /** * 根据身份信息获取SAASKey @@ -173,4 +174,6 @@ public class JwtUtils { public static String getSaasKey(Claims claims) { return getValue(claims, SecurityConstants.SAAS_KEY); } +======= +>>>>>>> 813460c (1..) } diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java index 297243e..471aaf9 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/ip/IpUtils.java @@ -58,7 +58,11 @@ public class IpUtils { ip = request.getRemoteAddr(); } +<<<<<<< HEAD return "0:0:0:0:0:0:0:1".equals(ip) ? "106.54.193.225" : getMultistageReverseProxyIp(ip); +======= + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); +>>>>>>> 813460c (1..) } /** @@ -70,7 +74,11 @@ public class IpUtils { */ public static boolean internalIp (String ip) { byte[] addr = textToNumericFormatV4(ip); +<<<<<<< HEAD return internalIp(addr) || "106.54.193.225".equals(ip); +======= + return internalIp(addr) || "127.0.0.1".equals(ip); +>>>>>>> 813460c (1..) } /** @@ -197,7 +205,11 @@ public class IpUtils { return InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { } +<<<<<<< HEAD return "106.54.193.225"; +======= + return "127.0.0.1"; +>>>>>>> 813460c (1..) } /** diff --git a/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/aspect/LogAspect.java b/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/aspect/LogAspect.java index b8cabc4..51efcac 100644 --- a/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/aspect/LogAspect.java +++ b/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/aspect/LogAspect.java @@ -18,7 +18,11 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.core.NamedThreadLocal; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Component; @@ -48,7 +52,11 @@ public class LogAspect { */ private static final ThreadLocal TIME_THREADLOCAL = new NamedThreadLocal("Cost Time"); +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private AsyncLogService asyncLogService; /** diff --git a/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/service/AsyncLogService.java b/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/service/AsyncLogService.java index ab2d064..99f7962 100644 --- a/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/service/AsyncLogService.java +++ b/cloud-common/cloud-common-log/src/main/java/com/muyu/common/log/service/AsyncLogService.java @@ -4,6 +4,7 @@ import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.system.remote.RemoteLogService; import com.muyu.common.system.domain.SysOperLog; import javax.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -14,7 +15,7 @@ import org.springframework.stereotype.Service; */ @Service public class AsyncLogService { - @Resource + @Autowired private RemoteLogService remoteLogService; /** diff --git a/cloud-common/cloud-common-rabbit/pom.xml b/cloud-common/cloud-common-rabbit/pom.xml index 53ac6d7..3681d6f 100644 --- a/cloud-common/cloud-common-rabbit/pom.xml +++ b/cloud-common/cloud-common-rabbit/pom.xml @@ -32,4 +32,7 @@ + + + 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 new file mode 100644 index 0000000..51cb359 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/RabbitListenerConfigurer.java @@ -0,0 +1,41 @@ +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/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 0b13700..bb0f995 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,3 +1,7 @@ +<<<<<<< HEAD com.muyu.common.rabbit.config.RabbitListenerConfig com.muyu.common.rabbit.config.RabbitAdminConfig com.muyu.common.rabbit.config.RabbitMQMessageConverterConfig +======= +com.muyu.common.rabbit.RabbitListenerConfigurer +>>>>>>> 813460c (1..) diff --git a/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java b/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java index cbd59db..1ecd8f4 100644 --- a/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java +++ b/cloud-common/cloud-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java @@ -1,6 +1,10 @@ package com.muyu.common.redis.service; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.data.redis.core.BoundSetOperations; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; @@ -18,7 +22,11 @@ import java.util.concurrent.TimeUnit; @SuppressWarnings(value = {"unchecked", "rawtypes"}) @Component public class RedisService { +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) public RedisTemplate redisTemplate; /** diff --git a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/interceptor/HeaderInterceptor.java b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/interceptor/HeaderInterceptor.java index 44cff61..14c2fbb 100644 --- a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/interceptor/HeaderInterceptor.java +++ b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/interceptor/HeaderInterceptor.java @@ -28,7 +28,10 @@ public class HeaderInterceptor implements AsyncHandlerInterceptor { } SecurityContextHolder.setUserId(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USER_ID)); +<<<<<<< HEAD SecurityContextHolder.setSaasKey(ServletUtils.getHeader(request, SecurityConstants.SAAS_KEY)); +======= +>>>>>>> 813460c (1..) SecurityContextHolder.setUserName(ServletUtils.getHeader(request, SecurityConstants.DETAILS_USERNAME)); SecurityContextHolder.setUserKey(ServletUtils.getHeader(request, SecurityConstants.USER_KEY)); diff --git a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java index 1161caa..a223175 100644 --- a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java +++ b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java @@ -12,7 +12,11 @@ import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.system.domain.LoginUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Component; import jakarta.servlet.http.HttpServletRequest; @@ -34,7 +38,11 @@ public class TokenService { private final static long expireTime = CacheConstants.EXPIRATION; private final static String ACCESS_TOKEN = CacheConstants.LOGIN_TOKEN_KEY; +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private RedisService redisService; /** @@ -55,11 +63,18 @@ public class TokenService { claimsMap.put(SecurityConstants.USER_KEY, token); claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); +<<<<<<< HEAD claimsMap.put(SecurityConstants.SAAS_KEY,loginUser.getSysUser().getFirmCode()); // 接口返回信息 Map rspMap = new HashMap(); rspMap.put("access_token", JwtUtils.createToken(claimsMap)); rspMap.put("ent_code", loginUser.getSysUser().getFirmCode()); +======= + + // 接口返回信息 + Map rspMap = new HashMap(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); +>>>>>>> 813460c (1..) rspMap.put("expires_in", expireTime); return rspMap; } diff --git a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/utils/SecurityUtils.java b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/utils/SecurityUtils.java index 89b57a6..f7bbfeb 100644 --- a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/utils/SecurityUtils.java +++ b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/utils/SecurityUtils.java @@ -30,10 +30,13 @@ public class SecurityUtils { return SecurityContextHolder.getUserName(); } +<<<<<<< HEAD public static String getSaasKey () { return SecurityContextHolder.getSaasKey(); } +======= +>>>>>>> 813460c (1..) /** * 获取用户key */ diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/LoginUser.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/LoginUser.java index 4c8aa05..e8272fe 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/LoginUser.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/LoginUser.java @@ -63,6 +63,9 @@ public class LoginUser implements Serializable { */ private SysUser sysUser; +<<<<<<< HEAD +======= +>>>>>>> 813460c (1..) } diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysDept.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysDept.java index 6c2f7c2..d8cac92 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysDept.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysDept.java @@ -34,8 +34,11 @@ public class SysDept extends BaseEntity { */ private Long parentId; +<<<<<<< HEAD private String firmCode; +======= +>>>>>>> 813460c (1..) /** * 祖级列表 */ diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysRole.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysRole.java index 9844e5a..c17d171 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysRole.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysRole.java @@ -36,8 +36,11 @@ public class SysRole extends BaseEntity { @Excel(name = "角色名称") private String roleName; +<<<<<<< HEAD private String firmCode; +======= +>>>>>>> 813460c (1..) /** * 角色权限 */ diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java index e2cde5d..4a594f4 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java @@ -1,8 +1,11 @@ package com.muyu.common.system.domain; +<<<<<<< HEAD import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +======= +>>>>>>> 813460c (1..) import com.muyu.common.core.annotation.Excel; import com.muyu.common.core.annotation.Excel.ColumnType; import com.muyu.common.core.annotation.Excel.Type; @@ -31,7 +34,10 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) +<<<<<<< HEAD @TableName("sys_user") +======= +>>>>>>> 813460c (1..) public class SysUser extends BaseEntity { private static final long serialVersionUID = 1L; @@ -39,11 +45,16 @@ public class SysUser extends BaseEntity { * 用户ID */ @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") +<<<<<<< HEAD @TableId(type = IdType.AUTO) private Long userId; private Integer isAdmin; +======= + private Long userId; + +>>>>>>> 813460c (1..) /** * 部门ID */ @@ -56,9 +67,12 @@ public class SysUser extends BaseEntity { @Excel(name = "登录名称") private String userName; +<<<<<<< HEAD private String firmCode; +======= +>>>>>>> 813460c (1..) /** * 用户昵称 */ @@ -145,8 +159,11 @@ public class SysUser extends BaseEntity { */ private Long roleId; +<<<<<<< HEAD +======= +>>>>>>> 813460c (1..) public SysUser (Long userId) { this.userId = userId; } @@ -155,9 +172,14 @@ public class SysUser extends BaseEntity { return userId != null && 1L == userId; } +<<<<<<< HEAD public boolean isAdmin () { return isAdmin(this.userId) || (this.isAdmin != null && this.isAdmin == 1); +======= + public boolean isAdmin () { + return isAdmin(this.userId); +>>>>>>> 813460c (1..) } @Xss(message = "用户昵称不能包含脚本字符") 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 ca0bb3f..5ee65f0 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,6 +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; +<<<<<<< HEAD import com.muyu.common.system.domain.*; import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; @@ -11,6 +12,14 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Set; +======= +import com.muyu.common.system.domain.SysUser; +import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; +import com.muyu.common.system.domain.LoginUser; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +>>>>>>> 813460c (1..) /** * 用户服务 * @@ -18,6 +27,19 @@ import java.util.Set; */ @FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class) public interface RemoteUserService { +<<<<<<< HEAD +======= + /** + * 通过用户名查询用户信息 + * + * @param username 用户名 + * @param source 请求来源 + * + * @return 结果 + */ + @GetMapping("/user/info/{username}") + public Result getUserInfo (@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +>>>>>>> 813460c (1..) /** * 注册用户信息 @@ -29,6 +51,7 @@ public interface RemoteUserService { */ @PostMapping("/user/register") public Result registerUserInfo (@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); +<<<<<<< HEAD @GetMapping("/user/companyList") public Result> companyList (); @@ -98,4 +121,6 @@ public interface RemoteUserService { */ @PostMapping("/user") public Result addUser (@RequestBody SysUser user); +======= +>>>>>>> 813460c (1..) } 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 2e0ecf6..9b99ba0 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,17 +1,26 @@ package com.muyu.common.system.remote.factory; import com.muyu.common.core.domain.Result; +<<<<<<< HEAD import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.system.domain.*; import com.muyu.common.system.remote.RemoteUserService; +======= +import com.muyu.common.system.remote.RemoteUserService; +import com.muyu.common.system.domain.SysUser; +import com.muyu.common.system.domain.LoginUser; +>>>>>>> 813460c (1..) import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; +<<<<<<< HEAD import java.util.List; import java.util.Set; +======= +>>>>>>> 813460c (1..) /** * 用户服务降级处理 * @@ -25,11 +34,19 @@ public class RemoteUserFallbackFactory implements FallbackFactory getUserInfo (String username, String source) { + return Result.error("获取用户失败:" + throwable.getMessage()); + } +>>>>>>> 813460c (1..) @Override public Result registerUserInfo (SysUser sysUser, String source) { return Result.error("注册用户失败:" + throwable.getMessage()); } +<<<<<<< HEAD @Override public Result> companyList() { @@ -76,6 +93,8 @@ public class RemoteUserFallbackFactory implements FallbackFactory>>>>>> 813460c (1..) }; } } diff --git a/cloud-common/cloud-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 6076e55..7c7f563 100644 --- a/cloud-common/cloud-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/cloud-common/cloud-common-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,4 +1,7 @@ com.muyu.common.system.remote.factory.RemoteUserFallbackFactory com.muyu.common.system.remote.factory.RemoteLogFallbackFactory com.muyu.common.system.remote.factory.RemoteFileFallbackFactory +<<<<<<< HEAD com.muyu.common.system.remote.factory.RemoteSaasFallbackFactory +======= +>>>>>>> 813460c (1..) diff --git a/cloud-common/cloud-common-xxl/src/main/java/com/muyu/common/xxl/XXLJobConfig.java b/cloud-common/cloud-common-xxl/src/main/java/com/muyu/common/xxl/XXLJobConfig.java index 85ebf6f..17792ed 100644 --- a/cloud-common/cloud-common-xxl/src/main/java/com/muyu/common/xxl/XXLJobConfig.java +++ b/cloud-common/cloud-common-xxl/src/main/java/com/muyu/common/xxl/XXLJobConfig.java @@ -7,9 +7,15 @@ import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Log4j2 +<<<<<<< HEAD //@Component public class XXLJobConfig { // @Bean +======= +@Component +public class XXLJobConfig { + @Bean +>>>>>>> 813460c (1..) public XxlJobSpringExecutor xxlJobExecutor(XxlJobProperties xxlJobProperties) { if (StringUtils.isEmpty(xxlJobProperties.getAdminAddresses())){ throw new RuntimeException("请在bootstrap.yml当中配置shared-configs项,xxl-job共享配置[application-xxl-config]"); diff --git a/cloud-gateway/pom.xml b/cloud-gateway/pom.xml index 8aa98ed..93d24a7 100644 --- a/cloud-gateway/pom.xml +++ b/cloud-gateway/pom.xml @@ -81,6 +81,8 @@ knife4j-gateway-spring-boot-starter 4.5.0 + + diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/CloudGatewayApplication.java b/cloud-gateway/src/main/java/com/muyu/gateway/CloudGatewayApplication.java index f962432..ad4e6b4 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/CloudGatewayApplication.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/CloudGatewayApplication.java @@ -13,6 +13,9 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; public class CloudGatewayApplication { public static void main (String[] args) { SpringApplication.run(CloudGatewayApplication.class, args); +<<<<<<< HEAD System.out.println("CloudGateway 模块启动成功!"); +======= +>>>>>>> 813460c (1..) } } diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/config/RouterFunctionConfiguration.java b/cloud-gateway/src/main/java/com/muyu/gateway/config/RouterFunctionConfiguration.java index cc95d0a..c06231f 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/config/RouterFunctionConfiguration.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/config/RouterFunctionConfiguration.java @@ -1,7 +1,11 @@ package com.muyu.gateway.config; import com.muyu.gateway.handler.ValidateCodeHandler; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; @@ -16,7 +20,11 @@ import org.springframework.web.reactive.function.server.RouterFunctions; */ @Configuration public class RouterFunctionConfiguration { +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private ValidateCodeHandler validateCodeHandler; @SuppressWarnings("rawtypes") diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java b/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java index 965c63b..144f1b0 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java @@ -12,7 +12,11 @@ import com.muyu.gateway.config.properties.IgnoreWhiteProperties; import io.jsonwebtoken.Claims; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; @@ -31,10 +35,17 @@ public class AuthFilter implements GlobalFilter, Ordered { private static final Logger log = LoggerFactory.getLogger(AuthFilter.class); // 排除过滤的 uri 地址,nacos自行添加 +<<<<<<< HEAD @Resource private IgnoreWhiteProperties ignoreWhite; @Resource +======= + @Autowired + private IgnoreWhiteProperties ignoreWhite; + + @Autowired +>>>>>>> 813460c (1..) private RedisService redisService; @@ -63,7 +74,10 @@ public class AuthFilter implements GlobalFilter, Ordered { } String userid = JwtUtils.getUserId(claims); String username = JwtUtils.getUserName(claims); +<<<<<<< HEAD String saasKey = JwtUtils.getSaasKey(claims); +======= +>>>>>>> 813460c (1..) if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) { return unauthorizedResponse(exchange, "令牌验证失败"); } @@ -72,7 +86,10 @@ public class AuthFilter implements GlobalFilter, Ordered { addHeader(mutate, SecurityConstants.USER_KEY, userkey); addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid); addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username); +<<<<<<< HEAD addHeader(mutate,SecurityConstants.SAAS_KEY,saasKey); +======= +>>>>>>> 813460c (1..) // 内部请求来源参数清除 removeHeader(mutate, SecurityConstants.FROM_SOURCE); return chain.filter(exchange.mutate().request(mutate.build()).build()); diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/filter/ValidateCodeFilter.java b/cloud-gateway/src/main/java/com/muyu/gateway/filter/ValidateCodeFilter.java index ea94b85..7ec728e 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/filter/ValidateCodeFilter.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/filter/ValidateCodeFilter.java @@ -6,7 +6,11 @@ import com.muyu.common.core.utils.ServletUtils; import com.muyu.common.core.utils.StringUtils; import com.muyu.gateway.config.properties.CaptchaProperties; import com.muyu.gateway.service.ValidateCodeService; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.core.io.buffer.DataBuffer; @@ -29,9 +33,15 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory { private final static String[] VALIDATE_URL = new String[]{"/auth/login", "/auth/register"}; private static final String CODE = "code"; private static final String UUID = "uuid"; +<<<<<<< HEAD @Resource private ValidateCodeService validateCodeService; @Resource +======= + @Autowired + private ValidateCodeService validateCodeService; + @Autowired +>>>>>>> 813460c (1..) private CaptchaProperties captchaProperties; @Override diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/filter/XssFilter.java b/cloud-gateway/src/main/java/com/muyu/gateway/filter/XssFilter.java index 719dd4d..5997ad4 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/filter/XssFilter.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/filter/XssFilter.java @@ -4,7 +4,11 @@ import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.html.EscapeUtil; import com.muyu.gateway.config.properties.XssProperties; import io.netty.buffer.ByteBufAllocator; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; @@ -31,7 +35,11 @@ import java.nio.charset.StandardCharsets; @ConditionalOnProperty(value = "security.xss.enabled", havingValue = "true") public class XssFilter implements GlobalFilter, Ordered { // 跨站脚本的 xss 配置,nacos自行添加 +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private XssProperties xss; @Override diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/handler/ValidateCodeHandler.java b/cloud-gateway/src/main/java/com/muyu/gateway/handler/ValidateCodeHandler.java index 3daceb5..2089d98 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/handler/ValidateCodeHandler.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/handler/ValidateCodeHandler.java @@ -3,7 +3,11 @@ package com.muyu.gateway.handler; import com.muyu.common.core.exception.CaptchaException; import com.muyu.common.core.domain.Result; import com.muyu.gateway.service.ValidateCodeService; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.BodyInserters; @@ -21,7 +25,11 @@ import java.io.IOException; */ @Component public class ValidateCodeHandler implements HandlerFunction { +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private ValidateCodeService validateCodeService; @Override diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/service/impl/ValidateCodeServiceImpl.java b/cloud-gateway/src/main/java/com/muyu/gateway/service/impl/ValidateCodeServiceImpl.java index 8e00059..5eb7a06 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/service/impl/ValidateCodeServiceImpl.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/service/impl/ValidateCodeServiceImpl.java @@ -12,7 +12,11 @@ import com.muyu.common.redis.service.RedisService; import com.muyu.gateway.config.properties.CaptchaProperties; import com.muyu.gateway.model.resp.CaptchaCodeResp; import com.muyu.gateway.service.ValidateCodeService; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Service; import org.springframework.util.FastByteArrayOutputStream; @@ -35,10 +39,17 @@ public class ValidateCodeServiceImpl implements ValidateCodeService { @Resource(name = "captchaProducerMath") private Producer captchaProducerMath; +<<<<<<< HEAD @Resource private RedisService redisService; @Resource +======= + @Autowired + private RedisService redisService; + + @Autowired +>>>>>>> 813460c (1..) private CaptchaProperties captchaProperties; /** @@ -50,7 +61,11 @@ public class ValidateCodeServiceImpl implements ValidateCodeService { CaptchaCodeResp.CaptchaCodeRespBuilder respBuilder = CaptchaCodeResp.builder() .captchaEnabled(captchaEnabled); if (!captchaEnabled) { +<<<<<<< HEAD return Result.success(respBuilder.build()); +======= + return Result.success(respBuilder); +>>>>>>> 813460c (1..) } // 保存验证码信息 diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java b/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java index 68b0a19..2702743 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java @@ -4,6 +4,11 @@ import cn.hutool.core.net.NetUtil; import cn.hutool.core.util.ArrayUtil; import com.alibaba.fastjson2.JSONObject; import lombok.extern.log4j.Log4j2; +<<<<<<< HEAD +======= +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +>>>>>>> 813460c (1..) import org.springframework.cloud.gateway.route.Route; import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; import org.springframework.core.io.buffer.DataBufferFactory; @@ -16,6 +21,11 @@ import reactor.core.publisher.Mono; /** * Web 工具类 +<<<<<<< HEAD +======= + * + * +>>>>>>> 813460c (1..) */ @Log4j2 public class WebFrameworkUtils { @@ -68,6 +78,11 @@ public class WebFrameworkUtils { /** * 获得客户端 IP +<<<<<<< HEAD +======= + * + * +>>>>>>> 813460c (1..) * @param exchange 请求 * @param otherHeaderNames 其它 header 名字的数组 * @return 客户端 IP @@ -85,6 +100,10 @@ public class WebFrameworkUtils { return NetUtil.getMultistageReverseProxyIp(ip); } } +<<<<<<< HEAD +======= + +>>>>>>> 813460c (1..) // 方式二,通过 remoteAddress 获取 if (exchange.getRequest().getRemoteAddress() == null) { return null; @@ -95,6 +114,10 @@ public class WebFrameworkUtils { /** * 获得请求匹配的 Route 路由 +<<<<<<< HEAD +======= + * +>>>>>>> 813460c (1..) * @param exchange 请求 * @return 路由 */ diff --git a/cloud-gateway/src/main/resources/bootstrap.yml b/cloud-gateway/src/main/resources/bootstrap.yml index 3782dab..d4de70e 100644 --- a/cloud-gateway/src/main/resources/bootstrap.yml +++ b/cloud-gateway/src/main/resources/bootstrap.yml @@ -7,7 +7,11 @@ nacos: addr: 47.116.173.119:8848 user-name: nacos password: nacos +<<<<<<< HEAD namespace: one-saas +======= + namespace: one +>>>>>>> 813460c (1..) # Spring spring: @@ -22,35 +26,60 @@ spring: discovery: # 服务注册地址 server-addr: ${nacos.addr} +<<<<<<< HEAD # # nacos用户名 # username: ${nacos.user-name} # # nacos密码 # password: ${nacos.password} +======= + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} +>>>>>>> 813460c (1..) # 命名空间 namespace: ${nacos.namespace} config: # 服务注册地址 server-addr: ${nacos.addr} +<<<<<<< HEAD # # nacos用户名 # username: ${nacos.user-name} # # nacos密码 # password: ${nacos.password} +======= + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} +>>>>>>> 813460c (1..) # 命名空间 namespace: ${nacos.namespace} # 配置文件格式 file-extension: yml # 共享配置 shared-configs: +<<<<<<< HEAD # 系统环境Config共享配置 - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # 系统共享配置 - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +======= + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +>>>>>>> 813460c (1..) sentinel: # 取消控制台懒加载 eager: true transport: # 控制台地址 +<<<<<<< HEAD dashboard: 106.54.193.225:8718 +======= + dashboard: 127.0.0.1:8718 +>>>>>>> 813460c (1..) # nacos配置持久化 datasource: ds1: diff --git a/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/CloudFileApplication.java b/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/CloudFileApplication.java index a7b6fcc..f51ff9b 100644 --- a/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/CloudFileApplication.java +++ b/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/CloudFileApplication.java @@ -13,6 +13,9 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; public class CloudFileApplication { public static void main (String[] args) { SpringApplication.run(CloudFileApplication.class, args); +<<<<<<< HEAD System.out.println("CloudFile 模块启动成功!"); +======= +>>>>>>> 813460c (1..) } } diff --git a/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/controller/SysFileController.java b/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/controller/SysFileController.java index fa9ff45..46acd5d 100644 --- a/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/controller/SysFileController.java +++ b/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/controller/SysFileController.java @@ -6,7 +6,11 @@ import com.muyu.file.service.ISysFileService; import com.muyu.common.system.domain.SysFile; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; @@ -21,7 +25,11 @@ import org.springframework.web.multipart.MultipartFile; public class SysFileController { private static final Logger log = LoggerFactory.getLogger(SysFileController.class); +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private ISysFileService sysFileService; /** diff --git a/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/service/MinioSysFileServiceImpl.java b/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/service/MinioSysFileServiceImpl.java index 29dfe17..54a1dc2 100644 --- a/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/service/MinioSysFileServiceImpl.java +++ b/cloud-modules/cloud-modules-file/src/main/java/com/muyu/file/service/MinioSysFileServiceImpl.java @@ -5,7 +5,11 @@ import com.muyu.file.config.MinioConfig; import com.muyu.file.utils.FileUploadUtils; import io.minio.MinioClient; import io.minio.PutObjectArgs; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -18,10 +22,17 @@ import java.io.InputStream; */ @Service public class MinioSysFileServiceImpl implements ISysFileService { +<<<<<<< HEAD @Resource private MinioConfig minioConfig; @Resource +======= + @Autowired + private MinioConfig minioConfig; + + @Autowired +>>>>>>> 813460c (1..) private MinioClient client; /** 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 a36bd1b..aa87d67 100644 --- a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml @@ -1,13 +1,21 @@ # Tomcat server: +<<<<<<< HEAD port: 9301 +======= + port: 9300 +>>>>>>> 813460c (1..) # nacos线上地址 nacos: addr: 47.116.173.119:8848 user-name: nacos password: nacos +<<<<<<< HEAD namespace: one-saas +======= + namespace: one +>>>>>>> 813460c (1..) # Spring spring: diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/CloudGenApplication.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/CloudGenApplication.java index 3cb1f39..d44c48c 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/CloudGenApplication.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/CloudGenApplication.java @@ -16,6 +16,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; public class CloudGenApplication { public static void main (String[] args) { SpringApplication.run(CloudGenApplication.class, args); +<<<<<<< HEAD System.out.println("CloudGen 模块启动成功!"); +======= +>>>>>>> 813460c (1..) } } diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/controller/GenController.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/controller/GenController.java index f93075e..3ef9d92 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/controller/GenController.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/controller/GenController.java @@ -1,14 +1,21 @@ package com.muyu.gen.controller; +<<<<<<< HEAD import com.muyu.common.core.domain.Result; import com.muyu.common.core.text.Convert; import com.muyu.common.core.web.controller.BaseController; +======= +import com.muyu.common.core.text.Convert; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.domain.Result; +>>>>>>> 813460c (1..) import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.log.annotation.Log; import com.muyu.common.log.enums.BusinessType; import com.muyu.common.security.annotation.RequiresPermissions; import com.muyu.gen.domain.GenTable; import com.muyu.gen.domain.GenTableColumn; +<<<<<<< HEAD import com.muyu.gen.domain.GenTableResp; import com.muyu.gen.service.IGenTableColumnService; import com.muyu.gen.service.IGenTableService; @@ -19,6 +26,16 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +======= +import com.muyu.gen.service.IGenTableColumnService; +import com.muyu.gen.service.IGenTableService; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.servlet.http.HttpServletResponse; +>>>>>>> 813460c (1..) import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -27,6 +44,7 @@ import java.util.Map; /** * 代码生成 操作处理 * +<<<<<<< HEAD * @author ruoyi */ @RequestMapping("/gen") @@ -40,6 +58,17 @@ public class GenController extends BaseController private HttpServletResponse response; @Resource +======= + * @author muyu + */ +@RequestMapping("/gen") +@RestController +public class GenController extends BaseController { + @Autowired + private IGenTableService genTableService; + + @Autowired +>>>>>>> 813460c (1..) private IGenTableColumnService genTableColumnService; /** @@ -47,8 +76,12 @@ public class GenController extends BaseController */ @RequiresPermissions("tool:gen:list") @GetMapping("/list") +<<<<<<< HEAD public Result genList(GenTable genTable) { +======= + public Result> genList (GenTable genTable) { +>>>>>>> 813460c (1..) startPage(); List list = genTableService.selectGenTableList(genTable); return getDataTable(list); @@ -59,8 +92,12 @@ public class GenController extends BaseController */ @RequiresPermissions("tool:gen:query") @GetMapping(value = "/{tableId}") +<<<<<<< HEAD public Result getInfo(@PathVariable("tableId") Long tableId) { +======= + public Result getInfo (@PathVariable("tableId") Long tableId) { +>>>>>>> 813460c (1..) GenTable table = genTableService.selectGenTableById(tableId); List tables = genTableService.selectGenTableAll(); List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); @@ -71,14 +108,21 @@ public class GenController extends BaseController return success(map); } +<<<<<<< HEAD +======= +>>>>>>> 813460c (1..) /** * 查询数据库列表 */ @RequiresPermissions("tool:gen:list") @GetMapping("/db/list") +<<<<<<< HEAD public Result dataList(GenTable genTable) { +======= + public Result> dataList (GenTable genTable) { +>>>>>>> 813460c (1..) startPage(); List list = genTableService.selectDbTableList(genTable); return getDataTable(list); @@ -88,6 +132,7 @@ public class GenController extends BaseController * 查询数据表字段列表 */ @GetMapping(value = "/column/{tableId}") +<<<<<<< HEAD public Result columnList(@PathVariable("tableId") Long tableId) { TableDataInfo dataInfo = new TableDataInfo(); @@ -95,11 +140,22 @@ public class GenController extends BaseController dataInfo.setRows(list); dataInfo.setTotal(list.size()); return success(dataInfo); +======= + public Result> columnList (Long tableId) { + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + return Result.success( + TableDataInfo.builder() + .total(list.size()) + .rows(list) + .build() + ); +>>>>>>> 813460c (1..) } /** * 导入表结构(保存) */ +<<<<<<< HEAD // @RequiresPermissions("tool:gen:import") @Log(title = "代码生成", businessType = BusinessType.IMPORT) @PostMapping("/importTable") @@ -108,6 +164,15 @@ public class GenController extends BaseController String[] tableNames = Convert.toStrArray(tables); // 查询表信息 List tableList = genTableService.selectDbTableListByNames(tableNames,dbName); +======= + @RequiresPermissions("tool:gen:import") + @Log(title = "代码生成", businessType = BusinessType.IMPORT) + @PostMapping("/importTable") + public Result importTableSave (String tables) { + String[] tableNames = Convert.toStrArray(tables); + // 查询表信息 + List tableList = genTableService.selectDbTableListByNames(tableNames); +>>>>>>> 813460c (1..) genTableService.importGenTable(tableList); return success(); } @@ -118,8 +183,12 @@ public class GenController extends BaseController @RequiresPermissions("tool:gen:edit") @Log(title = "代码生成", businessType = BusinessType.UPDATE) @PutMapping +<<<<<<< HEAD public Result editSave(@Validated @RequestBody GenTable genTable) { +======= + public Result editSave (@Validated @RequestBody GenTable genTable) { +>>>>>>> 813460c (1..) genTableService.validateEdit(genTable); genTableService.updateGenTable(genTable); return success(); @@ -131,8 +200,12 @@ public class GenController extends BaseController @RequiresPermissions("tool:gen:remove") @Log(title = "代码生成", businessType = BusinessType.DELETE) @DeleteMapping("/{tableIds}") +<<<<<<< HEAD public Result remove(@PathVariable("tableIds") Long[] tableIds) { +======= + public Result remove (@PathVariable("tableIds") Long[] tableIds) { +>>>>>>> 813460c (1..) genTableService.deleteGenTableByIds(tableIds); return success(); } @@ -142,8 +215,12 @@ public class GenController extends BaseController */ @RequiresPermissions("tool:gen:preview") @GetMapping("/preview/{tableId}") +<<<<<<< HEAD public Result preview(@PathVariable("tableId") Long tableId) throws IOException { +======= + public Result preview (@PathVariable("tableId") Long tableId) throws IOException { +>>>>>>> 813460c (1..) Map dataMap = genTableService.previewCode(tableId); return success(dataMap); } @@ -154,8 +231,12 @@ public class GenController extends BaseController @RequiresPermissions("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/download/{tableName}") +<<<<<<< HEAD public void download(@PathVariable("tableName") String tableName) throws IOException { +======= + public void download (HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException { +>>>>>>> 813460c (1..) byte[] data = genTableService.downloadCode(tableName); genCode(response, data); } @@ -166,8 +247,12 @@ public class GenController extends BaseController @RequiresPermissions("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/genCode/{tableName}") +<<<<<<< HEAD public Result genCode(@PathVariable("tableName") String tableName) { +======= + public Result genCode (@PathVariable("tableName") String tableName) { +>>>>>>> 813460c (1..) genTableService.generatorCode(tableName); return success(); } @@ -177,10 +262,16 @@ public class GenController extends BaseController */ @RequiresPermissions("tool:gen:edit") @Log(title = "代码生成", businessType = BusinessType.UPDATE) +<<<<<<< HEAD @GetMapping("/synchDb/{tableName}/{dbName}") public Result synchDb(@PathVariable("tableName") String tableName,@PathVariable("dbName") String dbName) { genTableService.synchDb(tableName,dbName); +======= + @GetMapping("/synchDb/{tableName}") + public Result synchDb (@PathVariable("tableName") String tableName) { + genTableService.synchDb(tableName); +>>>>>>> 813460c (1..) return success(); } @@ -190,8 +281,12 @@ public class GenController extends BaseController @RequiresPermissions("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/batchGenCode") +<<<<<<< HEAD public void batchGenCode(@RequestParam("tables") String tables) throws IOException { +======= + public void batchGenCode (HttpServletResponse response, String tables) throws IOException { +>>>>>>> 813460c (1..) String[] tableNames = Convert.toStrArray(tables); byte[] data = genTableService.downloadCode(tableNames); genCode(response, data); @@ -200,6 +295,7 @@ public class GenController extends BaseController /** * 生成zip文件 */ +<<<<<<< HEAD private void genCode(HttpServletResponse response, byte[] data) throws IOException { response.reset(); @@ -233,4 +329,13 @@ public class GenController extends BaseController List genTableColumns = genTableColumnService.selectDbTableColumnsByName(table, dbName); return Result.success(genTableColumns); } +======= + private void genCode (HttpServletResponse response, byte[] data) throws IOException { + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"muyu.zip\""); + response.addHeader("Content-Length", String.valueOf(data.length)); + response.setContentType("application/octet-stream; charset=UTF-8"); + IOUtils.write(data, response.getOutputStream()); + } +>>>>>>> 813460c (1..) } diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/domain/GenTable.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/domain/GenTable.java index c906725..5ff551f 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/domain/GenTable.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/domain/GenTable.java @@ -35,8 +35,11 @@ public class GenTable extends BaseEntity { */ private Long tableId; +<<<<<<< HEAD private String dbName; +======= +>>>>>>> 813460c (1..) /** * 表名称 */ diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableColumnMapper.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableColumnMapper.java index 76f5909..f757d36 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableColumnMapper.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableColumnMapper.java @@ -1,5 +1,6 @@ package com.muyu.gen.mapper; +<<<<<<< HEAD import com.muyu.gen.domain.GenTableColumn; import org.apache.ibatis.annotations.Param; @@ -13,52 +14,107 @@ import java.util.List; */ public interface GenTableColumnMapper { +======= +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.gen.domain.GenTableColumn; + +import java.util.List; + +/** + * 业务字段 数据层 + * + * @author muyu + */ +public interface GenTableColumnMapper extends BaseMapper { +>>>>>>> 813460c (1..) /** * 根据表名称查询列信息 * * @param tableName 表名称 +<<<<<<< HEAD * @param dbName * @return 列信息 */ public List selectDbTableColumnsByName(@Param("tableName") String tableName, @Param("dbName") String dbName); +======= + * + * @return 列信息 + */ + List selectDbTableColumnsByName (String tableName); +>>>>>>> 813460c (1..) /** * 查询业务字段列表 * * @param tableId 业务字段编号 +<<<<<<< HEAD * @return 业务字段集合 */ public List selectGenTableColumnListByTableId(@Param("tableId") Long tableId); +======= + * + * @return 业务字段集合 + */ + List selectGenTableColumnListByTableId (Long tableId); +>>>>>>> 813460c (1..) /** * 新增业务字段 * * @param genTableColumn 业务字段信息 +<<<<<<< HEAD * @return 结果 */ public int insertGenTableColumn(GenTableColumn genTableColumn); +======= + * + * @return 结果 + */ + int insertGenTableColumn (GenTableColumn genTableColumn); +>>>>>>> 813460c (1..) /** * 修改业务字段 * * @param genTableColumn 业务字段信息 +<<<<<<< HEAD * @return 结果 */ public int updateGenTableColumn(GenTableColumn genTableColumn); +======= + * + * @return 结果 + */ + int updateGenTableColumn (GenTableColumn genTableColumn); +>>>>>>> 813460c (1..) /** * 删除业务字段 * * @param genTableColumns 列数据 +<<<<<<< HEAD * @return 结果 */ public int deleteGenTableColumns(@Param("genTableColumns") List genTableColumns); +======= + * + * @return 结果 + */ + int deleteGenTableColumns (List genTableColumns); +>>>>>>> 813460c (1..) /** * 批量删除业务字段 * * @param ids 需要删除的数据ID +<<<<<<< HEAD * @return 结果 */ public int deleteGenTableColumnByIds(@Param("ids") Long[] ids); +======= + * + * @return 结果 + */ + int deleteGenTableColumnByIds (Long[] ids); +>>>>>>> 813460c (1..) } diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableMapper.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableMapper.java index aa49b3f..73c43d3 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableMapper.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/mapper/GenTableMapper.java @@ -1,86 +1,151 @@ package com.muyu.gen.mapper; +<<<<<<< HEAD import com.muyu.gen.domain.GenTable; import com.muyu.gen.domain.GenTableResp; import org.apache.ibatis.annotations.Param; +======= +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.gen.domain.GenTable; +>>>>>>> 813460c (1..) import java.util.List; /** * 业务 数据层 * +<<<<<<< HEAD * @author ruoyi */ public interface GenTableMapper { +======= + * @author muyu + */ +public interface GenTableMapper extends BaseMapper { +>>>>>>> 813460c (1..) /** * 查询业务列表 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 业务集合 */ public List selectGenTableList(GenTable genTable); +======= + * + * @return 业务集合 + */ + List selectGenTableList (GenTable genTable); +>>>>>>> 813460c (1..) /** * 查询据库列表 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 数据库表集合 */ public List selectDbTableList(GenTable genTable); +======= + * + * @return 数据库表集合 + */ + List selectDbTableList (GenTable genTable); +>>>>>>> 813460c (1..) /** * 查询据库列表 * * @param tableNames 表名称组 +<<<<<<< HEAD * @param dbName * @return 数据库表集合 */ public List selectDbTableListByNames(@Param("tableNames") String[] tableNames, @Param("dbName") String dbName); +======= + * + * @return 数据库表集合 + */ + List selectDbTableListByNames (String[] tableNames); +>>>>>>> 813460c (1..) /** * 查询所有表信息 * * @return 表信息集合 */ +<<<<<<< HEAD public List selectGenTableAll(); +======= + List selectGenTableAll (); +>>>>>>> 813460c (1..) /** * 查询表ID业务信息 * * @param id 业务ID +<<<<<<< HEAD * @return 业务信息 */ public GenTable selectGenTableById(@Param("id") Long id); +======= + * + * @return 业务信息 + */ + GenTable selectGenTableById (Long id); +>>>>>>> 813460c (1..) /** * 查询表名称业务信息 * * @param tableName 表名称 +<<<<<<< HEAD * @return 业务信息 */ public GenTable selectGenTableByName(@Param("tableName") String tableName); +======= + * + * @return 业务信息 + */ + GenTable selectGenTableByName (String tableName); +>>>>>>> 813460c (1..) /** * 新增业务 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 结果 */ public int insertGenTable(GenTable genTable); +======= + * + * @return 结果 + */ + int insertGenTable (GenTable genTable); +>>>>>>> 813460c (1..) /** * 修改业务 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 结果 */ public int updateGenTable(GenTable genTable); +======= + * + * @return 结果 + */ + int updateGenTable (GenTable genTable); +>>>>>>> 813460c (1..) /** * 批量删除业务 * * @param ids 需要删除的数据ID +<<<<<<< HEAD * @return 结果 */ public int deleteGenTableByIds(@Param("ids") Long[] ids); @@ -88,4 +153,10 @@ public interface GenTableMapper List selDbNameAll(); List selectDbTableListAll(); +======= + * + * @return 结果 + */ + int deleteGenTableByIds (Long[] ids); +>>>>>>> 813460c (1..) } 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..3ba99ea 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 @@ -3,7 +3,11 @@ package com.muyu.gen.service; import com.muyu.common.core.text.Convert; import com.muyu.gen.domain.GenTableColumn; import com.muyu.gen.mapper.GenTableColumnMapper; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Service; import java.util.List; @@ -11,6 +15,7 @@ import java.util.List; /** * 业务字段 服务层实现 * +<<<<<<< HEAD * @author ruoyi */ @Service @@ -30,11 +35,32 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService { return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); } +======= + * @author muyu + */ +@Service +public class GenTableColumnServiceImpl implements IGenTableColumnService { + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 查询业务字段列表 + * + * @param tableId 业务字段编号 + * + * @return 业务字段集合 + */ + @Override + public List selectGenTableColumnListByTableId (Long tableId) { + return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); + } +>>>>>>> 813460c (1..) /** * 新增业务字段 * * @param genTableColumn 业务字段信息 +<<<<<<< HEAD * @return 结果 */ @Override @@ -70,5 +96,37 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService @Override public List selectDbTableColumnsByName(String table, String dbName) { return genTableColumnMapper.selectDbTableColumnsByName(table,dbName); +======= + * + * @return 结果 + */ + @Override + public int insertGenTableColumn (GenTableColumn genTableColumn) { + return genTableColumnMapper.insertGenTableColumn(genTableColumn); + } + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * + * @return 结果 + */ + @Override + public int updateGenTableColumn (GenTableColumn genTableColumn) { + return genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + + /** + * 删除业务字段对象 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + @Override + public int deleteGenTableColumnByIds (String ids) { + return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); +>>>>>>> 813460c (1..) } } 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..61005ff 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 @@ -10,7 +10,10 @@ import com.muyu.common.core.utils.StringUtils; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.gen.domain.GenTable; import com.muyu.gen.domain.GenTableColumn; +<<<<<<< HEAD import com.muyu.gen.domain.GenTableResp; +======= +>>>>>>> 813460c (1..) import com.muyu.gen.mapper.GenTableColumnMapper; import com.muyu.gen.mapper.GenTableMapper; import com.muyu.gen.util.GenUtils; @@ -23,7 +26,11 @@ import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +<<<<<<< HEAD import javax.annotation.Resource; +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -42,6 +49,7 @@ import java.util.zip.ZipOutputStream; /** * 业务 服务层实现 * +<<<<<<< HEAD * @author ruoyi */ @Service @@ -64,6 +72,45 @@ public class GenTableServiceImpl implements IGenTableService @Override public GenTable selectGenTableById(Long id) { +======= + * @author muyu + */ +@Service +public class GenTableServiceImpl implements IGenTableService { + private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + + @Autowired + private GenTableMapper genTableMapper; + + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 获取代码生成地址 + * + * @param table 业务表信息 + * @param template 模板文件路径 + * + * @return 生成地址 + */ + public static String getGenPath (GenTable table, String template) { + String genPath = table.getGenPath(); + if (StringUtils.equals(genPath, "/")) { + return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table); + } + return genPath + File.separator + VelocityUtils.getFileName(template, table); + } + + /** + * 查询业务信息 + * + * @param id 业务ID + * + * @return 业务信息 + */ + @Override + public GenTable selectGenTableById (Long id) { +>>>>>>> 813460c (1..) GenTable genTable = genTableMapper.selectGenTableById(id); setTableFromOptions(genTable); return genTable; @@ -73,11 +120,19 @@ public class GenTableServiceImpl implements IGenTableService * 查询业务列表 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 业务集合 */ @Override public List selectGenTableList(GenTable genTable) { +======= + * + * @return 业务集合 + */ + @Override + public List selectGenTableList (GenTable genTable) { +>>>>>>> 813460c (1..) return genTableMapper.selectGenTableList(genTable); } @@ -85,11 +140,19 @@ public class GenTableServiceImpl implements IGenTableService * 查询据库列表 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 数据库表集合 */ @Override public List selectDbTableList(GenTable genTable) { +======= + * + * @return 数据库表集合 + */ + @Override + public List selectDbTableList (GenTable genTable) { +>>>>>>> 813460c (1..) return genTableMapper.selectDbTableList(genTable); } @@ -97,6 +160,7 @@ public class GenTableServiceImpl implements IGenTableService * 查询据库列表 * * @param tableNames 表名称组 +<<<<<<< HEAD * @param dbName * @return 数据库表集合 */ @@ -104,6 +168,14 @@ public class GenTableServiceImpl implements IGenTableService public List selectDbTableListByNames(String[] tableNames, String dbName) { return genTableMapper.selectDbTableListByNames(tableNames,dbName); +======= + * + * @return 数据库表集合 + */ + @Override + public List selectDbTableListByNames (String[] tableNames) { + return genTableMapper.selectDbTableListByNames(tableNames); +>>>>>>> 813460c (1..) } /** @@ -112,8 +184,12 @@ public class GenTableServiceImpl implements IGenTableService * @return 表信息集合 */ @Override +<<<<<<< HEAD public List selectGenTableAll() { +======= + public List selectGenTableAll () { +>>>>>>> 813460c (1..) return genTableMapper.selectGenTableAll(); } @@ -121,10 +197,15 @@ public class GenTableServiceImpl implements IGenTableService * 修改业务 * * @param genTable 业务信息 +<<<<<<< HEAD +======= + * +>>>>>>> 813460c (1..) * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) +<<<<<<< HEAD public void updateGenTable(GenTable genTable) { String options = JSON.toJSONString(genTable.getParams()); @@ -134,6 +215,14 @@ public class GenTableServiceImpl implements IGenTableService { for (GenTableColumn cenTableColumn : genTable.getColumns()) { +======= + public void updateGenTable (GenTable genTable) { + String options = JSON.toJSONString(genTable.getParams()); + genTable.setOptions(options); + int row = genTableMapper.updateGenTable(genTable); + if (row > 0) { + for (GenTableColumn cenTableColumn : genTable.getColumns()) { +>>>>>>> 813460c (1..) genTableColumnMapper.updateGenTableColumn(cenTableColumn); } } @@ -143,12 +232,20 @@ public class GenTableServiceImpl implements IGenTableService * 删除业务对象 * * @param tableIds 需要删除的数据ID +<<<<<<< HEAD +======= + * +>>>>>>> 813460c (1..) * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) +<<<<<<< HEAD public void deleteGenTableByIds(Long[] tableIds) { +======= + public void deleteGenTableByIds (Long[] tableIds) { +>>>>>>> 813460c (1..) genTableMapper.deleteGenTableByIds(tableIds); genTableColumnMapper.deleteGenTableColumnByIds(tableIds); } @@ -160,6 +257,7 @@ public class GenTableServiceImpl implements IGenTableService */ @Override @Transactional(rollbackFor = Exception.class) +<<<<<<< HEAD public void importGenTable(List tableList) { String operName = SecurityUtils.getUsername(); @@ -177,14 +275,31 @@ public class GenTableServiceImpl implements IGenTableService List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName, dbName); for (GenTableColumn column : genTableColumns) { +======= + public void importGenTable (List tableList) { + String operName = SecurityUtils.getUsername(); + try { + for (GenTable table : tableList) { + String tableName = table.getTableName(); + GenUtils.initTable(table, operName); + int row = genTableMapper.insertGenTable(table); + if (row > 0) { + // 保存列信息 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + for (GenTableColumn column : genTableColumns) { +>>>>>>> 813460c (1..) GenUtils.initColumnField(column, table); genTableColumnMapper.insertGenTableColumn(column); } } } +<<<<<<< HEAD } catch (Exception e) { +======= + } catch (Exception e) { +>>>>>>> 813460c (1..) throw new ServiceException("导入失败:" + e.getMessage()); } } @@ -193,11 +308,19 @@ public class GenTableServiceImpl implements IGenTableService * 预览代码 * * @param tableId 表编号 +<<<<<<< HEAD * @return 预览数据列表 */ @Override public Map previewCode(Long tableId) { +======= + * + * @return 预览数据列表 + */ + @Override + public Map previewCode (Long tableId) { +>>>>>>> 813460c (1..) Map dataMap = new LinkedHashMap<>(); // 查询表信息 GenTable table = genTableMapper.selectGenTableById(tableId); @@ -211,8 +334,12 @@ public class GenTableServiceImpl implements IGenTableService // 获取模板列表 List templates = VelocityUtils.getTemplateList(table.getTplCategory()); +<<<<<<< HEAD for (String template : templates) { +======= + for (String template : templates) { +>>>>>>> 813460c (1..) // 渲染模板 StringWriter sw = new StringWriter(); Template tpl = Velocity.getTemplate(template, Constants.UTF8); @@ -226,11 +353,19 @@ public class GenTableServiceImpl implements IGenTableService * 生成代码(下载方式) * * @param tableName 表名称 +<<<<<<< HEAD * @return 数据 */ @Override public byte[] downloadCode(String tableName) { +======= + * + * @return 数据 + */ + @Override + public byte[] downloadCode (String tableName) { +>>>>>>> 813460c (1..) ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(outputStream); generatorCode(tableName, zip); @@ -244,8 +379,12 @@ public class GenTableServiceImpl implements IGenTableService * @param tableName 表名称 */ @Override +<<<<<<< HEAD public void generatorCode(String tableName) { +======= + public void generatorCode (String tableName) { +>>>>>>> 813460c (1..) // 查询表信息 GenTable table = genTableMapper.selectGenTableByName(tableName); // 设置主子表信息 @@ -259,14 +398,20 @@ public class GenTableServiceImpl implements IGenTableService // 获取模板列表 List templates = VelocityUtils.getTemplateList(table.getTplCategory()); +<<<<<<< HEAD for (String template : templates) { if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) { +======= + for (String template : templates) { + if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) { +>>>>>>> 813460c (1..) // 渲染模板 StringWriter sw = new StringWriter(); Template tpl = Velocity.getTemplate(template, Constants.UTF8); tpl.merge(context, sw); +<<<<<<< HEAD try { String path = getGenPath(table, template); @@ -274,6 +419,12 @@ public class GenTableServiceImpl implements IGenTableService } catch (IOException e) { +======= + try { + String path = getGenPath(table, template); + FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8); + } catch (IOException e) { +>>>>>>> 813460c (1..) throw new ServiceException("渲染模板失败,表名:" + table.getTableName()); } } @@ -284,54 +435,85 @@ public class GenTableServiceImpl implements IGenTableService * 同步数据库 * * @param tableName 表名称 +<<<<<<< HEAD * @param dbName */ @Override @Transactional(rollbackFor = Exception.class) public void synchDb(String tableName, String dbName) { +======= + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void synchDb (String tableName) { +>>>>>>> 813460c (1..) GenTable table = genTableMapper.selectGenTableByName(tableName); List tableColumns = table.getColumns(); Map tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity())); +<<<<<<< HEAD List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName, dbName); if (StringUtils.isEmpty(dbTableColumns)) { +======= + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + if (StringUtils.isEmpty(dbTableColumns)) { +>>>>>>> 813460c (1..) throw new ServiceException("同步数据失败,原表结构不存在"); } List dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); dbTableColumns.forEach(column -> { GenUtils.initColumnField(column, table); +<<<<<<< HEAD if (tableColumnMap.containsKey(column.getColumnName())) { GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName()); column.setColumnId(prevColumn.getColumnId()); if (column.isList()) { +======= + if (tableColumnMap.containsKey(column.getColumnName())) { + GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName()); + column.setColumnId(prevColumn.getColumnId()); + if (column.isList()) { +>>>>>>> 813460c (1..) // 如果是列表,继续保留查询方式/字典类型选项 column.setDictType(prevColumn.getDictType()); column.setQueryType(prevColumn.getQueryType()); } if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk() && (column.isInsert() || column.isEdit()) +<<<<<<< HEAD && ((column.isUsableColumn()) || (!column.isSuperColumn()))) { +======= + && ((column.isUsableColumn()) || (!column.isSuperColumn()))) { +>>>>>>> 813460c (1..) // 如果是(新增/修改&非主键/非忽略及父属性),继续保留必填/显示类型选项 column.setIsRequired(prevColumn.getIsRequired()); column.setHtmlType(prevColumn.getHtmlType()); } genTableColumnMapper.updateGenTableColumn(column); +<<<<<<< HEAD } else { +======= + } else { +>>>>>>> 813460c (1..) genTableColumnMapper.insertGenTableColumn(column); } }); List delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); +<<<<<<< HEAD if (StringUtils.isNotEmpty(delColumns)) { +======= + if (StringUtils.isNotEmpty(delColumns)) { +>>>>>>> 813460c (1..) genTableColumnMapper.deleteGenTableColumns(delColumns); } } @@ -340,6 +522,7 @@ public class GenTableServiceImpl implements IGenTableService * 批量生成代码(下载方式) * * @param tableNames 表数组 +<<<<<<< HEAD * @return 数据 */ @Override @@ -349,6 +532,16 @@ public class GenTableServiceImpl implements IGenTableService ZipOutputStream zip = new ZipOutputStream(outputStream); for (String tableName : tableNames) { +======= + * + * @return 数据 + */ + @Override + public byte[] downloadCode (String[] tableNames) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) { +>>>>>>> 813460c (1..) generatorCode(tableName, zip); } IOUtils.closeQuietly(zip); @@ -358,8 +551,12 @@ public class GenTableServiceImpl implements IGenTableService /** * 查询表信息并生成代码 */ +<<<<<<< HEAD private void generatorCode(String tableName, ZipOutputStream zip) { +======= + private void generatorCode (String tableName, ZipOutputStream zip) { +>>>>>>> 813460c (1..) // 查询表信息 GenTable table = genTableMapper.selectGenTableByName(tableName); // 设置主子表信息 @@ -373,23 +570,35 @@ public class GenTableServiceImpl implements IGenTableService // 获取模板列表 List templates = VelocityUtils.getTemplateList(table.getTplCategory()); +<<<<<<< HEAD for (String template : templates) { +======= + for (String template : templates) { +>>>>>>> 813460c (1..) // 渲染模板 StringWriter sw = new StringWriter(); Template tpl = Velocity.getTemplate(template, Constants.UTF8); tpl.merge(context, sw); +<<<<<<< HEAD try { +======= + try { +>>>>>>> 813460c (1..) // 添加到zip zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); IOUtils.write(sw.toString(), zip, Constants.UTF8); IOUtils.closeQuietly(sw); zip.flush(); zip.closeEntry(); +<<<<<<< HEAD } catch (IOException e) { +======= + } catch (IOException e) { +>>>>>>> 813460c (1..) log.error("渲染模板失败,表名:" + table.getTableName(), e); } } @@ -401,6 +610,7 @@ public class GenTableServiceImpl implements IGenTableService * @param genTable 业务信息 */ @Override +<<<<<<< HEAD public void validateEdit(GenTable genTable) { if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) @@ -427,12 +637,29 @@ public class GenTableServiceImpl implements IGenTableService } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) { +======= + public void validateEdit (GenTable genTable) { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { + String options = JSON.toJSONString(genTable.getParams()); + JSONObject paramsObj = JSON.parseObject(options); + if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) { + throw new ServiceException("树编码字段不能为空"); + } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) { + throw new ServiceException("树父编码字段不能为空"); + } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) { + throw new ServiceException("树名称字段不能为空"); + } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) { + if (StringUtils.isEmpty(genTable.getSubTableName())) { + throw new ServiceException("关联子表的表名不能为空"); + } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) { +>>>>>>> 813460c (1..) throw new ServiceException("子表关联的外键名不能为空"); } } } } +<<<<<<< HEAD @Override public List selDbNameAll() { return genTableMapper.selDbNameAll(); @@ -444,21 +671,30 @@ public class GenTableServiceImpl implements IGenTableService } +======= +>>>>>>> 813460c (1..) /** * 设置主键列信息 * * @param table 业务表信息 */ +<<<<<<< HEAD public void setPkColumn(GenTable table) { for (GenTableColumn column : table.getColumns()) { if (column.isPk()) { +======= + public void setPkColumn (GenTable table) { + for (GenTableColumn column : table.getColumns()) { + if (column.isPk()) { +>>>>>>> 813460c (1..) table.setPkColumn(column); break; } } +<<<<<<< HEAD if (StringUtils.isNull(table.getPkColumn())) { table.setPkColumn(table.getColumns().get(0)); @@ -469,12 +705,24 @@ public class GenTableServiceImpl implements IGenTableService { if (column.isPk()) { +======= + if (StringUtils.isNull(table.getPkColumn())) { + table.setPkColumn(table.getColumns().get(0)); + } + if (GenConstants.TPL_SUB.equals(table.getTplCategory())) { + for (GenTableColumn column : table.getSubTable().getColumns()) { + if (column.isPk()) { +>>>>>>> 813460c (1..) table.getSubTable().setPkColumn(column); break; } } +<<<<<<< HEAD if (StringUtils.isNull(table.getSubTable().getPkColumn())) { +======= + if (StringUtils.isNull(table.getSubTable().getPkColumn())) { +>>>>>>> 813460c (1..) table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); } } @@ -485,11 +733,17 @@ public class GenTableServiceImpl implements IGenTableService * * @param table 业务表信息 */ +<<<<<<< HEAD public void setSubTable(GenTable table) { String subTableName = table.getSubTableName(); if (StringUtils.isNotEmpty(subTableName)) { +======= + public void setSubTable (GenTable table) { + String subTableName = table.getSubTableName(); + if (StringUtils.isNotEmpty(subTableName)) { +>>>>>>> 813460c (1..) table.setSubTable(genTableMapper.selectGenTableByName(subTableName)); } } @@ -499,11 +753,17 @@ public class GenTableServiceImpl implements IGenTableService * * @param genTable 设置后的生成对象 */ +<<<<<<< HEAD public void setTableFromOptions(GenTable genTable) { JSONObject paramsObj = JSON.parseObject(genTable.getOptions()); if (StringUtils.isNotNull(paramsObj)) { +======= + public void setTableFromOptions (GenTable genTable) { + JSONObject paramsObj = JSON.parseObject(genTable.getOptions()); + if (StringUtils.isNotNull(paramsObj)) { +>>>>>>> 813460c (1..) String treeCode = paramsObj.getString(GenConstants.TREE_CODE); String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); String treeName = paramsObj.getString(GenConstants.TREE_NAME); @@ -517,6 +777,7 @@ public class GenTableServiceImpl implements IGenTableService genTable.setParentMenuName(parentMenuName); } } +<<<<<<< HEAD /** * 获取代码生成地址 @@ -534,4 +795,6 @@ public class GenTableServiceImpl implements IGenTableService } return genPath + File.separator + VelocityUtils.getFileName(template, table); } +======= +>>>>>>> 813460c (1..) } diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableColumnService.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableColumnService.java index e6d4d55..3b75a7e 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableColumnService.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableColumnService.java @@ -7,41 +7,75 @@ import java.util.List; /** * 业务字段 服务层 * +<<<<<<< HEAD * @author ruoyi */ public interface IGenTableColumnService { +======= + * @author muyu + */ +public interface IGenTableColumnService { +>>>>>>> 813460c (1..) /** * 查询业务字段列表 * * @param tableId 业务字段编号 +<<<<<<< HEAD * @return 业务字段集合 */ public List selectGenTableColumnListByTableId(Long tableId); +======= + * + * @return 业务字段集合 + */ + List selectGenTableColumnListByTableId (Long tableId); +>>>>>>> 813460c (1..) /** * 新增业务字段 * * @param genTableColumn 业务字段信息 +<<<<<<< HEAD * @return 结果 */ public int insertGenTableColumn(GenTableColumn genTableColumn); +======= + * + * @return 结果 + */ + int insertGenTableColumn (GenTableColumn genTableColumn); +>>>>>>> 813460c (1..) /** * 修改业务字段 * * @param genTableColumn 业务字段信息 +<<<<<<< HEAD * @return 结果 */ public int updateGenTableColumn(GenTableColumn genTableColumn); +======= + * + * @return 结果 + */ + int updateGenTableColumn (GenTableColumn genTableColumn); +>>>>>>> 813460c (1..) /** * 删除业务字段信息 * * @param ids 需要删除的数据ID +<<<<<<< HEAD * @return 结果 */ public int deleteGenTableColumnByIds(String ids); List selectDbTableColumnsByName(String table, String dbName); +======= + * + * @return 结果 + */ + int deleteGenTableColumnByIds (String ids); +>>>>>>> 813460c (1..) } diff --git a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableService.java b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableService.java index f79d5e8..d7cec23 100644 --- a/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableService.java +++ b/cloud-modules/cloud-modules-gen/src/main/java/com/muyu/gen/service/IGenTableService.java @@ -1,7 +1,10 @@ package com.muyu.gen.service; import com.muyu.gen.domain.GenTable; +<<<<<<< HEAD import com.muyu.gen.domain.GenTableResp; +======= +>>>>>>> 813460c (1..) import java.util.List; import java.util.Map; @@ -9,121 +12,214 @@ import java.util.Map; /** * 业务 服务层 * +<<<<<<< HEAD * @author ruoyi */ public interface IGenTableService { +======= + * @author muyu + */ +public interface IGenTableService { +>>>>>>> 813460c (1..) /** * 查询业务列表 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 业务集合 */ public List selectGenTableList(GenTable genTable); +======= + * + * @return 业务集合 + */ + List selectGenTableList (GenTable genTable); +>>>>>>> 813460c (1..) /** * 查询据库列表 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 数据库表集合 */ public List selectDbTableList(GenTable genTable); +======= + * + * @return 数据库表集合 + */ + List selectDbTableList (GenTable genTable); +>>>>>>> 813460c (1..) /** * 查询据库列表 * * @param tableNames 表名称组 +<<<<<<< HEAD * @param dbName * @return 数据库表集合 */ public List selectDbTableListByNames(String[] tableNames, String dbName); +======= + * + * @return 数据库表集合 + */ + List selectDbTableListByNames (String[] tableNames); +>>>>>>> 813460c (1..) /** * 查询所有表信息 * * @return 表信息集合 */ +<<<<<<< HEAD public List selectGenTableAll(); +======= + List selectGenTableAll (); +>>>>>>> 813460c (1..) /** * 查询业务信息 * * @param id 业务ID +<<<<<<< HEAD * @return 业务信息 */ public GenTable selectGenTableById(Long id); +======= + * + * @return 业务信息 + */ + GenTable selectGenTableById (Long id); +>>>>>>> 813460c (1..) /** * 修改业务 * * @param genTable 业务信息 +<<<<<<< HEAD * @return 结果 */ public void updateGenTable(GenTable genTable); +======= + * + * @return 结果 + */ + void updateGenTable (GenTable genTable); +>>>>>>> 813460c (1..) /** * 删除业务信息 * * @param tableIds 需要删除的表数据ID +<<<<<<< HEAD * @return 结果 */ public void deleteGenTableByIds(Long[] tableIds); +======= + * + * @return 结果 + */ + void deleteGenTableByIds (Long[] tableIds); +>>>>>>> 813460c (1..) /** * 导入表结构 * * @param tableList 导入表列表 */ +<<<<<<< HEAD public void importGenTable(List tableList); +======= + void importGenTable (List tableList); +>>>>>>> 813460c (1..) /** * 预览代码 * * @param tableId 表编号 +<<<<<<< HEAD * @return 预览数据列表 */ public Map previewCode(Long tableId); +======= + * + * @return 预览数据列表 + */ + Map previewCode (Long tableId); +>>>>>>> 813460c (1..) /** * 生成代码(下载方式) * * @param tableName 表名称 +<<<<<<< HEAD * @return 数据 */ public byte[] downloadCode(String tableName); +======= + * + * @return 数据 + */ + byte[] downloadCode (String tableName); +>>>>>>> 813460c (1..) /** * 生成代码(自定义路径) * * @param tableName 表名称 +<<<<<<< HEAD * @return 数据 */ public void generatorCode(String tableName); +======= + * + * @return 数据 + */ + void generatorCode (String tableName); +>>>>>>> 813460c (1..) /** * 同步数据库 * * @param tableName 表名称 +<<<<<<< HEAD * @param dbName */ public void synchDb(String tableName, String dbName); +======= + */ + void synchDb (String tableName); +>>>>>>> 813460c (1..) /** * 批量生成代码(下载方式) * * @param tableNames 表数组 +<<<<<<< HEAD * @return 数据 */ public byte[] downloadCode(String[] tableNames); +======= + * + * @return 数据 + */ + byte[] downloadCode (String[] tableNames); +>>>>>>> 813460c (1..) /** * 修改保存参数校验 * * @param genTable 业务信息 */ +<<<<<<< HEAD public void validateEdit(GenTable genTable); List selDbNameAll(); List selectDbTableListAll(); +======= + void validateEdit (GenTable genTable); +>>>>>>> 813460c (1..) } 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 47acae2..907283d 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml @@ -1,12 +1,17 @@ # Tomcat server: +<<<<<<< HEAD port: 9709 +======= + port: 9202 +>>>>>>> 813460c (1..) # nacos线上地址 nacos: addr: 47.116.173.119:8848 user-name: nacos password: nacos +<<<<<<< HEAD namespace: one-saas # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring @@ -15,6 +20,12 @@ spring: deserialization: trust: all: true +======= + namespace: one + +# Spring +spring: +>>>>>>> 813460c (1..) main: allow-bean-definition-overriding: true application: @@ -53,8 +64,11 @@ spring: - 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} +<<<<<<< HEAD # rabbit 配置文件 - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} logging: level: com.muyu.system.mapper: DEBUG +======= +>>>>>>> 813460c (1..) diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml index ea0616b..d70e934 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml +++ b/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -1,5 +1,6 @@ @@ -31,6 +32,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column +======= + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time, + update_by, + update_time + from gen_table_column +>>>>>>> 813460c (1..) + + + insert into gen_table_column ( + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate() + ) +>>>>>>> 813460c (1..) @@ -113,6 +227,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +<<<<<<< HEAD delete from gen_table_column where table_id in ( #{tableId} @@ -127,6 +242,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{item.columnId} ) +======= + delete from gen_table_column where table_id in + + #{tableId} + + + + + delete from gen_table_column where column_id in + + #{item.columnId} + +>>>>>>> 813460c (1..) diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableMapper.xml b/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableMapper.xml index ba9b0cf..561ab48 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/cloud-modules/cloud-modules-gen/src/main/resources/mapper/generator/GenTableMapper.xml @@ -1,5 +1,6 @@ @@ -197,12 +198,298 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{createBy}, sysdate() ) +======= + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, + table_name, + table_comment, + sub_table_name, + sub_table_fk_name, + class_name, + tpl_category, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + options, + create_by, + create_time, + update_by, + update_time, + remark + from gen_table + + + + + + + + + + + + + + + + + + insert into gen_table ( + table_name, + table_comment, + class_name, + tpl_category, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate() + ) +>>>>>>> 813460c (1..) update gen_table +<<<<<<< HEAD db_name = #{dbName}, +======= +>>>>>>> 813460c (1..) table_name = #{tableName}, table_comment = #{tableComment}, sub_table_name = #{subTableName}, @@ -211,7 +498,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" function_author = #{functionAuthor}, gen_type = #{genType}, gen_path = #{genPath}, +<<<<<<< HEAD tpl_category = #{tplCategory}, package_name = #{packageName}, +======= + tpl_category = #{tplCategory}, + package_name = #{packageName}, +>>>>>>> 813460c (1..) module_name = #{moduleName}, business_name = #{businessName}, function_name = #{functionName}, @@ -224,11 +516,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +<<<<<<< HEAD delete from gen_table where table_id in ( #{tableId} ) +======= + delete from gen_table where table_id in + + #{tableId} + +>>>>>>> 813460c (1..) diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/controller.java.vm b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/controller.java.vm index c62cc8b..4413508 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/controller.java.vm +++ b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/controller.java.vm @@ -1,9 +1,16 @@ package ${packageName}.controller; +<<<<<<< HEAD import java.util.Arrays; import java.util.List; import jakarta.servlet.http.HttpServletResponse; import javax.annotation.Resource; +======= +import java.util.List; +import java.io.IOException; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -12,14 +19,22 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +<<<<<<< HEAD +======= +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +>>>>>>> 813460c (1..) import com.muyu.common.security.annotation.RequiresPermissions; import ${packageName}.domain.${ClassName}; import ${packageName}.service.I${ClassName}Service; import com.muyu.common.core.web.controller.BaseController; import com.muyu.common.core.domain.Result; import com.muyu.common.core.utils.poi.ExcelUtil; +<<<<<<< HEAD import com.muyu.common.security.utils.SecurityUtils; import org.springframework.validation.annotation.Validated; +======= +>>>>>>> 813460c (1..) #if($table.crud || $table.sub) import com.muyu.common.core.web.page.TableDataInfo; #elseif($table.tree) @@ -35,7 +50,11 @@ import com.muyu.common.core.web.page.TableDataInfo; @RequestMapping("/${businessName}") public class ${ClassName}Controller extends BaseController { +<<<<<<< HEAD @Resource +======= + @Autowired +>>>>>>> 813460c (1..) private I${ClassName}Service ${className}Service; /** @@ -44,14 +63,22 @@ public class ${ClassName}Controller extends BaseController @RequiresPermissions("${permissionPrefix}:list") @GetMapping("/list") #if($table.crud || $table.sub) +<<<<<<< HEAD public Result> list(${ClassName} ${className}) +======= + public Result list(${ClassName} ${className}) +>>>>>>> 813460c (1..) { startPage(); List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); return getDataTable(list); } #elseif($table.tree) +<<<<<<< HEAD public Result<${ClassName}> list(${ClassName} ${className}) +======= + public Result list(${ClassName} ${className}) +>>>>>>> 813460c (1..) { List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); return success(list); @@ -62,6 +89,10 @@ public class ${ClassName}Controller extends BaseController * 导出${functionName}列表 */ @RequiresPermissions("${permissionPrefix}:export") +<<<<<<< HEAD +======= + @Log(title = "${functionName}", businessType = BusinessType.EXPORT) +>>>>>>> 813460c (1..) @PostMapping("/export") public void export(HttpServletResponse response, ${ClassName} ${className}) { @@ -75,7 +106,11 @@ public class ${ClassName}Controller extends BaseController */ @RequiresPermissions("${permissionPrefix}:query") @GetMapping(value = "/{${pkColumn.javaField}}") +<<<<<<< HEAD public Result> getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) +======= + public Result getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) +>>>>>>> 813460c (1..) { return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); } @@ -84,6 +119,7 @@ public class ${ClassName}Controller extends BaseController * 新增${functionName} */ @RequiresPermissions("${permissionPrefix}:add") +<<<<<<< HEAD @PostMapping public Result add( @Validated @RequestBody ${ClassName} ${className}) @@ -93,12 +129,20 @@ public class ${ClassName}Controller extends BaseController } ${className}.setCreateBy(SecurityUtils.getUsername()); return toAjax(${className}Service.save(${className})); +======= + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping + public Result add(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.insert${ClassName}(${className})); +>>>>>>> 813460c (1..) } /** * 修改${functionName} */ @RequiresPermissions("${permissionPrefix}:edit") +<<<<<<< HEAD @PutMapping public Result edit( @Validated @RequestBody ${ClassName} ${className}) @@ -108,16 +152,31 @@ public class ${ClassName}Controller extends BaseController } ${className}.setUpdateBy(SecurityUtils.getUsername()); return toAjax(${className}Service.updateById(${className})); +======= + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.update${ClassName}(${className})); +>>>>>>> 813460c (1..) } /** * 删除${functionName} */ @RequiresPermissions("${permissionPrefix}:remove") +<<<<<<< HEAD @DeleteMapping("/{${pkColumn.javaField}s}") public Result remove(@PathVariable("${pkColumn.javaField}s") ${pkColumn.javaType}[] ${pkColumn.javaField}s) { ${className}Service.removeBatchByIds(Arrays.asList(${pkColumn.javaField}s)); return success(); +======= + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @DeleteMapping("/{${pkColumn.javaField}s}") + public Result remove(@PathVariable("${pkColumn.javaField}s") ${pkColumn.javaType}[] ${pkColumn.javaField}s) + { + return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); +>>>>>>> 813460c (1..) } } diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/domain.java.vm b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/domain.java.vm index 4c89918..d57515d 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/domain.java.vm +++ b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/domain.java.vm @@ -9,6 +9,7 @@ import com.muyu.common.core.web.domain.BaseEntity; #elseif($table.tree) import com.muyu.common.core.web.domain.TreeEntity; #end +<<<<<<< HEAD import lombok.*; import lombok.experimental.SuperBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -16,6 +17,8 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; +======= +>>>>>>> 813460c (1..) /** * ${functionName}对象 ${tableName} @@ -23,12 +26,16 @@ import com.baomidou.mybatisplus.annotation.IdType; * @author ${author} * @date ${datetime} */ +<<<<<<< HEAD +======= +>>>>>>> 813460c (1..) #if($table.crud || $table.sub) #set($Entity="BaseEntity") #elseif($table.tree) #set($Entity="TreeEntity") #end +<<<<<<< HEAD @Data @Setter @Getter @@ -37,6 +44,10 @@ import com.baomidou.mybatisplus.annotation.IdType; @AllArgsConstructor @TableName("${tableName}") public class ${ClassName} extends ${Entity}{ +======= +public class ${ClassName} extends ${Entity} +{ +>>>>>>> 813460c (1..) private static final long serialVersionUID = 1L; #foreach ($column in $columns) @@ -58,19 +69,46 @@ public class ${ClassName} extends ${Entity}{ @Excel(name = "${comment}") #end #end +<<<<<<< HEAD #if($column.javaField == $pkColumn.javaField) @TableId( type = IdType.AUTO) #end +======= +>>>>>>> 813460c (1..) private $column.javaType $column.javaField; #end #end +<<<<<<< HEAD +======= +>>>>>>> 813460c (1..) #if($table.sub) /** $table.subTable.functionName信息 */ private List<${subClassName}> ${subclassName}List; #end +<<<<<<< HEAD +======= +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end +>>>>>>> 813460c (1..) #if($table.sub) public List<${subClassName}> get${subClassName}List() diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/mapper.java.vm b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/mapper.java.vm index e6f420b..03401fb 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/mapper.java.vm +++ b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/mapper.java.vm @@ -5,6 +5,7 @@ import ${packageName}.domain.${ClassName}; #if($table.sub) import ${packageName}.domain.${subClassName}; #end +<<<<<<< HEAD import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @@ -17,4 +18,89 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ${ClassName}Mapper extends BaseMapper<${ClassName}>{ +======= + +/** + * ${functionName}Mapper接口 + * + * @author ${author} + * @date ${datetime} + */ +public interface ${ClassName}Mapper +{ + /** + * 查询${functionName} + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName}集合 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 删除${functionName} + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 批量删除${functionName} + * + * @param ${pkColumn.javaField}s 需要删除的数据主键集合 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); +#if($table.sub) + + /** + * 批量删除${subTable.functionName} + * + * @param ${pkColumn.javaField}s 需要删除的数据主键集合 + * @return 结果 + */ + public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 批量新增${subTable.functionName} + * + * @param ${subclassName}List ${subTable.functionName}列表 + * @return 结果 + */ + public int batch${subClassName}(List<${subClassName}> ${subclassName}List); + + + /** + * 通过${functionName}主键删除${subTable.functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}ID + * @return 结果 + */ + public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField}); +#end +>>>>>>> 813460c (1..) } diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/service.java.vm b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/service.java.vm index 1a01fae..9369c73 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/service.java.vm +++ b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/service.java.vm @@ -2,6 +2,7 @@ package ${packageName}.service; import java.util.List; import ${packageName}.domain.${ClassName}; +<<<<<<< HEAD import com.baomidou.mybatisplus.extension.service.IService; /** @@ -14,6 +15,20 @@ public interface I${ClassName}Service extends IService<${ClassName}> { /** * 精确查询${functionName} * +======= + +/** + * ${functionName}Service接口 + * + * @author ${author} + * @date ${datetime} + */ +public interface I${ClassName}Service +{ + /** + * 查询${functionName} + * +>>>>>>> 813460c (1..) * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} */ @@ -21,17 +36,54 @@ public interface I${ClassName}Service extends IService<${ClassName}> { /** * 查询${functionName}列表 +<<<<<<< HEAD * +======= + * +>>>>>>> 813460c (1..) * @param ${className} ${functionName} * @return ${functionName}集合 */ public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); /** +<<<<<<< HEAD * 判断 ${functionName} id是否唯一 * @param ${className} ${functionName} * @return 结果 */ Boolean checkIdUnique(${ClassName} ${className}); +======= + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 批量删除${functionName} + * + * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 删除${functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return 结果 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); +>>>>>>> 813460c (1..) } diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/serviceImpl.java.vm b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/serviceImpl.java.vm index 38f1eca..477e814 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/serviceImpl.java.vm +++ b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/serviceImpl.java.vm @@ -7,6 +7,10 @@ import com.muyu.common.core.utils.DateUtils; #break #end #end +<<<<<<< HEAD +======= +import org.springframework.beans.factory.annotation.Autowired; +>>>>>>> 813460c (1..) import org.springframework.stereotype.Service; #if($table.sub) import java.util.ArrayList; @@ -17,10 +21,13 @@ import ${packageName}.domain.${subClassName}; import ${packageName}.mapper.${ClassName}Mapper; import ${packageName}.domain.${ClassName}; import ${packageName}.service.I${ClassName}Service; +<<<<<<< HEAD import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.muyu.common.core.utils.StringUtils; import org.springframework.util.Assert; +======= +>>>>>>> 813460c (1..) /** * ${functionName}Service业务层处理 @@ -29,12 +36,22 @@ import org.springframework.util.Assert; * @date ${datetime} */ @Service +<<<<<<< HEAD public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service { /** * 精确查询${functionName} +======= +public class ${ClassName}ServiceImpl implements I${ClassName}Service +{ + @Autowired + private ${ClassName}Mapper ${className}Mapper; + + /** + * 查询${functionName} +>>>>>>> 813460c (1..) * * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} @@ -42,6 +59,7 @@ public class ${ClassName}ServiceImpl @Override public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { +<<<<<<< HEAD LambdaQueryWrapper<${ClassName}> queryWrapper = new LambdaQueryWrapper<>(); Assert.notNull(${pkColumn.javaField}, "${pkColumn.javaField}不可为空"); queryWrapper.eq(${ClassName}::get${pkColumn.capJavaField}, ${pkColumn.javaField}); @@ -49,6 +67,11 @@ public class ${ClassName}ServiceImpl } +======= + return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } + +>>>>>>> 813460c (1..) /** * 查询${functionName}列表 * @@ -58,6 +81,7 @@ public class ${ClassName}ServiceImpl @Override public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) { +<<<<<<< HEAD LambdaQueryWrapper<${ClassName}> queryWrapper = new LambdaQueryWrapper<>(); #foreach($column in $columns) #set($queryType=$column.queryType) @@ -112,4 +136,120 @@ public class ${ClassName}ServiceImpl return this.count(queryWrapper) > 0; } +======= + return ${className}Mapper.select${ClassName}List(${className}); + } + + /** + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int insert${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + int rows = ${className}Mapper.insert${ClassName}(${className}); + insert${subClassName}(${className}); + return rows; +#else + return ${className}Mapper.insert${ClassName}(${className}); +#end + } + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int update${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'updateTime') + ${className}.setUpdateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); + insert${subClassName}(${className}); +#end + return ${className}Mapper.update${ClassName}(${className}); + } + + /** + * 批量删除${functionName} + * + * @param ${pkColumn.javaField}s 需要删除的${functionName}主键 + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s); + } + + /** + * 删除${functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } +#if($table.sub) + + /** + * 新增${subTable.functionName}信息 + * + * @param ${className} ${functionName}对象 + */ + public void insert${subClassName}(${ClassName} ${className}) + { + List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); + ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); + if (StringUtils.isNotNull(${subclassName}List)) + { + List<${subClassName}> list = new ArrayList<${subClassName}>(); + for (${subClassName} ${subclassName} : ${subclassName}List) + { + ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); + list.add(${subclassName}); + } + if (list.size() > 0) + { + ${className}Mapper.batch${subClassName}(list); + } + } + } +#end +>>>>>>> 813460c (1..) } diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/sub-domain.java.vm b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/sub-domain.java.vm index 61c6273..4dd894e 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/sub-domain.java.vm +++ b/cloud-modules/cloud-modules-gen/src/main/resources/vm/java/sub-domain.java.vm @@ -17,7 +17,12 @@ import com.muyu.common.core.web.domain.BaseEntity; @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) +<<<<<<< HEAD public class ${subClassName} extends BaseEntity { +======= +public class ${subClassName} extends BaseEntity +{ +>>>>>>> 813460c (1..) private static final long serialVersionUID = 1L; #foreach ($column in $subTable.columns) diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/vm/vue/index.vue.vm b/cloud-modules/cloud-modules-gen/src/main/resources/vm/vue/index.vue.vm index cf9b3b0..de4c302 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/vm/vue/index.vue.vm +++ b/cloud-modules/cloud-modules-gen/src/main/resources/vm/vue/index.vue.vm @@ -170,7 +170,11 @@ +<<<<<<< HEAD +======= + +>>>>>>> 813460c (1..)