diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index bf82ff0..0000000
Binary files a/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
deleted file mode 100644
index ca5ab4b..0000000
--- a/.mvn/wrapper/maven-wrapper.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
diff --git a/pom.xml b/pom.xml
index 1717a40..1a89111 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,6 +66,11 @@
org.projectlombok
lombok
+
+ com.google.guava
+ guava
+ 29.0-jre
+
diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/CurlUtil.java b/src/main/java/cn/org/bjca/trust/java/imserver/CurlUtil.java
new file mode 100644
index 0000000..3fa9e24
--- /dev/null
+++ b/src/main/java/cn/org/bjca/trust/java/imserver/CurlUtil.java
@@ -0,0 +1,280 @@
+package cn.org.bjca.trust.java.imserver;
+
+import cn.org.bjca.trust.java.imserver.common.json.GsonImplHelp;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.*;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.ResponseErrorHandler;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.zip.GZIPInputStream;
+
+import static org.springframework.http.HttpMethod.GET;
+import static org.springframework.http.HttpMethod.POST;
+
+@Slf4j
+public class CurlUtil {
+ // 请求结果
+ private String result = "";
+
+ /*** RestTemplate 请求构造内部类*/
+ public static class Builder {
+ // 请求URL
+ private String url;
+ // basic auth用户名
+ private String userName;
+ // basic auth密码
+ private String passWord;
+ // 请求方式 默认为GET
+ private HttpMethod methodType = GET;
+ // 请求参数
+ private HashMap paramMap;
+ // 请求header头
+ private HashMap headerMap;
+ // RestTemplate 实例
+ private RestTemplate client;
+ // header头实例
+ private HttpHeaders headers;
+ // 请求结果
+ private String result;
+
+ /*** 基础请求* @param url*/
+ public Builder(String url) {
+ this.url = url;
+ }
+
+
+ /*** basic auth 认证类型请求* @param url* @param userName* @param passWord*/
+ public Builder(String url, String userName, String passWord) {
+ this.url = url;
+ this.userName = userName;
+ this.passWord = passWord;
+ }
+
+ /*** 添加参数* @param key 参数key* @param value 参数内容* @return Builder*/
+ public Builder addParam(String key, String value) {
+ if (paramMap == null) {
+ paramMap = new LinkedHashMap<>(16);
+ }
+ paramMap.put(key, value);
+ return this;
+ }
+
+ /*** 添加header参数* @param key 参数key* @param value 参数内容* @return Builder*/
+ public Builder addHeader(String key, String value) {
+ if (headerMap == null) {
+ headerMap = new LinkedHashMap<>(16);
+ }
+ headerMap.put(key, value);
+ return this;
+ }
+
+ /*** GET 请求* @return Curl*/
+ public CurlUtil get() {
+ this.methodType = GET;
+ this.getResponse(MediaType.APPLICATION_FORM_URLENCODED);
+ return new CurlUtil(this);
+ }
+
+ /*** post 请求* @return Curl*/
+ public CurlUtil post() {
+ this.methodType = POST;
+ this.getResponse(MediaType.APPLICATION_FORM_URLENCODED);
+ return new CurlUtil(this);
+ }
+
+ /*** raw 方式提交json 请求* @return Curl*/
+ public CurlUtil postRaw() {
+ HashMap paramRawMap = new HashMap<>();
+ return this.raw(paramRawMap);
+ }
+
+ /*** raw 方式提交json 请求* @param paramRawMap Map数据* @return Curl*/
+ public CurlUtil postRaw(HashMap paramRawMap) {
+ return this.raw(paramRawMap);
+ }
+
+ /*** RAW 请求* @param paramRawMap 参数* @return*/
+ private CurlUtil raw(HashMap paramRawMap) {
+ client = new RestTemplate();
+ client.setErrorHandler(new RestErrorHandler());
+ headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ this.setHeadersMapData();
+ this.responseRawExchange(GsonImplHelp.get().toJson(paramRawMap));
+ return new CurlUtil(this);
+ }
+
+ /*** 初始化请求体* @param type 请求类型*/
+ private void getResponse(MediaType type) {
+ client = new RestTemplate();
+ client.setErrorHandler(new RestErrorHandler());
+ headers = new HttpHeaders();
+ headers.setContentType(type);
+ this.setHeadersMapData();
+ MultiValueMap params = this.setHttpMethodParamsMap();
+ this.responseExchange(params);
+ }
+
+ /*** 设置header头数据*/
+ private void setHeadersMapData() {
+ if (headerMap != null) {
+ headerMap.forEach((k, v) -> {
+ this.headers.set(k, v);
+ });
+ }
+ // 设置basic auth请求方式认证信息
+ if (this.userName != null && this.passWord != null) {
+ String secretKey = this.userName + ":" + this.passWord;
+ String authValue = "Basic " + Base64.getEncoder().encodeToString(secretKey.getBytes());
+ this.headers.set("Authorization", authValue);
+ }
+ }
+
+ /*** 组装请求体参数* @return MultiValueMap*/
+ private MultiValueMap setHttpMethodParamsMap() {
+ MultiValueMap params = new LinkedMultiValueMap<>();
+ if (this.methodType.equals(GET)) {
+ if (this.paramMap != null) {
+ String _UrlParams = getUrlParamsByMap(this.paramMap);
+ this.url = this.url + "?" + _UrlParams;
+ }
+
+ if (this.paramMap != null) {
+ this.paramMap.forEach((k, v) -> {
+ params.put(k, Collections.singletonList(v));
+ });
+ }
+ } else if (this.methodType.equals(POST)) {
+ if (this.paramMap != null) {
+ this.paramMap.forEach((k, v) -> {
+ params.put(k, Collections.singletonList(v));
+ });
+ }
+ }
+ return params;
+ }
+
+ /*** 执行Curl请求操作* @param params 请求体参数*/
+ private void responseExchange(MultiValueMap params) {
+ HttpEntity> requestEntity = new HttpEntity<>(params, this.headers);
+ // 执行HTTP请求,将返回的结构使用spring ResponseEntity处理http响应
+ ResponseEntity responseEntity = this.client.exchange(this.url, this.methodType, requestEntity, byte[].class);
+ String contentEncoding = responseEntity.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING);
+ int httpCode = responseEntity.getStatusCodeValue();
+ String httpCodeValue = responseEntity.getStatusCode().toString();
+ log.info("状态码:{}", httpCodeValue);
+ try {
+ if ("gzip".equals(contentEncoding)) {
+ // gzip解压服务器的响应体
+ byte[] data = unGZip(new ByteArrayInputStream(responseEntity.getBody()));
+ // log.info(new String(data, StandardCharsets.UTF_8));
+ this.result = new String(data);
+ } else {
+ // 其他编码暂时不做处理(如果需要处理其他编码请自行扩展)
+ this.result = new String(responseEntity.getBody());
+ }
+ } catch (NullPointerException e) {
+ log.error("请求错误: {}", e.getMessage());
+ this.result = httpCodeValue;
+ }
+ }
+
+ /*** 执行Curl Raw JSON请求操作* @param params 请求体参数*/
+ private void responseRawExchange(String params) {
+ HttpEntity requestEntity = new HttpEntity<>(params, this.headers);
+ // 执行HTTP请求,将返回的结构使用spring ResponseEntity处理http响应
+ ResponseEntity responseEntity = this.client.postForEntity(this.url, requestEntity, byte[].class);
+ String contentEncoding = responseEntity.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING);
+ if ("gzip".equals(contentEncoding)) {
+ // gzip解压服务器的响应体
+ byte[] data = unGZip(new ByteArrayInputStream(responseEntity.getBody()));
+ this.result = new String(data);
+ } else {
+ // 其他编码暂时不做处理(如果需要处理其他编码请自行扩展)
+ this.result = new String(responseEntity.getBody());
+ }
+ }
+
+ /*** Gzip解压缩* @param inputStream 数据流* @return byte[]*/
+ private byte[] unGZip(InputStream inputStream) {
+ byte[] result = null;
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ try {
+ try (GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream)) {
+ byte[] buf = new byte[4096];
+ int len = -1;
+ while ((len = gzipInputStream.read(buf, 0, buf.length)) != -1) {
+ byteArrayOutputStream.write(buf, 0, len);
+ }
+ result = byteArrayOutputStream.toByteArray();
+ } finally {
+ byteArrayOutputStream.close();
+ }
+ } catch (IOException e) {
+ log.error("unGZip error :", e);
+ }
+ return result;
+ }
+
+ /*** 组装GET参数* @param params 参数* @return String*/
+ private String getUrlParamsByMap(Map params) {
+ List keys = new ArrayList(params.keySet());
+ Collections.sort(keys);
+ String prestr = "";
+ try {
+ for (int i = 0; i < keys.size(); i++) {
+ String key = keys.get(i);
+ String value = params.get(key);
+ value = URLEncoder.encode(value, "UTF-8");
+ if (i == keys.size() - 1) {
+ //拼接时,不包括最后一个&字符
+ prestr = prestr + key + "=" + value;
+ } else {
+ prestr = prestr + key + "=" + value + "&";
+ }
+ }
+ } catch (UnsupportedEncodingException e) {
+ log.error("GET params error: {}", e);
+ }
+ return prestr;
+ }
+ }
+
+ /*** RestTemplate 异常处理*/
+ public static class RestErrorHandler implements ResponseErrorHandler {
+ /*** 判断返回结果response是否是异常结果* 主要是去检查response 的HTTP Status* 仿造DefaultResponseErrorHandler实现即可*/
+ @Override
+ public boolean hasError(ClientHttpResponse response) throws IOException {
+ int rawStatusCode = response.getRawStatusCode();
+ HttpStatus statusCode = HttpStatus.resolve(rawStatusCode);
+ return (statusCode != null ? statusCode.isError() : hasError(rawStatusCode));
+ }
+
+ protected boolean hasError(int unknownStatusCode) {
+ HttpStatus.Series series = HttpStatus.Series.resolve(unknownStatusCode);
+ return (series == HttpStatus.Series.CLIENT_ERROR || series == HttpStatus.Series.SERVER_ERROR);
+ }
+
+ @Override
+ public void handleError(ClientHttpResponse response) throws IOException {
+ log.error("handleError:", response);
+ }
+
+ }
+
+ /*** CurlUtil 实例化* @param builder*/
+ public CurlUtil(Builder builder) {
+ this.result = builder.result;
+ }
+
+ /*** 结果* @return*/
+ public String build() {
+ return this.result;
+ }
+}
diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java b/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java
index e804e41..e3c8b35 100644
--- a/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java
+++ b/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java
@@ -4,9 +4,11 @@ import cn.org.bjca.trust.java.imserver.im.ImManager;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.scheduling.annotation.EnableAsync;
@EnableJpaAuditing
@SpringBootApplication
+@EnableAsync
public class ImServerApplication {
public static void main(String[] args) {
diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/RabbitMqApiUtil.java b/src/main/java/cn/org/bjca/trust/java/imserver/RabbitMqApiUtil.java
new file mode 100644
index 0000000..45b7273
--- /dev/null
+++ b/src/main/java/cn/org/bjca/trust/java/imserver/RabbitMqApiUtil.java
@@ -0,0 +1,47 @@
+package cn.org.bjca.trust.java.imserver;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class RabbitMqApiUtil {
+ /*** 获取RabbitMq概况* @return*/
+ public static String getRabbitMqOverView(String rabbitMqUrl, String userName, String password) {
+ String url = String.format("%s/api/overview", rabbitMqUrl);
+ String result = new CurlUtil.Builder(url, userName, password).addHeader("Content-Type", "application/json; charset=utf-8").get().build();
+ return result;
+ }
+
+ /*** 获取RabbitMq vhosts* @return*/
+ public static String getRabbitMqVhosts(String rabbitMqUrl, String userName, String password) {
+ String url = String.format("%s/api/vhosts", rabbitMqUrl);
+ return new CurlUtil.Builder(url, userName, password).addHeader("Content-Type", "application/json; charset=utf-8").get().build();
+ }
+
+ /*** 获取RabbitMq channels* @return*/
+ public static String getRabbitMqChannels(String rabbitMqUrl, String userName, String password) {
+ String url = String.format("%s/api/channels", rabbitMqUrl);
+ String result = new CurlUtil.Builder(url, userName, password).addHeader("Content-Type", "application/json; charset=utf-8").get().build();
+ return result;
+ }
+
+ /*** 获取RabbitMq nodes* @return*/
+ public static String getRabbitMqNodes(String rabbitMqUrl, String userName, String password) {
+ String url = String.format("%s/api/nodes", rabbitMqUrl);
+ String result = new CurlUtil.Builder(url, userName, password).addHeader("Content-Type", "application/json; charset=utf-8").get().build();
+ return result;
+ }
+
+ /*** 获取RabbitMq exchanges* @return*/
+ public static String getRabbitMqExchanges(String rabbitMqUrl, String userName, String password) {
+ String url = String.format("%s/api/exchanges", rabbitMqUrl);
+ String result = new CurlUtil.Builder(url, userName, password).addHeader("Content-Type", "application/json; charset=utf-8").get().build();
+ return result;
+ }
+
+ /*** 获取RabbitMq queues* @param rabbitMqUrl* @param userName* @param password* @return*/
+ public static String getRabbitMqQueues(String rabbitMqUrl, String userName, String password) {
+ String url = String.format("%s/api/queues", rabbitMqUrl);
+ String result = new CurlUtil.Builder(url, userName, password).addHeader("Content-Type", "application/json; charset=utf-8").get().build();
+ return result;
+ }
+}
diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/common/RabbitMQHelper.java b/src/main/java/cn/org/bjca/trust/java/imserver/common/RabbitMQHelper.java
index 8a08520..82d05c7 100644
--- a/src/main/java/cn/org/bjca/trust/java/imserver/common/RabbitMQHelper.java
+++ b/src/main/java/cn/org/bjca/trust/java/imserver/common/RabbitMQHelper.java
@@ -1,11 +1,15 @@
package cn.org.bjca.trust.java.imserver.common;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
+@Service
public class RabbitMQHelper {
public static void requestByGetAndParams(String requestUrl, String param) throws Exception {
System.out.println(requestUrl + ":\n" + param);
@@ -31,4 +35,29 @@ public class RabbitMQHelper {
bout.close();
bout.toByteArray();
}
+ @Async("asyncExecutor")
+ public void testIm(String requestUrl, String param) throws Exception {
+ System.out.println(requestUrl + ":\n" + param);
+ URL url = new URL(requestUrl);
+ HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
+ //设置请求方式,请求参数类型
+ httpURLConnection.setRequestMethod("POST");
+ httpURLConnection.setRequestProperty("content-type", "application/json;charset=UTF-8");
+ httpURLConnection.setRequestProperty("Authorization", "Basic YWRtaW46YWRtaW4=");
+ httpURLConnection.setDoOutput(true);
+ OutputStream outputStream = httpURLConnection.getOutputStream();
+ //将参数写入输出流,param必须是JSON格式
+ outputStream.write(param.getBytes());
+ outputStream.flush();
+ InputStream inputStream = httpURLConnection.getInputStream();
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ byte[] bytes = new byte[1024];
+ int len = 0;
+ while ((len = inputStream.read(bytes)) >= 0) {
+ bout.write(bytes, 0, len);
+ }
+ inputStream.close();
+ bout.close();
+ System.out.println(new String(bout.toByteArray()).toString());;
+ }
}
diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/controller/HelloController.java b/src/main/java/cn/org/bjca/trust/java/imserver/controller/HelloController.java
index ddfb1c0..e8c7c6f 100644
--- a/src/main/java/cn/org/bjca/trust/java/imserver/controller/HelloController.java
+++ b/src/main/java/cn/org/bjca/trust/java/imserver/controller/HelloController.java
@@ -1,20 +1,31 @@
package cn.org.bjca.trust.java.imserver.controller;
+import cn.org.bjca.trust.java.imserver.common.RabbitMQHelper;
import cn.org.bjca.trust.java.imserver.common.TLSSigAPIv2;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.*;
@RestController
@RequestMapping("hello")
public class HelloController {
private TLSSigAPIv2 tl;
+
@GetMapping("/{id}")
public String getById(@PathVariable String id) throws Exception {
System.out.println("id ==> " + id);
return "{\"msg\":\"qdxorigin\",\"code\":200,\"data\":\"Sbfuiaefhaikufhcsauik\"}";
}
+
@GetMapping("/getUserSig/{id}")
public String getUserSig(@PathVariable String id) throws Exception {
System.out.println("id ==> " + id);
@@ -23,4 +34,93 @@ public class HelloController {
return "{\"code\":0,\"data\":{\"userId\":\"" + id + "\",\"userSig\":\"" + tl.genUserSig(id, 2592000) + "\"},\"message\":\"\"}";
}
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
+
+ @PostMapping("/upload")
+ public String upload(MultipartFile file, HttpServletRequest req) {
+
+ System.out.println("-------");
+ System.out.println(req.toString());
+ System.out.println("-------");
+ if (null == file) return "{\n" +
+ " \"code\": 500,\n" +
+ " \"message\": \"系统异常\"\n" +
+ "}";
+ String realPath =
+ req.getSession().getServletContext().getRealPath("/uploadFile/");
+ String format = sdf.format(new Date());
+ File folder = new File(realPath + format);
+ String filePath = "";
+ if (!folder.isDirectory()) {
+ folder.mkdirs();
+ String oldName = file.getOriginalFilename();
+ String newName = UUID.randomUUID().toString() +
+ oldName.substring(oldName.lastIndexOf("."), oldName.length());
+ try {
+ file.transferTo(new File(folder, newName));
+ filePath = req.getScheme() + "://" + req.getServerName() + ":" +
+ req.getServerPort() + "/uploadFile/" + format + newName;
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ return "上传失败! ";
+ }
+ }
+ return filePath;
+ }
+
+ @GetMapping("/im/send")
+ public String testIm() throws Exception {
+// new RabbitMQHelper().testIm("https://console.tim.qq.com/v4/group_open_http_svc/send_group_msg?sdkappid=1400810832&identifier=administrator&usersig=eJw1jl0LgjAYRv-Lbgt9t5UuoesyNfrwosAbdUteQltzRhH990Tr8jmHA8*bpPHRUU*NRpGAzRcMAKYDfChDAsIcIONu5TXXGiUJ6AxAUBCcjQalaixecAhyWWODrTW5vZl-ilVvijM-ZO5alXHqbzooaLXKXB-C0yTh2yhM9nH3inb3uhSthuUvtVj3x6gnPMoBqP-5AjnmNEc_&random=" + 4567 + "&contenttype=json",
+// "{\"GroupId\":\"89196\",\"Random\":" + Math.abs(new Random().nextInt()) + ",\"From_Account\":\"13812345678\",\"MsgBody\":[{\"MsgType\":\"TIMTextElem\",\"MsgContent\":{\"Text\":\"red packet11111\"}}],\"CloudCustomData\":\"{\\\"doctor\\\":{\\\"name\\\":\\\"扁鹊\\\",\\\"department\\\":\\\"呼吸科\\\",\\\"avatar\\\":\\\"http://pic.imeitou.com/uploads/allimg/2018082917/11s0yqe4ggj.jpg\\\"},\\\"patient\\\":{\\\"name\\\":\\\"曹操\\\",\\\"age\\\":30,\\\"gender\\\":\\\"男\\\",\\\"avatar\\\":\\\"http://pic.imeitou.com/uploads/allimg/2018082917/o33xfvn24ct.jpg\\\"},\\\"createTime\\\":\\\"2020-12-12 12:30\\\"}\",\"SupportMessageExtension\":0,\"OfflinePushInfo\":{\"PushFlag\":0,\"title\":\"[量表填写通知]\",\"Desc\":\"医生[华佗]给您发送了一个开颅量表,请进入应用内填写。\",\"Ext\":\"{\\\"id\\\":\\\"123456\\\"}\"}}");
+ createThead();
+ System.out.println("-------------------------------");
+
+
+ return "fgvhbjnkm";
+ }
+
+ private void createThead() {
+ ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();
+ ExecutorService singleThreadPool = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
+ //异步执行的方法
+ singleThreadPool.execute(new PatientOtherData());
+ singleThreadPool.execute(new PatientOtherData());
+ singleThreadPool.execute(new PatientOtherData());
+ singleThreadPool.execute(new PatientOtherData());
+ singleThreadPool.execute(new PatientOtherData());
+ singleThreadPool.execute(new PatientOtherData());
+ singleThreadPool.execute(new PatientOtherData());
+ singleThreadPool.shutdown();
+
+ }
+
+ /**
+ *
+ */
+ private class PatientOtherData implements Runnable {
+
+ public PatientOtherData() {
+ }
+
+ @Override
+ public void run() {
+
+ int a = Math.abs(new Random().nextInt());
+ int b = Math.abs(new Random().nextInt());
+ long c = (long) a + (long) b;
+ try {
+ new RabbitMQHelper().testIm("https://console.tim.qq.com/v4/group_open_http_svc/send_group_msg?sdkappid=1400810832&identifier=administrator&usersig=eJw1jl0LgjAYRv-Lbgt9t5UuoesyNfrwosAbdUteQltzRhH990Tr8jmHA8*bpPHRUU*NRpGAzRcMAKYDfChDAsIcIONu5TXXGiUJ6AxAUBCcjQalaixecAhyWWODrTW5vZl-ilVvijM-ZO5alXHqbzooaLXKXB-C0yTh2yhM9nH3inb3uhSthuUvtVj3x6gnPMoBqP-5AjnmNEc_&random=" + 4567 + "&contenttype=json",
+ "{\"GroupId\":\"89335\",\"Random\":" + c + ",\"From_Account\":\"13812345678\",\"MsgBody\":[{\"MsgType\":\"TIMTextElem\",\"MsgContent\":{\"Text\":\"red packet22222\"}}],\"CloudCustomData\":\"{\\\"doctor\\\":{\\\"name\\\":\\\"扁鹊\\\",\\\"department\\\":\\\"呼吸科\\\",\\\"avatar\\\":\\\"http://pic.imeitou.com/uploads/allimg/2018082917/11s0yqe4ggj.jpg\\\"},\\\"patient\\\":{\\\"name\\\":\\\"曹操\\\",\\\"age\\\":30,\\\"gender\\\":\\\"男\\\",\\\"avatar\\\":\\\"http://pic.imeitou.com/uploads/allimg/2018082917/o33xfvn24ct.jpg\\\"},\\\"createTime\\\":\\\"2020-12-12 12:30\\\"}\",\"SupportMessageExtension\":0,\"OfflinePushInfo\":{\"PushFlag\":0,\"title\":\"[量表填写通知]\",\"Desc\":\"医生[华佗]给您发送了一个开颅量表,请进入应用内填写。\",\"Ext\":\"{\\\"id\\\":\\\"123456\\\"}\"}}");
+
+ } catch (Exception e) {
+
+ System.out.println(e);
+ }
+
+ }
+ }
+
+
}