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, 429 insertions(+), 66 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 e39bf04..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,30 +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.domain.*;
import com.ruoyi.sy.gps31.PositionContainer;
-import com.ruoyi.sy.mapper.ArdSyUserMapper;
-import com.ruoyi.sy.mapper.ArdTankLockMapper;
-import com.ruoyi.sy.mapper.ArdTankWallMapper;
+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;
@@ -58,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");
/**
* 鏌ヨ缃愯溅閿佹搷鎺ф棩蹇�
@@ -176,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()){//鎸傛帴浜嗗姩浣滅數瀛愬洿鏍�
@@ -194,64 +218,69 @@
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";
- 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("鍏冲姩浣�");
+ 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();
@@ -261,6 +290,340 @@
}
}
+ @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