From 57c673aa3e83677bcf5d30b4b45d06bae6609db8 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期四, 08 八月 2024 16:14:40 +0800
Subject: [PATCH] 优化:获取会话

---
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockProcessLogServiceImpl.java |  528 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 474 insertions(+), 54 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockProcessLogServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockProcessLogServiceImpl.java
index 99aacaa..0761bbb 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockProcessLogServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockProcessLogServiceImpl.java
@@ -1,28 +1,32 @@
 package com.ruoyi.sy.service.impl;
 
 import java.awt.geom.Point2D;
+import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
+import com.alibaba.fastjson2.JSON;
+import com.github.pagehelper.PageHelper;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysConfig;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.sy.domain.ArdSyUser;
-import com.ruoyi.sy.domain.ArdTankLock;
-import com.ruoyi.sy.domain.ArdTankWall;
-import com.ruoyi.sy.mapper.ArdSyUserMapper;
-import com.ruoyi.sy.mapper.ArdTankLockMapper;
-import com.ruoyi.sy.mapper.ArdTankWallMapper;
+import com.ruoyi.sy.domain.*;
+import com.ruoyi.sy.gps31.PositionContainer;
+import com.ruoyi.sy.mapper.*;
 import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.utils.forest.SYClient;
+import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.gps.GeoTools;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
 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;
 import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.sy.mapper.ArdTankLockProcessLogMapper;
-import com.ruoyi.sy.domain.ArdTankLockProcessLog;
 import com.ruoyi.sy.service.IArdTankLockProcessLogService;
 
 import javax.annotation.Resource;
@@ -51,7 +55,19 @@
     private ArdTankLockMapper ardTankLockMapper;
 
     @Resource
+    private ArdTankWallTemporaryMapper ardTankWallTemporaryMapper;
+
+    @Resource
+    private ArdTankLockAutoProcessLogMapper ardTankLockAutoProcessLogMapper;
+
+    @Resource
     private SYClient sYClient;
+
+    @Value("${syCar.userId}")
+    private String userId;
+
+    @Value("${syCar.password}")
+    private String password;
 
     private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
@@ -124,7 +140,7 @@
     }
 
     @Override
-    public String processArdTankLockByLockId(String userId, String username, Map<String,String> para) {
+    public AjaxResult processArdTankLockByLockId(String userId, String username, Map<String,String> para) {
         String lockId = para.get("lockId");
         String lockNum = para.get("lockNum");
         String carId = para.get("carId");
@@ -134,19 +150,19 @@
         //鍒ゆ柇浣胯兘
         ArdTankLock ardTankLock = ardTankLockMapper.selectArdTankLockById(lockId);
         if(ardTankLock.getEnable().equals("false")){
-            return "璇ラ攣浣胯兘鍏抽棴锛屾棤娉曟搷鎺�";
+            return AjaxResult.error("璇ラ攣浣胯兘鍏抽棴锛屾棤娉曟搷鎺�");
         }
 
         ArdSyUser ardSyUser = ardSyUserMapper.userById(userId);
         if(ardSyUser == null){
-            return "鏈寕鎺ヤ笁涓�璐﹀彿";
+            return AjaxResult.error("鏈寕鎺ヤ笁涓�璐﹀彿");
         }
         List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
         String syURL = "";
         if(syURLResult.size() != 0){
             syURL = syURLResult.get(0).getConfigValue();
         }else{
-            return "涓変竴骞冲彴鏈綍鍏�";
+            return AjaxResult.error("涓変竴骞冲彴鏈綍鍏�");
         }
         String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
         Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
@@ -159,13 +175,30 @@
         if(((String)syResult.get("rspCode")).equals("1")){
             Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
             if(Integer.parseInt((String)carMap.get("speed")) != 0){
-                return "杞﹁締姝e湪琛岄┒涓�";
+                return AjaxResult.error("杞﹁締姝e湪琛岄┒涓�");
             }
             lng = (String) carMap.get("lng");
             lat = (String) carMap.get("lat");
             carPlate = (String) carMap.get("carName");
         }else{
-            return "涓変竴骞冲彴鎶ラ敊";
+            return AjaxResult.error("涓変竴骞冲彴鎶ラ敊");
+        }
+        //鎸傛帴浜嗕复鏃剁數瀛愬洿鏍�
+        List<ArdTankWallTemporary> ardTankWallTemporaryList = ardTankWallTemporaryMapper.getArdTankWallTemporaryByCarId((String) para.get("carId"));
+        if(!ardTankWallTemporaryList.isEmpty()){
+            for(ArdTankWallTemporary ardTankWallTemporary : ardTankWallTemporaryList){
+                Double longitude = ardTankWallTemporary.getLongitude();
+                Double latitude = ardTankWallTemporary.getLatitude();
+                Integer distance = ardTankWallTemporary.getDistance();
+
+                Double[] From = new Double[]{longitude,latitude};
+                Double[] To = new Double[]{Double.valueOf(lng),Double.valueOf(lat)};
+                Number realDistance = GisUtil.getDistance(From,To);
+                if(realDistance.intValue() <= distance){//瀹為檯璺濈灏忎簬鍗婂緞
+                    return AjaxResult.error("褰撳墠杞﹁締姝e鍦�" + ardTankWallTemporary.getWallName() + "涓�");
+                }
+            }
+            return AjaxResult.error("褰撳墠杞﹁締姝e鍦ㄤ复鏃剁數瀛愬洿鏍忓");
         }
 
         List<ArdTankWall> ardTankWallList = ardTankWallMapper.getArdTankWallProcessByLockId(lockId);//鏌ヨ閿佹寕鎺ョ殑鍏ㄩ儴闇�瑕佸姩浣滅殑鐢靛瓙鍥存爮
@@ -179,56 +212,443 @@
                     pts.add(new Point2D.Double(Double.parseDouble(wallpoiArro[j]), Double.parseDouble(wallpoiArro[j+1])));
                 }
                 if(GeoTools.IsPtInPoly(point, pts)){//鍦ㄤ换鎰忕數瀛愬洿鏍忓唴锛屼笉鎶ヨ
-                    return "褰撳墠杞﹁締姝e鍦�" + ardTankWall.getWallName() + "涓�";
+                    return AjaxResult.error("褰撳墠杞﹁締姝e鍦�" + ardTankWall.getWallName() + "涓�");
                 }
             }
