From 8e7e81802c743b96ef49969817749069fe0818e1 Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期四, 18 四月 2024 14:51:25 +0800
Subject: [PATCH] 单兵端查询自己发起的全部申请提交

---
 ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java |  490 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 474 insertions(+), 16 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java
index 85ecd11..90d58d2 100644
--- a/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/app/application/service/impl/ArdAppApplicationServiceImpl.java
@@ -1,15 +1,30 @@
 package com.ruoyi.app.application.service.impl;
 
-import java.util.HashMap;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
-import com.alibaba.fastjson2.JSON;
+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 java.util.ArrayList;
-import java.util.Map;
 
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -17,28 +32,103 @@
 import com.ruoyi.app.application.domain.ArdAppApplication;
 import com.ruoyi.app.application.service.IArdAppApplicationService;
 
+import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
+import javax.websocket.Session;
+
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
 
 /**
  * 鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆Service涓氬姟灞傚鐞�
  *
  * @author ard
- * @date 2024-01-23
+ * @date 2024-01-25
  */
 @Service
 public class ArdAppApplicationServiceImpl implements IArdAppApplicationService {
     @Resource
     private ArdAppApplicationMapper ardAppApplicationMapper;
 
+    @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();
+
+    @PostConstruct
+    public void init(){
+        ArdAppApplication para = new ArdAppApplication();
+        para.setState("1");//鏌ヨ鍚屾剰鐨勭敵璇�
+        List<ArdAppApplication> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationList(para);
+        Date date = new Date();
+        Long now = date.getTime();
+        for(ArdAppApplication ardAppApplication : ardAppApplicationList){
+            Long begin = Long.parseLong(ardAppApplication.getBegin());
+            //鍒ゆ柇鏄惁瓒呮椂
+            if(now - begin <= 24*60*60*1000){//鏈秴鏃朵粠鏂板垱寤虹嚎绋�
+                String key = ardAppApplication.getCommanderId() + "," + ardAppApplication.getSoilderId() + "," + ardAppApplication.getApplicationType();
+                Thread thread = new Thread(key){//鍒涘缓绾跨▼璁℃椂鍓╀綑鏃堕暱
+                    @Override
+                    public void run() {
+                        try {
+                            Thread.sleep(24*60*60*1000 - (now - begin));//鍓╀綑鏃堕暱
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                            return;
+                        }
+                        Thread currentThread = Thread.currentThread();
+                        String state = "000";//state涓�000锛屽嵆瓒呮椂
+                        String commanderId = currentThread.getName().split(",")[0];
+                        String soilderId = currentThread.getName().split(",")[1];
+                        String applicationType = currentThread.getName().split(",")[2];
+                        int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state);
+                        threadMap.remove(currentThread.getName());
+                    }
+                };
+                thread.start();
+                this.threadMap.put(key,thread);
+            }else{//瓒呮椂鏇存敼鐘舵��
+                String state = "000";//state涓�000锛屽嵆瓒呮椂
+                String commanderId = ardAppApplication.getCommanderId();
+                String soilderId = ardAppApplication.getSoilderId();
+                String applicationType = ardAppApplication.getApplicationType();
+                int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state);
+            }
+        }
+    }
+
     /**
      * 鏌ヨ鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆
      *
-     * @param applicationId 鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆涓婚敭
+     * @param soilderId 鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆涓婚敭
      * @return 鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆
      */
     @Override
