Selaa lähdekoodia

消息中心优化代码

hanzhengyi 11 kuukautta sitten
vanhempi
commit
46b8510b04

+ 2 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceContentService.java

@@ -1,5 +1,6 @@
 package com.usky.iot.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.usky.iot.domain.MceContent;
 import com.usky.common.mybatis.core.CrudService;
 
@@ -12,5 +13,5 @@ import com.usky.common.mybatis.core.CrudService;
  * @since 2024-04-19
  */
 public interface MceContentService extends CrudService<MceContent> {
-
+    void sendApp(JSONObject mceReceiveVO, String cids, Integer sendType);
 }

+ 1 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceReceiveService.java

@@ -1,6 +1,7 @@
 package com.usky.iot.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.iot.domain.BaseBuild;
 import com.usky.iot.domain.DmpDeviceInfo;

+ 49 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/ExecutorConfig.java

@@ -0,0 +1,49 @@
+package com.usky.iot.service.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+@Slf4j
+public class ExecutorConfig {
+
+    /** 核心线程数(默认线程数) */
+    private int corePoolSize = 10;
+    /** 最大线程数 */
+    private int maxPoolSize = 20;
+    /** 允许线程空闲时间(单位:默认为秒) */
+    private static final int keepAliveTime = 60;
+    /** 缓冲队列大小 */
+    private int queueCapacity = 10;
+
+    @Bean
+    public Executor asyncServiceExecutor(){
+        log.info("start asyncServiceExecutor++++++++++++++++++++++");
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //配置核心线程数
+        executor.setCorePoolSize(corePoolSize);
+        //配置最大线程数
+        executor.setMaxPoolSize(maxPoolSize);
+        //配置空闲时间
+        executor.setKeepAliveSeconds(keepAliveTime);
+        //配置队列大小
+        executor.setQueueCapacity(queueCapacity);
+        //配置线程前缀名
+        executor.setThreadNamePrefix("async-service-");
+
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+}

+ 19 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceContentServiceImpl.java

@@ -1,9 +1,14 @@
 package com.usky.iot.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
 import com.usky.iot.domain.MceContent;
 import com.usky.iot.mapper.MceContentMapper;
 import com.usky.iot.service.MceContentService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.config.HttpClientUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,7 +19,21 @@ import org.springframework.stereotype.Service;
  * @author han
  * @since 2024-04-19
  */
+@Slf4j
 @Service
 public class MceContentServiceImpl extends AbstractCrudService<MceContentMapper, MceContent> implements MceContentService {
+    //异步多线程调用
+    @Async("asyncServiceExecutor")
+    public void sendApp(JSONObject mceReceiveVO, String cids, Integer sendType){
+        if (sendType.equals(0)){
+            String appUrl = "https://fc-mp-85a26092-1305-4bf1-998f-b609512c8f7b.next.bspapp.com/uniPushMessage";
+            JsonObject jsonObject = new JsonObject();
+            jsonObject.addProperty("cids", cids);
+            jsonObject.addProperty("title", mceReceiveVO.get("infoTitle").toString());
+            jsonObject.addProperty("content", mceReceiveVO.get("infoContent").toString());
+            String resultString = HttpClientUtils.doPostJson(appUrl,jsonObject.toString());
+        }else if (sendType.equals(1)){
 
+        }
+    }
 }

+ 24 - 15
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceReceiveServiceImpl.java

@@ -1,7 +1,5 @@
 package com.usky.iot.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -17,10 +15,12 @@ import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.MceContent;
+import com.usky.iot.domain.MceMbuser;
 import com.usky.iot.domain.MceReceive;
 import com.usky.iot.domain.MceSetting;
 import com.usky.iot.mapper.MceReceiveMapper;
 import com.usky.iot.service.MceContentService;
+import com.usky.iot.service.MceMbuserService;
 import com.usky.iot.service.MceReceiveService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.iot.service.MceSettingService;
@@ -28,6 +28,7 @@ import com.usky.iot.service.config.HttpClientUtils;
 import com.usky.system.RemoteUserService;
 import com.usky.system.domain.SysUser;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -47,6 +48,9 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
     @Autowired
     private MceContentService mceContentService;
 
+    @Autowired
+    private MceMbuserService mceMbuserService;
+
     @Autowired
     private RemoteUserService remoteUserService;
 
@@ -218,7 +222,6 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
 
     @Override
     public void add(String mceReceive){
-        String appUrl = "https://fc-mp-85a26092-1305-4bf1-998f-b609512c8f7b.next.bspapp.com/uniPushMessage";
         JSONObject mceReceiveVO = JSONObject.parseObject(mceReceive);
         MceContent mceContent = new MceContent();
         mceContent.setInfoTitle(mceReceiveVO.get("infoTitle").toString());
@@ -234,6 +237,13 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
         ApiResult<List<SysUser>> userAllList = remoteUserService.userAllList();
         List<SysUser> list = userAllList.getData();
         if (CollectionUtils.isNotEmpty(list)) {
+            List<Integer> userIds = new ArrayList<>();
+            for (int g = 0; g < list.size(); g++) {
+                userIds.add(list.get(g).getUserId().intValue());
+            }
+            LambdaQueryWrapper<MceMbuser> lambdaQuery3 = Wrappers.lambdaQuery();
+            lambdaQuery3.in(MceMbuser::getUserId,userIds);
+            List<MceMbuser> list3 = mceMbuserService.list(lambdaQuery3);
             for (int i = 0; i < list.size(); i++) {
                 MceReceive mceReceive1 = new MceReceive();
                 mceReceive1.setReceiverId(list.get(i).getUserId().intValue());
@@ -252,19 +262,18 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
                 List<MceSetting> list1 = mceSettingService.list(lambdaQuery);
                 if (CollectionUtils.isNotEmpty(list1)){
                     JSONObject appMode = JSONObject.parseObject(list1.get(0).getAppMode());
-                    if (appMode.get(mceReceiveVO.get("infoType").toString()).equals(true)){
-                        JsonObject jsonObject = new JsonObject();
-                        jsonObject.addProperty("cids", "b9ba637d52b3eca1cd15d9d1ede4d00b");
-                        jsonObject.addProperty("title", mceReceiveVO.get("infoTitle").toString());
-                        jsonObject.addProperty("content", mceReceiveVO.get("infoContent").toString());
-//                        HashMap map1 = new HashMap();
-//                        map1.put("text", "b0e7580c39166f9f8d5ed20da807ba1f");
-//                        map.put("payload", map1);
-                        String resultString = HttpClientUtils.doPostJson(appUrl,jsonObject.toString());
-                    }
                     JSONObject wcMode = JSONObject.parseObject(list1.get(0).getWcMode());
-                    if (wcMode.get(mceReceiveVO.get("infoType").toString()).equals(true)){
-
+                    for (int j = 0; j < list3.size(); j++){
+                        if (appMode.get(mceReceiveVO.get("infoType").toString()).equals(true)){
+                            if (list.get(i).getUserId().equals(list3.get(j).getUserId()) && StringUtils.isNotBlank(list3.get(j).getCids())){
+                                mceContentService.sendApp(mceReceiveVO,list3.get(j).getCids(),0);
+                            }
+                        }
+                        if (wcMode.get(mceReceiveVO.get("infoType").toString()).equals(true)){
+                            if (list.get(i).getUserId().equals(list3.get(j).getUserId()) && StringUtils.isNotBlank(list3.get(j).getCids())){
+                                mceContentService.sendApp(mceReceiveVO,list3.get(j).getCids(),1);
+                            }
+                        }
                     }
                 }
             }