aijinhui
2024-02-23 0abccf5e570dce53a802bca4ce25118dd900692c
Merge remote-tracking branch 'origin/master'

# Conflicts:
# ard-work/src/main/java/com/ruoyi/alarmpoints/well/mapper/ArdAlarmpointsWellMapper.java
# ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml
已添加2个文件
已修改23个文件
1414 ■■■■ 文件已修改
ard-work/pom.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarmpoints/well/mapper/ArdAlarmpointsWellMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarmpoints/well/service/IArdAlarmpointsWellService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarmpoints/well/service/impl/ArdAlarmpointsWellServiceImpl.java 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/application/controller/ArdAppApplicationController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/application/service/IArdAppApplicationService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/appcontainer/AppContainer.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/mapper/ArdAppPositionMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/uav/websocketclient/UAVWebsocketClient.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/forest/SYClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/app/ArdAppPositionMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-dev.yml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/pom.xml
@@ -196,7 +196,14 @@
            <artifactId>orai18n</artifactId>
            <version>12.1.0.2.0</version>
        </dependency>
<!--        <dependency>-->
        <!-- WebSocket客户端 -->
        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.3.8</version>
        </dependency>
        <!--        <dependency>-->
<!--            <groupId>com.alibaba</groupId>-->
<!--            <artifactId>druid</artifactId>-->
<!--            <version>1.2.15</version>-->
ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
@@ -248,4 +248,20 @@
        return AjaxResult.success(result);
    }
    @GetMapping("/getWellDataByPatrolplanIdAndPosition")
    @ApiOperation("查询最近巡检设备动静态属性")
    public AjaxResult getWellDataByPatrolplanIdAndPosition(@RequestBody Map<String,Object> para){
        SysConfig config = new SysConfig();
        config.setConfigKey("3coracle");
        List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config);
        Map<String,Object> result = ardAlarmpointsWellService.getWellDataByPatrolplanIdAndPosition(para,sysConfigResult);
        return AjaxResult.success(result);
    }
    @GetMapping("/getWellById")
    @ApiOperation("根据查询兴趣点基本属性")
    public AjaxResult getWellById(@RequestBody Map<String,String> para){
        ArdAlarmpointsWell result = ardAlarmpointsWellService.getWellById(para.get("id"));
        return AjaxResult.success(result);
    }
}
ard-work/src/main/java/com/ruoyi/alarmpoints/well/mapper/ArdAlarmpointsWellMapper.java
@@ -7,6 +7,7 @@
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWellDeptVo;
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWellParam;
import com.ruoyi.common.annotation.DataScope;
import org.apache.ibatis.annotations.Param;
/**
@@ -101,6 +102,9 @@
    List<ArdAlarmpointsWellDeptVo> wellListDept(List<Long> deptList);
    ArdAlarmpointsWell getWellDataByPatrolplanIdAndPosition(@Param("patrolplanId") String patrolplanId,@Param("longitude") Double longitude,@Param("latitude") Double latitude);
    ArdAlarmpointsWell getWellById(String id);
    List<ArdAlarmpointsWell> conditionList(ArdAlarmpointsWellParam ardAlarmpointsWellParam);
}
ard-work/src/main/java/com/ruoyi/alarmpoints/well/service/IArdAlarmpointsWellService.java
@@ -137,4 +137,8 @@
     * æŸ¥è¯¢æ²¹äº•动静态数据
     */
    Map<String,Object> getWellDataByWellId(String wellId, List<SysConfig> config);
    Map<String,Object> getWellDataByPatrolplanIdAndPosition(Map<String,Object> para,List<SysConfig> sysConfigResult);
    ArdAlarmpointsWell getWellById(String id);
}
ard-work/src/main/java/com/ruoyi/alarmpoints/well/service/impl/ArdAlarmpointsWellServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.alarmpoints.well.service.impl;
import java.math.BigDecimal;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
@@ -575,6 +576,267 @@
        return result;
    }
    @Override
    public Map<String, Object> getWellDataByPatrolplanIdAndPosition(Map<String, Object> para, List<SysConfig> config) {
        String patrolplanId = (String) para.get("patrolplanId");
        Double longitude = null;
        Double latitude = null;
        try{
            longitude = (Double) para.get("longitude");
            latitude = (Double) para.get("latitude");
        } catch (Exception e){
            longitude = ((BigDecimal) para.get("longitude")).doubleValue();
            latitude = ((BigDecimal) para.get("latitude")).doubleValue();
        }
        ArdAlarmpointsWell ardAlarmpointsWell = ardAlarmpointsWellMapper.getWellDataByPatrolplanIdAndPosition(patrolplanId,longitude,latitude);
        if(ardAlarmpointsWell != null){
            Map<String, Object> result = new HashMap();
            if (ardAlarmpointsWell.getWellId() != null) {
                result.put("wellId", ardAlarmpointsWell.getWellId());
            } else {
                result.put("wellId", "");
            }
            if (ardAlarmpointsWell.getWellNumber() != null) {
                result.put("wellNumber", ardAlarmpointsWell.getWellNumber());
            } else {
                result.put("wellNumber", "");
            }
            if (ardAlarmpointsWell.getOilProduction() != null) {
                result.put("oilProduction", ardAlarmpointsWell.getOilProduction());
            } else {
                result.put("oilProduction", "");
            }
            if (ardAlarmpointsWell.getWellBlock() != null) {
                result.put("wellBlock", ardAlarmpointsWell.getWellBlock());
            } else {
                result.put("wellBlock", "");
            }
            if (ardAlarmpointsWell.getProductionDate() != null) {
                result.put("productionDate", ardAlarmpointsWell.getProductionDate());
            } else {
                result.put("productionDate", "");
            }
            if (ardAlarmpointsWell.getDisplacementMode() != null) {
                result.put("displacementMode", ardAlarmpointsWell.getDisplacementMode());
            } else {
                result.put("displacementMode", "");
            }
            if (ardAlarmpointsWell.getSurroundingEnvironment() != null) {
                result.put("surroundingEnvironment", ardAlarmpointsWell.getSurroundingEnvironment());
            } else {
                result.put("surroundingEnvironment", "");
            }
            if (ardAlarmpointsWell.getWellType() != null) {
                result.put("wellType", ardAlarmpointsWell.getWellType());
            } else {
                result.put("wellType", "");
            }
            if (ardAlarmpointsWell.getInstalledLoad() != null) {
                result.put("installedLoad", ardAlarmpointsWell.getInstalledLoad());
            } else {
                result.put("installedLoad", "");
            }
            if (ardAlarmpointsWell.getMeteringStation() != null) {
                result.put("meteringStation", ardAlarmpointsWell.getMeteringStation());
            } else {
                result.put("meteringStation", "");
            }
            if (ardAlarmpointsWell.getTransferStation() != null) {
                result.put("transferStation", ardAlarmpointsWell.getTransferStation());
            } else {
                result.put("transferStation", "");
            }
            if (ardAlarmpointsWell.getDehydrationStation() != null) {
                result.put("dehydrationStation", ardAlarmpointsWell.getDehydrationStation());
            } else {
                result.put("dehydrationStation", "");
            }
            if (ardAlarmpointsWell.getRunStatus() != null) {
                result.put("runStatus", ardAlarmpointsWell.getRunStatus());
            } else {
                result.put("runStatus", "");
            }
            if (ardAlarmpointsWell.getLongitude() != null) {
                result.put("longitude", ardAlarmpointsWell.getLongitude());
            } else {
                result.put("longitude", "");
            }
            if (ardAlarmpointsWell.getLatitude() != null) {
                result.put("latitude", ardAlarmpointsWell.getLatitude());
            } else {
                result.put("latitude", "");
            }
            if (ardAlarmpointsWell.getAltitude() != null) {
                result.put("altitude", ardAlarmpointsWell.getAltitude());
            } else {
                result.put("altitude", "");
            }
            if (ardAlarmpointsWell.getUserId() != null) {
                result.put("userId", ardAlarmpointsWell.getUserId());
            } else {
                result.put("userId", "");
            }
            if (ardAlarmpointsWell.getDeptId() != null) {
                result.put("deptId", ardAlarmpointsWell.getDeptId());
                SysDept sysDept = sysDeptMapper.selectDeptById(ardAlarmpointsWell.getDeptId());//查询兴趣点所在部门
                if (sysDept != null) {
                    result.put("deptName", sysDept.getDeptName());
                } else {
                    result.put("deptName", "");
                }
            } else {
                result.put("deptId", "");
                result.put("deptName", "");
            }
            if (ardAlarmpointsWell.getCreateBy() != null) {
                result.put("createBy", ardAlarmpointsWell.getCreateBy());
            } else {
                result.put("createBy", "");
            }
            if (ardAlarmpointsWell.getCreateTime() != null) {
                result.put("createTime", ardAlarmpointsWell.getCreateTime());
            } else {
                result.put("createTime", "");
            }
            if (ardAlarmpointsWell.getUpdateBy() != null) {
                result.put("updateBy", ardAlarmpointsWell.getUpdateBy());
            } else {
                result.put("updateBy", "");
            }
            if (ardAlarmpointsWell.getUpdateTime() != null) {
                result.put("updateTime", ardAlarmpointsWell.getUpdateTime());
            } else {
                result.put("updateTime", "");
            }
            if (config.size() != 0) {
                String oracle = config.get(0).getConfigValue();
                String[] oracleArr = oracle.split(";");
                if (oracleArr.length == 3) {
                    String url = oracle.split(";")[0];
                    String username = oracle.split(";")[1];
                    String password = oracle.split(";")[2];
                    try {
                        int checkMark = checkTable(url, username, password, "\'RTU_DATA_YJ_8\'");//三厂表存在
                        if (checkMark == 1) {
                            Map<String, Object> resultRTU = getRtuDataYjByJH(url, username, password, "RTU_DATA_YJ_8", "\'" + ardAlarmpointsWell.getWellId() + "\'");
                            result.putAll(resultRTU);
                        } else {
                            result.put("wellRunningState", "n");//油井运行状态
                            result.put("totalPowerConsumption", "n");//总耗电量
                            result.put("communicationMachine", "n");//设备通讯
                            result.put("remark", "n");//备注
                            result.put("singleWellWaterTemperature", "n");//单井掺水温度//
                            result.put("meteringPlantWaterPressure", "n");//计量间掺水压力//
                            result.put("torque", "n");//扭矩
                            result.put("MAT", "n");//回油温度
                            result.put("TGP", "n");//井口油压
                            result.put("CPV", "n");//井口套压
                            result.put("ADL", "n");//A相电流
                            result.put("ADY", "n");//A相电压
                            result.put("BDL", "n");//B相电流
                            result.put("BDY", "n");//B相电压
                            result.put("CDL", "n");//C相电流
                            result.put("CDY", "n");//C相电压
                            result.put("UCV", "n");//上行电流
                            result.put("DCV", "n");//下行电流
                            result.put("SLV", "n");//冲程
                            result.put("CHC", "n");//冲次
                            result.put("BPV", "n");//井口回压
                            result.put("ZWG", "n");//总无功功率
                            result.put("ZYG", "n");//总有功功率
                            result.put("GYS", "n");//功率因数
                            result.put("UWL", "n");//最大载荷
                            result.put("DWL", "n");//最小载荷
                            result.put("ZHS", "n");//转速
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else if (oracleArr.length == 4) {
                    String url = oracle.split(";")[0];
                    String username = oracle.split(";")[1];
                    String password = oracle.split(";")[2];
                    String prod = oracle.split(";")[3];
                    try {
                        //int checkMark = checkTable(url,username,password,"\'RTU_DATA_YJ_8\'");//三厂表存在
                        int checkMark = checkTable(url, username, password, "\'" + prod + ".RTU_DATA_YJ_8\'");//三厂表存在
                        if (checkMark == 1) {
                            Map<String, Object> resultRTU = getRtuDataYjByJH(url, username, password, prod + ".RTU_DATA_YJ_8", "\'" + ardAlarmpointsWell.getWellId() + "\'");
                            result.putAll(resultRTU);
                        } else {
                            result.put("wellRunningState", "n");//油井运行状态
                            result.put("totalPowerConsumption", "n");//总耗电量
                            result.put("communicationMachine", "n");//设备通讯
                            result.put("remark", "n");//备注
                            result.put("singleWellWaterTemperature", "n");//单井掺水温度//
                            result.put("meteringPlantWaterPressure", "n");//计量间掺水压力//
                            result.put("torque", "n");//扭矩
                            result.put("MAT", "n");//回油温度
                            result.put("TGP", "n");//井口油压
                            result.put("CPV", "n");//井口套压
                            result.put("ADL", "n");//A相电流
                            result.put("ADY", "n");//A相电压
                            result.put("BDL", "n");//B相电流
                            result.put("BDY", "n");//B相电压
                            result.put("CDL", "n");//C相电流
                            result.put("CDY", "n");//C相电压
                            result.put("UCV", "n");//上行电流
                            result.put("DCV", "n");//下行电流
                            result.put("SLV", "n");//冲程
                            result.put("CHC", "n");//冲次
                            result.put("BPV", "n");//井口回压
                            result.put("ZWG", "n");//总无功功率
                            result.put("ZYG", "n");//总有功功率
                            result.put("GYS", "n");//功率因数
                            result.put("UWL", "n");//最大载荷
                            result.put("DWL", "n");//最小载荷
                            result.put("ZHS", "n");//转速
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } else {
                result.put("wellRunningState", "n");//油井运行状态
                result.put("totalPowerConsumption", "n");//总耗电量
                result.put("communicationMachine", "n");//设备通讯
                result.put("remark", "n");//备注
                result.put("singleWellWaterTemperature", "n");//单井掺水温度//
                result.put("meteringPlantWaterPressure", "n");//计量间掺水压力//
                result.put("torque", "n");//扭矩
                result.put("MAT", "n");//回油温度
                result.put("TGP", "n");//井口油压
                result.put("CPV", "n");//井口套压
                result.put("ADL", "n");//A相电流
                result.put("ADY", "n");//A相电压
                result.put("BDL", "n");//B相电流
                result.put("BDY", "n");//B相电压
                result.put("CDL", "n");//C相电流
                result.put("CDY", "n");//C相电压
                result.put("UCV", "n");//上行电流
                result.put("DCV", "n");//下行电流
                result.put("SLV", "n");//冲程
                result.put("CHC", "n");//冲次
                result.put("BPV", "n");//井口回压
                result.put("ZWG", "n");//总无功功率
                result.put("ZYG", "n");//总有功功率
                result.put("GYS", "n");//功率因数
                result.put("UWL", "n");//最大载荷
                result.put("DWL", "n");//最小载荷
                result.put("ZHS", "n");//转速
            }
            return result;
        }else{
            return null;
        }
    }
    @Override
    public ArdAlarmpointsWell getWellById(String id) {
        ArdAlarmpointsWell result = ardAlarmpointsWellMapper.getWellById(id);
        return result;
    }
    public int checkTable(String url, String username, String password, String tableName) throws ClassNotFoundException, SQLException {
        Connection connection = null;
ard-work/src/main/java/com/ruoyi/app/application/controller/ArdAppApplicationController.java
@@ -1,5 +1,6 @@
package com.ruoyi.app.application.controller;
import java.awt.geom.QuadCurve2D;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
@@ -223,4 +224,17 @@
            return AjaxResult.error();
        }
    }
    @GetMapping("/getSoilderAndCarPositionByCommanderIdNear")
    @ApiOperation("PC端指挥端查看单兵端及车辆位置")
    public AjaxResult getSoilderAndCarPositionByCommanderIdNear(@RequestBody Map<String, Double> para) {
        String commanderId = SecurityUtils.getUserId();
        try{
            Map<String,Map<String,List<Map<String,Object>>>> result = ardAppApplicationService.getSoilderAndCarPositionByCommanderId(commanderId,para);
            return AjaxResult.success(result);
        }catch(Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }
}
ard-work/src/main/java/com/ruoyi/app/application/service/IArdAppApplicationService.java
@@ -78,4 +78,6 @@
    public int approvalCheckPositionOwn(String soilderId,Map<String,String> para);
    public List<Map<String,Object>> getCheckPositionNo(String commanderId);///
    public Map<String,Map<String,List<Map<String,Object>>>> getSoilderAndCarPositionByCommanderId(String commanderId,Map<String, Double> para);
}
ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java
@@ -1,12 +1,29 @@
package com.ruoyi.app.application.service.impl;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import com.ruoyi.app.position.appcontainer.AppContainer;
import com.ruoyi.app.position.domain.ArdAppPosition;
import com.ruoyi.app.position.mapper.ArdAppPositionMapper;
import com.ruoyi.common.core.domain.entity.SysConfig;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.sy.domain.ArdSyUser;
import com.ruoyi.sy.mapper.ArdSyCarMapper;
import com.ruoyi.sy.mapper.ArdSyUserMapper;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.utils.forest.SYClient;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.ruoyi.common.utils.StringUtils;
@@ -34,6 +51,30 @@
    @Resource
    private SysRoleMapper sysRoleMapper;
    @Resource
    private SysUserMapper userMapper;
    @Resource
    private SysDeptMapper sysDeptMapper;
    @Resource
    private ArdAppPositionMapper ardAppPositionMapper;
    @Resource
    private ArdSyUserMapper ardSyUserMapper;
    @Resource
    private SysConfigMapper sysConfigMapper;
    @Resource
    private ArdSyCarMapper ardSyCarMapper;
    @Resource
    private SYClient sYClient;
    @Value("${minio.endpoint}")
    private String minioEndpoint;
    private Map<String,Thread> threadMap = new HashMap();
@@ -404,4 +445,147 @@
        }
        return ardAppApplicationList;
    }
    @Override
    public Map<String,Map<String,List<Map<String,Object>>>> getSoilderAndCarPositionByCommanderId(String commanderId,Map<String, Double> para) {
        Map<String,Map<String,List<Map<String,Object>>>> mapResault = new HashMap();
        SysUser sysUser = userMapper.selectUserById(commanderId);//获取系统用户
        List<Long> deptIdList = new ArrayList();
        deptIdList.add(sysUser.getDeptId());
        deptIdList = getOwnAndChildrenDeptIdList(deptIdList,new ArrayList());//递归查询下属部门主键
        List<SysUser> sysUsersResult = userMapper.getOwnAndChildrenSoilderListAll(deptIdList);
        List<SysUser> sysUsersResultOnline = sysUsersResult.stream().filter(sysUserTest -> sysUserTest.getAppOnlineState().equals("1")).collect(Collectors.toList());//在线用户
        List<SysUser> sysUsersResultOffline = sysUsersResult.stream().filter(sysUserTest -> !sysUserTest.getAppOnlineState().equals("1")).collect(Collectors.toList());//离线用户
        List<Map<String,Object>> sysUsersOnlineList = new ArrayList();
        List<Map<String,Object>> sysUsersOfflineList = new ArrayList();
        for(SysUser sysUserIn : sysUsersResultOnline){
            Map<String,Object> map = new HashMap();
            map.put("userId",sysUserIn.getUserId());
            map.put("deptId",sysUserIn.getDeptId());
            map.put("userName",sysUserIn.getUserName());
            map.put("nickName",sysUserIn.getNickName());
            try{
                map.put("longitude", AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getLongitude());
                map.put("latitude",AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getLatitude());
                map.put("altitude",AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getAltitude());
            }catch(Exception e){
                ArdAppPosition ardAppPosition = ardAppPositionMapper.getLastAPPPositionByUserId(sysUserIn.getUserId());
                map.put("longitude",ardAppPosition.getLongitude());
                map.put("latitude",ardAppPosition.getLatitude());
                map.put("altitude",ardAppPosition.getAltitude());
            }
            sysUsersOnlineList.add(map);
        }
        List<Map<String,Object>> sysUsersOnlineNearList = new ArrayList();//在200米内
        for(Map<String,Object> mapOn : sysUsersOnlineList){
            Double longitude = (Double) mapOn.get("longitude");
            Double latitude = (Double) mapOn.get("latitude");
            double distance = GisUtil.getDistance(para.get("longitude"),para.get("latitude"),longitude,latitude);
            if(distance <= 200){
                sysUsersOnlineNearList.add(mapOn);
            }
        }
        Map<String,List<Map<String,Object>>> appMap = new HashMap();
        appMap.put("onlineApp",sysUsersOnlineNearList);
        for(SysUser sysUserIn : sysUsersResultOffline){
            Map<String,Object> map = new HashMap();
            map.put("userId",sysUserIn.getUserId());
            map.put("deptId",sysUserIn.getDeptId());
            map.put("userName",sysUserIn.getUserName());
            map.put("nickName",sysUserIn.getNickName());
            sysUsersOfflineList.add(map);
        }
        appMap.put("offlineApp",sysUsersOfflineList);
        mapResault.put("app",appMap);
        ArdSyUser ardSyUserPara = new ArdSyUser();
        ardSyUserPara.setSysUserId(commanderId);
        List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara);//查询挂接的三一账号
        String syURL = "";
        List<SysConfig> sysConfigResult = sysConfigMapper.selectByType("syCarPT");
        if(sysConfigResult.size() > 0){
            syURL = sysConfigResult.get(0).getConfigValue();
        }
        if(ardSyUserList.size() == 0 || syURL.equals("")){
            List<Map<String,Object>> onlineCar = new ArrayList();
            List<Map<String,Object>> offlineCar = new ArrayList();
            Map<String,List<Map<String,Object>>> carMap = new HashMap();
            carMap.put("onlineCar",onlineCar);
            carMap.put("offlineCar",offlineCar);
            mapResault.put("car",carMap);
            return mapResault;
        }
        List<String> carIdList = ardSyCarMapper.selectArdSyCarByDeptIds(deptIdList);
        String carIds = "";
        for(String carId : carIdList){
            carIds = carIds + carId + ",";
        }
        carIds = carIds.substring(0,carIds.length() - 1);
        String passwordMd5 = DigestUtils.md5Hex(ardSyUserList.get(0).getPassword());
        Map<String,Object> syLoginResult = sYClient.logIn(syURL, passwordMd5, ardSyUserList.get(0).getUserId());
        String sessionId = (String) syLoginResult.get("sessionId");
        Map<String,Object> carNearPositionResult = sYClient.getCarNearPositionByCarId(syURL, carIds, ardSyUserList.get(0).getUserId(),sessionId);
        if(((String)carNearPositionResult.get("rspCode")).equals("1")){
            List<Map<String,Object>> SYCarPositionList = (List<Map<String, Object>>) carNearPositionResult.get("list");
            //筛选在线
            List<Map<String,Object>> onlineSYCarPositionList = SYCarPositionList.stream().filter(map -> ((String)map.get("stateCn")).startsWith("在线")).collect(Collectors.toList());
            //筛选200米范围内
            List<Map<String,Object>> onlineSYCarPositionNearList = new ArrayList();//在200米内
            for(Map<String,Object> mapOn : onlineSYCarPositionList){
                Double longitude = new BigDecimal((String) mapOn.get("lng")).doubleValue();
                Double latitude = new BigDecimal((String) mapOn.get("lat")).doubleValue();
                double distance = GisUtil.getDistance(para.get("longitude"),para.get("latitude"),longitude,latitude);
                if(distance <= 200){
                    mapOn.put("longitude",longitude);
                    mapOn.put("latitude",latitude);
                    onlineSYCarPositionNearList.add(mapOn);
                }
            }
            //for(Map<String,Object> sycar : onlineSYCarPositionList){
            for(Map<String,Object> sycar : onlineSYCarPositionNearList){
                Map<String,Object> map = ardSyCarMapper.getArdSyCarAndDeptByCarId((String)sycar.get("carId"));
                String carModel = this.minioEndpoint + "/" + (String) map.get("carModel");
                map.put("carModel",carModel);
                sycar.putAll(map);
            }
            //筛选离线
            List<Map<String,Object>> offlineSYCarPositionList = SYCarPositionList.stream().filter(map -> ((String)map.get("stateCn")).startsWith("离线")).collect(Collectors.toList());
            for(Map<String,Object> sycar : offlineSYCarPositionList){
                Map<String,Object> map = ardSyCarMapper.getArdSyCarAndDeptByCarId((String)sycar.get("carId"));
                String carModel = this.minioEndpoint + "/" + (String) map.get("carModel");
                map.put("carModel",carModel);
                sycar.putAll(map);
            }
            Map<String,List<Map<String,Object>>> carMap = new HashMap();
            //carMap.put("onlineCar",onlineSYCarPositionList);
            carMap.put("onlineCar",onlineSYCarPositionNearList);
            carMap.put("offlineCar",offlineSYCarPositionList);
            mapResault.put("car",carMap);
        }else{
            List<Map<String,Object>> onlineCar = new ArrayList();
            List<Map<String,Object>> offlineCar = new ArrayList();
            Map<String,List<Map<String,Object>>> carMap = new HashMap();
            carMap.put("onlineCar",onlineCar);
            carMap.put("offlineCar",offlineCar);
            mapResault.put("car",carMap);
            return mapResault;
        }
        return mapResault;
    }
    public List<Long> getOwnAndChildrenDeptIdList(List<Long> deptIdList,List<Long> deptIdListr){
        deptIdListr.addAll(deptIdList);
        List<Long> result = sysDeptMapper.getChildrenDeptIdList(deptIdList);
        if(result.size() != 0){
            deptIdListr.addAll(result);
            result = getOwnAndChildrenDeptIdList(result,deptIdListr);
        }
        deptIdListr = deptIdListr.stream().distinct().collect(Collectors.toList());
        return deptIdListr;
    }
}
ard-work/src/main/java/com/ruoyi/app/position/appcontainer/AppContainer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.app.position.appcontainer;
import com.ruoyi.app.position.domain.ArdAppPosition;
import java.util.HashMap;
import java.util.Map;
public class AppContainer {
    private static Map<String, ArdAppPosition> ardAppPositionMap = new HashMap();
    public static Map<String, ArdAppPosition> getArdAppPositionMap() {
        return ardAppPositionMap;
    }
    public static void setArdAppPositionMap(Map<String, ArdAppPosition> ardAppPositionMap) {
        ardAppPositionMap = ardAppPositionMap;
    }
}
ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -239,67 +239,22 @@
        }
    }
    /*@PostMapping("/sendCheckCommandersPosition")
    @ApiOperation("发起查看指挥端位置")
    public AjaxResult sendCheckCommandersPosition(@RequestBody Map<String,Object> para) {
        String usersId = SecurityUtils.getUserId();
    @GetMapping("/getAPPPositionByUserIdAndTime")
    @ApiOperation("查看APP历史位置")
    public AjaxResult getAPPPositionByUserIdAndTime(@RequestBody Map<String,String> para) {
        try{
            ardAppPositionService.sendCheckCommandersPosition(usersId,para);
            return AjaxResult.success();
        }catch(Exception e){
            return AjaxResult.error();
        }
    }*/
    /*@PostMapping("/sendCheckSYCarsPosition")
    @ApiOperation("发起查看车辆位置")
    public AjaxResult sendCheckSYCarsPosition(@RequestBody Map<String,Object> para) {
        String usersId = SecurityUtils.getUserId();
        try{
            ardAppPositionService.sendCheckSYCarsPosition(usersId,para);
            return AjaxResult.success();
        }catch(Exception e){
            return AjaxResult.error();
        }
    }*/
    /*@GetMapping("/getCheckCommandersPosition")
    @ApiOperation("指挥端查看指挥端位置申请")
    public AjaxResult getCheckCommandersPosition() {//弃用
        String usersId = SecurityUtils.getUserId();
        try{
            List<Map<String,Object>> result = ardAppPositionService.getCheckCommandersPosition(usersId);
            List<ArdAppPosition> result = ardAppPositionService.getAPPPositionByUserIdAndTime(para);
            return AjaxResult.success(result);
        }catch(Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }*/
    }
    /*@GetMapping("/getCheckSYCarsPosition")
    @ApiOperation("指挥端查看车辆位置申请")
    public AjaxResult getCheckSYCarsPosition() {//弃用
        String usersId = SecurityUtils.getUserId();
        try{
            List<Map<String,Object>> result = ardAppPositionService.getCheckSYCarsPosition(usersId);
            return AjaxResult.success(result);
        }catch(Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }*/
    /*@GetMapping("/getCheckPosition")
    @ApiOperation("指挥端查看位置申请")
    public AjaxResult getCheckPosition() {
        String usersId = SecurityUtils.getUserId();
        try{
            Map<String,List<Map<String,Object>>> result = ardAppPositionService.getCheckPosition(usersId);
            return AjaxResult.success(result);
        }catch(Exception e){
            e.printStackTrace();
            return AjaxResult.error();
        }
    }*/
    @GetMapping("/getOnlineAPPSoilderByCommanderId")
    public AjaxResult getOnlineAPPSoilderByCommanderId() {
        String userId = SecurityUtils.getUserId();
        return success(ardAppPositionService.getOnlineAPPSoilderByCommanderId(userId));
    }
}
ard-work/src/main/java/com/ruoyi/app/position/mapper/ArdAppPositionMapper.java
@@ -4,6 +4,7 @@
import java.util.Map;
import com.ruoyi.app.position.domain.ArdAppPosition;
import org.apache.ibatis.annotations.Param;
/**
@@ -70,4 +71,8 @@
    public int deleteArdAppPositionByIds(String[] ids);
    public List<Map<String,Object>> getOnlineCommanderPosition(String soilderId);
    public List<ArdAppPosition> getAPPPositionByUserIdAndTime(@Param("userId") String userId,@Param("beginTime") String beginTime,@Param("endTime") String endTime);
    public ArdAppPosition getLastAPPPositionByUserId(String userId);
}
ard-work/src/main/java/com/ruoyi/app/position/service/IArdAppPositionService.java
@@ -88,13 +88,8 @@
    public List<Map<String,Object>> getOnlineCommanderPosition(String soilderId);
    //public void sendCheckCommandersPosition(String usersId,Map<String,Object> para);
    public List<ArdAppPosition> getAPPPositionByUserIdAndTime(Map<String,String> para);
    //public void sendCheckSYCarsPosition(String usersId,Map<String,Object> para);
    public List<Map<String,Object>> getOnlineAPPSoilderByCommanderId(String userId);
    //public List<Map<String,Object>> getCheckCommandersPosition(String usersId);
    //public List<Map<String,Object>> getCheckSYCarsPosition(String usersId);
    //public Map<String,List<Map<String,Object>>> getCheckPosition(String usersId);
}
ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -1,11 +1,10 @@
package com.ruoyi.app.position.service.impl;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.alarm.wall.domain.ArdAlarmWall;
import com.ruoyi.alarm.wall.mapper.ArdAlarmWallMapper;
import com.ruoyi.alarm.wall.service.IArdAlarmWallService;
import com.ruoyi.alarmpoints.wall.domain.ArdWall;
import com.ruoyi.alarmpoints.wall.mapper.ArdWallMapper;
import com.ruoyi.app.position.appcontainer.AppContainer;
import com.ruoyi.app.position.domain.ArdAppPosition;
import com.ruoyi.app.position.mapper.ArdAppPositionMapper;
import com.ruoyi.app.position.service.IArdAppPositionService;
@@ -15,16 +14,15 @@
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.scheduling.domian.SchedulingParam;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.gis.Point;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -52,6 +50,8 @@
    IArdAlarmWallService ardAlarmWallService;
    @Resource
    private SysUserMapper sysUserMapper;
    @Resource
    private SysDeptMapper sysDeptMapper;
    Map<String, String> firstAlarmMap = new HashMap<>();//首次报警缓存key:用户id_围栏id value: æŠ¥è­¦id
    /**
@@ -98,7 +98,12 @@
        ardAppPosition.setId(IdUtils.simpleUUID());
        ardAppPosition.setCreateTime(DateUtils.getNowDate());
        ardAppPositionMapper.insertArdAppPosition(ardAppPosition);
        return DetectionWallAlarm(ardAppPosition);
        try{
            return DetectionWallAlarm(ardAppPosition);
        }finally {
            AppContainer.getArdAppPositionMap().put(ardAppPosition.getUserId(),ardAppPosition);//实时位置存入容器
        }
    }
    /**
@@ -478,111 +483,53 @@
        return result;
    }
    /*@Override
    public void sendCheckCommandersPosition(String usersId,Map<String, Object> para) {
        String reason = (String) para.get("reason");
        List<String> usersIdList = (List<String>) para.get("usersIdList");
        for(String commanderId : usersIdList){
            //设置key为checkCommanderPosition_指挥端主键_单兵端主键
            String key = "checkCommanderPosition_" + commanderId + "_" + usersId;
            Map<String,Object> value = new HashMap();
            value.put("reason",reason);
            value.put("state","0");
            value.put("begin","");
            value.put("commanderId",commanderId);
            value.put("soilderId",usersId);
            redisCache.setCacheObject(key, JSON.toJSONString(value));
        }
    }*/
    /*@Override
    public void sendCheckSYCarsPosition(String usersId, Map<String, Object> para) {
        String reason = (String) para.get("reason");
        List<String> usersIdList = (List<String>) para.get("usersIdList");
        for(String commanderId : usersIdList){
            //设置key为checkSYCarsPosition_指挥端主键/PC端主键_单兵端主键
            String key = "checkSYCarsPosition_" + commanderId + "_" + usersId;
            Map<String,Object> value = new HashMap();
            value.put("reason",reason);
            value.put("state","0");
            value.put("begin","");
            value.put("commanderId",commanderId);
            value.put("soilderId",usersId);
            redisCache.setCacheObject(key, JSON.toJSONString(value));
        }
    }*/
    /*@Override
    public List<Map<String, Object>> getCheckCommandersPosition(String usersId) {
        String key = "checkCommanderPosition_" + usersId + "_";
        List<Object> keyValueList = redisCache.getListKey(key);
        List<Map<String, Object>> result = new ArrayList();
        for(Object o : keyValueList){
            Map<String,Object> map = JSON.parseObject((String) o);
            if(((String)map.get("state")).equals("0")){//state为0就是未审批
                SysUser sysUser = sysUserMapper.selectUserById((String) map.get("soilderId"));
                map.put("userName",sysUser.getUserName());
                result.add(map);
            }
        }
    @Override
    public List<ArdAppPosition> getAPPPositionByUserIdAndTime(Map<String, String> para) {
        String userId = para.get("userId");
        String beginTime = para.get("beginTime");
        String endTime = para.get("endTime");
        List<ArdAppPosition> result = ardAppPositionMapper.getAPPPositionByUserIdAndTime(userId,beginTime,endTime);
        return result;
    }*/
    }
    /*@Override
    public List<Map<String, Object>> getCheckSYCarsPosition(String usersId) {
        String key = "checkSYCarsPosition_" + usersId + "_";
        List<Object> keyValueList = redisCache.getListKey(key);
        List<Map<String, Object>> result = new ArrayList();
        for(Object o : keyValueList){
            Map<String,Object> map = JSON.parseObject((String) o);
            if(((String)map.get("state")).equals("0")){//state为0就是未审批
                SysUser sysUser = sysUserMapper.selectUserById((String) map.get("soilderId"));
                map.put("userName",sysUser.getUserName());
                result.add(map);
    @Override
    public List<Map<String,Object>> getOnlineAPPSoilderByCommanderId(String userId) {
        SysUser sysUser = sysUserMapper.selectUserById(userId);//获取系统用户
        List<Long> deptIdList = new ArrayList();
        deptIdList.add(sysUser.getDeptId());
        deptIdList = getOwnAndChildrenDeptIdList(deptIdList,new ArrayList());//递归查询下属部门主键
        List<SysUser> result = sysUserMapper.getOwnAndChildrenOnlineSoilderList(deptIdList);
        List<Map<String,Object>> resultList = new ArrayList();
        for(SysUser sysUserIn : result){
            Map<String,Object> map = new HashMap();
            map.put("userId",sysUserIn.getUserId());
            map.put("deptId",sysUserIn.getDeptId());
            map.put("userName",sysUserIn.getUserName());
            map.put("nickName",sysUserIn.getNickName());
            try{
                map.put("longitude",AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getLongitude());
                map.put("latitude",AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getLatitude());
                map.put("altitude",AppContainer.getArdAppPositionMap().get(sysUserIn.getUserId()).getAltitude());
            }catch(Exception e){
                ArdAppPosition ardAppPosition = ardAppPositionMapper.getLastAPPPositionByUserId(sysUserIn.getUserId());
                map.put("longitude",ardAppPosition.getLongitude());
                map.put("latitude",ardAppPosition.getLatitude());
                map.put("altitude",ardAppPosition.getAltitude());
            }
            resultList.add(map);
        }
        return result;
    }*/
        return resultList;
    }
    /*@Override
    public Map<String, List<Map<String, Object>>> getCheckPosition(String usersId) {
        Map<String, List<Map<String, Object>>> result = new HashMap();
        //查看指挥端位置申请
        String keyCommanderPosition = "checkCommanderPosition_" + usersId + "_";
        List<Object> keyValueCommanderPositionList = redisCache.getListKey(keyCommanderPosition);
        List<Map<String, Object>> resultCommanderPosition = new ArrayList();
        for(Object o : keyValueCommanderPositionList){
            Map<String,Object> map = JSON.parseObject((String) o);
            if(((String)map.get("state")).equals("0")){//state为0就是未审批
                SysUser sysUser = sysUserMapper.selectUserById((String) map.get("soilderId"));
                map.put("userName",sysUser.getUserName());
                if(sysUser.getNickName() != null){
                    map.put("nickName",sysUser.getNickName());
                }else{
                    map.put("nickName",sysUser.getNickName());
                }
                resultCommanderPosition.add(map);
            }
    public List<Long> getOwnAndChildrenDeptIdList(List<Long> deptIdList,List<Long> deptIdListr){
        deptIdListr.addAll(deptIdList);
        List<Long> result = sysDeptMapper.getChildrenDeptIdList(deptIdList);
        if(result.size() != 0){
            deptIdListr.addAll(result);
            result = getOwnAndChildrenDeptIdList(result,deptIdListr);
        }
        //查看车辆位置申请
        String keySYCarsPosition = "checkSYCarsPosition_" + usersId + "_";
        List<Object> keyValueSYCarsPositionList = redisCache.getListKey(keySYCarsPosition);
        List<Map<String, Object>> resultSYCarsPosition = new ArrayList();
        for(Object o : keyValueSYCarsPositionList){
            Map<String,Object> map = JSON.parseObject((String) o);
            if(((String)map.get("state")).equals("0")){//state为0就是未审批
                SysUser sysUser = sysUserMapper.selectUserById((String) map.get("soilderId"));
                map.put("userName",sysUser.getUserName());
                if(sysUser.getNickName() != null){
                    map.put("nickName",sysUser.getNickName());
                }else{
                    map.put("nickName",sysUser.getNickName());
                }
                resultSYCarsPosition.add(map);
            }
        }
        result.put("commander",resultCommanderPosition);
        result.put("SYCars",resultSYCarsPosition);
        return result;
    }*/
        deptIdListr = deptIdListr.stream().distinct().collect(Collectors.toList());
        return deptIdListr;
    }
}
ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java
@@ -1,5 +1,6 @@
package com.ruoyi.device.uav.service;
import com.alibaba.fastjson.JSON;
import com.dtflys.forest.exceptions.ForestNetworkException;
import com.dtflys.forest.exceptions.ForestRuntimeException;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -8,9 +9,13 @@
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.ConfigUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.device.uav.websocketclient.UAVWebsocketClient;
import com.ruoyi.sy.controller.ArdSyCarController;
import com.ruoyi.utils.forest.UavClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections4.map.HashedMap;
import org.java_websocket.WebSocket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
@@ -24,7 +29,9 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
@Service
@Slf4j(topic = "uav")
@@ -46,6 +53,11 @@
    private Map uavUser;//登录的用户信息
    private ObjectMapper om = new ObjectMapper();
    private Map<String, UAVWebsocketClient> UAVWebsocketClientMap = new HashedMap();
    private String token;
    @Autowired
    private UavClient uavClient;
    @Autowired
