From a2ecc47d9c93a508fe82eead8f88ffb44e14e9fa Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 28 七月 2023 14:17:05 +0800
Subject: [PATCH] 增加定时任务从融云接口更新app用户u状态

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RongCloudTask.java                    |   45 ++++++++++++++++++++++
 ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java |    3 -
 ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java        |   24 ++++++++---
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                        |    3 +
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java            |   13 ++++++
 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java         |    6 +-
 6 files changed, 82 insertions(+), 12 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
index 6a3de03..1ed5b73 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -164,8 +164,7 @@
                 params.put("bearing", ardAppPosition.getBearing());
                 sysUser.setParams(params);
             }
-            Boolean online = rongCloudService.checkOnline(sysUser.getUserId());
-            if(online)
+            if(sysUser.getAppOnlineState().equals("1"))
             {
                 onLineList.add(sysUser);
             }
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java
index 52ba743..388a4ad 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/AppPositionPush.java
@@ -38,13 +38,18 @@
     // 鍒濆瀹氭椂浠诲姟锛屾牴鎹敤鎴疯缃殑棰戠巼瀹氭湡鎺ㄩ�佸疄鏃朵綅缃俊鎭�
     public static void initPushTask(String userId, Session session, int pushFrequency) {
         initDataMap.put(userId, getAppPositionList());
+        List<ArdAppPosition> appPositionList = initDataMap.get(userId);
+        if (appPositionList.size() == 0) {
+            return;
+        }
         // 鍚姩鏂扮殑瀹氭椂浠诲姟
         if (pushFrequency > 0) {
             scheduler.scheduleAtFixedRate(() -> {
-                List<ArdAppPosition> appPositionList = initDataMap.get(userId);
-                Map newMap = new HashMap<>();
-                newMap.put("50000", appPositionList);
-                WebSocketUtils.sendMessage(session, newMap);
+                if (appPositionList.size() > 0) {
+                    Map newMap = new HashMap<>();
+                    newMap.put("50000", appPositionList);
+                    WebSocketUtils.sendMessage(session, newMap);
+                }
             }, 0, pushFrequency, TimeUnit.MILLISECONDS);
         }
     }
@@ -55,10 +60,13 @@
         stopLocationPushTask(session);
         // 鍚姩鏂扮殑瀹氭椂浠诲姟
         if (pushFrequency > 0) {
+            List<ArdAppPosition> appPositionList = getAppPositionList().stream()
+                    .filter(obj -> obj.getUserId().equals(guideUserId))
+                    .collect(Collectors.toList());
+            if (appPositionList.size() == 0) {
+                return;
+            }
             ScheduledFuture<?> task = scheduler.scheduleAtFixedRate(() -> {
-                List<ArdAppPosition> appPositionList = getAppPositionList().stream()
-                        .filter(obj -> obj.getUserId().equals(guideUserId))
-                        .collect(Collectors.toList());
                 Map newMap = new HashMap<>();
                 newMap.put("50000", appPositionList);
                 WebSocketUtils.sendMessage(session, newMap);
@@ -82,6 +90,8 @@
         //鑾峰彇鎵�鏈塧pp鐢ㄦ埛
         List<SysUser> list = sysUserService.selectAllAppUserList(new SysUser());
         for (SysUser sysUser : list) {
+            if(sysUser.getAppOnlineState().equals(0))
+            {continue; }
             IArdAppPositionService ardAppPositionService = SpringUtils.getBean(IArdAppPositionService.class);
             ArdAppPosition ardAppPosition = ardAppPositionService.selectLastArdAppPositionByUserId(sysUser.getUserId());
             ArdAppPositions.add(ardAppPosition);
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index 1f48457..804d9d6 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -145,6 +145,11 @@
      */
     private String appUserType;
     /**
+     * app鐢ㄦ埛鍦ㄧ嚎鐘舵��
+     * 0-绂荤嚎 1-鍦ㄧ嚎
+     */
+    private String appOnlineState;
+    /**
      * 鍏宠仈鎶ヨ绫诲瀷缁�
      */
     private List<String> commands;
@@ -153,6 +158,14 @@
 
     }
 
+    public String getAppOnlineState() {
+        return appOnlineState;
+    }
+
+    public void setAppOnlineState(String appOnlineState) {
+        this.appOnlineState = appOnlineState;
+    }
+
     public String getAppUserType() {
         return appUserType;
     }
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
index 74ce1bd..87bcc07 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -107,10 +107,10 @@
                         role.getRoleId()));
             } else if (DATA_SCOPE_DEPT.equals(dataScope)) {
                 sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
-            } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {//" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or '{}'= any(string_to_array(ancestors,',') ))",
+            } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
                 sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE CAST ( {} AS VARCHAR ) = ANY ( string_to_array( ancestors, ',' )))",
-                        deptAlias, user.getDeptId()));
+                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or CAST ( {} AS VARCHAR ) = ANY ( string_to_array( ancestors, ',' )))",
+                        deptAlias,  user.getDeptId(),user.getDeptId()));
             } else if (DATA_SCOPE_SELF.equals(dataScope)) {
                 if (StringUtils.isNotBlank(userAlias)) {
                     sqlString.append(StringUtils.format(" OR {}.user_id = '{}' ", userAlias, user.getUserId()));
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RongCloudTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RongCloudTask.java
new file mode 100644
index 0000000..8d2239f
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RongCloudTask.java
@@ -0,0 +1,45 @@
+package com.ruoyi.quartz.task;
+
+import com.ruoyi.app.position.domain.ArdAppPosition;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.rongcloud.service.RongCloudService;
+import com.ruoyi.system.service.ISysUserService;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 铻嶄簯浠诲姟绫�
+ * @ClassName: RongCloudTask
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�07鏈�28鏃�13:18:22
+ * @Version: 1.0
+ **/
+@Component("RongCloudTask")
+public class RongCloudTask {
+
+    @Resource
+    ISysUserService sysUserService;
+    @Resource
+    RongCloudService rongCloudService;
+
+    public void getAppUserOnlineStateTask()
+    {
+        List<SysUser> SysUserList = sysUserService.selectAllAppUserList(new SysUser());
+        if(SysUserList.size()>0) {
+            for (SysUser sysUser : SysUserList) {
+                Boolean online = rongCloudService.checkOnline(sysUser.getUserId());
+                if (online) {
+                    sysUser.setAppOnlineState("1");
+                } else {
+                    sysUser.setAppOnlineState("0");
+                }
+                sysUserService.updateUser(sysUser);
+            }
+        }
+    }
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 4479047..dadfb99 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -25,6 +25,7 @@
         <result property="cameraPriority" column="camera_priority"/>
         <result property="rongCloudToken" column="rong_cloud_token"/>
         <result property="appUserType" column="app_user_type"/>
+        <result property="appOnlineState" column="app_online_state"/>
         <result property="remark" column="remark"/>
         <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
         <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
@@ -68,6 +69,7 @@
                u.camera_priority,
                u.rong_cloud_token,
                u.app_user_type,
+               u.app_online_state,
                u.remark,
                d.dept_id,
                d.parent_id,
@@ -245,6 +247,7 @@
             <if test="cameraPriority != null">camera_priority = #{cameraPriority},</if>
             <if test="rongCloudToken != null">rong_cloud_token = #{rongCloudToken},</if>
             <if test="appUserType != null">app_user_type = #{appUserType},</if>
+            <if test="appOnlineState != null">app_online_state = #{appOnlineState},</if>
             update_time = now()
         </set>
         where user_id = #{userId}

--
Gitblit v1.9.3