-            return "褰撳墠杞﹁締姝e鍦ㄧ數瀛愬洿鏍忓";
+            return AjaxResult.error("褰撳墠杞﹁締姝e鍦ㄧ數瀛愬洿鏍忓");
         }else{
             try{
-                String lockNumHead = lockNum.substring(0,2);
-                String lockNumTail = lockNum.substring(2,4);
-                String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16)//閿佺紪鍙烽珮8浣�
-                        + Integer.parseInt(lockNumTail, 16)//閿佺紪鍙蜂綆8浣�
-                        + Integer.parseInt("02", 16)//璁剧疆閿佽姱鐘舵�佸姛鑳界爜02
-                        + Integer.parseInt(process, 16));//鎿嶄綔
-                if(checkNum.length() == 1){
-                    checkNum = "0" + checkNum;
-                }
-                if(checkNum.length() > 2){
-                    checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
-                }
-
-                String paramsStr = lockNum + "02" + process + checkNum;
-                paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + paramsStr + "%22%7D";
-                Map<String,Object> result = sYClient.sendCmd(syURL, ardSyUser.getUserId(), carId, 199, "DataDownTransfer", paramsStr, sessionId);
-
-                if(((String)result.get("rspCode")).equals("0")){
-                    ArdTankLockProcessLog ardTankLockProcessLog = new ArdTankLockProcessLog();
-                    ardTankLockProcessLog.setId(IdUtils.simpleUUID());
-                    ardTankLockProcessLog.setLockId(lockId);
-                    ardTankLockProcessLog.setLockNum(lockNum);
-                    ardTankLockProcessLog.setCarId(carId);
-                    ardTankLockProcessLog.setCarPlate(carPlate);
-                    ardTankLockProcessLog.setUserId(userId);
-                    ardTankLockProcessLog.setUserName(username);
-                    if(process.equals("01")){
-                        ardTankLockProcessLog.setProcess("寮�鍔ㄤ綔");
-                    }else if(process.equals("02")){
-                        ardTankLockProcessLog.setProcess("鍏冲姩浣�");
+                if(PositionContainer.getCarLockProcessThreadMap().get(carId).get(lockNum).get("lockProcess") != null){
+                    PositionContainer.getCarLockProcessThreadMap().get(carId).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                    String lockNumHead = lockNum.substring(0,2);
+                    String lockNumTail = lockNum.substring(2,4);
+                    String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16)//閿佺紪鍙烽珮8浣�
+                            + Integer.parseInt(lockNumTail, 16)//閿佺紪鍙蜂綆8浣�
+                            + Integer.parseInt("02", 16)//璁剧疆閿佽姱鐘舵�佸姛鑳界爜02
+                            + Integer.parseInt(process, 16));//鎿嶄綔
+                    if(checkNum.length() == 1){
+                        checkNum = "0" + checkNum;
                     }
-                    ardTankLockProcessLog.setProcessReason(processReason);
-                    ardTankLockProcessLog.setLongitude(lng);
-                    ardTankLockProcessLog.setLatitude(lat);
-                    ardTankLockProcessLog.setProcessTime(this.sdf.format(new Date()));
-                    ardTankLockProcessLogMapper.insertArdTankLockProcessLog(ardTankLockProcessLog);
-                    return "鍙戦�佹垚鍔�";
+                    if(checkNum.length() > 2){
+                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                    }
+
+                    String paramsStr = lockNum + "02" + process + checkNum;
+                    paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + paramsStr + "%22%7D";
+                    //PositionContainer.getCarLockProcessThreadMap().get(carId).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                    Map<String,Object> result = sendCmd(syURL, ardSyUser.getUserId(), carId, 199, "DataDownTransfer", paramsStr, sessionId);
+                    PositionContainer.getCarLockProcessThreadMap().get(carId).get(lockNum).remove("lockProcess");//绉婚櫎瀹瑰櫒
+                    if(((String)result.get("rspCode")).equals("0")){
+                        ArdTankLockProcessLog ardTankLockProcessLog = new ArdTankLockProcessLog();
+                        ardTankLockProcessLog.setId(IdUtils.simpleUUID());
+                        ardTankLockProcessLog.setLockId(lockId);
+                        ardTankLockProcessLog.setLockNum(lockNum);
+                        ardTankLockProcessLog.setCarId(carId);
+                        ardTankLockProcessLog.setCarPlate(carPlate);
+                        ardTankLockProcessLog.setUserId(userId);
+                        ardTankLockProcessLog.setUserName(username);
+                        if(process.equals("01")){
+                            ardTankLockProcessLog.setProcess("寮�鍔ㄤ綔");
+                        }else if(process.equals("02")){
+                            ardTankLockProcessLog.setProcess("鍏冲姩浣�");
+                        }
+                        ardTankLockProcessLog.setProcessReason(processReason);
+                        ardTankLockProcessLog.setLongitude(lng);
+                        ardTankLockProcessLog.setLatitude(lat);
+                        ardTankLockProcessLog.setProcessTime(this.sdf.format(new Date()));
+                        ardTankLockProcessLogMapper.insertArdTankLockProcessLog(ardTankLockProcessLog);
+                        return AjaxResult.success("鍙戦�佹垚鍔�");
+                    }else if(((String)result.get("rspCode")).equals("-6")){
+                        return AjaxResult.error("鎵句笉鍒拌溅杈�");
+                    }else if(((String)result.get("rspCode")).equals("-5")){
+                        return AjaxResult.error("鎵句笉鍒扮敤鎴�");
+                    }else if(((String)result.get("rspCode")).equals("-4")){
+                        return AjaxResult.error("鎵句笉鍒版寚浠�");
+                    }else if(((String)result.get("rspCode")).equals("-3")){
+                        return AjaxResult.error("鎸囦护鍙戦�佽秴鏃�");
+                    }else if(((String)result.get("rspCode")).equals("-2")){
+                        return AjaxResult.error("绂荤嚎寰呭彂");
+                    }else if(((String)result.get("rspCode")).equals("-1")){
+                        return AjaxResult.error("杞﹁締绂荤嚎");
+                    }else if(((String)result.get("rspCode")).equals("1")){
+                        return AjaxResult.error("鍙戦�佸け璐�");
+                    }else if(((String)result.get("rspCode")).equals("2")){
+                        return AjaxResult.error("娑堟伅鏈夎");
+                    }else if(((String)result.get("rspCode")).equals("3")){
+                        return AjaxResult.error("涓嶆敮鎸�");
+                    }else{
+                        return AjaxResult.error("鍏朵粬鍘熷洜鍙戦�佸け璐�");
+                    }
                 }else{
-                    return "鍙戦�佸け璐�";
+                    return AjaxResult.error("鍏朵粬鎿嶆帶姝e湪杩涜涓�,璇风◢鍚�");
                 }
             }catch(Exception e){
                 e.printStackTrace();
-                return "鍙戦�佸け璐�";
+                PositionContainer.getCarLockProcessThreadMap().get(carId).get(lockNum).remove("lockProcess");//绉婚櫎瀹瑰櫒
+                return AjaxResult.error("鍙戦�佸け璐�" + e.toString());
             }
         }
     }
