From d4526931e96ce1aca4a98e2cfff417e9ce0745f7 Mon Sep 17 00:00:00 2001 From: zhaoyz Date: Thu, 22 Feb 2024 18:13:08 +0800 Subject: [PATCH] =?UTF-8?q?mongodb=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E5=92=8C=E8=BF=9E=E6=8E=A5=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rax/daemon/quartz/util/TaskInvokUtil.java | 1 - .../src/main/resources/static/html/app.js | 7 +- vital-signs/pom.xml | 9 +++ .../rax/vital/datasource/MongoDBSource.java | 66 +++++++++++++++++++ .../controller/MedicineController.java | 24 +++++-- .../com/rax/vital/timer/VitalSignTimer.java | 59 +++++++++++++++++ 6 files changed, 157 insertions(+), 9 deletions(-) create mode 100644 vital-signs/src/main/java/com/rax/vital/datasource/MongoDBSource.java create mode 100644 vital-signs/src/main/java/com/rax/vital/timer/VitalSignTimer.java diff --git a/quartz/src/main/java/com/rax/daemon/quartz/util/TaskInvokUtil.java b/quartz/src/main/java/com/rax/daemon/quartz/util/TaskInvokUtil.java index c9c625e..cd4e757 100644 --- a/quartz/src/main/java/com/rax/daemon/quartz/util/TaskInvokUtil.java +++ b/quartz/src/main/java/com/rax/daemon/quartz/util/TaskInvokUtil.java @@ -37,7 +37,6 @@ import java.util.Date; /** * 定时任务反射工具类 * - * @author 郑健楠 */ @Slf4j @Component diff --git a/upms/upms-biz/src/main/resources/static/html/app.js b/upms/upms-biz/src/main/resources/static/html/app.js index 4ce845f..4324c5d 100644 --- a/upms/upms-biz/src/main/resources/static/html/app.js +++ b/upms/upms-biz/src/main/resources/static/html/app.js @@ -47,6 +47,7 @@ function connect() { } function disconnect() { + sendNameToServer('stop'); stompClient.deactivate(); // testClient.deactivate(); setConnected(false); @@ -54,9 +55,13 @@ function disconnect() { } function sendName() { + sendNameToServer(); +} + +function sendNameToServer(status) { stompClient.publish({ destination: "/front/doctorMedicine", - body: $("#name").val() + body: status ? status : $("#name").val() }); /*testClient.publish({ destination: "/app/test-hello", diff --git a/vital-signs/pom.xml b/vital-signs/pom.xml index 02ec988..1104875 100644 --- a/vital-signs/pom.xml +++ b/vital-signs/pom.xml @@ -30,6 +30,11 @@ com.rax common-security + + + com.rax + quartz + com.rax @@ -40,6 +45,10 @@ org.springframework.boot spring-boot-starter-websocket + + org.springframework.boot + spring-boot-starter-data-mongodb + \ No newline at end of file diff --git a/vital-signs/src/main/java/com/rax/vital/datasource/MongoDBSource.java b/vital-signs/src/main/java/com/rax/vital/datasource/MongoDBSource.java new file mode 100644 index 0000000..3c808c8 --- /dev/null +++ b/vital-signs/src/main/java/com/rax/vital/datasource/MongoDBSource.java @@ -0,0 +1,66 @@ +package com.rax.vital.datasource; + +import com.mongodb.ConnectionString; +import com.mongodb.MongoClientSettings; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import org.springframework.data.mongodb.SpringDataMongoDB; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public class MongoDBSource { + private String host; + private String password; + private String username; + private static final String authenticationDatabase = "admin"; + private String database; + private MongoClient mongoClient; + + private static final Map datasourceList = new HashMap(300); + + public MongoDBSource(String host, String password, String username, String database) { + String url = datasourceList.get(database); + if (StringUtils.hasText(url)) { + + } else { + this.host = host; + this.password = password; + this.username = username; + this.database = database; + } + } + + public MongoTemplate open() { + MongoClientSettings.Builder mongoBuilder = MongoClientSettings.builder(); + // mongodb://账户:密码@ip:端口/数据库名?authSource=admin + String connectionUrl = "mongodb://" + this.username + ":" + this.password + "@" + this.host + "/" + this.database + "?authSource=admin"; + mongoBuilder.applyConnectionString(new ConnectionString(connectionUrl)); + mongoBuilder.applyToConnectionPoolSettings(builder -> { + // 允许的最大连接数。 + builder.maxSize(120); + // 最小连接数。 + builder.minSize(10); + // 池连接可以存活的最长时间。零值表示寿命没有限制。超过其生命周期的池连接将被关闭并在必要时由新连接替换 + builder.maxConnectionLifeTime(0, TimeUnit.SECONDS); + // 池连接的最大空闲时间。零值表示对空闲时间没有限制。超过其空闲时间的池连接将被关闭并在必要时由新连接替换 + builder.maxConnectionIdleTime(6, TimeUnit.MINUTES); + // 默认最大连接时间120s; + builder.maxWaitTime(60000, TimeUnit.MILLISECONDS); + }); + mongoClient = MongoClients.create(mongoBuilder.build(), SpringDataMongoDB.driverInformation()); + SimpleMongoClientDatabaseFactory simpleMongoClientDatabaseFactory = new SimpleMongoClientDatabaseFactory(mongoClient, database); + MongoTemplate mongoTemplate = new MongoTemplate(simpleMongoClientDatabaseFactory); + return mongoTemplate; + } + + public void close() { + mongoClient.close(); + } +} diff --git a/vital-signs/src/main/java/com/rax/vital/medicine/controller/MedicineController.java b/vital-signs/src/main/java/com/rax/vital/medicine/controller/MedicineController.java index c8caeb5..75cbeab 100644 --- a/vital-signs/src/main/java/com/rax/vital/medicine/controller/MedicineController.java +++ b/vital-signs/src/main/java/com/rax/vital/medicine/controller/MedicineController.java @@ -3,13 +3,15 @@ package com.rax.vital.medicine.controller; import com.rax.common.core.util.R; import com.rax.vital.medicine.service.AIMedicineService; import com.rax.vital.medicine.service.DoctorMedicineService; -import com.rax.vital.medicine.vo.MedicineVO; +import com.rax.vital.timer.VitalSignTimer; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.quartz.Scheduler; import org.springframework.http.HttpHeaders; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.handler.annotation.SendTo; +import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -28,15 +30,23 @@ public class MedicineController { private final DoctorMedicineService doctorMedicineService; + private final Scheduler scheduler; + + private final VitalSignTimer vitalSignTimer; + @MessageMapping("/doctorMedicine") - @SendTo("/topic/doctorMedicine") - public String doctorMedicine(String msg) { - return msg; + public void doctorMedicine(String msg) { + if ("stop".equals(msg)) { + vitalSignTimer.stopTimerTask("test"); + } else { + vitalSignTimer.createAndSendMessage("test"); + } + } -/* @MessageMapping("/getMedicineFlag") + @MessageMapping("/getMedicineFlag") @SendTo("/topic/medicineFlag") public R getMedicineFlag(String id, String name) { - - }*/ + return R.ok(); + } } diff --git a/vital-signs/src/main/java/com/rax/vital/timer/VitalSignTimer.java b/vital-signs/src/main/java/com/rax/vital/timer/VitalSignTimer.java new file mode 100644 index 0000000..86aa41a --- /dev/null +++ b/vital-signs/src/main/java/com/rax/vital/timer/VitalSignTimer.java @@ -0,0 +1,59 @@ +package com.rax.vital.timer; + +import lombok.RequiredArgsConstructor; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; + +@Component +@RequiredArgsConstructor +public class VitalSignTimer { + + private final SimpMessagingTemplate simpMessagingTemplate; + private TimerTask timerTask = null; + private static final Map timerTaskMap = new HashMap(300); + + public void createAndSendMessage(String database) { + TimerTask task = timerTaskMap.get(database); + + if (task != null) { + return; + } + + Timer timer = new Timer(); + TimerTask timerTask = new TimerTask() { + @Override + public void run() { +// MongoDBSource mongoDBSource = new MongoDBSource("localhost:27017", "root", "root", "ceshi"); +// MongoTemplate template = mongoDBSource.open(); +// Query query = new Query(); +// Criteria criteria = new Criteria(); +// criteria.where(""); +// query.addCriteria(criteria); +// query.limit(1); +// List cs = template.find(query, Map.class, "cs"); + try { + simpMessagingTemplate.convertAndSend("/topic/doctorMedicine", "111111111"); + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + timer.schedule(timerTask, 0, 1000); + timerTaskMap.put(database, timerTask); + } + + public void stopTimerTask(String database) { + TimerTask timerTask = timerTaskMap.get(database); + if (timerTask != null) { + timerTask.cancel(); + timerTaskMap.remove(database); + } + } + + +}