@@ -56,6 +68,8 @@
        getUavConfig();
        this.login();
        //创建无人机Websocket客户端
        createWebsocketCients();
    }
    private void getUavConfig() {
@@ -85,8 +99,12 @@
            String token = this.getToken();
            res = (String) requestMethod.invoke(this.uavClient, this.host + url, token, data);
        } catch (IllegalAccessException e) {
            System.out.println("doUavRequest è®¿é—®å¤±è´¥");
            System.out.println(url);
            log.error("doUavRequest è®¿é—®å¤±è´¥" + e.getMessage());
        } catch (InvocationTargetException e) {
            System.out.println("doUavRequest æ‰§è¡Œå¤±è´¥");
            System.out.println(url);
            log.error("doUavRequest æ‰§è¡Œå¤±è´¥" + e.getMessage());
            e.printStackTrace();
        }
@@ -107,12 +125,17 @@
            String res = uavClient.GET(this.host+"manage/api/v1/devices", token, "{}");
            res+="";
            //System.out.println(res);
            //token赋值
            this.token = token;
        } catch (ForestNetworkException fe) {
            if (fe.getStatusCode() == 401) {//token失效,重新登录
                this.login();
                //再次获取token
                uavUser = redisCache.getCacheMap("uav:uavUser");
                token = (String) uavUser.get("access_token");
                //token赋值
                this.token = token;
                return token;
            }
        }
