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 |  495 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 431 insertions(+), 64 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 0038f30..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
@@ -6,29 +6,27 @@
 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;
@@ -57,11 +55,21 @@
     private ArdTankLockMapper ardTankLockMapper;
 
     @Resource
+    private ArdTankWallTemporaryMapper ardTankWallTemporaryMapper;
+
+    @Resource
+    private ArdTankLockAutoProcessLogMapper ardTankLockAutoProcessLogMapper;
+
+    @Resource
     private SYClient sYClient;
 
-    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    @Value("${syCar.userId}")
+    private String userId;
 
-    private Map<String,Timer> timerMap = new HashMap();
+    @Value("${syCar.password}")
+    private String password;
+
+    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     /**
      * 鏌ヨ缃愯溅閿佹搷鎺ф棩蹇�
@@ -175,6 +183,23 @@
         }else{
             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);//鏌ヨ閿佹寕鎺ョ殑鍏ㄩ儴闇�瑕佸姩浣滅殑鐢靛瓙鍥存爮
         if(!ardTankWallList.isEmpty()){//鎸傛帴浜嗗姩浣滅數瀛愬洿鏍�
@@ -193,70 +218,412 @@
             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 = 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 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("涓嶆敮鎸�");
+                    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 AjaxResult.error("鍏朵粬鍘熷洜鍙戦�佸け璐�");
+                    return AjaxResult.error("鍏朵粬鎿嶆帶姝e湪杩涜涓�,璇风◢鍚�");
                 }
             }catch(Exception e){
                 e.printStackTrace();
+                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();
 

--
Gitblit v1.9.3