From 64c7668818aa8272c0aae206a3c0f7007ca38e5d Mon Sep 17 00:00:00 2001
From: 艾金辉 <1144154118@qq.com>
Date: 星期六, 22 七月 2023 16:37:57 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java                         |  113 ++
 ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml                                    |  190 ++++
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyUserMapper.java                                |    2 
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                                |   12 
 ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java                                  |   85 ++
 ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java                         |   42 +
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyUserServiceImpl.java                     |    6 
 ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java |    7 
 ard-work/src/main/java/com/ruoyi/app/position/domain/ArdAppPosition.java                       |    2 
 ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java              |   22 
 ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java         |   87 +
 ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java                      |   61 +
 ard-work/src/main/java/com/ruoyi/app/tasktext/service/IArdAppTaskTextService.java              |   61 +
 ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskPic.java                            |   65 +
 ard-work/src/main/java/com/ruoyi/sy/service/IArdSyUserService.java                             |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                       |   10 
 ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java                 |  104 ++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java                          |    8 
 ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java      |   10 
 ard-work/src/main/java/com/ruoyi/app/position/mapper/ArdAppPositionMapper.java                 |    4 
 ard-work/src/main/resources/mapper/app/ArdAppPositionMapper.xml                                |    2 
 lib/mediamtx/mediamtx.yml                                                                      |   24 
 ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTask.java                               |  149 +++
 ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImpl.java                                  |  109 ++
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java                      |   32 
 lib/mediamtx/ffmpeg.exe                                                                        |    0 
 ard-work/src/main/java/com/ruoyi/app/tasktext/controller/ArdAppTaskTextController.java         |  104 ++
 ard-work/src/main/java/com/ruoyi/app/tasktext/service/impl/ArdAppTaskTextServiceImpl.java      |   89 ++
 ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java                      |   74 +
 ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java                               |   19 
 ard-work/src/main/java/com/ruoyi/app/tasktext/domain/ArdAppTaskText.java                       |   65 +
 ard-work/src/main/resources/mapper/sy/ArdSyUserMapper.xml                                      |    3 
 ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java                          |  160 ++++
 ard-work/src/main/resources/mapper/app/ArdAppTaskTextMapper.xml                                |   63 +
 ard-work/pom.xml                                                                               |   58 +
 ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java              |  190 ++++
 ard-work/src/main/java/com/ruoyi/rongcloud/service/RongCloudService.java                       |    1 
 ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml                                       |    8 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java               |    5 
 ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java                 |    8 
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java                                 |    7 
 ard-work/src/main/java/com/ruoyi/app/tasktext/mapper/ArdAppTaskTextMapper.java                 |   61 +
 ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java              |    4 
 ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskDetail.java                         |  149 +++
 ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java                              |   11 
 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java                          |    4 
 46 files changed, 2,232 insertions(+), 63 deletions(-)

diff --git a/ard-work/pom.xml b/ard-work/pom.xml
index 2e3a240..c686bad 100644
--- a/ard-work/pom.xml
+++ b/ard-work/pom.xml
@@ -14,6 +14,12 @@
     </description>
 
     <dependencies>
+        <dependency>
+            <groupId>net.sf.ucanaccess</groupId>
+            <artifactId>ucanaccess</artifactId>
+            <version>5.0.1</version>
+        </dependency>
+
         <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>commons-codec</groupId>
@@ -123,7 +129,57 @@
             <artifactId>fastjson2</artifactId>
             <version>2.0.36</version>
         </dependency>
-
+        <!--涓変竴杞﹁締渚濊禆-->
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.14</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <version>4.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.9</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.35</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sy</groupId>
+            <artifactId>gps-push-client</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>2.12.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>2.12.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-jcl</artifactId>
+            <version>2.11.2</version>
+        </dependency>
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+            <version>4.1.63.Final</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java b/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
index e4ac74d..42a3bad 100644
--- a/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
+++ b/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
@@ -58,6 +58,13 @@
         return getDataTable(list);
     }
 
+    @PreAuthorize("@ss.hasPermi('alarmpoints:well:list')")
+    @GetMapping("/nonPageList")
+    @ApiOperation("鏌ヨ浜曞垪琛�-涓嶅垎椤�")
+    public AjaxResult nonPageList(ArdAlarmpointsWell ardAlarmpointsWell) {
+        List<ArdAlarmpointsWell> list = ardAlarmpointsWellService.selectArdAlarmpointsWellList(ardAlarmpointsWell);
+        return success(list);
+    }
     /**
      * 瀵煎嚭浜曠鐞嗗垪琛�
      */
diff --git a/ard-work/src/main/java/com/ruoyi/app/controller/ArdAppPositionController.java b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
similarity index 60%
rename from ard-work/src/main/java/com/ruoyi/app/controller/ArdAppPositionController.java
rename to ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
index 64e4ec7..c3f102a 100644
--- a/ard-work/src/main/java/com/ruoyi/app/controller/ArdAppPositionController.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -1,19 +1,28 @@
-package com.ruoyi.app.controller;
+package com.ruoyi.app.position.controller;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.ruoyi.app.domain.ArdAppPosition;
-import com.ruoyi.app.service.IArdAppPositionService;
-import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.app.position.domain.ArdAppPosition;
+import com.ruoyi.app.position.service.IArdAppPositionService;
+import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
+import com.ruoyi.rongcloud.service.RongCloudService;
+import com.ruoyi.system.domain.SysUserOnline;
 import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserOnlineService;
 import com.ruoyi.system.service.ISysUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -27,12 +36,9 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import static org.bytedeco.javacv.FrameGrabber.list;
+import java.util.*;
 
 /**
  * app浣嶇疆Controller
@@ -50,7 +56,7 @@
     @Autowired
     private ISysUserService sysUserService;
     @Autowired
-    private ISysRoleService roleService;
+    private RongCloudService rongCloudService;
 
     /**
      * 鏌ヨapp浣嶇疆鍒楄〃
@@ -134,6 +140,58 @@
         return AjaxResult.success(list);
     }
     /**
+     * 鑾峰彇鎵�鏈塧pp鐢ㄦ埛
+     */
+    @ApiOperation("鑾峰彇鎵�鏈塧pp鐢ㄦ埛")
+    @GetMapping("/getAppUserlist")
+    public AjaxResult getAppUserlist(Long deptId)
+    {
+        SysUser user=new SysUser();
+        user.setDeptId(deptId);
+        List<SysUser> list = sysUserService.selectAppUserList(user);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈塧pp鐢ㄦ埛
+     */
+    @ApiOperation("鑾峰彇鎵�鏈塧pp鐢ㄦ埛pc")
+    @GetMapping("/getAppUserForPclist")
+    public AjaxResult getAppUserForPclist(Long deptId)
+    {
+        SysUser user=new SysUser();
+        user.setDeptId(deptId);
+        List<SysUser> list = sysUserService.selectAppUserList(user);
+        List<SysUser> onLineList=new ArrayList<>();
+        List<SysUser> offLineList=new ArrayList<>();
+        for(SysUser sysUser:list)
+        {
+            Boolean online = rongCloudService.checkOnline(sysUser.getUserId());
+            if(online)
+            {
+                onLineList.add(sysUser);
+            }
+            else
+            {
+                offLineList.add(sysUser);
+            }
+        }
+        Map<String,Object> onlineMap=new HashMap<>();
+        onlineMap.put("children",onLineList);
+        onlineMap.put("name","鍦ㄧ嚎鐢ㄦ埛("+onLineList.size()+")");
+        onlineMap.put("disabled",true);
+        onlineMap.put("id","onLine");
+        Map<String,Object> offlineMap=new HashMap<>();
+        offlineMap.put("children",offLineList);
+        offlineMap.put("name","绂荤嚎鐢ㄦ埛("+offLineList.size()+")");
+        offlineMap.put("disabled",true);
+        offlineMap.put("id","offLine");
+        List< Map<String,Object> > lists = new ArrayList<>();
+        lists.add(onlineMap);
+        lists.add(offlineMap);
+        return AjaxResult.success(lists);
+    }
+    /**
      * 鑾峰彇鐢ㄦ埛璇︽儏
      */
     @ApiOperation("鑾峰彇鐢ㄦ埛璇︽儏")
@@ -143,4 +201,11 @@
         SysUser sysUser = sysUserService.selectUserById(userId);
         return AjaxResult.success(sysUser);
     }