@@ -141,6 +164,367 @@
        }
    }
    public void createWebsocketCients(){
        /*String ip = this.host.replace("http://", "");
        if(this.UAVWebsocketClientMap.get("status") != null && this.UAVWebsocketClientMap.get("control") != null){
            //无人机状态灭活
            UAVWebsocketClient uavStatusWebsocketClient = this.UAVWebsocketClientMap.get("status");
            uavStatusWebsocketClient.getHeartBeatTimer().cancel();
            uavStatusWebsocketClient.close();
            //无人机控制灭活
            UAVWebsocketClient uavControlWebsocketClient = this.UAVWebsocketClientMap.get("control");
            uavControlWebsocketClient.getHeartBeatTimer().cancel();
            uavControlWebsocketClient.close();
            this.UAVWebsocketClientMap.remove("status");
            this.UAVWebsocketClientMap.remove("control");
        }
        String uavStatusWsURL = "ws://" + ip + "api/v1/ws?x-auth-token=" + token;
        System.out.println(uavStatusWsURL);
        UAVWebsocketClient uavStatusWebsocketClient;
        try {
            uavStatusWebsocketClient = new UAVWebsocketClient(new URI(uavStatusWsURL));
            uavStatusWebsocketClient.connect();
            System.out.println("连接中。。。");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(!uavStatusWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
                uavStatusWebsocketClient.close();
                return;
            }
            Date date = new Date();
            Timer heartBeatTimer = new Timer();
            TimerTask heartBeatTask = new TimerTask(){
                public void run(){
                    Map<String,Object> para = new HashMap();
                    para.put("biz_code", "user_cmd");
                    para.put("version", "1.0");
                    Date date = new Date();
                    para.put("time_stamp", String.valueOf(date.getTime()));
                    Map<String,String> payload = new HashMap();
                    payload.put("timeStamp", String.valueOf(date.getTime()));
                    Map<String,Object> data = new HashMap();
                    data.put("dataHead", "0x7479");
                    data.put("cmdCode", "0x02");
                    data.put("payload", payload);
                    para.put("data", data);
                    try{
                        uavStatusWebsocketClient.send(JSON.toJSONString(para));
                        System.out.println("无人机状态心跳发送");
                    }catch(Exception e){
                        e.printStackTrace();
                        System.out.println(uavStatusWebsocketClient.getServerUri());
                    }
                }
            };
            uavStatusWebsocketClient.setHeartBeatTimer(heartBeatTimer);
            heartBeatTimer.scheduleAtFixedRate(heartBeatTask,date,10*1000);
            this.UAVWebsocketClientMap.put("status", uavStatusWebsocketClient);
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String uavControlWsURL = "ws://" + ip + "api/v1/ws/cmd?x-auth-token=" + token;
        System.out.println(uavControlWsURL);
        UAVWebsocketClient uavControlWebsocketClient;
        try {
            uavControlWebsocketClient = new UAVWebsocketClient(new URI(uavControlWsURL));
            uavControlWebsocketClient.connect();
            System.out.println("连接中。。。");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(!uavControlWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
                //无人机状态灭活
                UAVWebsocketClient uavStatusWebsocketClient0 =  this.UAVWebsocketClientMap.get("status");
                uavStatusWebsocketClient0.getHeartBeatTimer().cancel();
                uavStatusWebsocketClient0.close();
                uavControlWebsocketClient.close();
                return;
            }
            Date date = new Date();
            Timer heartBeatTimer = new Timer();
            TimerTask heartBeatTask = new TimerTask(){
                public void run(){
                    Map<String,Object> para = new HashMap();
                    para.put("biz_code", "user_cmd");
                    para.put("version", "1.0");
                    Date date = new Date();
                    para.put("time_stamp", String.valueOf(date.getTime()));
                    Map<String,String> payload = new HashMap();
                    payload.put("timeStamp", String.valueOf(date.getTime()));
                    Map<String,Object> data = new HashMap();
                    data.put("dataHead", "0x7479");
                    data.put("cmdCode", "0x02");
                    data.put("payload", payload);
                    para.put("data", data);
                    try{
                        uavControlWebsocketClient.send(JSON.toJSONString(para));
                        System.out.println("无人机控制心跳发送");
                    }catch(Exception e){
                        e.printStackTrace();
                        System.out.println(uavControlWebsocketClient.getServerUri());
                    }
                }
            };
            uavControlWebsocketClient.setHeartBeatTimer(heartBeatTimer);
            heartBeatTimer.scheduleAtFixedRate(heartBeatTask,date,10*1000);
            this.UAVWebsocketClientMap.put("control", uavControlWebsocketClient);
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        String ip = this.host.replace("http://", "");
        Date date = new Date();
        Timer heartBeatTimer = new Timer();
        TimerTask heartBeatTask = new TimerTask(){
            public void run(){
                if(token != null){//判断是否为null
                    if(UAVWebsocketClientMap.get("status") != null && UAVWebsocketClientMap.get("control") != null){
                        String oldURL = UAVWebsocketClientMap.get("status").getServerUri().toString();
                        String oldToken = oldURL.split("x-auth-token=")[1];
                        if(!oldToken.equals(token)){//token更新从新创建客户端
                            //原客户端灭活
                            UAVWebsocketClientMap.get("status").close();//无人机状态灭活
                            UAVWebsocketClientMap.get("control").close();//无人机控制灭活
                            UAVWebsocketClientMap.remove("status");
                            UAVWebsocketClientMap.remove("control");
                            String uavStatusWsURL = "ws://" + ip + "api/v1/ws?x-auth-token=" + token;
                            UAVWebsocketClient uavStatusWebsocketClient = null;
                            try {
                                uavStatusWebsocketClient = new UAVWebsocketClient(new URI(uavStatusWsURL));
                                uavStatusWebsocketClient.connect();
                                System.out.println("连接中。。。");
                                try {
                                    Thread.sleep(1000);
                                } catch (InterruptedException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                                if(!uavStatusWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
                                    uavStatusWebsocketClient.close();
                                    uavStatusWebsocketClient = null;
                                }
                            } catch (NumberFormatException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (URISyntaxException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            String uavControlWsURL = "ws://" + ip + "api/v1/ws/cmd?x-auth-token=" + token;
                            UAVWebsocketClient uavControlWebsocketClient = null;
                            try {
                                uavControlWebsocketClient = new UAVWebsocketClient(new URI(uavControlWsURL));
                                uavControlWebsocketClient.connect();
                                System.out.println("连接中。。。");
                                try {
                                    Thread.sleep(1000);
                                } catch (InterruptedException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                                if(!uavControlWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
                                    //无人机状态灭活
                                    UAVWebsocketClient uavStatusWebsocketClient0 =  UAVWebsocketClientMap.get("status");
                                    uavStatusWebsocketClient0.close();
                                    uavControlWebsocketClient.close();
                                    uavStatusWebsocketClient0 = null;
                                    uavControlWebsocketClient = null;
                                    //return;
                                }
                            } catch (NumberFormatException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (URISyntaxException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            if(uavStatusWebsocketClient != null || uavControlWebsocketClient != null){
                                UAVWebsocketClientMap.put("status", uavStatusWebsocketClient);
                                UAVWebsocketClientMap.put("control", uavControlWebsocketClient);
                                Map<String,Object> para = new HashMap();
                                para.put("biz_code", "user_cmd");
                                para.put("version", "1.0");
                                Date date = new Date();
                                para.put("time_stamp", String.valueOf(date.getTime()));
                                Map<String,String> payload = new HashMap();
                                payload.put("timeStamp", String.valueOf(date.getTime()));
                                Map<String,Object> data = new HashMap();
                                data.put("dataHead", "0x7479");
                                data.put("cmdCode", "0x02");
                                data.put("payload", payload);
                                para.put("data", data);
                                try{
                                    uavStatusWebsocketClient.send(JSON.toJSONString(para));
                                    uavControlWebsocketClient.send(JSON.toJSONString(para));
                                    //System.out.println("无人机心跳发送");
                                }catch(Exception e){
                                    e.printStackTrace();
                                    System.out.println(uavStatusWebsocketClient.getServerUri());
                                    System.out.println(uavControlWebsocketClient.getServerUri());
                                    //无人机状态灭活
                                    uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
                                    uavStatusWebsocketClient.close();
                                    //无人机控制灭活
                                    uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
                                    uavControlWebsocketClient.close();
                                    UAVWebsocketClientMap.remove("status");
                                    UAVWebsocketClientMap.remove("control");
                                }
                            }
                        }else{
                            Map<String,Object> para = new HashMap();
                            para.put("biz_code", "user_cmd");
                            para.put("version", "1.0");
                            Date date = new Date();
                            para.put("time_stamp", String.valueOf(date.getTime()));
                            Map<String,String> payload = new HashMap();
                            payload.put("timeStamp", String.valueOf(date.getTime()));
                            Map<String,Object> data = new HashMap();
                            data.put("dataHead", "0x7479");
                            data.put("cmdCode", "0x02");
                            data.put("payload", payload);
                            para.put("data", data);
                            UAVWebsocketClient uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
                            UAVWebsocketClient uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
                            try{
                                uavStatusWebsocketClient.send(JSON.toJSONString(para));
                                uavControlWebsocketClient.send(JSON.toJSONString(para));
                                //System.out.println("无人机心跳发送");
                            }catch(Exception e){
                                e.printStackTrace();
                                System.out.println(uavStatusWebsocketClient.getServerUri());
                                System.out.println(uavControlWebsocketClient.getServerUri());
                                //无人机状态灭活
                                uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
                                uavStatusWebsocketClient.close();
                                //无人机控制灭活
                                uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
                                uavControlWebsocketClient.close();
                                UAVWebsocketClientMap.remove("status");
                                UAVWebsocketClientMap.remove("control");
                            }
                        }
                    }else{
                        String uavStatusWsURL = "ws://" + ip + "api/v1/ws?x-auth-token=" + token;
                        System.out.println(uavStatusWsURL);
                        UAVWebsocketClient uavStatusWebsocketClient = null;
                        try {
                            uavStatusWebsocketClient = new UAVWebsocketClient(new URI(uavStatusWsURL));
                            uavStatusWebsocketClient.connect();
                            System.out.println("连接中。。。");
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            if(!uavStatusWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
                                uavStatusWebsocketClient.close();
                                uavStatusWebsocketClient = null;
                            }
                        } catch (NumberFormatException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (URISyntaxException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        String uavControlWsURL = "ws://" + ip + "api/v1/ws/cmd?x-auth-token=" + token;
                        System.out.println(uavControlWsURL);
                        UAVWebsocketClient uavControlWebsocketClient = null;
                        try {
                            uavControlWebsocketClient = new UAVWebsocketClient(new URI(uavControlWsURL));
                            uavControlWebsocketClient.connect();
                            System.out.println("连接中。。。");
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            if(!uavControlWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
                                //无人机状态灭活
                                UAVWebsocketClient uavStatusWebsocketClient0 =  UAVWebsocketClientMap.get("status");
                                uavStatusWebsocketClient0.close();
                                uavControlWebsocketClient.close();
                                uavStatusWebsocketClient0 = null;
                                uavControlWebsocketClient = null;
                            }
                        } catch (NumberFormatException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (URISyntaxException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        if(uavStatusWebsocketClient != null || uavControlWebsocketClient != null){
                            UAVWebsocketClientMap.put("status", uavStatusWebsocketClient);
                            UAVWebsocketClientMap.put("control", uavControlWebsocketClient);
                            Map<String,Object> para = new HashMap();
                            para.put("biz_code", "user_cmd");
                            para.put("version", "1.0");
                            Date date = new Date();
                            para.put("time_stamp", String.valueOf(date.getTime()));
                            Map<String,String> payload = new HashMap();
                            payload.put("timeStamp", String.valueOf(date.getTime()));
                            Map<String,Object> data = new HashMap();
                            data.put("dataHead", "0x7479");
                            data.put("cmdCode", "0x02");
                            data.put("payload", payload);
                            para.put("data", data);
                            try{
                                uavStatusWebsocketClient.send(JSON.toJSONString(para));
                                uavControlWebsocketClient.send(JSON.toJSONString(para));
                                //System.out.println("无人机心跳发送");
                            }catch(Exception e){
                                e.printStackTrace();
                                System.out.println(uavStatusWebsocketClient.getServerUri());
                                System.out.println(uavControlWebsocketClient.getServerUri());
                                //无人机状态灭活
                                uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
                                uavStatusWebsocketClient.close();
                                //无人机控制灭活
                                uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
                                uavControlWebsocketClient.close();
                                UAVWebsocketClientMap.remove("status");
                                UAVWebsocketClientMap.remove("control");
                            }
                        }
                    }
                }
            }
        };
        heartBeatTimer.scheduleAtFixedRate(heartBeatTask,date,10*1000);
    }
    public String Encrypt(String sSrc, String sKey) {
        if (sKey == null) {
ard-work/src/main/java/com/ruoyi/device/uav/websocketclient/UAVWebsocketClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.device.uav.websocketclient;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
import java.util.Timer;
public class UAVWebsocketClient extends WebSocketClient {
    private URI serverUri;
    public UAVWebsocketClient(URI serverUri) {
        super(serverUri);
        this.serverUri = serverUri;
    }
    public URI getServerUri() {
        return serverUri;
    }
    public void setServerUri(URI serverUri) {
        this.serverUri = serverUri;
    }
    @Override
    public void onOpen(ServerHandshake serverHandshake) {
    }
    @Override
    public void onMessage(String s) {
    }
    @Override
    public void onClose(int i, String s, boolean b) {
    }
    @Override
    public void onError(Exception e) {
    }
}
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -901,6 +901,23 @@
    @Override
    public Results chaseCarByCarId(String usersId, String carId, String cycle) {
        ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
        String userId ="";
        String password = "";
        if(ardSyUser != null){
            userId = ardSyUser.getUserId();
            password = DigestUtils.md5Hex(ardSyUser.getPassword());
        }else{
            return Results.error("没有挂接三一车辆用户");
        }
        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
        String syURL = "";
        if(syURLResult.size() != 0){
            syURL = syURLResult.get(0).getConfigValue();
        }else{
            return Results.error("三一车辆地址未录入");
        }
        String sessionId = "";
        for(String key : ONLINE_USER_SESSIONS.keySet()){
            if(key.startsWith(usersId + "_")){
@@ -916,6 +933,10 @@
                    userCarTimerMap.get(usersId).cancel();
                    userCarTimerMap.remove(usersId);
                    PositionContainer.getUserPositionMap().remove(usersId);
                    Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
                    String sySessionId = (String) loginResult.get("sessionId");
                    String params = "%7B%220020%22:%220%22,%220029%22:%2230%22%7d";
                    sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//停止追踪,改为定时30s推送
                    System.out.println("停止追踪");
                }
                return Results.succeed("停止追踪");
@@ -927,6 +948,19 @@
                    Map<String, Map<String, Object>> map = new HashMap();
                    map.put(carId, new HashMap());
                    PositionContainer.getUserPositionMap().put(usersId, map);
                    Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
                    String sySessionId = (String) loginResult.get("sessionId");
                    List<SysConfig> distanceSYResult = sysConfigMapper.selectByType("31time");
                    String time = "";
                    if(distanceSYResult.size() != 0){
                        time = distanceSYResult.get(0).getConfigValue();
                    }else{
                        return Results.error("三一车辆定时未录入");
                    }
                    String params = "%7B%220020%22:%220%22,%220029%22:%22"+time+"%22%7d";
                    sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//开始追踪,改为定时推送
                    Map<String, Object> position = PositionContainer.getCarPositionMap().get(carId);//查询当前车辆位置
                    if (position != null) {
                        if (position.size() != 0) {
@@ -954,6 +988,25 @@
                                            userCarTimerMap.get(usersId).cancel();
                                            userCarTimerMap.remove(usersId);
                                            PositionContainer.getUserPositionMap().remove(usersId);
                                            ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
                                            String userId ="";
                                            String password = "";
                                            if(ardSyUser != null){
                                                userId = ardSyUser.getUserId();
                                                password = ardSyUser.getPassword();
                                            }
                                            List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
                                            String syURL = "";
                                            if(syURLResult.size() != 0){
                                                syURL = syURLResult.get(0).getConfigValue();
                                            }
                                            if(!userId.equals("") && !password.equals("") && !syURL.equals("")){
                                                Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
                                                String sySessionId = (String) loginResult.get("sessionId");
                                                String params = "%7B%220020%22:%220%22,%220029%22:%2230%22%7d";
                                                sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//停止追踪,改为定时30s
                                            }
                                            System.out.println("用户离线,停止追踪");
                                        }
                                    }
@@ -969,6 +1022,19 @@
                    Map<String, Map<String, Object>> map = new HashMap();
                    map.put(carId, new HashMap());
                    PositionContainer.getUserPositionMap().put(usersId, map);
                    Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
                    String sySessionId = (String) loginResult.get("sessionId");
                    List<SysConfig> distanceSYResult = sysConfigMapper.selectByType("31time");
                    String time = "";
                    if(distanceSYResult.size() != 0){
                        time = distanceSYResult.get(0).getConfigValue();
                    }else{
                        return Results.error("三一车辆定时未录入");
                    }
                    String params = "%7B%220020%22:%220%22,%220029%22:%22"+time+"%22%7d";
                    sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//开始追踪,改为定时推送
                    Map<String, Object> position = PositionContainer.getCarPositionMap().get(carId);//查询当前车辆位置
                    if (position != null) {
                        if (position.size() != 0) {
@@ -996,6 +1062,25 @@
                                            userCarTimerMap.get(usersId).cancel();
                                            userCarTimerMap.remove(usersId);
                                            PositionContainer.getUserPositionMap().remove(usersId);
                                            ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
                                            String userId ="";
                                            String password = "";
                                            if(ardSyUser != null){
                                                userId = ardSyUser.getUserId();
                                                password = ardSyUser.getPassword();
                                            }
                                            List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
                                            String syURL = "";
                                            if(syURLResult.size() != 0){
                                                syURL = syURLResult.get(0).getConfigValue();
                                            }
                                            if(!userId.equals("") && !password.equals("") && !syURL.equals("")){
                                                Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
                                                String sySessionId = (String) loginResult.get("sessionId");
                                                String params = "%7B%220020%22:%220%22,%220029%22:%2230%22%7d";
                                                sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//停止追踪,改为定时30s
                                            }
                                            System.out.println("用户离线,停止追踪");
                                        }
                                    }
ard-work/src/main/java/com/ruoyi/utils/forest/SYClient.java
@@ -41,4 +41,7 @@
    @Get(url = "${syURL}/gps-web/api/get_alarm_h_pfm_detail.jsp?carId=${carId}&startTime=${startTime}&endTime=${endTime}&typeIds=&speed=&duration=&alarmSrcs=&alarmLevels=1&sessionId=${sessionId}")
    Map<String,Object> getAlarmHPfmCountDetail(@Var("syURL") String syURL, @Var("carId") String carId,@Var("sessionId") String sessionId,@Var("startTime") String startTime,@Var("endTime") String endTime);
    @Get(url = "${syURL}/gps-web/api/send_cmd.jsp?params=${paramsStr}&userId=admin&loginType=user&carId=${carId}&cmdId=${cmdId}&cmd=${cmd}&sessionId=${sessionId}")
    Map<String,Object> changePositionSendMode(@Var("syURL") String syURL, @Var("carId") String carId,@Var("cmdId") Integer cmdId,@Var("cmd") String cmd,@Var("paramsStr") String paramsStr,@Var("sessionId") String sessionId);
}
ard-work/src/main/resources/mapper/alarmpoints/ArdAlarmpointsWellMapper.xml
@@ -70,6 +70,32 @@
                 left join sys_user u on u.user_id = c.user_id
    </sql>
    <resultMap type="ArdAlarmpointsWell" id="ArdAlarmpointsWellOnlyResult">
        <result property="id" column="id"/>
        <result property="wellId" column="well_id"/>
        <result property="wellNumber" column="well_number"/>
        <result property="oilProduction" column="oil_production"/>
        <result property="wellBlock" column="well_block"/>
        <result property="productionDate" column="production_date"/>
        <result property="displacementMode" column="displacement_mode"/>
        <result property="surroundingEnvironment" column="surrounding_environment"/>
        <result property="wellType" column="well_type"/>
        <result property="installedLoad" column="installed_load"/>
        <result property="meteringStation" column="metering_station"/>
        <result property="transferStation" column="transfer_station"/>
        <result property="dehydrationStation" column="dehydration_station"/>
        <result property="runStatus" column="run_status"/>
        <result property="longitude" column="longitude"/>
        <result property="latitude" column="latitude"/>
        <result property="altitude" column="altitude"/>
        <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>
    <select id="selectArdAlarmpointsWellList" parameterType="ArdAlarmpointsWell" resultMap="ArdAlarmpointsWellResult">
        <include refid="selectArdAlarmpointsWellVo"/>
        <where>
@@ -259,6 +285,20 @@
        </foreach>
    </select>
    <select id="getWellDataByPatrolplanIdAndPosition" resultMap="ArdAlarmpointsWellOnlyResult">
        select aaw.* from ard_app_patrolplan aap
        inner join ard_app_patrolpoint aap0 on aap.id = aap0.patrolplan_id
        inner join ard_alarmpoints_well aaw on aap0.alarmpoints_id = aaw.id
        where del is null and aap.id = #{patrolplanId}
        and f_compute_distance(cast(#{longitude} as decimal),cast(#{latitude} as decimal),aaw.longitude,aaw.latitude)
        &lt;= (select cast(sc.config_value as decimal) from sys_config sc where sc.config_key = 'appAlarmPointsDistance')
        order by f_compute_distance(cast(#{longitude} as decimal),cast(#{latitude} as decimal),aaw.longitude,aaw.latitude) desc limit 1 offset 0
    </select>
    <select id="getWellById" resultMap="ArdAlarmpointsWellOnlyResult">
        select aaw.* from ard_alarmpoints_well aaw where aaw.id = #{id}
    </select>
    <select id="conditionList" parameterType="List"
            resultType="com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWellDeptVo">
ard-work/src/main/resources/mapper/app/ArdAppPositionMapper.xml
@@ -97,4 +97,16 @@
        and aaa.state = '1' and su.app_online_state = '1'
        order by aap.create_time desc limit 1 offset 0
    </select>
    <select id="getAPPPositionByUserIdAndTime" parameterType="java.lang.String" resultMap="ArdAppPositionResult">
        select * from ard_app_position aap
        where aap.user_id = #{userId} and aap.create_time &gt;= #{beginTime}
        and aap.create_time &lt;= #{endTime} order by aap.create_time asc
    </select>
    <select id="getLastAPPPositionByUserId" parameterType="java.lang.String" resultMap="ArdAppPositionResult">
        select * from ard_app_position aap
        where aap.user_id = #{userId}
        order by aap.create_time desc limit 1 offset 0
    </select>
</mapper>
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -265,4 +265,5 @@
            return Results.succeed("修改密码成功!");
        }
    }
}
ruoyi-admin/src/main/resources/application-dev.yml
@@ -2,6 +2,17 @@
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 8080
  ssl:
    # å¼€å¯HTTPS,并配置自签名证书
    enabled: true
    #秘钥库文件名称,即上面生成的自签名证书
    key-store: classpath:keystore
    # ç”Ÿæˆç§˜é’¥åº“文件的密码
    key-store-password: 123456
    # ç§˜é’¥åº“类型(JKS为jdk的keytool工具默认生成的秘钥库类型)
    key-store-type: JKS
    # ç§˜é’¥åˆ«å
    key-alias: tomcat
  servlet:
    # åº”用的访问路径
    context-path: /
@@ -18,23 +29,24 @@
# æ—¥å¿—配置
logging:
  level:
    com.ruoyi.common.filter.MyI18nInterceptor: debug
    com.ruoyi.common.filter.MyI18nInterceptor: info
    authorize: info
    minio: info
    hikSdk: debug
    dhSdk: debug
    sdk: debug
    vtdu: debug
    hikSdk: info
    dhSdk: info
    sdk: info
    vtdu: info
    stealAlarm: info
    websocket: info
    patrolInspectionTask: info
    mqtt: info
    patrolInspectionTask: debug
    mqtt: debug
    guideQueue: debug
    rongCloud: info
    cmd: info
    cmd: debug
    alarm: debug
    uav: info
    sy: debug
    mqttCar: debug
    sy: info
    mqttCar: info
## knife4j配置
knife4j:
  # knife4j增强功能,开启后下面参数才生效
@@ -61,7 +73,7 @@
#全部主题:minioEvent,radar,stealelec,tube,camera,external,accessControl,apponekey,digitization3
mqtt:
  host: tcp://192.168.2.15:1883
  clientId: Server-227
  clientId: Server
  username: admin
  password: admin
  topic: minioEvent,radar,stealelec,tube,camera,external,accessControl,apponekey,digitization3,radarForceGuide
@@ -70,4 +82,4 @@
  enabled: true
#三一车辆开关
syCar:
  enabled: true
  enabled: true
ruoyi-admin/src/main/resources/application-prod.yml
@@ -2,6 +2,17 @@
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 8080
  ssl:
    # å¼€å¯HTTPS,并配置自签名证书
    enabled: true
    #秘钥库文件名称,即上面生成的自签名证书
    key-store: classpath:keystore
    # ç”Ÿæˆç§˜é’¥åº“文件的密码
    key-store-password: 123456
    # ç§˜é’¥åº“类型(JKS为jdk的keytool工具默认生成的秘钥库类型)
    key-store-type: JKS
    # ç§˜é’¥åˆ«å
    key-alias: tomcat
  servlet:
    # åº”用的访问路径
    context-path: /
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -144,4 +144,8 @@
    List<SysUser> getOnlineCommander(String usersId);
    List<SysUser> getOnlinePC(@Param("usersId") String usersId,@Param("onLinePCIdList")List<String> onLinePCIdList);
    List<SysUser> getOwnAndChildrenOnlineSoilderList(@Param("deptIdList")List<Long> deptIdList);
    List<SysUser> getOwnAndChildrenSoilderListAll(@Param("deptIdList")List<Long> deptIdList);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -18,6 +18,7 @@
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.system.mapper.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -36,11 +37,6 @@
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysPostMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserPostMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
@@ -77,6 +73,9 @@
    private RedisCache redisCache;
    @Resource
    private ArdAlarmTypeConfigMapper ardAlarmTypeConfigMapper;
    @Resource
    private SysDeptMapper sysDeptMapper;
    /**
     * é¡¹ç›®å¯åŠ¨æ—¶ï¼Œåˆå§‹åŒ–å‚æ•°åˆ°ç¼“å­˜
@@ -647,4 +646,5 @@
        queryWrapper.eq("dept_id",deptId).eq("del_flag","0").eq("app_user_type","1");
        return userMapper.selectList(queryWrapper);
    }
}
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -342,4 +342,33 @@
            #{userId}
        </foreach>
    </select>
    <select id="getOwnAndChildrenOnlineSoilderList" resultMap="SysUserOnlyResult">
        select distinct su.user_id,su.dept_id,su.user_name,
        concat(su.nick_name,'(',sd.dept_name,')') as nick_name from sys_user su
        inner join sys_user_role sur on su.user_id = sur.user_id
        inner join sys_role sr on sur.role_id = sr.role_id
        inner join sys_dept sd on su.dept_id = sd.dept_id
        where sr.role_key = 'appUser' and su.dept_id in
        <foreach collection="deptIdList" item="deptId" open="(" close=")" separator=",">
            #{deptId}
        </foreach>
        and su.app_online_state = '1' and su.status = '0' and su.del_flag = '0'
        order by su.dept_id asc
    </select>
    <select id="getOwnAndChildrenSoilderListAll" resultMap="SysUserOnlyResult">
        select distinct su.user_id,su.dept_id,su.user_name,
        concat(su.nick_name,'(',sd.dept_name,')') as nick_name,
        su.app_online_state from sys_user su
        inner join sys_user_role sur on su.user_id = sur.user_id
        inner join sys_role sr on sur.role_id = sr.role_id
        inner join sys_dept sd on su.dept_id = sd.dept_id
        where sr.role_key = 'appUser' and su.dept_id in
        <foreach collection="deptIdList" item="deptId" open="(" close=")" separator=",">
            #{deptId}
        </foreach>
        and su.status = '0' and su.del_flag = '0'
        order by su.dept_id asc
    </select>
</mapper>