-    public ArdAppApplication selectArdAppApplicationByApplicationId(String applicationId) {
-        return ardAppApplicationMapper.selectArdAppApplicationByApplicationId(applicationId);
+    public ArdAppApplication selectArdAppApplicationBySoilderId(String soilderId) {
+        return ardAppApplicationMapper.selectArdAppApplicationBySoilderId(soilderId);
     }
 
     /**
@@ -77,23 +167,23 @@
     /**
      * 鎵归噺鍒犻櫎鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆
      *
-     * @param applicationIds 闇�瑕佸垹闄ょ殑鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆涓婚敭
+     * @param soilderIds 闇�瑕佸垹闄ょ殑鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆涓婚敭
      * @return 缁撴灉
      */
     @Override
-    public int deleteArdAppApplicationByApplicationIds(String[] applicationIds) {
-        return ardAppApplicationMapper.deleteArdAppApplicationByApplicationIds(applicationIds);
+    public int deleteArdAppApplicationBySoilderIds(String[] soilderIds) {
+        return ardAppApplicationMapper.deleteArdAppApplicationBySoilderIds(soilderIds);
     }
 
     /**
      * 鍒犻櫎鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆淇℃伅
      *
-     * @param applicationId 鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆涓婚敭
+     * @param soilderId 鍗曞叺绔敵璇锋煡鐪嬫寚鎸ョ浣嶇疆鎴栦笁涓�杞﹁締浣嶇疆涓婚敭
      * @return 缁撴灉
      */
     @Override
-    public int deleteArdAppApplicationByApplicationId(String applicationId) {
-        return ardAppApplicationMapper.deleteArdAppApplicationByApplicationId(applicationId);
+    public int deleteArdAppApplicationBySoilderId(String soilderId) {
+        return ardAppApplicationMapper.deleteArdAppApplicationBySoilderId(soilderId);
     }
 
     @Override
@@ -109,6 +199,7 @@
             ardAppApplication.setApplicationType("Commander");
             ardAppApplication.setBegin("");
             ardAppApplication.setState("0");
+            ardAppApplication.setSoilderCheck("true");//鎸囨尌绔湭瀹℃壒涔熻涓簍rue,涓嶉渶瑕佸崟鍏电鏌ョ湅
             int resultSingle = ardAppApplicationMapper.updateArdAppApplicationByCommanderIdAndSoilderIdAndType(ardAppApplication);
             result = result + resultSingle;
             if(resultSingle == 0){
@@ -133,12 +224,30 @@
             ardAppApplication.setApplicationType("SYCar");
             ardAppApplication.setBegin("");
             ardAppApplication.setState("0");
+            ardAppApplication.setSoilderCheck("true");//鎸囨尌绔湭瀹℃壒涔熻涓簍rue,涓嶉渶瑕佸崟鍏电鏌ョ湅
             int resultSingle = ardAppApplicationMapper.updateArdAppApplicationByCommanderIdAndSoilderIdAndType(ardAppApplication);
             result = result + resultSingle;
             if(resultSingle == 0){
                 ardAppApplication.setApplicationId(IdUtils.simpleUUID());
                 resultSingle = ardAppApplicationMapper.insertArdAppApplication(ardAppApplication);
                 result = result + resultSingle;
+            }
+            //鍔犲叆缁檖c绔痺ebsocket杞彂
+            List<SysRole> sysRoleList = sysRoleMapper.selectRolePermissionByUserId(commanderId);
+            for(SysRole sysRole : sysRoleList){
+                if(!sysRole.getRoleKey().equals("appLeader")){
+                    Map<String,Object> resultMap = ardAppApplicationMapper.selectSYCarApplicationByPCIdAndSoilderId(commanderId,usersId);
+                    Map<String,Map<String,Object>> msg = new HashMap();
+                    msg.put("60000",resultMap);
+                    for(String id : ONLINE_USER_SESSIONS.keySet()){
+                        if(id.startsWith(commanderId)){
+                            Session session = ONLINE_USER_SESSIONS.get(id);
+                            WebSocketUtils.sendMessage(session,msg);
+                            break;
+                        }
+                    }
+                    break;//涓�涓猵c绔敤鎴峰彲鑳芥寕鎺ュ涓鑹诧紝姣忎釜pc绔彧杞彂涓�娆�
+                }
             }
         }
         return result;
@@ -147,8 +256,8 @@
     @Override
     public Map<String, List<Map<String, Object>>> getCheckPosition(String usersId) {
         Map<String, List<Map<String, Object>>> result = new HashMap();
-        //鏌ョ湅鎸囨尌绔綅缃敵璇�
         List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationByCommanderId(usersId);
+        //鏌ョ湅鎸囨尌绔綅缃敵璇�
         List<Map<String, Object>> resultCommanderPosition = new ArrayList();
         for(Map<String, Object> map : ardAppApplicationList){
             if(((String)map.get("applicationType")).equals("Commander")){
@@ -166,4 +275,353 @@
         result.put("SYCars",resultSYCarsPosition);
         return result;
     }
+
+    @Override
+    public int approvalCheckPosition(String commanderId, Map<String, String> para) {
+        String applicationType = para.get("applicationType");
+        String soilderId = para.get("soilderId");
+        String state = para.get("state");
+        String begin = "";
+        if(state.equals("1")){//state涓�1锛屽嵆鍚屾剰
+            begin = String.valueOf(new Date().getTime());//璁剧疆寮�濮嬫椂闂�
+            int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,begin,state);
+            String key = commanderId + "," + soilderId + "," + applicationType;
+            Thread thread = new Thread(key){//鍒涘缓绾跨▼璁℃椂24灏忔椂
+                @Override
+                public void run() {
+                    try {
+                        Thread.sleep(24*60*60*1000);
+                        //Thread.sleep(3*60*1000);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                        return;
+                    }
+                    Thread currentThread = Thread.currentThread();
+                    String state = "000";//state涓�000锛屽嵆瓒呮椂
+                    String commanderId = currentThread.getName().split(",")[0];
+                    String soilderId = currentThread.getName().split(",")[1];
+                    String applicationType = currentThread.getName().split(",")[2];
+                    int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state);
+                    threadMap.remove(currentThread.getName());
+                }
+            };
+            thread.start();
+            this.threadMap.put(key,thread);
+            return result;
+        }else if(state.equals("-1")){//state涓�1锛屽嵆椹冲洖
+            int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state);
+            return result;
+        }else if(state.equals("00")){//state涓�00锛屽嵆鎾ら攢
+            String key = commanderId + "," + soilderId + "," + applicationType;
+            try{
+                this.threadMap.get(key).interrupt();//鎾ら攢鍚庣嚎绋嬮攢姣�
+            }catch(Exception e){
+                e.printStackTrace();
+            }
+            this.threadMap.remove(key);
+            int result = ardAppApplicationMapper.updateArdAppApplicationBeginByCommanderIdAndSoilderIdAndType(commanderId,soilderId,applicationType,"",state);
+            return result;
+        }
+        return 0;
+    }
+
+    @Override
+    public Map<String, List<Map<String, Object>>> getCheckPositionTrue(String commanderId) {
+        Map<String, List<Map<String, Object>>> result = new HashMap();
+        List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationByCommanderIdTrue(commanderId);
+        Date date = new Date();
+        //鏌ョ湅鎸囨尌绔綅缃敵璇�
+        List<Map<String, Object>> resultCommanderPosition = new ArrayList();
+        //鏌ョ湅杞﹁締浣嶇疆鐢宠
+        List<Map<String, Object>> resultSYCarsPosition = new ArrayList();
+        for(Map<String, Object> map : ardAppApplicationList){
+            Long interval = date.getTime() - Long.parseLong((String)map.get("begin"));
+            interval = 24 * 60 * 60 * 1000 - interval;
+            Long hour = interval / (60 * 60 * 1000);
+            Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000);
+            Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000;
+            map.put("time",hour + "鏃�" + min + "鍒�" + second + "绉�");
+            if(((String)map.get("applicationType")).equals("Commander")){
+                resultCommanderPosition.add(map);
+            }else if(((String)map.get("applicationType")).equals("SYCar")){
+                resultSYCarsPosition.add(map);
+            }
+        }
+        result.put("commander",resultCommanderPosition);
+        result.put("SYCars",resultSYCarsPosition);
+        return result;
+    }
+
+    @Override
+    public Map<String, List<Map<String, Object>>> getSendPositionTrue(String soilderId) {
+        Map<String, List<Map<String, Object>>> result = new HashMap();
+        List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationBySoilderIdTrue(soilderId);
+        Date date = new Date();
+        //鏌ョ湅鎸囨尌绔綅缃敵璇�
+        List<Map<String, Object>> resultCommanderPosition = new ArrayList();
+        //鏌ョ湅杞﹁締浣嶇疆鐢宠
+        List<Map<String, Object>> resultSYCarsPosition = new ArrayList();
+        for(Map<String, Object> map : ardAppApplicationList){
+            Long interval = date.getTime() - Long.parseLong((String)map.get("begin"));
+            interval = 24 * 60 * 60 * 1000 - interval;
+            Long hour = interval / (60 * 60 * 1000);
+            Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000);
+            Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000;
+            map.put("time",hour + "鏃�" + min + "鍒�" + second + "绉�");
+            if(((String)map.get("applicationType")).equals("Commander")){
+                resultCommanderPosition.add(map);
+            }else if(((String)map.get("applicationType")).equals("SYCar")){
+                resultSYCarsPosition.add(map);
+            }
+        }
+        result.put("commander",resultCommanderPosition);
+        result.put("SYCars",resultSYCarsPosition);
+        return result;
+    }
+
+    @Override
+    public Map<String, List<Map<String, Object>>> getCheckPositionOwn(String soilderId) {
+        Map<String, List<Map<String, Object>>> result = new HashMap();
+        List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationBySoilderIdFalse(soilderId);
+        Date date = new Date();
+        //鏌ョ湅鎸囨尌绔綅缃敵璇�
+        List<Map<String, Object>> resultCommanderPosition = new ArrayList();
+        //鏌ョ湅杞﹁締浣嶇疆鐢宠
+        List<Map<String, Object>> resultSYCarsPosition = new ArrayList();
+        for(Map<String, Object> map : ardAppApplicationList){
+            /*if(((String)map.get("state")).equals("1")){
+                Long interval = date.getTime() - Long.parseLong((String)map.get("begin"));
+                interval = 24 * 60 * 60 * 1000 - interval;
+                Long hour = interval / (60 * 60 * 1000);
+                Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000);
+                map.put("time",hour + "鏃�" + min + "鍒�");
+                if(((String)map.get("applicationType")).equals("Commander")){
+                    resultCommanderPosition.add(map);
+                }else if(((String)map.get("applicationType")).equals("SYCar")){
+                    resultSYCarsPosition.add(map);
+                }
+            }else{
+                map.put("time","");
+                if(((String)map.get("applicationType")).equals("Commander")){
+                    resultCommanderPosition.add(map);
+                }else if(((String)map.get("applicationType")).equals("SYCar")){
+                    resultSYCarsPosition.add(map);
+                }
+            }*/
+            if(((String)map.get("applicationType")).equals("Commander")){
+                resultCommanderPosition.add(map);
+            }else if(((String)map.get("applicationType")).equals("SYCar")){
+                resultSYCarsPosition.add(map);
+            }
+        }
+        result.put("commander",resultCommanderPosition);
+        result.put("SYCars",resultSYCarsPosition);
+        return result;
+    }
+
+    @Override
+    public int approvalCheckPositionOwn(String soilderId, Map<String, String> para) {
+        String applicationType = para.get("applicationType");
+        String commanderId = para.get("commanderId");
+        int result = ardAppApplicationMapper.updateSoilderCheckByCommanderIdAndSoilderIdAndType(soilderId,commanderId,applicationType);
+        return result;
+    }
+
+    @Override
+    public List<Map<String, Object>> getCheckPositionNo(String commanderId) {///
+        List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationByCommanderIdNoCheck(commanderId);
+        Date date = new Date();
+        for(Map<String, Object> map : ardAppApplicationList){
+            if(((String)map.get("begin")).equals("")){
+                map.put("time","");
+            }else{
+                Long interval = date.getTime() - Long.parseLong((String)map.get("begin"));
+                interval = 24 * 60 * 60 * 1000 - interval;
+                Long hour = interval / (60 * 60 * 1000);
+                Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000);
+                Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000;
+                map.put("time",hour + "鏃�" + min + "鍒�" + second + "绉�");
+            }
+        }
+        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;
+    }
+
+    @Override
+    public Map<String, List<Map<String, Object>>> getSendPositionALL(String soilderId) {
+        Map<String, List<Map<String, Object>>> result = new HashMap();
+        List<Map<String,Object>> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationBySoilderIdALL(soilderId);
+        Date date = new Date();
+        //鏌ョ湅鎸囨尌绔綅缃敵璇�
+        List<Map<String, Object>> resultCommanderPosition = new ArrayList();
+        //鏌ョ湅杞﹁締浣嶇疆鐢宠
+        List<Map<String, Object>> resultSYCarsPosition = new ArrayList();
+        for(Map<String, Object> map : ardAppApplicationList){
+            if(((String)map.get("begin")).equals("")){
+                map.put("time","");
+                if(((String)map.get("applicationType")).equals("Commander")){
+                    resultCommanderPosition.add(map);
+                }else if(((String)map.get("applicationType")).equals("SYCar")){
+                    resultSYCarsPosition.add(map);
+                }
+            }else{
+                Long interval = date.getTime() - Long.parseLong((String)map.get("begin"));
+                interval = 24 * 60 * 60 * 1000 - interval;
+                Long hour = interval / (60 * 60 * 1000);
+                Long min = (interval - hour * 60 * 60 * 1000) / (60 * 1000);
+                Long second = (interval - hour * 60 * 60 * 1000 - min * 60 * 1000) / 1000;
+                map.put("time",hour + "鏃�" + min + "鍒�" + second + "绉�");
+                if(((String)map.get("applicationType")).equals("Commander")){
+                    resultCommanderPosition.add(map);
+                }else if(((String)map.get("applicationType")).equals("SYCar")){
+                    resultSYCarsPosition.add(map);
+                }
+            }
+        }
+        result.put("commander",resultCommanderPosition);
+        result.put("SYCars",resultSYCarsPosition);
+        return result;
+    }
+
+    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;
+    }
 }

--
Gitblit v1.9.3