+
+    @Override
+    public void autoProcessArdTankLockByLockId(Map<String, Object> gpsMap) {
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return;
+        }
+
+        List<SysConfig> electromagneticLockVelocityResult = sysConfigMapper.selectByType("ElectromagneticLockVelocity");
+        Integer electromagneticLockVelocity = 5;
+        if(!electromagneticLockVelocityResult.isEmpty()){
+            electromagneticLockVelocity = Integer.parseInt(electromagneticLockVelocityResult.get(0).getConfigValue());
+        }
+        List<ArdTankLock> ardTankLockResult = ardTankLockMapper.getArdTankLockWithStateByCarId((String) gpsMap.get("carId"));
+        if(ardTankLockResult.isEmpty()){//闈炵綈杞�
+            return;
+        }
+
+        for(ArdTankLock ardTankLock : ardTankLockResult){
+            if(!Boolean.valueOf(ardTankLock.getEnable())){
+                return;//鏄兘涓篺alse锛屽浜庝笉鍙楁帶鐘舵��
+            }
+        }
+
+        Integer speed = (Integer) gpsMap.get("speed");
+        if(speed >= electromagneticLockVelocity){
+            for(ArdTankLock ardTankLock : ardTankLockResult){
+                ArdTankLockState ardTankLockState = ardTankLock.getArdTankLockState();
+                if(ardTankLockState != null){
+                    if(ardTankLockState.getLockState().equals("寮�閿佺姸鎬�") || ardTankLockState.getLockState().equals("寮傚父鐘舵��")){
+                        String lockNum = ardTankLock.getLockNum();
+                        if(PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum) == null){
+                            PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                            String lockNumHead = lockNum.substring(0,2);
+                            String lockNumTail = lockNum.substring(2,4);
+                            String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16)//閿佺紪鍙烽珮8浣�
+                                    + Integer.parseInt(lockNumTail, 16)//閿佺紪鍙蜂綆8浣�
+                                    + Integer.parseInt("02", 16)//璁剧疆閿佽姱鐘舵�佸姛鑳界爜02
+                                    + Integer.parseInt("02", 16));//鎿嶄綔
+                            if(checkNum.length() == 1){
+                                checkNum = "0" + checkNum;
+                            }
+                            if(checkNum.length() > 2){
+                                checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                            }
+
+                            String paramsStr = lockNum + "02" + "02" + checkNum;
+                            paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + paramsStr + "%22%7D";
+                            //PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                            String passwordMd5 = DigestUtils.md5Hex(password);
+                            Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+                            String sessionId = (String) LogInResult.get("sessionId");
+                            try{
+                                Map<String,Object> result = sendCmd(syURL, userId, (String) gpsMap.get("carId"), 199, "DataDownTransfer", paramsStr, sessionId);
+                                if(((String)result.get("rspCode")).equals("0")){
+                                    ArdTankLockAutoProcessLog ardTankLockAutoProcessLog = new ArdTankLockAutoProcessLog();
+                                    ardTankLockAutoProcessLog.setId(IdUtils.simpleUUID());
+                                    ardTankLockAutoProcessLog.setLockId(ardTankLock.getId());
+                                    ardTankLockAutoProcessLog.setLockNum(ardTankLock.getLockNum());
+                                    ardTankLockAutoProcessLog.setCarId(ardTankLock.getCarId());
+                                    ardTankLockAutoProcessLog.setCarPlate((String) gpsMap.get("carName"));
+                                    ardTankLockAutoProcessLog.setWallName("瓒呴��");
+                                    ardTankLockAutoProcessLog.setWallType("姘镐箙");
+                                    ardTankLockAutoProcessLog.setProcess("鍏冲姩浣�");
+                                    ardTankLockAutoProcessLog.setProcessReason("閫熷害澶т簬" + electromagneticLockVelocity +",瓒呴�熷叧閿�");
+                                    ardTankLockAutoProcessLog.setLongitude(String.valueOf(gpsMap.get("lng")));
+                                    ardTankLockAutoProcessLog.setLatitude(String.valueOf(gpsMap.get("lat")));
+                                    ardTankLockAutoProcessLog.setVelocity(String.valueOf(gpsMap.get("speed")));
+                                    ardTankLockAutoProcessLog.setProcessTime(this.sdf.format(new Date()));
+                                    ardTankLockAutoProcessLogMapper.insertArdTankLockAutoProcessLog(ardTankLockAutoProcessLog);
+                                }
+                            }catch(Exception e){
+
+                            }
+                            PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).remove("lockProcess");//绉婚櫎瀹瑰櫒
+                        }else{
+                            continue;
+                        }
+                    }else{
+                        continue;
+                    }
+                }else{
+                    continue;
+                }
+            }
+        }else{
+            //涓存椂鐢靛瓙鍥存爮閫昏緫
+            List<ArdTankWallTemporary> ardTankWallTemporaryList = ardTankWallTemporaryMapper.getArdTankWallTemporaryByCarId((String) gpsMap.get("carId"));
+            //Boolean flag = true;//杞﹁締澶勪簬浠绘剰涓存椂鐢靛瓙鍥存爮锛屽氨灏嗘爣璁拌涓篺alse
+            if(!ardTankWallTemporaryList.isEmpty()){
+                for(ArdTankWallTemporary ardTankWallTemporary : ardTankWallTemporaryList){
+                    Double longitude = ardTankWallTemporary.getLongitude();
+                    Double latitude = ardTankWallTemporary.getLatitude();
+                    Integer distance = ardTankWallTemporary.getDistance();
+
+                    Double[] From = new Double[]{longitude,latitude};
+                    Double[] To = new Double[]{((Number) gpsMap.get("lng")).doubleValue(),((Number) gpsMap.get("lat")).doubleValue()};
+                    Number realDistance = GisUtil.getDistance(From,To);
+                    if(realDistance.intValue() <= distance){//瀹為檯璺濈灏忎簬鍗婂緞
+                        for(ArdTankLock ardTankLock : ardTankLockResult){
+                            ArdTankLockState ardTankLockState = ardTankLock.getArdTankLockState();
+                            if(ardTankLockState != null){
+                                if(ardTankLockState.getLockState().equals("鍏抽攣鐘舵��") || ardTankLockState.getLockState().equals("寮傚父鐘舵��")){
+                                    String lockNum = ardTankLock.getLockNum();
+                                    if(PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).get("lockProcess") == null){
+                                        PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                                        String lockNumHead = lockNum.substring(0,2);
+                                        String lockNumTail = lockNum.substring(2,4);
+                                        String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16)//閿佺紪鍙烽珮8浣�
+                                                + Integer.parseInt(lockNumTail, 16)//閿佺紪鍙蜂綆8浣�
+                                                + Integer.parseInt("02", 16)//璁剧疆閿佽姱鐘舵�佸姛鑳界爜02
+                                                + Integer.parseInt("01", 16));//鎿嶄綔
+                                        if(checkNum.length() == 1){
+                                            checkNum = "0" + checkNum;
+                                        }
+                                        if(checkNum.length() > 2){
+                                            checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                                        }
+
+                                        String paramsStr = lockNum + "02" + "01" + checkNum;
+                                        paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + paramsStr + "%22%7D";
+                                        //PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                                        String passwordMd5 = DigestUtils.md5Hex(password);
+                                        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+                                        String sessionId = (String) LogInResult.get("sessionId");
+                                        try{
+                                            Map<String,Object> result = sendCmd(syURL, userId, (String) gpsMap.get("carId"), 199, "DataDownTransfer", paramsStr, sessionId);
+                                            if(((String)result.get("rspCode")).equals("0")){
+                                                ArdTankLockAutoProcessLog ardTankLockAutoProcessLog = new ArdTankLockAutoProcessLog();
+                                                ardTankLockAutoProcessLog.setId(IdUtils.simpleUUID());
+                                                ardTankLockAutoProcessLog.setLockId(ardTankLock.getId());
+                                                ardTankLockAutoProcessLog.setLockNum(ardTankLock.getLockNum());
+                                                ardTankLockAutoProcessLog.setCarId(ardTankLock.getCarId());
+                                                ardTankLockAutoProcessLog.setCarPlate((String) gpsMap.get("carName"));
+                                                ardTankLockAutoProcessLog.setWallId(ardTankWallTemporary.getId());
+                                                ardTankLockAutoProcessLog.setWallName(ardTankWallTemporary.getWallName());
+                                                ardTankLockAutoProcessLog.setWallType("涓存椂");
+                                                ardTankLockAutoProcessLog.setProcess("寮�鍔ㄤ綔");
+                                                ardTankLockAutoProcessLog.setProcessReason("閫熷害灏忎簬" + electromagneticLockVelocity +",骞惰繘鍏ヤ复鏃剁數瀛愬洿鏍�'" + ardTankWallTemporary.getWallName() + "'" + ",寮�閿�");
+                                                ardTankLockAutoProcessLog.setLongitude(String.valueOf(gpsMap.get("lng")));
+                                                ardTankLockAutoProcessLog.setLatitude(String.valueOf(gpsMap.get("lat")));
+                                                ardTankLockAutoProcessLog.setVelocity(String.valueOf(gpsMap.get("speed")));
+                                                ardTankLockAutoProcessLog.setProcessTime(this.sdf.format(new Date()));
+                                                ardTankLockAutoProcessLogMapper.insertArdTankLockAutoProcessLog(ardTankLockAutoProcessLog);
+                                            }
+                                        }catch(Exception e){
+
+                                        }
+                                        PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).remove("lockProcess");//绉婚櫎瀹瑰櫒
+                                    }else{
+                                        continue;
+                                    }
+                                }else{
+                                    continue;
+                                }
+                            }else{
+                                continue;
+                            }
+                        }
+                        break;//澶勫湪浠绘剰鐢靛瓙鍥存爮涓�
+                    }
+                }
+            }
+            //鐢靛瓙鍥存爮閫昏緫
+            Point2D.Double point = new Point2D.Double(((Number) gpsMap.get("lng")).doubleValue(), ((Number) gpsMap.get("lat")).doubleValue());//杞﹁締褰撳墠浣嶇疆
+            List<ArdTankLock> ardTankLockList = ardTankLockMapper.selectArdTankLockWithWallAndStateByCarId((String) gpsMap.get("carId"));
+            for(ArdTankLock ardTankLock : ardTankLockList){
+                ArdTankLockState ardTankLockState = ardTankLock.getArdTankLockState();
+                if(ardTankLockState == null){
+                    break;
+                }
+                String lockState = ardTankLockState.getLockState();
+
+                String lockNum = ardTankLock.getLockNum();
+
+                List<ArdTankWallLock> ardTankWallLockList = ardTankLock.getArdTankWallLockList();//涓棿琛�
+                if(ardTankWallLockList.isEmpty()){//娌℃湁鎸傛帴鐢靛瓙鍥存爮
+                    break;
+                }
+                for(ArdTankWallLock ardTankWallLock : ardTankWallLockList){
+                    ArdTankWall ardTankWall = ardTankWallLock.getArdTankWall();//鐢靛瓙鍥存爮
+
+                    List<Point2D.Double> pts = new ArrayList<Point2D.Double>();
+                    String[] wallpoiArro = ardTankWall.getWallPoi().split(",");
+                    for (int j = 0; j < wallpoiArro.length; j = j + 3) {//鏋勫缓澶氳竟褰�
+                        pts.add(new Point2D.Double(Double.parseDouble(wallpoiArro[j]), Double.parseDouble(wallpoiArro[j+1])));
+                    }
+                    if(GeoTools.IsPtInPoly(point, pts)){//鍦ㄧ數瀛愬洿鏍忓唴
+                        if(ardTankWallLock.getProcessType().equals("1")){//鐢靛瓙鍥存爮鎿嶄綔鏄惁涓哄紑閿�
+                            if(lockState.equals("鍏抽攣鐘舵��") || lockState.equals("寮傚父鐘舵��")){
+                                //鎵ц寮�閿佸姩浣�
+                                if(PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).get("lockProcess") == null){
+                                    PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                                    String lockNumHead = lockNum.substring(0,2);
+                                    String lockNumTail = lockNum.substring(2,4);
+                                    String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16)//閿佺紪鍙烽珮8浣�
+                                            + Integer.parseInt(lockNumTail, 16)//閿佺紪鍙蜂綆8浣�
+                                            + Integer.parseInt("02", 16)//璁剧疆閿佽姱鐘舵�佸姛鑳界爜02
+                                            + Integer.parseInt("01", 16));//鎿嶄綔
+                                    if(checkNum.length() == 1){
+                                        checkNum = "0" + checkNum;
+                                    }
+                                    if(checkNum.length() > 2){
+                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                                    }
+
+                                    String paramsStr = lockNum + "02" + "01" + checkNum;
+                                    paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + paramsStr + "%22%7D";
+                                    //PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                                    String passwordMd5 = DigestUtils.md5Hex(password);
+                                    Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+                                    String sessionId = (String) LogInResult.get("sessionId");
+                                    try{
+                                        Map<String,Object> result = sendCmd(syURL, userId, (String) gpsMap.get("carId"), 199, "DataDownTransfer", paramsStr, sessionId);
+                                        if(((String)result.get("rspCode")).equals("0")){
+                                            ArdTankLockAutoProcessLog ardTankLockAutoProcessLog = new ArdTankLockAutoProcessLog();
+                                            ardTankLockAutoProcessLog.setId(IdUtils.simpleUUID());
+                                            ardTankLockAutoProcessLog.setLockId(ardTankLock.getId());
+                                            ardTankLockAutoProcessLog.setLockNum(ardTankLock.getLockNum());
+                                            ardTankLockAutoProcessLog.setCarId(ardTankLock.getCarId());
+                                            ardTankLockAutoProcessLog.setCarPlate((String) gpsMap.get("carName"));
+                                            ardTankLockAutoProcessLog.setWallId(ardTankWall.getId());
+                                            ardTankLockAutoProcessLog.setWallName(ardTankWall.getWallName());
+                                            ardTankLockAutoProcessLog.setWallType("姘镐箙");
+                                            ardTankLockAutoProcessLog.setProcess("寮�鍔ㄤ綔");
+                                            ardTankLockAutoProcessLog.setProcessReason("閫熷害灏忎簬" + electromagneticLockVelocity +",骞惰繘鍏ョ數瀛愬洿鏍�'" + ardTankWall.getWallName() + "'" + ",寮�閿�");
+                                            ardTankLockAutoProcessLog.setLongitude(String.valueOf(gpsMap.get("lng")));
+                                            ardTankLockAutoProcessLog.setLatitude(String.valueOf(gpsMap.get("lat")));
+                                            ardTankLockAutoProcessLog.setVelocity(String.valueOf(gpsMap.get("speed")));
+                                            ardTankLockAutoProcessLog.setProcessTime(this.sdf.format(new Date()));
+                                            ardTankLockAutoProcessLogMapper.insertArdTankLockAutoProcessLog(ardTankLockAutoProcessLog);
+                                        }
+                                    }catch(Exception e){
+
+                                    }
+                                    PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).remove("lockProcess");//绉婚櫎瀹瑰櫒
+                                }
+                            }
+                        }else if(ardTankWallLock.getProcessType().equals("-1")){//鐢靛瓙鍥存爮鎿嶄綔鏄惁涓哄叧閿�
+                            if(lockState.equals("寮�閿佺姸鎬�") || lockState.equals("寮傚父鐘舵��")){
+                                //鎵ц鍏抽攣鍔ㄤ綔
+                                if(PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).get("lockProcess") == null){
+                                    String lockNumHead = lockNum.substring(0,2);
+                                    String lockNumTail = lockNum.substring(2,4);
+                                    String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16)//閿佺紪鍙烽珮8浣�
+                                            + Integer.parseInt(lockNumTail, 16)//閿佺紪鍙蜂綆8浣�
+                                            + Integer.parseInt("02", 16)//璁剧疆閿佽姱鐘舵�佸姛鑳界爜02
+                                            + Integer.parseInt("02", 16));//鎿嶄綔
+                                    if(checkNum.length() == 1){
+                                        checkNum = "0" + checkNum;
+                                    }
+                                    if(checkNum.length() > 2){
+                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                                    }
+
+                                    String paramsStr = lockNum + "02" + "02" + checkNum;
+                                    paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + paramsStr + "%22%7D";
+                                    PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).put("lockProcess",new Thread());//鍔犲叆瀹瑰櫒
+                                    String passwordMd5 = DigestUtils.md5Hex(password);
+                                    Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+                                    String sessionId = (String) LogInResult.get("sessionId");
+                                    try{
+                                        Map<String,Object> result = sendCmd(syURL, userId, (String) gpsMap.get("carId"), 199, "DataDownTransfer", paramsStr, sessionId);
+                                        if(((String)result.get("rspCode")).equals("0")){
+                                            ArdTankLockAutoProcessLog ardTankLockAutoProcessLog = new ArdTankLockAutoProcessLog();
+                                            ardTankLockAutoProcessLog.setId(IdUtils.simpleUUID());
+                                            ardTankLockAutoProcessLog.setLockId(ardTankLock.getId());
+                                            ardTankLockAutoProcessLog.setLockNum(ardTankLock.getLockNum());
+                                            ardTankLockAutoProcessLog.setCarId(ardTankLock.getCarId());
+                                            ardTankLockAutoProcessLog.setCarPlate((String) gpsMap.get("carName"));
+                                            ardTankLockAutoProcessLog.setWallId(ardTankWall.getId());
+                                            ardTankLockAutoProcessLog.setWallName(ardTankWall.getWallName());
+                                            ardTankLockAutoProcessLog.setWallType("姘镐箙");
+                                            ardTankLockAutoProcessLog.setProcess("鍏冲姩浣�");
+                                            ardTankLockAutoProcessLog.setProcessReason("閫熷害灏忎簬" + electromagneticLockVelocity +",骞惰繘鍏ョ數瀛愬洿鏍�'" + ardTankWall.getWallName() + "'" + ",鍏抽攣");
+                                            ardTankLockAutoProcessLog.setLongitude(String.valueOf(gpsMap.get("lng")));
+                                            ardTankLockAutoProcessLog.setLatitude(String.valueOf(gpsMap.get("lat")));
+                                            ardTankLockAutoProcessLog.setVelocity(String.valueOf(gpsMap.get("speed")));
+                                            ardTankLockAutoProcessLog.setProcessTime(this.sdf.format(new Date()));
+                                            ardTankLockAutoProcessLogMapper.insertArdTankLockAutoProcessLog(ardTankLockAutoProcessLog);
+                                        }
+                                    }catch(Exception e){
+
+                                    }
+                                    PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum).remove("lockProcess");//绉婚櫎瀹瑰櫒
+                                }
+                            }
+                        }
+                        break;//澶勫湪浠绘剰鐢靛瓙鍥存爮涓�
+                    }else{
+                        continue;
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public Map<String, Object> getArdTankLockProcessLogByCarPlate(Map<String, Object> para) {
+        //鍒嗛〉灞炴��
+        Integer pageNum = (Integer) para.get("pageNum");
+        Integer pageSize = (Integer) para.get("pageSize");
+
+        PageHelper.startPage(pageNum, pageSize);//鍒嗛〉
+        Map<String,Object> resultMap = new HashMap();
+        if(((String) para.get("carPlate")).equals("")){
+            List<ArdTankLockProcessLog> resultList = ardTankLockProcessLogMapper.getArdTankLockProcessLogAll();
+            Long total =  ardTankLockProcessLogMapper.getArdTankLockProcessLogTotal();
+            resultMap.put("list",resultList);
+            resultMap.put("total",total);
+            return resultMap;
+        }else{
+            List<ArdTankLockProcessLog> resultList = ardTankLockProcessLogMapper.getArdTankLockProcessLogByCarPlate("%" + (String) para.get("carPlate") + "%");
+            Long total =  ardTankLockProcessLogMapper.getArdTankLockProcessLogTotalByCarPlate("%" + (String) para.get("carPlate") + "%");
+            resultMap.put("list",resultList);
+            resultMap.put("total",total);
+            return resultMap;
+        }
+
+    }
+
+    @Override
+    public List<ArdTankLockProcessLog> exportArdTankLockProcessLog(String carPlate) {
+        if(carPlate.equals("")){
+            List<ArdTankLockProcessLog> resultList = ardTankLockProcessLogMapper.getArdTankLockProcessLogAll();
+            return resultList;
+        }else{
+            List<ArdTankLockProcessLog> resultList = ardTankLockProcessLogMapper.getArdTankLockProcessLogByCarPlate("%" + carPlate + "%");
+            return resultList;
+        }
+    }
+
+    public Map<String,Object> sendCmd(String syURL,String userId,String carId,Integer cmdId,String cmd,String paramsStr,String sessionId){
+        OkHttpClient okHttpClient = new OkHttpClient();
+
+        Request request = new Request.Builder()
+                .url(syURL + "/gps-web/api/send_cmd.jsp?params="+paramsStr+"&userId="+userId+"&carId="+carId+"&cmdId="+cmdId+"&cmd="+cmd+"&sessionId="+sessionId)
+                .build();
+        //System.out.println("url = " + syURL + "/gps-web/api/send_cmd.jsp?params="+paramsStr+"&userId="+userId+"&carId="+carId+"&cmdId="+cmdId+"&cmd="+cmd+"&sessionId="+sessionId);
+        Response response = null;
+        try {
+            response = okHttpClient.newCall(request).execute();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        okhttp3.ResponseBody responseBody = response.body();
+
+        try {
+            String message = responseBody.string();// 鍝嶅簲浣�
+            Map<String,Object> map = (Map<String, Object>) JSON.parse(message);
+            return map;
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return new HashMap();
+        }
+    }
 }

--
Gitblit v1.9.3