+    @PostMapping("/uploadFile")
+    @ApiOperation("涓婁紶鏂囦欢")
+    public AjaxResult uploadFile(MultipartFile file,String type)
+    {
+        String url = MinioUtils.putObjectAndGetUrl("app",type, file);
+        return AjaxResult.success(url);
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/app/domain/ArdAppPosition.java b/ard-work/src/main/java/com/ruoyi/app/position/domain/ArdAppPosition.java
similarity index 95%
rename from ard-work/src/main/java/com/ruoyi/app/domain/ArdAppPosition.java
rename to ard-work/src/main/java/com/ruoyi/app/position/domain/ArdAppPosition.java
index 25bb335..1bb7e20 100644
--- a/ard-work/src/main/java/com/ruoyi/app/domain/ArdAppPosition.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/domain/ArdAppPosition.java
@@ -1,4 +1,4 @@
-package com.ruoyi.app.domain;
+package com.ruoyi.app.position.domain;
 import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
diff --git a/ard-work/src/main/java/com/ruoyi/app/mapper/ArdAppPositionMapper.java b/ard-work/src/main/java/com/ruoyi/app/position/mapper/ArdAppPositionMapper.java
similarity index 92%
rename from ard-work/src/main/java/com/ruoyi/app/mapper/ArdAppPositionMapper.java
rename to ard-work/src/main/java/com/ruoyi/app/position/mapper/ArdAppPositionMapper.java
index 113eae3..0b23c5d 100644
--- a/ard-work/src/main/java/com/ruoyi/app/mapper/ArdAppPositionMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/mapper/ArdAppPositionMapper.java
@@ -1,7 +1,7 @@
-package com.ruoyi.app.mapper;
+package com.ruoyi.app.position.mapper;
 
 import java.util.List;
-import com.ruoyi.app.domain.ArdAppPosition;
+import com.ruoyi.app.position.domain.ArdAppPosition;
 
 
 /**
diff --git a/ard-work/src/main/java/com/ruoyi/app/service/IArdAppPositionService.java b/ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
similarity index 92%
rename from ard-work/src/main/java/com/ruoyi/app/service/IArdAppPositionService.java
rename to ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
index 0e022d4..a4fa952 100644
--- a/ard-work/src/main/java/com/ruoyi/app/service/IArdAppPositionService.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
@@ -1,7 +1,7 @@
-package com.ruoyi.app.service;
+package com.ruoyi.app.position.service;
 
 import java.util.List;
-import com.ruoyi.app.domain.ArdAppPosition;
+import com.ruoyi.app.position.domain.ArdAppPosition;
 
 
 /**
diff --git a/ard-work/src/main/java/com/ruoyi/app/service/impl/ArdAppPositionServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
similarity index 87%
rename from ard-work/src/main/java/com/ruoyi/app/service/impl/ArdAppPositionServiceImpl.java
rename to ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
index f665230..14ce8c9 100644
--- a/ard-work/src/main/java/com/ruoyi/app/service/impl/ArdAppPositionServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -1,12 +1,10 @@
-package com.ruoyi.app.service.impl;
+package com.ruoyi.app.position.service.impl;
 
-import com.ruoyi.app.domain.ArdAppPosition;
-import com.ruoyi.app.mapper.ArdAppPositionMapper;
-import com.ruoyi.app.service.IArdAppPositionService;
+import com.ruoyi.app.position.domain.ArdAppPosition;
+import com.ruoyi.app.position.mapper.ArdAppPositionMapper;
+import com.ruoyi.app.position.service.IArdAppPositionService;
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java b/ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java
new file mode 100644
index 0000000..1eb5f3e
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java
@@ -0,0 +1,104 @@
+package com.ruoyi.app.task.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.app.task.domain.ArdAppTask;
+import com.ruoyi.app.task.service.IArdAppTaskService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * app浠诲姟绠$悊Controller
+ *
+ * @author ard
+ * @date 2023-07-22
+ */
+@RestController
+@RequestMapping("/app/task")
+public class ArdAppTaskController extends BaseController
+{
+    @Autowired
+    private IArdAppTaskService ardAppTaskService;
+
+    /**
+     * 鏌ヨapp浠诲姟绠$悊鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('app:task:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ArdAppTask ardAppTask)
+    {
+        startPage();
+        List<ArdAppTask> list = ardAppTaskService.selectArdAppTaskList(ardAppTask);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭app浠诲姟绠$悊鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('app:task:export')")
+    @Log(title = "app浠诲姟绠$悊", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ArdAppTask ardAppTask)
+    {
+        List<ArdAppTask> list = ardAppTaskService.selectArdAppTaskList(ardAppTask);
+        ExcelUtil<ArdAppTask> util = new ExcelUtil<ArdAppTask>(ArdAppTask.class);
+        util.exportExcel(response, list, "app浠诲姟绠$悊鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇app浠诲姟绠$悊璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('app:task:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(ardAppTaskService.selectArdAppTaskById(id));
+    }
+
+    /**
+     * 鏂板app浠诲姟绠$悊
+     */
+    @PreAuthorize("@ss.hasPermi('app:task:add')")
+    @Log(title = "app浠诲姟绠$悊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ArdAppTask ardAppTask)
+    {
+        return toAjax(ardAppTaskService.insertArdAppTask(ardAppTask));
+    }
+
+    /**
+     * 淇敼app浠诲姟绠$悊
+     */
+    @PreAuthorize("@ss.hasPermi('app:task:edit')")
+    @Log(title = "app浠诲姟绠$悊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ArdAppTask ardAppTask)
+    {
+        return toAjax(ardAppTaskService.updateArdAppTask(ardAppTask));
+    }
+
+    /**
+     * 鍒犻櫎app浠诲姟绠$悊
+     */
+    @PreAuthorize("@ss.hasPermi('app:task:remove')")
+    @Log(title = "app浠诲姟绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(ardAppTaskService.deleteArdAppTaskByIds(ids));
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTask.java b/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTask.java
new file mode 100644
index 0000000..65f7bed
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTask.java
@@ -0,0 +1,149 @@
+package com.ruoyi.app.task.domain;
+
+import java.util.List;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * app浠诲姟绠$悊瀵硅薄 ard_app_task
+ * 
+ * @author ard
+ * @date 2023-07-22
+ */
+public class ArdAppTask extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private String id;
+
+    /** 浠诲姟鍚嶇О */
+    @Excel(name = "浠诲姟鍚嶇О")
+    private String name;
+
+    /** 浠诲姟鏂囨湰 */
+    @Excel(name = "浠诲姟鏂囨湰")
+    private String text;
+
+    /** 浠诲姟璇煶 */
+    @Excel(name = "浠诲姟璇煶")
+    private String voice;
+
+    /** 閮ㄩ棬ID */
+    @Excel(name = "閮ㄩ棬ID")
+    private Integer deptId;
+
+    /** 鐢ㄦ埛ID */
+    @Excel(name = "鐢ㄦ埛ID")
+    private String userId;
+    /** app浠诲姟鍥剧墖淇℃伅 */
+    private List<ArdAppTaskPic> ardAppTaskPicList;
+
+    /** app浠诲姟鍏宠仈澶氱敤鎴� */
+    private List<String> userIds;
+
+    /** app浠诲姟璇︽儏淇℃伅 */
+    private List<ArdAppTaskDetail> ardAppTaskDetailList;
+
+    public List<ArdAppTaskPic> getArdAppTaskPicList()
+    {
+        return ardAppTaskPicList;
+    }
+
+    public List<String> getUserIds() {
+        return userIds;
+    }
+
+    public void setUserIds(List<String> userIds) {
+        this.userIds = userIds;
+    }
+
+    public void setArdAppTaskPicList(List<ArdAppTaskPic> ardAppTaskPicList)
+    {
+        this.ardAppTaskPicList = ardAppTaskPicList;
+    }
+
+    public void setId(String id)
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setText(String text) 
+    {
+        this.text = text;
+    }
+
+    public String getText() 
+    {
+        return text;
+    }
+    public void setVoice(String voice) 
+    {
+        this.voice = voice;
+    }
+
+    public String getVoice() 
+    {
+        return voice;
+    }
+    public void setDeptId(Integer deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Integer getDeptId() 
+    {
+        return deptId;
+    }
+    public void setUserId(String userId) 
+    {
+        this.userId = userId;
+    }
+
+    public String getUserId() 
+    {
+        return userId;
+    }
+
+    public List<ArdAppTaskDetail> getArdAppTaskDetailList()
+    {
+        return ardAppTaskDetailList;
+    }
+
+    public void setArdAppTaskDetailList(List<ArdAppTaskDetail> ardAppTaskDetailList)
+    {
+        this.ardAppTaskDetailList = ardAppTaskDetailList;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("id", getId())
+            .append("name", getName())
+            .append("text", getText())
+            .append("voice", getVoice())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("ardAppTaskDetailList", getArdAppTaskDetailList())
+            .toString();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskDetail.java b/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskDetail.java
new file mode 100644
index 0000000..e52c535
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskDetail.java
@@ -0,0 +1,149 @@
+package com.ruoyi.app.task.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * app浠诲姟璇︽儏瀵硅薄 ard_app_task_detail
+ * 
+ * @author ard
+ * @date 2023-07-22
+ */
+public class ArdAppTaskDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private String id;
+
+    /** 鍏磋叮鐐瑰悕绉� */
+    @Excel(name = "鍏磋叮鐐瑰悕绉�")
+    private String name;
+
+    /** 鍏磋叮鐐圭粡搴� */
+    @Excel(name = "鍏磋叮鐐圭粡搴�")
+    private String longitude;
+
+    /** 鍏磋叮鐐圭含搴� */
+    @Excel(name = "鍏磋叮鐐圭含搴�")
+    private String latitude;
+
+    /** 鍏磋叮鐐归珮灞� */
+    @Excel(name = "鍏磋叮鐐归珮灞�")
+    private String altitude;
+
+    /** 鍏宠仈鐢ㄦ埛ID */
+    @Excel(name = "鍏宠仈鐢ㄦ埛ID")
+    private String userId;
+
+    /** 鎵撳崱鏂囨湰 */
+    @Excel(name = "鎵撳崱鏂囨湰")
+    private String text;
+
+    /** 鎵撳崱璇煶 */
+    @Excel(name = "鎵撳崱璇煶")
+    private String voice;
+
+    /** 浠诲姟ID */
+    @Excel(name = "浠诲姟ID")
+    private String taskId;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setLongitude(String longitude) 
+    {
+        this.longitude = longitude;
+    }
+
+    public String getLongitude() 
+    {
+        return longitude;
+    }
+    public void setLatitude(String latitude) 
+    {
+        this.latitude = latitude;
+    }
+
+    public String getLatitude() 
+    {
+        return latitude;
+    }
+    public void setAltitude(String altitude) 
+    {
+        this.altitude = altitude;
+    }
+
+    public String getAltitude() 
+    {
+        return altitude;
+    }
+    public void setUserId(String userId) 
+    {
+        this.userId = userId;
+    }
+
+    public String getUserId() 
+    {
+        return userId;
+    }
+    public void setText(String text) 
+    {
+        this.text = text;
+    }
+
+    public String getText() 
+    {
+        return text;
+    }
+    public void setVoice(String voice) 
+    {
+        this.voice = voice;
+    }
+
+    public String getVoice() 
+    {
+        return voice;
+    }
+    public void setTaskId(String taskId) 
+    {
+        this.taskId = taskId;
+    }
+
+    public String getTaskId() 
+    {
+        return taskId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("name", getName())
+            .append("longitude", getLongitude())
+            .append("latitude", getLatitude())
+            .append("altitude", getAltitude())
+            .append("userId", getUserId())
+            .append("text", getText())
+            .append("voice", getVoice())
+            .append("taskId", getTaskId())
+            .toString();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskPic.java b/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskPic.java
new file mode 100644
index 0000000..b37e20e
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskPic.java
@@ -0,0 +1,65 @@
+package com.ruoyi.app.task.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * app浠诲姟鍥剧墖瀵硅薄 ard_app_task_pic
+ * 
+ * @author ard
+ * @date 2023-07-22
+ */
+public class ArdAppTaskPic extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private String id;
+
+    /** app浠诲姟ID */
+    @Excel(name = "app浠诲姟ID")
+    private String taskId;
+
+    /** app浠诲姟鍥剧墖url */
+    @Excel(name = "app浠诲姟鍥剧墖url")
+    private String picUrl;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setTaskId(String taskId) 
+    {
+        this.taskId = taskId;
+    }
+
+    public String getTaskId() 
+    {
+        return taskId;
+    }
+    public void setPicUrl(String picUrl) 
+    {
+        this.picUrl = picUrl;
+    }
+
+    public String getPicUrl() 
+    {
+        return picUrl;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskId", getTaskId())
+            .append("picUrl", getPicUrl())
+            .toString();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java b/ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java
new file mode 100644
index 0000000..6869eb6
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/task/mapper/ArdAppTaskMapper.java
@@ -0,0 +1,113 @@
+package com.ruoyi.app.task.mapper;
+
+import java.util.List;
+import com.ruoyi.app.task.domain.ArdAppTask;
+import com.ruoyi.app.task.domain.ArdAppTaskDetail;
+import com.ruoyi.app.task.domain.ArdAppTaskPic;
+
+/**
+ * app浠诲姟绠$悊Mapper鎺ュ彛
+ *
+ * @author ard
+ * @date 2023-07-22
+ */
+public interface ArdAppTaskMapper
+{
+    /**
+     * 鏌ヨapp浠诲姟绠$悊
+     *
+     * @param id app浠诲姟绠$悊涓婚敭
+     * @return app浠诲姟绠$悊
+     */
+    public ArdAppTask selectArdAppTaskById(String id);
+
+    /**
+     * 鏌ヨapp浠诲姟绠$悊鍒楄〃
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return app浠诲姟绠$悊闆嗗悎
+     */
+    public List<ArdAppTask> selectArdAppTaskList(ArdAppTask ardAppTask);
+
+    /**
+     * 鏂板app浠诲姟绠$悊
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return 缁撴灉
+     */
+    public int insertArdAppTask(ArdAppTask ardAppTask);
+
+    /**
+     * 淇敼app浠诲姟绠$悊
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return 缁撴灉
+     */
+    public int updateArdAppTask(ArdAppTask ardAppTask);
+
+    /**
+     * 鍒犻櫎app浠诲姟绠$悊
+     *
+     * @param id app浠诲姟绠$悊涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟绠$悊
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskByIds(String[] ids);
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟鍥剧墖
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskPicByTaskIds(String[] ids);
+
+    /**
+     * 鎵归噺鏂板app浠诲姟鍥剧墖
+     *
+     * @param ardAppTaskPicList app浠诲姟鍥剧墖鍒楄〃
+     * @return 缁撴灉
+     */
+    public int batchArdAppTaskPic(List<ArdAppTaskPic> ardAppTaskPicList);
+
+
+    /**
+     * 閫氳繃app浠诲姟绠$悊涓婚敭鍒犻櫎app浠诲姟鍥剧墖淇℃伅
+     *
+     * @param id app浠诲姟绠$悊ID
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskPicByTaskId(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟璇︽儏
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskDetailByTaskIds(String[] ids);
+
+    /**
+     * 鎵归噺鏂板app浠诲姟璇︽儏
+     *
+     * @param ardAppTaskDetailList app浠诲姟璇︽儏鍒楄〃
+     * @return 缁撴灉
+     */
+    public int batchArdAppTaskDetail(List<ArdAppTaskDetail> ardAppTaskDetailList);
+
+
+    /**
+     * 閫氳繃app浠诲姟绠$悊涓婚敭鍒犻櫎app浠诲姟璇︽儏淇℃伅
+     *
+     * @param id app浠诲姟绠$悊ID
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskDetailByTaskId(String id);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java b/ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java
new file mode 100644
index 0000000..03a72a4
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.app.task.service;
+
+import java.util.List;
+import com.ruoyi.app.task.domain.ArdAppTask;
+
+/**
+ * app浠诲姟绠$悊Service鎺ュ彛
+ *
+ * @author ard
+ * @date 2023-07-22
+ */
+public interface IArdAppTaskService
+{
+    /**
+     * 鏌ヨapp浠诲姟绠$悊
+     *
+     * @param id app浠诲姟绠$悊涓婚敭
+     * @return app浠诲姟绠$悊
+     */
+    public ArdAppTask selectArdAppTaskById(String id);
+
+    /**
+     * 鏌ヨapp浠诲姟绠$悊鍒楄〃
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return app浠诲姟绠$悊闆嗗悎
+     */
+    public List<ArdAppTask> selectArdAppTaskList(ArdAppTask ardAppTask);
+
+    /**
+     * 鏂板app浠诲姟绠$悊
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return 缁撴灉
+     */
+    public int insertArdAppTask(ArdAppTask ardAppTask);
+
+    /**
+     * 淇敼app浠诲姟绠$悊
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return 缁撴灉
+     */
+    public int updateArdAppTask(ArdAppTask ardAppTask);
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟绠$悊
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑app浠诲姟绠$悊涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎app浠诲姟绠$悊淇℃伅
+     *
+     * @param id app浠诲姟绠$悊涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskById(String id);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java
new file mode 100644
index 0000000..79c86b7
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java
@@ -0,0 +1,190 @@
+package com.ruoyi.app.task.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.app.task.domain.ArdAppTaskDetail;
+import com.ruoyi.app.tasktext.domain.ArdAppTaskText;
+import com.ruoyi.app.tasktext.mapper.ArdAppTaskTextMapper;
+import com.ruoyi.common.annotation.DataScope;
+import com.ruoyi.common.utils.DateUtils;
+
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.common.utils.uuid.UUID;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.transaction.annotation.Transactional;
+import com.ruoyi.app.task.domain.ArdAppTaskPic;
+import com.ruoyi.app.task.mapper.ArdAppTaskMapper;
+import com.ruoyi.app.task.domain.ArdAppTask;
+import com.ruoyi.app.task.service.IArdAppTaskService;
+
+import javax.annotation.Resource;
+
+/**
+ * app浠诲姟绠$悊Service涓氬姟灞傚鐞�
+ *
+ * @author ard
+ * @date 2023-07-22
+ */
+@Service
+public class ArdAppTaskServiceImpl implements IArdAppTaskService {
+    @Resource
+    private ArdAppTaskMapper ardAppTaskMapper;
+    @Resource
+    private ArdAppTaskTextMapper ardAppTaskTextMapper;
+    /**
+     * 鏌ヨapp浠诲姟绠$悊
+     *
+     * @param id app浠诲姟绠$悊涓婚敭
+     * @return app浠诲姟绠$悊
+     */
+    @Override
+    public ArdAppTask selectArdAppTaskById(String id) {
+        return ardAppTaskMapper.selectArdAppTaskById(id);
+    }
+
+    /**
+     * 鏌ヨapp浠诲姟绠$悊鍒楄〃
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return app浠诲姟绠$悊
+     */
+    @Override
+    @DataScope(deptAlias = "d", userAlias = "u")
+    public List<ArdAppTask> selectArdAppTaskList(ArdAppTask ardAppTask) {
+        return ardAppTaskMapper.selectArdAppTaskList(ardAppTask);
+    }
+
+    /**
+     * 鏂板app浠诲姟绠$悊
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int insertArdAppTask(ArdAppTask ardAppTask) {
+        ardAppTask.setId(IdUtils.simpleUUID());
+        ardAppTask.setUserId(SecurityUtils.getUserId());
+        ardAppTask.setCreateBy(SecurityUtils.getUsername());
+        ardAppTask.setCreateTime(DateUtils.getNowDate());
+        int rows = ardAppTaskMapper.insertArdAppTask(ardAppTask);
+        insertArdAppTaskPic(ardAppTask);
+        insertArdAppTaskDetail(ardAppTask);
+        insertArdAppTaskText(ardAppTask);
+        return rows;
+    }
+
+    /**
+     * 淇敼app浠诲姟绠$悊
+     *
+     * @param ardAppTask app浠诲姟绠$悊
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int updateArdAppTask(ArdAppTask ardAppTask) {
+        ardAppTask.setUpdateBy(SecurityUtils.getUsername());
+        ardAppTask.setUpdateTime(DateUtils.getNowDate());
+        ardAppTaskMapper.deleteArdAppTaskPicByTaskId(ardAppTask.getId());
+        ardAppTaskMapper.deleteArdAppTaskDetailByTaskId(ardAppTask.getId());
+        insertArdAppTaskPic(ardAppTask);
+        insertArdAppTaskDetail(ardAppTask);
+        return ardAppTaskMapper.updateArdAppTask(ardAppTask);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟绠$悊
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑app浠诲姟绠$悊涓婚敭
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int deleteArdAppTaskByIds(String[] ids) {
+        ardAppTaskMapper.deleteArdAppTaskPicByTaskIds(ids);
+        return ardAppTaskMapper.deleteArdAppTaskByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎app浠诲姟绠$悊淇℃伅
+     *
+     * @param id app浠诲姟绠$悊涓婚敭
+     * @return 缁撴灉
+     */
+    @Transactional
+    @Override
+    public int deleteArdAppTaskById(String id) {
+        ardAppTaskMapper.deleteArdAppTaskPicByTaskId(id);
+        return ardAppTaskMapper.deleteArdAppTaskById(id);
+    }
+
+    /**
+     * 鏂板app浠诲姟鍥剧墖淇℃伅
+     *
+     * @param ardAppTask app浠诲姟绠$悊瀵硅薄
+     */
+    public void insertArdAppTaskPic(ArdAppTask ardAppTask) {
+        List<ArdAppTaskPic> ardAppTaskPicList = ardAppTask.getArdAppTaskPicList();
+        String id = ardAppTask.getId();
+        if (StringUtils.isNotNull(ardAppTaskPicList)) {
+            List<ArdAppTaskPic> list = new ArrayList<ArdAppTaskPic>();
+            for (ArdAppTaskPic ardAppTaskPic :ardAppTaskPicList)
+            {
+                ardAppTaskPic.setId(IdUtils.simpleUUID());
+                ardAppTaskPic.setTaskId(id);
+                list.add(ardAppTaskPic);
+            }
+            if (list.size() > 0) {
+                ardAppTaskMapper.batchArdAppTaskPic(list);
+            }
+        }
+    }
+
+    /**
+     * 鏂板app浠诲姟璇︽儏淇℃伅
+     *
+     * @param ardAppTask app浠诲姟绠$悊瀵硅薄
+     */
+    public void insertArdAppTaskDetail(ArdAppTask ardAppTask) {
+        List<String> userIds = ardAppTask.getUserIds();
+        for(String userId:userIds) {
+            List<ArdAppTaskDetail> ardAppTaskDetailList = ardAppTask.getArdAppTaskDetailList();
+            String id = ardAppTask.getId();
+            if (StringUtils.isNotNull(ardAppTaskDetailList)) {
+                List<ArdAppTaskDetail> list = new ArrayList<ArdAppTaskDetail>();
+                for (ArdAppTaskDetail ardAppTaskDetail : ardAppTaskDetailList) {
+                    ardAppTaskDetail.setId(IdUtils.simpleUUID());
+                    ardAppTaskDetail.setTaskId(id);
+                    ardAppTaskDetail.setUserId(userId);
+                    list.add(ardAppTaskDetail);
+                }
+                if (list.size() > 0) {
+                    ardAppTaskMapper.batchArdAppTaskDetail(list);
+                }
+            }
+        }
+    }
+    /**
+     * 鏂板app浠诲姟鎻忚堪淇℃伅
+     *
+     * @param ardAppTask app浠诲姟绠$悊瀵硅薄
+     */
+    public void insertArdAppTaskText(ArdAppTask ardAppTask) {
+        String userId = ardAppTask.getUserId();
+        String text = ardAppTask.getText();
+        ArdAppTaskText ardAppTaskText=new ArdAppTaskText();
+        ardAppTaskText.setId(IdUtils.simpleUUID());
+        ardAppTaskText.setUserId(userId);
+        ardAppTaskText.setText(text);
+        List<ArdAppTaskText> ardAppTaskTexts = ardAppTaskTextMapper.selectArdAppTaskTextList(ardAppTaskText);
+        if(ardAppTaskTexts.size()==0)
+        {
+            ardAppTaskTextMapper.insertArdAppTaskText(ardAppTaskText);
+        }
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/tasktext/controller/ArdAppTaskTextController.java b/ard-work/src/main/java/com/ruoyi/app/tasktext/controller/ArdAppTaskTextController.java
new file mode 100644
index 0000000..70fd7b9
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/tasktext/controller/ArdAppTaskTextController.java
@@ -0,0 +1,104 @@
+package com.ruoyi.app.tasktext.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.app.tasktext.domain.ArdAppTaskText;
+import com.ruoyi.app.tasktext.service.IArdAppTaskTextService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * app浠诲姟鎻忚堪Controller
+ * 
+ * @author ard
+ * @date 2023-07-22
+ */
+@RestController
+@RequestMapping("/task/text")
+public class ArdAppTaskTextController extends BaseController
+{
+    @Autowired
+    private IArdAppTaskTextService ardAppTaskTextService;
+
+    /**
+     * 鏌ヨapp浠诲姟鎻忚堪鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('task:text:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ArdAppTaskText ardAppTaskText)
+    {
+        startPage();
+        List<ArdAppTaskText> list = ardAppTaskTextService.selectArdAppTaskTextList(ardAppTaskText);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭app浠诲姟鎻忚堪鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('task:text:export')")
+    @Log(title = "app浠诲姟鎻忚堪", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ArdAppTaskText ardAppTaskText)
+    {
+        List<ArdAppTaskText> list = ardAppTaskTextService.selectArdAppTaskTextList(ardAppTaskText);
+        ExcelUtil<ArdAppTaskText> util = new ExcelUtil<ArdAppTaskText>(ArdAppTaskText.class);
+        util.exportExcel(response, list, "app浠诲姟鎻忚堪鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇app浠诲姟鎻忚堪璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('task:text:query')")
+    @GetMapping(value = "/{userId}")
+    public AjaxResult getInfo(@PathVariable("userId") String userId)
+    {
+        return success(ardAppTaskTextService.selectArdAppTaskTextByUserId(userId));
+    }
+
+    /**
+     * 鏂板app浠诲姟鎻忚堪
+     */
+    @PreAuthorize("@ss.hasPermi('task:text:add')")
+    @Log(title = "app浠诲姟鎻忚堪", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ArdAppTaskText ardAppTaskText)
+    {
+        return toAjax(ardAppTaskTextService.insertArdAppTaskText(ardAppTaskText));
+    }
+
+    /**
+     * 淇敼app浠诲姟鎻忚堪
+     */
+    @PreAuthorize("@ss.hasPermi('task:text:edit')")
+    @Log(title = "app浠诲姟鎻忚堪", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ArdAppTaskText ardAppTaskText)
+    {
+        return toAjax(ardAppTaskTextService.updateArdAppTaskText(ardAppTaskText));
+    }
+
+    /**
+     * 鍒犻櫎app浠诲姟鎻忚堪
+     */
+    @PreAuthorize("@ss.hasPermi('task:text:remove')")
+    @Log(title = "app浠诲姟鎻忚堪", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{userIds}")
+    public AjaxResult remove(@PathVariable String[] userIds)
+    {
+        return toAjax(ardAppTaskTextService.deleteArdAppTaskTextByUserIds(userIds));
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/tasktext/domain/ArdAppTaskText.java b/ard-work/src/main/java/com/ruoyi/app/tasktext/domain/ArdAppTaskText.java
new file mode 100644
index 0000000..fc75e3e
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/tasktext/domain/ArdAppTaskText.java
@@ -0,0 +1,65 @@
+package com.ruoyi.app.tasktext.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * app浠诲姟鎻忚堪瀵硅薄 ard_app_task_text
+ * 
+ * @author ard
+ * @date 2023-07-22
+ */
+public class ArdAppTaskText extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 鐢ㄦ埛ID */
+    @Excel(name = "鐢ㄦ埛ID")
+    private String userId;
+
+    /** app浠诲姟鎻忚堪 */
+    @Excel(name = "app浠诲姟鎻忚堪")
+    private String text;
+
+    /** ID */
+    private String id;
+
+    public void setUserId(String userId) 
+    {
+        this.userId = userId;
+    }
+
+    public String getUserId() 
+    {
+        return userId;
+    }
+    public void setText(String text) 
+    {
+        this.text = text;
+    }
+
+    public String getText() 
+    {
+        return text;
+    }
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("userId", getUserId())
+            .append("text", getText())
+            .append("id", getId())
+            .toString();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/tasktext/mapper/ArdAppTaskTextMapper.java b/ard-work/src/main/java/com/ruoyi/app/tasktext/mapper/ArdAppTaskTextMapper.java
new file mode 100644
index 0000000..bba0652
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/tasktext/mapper/ArdAppTaskTextMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.app.tasktext.mapper;
+
+import java.util.List;
+import com.ruoyi.app.tasktext.domain.ArdAppTaskText;
+
+/**
+ * app浠诲姟鎻忚堪Mapper鎺ュ彛
+ * 
+ * @author ard
+ * @date 2023-07-22
+ */
+public interface ArdAppTaskTextMapper 
+{
+    /**
+     * 鏌ヨapp浠诲姟鎻忚堪
+     * 
+     * @param userId app浠诲姟鎻忚堪涓婚敭
+     * @return app浠诲姟鎻忚堪
+     */
+    public ArdAppTaskText selectArdAppTaskTextByUserId(String userId);
+
+    /**
+     * 鏌ヨapp浠诲姟鎻忚堪鍒楄〃
+     * 
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return app浠诲姟鎻忚堪闆嗗悎
+     */
+    public List<ArdAppTaskText> selectArdAppTaskTextList(ArdAppTaskText ardAppTaskText);
+
+    /**
+     * 鏂板app浠诲姟鎻忚堪
+     * 
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return 缁撴灉
+     */
+    public int insertArdAppTaskText(ArdAppTaskText ardAppTaskText);
+
+    /**
+     * 淇敼app浠诲姟鎻忚堪
+     * 
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return 缁撴灉
+     */
+    public int updateArdAppTaskText(ArdAppTaskText ardAppTaskText);
+
+    /**
+     * 鍒犻櫎app浠诲姟鎻忚堪
+     * 
+     * @param userId app浠诲姟鎻忚堪涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskTextByUserId(String userId);
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟鎻忚堪
+     * 
+     * @param userIds 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskTextByUserIds(String[] userIds);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/tasktext/service/IArdAppTaskTextService.java b/ard-work/src/main/java/com/ruoyi/app/tasktext/service/IArdAppTaskTextService.java
new file mode 100644
index 0000000..45f3f49
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/tasktext/service/IArdAppTaskTextService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.app.tasktext.service;
+
+import java.util.List;
+import com.ruoyi.app.tasktext.domain.ArdAppTaskText;
+
+/**
+ * app浠诲姟鎻忚堪Service鎺ュ彛
+ * 
+ * @author ard
+ * @date 2023-07-22
+ */
+public interface IArdAppTaskTextService 
+{
+    /**
+     * 鏌ヨapp浠诲姟鎻忚堪
+     * 
+     * @param userId app浠诲姟鎻忚堪涓婚敭
+     * @return app浠诲姟鎻忚堪
+     */
+    public ArdAppTaskText selectArdAppTaskTextByUserId(String userId);
+
+    /**
+     * 鏌ヨapp浠诲姟鎻忚堪鍒楄〃
+     * 
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return app浠诲姟鎻忚堪闆嗗悎
+     */
+    public List<ArdAppTaskText> selectArdAppTaskTextList(ArdAppTaskText ardAppTaskText);
+
+    /**
+     * 鏂板app浠诲姟鎻忚堪
+     * 
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return 缁撴灉
+     */
+    public int insertArdAppTaskText(ArdAppTaskText ardAppTaskText);
+
+    /**
+     * 淇敼app浠诲姟鎻忚堪
+     * 
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return 缁撴灉
+     */
+    public int updateArdAppTaskText(ArdAppTaskText ardAppTaskText);
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟鎻忚堪
+     * 
+     * @param userIds 闇�瑕佸垹闄ょ殑app浠诲姟鎻忚堪涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskTextByUserIds(String[] userIds);
+
+    /**
+     * 鍒犻櫎app浠诲姟鎻忚堪淇℃伅
+     * 
+     * @param userId app浠诲姟鎻忚堪涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteArdAppTaskTextByUserId(String userId);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/app/tasktext/service/impl/ArdAppTaskTextServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/tasktext/service/impl/ArdAppTaskTextServiceImpl.java
new file mode 100644
index 0000000..97e94d4
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/app/tasktext/service/impl/ArdAppTaskTextServiceImpl.java
@@ -0,0 +1,89 @@
+package com.ruoyi.app.tasktext.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.app.tasktext.mapper.ArdAppTaskTextMapper;
+import com.ruoyi.app.tasktext.domain.ArdAppTaskText;
+import com.ruoyi.app.tasktext.service.IArdAppTaskTextService;
+
+/**
+ * app浠诲姟鎻忚堪Service涓氬姟灞傚鐞�
+ *
+ * @author ard
+ * @date 2023-07-22
+ */
+@Service
+public class ArdAppTaskTextServiceImpl implements IArdAppTaskTextService {
+    @Autowired
+    private ArdAppTaskTextMapper ardAppTaskTextMapper;
+
+    /**
+     * 鏌ヨapp浠诲姟鎻忚堪
+     *
+     * @param userId app浠诲姟鎻忚堪涓婚敭
+     * @return app浠诲姟鎻忚堪
+     */
+    @Override
+    public ArdAppTaskText selectArdAppTaskTextByUserId(String userId) {
+        return ardAppTaskTextMapper.selectArdAppTaskTextByUserId(userId);
+    }
+
+    /**
+     * 鏌ヨapp浠诲姟鎻忚堪鍒楄〃
+     *
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return app浠诲姟鎻忚堪
+     */
+    @Override
+    public List<ArdAppTaskText> selectArdAppTaskTextList(ArdAppTaskText ardAppTaskText) {
+        return ardAppTaskTextMapper.selectArdAppTaskTextList(ardAppTaskText);
+    }
+
+    /**
+     * 鏂板app浠诲姟鎻忚堪
+     *
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertArdAppTaskText(ArdAppTaskText ardAppTaskText) {
+                ardAppTaskText.setUserId(SecurityUtils.getUserId());
+            return ardAppTaskTextMapper.insertArdAppTaskText(ardAppTaskText);
+    }
+
+    /**
+     * 淇敼app浠诲姟鎻忚堪
+     *
+     * @param ardAppTaskText app浠诲姟鎻忚堪
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateArdAppTaskText(ArdAppTaskText ardAppTaskText) {
+        return ardAppTaskTextMapper.updateArdAppTaskText(ardAppTaskText);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎app浠诲姟鎻忚堪
+     *
+     * @param userIds 闇�瑕佸垹闄ょ殑app浠诲姟鎻忚堪涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteArdAppTaskTextByUserIds(String[] userIds) {
+        return ardAppTaskTextMapper.deleteArdAppTaskTextByUserIds(userIds);
+    }
+
+    /**
+     * 鍒犻櫎app浠诲姟鎻忚堪淇℃伅
+     *
+     * @param userId app浠诲姟鎻忚堪涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteArdAppTaskTextByUserId(String userId) {
+        return ardAppTaskTextMapper.deleteArdAppTaskTextByUserId(userId);
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java
index 81fa418..85f91d9 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java
@@ -10,6 +10,7 @@
 import io.minio.messages.Item;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.multipart.MultipartFile;
+
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -151,15 +152,14 @@
         boolean exsit = exitsBucket(bucketName);
         if (!exsit) {
             boolean bucket = createBucket(bucketName);
-            if(bucket)
-            {
+            if (bucket) {
                 log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
             }
         }
         //鏂囦欢鍚�
         String originalFilename = file.getOriginalFilename();
         //鏂扮殑鏂囦欢鍚�
-        String fileName = IdUtils.fastSimpleUUID()+"_"+ originalFilename;
+        String fileName = IdUtils.fastSimpleUUID() + "_" + originalFilename;
         try {
             InputStream inputStream = file.getInputStream();
             /*涓婁紶瀵硅薄*/
@@ -180,7 +180,59 @@
                     .method(Method.GET)
                     .build();
             String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
-            String ObjectUrl  = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            return ObjectUrl;
+        } catch (Exception ex) {
+            log.error("涓婁紶瀵硅薄杩斿洖url寮傚父锛�" + ex.getMessage());
+        }
+        return "";
+    }
+
+    /**
+     * @鎻忚堪 涓婁紶MultipartFile鏂囦欢杩斿洖url
+     * @鍙傛暟 [bucketName, file]
+     * @杩斿洖鍊� java.lang.String
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/5/18 12:16
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    public static String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
+        //鍒ゆ柇鏂囦欢鏄惁涓虹┖
+        if (null == file || 0 == file.getSize()) {
+            log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
+        }
+        boolean exsit = exitsBucket(bucketName);
+        if (!exsit) {
+            boolean bucket = createBucket(bucketName);
+            if (bucket) {
+                log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
+            }
+        }
+        //鏂囦欢鍚�
+        String originalFilename = file.getOriginalFilename();
+        //鏂扮殑鏂囦欢鍚�
+        String fileName = folder + "/" + IdUtils.fastSimpleUUID() + "_" + originalFilename;
+        try {
+            InputStream inputStream = file.getInputStream();
+            /*涓婁紶瀵硅薄*/
+            PutObjectArgs putObjectArgs = PutObjectArgs
+                    .builder()
+                    .bucket(bucketName)
+                    .object(fileName)
+                    .stream(inputStream, file.getSize(), -1)
+                    .contentType(file.getContentType())
+                    .build();
+            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            inputStream.close();
+            /*鑾峰彇url*/
+            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
+                    .builder()
+                    .bucket(bucketName)
+                    .object(fileName)
+                    .method(Method.GET)
+                    .build();
+            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
             return ObjectUrl;
         } catch (Exception ex) {
             log.error("涓婁紶瀵硅薄杩斿洖url寮傚父锛�" + ex.getMessage());
@@ -435,14 +487,14 @@
     }
 
     /**
-     *@鎻忚堪 鑾峰彇妗朵腑鎵�鏈夊璞�
-     *@鍙傛暟 [bucketName]
-     *@杩斿洖鍊� java.lang.Iterable<io.minio.Result<io.minio.messages.Item>>
-     *@鍒涘缓浜� 鍒樿嫃涔�
-     *@鍒涘缓鏃堕棿 2023/2/6 10:32
-     *@淇敼浜哄拰鍏跺畠淇℃伅
+     * @鎻忚堪 鑾峰彇妗朵腑鎵�鏈夊璞�
+     * @鍙傛暟 [bucketName]
+     * @杩斿洖鍊� java.lang.Iterable<io.minio.Result < io.minio.messages.Item>>
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/2/6 10:32
+     * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName)  {
+    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
         Iterable<Result<Item>> listObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder()
                 .bucket(bucketName)
                 .recursive(true)
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
index 9a417f4..b28201b 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
@@ -59,7 +59,7 @@
 
     @Override
     public String addPath(String name, String rtspPath, String mode) {
-        String rtspUrl = "rtsp://" + mediamtxHost + ":8554/";
+        String rtspUrl = "rtsp://" + mediamtxHost + ":7554/";
         Conf mediaInfo = new Conf();
         //-vcodec libx264 //鎸囧畾瑙嗛缂栫爜鍣ㄤ负 libx264锛屼娇鐢� H.264 缂栫爜鏍煎紡杩涜瑙嗛鍘嬬缉
         //-preset ultrafast  //--preset鐨勫弬鏁颁富瑕佽皟鑺傜紪鐮侀�熷害鍜岃川閲忕殑骞宠 锛屾湁ultrafast锛堣浆鐮侀�熷害鏈�蹇紝瑙嗛寰�寰�涔熸渶妯$硦锛夈�乻uperfast銆乿eryfast銆乫aster銆乫ast銆乵edium銆乻low銆乻lower銆乿eryslow銆乸lacebo杩�10涓�夐」锛屼粠蹇埌鎱�
@@ -223,7 +223,7 @@
             String name = item.getName();
             info.setName(name);
             //RTSP鎾斁鍦板潃
-            String rtspUrl = "rtsp://" + mediamtxHost + ":8554/" + name;
+            String rtspUrl = "rtsp://" + mediamtxHost + ":7554/" + name;
             info.setRtspUrl(rtspUrl);
             Source source = item.getSource();
             if (source == null) {
diff --git a/ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java b/ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java
index 1fd77d9..fd62a92 100644
--- a/ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java
+++ b/ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java
@@ -38,13 +38,7 @@
         return AjaxResult.success(token);
     }
 
-    @PostMapping("/uploadPic")
-    @ApiOperation("涓婁紶鐢ㄦ埛澶村儚")
-    public AjaxResult uploadPic(MultipartFile file)
-    {
-        String url = MinioUtils.putObjectAndGetUrl("useravatar", file);
-        return AjaxResult.success(url);
-    }
+
 
     @PostMapping("/checkOnline")
     @ApiOperation("鏌ヨ鐢ㄦ埛鍦ㄧ嚎鐘舵��")
diff --git a/ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java b/ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java
index fa55088..1666afa 100644
--- a/ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java
@@ -67,6 +67,18 @@
         return onlineMap;
     }
 
+    @Override
+    public Boolean checkOnline(String userId) {
+        RongCloudParam param = new RongCloudParam();
+        param.setUserId(userId);
+        Map isOnline = rongCloudClient.checkOnline(getRongCloudHead(), param);
+        if (isOnline.get("status").equals("1")) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
     /**
      * 鑾峰彇铻嶄簯绛惧悕淇℃伅
      */
@@ -76,11 +88,11 @@
         String nonce = RandomStringUtils.randomNumeric(18);
         String timestamp = String.valueOf(new Date().getTime());
         String signature = DigestUtils.sha1Hex(appSecret + nonce + timestamp);//App Secret + Nonce + T
-        Map<String, Object> headerMap=new HashMap<>();
-        headerMap.put("App-Key",appKey);
-        headerMap.put("Nonce",nonce);
-        headerMap.put("Timestamp",timestamp);
-        headerMap.put("Signature",signature);
+        Map<String, Object> headerMap = new HashMap<>();
+        headerMap.put("App-Key", appKey);
+        headerMap.put("Nonce", nonce);
+        headerMap.put("Timestamp", timestamp);
+        headerMap.put("Signature", signature);
         return headerMap;
     }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/rongcloud/service/RongCloudService.java b/ard-work/src/main/java/com/ruoyi/rongcloud/service/RongCloudService.java
index 1cdeac8..3d40277 100644
--- a/ard-work/src/main/java/com/ruoyi/rongcloud/service/RongCloudService.java
+++ b/ard-work/src/main/java/com/ruoyi/rongcloud/service/RongCloudService.java
@@ -14,4 +14,5 @@
 
     String getToken(String userId,String name);
     Map checkOnline(List<String>userIds);
+    Boolean checkOnline(String userId);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
index b598ce0..d18f016 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
@@ -2,6 +2,9 @@
 
 import java.text.Collator;
 import java.util.*;
+import java.util.*;
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.alibaba.fastjson2.JSON;
@@ -10,9 +13,12 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.sy.domain.ArdSyUser;
+import com.ruoyi.sy.gps31.PushClientImplPosition;
 import com.ruoyi.sy.service.IArdSyUserService;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.utils.httpclient.SYCarClient;
 import com.ruoyi.utils.result.Results;
 import io.swagger.annotations.Api;
@@ -29,6 +35,8 @@
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
 import org.springframework.web.multipart.MultipartFile;
+
+import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
 
 /**
  * 涓変竴杞﹁締Controller
@@ -54,6 +62,40 @@
     private IArdSyUserService iArdSyUserService;
 
 
+    private ArdSyCarController ardSyCarController;
+
+    @PostConstruct
+    public void init(){
+        ardSyCarController = this;
+        ardSyCarController.sysConfigService = this.sysConfigService;
+        ardSyCarController.iArdSyUserService = this.iArdSyUserService;
+
+        SysConfig config = new SysConfig();
+        config.setConfigKey("syCarPT");
+        List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config);
+        String syURL = "";
+        if(sysConfigResult.size() == 0){
+            return;
+        }else{
+            syURL = sysConfigResult.get(0).getConfigValue();
+        }
+        String ip = syURL.split(":")[1].replace("//", "");
+        List<ArdSyUser> ardSyUserList = iArdSyUserService.selectSyUser();
+        //杞﹁締瀹炴椂浣嶇疆绾跨▼
+        PushClientImplPosition pushClientImplPosition = new PushClientImplPosition(ip,ardSyUserList.get(0).getUserId(),ardSyUserList.get(0).getPassword());
+        Thread pushClientImplPositionThread = new Thread(pushClientImplPosition);
+        pushClientImplPositionThread.start();
+
+        Date date = new Date();
+        Timer carPositionTimer = new Timer();//瀹氭椂鎺ㄩ�佸疄鏃朵綅缃�
+        TimerTask carPositionTask =new TimerTask(){
+            public void run(){
+                ardSyCarService.sendArdSyCarPosition();
+            }
+        };
+        carPositionTimer.scheduleAtFixedRate(carPositionTask,date,3*1000);//鍚敤
+    }
+
     /**
      * 鏌ヨ涓変竴杞﹁締鍒楄〃
      */
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
new file mode 100644
index 0000000..ac30783
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
@@ -0,0 +1,19 @@
+package com.ruoyi.sy.gps31;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class PositionContainer {
+
+    private static Map<String, Map<String,Map<String,Object>>> deptPositionMap = new HashMap();//渚濋儴闂ㄥ瓨鏀惧疄鏂借溅杈嗕綅缃�:deptId锛宑arId锛岃溅杈嗕綅缃�
+
+    public static Map<String, Map<String, Map<String,Object>>> getDeptPositionMap() {
+        return deptPositionMap;
+    }
+
+    public static void setDeptPositionMap(Map<String, Map<String, Map<String,Object>>> deptPositionMap) {
+        PositionContainer.deptPositionMap = deptPositionMap;
+    }
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImpl.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImpl.java
new file mode 100644
index 0000000..ba6bc30
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImpl.java
@@ -0,0 +1,109 @@
+/**
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2020</p>
+ * <p>Company: www.31gps.net</p>
+ * @author chencq
+ * @version 1.0
+ */
+package com.ruoyi.sy.gps31;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson2.JSON;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.gps31.push.netty.PushClient;
+import com.gps31.push.netty.PushMsg;
+import com.gps31.push.netty.client.TcpClient;
+import com.gps31.push.util.MapUtil;
+/**
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2020</p>
+ * <p>Company: www.31gps.net</p>
+ * @author chencq
+ * @version 1.0
+ */
+public class PushClientImpl extends PushClient{
+    private static final Log log = LogFactory.getLog(PushClientImpl.class);
+
+    @Override
+    public void messageReceived(TcpClient tcpClient, PushMsg pushMsg)
+            throws Exception {
+        if("8001".equals(pushMsg.getCmd())) {//鐧诲綍搴旂瓟
+            String rspResult = MapUtil.getStrVal(pushMsg.getJsonMap(),"rspResult","1");
+            if("0".equals(rspResult)) {//鐧诲綍鎴愬姛锛屽畾闃呭姩鎬佹秷鎭�
+                Map<String,Object> map = new HashMap<String,Object>();
+                map.put("seq", "1");
+                map.put("action", "add");
+                map.put("msgIds", JSON.toJSONString(getSubCmdSet()));
+                PushMsg subMsg = getInstance("0003",map);
+                sendMsg(subMsg);
+            }
+        }else if("8002".equals(pushMsg.getCmd())){//蹇冭烦搴旂瓟
+
+        }else if("8003".equals(pushMsg.getCmd())){//璁㈤槄鍔ㄦ�佹秷鎭簲绛�
+            String rspResult = MapUtil.getStrVal(pushMsg.getJsonMap(),"rspResult","1");
+            log.error(String.format("    璁㈤槄搴旂瓟:%s", "0".equals(rspResult)?"鎴愬姛":"澶辫触"));
+        }else if("0200".equals(pushMsg.getCmd())) {//瀹氫綅淇℃伅
+            Map<String,Object> gpsMap = pushMsg.getJsonMap();
+            String carName = MapUtil.getStrVal(gpsMap, "carName","");//鑾峰彇杞︾墝鍙�
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            System.out.println(sdf.format(new Date()));
+            log.error(String.format("   ---->鏀跺埌瀹氫綅鏁版嵁:%s",JSON.toJSONString(gpsMap)));
+            /**
+             *
+             * 璇峰姞鍏ヤ笁鏂归泦鎴愭柟鐨勪笟鍔¢�昏緫
+             *
+             */
+        }else if("0300".equals(pushMsg.getCmd())) {//鎶ヨ娑堟伅
+            Map<String,Object> alarmMap = pushMsg.getJsonMap();
+            String carName = MapUtil.getStrVal(alarmMap, "carName","");//鑾峰彇杞︾墝鍙�
+            log.error(String.format("   ---->鏀跺埌鎶ヨ鏁版嵁:%s",JSON.toJSONString(alarmMap)));
+            /**
+             *
+             * 璇峰姞鍏ヤ笁鏂归泦鎴愭柟鐨勪笟鍔¢�昏緫
+             *
+             */
+        }else if("0401".equals(pushMsg.getCmd())) {//閫忎紶娑堟伅
+            Map<String,Object> dataMap = pushMsg.getJsonMap();
+            String carName = MapUtil.getStrVal(dataMap, "carName","");//鑾峰彇杞︾墝鍙�
+            log.error(String.format("   ---->鏀跺埌閫忎紶鏁版嵁:%s",JSON.toJSONString(dataMap)));
+            /**
+             *
+             * 璇峰姞鍏ヤ笁鏂归泦鎴愭柟鐨勪笟鍔¢�昏緫
+             *
+             */
+        }
+    }
+
+    public static void main(String[] args) {
+        try {
+            PushClientImpl client = new PushClientImpl();
+            client.setLog(true);//鏄惁鎵撳嵃鏄庢枃
+            //client.setLogBytes(true);//鏄惁鎵撳嵃缃戠粶瀛楄妭娴�
+            //client.setHost("106.14.186.44");//鏈嶅姟鍣↖P
+            client.setHost("116.182.15.14");//鏈嶅姟鍣↖P
+            client.setPort(10100);//鏈嶅姟鍣ㄧ鍙�
+            //client.setUserName("ys_admin");//绯荤粺鐢ㄦ埛鍚�
+            //client.setPwd("123456");//绯荤粺鐢ㄦ埛瀵嗙爜
+            //client.setUserName("admin_dqard");//绯荤粺鐢ㄦ埛鍚�
+            //client.setUserName("dqard");//绯荤粺鐢ㄦ埛鍚�
+            //client.setPwd("123456");//绯荤粺鐢ㄦ埛瀵嗙爜
+            client.setUserName("admin");//绯荤粺鐢ㄦ埛鍚�
+            client.setPwd("654321");//绯荤粺鐢ㄦ埛瀵嗙爜
+            //client.setSubMsgIds("0200|0300");//璁㈤槄鐨勫姩鎬佹秷鎭紝澶氫釜鍔ㄦ�佹秷鎭娇鐢▅杈熷垎锛屽綋鍓嶇ず渚嬫槸璁㈤槄  瀹氫綅娑堟伅(0x0200)鍜屾姤璀︽秷鎭�(0x0300)
+            client.setSubMsgIds("0200");//璁㈤槄鐨勫姩鎬佹秷鎭紝澶氫釜鍔ㄦ�佹秷鎭娇鐢▅杈熷垎锛屽綋鍓嶇ず渚嬫槸璁㈤槄  瀹氫綅娑堟伅(0x0200)鍜屾姤璀︽秷鎭�(0x0300)
+            client.setDesc("娴嬭瘯瀹㈡埛绔�");//瀹㈡埛绔殑鎻忚堪锛�
+            client.start();
+            while(true) {
+                Thread.sleep(1000);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
new file mode 100644
index 0000000..a08974d
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -0,0 +1,160 @@
+/**
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2020</p>
+ * <p>Company: www.31gps.net</p>
+ * @author chencq
+ * @version 1.0
+ */
+package com.ruoyi.sy.gps31;
+
+import com.alibaba.fastjson2.JSON;
+import com.gps31.push.netty.PushClient;
+import com.gps31.push.netty.PushMsg;
+import com.gps31.push.netty.client.TcpClient;
+import com.gps31.push.util.MapUtil;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.sy.service.impl.ArdSyCarServiceImpl;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2020</p>
+ * <p>Company: www.31gps.net</p>
+ * @author chencq
+ * @version 1.0
+ */
+public class PushClientImplPosition extends PushClient implements Runnable {
+
+    private static final Log log = LogFactory.getLog(PushClientImplPosition.class);
+
+    private String ip;
+
+    private String userId;
+
+    private String password;
+
+    public PushClientImplPosition(String ip, String userId, String password) {
+        this.ip = ip;
+        this.userId = userId;
+        this.password = password;
+    }
+
+    public PushClientImplPosition() {
+
+    }
+
+    @Override
+    public void messageReceived(TcpClient tcpClient, PushMsg pushMsg)
+            throws Exception {
+        if("8001".equals(pushMsg.getCmd())) {//鐧诲綍搴旂瓟
+            String rspResult = MapUtil.getStrVal(pushMsg.getJsonMap(),"rspResult","1");
+            if("0".equals(rspResult)) {//鐧诲綍鎴愬姛锛屽畾闃呭姩鎬佹秷鎭�
+                Map<String,Object> map = new HashMap<String,Object>();
+                map.put("seq", "1");
+                map.put("action", "add");
+                map.put("msgIds", JSON.toJSONString(getSubCmdSet()));
+                PushMsg subMsg = getInstance("0003",map);
+                sendMsg(subMsg);
+            }
+        }else if("8002".equals(pushMsg.getCmd())){//蹇冭烦搴旂瓟
+
+        }else if("8003".equals(pushMsg.getCmd())){//璁㈤槄鍔ㄦ�佹秷鎭簲绛�
+            String rspResult = MapUtil.getStrVal(pushMsg.getJsonMap(),"rspResult","1");
+            //log.error(String.format("    璁㈤槄搴旂瓟:%s", "0".equals(rspResult)?"鎴愬姛":"澶辫触"));
+        }else if("0200".equals(pushMsg.getCmd())) {//瀹氫綅淇℃伅
+            Map<String,Object> gpsMap = pushMsg.getJsonMap();
+            /*String carName = MapUtil.getStrVal(gpsMap, "carName","");//鑾峰彇杞︾墝鍙�
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            System.out.println(sdf.format(new Date()));
+            log.error(String.format("   ---->鏀跺埌瀹氫綅鏁版嵁:%s",JSON.toJSONString(gpsMap)));*/
+            String carId = (String)gpsMap.get("carId");
+            Map<String,Object> result = ((ArdSyCarServiceImpl)SpringUtils.getBean("ardSyCarServiceImpl")).getArdSyCarAndDeptByCarId(carId);//鏌ヨ杞﹁締鍙婇儴闂�
+            if(result != null){
+                gpsMap.putAll(result);
+                String ancestors = (String) gpsMap.get("ancestors");//鑾峰彇鐖剁骇閮ㄩ棬
+                String[] ancestorsArray = ancestors.split(",");
+                if(ancestorsArray.length == 1){//鏈�楂樼骇閮ㄩ棬
+                    String deptId = String.valueOf(gpsMap.get("deptId"));
+                    Map<String,Map<String,Object>> deptMap = PositionContainer.getDeptPositionMap().get(deptId);
+                    if(deptMap == null){
+                        deptMap = new HashMap();
+                    }
+                    deptMap.put((String)gpsMap.get("carId"),gpsMap);//棣栨鍔犲叆瀹瑰櫒锛屽啀娆″幓閲�
+                    PositionContainer.getDeptPositionMap().put(deptId,deptMap);
+                }else{
+                    //鍔犲叆鏈儴闂ㄥ鍣�
+                    String deptId = String.valueOf(gpsMap.get("deptId"));
+                    Map<String,Map<String,Object>> deptMap = PositionContainer.getDeptPositionMap().get(deptId);
+                    if(deptMap == null){
+                        deptMap = new HashMap();
+                    }
+                    deptMap.put((String)gpsMap.get("carId"),gpsMap);//棣栨鍔犲叆瀹瑰櫒锛屽啀娆″幓閲�
+                    PositionContainer.getDeptPositionMap().put(deptId,deptMap);
+                    //鍔犲叆鐖剁骇閮ㄩ棬瀹瑰櫒
+                    for(int i = 1;i <= ancestorsArray.length - 1;i++){
+                        String deptIdp = String.valueOf(gpsMap.get(ancestorsArray[i]));
+                        Map<String,Map<String,Object>> deptMapp = PositionContainer.getDeptPositionMap().get(deptIdp);
+                        if(deptMapp == null){
+                            deptMapp = new HashMap();
+                        }
+                        deptMapp.put((String)gpsMap.get("carId"),gpsMap);//棣栨鍔犲叆瀹瑰櫒锛屽啀娆″幓閲�
+                        PositionContainer.getDeptPositionMap().put(deptIdp,deptMap);
+                    }
+                }
+            }
+            /**
+             *
+             * 璇峰姞鍏ヤ笁鏂归泦鎴愭柟鐨勪笟鍔¢�昏緫
+             *
+             */
+        }else if("0300".equals(pushMsg.getCmd())) {//鎶ヨ娑堟伅
+            Map<String,Object> alarmMap = pushMsg.getJsonMap();
+            String carName = MapUtil.getStrVal(alarmMap, "carName","");//鑾峰彇杞︾墝鍙�
+            //log.error(String.format("   ---->鏀跺埌鎶ヨ鏁版嵁:%s",JSON.toJSONString(alarmMap)));
+            /**
+             *
+             * 璇峰姞鍏ヤ笁鏂归泦鎴愭柟鐨勪笟鍔¢�昏緫
+             *
+             */
+        }else if("0401".equals(pushMsg.getCmd())) {//閫忎紶娑堟伅
+            Map<String,Object> dataMap = pushMsg.getJsonMap();
+            String carName = MapUtil.getStrVal(dataMap, "carName","");//鑾峰彇杞︾墝鍙�
+            //log.error(String.format("   ---->鏀跺埌閫忎紶鏁版嵁:%s",JSON.toJSONString(dataMap)));
+            /**
+             *
+             * 璇峰姞鍏ヤ笁鏂归泦鎴愭柟鐨勪笟鍔¢�昏緫
+             *
+             */
+        }
+    }
+
+    public void sendMassage() {
+        try {
+            PushClientImplPosition client = new PushClientImplPosition();
+            client.setLog(false);//鏄惁鎵撳嵃鏄庢枃
+            client.setHost(this.ip);//鏈嶅姟鍣↖P
+            client.setPort(10100);//鏈嶅姟鍣ㄧ鍙�
+            client.setUserName(this.userId);//绯荤粺鐢ㄦ埛鍚�
+            client.setPwd(this.password);//绯荤粺鐢ㄦ埛瀵嗙爜
+            client.setSubMsgIds("0200");//璁㈤槄鐨勫姩鎬佹秷鎭紝澶氫釜鍔ㄦ�佹秷鎭娇鐢▅杈熷垎锛屽綋鍓嶇ず渚嬫槸璁㈤槄  瀹氫綅娑堟伅(0x0200)鍜屾姤璀︽秷鎭�(0x0300)
+            client.setDesc("娴嬭瘯瀹㈡埛绔�");//瀹㈡埛绔殑鎻忚堪锛�
+            client.start();
+            while(true) {
+                Thread.sleep(1000);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void run() {
+        sendMassage();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java
index 77c169d..d5ea855 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java
@@ -1,6 +1,8 @@
 package com.ruoyi.sy.mapper;
 
 import java.util.List;
+import java.util.Map;
+
 import com.ruoyi.sy.domain.ArdSyCar;
 import org.apache.ibatis.annotations.Param;
 
@@ -76,4 +78,9 @@
      * @return
      */
     List<ArdSyCar> carListById(String id);
+
+    /**
+     * 鏍规嵁杞﹁締id鏌ヨ涓変竴杞﹁締鍙婂搴旈儴闂�
+     */
+    public Map<String, Object> getArdSyCarAndDeptByCarId(String carId);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyUserMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyUserMapper.java
index 79b167b..bf59b58 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyUserMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyUserMapper.java
@@ -81,4 +81,6 @@
     Map<String,Object> selectArdSyUserByUsersId(Integer usersId);
 
     ArdSyUser userById(String id);
+
+    public List<ArdSyUser> selectSyUser();
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
index 5d6d65a..d8c32cb 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
@@ -83,6 +83,17 @@
      */
     public String uploadCarPicture(String id, MultipartFile carPicture);
 
+    List<ArdSyCar> carListById(String id);
+
+    /**
+     * 鏍规嵁杞﹁締id鏌ヨ涓変竴杞﹁締鍙婂搴旈儴闂�
+     */
+    public Map<String,Object> getArdSyCarAndDeptByCarId(String carId);
+
+    /**
+     * 鏍规嵁閮ㄩ棬鍙戦�佽溅杈嗗疄鏃朵綅缃�
+     */
+    public void sendArdSyCarPosition();
 //    List<ArdSyCar> getArdSyCarWithRightByCarIdList(List<String> carIdList);
     Results carListById(String id);
 
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyUserService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyUserService.java
index cdb48ea..7dc55ef 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyUserService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdSyUserService.java
@@ -77,4 +77,9 @@
     Map<String,Object> selectArdSyUserByUsersId(Integer usersId);
 
     ArdSyUser userById(String id);
+
+    /**
+     * 鏌ヨ鏈寕鎺ヤ笁涓�杞﹁締璐﹀彿瀵嗙爜
+     */
+    public List<ArdSyUser> selectSyUser();
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
index b14176e..800649c 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -8,13 +8,18 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.common.websocket.util.WebSocketUtils;
 import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
 import com.ruoyi.sy.domain.ArdSyUser;
+import com.ruoyi.sy.gps31.PositionContainer;
 import com.ruoyi.sy.mapper.ArdSyUserMapper;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.mapper.SysConfigMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.utils.httpclient.SYCarClient;
 import com.ruoyi.utils.result.Constants;
 import com.ruoyi.utils.result.Results;
@@ -33,6 +38,8 @@
 
 import javax.annotation.Resource;
 
+import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+
 /**
  * 涓変竴杞﹁締Service涓氬姟灞傚鐞�
  *
@@ -49,6 +56,9 @@
 
     @Resource
     private ArdSyUserMapper ardSyUserMapper;
+
+    @Resource
+    private SysUserMapper userMapper;
 
 
     /**
@@ -333,6 +343,7 @@
 //        return result;
 //    }
 
+
     @Override
     public Results carListById(String id) {
         try {
@@ -347,4 +358,25 @@
             return Results.error(e.toString());
         }
     }
+
+    @Override
+    public Map<String, Object> getArdSyCarAndDeptByCarId(String carId) {
+        Map<String, Object> result = ardSyCarMapper.getArdSyCarAndDeptByCarId(carId);
+        return result;
+    }
+
+    @Override
+    public void sendArdSyCarPosition() {
+        for(String key : ONLINE_USER_SESSIONS.keySet()){
+            SysUser sysUser = userMapper.selectUserById(key);
+            String deptId = String.valueOf(sysUser.getDeptId());
+            Map<String,Map<String,Object>> map = PositionContainer.getDeptPositionMap().get(deptId);
+            List<Map<String,Object>> positionList = (List<Map<String, Object>>) map.values();
+            if(positionList.size() != 0){
+                Map<Integer,Object> data = new HashMap();
+                data.put(30000,positionList);
+                WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(positionList));
+            }
+        }
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyUserServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyUserServiceImpl.java
index de6ae1b..0a97740 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyUserServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyUserServiceImpl.java
@@ -126,4 +126,10 @@
     public ArdSyUser userById(String id) {
         return ardSyUserMapper.userById(id);
     }
+
+    @Override
+    public List<ArdSyUser> selectSyUser() {
+        List<ArdSyUser> result = ardSyUserMapper.selectSyUser();
+        return result;
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
new file mode 100644
index 0000000..e146beb
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
@@ -0,0 +1,85 @@
+package com.ruoyi.test;
+
+/**
+ * @Description:
+ * @ClassName: ReadAccessDatabase
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�07鏈�21鏃�16:00:57
+ * @Version: 1.0
+ **/
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.sql.*;
+
+public class ReadAccessDatabase {
+
+    public static void main(String[] args) {
+        // 澶氫釜鏁版嵁搴撴枃浠惰矾寰�
+        String[] dbPaths = {
+                "D:\\mdb\\閬撹矾涓績绾�.mdb",
+                "D:\\mdb\\闃查鏋�-鐏屾湪.mdb",
+                // 娣诲姞鏇村鐨勬暟鎹簱鏂囦欢璺緞
+        };
+
+        // 閬嶅巻姣忎釜鏁版嵁搴撴枃浠�
+        for (String dbPath : dbPaths) {
+            readDataFromAccessDatabase(dbPath);
+        }
+    }
+
+    public static void readDataFromAccessDatabase(String dbPath) {
+        try {
+            // 鍔犺浇JDBC椹卞姩
+            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
+
+            // 杩炴帴Access鏁版嵁搴�
+            String url = "jdbc:ucanaccess://" + dbPath + ";encoding=gb2312;";
+            Connection connection = DriverManager.getConnection(url);
+            // 鑾峰彇鎵�鏈夎〃鐨勫厓鏁版嵁
+            DatabaseMetaData metaData = connection.getMetaData();
+            ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"});
+
+            // 閬嶅巻琛�
+            while (tables.next()) {
+                String tableName = tables.getString("TABLE_NAME");
+                if (!tableName.equals("閬撹矾涓績绾�")) {
+                    continue;
+                }
+                System.out.println("琛ㄥ悕: " + tableName);
+
+                // 鑾峰彇琛ㄧ殑瀛楁鍏冩暟鎹�
+ //               ResultSet column = metaData.getColumns(null, null, tableName, null);
+                // 閬嶅巻瀛楁
+//                while (column.next()) {
+//                    String columnName = column.getString("COLUMN_NAME");
+//                    System.out.println("瀛楁鍚�: " + columnName);
+//                }
+//                column.close();
+                // 鎵ц鏌ヨ鎿嶄綔
+                String sql = "SELECT * FROM " + tableName; // 鏇挎崲涓轰綘瑕佹煡璇㈢殑琛ㄥ悕
+                Statement statement = connection.createStatement();
+                ResultSet resultSet = statement.executeQuery(sql);
+                // 澶勭悊鏌ヨ缁撴灉
+                while (resultSet.next()) {
+                    // 璇诲彇姣忎竴琛屾暟鎹�
+                    String id = resultSet.getString(1); // 鏍规嵁琛ㄤ腑鐨勫垪鍚嶈幏鍙栨暟鎹�
+                    String name = resultSet.getString("缂栧彿");
+
+                    // 鍙互鏍规嵁鍏蜂綋鐨勮〃缁撴瀯缁х画鑾峰彇鍏朵粬瀛楁鐨勬暟鎹�
+
+                    // 鍦ㄨ繖閲屽鐞嗚幏鍙栧埌鐨勬暟鎹紝渚嬪杈撳嚭鍒版帶鍒跺彴鎴栦繚瀛樺埌闆嗗悎涓�
+                    System.out.println("ID: " + id + ", Name: " + name);
+                }
+                // 鍏抽棴杩炴帴
+                resultSet.close();
+                statement.close();
+            }
+            tables.close();
+            connection.close();
+        } catch (ClassNotFoundException | SQLException e) {
+            e.printStackTrace();
+        }
+    }
+}
+
diff --git a/ard-work/src/main/resources/mapper/app/ArdAppPositionMapper.xml b/ard-work/src/main/resources/mapper/app/ArdAppPositionMapper.xml
index 2905557..1967f0f 100644
--- a/ard-work/src/main/resources/mapper/app/ArdAppPositionMapper.xml
+++ b/ard-work/src/main/resources/mapper/app/ArdAppPositionMapper.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.app.mapper.ArdAppPositionMapper">
+<mapper namespace="com.ruoyi.app.position.mapper.ArdAppPositionMapper">
     <resultMap type="ArdAppPosition" id="ArdAppPositionResult">
         <result property="id" column="id"/>
         <result property="userId" column="user_id"/>
diff --git a/ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml b/ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml
new file mode 100644
index 0000000..53d6ecd
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.app.task.mapper.ArdAppTaskMapper">
+
+    <resultMap type="ArdAppTask" id="ArdAppTaskResult">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="text" column="text"/>
+        <result property="voice" column="voice"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="userId" column="user_id"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <resultMap id="ArdAppTaskArdAppTaskPicResult" type="ArdAppTask" extends="ArdAppTaskResult">
+        <collection property="ardAppTaskPicList" notNullColumn="sub_id" javaType="java.util.List"
+                    resultMap="ArdAppTaskPicResult"/>
+    </resultMap>
+    <resultMap id="ArdAppTaskArdAppTaskDetailResult" type="ArdAppTask" extends="ArdAppTaskResult">
+        <collection property="ardAppTaskDetailList" notNullColumn="sub_id" javaType="java.util.List"
+                    resultMap="ArdAppTaskDetailResult"/>
+    </resultMap>
+
+    <resultMap type="ArdAppTaskDetail" id="ArdAppTaskDetailResult">
+        <result property="id" column="sub_id"/>
+        <result property="name" column="sub_name"/>
+        <result property="longitude" column="sub_longitude"/>
+        <result property="latitude" column="sub_latitude"/>
+        <result property="altitude" column="sub_altitude"/>
+        <result property="userId" column="sub_user_id"/>
+        <result property="text" column="sub_text"/>
+        <result property="voice" column="sub_voice"/>
+        <result property="taskId" column="sub_task_id"/>
+    </resultMap>
+    <resultMap type="ArdAppTaskPic" id="ArdAppTaskPicResult">
+        <result property="id" column="sub_id"/>
+        <result property="taskId" column="sub_task_id"/>
+        <result property="picUrl" column="sub_pic_url"/>
+    </resultMap>
+
+    <sql id="selectArdAppTaskVo">
+        select c.id,
+               c.name,
+               c.text,
+               c.voice,
+               c.dept_id,
+               c.user_id,
+               c.create_by,
+               c.create_time,
+               c.update_by,
+               c.update_time
+        from ard_app_task c
+        left join sys_dept d on d.dept_id = c.dept_id
+        left join sys_user u on u.user_id = c.user_id
+    </sql>
+
+    <select id="selectArdAppTaskList" parameterType="ArdAppTask" resultMap="ArdAppTaskResult">
+        <include refid="selectArdAppTaskVo"/>
+        <where>
+            <if test="name != null  and name != ''">and name like '%'||#{name}||'%'</if>
+            <if test="text != null  and text != ''">and text = #{text}</if>
+            <if test="voice != null  and voice != ''">and voice = #{voice}</if>
+            <if test="deptId != null ">and (c.dept_id = #{deptId} OR c.dept_id IN ( SELECT t.dept_id FROM sys_dept t
+                WHERE cast(#{deptId} as varchar) = any(string_to_array(ancestors,',')) ))
+            </if>
+            <if test="userId != null  and userId != ''">and user_id = #{userId}</if>
+            <!-- 鏁版嵁鑼冨洿杩囨护 -->
+            ${params.dataScope}
+        </where>
+    </select>
+
+    <select id="selectArdAppTaskById" parameterType="String" resultMap="ArdAppTaskArdAppTaskPicResult">
+        select a.id,
+               a.name,
+               a.text,
+               a.voice,
+               a.dept_id,
+               a.user_id,
+               a.create_by,
+               a.create_time,
+               a.update_by,
+               a.update_time,
+               b.id      as sub_id,
+               b.task_id as sub_task_id,
+               b.pic_url as sub_pic_url
+        from ard_app_task a
+                 left join ard_app_task_pic b on b.task_id = a.id
+                 left join ard_app_task_detail c on c.task_id = a.id
+        where a.id = #{id}
+    </select>
+
+    <insert id="insertArdAppTask" parameterType="ArdAppTask">
+        insert into ard_app_task
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="name != null">name,</if>
+            <if test="text != null">text,</if>
+            <if test="voice != null">voice,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="name != null">#{name},</if>
+            <if test="text != null">#{text},</if>
+            <if test="voice != null">#{voice},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updateArdAppTask" parameterType="ArdAppTask">
+        update ard_app_task
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null">name = #{name},</if>
+            <if test="text != null">text = #{text},</if>
+            <if test="voice != null">voice = #{voice},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteArdAppTaskById" parameterType="String">
+        delete
+        from ard_app_task
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteArdAppTaskByIds" parameterType="String">
+        delete from ard_app_task where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="deleteArdAppTaskPicByTaskIds" parameterType="String">
+        delete from ard_app_task_pic where task_id in
+        <foreach item="taskId" collection="array" open="(" separator="," close=")">
+            #{taskId}
+        </foreach>
+    </delete>
+
+    <delete id="deleteArdAppTaskPicByTaskId" parameterType="String">
+        delete
+        from ard_app_task_pic
+        where task_id = #{taskId}
+    </delete>
+
+    <insert id="batchArdAppTaskPic">
+        insert into ard_app_task_pic( id, task_id, pic_url) values
+        <foreach item="item" index="index" collection="list" separator=",">
+            ( #{item.id}, #{item.taskId}, #{item.picUrl})
+        </foreach>
+    </insert>
+    <delete id="deleteArdAppTaskDetailByTaskIds" parameterType="String">
+        delete from ard_app_task_detail where task_id in
+        <foreach item="taskId" collection="array" open="(" separator="," close=")">
+            #{taskId}
+        </foreach>
+    </delete>
+
+    <delete id="deleteArdAppTaskDetailByTaskId" parameterType="String">
+        delete from ard_app_task_detail where task_id = #{taskId}
+    </delete>
+
+    <insert id="batchArdAppTaskDetail">
+        insert into ard_app_task_detail( id, name, longitude, latitude, altitude, user_id, text, voice, task_id) values
+        <foreach item="item" index="index" collection="list" separator=",">
+            ( #{item.id}, #{item.name}, #{item.longitude}, #{item.latitude}, #{item.altitude}, #{item.userId}, #{item.text}, #{item.voice}, #{item.taskId})
+        </foreach>
+    </insert>
+</mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/app/ArdAppTaskTextMapper.xml b/ard-work/src/main/resources/mapper/app/ArdAppTaskTextMapper.xml
new file mode 100644
index 0000000..a9dc727
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/app/ArdAppTaskTextMapper.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.app.tasktext.mapper.ArdAppTaskTextMapper">
+    
+    <resultMap type="ArdAppTaskText" id="ArdAppTaskTextResult">
+        <result property="userId"    column="user_id"    />
+        <result property="text"    column="text"    />
+        <result property="id"    column="id"    />
+    </resultMap>
+
+    <sql id="selectArdAppTaskTextVo">
+        select user_id, text, id from ard_app_task_text
+    </sql>
+
+    <select id="selectArdAppTaskTextList" parameterType="ArdAppTaskText" resultMap="ArdAppTaskTextResult">
+        <include refid="selectArdAppTaskTextVo"/>
+        <where>  
+            <if test="userId != null  and userId != ''"> and user_id = #{userId}</if>
+            <if test="text != null  and text != ''"> and text = #{text}</if>
+        </where>
+    </select>
+    
+    <select id="selectArdAppTaskTextByUserId" parameterType="String" resultMap="ArdAppTaskTextResult">
+        <include refid="selectArdAppTaskTextVo"/>
+        where user_id = #{userId}
+    </select>
+        
+    <insert id="insertArdAppTaskText" parameterType="ArdAppTaskText">
+        insert into ard_app_task_text
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null">user_id,</if>
+            <if test="text != null">text,</if>
+            <if test="id != null">id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="userId != null">#{userId},</if>
+            <if test="text != null">#{text},</if>
+            <if test="id != null">#{id},</if>
+         </trim>
+    </insert>
+
+    <update id="updateArdAppTaskText" parameterType="ArdAppTaskText">
+        update ard_app_task_text
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="text != null">text = #{text},</if>
+            <if test="id != null">id = #{id},</if>
+        </trim>
+        where user_id = #{userId}
+    </update>
+
+    <delete id="deleteArdAppTaskTextByUserId" parameterType="String">
+        delete from ard_app_task_text where user_id = #{userId}
+    </delete>
+
+    <delete id="deleteArdAppTaskTextByUserIds" parameterType="String">
+        delete from ard_app_task_text where user_id in 
+        <foreach item="userId" collection="array" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml
index 441a04f..b47d788 100644
--- a/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml
+++ b/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml
@@ -106,4 +106,12 @@
     <select id="carListById" parameterType="String" resultMap="ArdSyCarResult">
         select * from ard_sy_car where id = #{id}
     </select>
+    <select id="getArdSyCarAndDeptByCarId" parameterType="String" resultType="java.util.Map">
+        select asc0.id,asc0.car_id as "carId",coalesce(asc0.car_model,'') as "carModel",
+        coalesce(asc0.car_type,'') as "carType",coalesce(asc0.car_brand,'') as "carBrand",
+        asc0.dept_id as "deptId",asc0.car_picture as "carPicture",sd.ancestors,
+        sd.dept_name as "deptName" from ard_sy_car asc0
+        inner join sys_dept sd on asc0.dept_id = sd.dept_id
+        where asc0.car_id = #{carId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/sy/ArdSyUserMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdSyUserMapper.xml
index 7918055..d33f4d4 100644
--- a/ard-work/src/main/resources/mapper/sy/ArdSyUserMapper.xml
+++ b/ard-work/src/main/resources/mapper/sy/ArdSyUserMapper.xml
@@ -137,4 +137,7 @@
         <include refid="selectArdSyUserVo"/>
         where sys_user_id = #{id}
     </select>
+    <select id="selectSyUser" resultMap="ArdSyUserResult">
+        select distinct asu.user_id,asu.password from ard_sy_user asu
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lib/mediamtx/ffmpeg.exe b/lib/mediamtx/ffmpeg.exe
new file mode 100644
index 0000000..a562fa0
--- /dev/null
+++ b/lib/mediamtx/ffmpeg.exe
Binary files differ
diff --git a/lib/mediamtx/mediamtx.yml b/lib/mediamtx/mediamtx.yml
index 5b11bf9..ae9757b 100644
--- a/lib/mediamtx/mediamtx.yml
+++ b/lib/mediamtx/mediamtx.yml
@@ -40,17 +40,17 @@
 # Enable the HTTP API.
 api: yes
 # Address of the API listener.
-apiAddress: 192.168.1.227:9997
+apiAddress: 127.0.0.1:9997
 
 # Enable Prometheus-compatible metrics.
 metrics: no
 # Address of the metrics listener.
-metricsAddress: 192.168.1.227:9998
+metricsAddress: 127.0.0.1:9998
 
 # Enable pprof-compatible endpoint to monitor performances.
 pprof: no
 # Address of the pprof listener.
-pprofAddress: 192.168.1.227:9999
+pprofAddress: 127.0.0.1:9999
 
 # Command to run when a client connects to the server.
 # Prepend ./ to run an executable in the current folder (example: "./ffmpeg")
@@ -77,19 +77,19 @@
 # Available values are "no", "strict", "optional".
 encryption: "no"
 # Address of the TCP/RTSP listener. This is needed only when encryption is "no" or "optional".
-rtspAddress: :8554
+rtspAddress: :7554
 # Address of the TCP/TLS/RTSPS listener. This is needed only when encryption is "strict" or "optional".
-rtspsAddress: :8322
+rtspsAddress: :7322
 # Address of the UDP/RTP listener. This is needed only when "udp" is in protocols.
-rtpAddress: :8000
+rtpAddress: :7000
 # Address of the UDP/RTCP listener. This is needed only when "udp" is in protocols.
-rtcpAddress: :8001
+rtcpAddress: :7001
 # IP range of all UDP-multicast listeners. This is needed only when "multicast" is in protocols.
 multicastIPRange: 224.1.0.0/16
 # Port of all UDP-multicast/RTP listeners. This is needed only when "multicast" is in protocols.
-multicastRTPPort: 8002
+multicastRTPPort: 7002
 # Port of all UDP-multicast/RTCP listeners. This is needed only when "multicast" is in protocols.
-multicastRTCPPort: 8003
+multicastRTCPPort: 7003
 # Path to the server key. This is needed only when encryption is "strict" or "optional".
 # This can be generated with:
 # openssl genrsa -out server.key 2048
@@ -105,7 +105,7 @@
 # RTMP parameters
 
 # Disable support for the RTMP protocol.
-rtmpDisable: no
+rtmpDisable: yes
 # Address of the RTMP listener. This is needed only when encryption is "no" or "optional".
 rtmpAddress: :1935
 # Encrypt connections with TLS (RTMPS).
@@ -125,7 +125,7 @@
 # HLS parameters
 
 # Disable support for the HLS protocol.
-hlsDisable: no
+hlsDisable: yes
 # Address of the HLS listener.
 hlsAddress: :8888
 # Enable TLS/HTTPS on the HLS server.
@@ -181,7 +181,7 @@
 # WebRTC parameters
 
 # Disable support for the WebRTC protocol.
-webrtcDisable: no
+webrtcDisable: yes
 # Address of the WebRTC listener.
 webrtcAddress: :8889
 # Enable TLS/HTTPS on the WebRTC server.
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index ce2bf43..bf69eff 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -18,7 +18,13 @@
      * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
      */
     public List<SysUser> selectUserList(SysUser sysUser);
-
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨAPP鐢ㄦ埛鍒楄〃
+     *
+     * @param sysUser APP鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+    public List<SysUser> selectAppUserList(SysUser sysUser);
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸查厤鐢ㄦ埛瑙掕壊鍒楄〃
      * 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 980cb0d..897852b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.service;
 
 import java.util.List;
+import java.util.Map;
 
 import com.ruoyi.common.core.domain.entity.SysUser;
 
@@ -17,6 +18,14 @@
      * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
      */
     public List<SysUser> selectUserList(SysUser user);
+
+    /**
+     * 鏍规嵁鏉′欢鍒嗛〉鏌ヨAPP鐢ㄦ埛鍒楄〃
+     *
+     * @param user APP鐢ㄦ埛淇℃伅
+     * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
+     */
+    public List<SysUser> selectAppUserList(SysUser user);
 
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
@@ -225,4 +234,5 @@
      * @param userIds 鐢ㄦ埛id鏁扮粍
      */
     public void clearUserCache(String[] userIds);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 6b36d4f..93eca00 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -128,6 +128,11 @@
     public List<SysUser> selectUserList(SysUser user) {
         return userMapper.selectUserList(user);
     }
+    @Override
+    @DataScope(deptAlias = "d", userAlias = "u")
+    public List<SysUser> selectAppUserList(SysUser user) {
+        return userMapper.selectAppUserList(user);
+    }
 
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index e41ea2c..08396d0 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -117,7 +117,17 @@
         <!-- 鏁版嵁鑼冨洿杩囨护 -->
         ${params.dataScope}
     </select>
-
+    <select id="selectAppUserList" parameterType="SysUser" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+        where u.del_flag = '0'
+        and LOWER(r.role_name) like '%app%'
+        <if test="deptId != null and deptId != 0">
+            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE cast(#{deptId} as
+            varchar) = any(string_to_array(ancestors,',')) ))
+        </if>
+        <!-- 鏁版嵁鑼冨洿杩囨护 -->
+        ${params.dataScope}
+    </select>
     <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
         select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
         from sys_user u

--
Gitblit v1.9.3