From d643b649afb5318ea939855def096b6ae9073c0c Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期二, 30 七月 2024 15:15:28 +0800
Subject: [PATCH] 电磁锁加入复位状态提交

---
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java |  671 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 643 insertions(+), 28 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
index ff8c7f2..b7a27df 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
@@ -1,30 +1,33 @@
 package com.ruoyi.sy.service.impl;
 
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
-import com.dtflys.forest.annotation.Var;
+import com.alibaba.fastjson.JSON;
+import com.github.pagehelper.PageHelper;
 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.mapper.ArdSyUserMapper;
-import com.ruoyi.sy.mapper.ArdTankWallLockMapper;
-import com.ruoyi.sy.mapper.ArdTankWallLockTemporaryMapper;
+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.result.Results;
+import com.ruoyi.utils.websocket.util.WebSocketUtils;
+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.stereotype.Service;
 
 import java.util.stream.Collectors;
 
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.sy.mapper.ArdTankLockMapper;
-import com.ruoyi.sy.domain.ArdTankLock;
 import com.ruoyi.sy.service.IArdTankLockService;
 
 import javax.annotation.Resource;
+
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
 
 /**
  * 鐢电閿丼ervice涓氬姟灞傚鐞�
@@ -50,7 +53,18 @@
     private SysConfigMapper sysConfigMapper;
 
     @Resource
+    private ArdSyCarMapper ardSyCarMapper;
+
+    @Resource
+    private ArdTankLockStateMapper ardTankLockStateMapper;
+
+    @Resource
+    private ArdTankLockPasswordMapper ardTankLockPasswordMapper;
+
+    @Resource
     private SYClient sYClient;
+
+    //private Map<String,Thread> alarmMap = new HashMap();//鐢电閿佸巻鍙叉姤璀︾嚎绋嬪鍣�
 
     /**
      * 鏌ヨ鐢电閿�
@@ -77,7 +91,6 @@
     /**
      * 鏂板鐢电閿�
      *
-     * @param ardTankLock 鐢电閿�
      * @return 缁撴灉
      */
     @Override
@@ -94,6 +107,7 @@
             ardTankLock.setImgPositionLeft(map.get("imgPositionLeft"));
             ardTankLock.setCarId(carId);
             ardTankLock.setEnable(map.get("enable"));
+            ardTankLock.setRestartState(map.get("restartState"));
             ardTankLocks.add(ardTankLock);
         }
         return ardTankLockMapper.insertArdTankLocks(ardTankLocks);
@@ -144,22 +158,23 @@
 
     @Override
     //public Results List<Map<String,Object>> getAll(String usersId) {
-    public List<Map<String,Object>> getAll(String usersId) {
+    public Map<String,Object> getAll(String usersId) {
+        List<ArdTankLock> ardTankLockList = ardTankLockMapper.getAll();
         ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
-        /*if(ardSyUser == null){
-            return Results.error("娌℃湁鎸傛帴涓変竴杞﹁締鐢ㄦ埛");
-        }*/
+        if(ardSyUser == null){
+            return new HashMap();
+        }
         List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
         String syURL = "";
         if(syURLResult.size() != 0){
             syURL = syURLResult.get(0).getConfigValue();
-        }/*else{
-            return Results.error("涓変竴杞﹁締鍦板潃鏈綍鍏�");
-        }*/
+        }else{
+            return new HashMap();
+        }
         String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
         Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
         String sessionId = (String) LogInResult.get("sessionId");
-        List<ArdTankLock> ardTankLockList = ardTankLockMapper.getAll();
+        //List<ArdTankLock> ardTankLockList = ardTankLockMapper.getAll();
         List<Map<String,Object>> result = new ArrayList();
         for(ArdTankLock ardTankLock : ardTankLockList){
             Map<String,Object> map = new HashMap();
@@ -206,23 +221,26 @@
                 }
             }
         }
-        //return Results.succeed(result0);
-        return result0;
+        Long total = ardTankLockMapper.selectArdTankLockTotal();
+        Map<String,Object> resultMap = new HashMap();
+        resultMap.put("list",result0);
+        resultMap.put("total",total);
+        return resultMap;
     }
 
     @Override
     public Map<String, Object> getLockByCarId(String carId, String usersId) {
         ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
-        /*if(ardSyUser == null){
-            return Results.error("娌℃湁鎸傛帴涓変竴杞﹁締鐢ㄦ埛");
-        }*/
+        if(ardSyUser == null){
+            return new HashMap();
+        }
         List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
         String syURL = "";
         if(syURLResult.size() != 0){
             syURL = syURLResult.get(0).getConfigValue();
-        }/*else{
-            return Results.error("涓変竴杞﹁締鍦板潃鏈綍鍏�");
-        }*/
+        }else{
+            return new HashMap();
+        }
         String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
         Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
         String sessionId = (String) LogInResult.get("sessionId");
@@ -265,6 +283,24 @@
             }else{
                 map.put("onlineTime",ardTankLock.getOnlineTime());
             }
+            if(ardTankLock.getArdTankLockState() != null){//鐢电閿佺姸鎬�
+                map.put("ardTankLockState",ardTankLock.getArdTankLockState());
+            }else{
+                ArdTankLockState ardTankLockState = new ArdTankLockState();
+                ardTankLockState.setId("");
+                ardTankLockState.setLockId("");
+                ardTankLockState.setLockNum("");
+                ardTankLockState.setLockState("");
+                ardTankLockState.setLockPositionState("");
+                ardTankLockState.setLockShellState("");
+                ardTankLockState.setRestartState("");
+                ardTankLockState.setBatterVoltage("");
+                ardTankLockState.setPowerVoltage("");
+                ardTankLockState.setUploadTime("");
+                ardTankLockState.setUniqueMark("");
+                ardTankLockState.setLockStateMark(false);
+                map.put("ardTankLockState",ardTankLockState);
+            }
             Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
             map.put("carPlate",carMap.get("carPlate"));
             result.add(map);
@@ -272,4 +308,583 @@
         resultMap.put("lockList",result);
         return resultMap;
     }
+
+    @Override
+    public int deleteLockByCarId(String carId) {
+        int result = ardTankLockMapper.deleteLockByCarId(carId);
+        return result;
+    }
+
+    @Override
+    public int updateLockByCarId(Map<String, Object> para) {
+        int result = 0;
+        String carId = (String) para.get("carId");
+        List<ArdTankLock> ardTankLockOldList = ardTankLockMapper.getLockByCarId(carId);
+        Set<String> idSet = new HashSet();//涔嬪墠鐨勪富閿�
+        for(ArdTankLock ardTankLock : ardTankLockOldList){
+            idSet.add(ardTankLock.getId());
+        }
+        //Set<String> newIdSet = new HashSet();//浼犲弬鐨勪富閿�
+        List<Map<String,Object>> lockList = (List<Map<String, Object>>) para.get("lockList");
+        if(lockList.isEmpty()){//鏁扮粍涓虹┖锛屽仛鍒犻櫎鎿嶄綔
+            if(ardTankLockOldList.isEmpty()){//鑻ユ病鏈夋寕鎺ワ紝涓嶅仛鎿嶄綔
+                return 1;
+            }
+            result = ardTankLockMapper.deleteLockByCarId(carId);
+            return result;
+        }
+
+        List<ArdTankLock> ardTankLocks = new ArrayList();
+        for(Map<String,Object> map : lockList){
+            if(map.get("id") != null){//鏈変富閿紝鍋氫慨鏀规搷浣�
+                //newIdSet.add((String) map.get("id"));
+                idSet.remove((String) map.get("id"));
+                ArdTankLock ardTankLock = new ArdTankLock();
+                ardTankLock.setId((String) map.get("id"));
+                ardTankLock.setLockNum((String) map.get("lockNum"));
+                ardTankLock.setLockName((String) map.get("lockName"));
+                ardTankLock.setImgPositionTop((String) map.get("imgPositionTop"));
+                ardTankLock.setImgPositionLeft((String) map.get("imgPositionLeft"));
+                ardTankLock.setCarId((String) map.get("carId"));
+                ardTankLock.setEnable((String) map.get("enable"));
+                ardTankLock.setRestartState((String) map.get("restartState"));
+                result = result + ardTankLockMapper.updateArdTankLock(ardTankLock);
+            }else{//鏃犱富閿紝鍋氭柊澧炴搷浣�
+                ArdTankLock ardTankLock = new ArdTankLock();
+                ardTankLock.setId(IdUtils.simpleUUID());
+                ardTankLock.setLockNum((String) map.get("lockNum"));
+                ardTankLock.setLockName((String) map.get("lockName"));
+                ardTankLock.setImgPositionTop((String) map.get("imgPositionTop"));
+                ardTankLock.setImgPositionLeft((String) map.get("imgPositionLeft"));
+                ardTankLock.setCarId(carId);
+                ardTankLock.setRestartState((String) map.get("restartState"));
+                ardTankLock.setEnable((String) map.get("enable"));
+                ardTankLocks.add(ardTankLock);
+            }
+        }
+        if(ardTankLocks.size() != 0){
+            result = result + ardTankLockMapper.insertArdTankLocks(ardTankLocks);
+        }
+        if(!idSet.isEmpty()){
+            result = result + ardTankLockMapper.deleteArdTankLockByIdSet(idSet);
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String,Object> getLockByCarPlate(String usersId, String carPlate, Integer pageNum, Integer pageSize) {
+        ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
+        if(ardSyUser == null){
+            return new HashMap();
+        }
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return new HashMap();
+        }
+        String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
+        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
+        String sessionId = (String) LogInResult.get("sessionId");
+        List<ArdTankLock> ardTankLockList = new ArrayList();
+        List<Map<String,Object>> result = new ArrayList();
+        List<String> carIdList = new ArrayList();//璁板綍涓変竴杞﹁締涓婚敭
+        if(!carPlate.equals("")){
+            Map<String,Object> carMap = sYClient.getCarListByPlate(syURL,carPlate,ardSyUser.getUserId(),sessionId);//杞︾墝鍙锋ā绯婃悳绱㈣溅杈�
+            List<Map<String,Object>> carList = new ArrayList();
+            if(((String)carMap.get("rspCode")).equals("1")){
+                carList = (List<Map<String, Object>>) carMap.get("list");
+            }else{
+                return new HashMap();
+            }
+            //List<String> carIdList = new ArrayList();//璁板綍涓変竴杞﹁締涓婚敭
+            for(Map<String,Object> map : carList){
+                carIdList.add((String) map.get("carId"));
+            }
+            PageHelper.startPage(pageNum, pageSize);//鍒嗛〉
+            ardTankLockList = ardTankLockMapper.getLockByCarIdList(carIdList);
+            for(ArdTankLock ardTankLock : ardTankLockList){
+                if(carIdList.contains(ardTankLock.getCarId())){//杩斿洖鐨勮溅杈嗗寘鍚暟鎹簱褰曞叆鐨勮溅杈�
+                    Map<String,Object> map = new HashMap();
+                    map.put("id",ardTankLock.getId());
+                    map.put("lockNum",ardTankLock.getLockNum());
+                    map.put("lockName",ardTankLock.getLockName());
+                    map.put("imgPositionTop",ardTankLock.getImgPositionTop());
+                    map.put("imgPositionLeft",ardTankLock.getImgPositionLeft());
+                    map.put("carId",ardTankLock.getCarId());
+                    map.put("enable",ardTankLock.getEnable());
+                    if(ardTankLock.getRestartState() == null){
+                        map.put("restartState","");
+                    }else{
+                        map.put("restartState",ardTankLock.getRestartState());
+                    }
+                    if(ardTankLock.getOnlineTime() == null){
+                        map.put("onlineTime","");
+                    }else{
+                        map.put("onlineTime",ardTankLock.getOnlineTime());
+                    }
+                    Map<String,Object> car = carList.stream().filter(mapCar -> ((String)mapCar.get("carId")).equals(ardTankLock.getCarId())).collect(Collectors.toList()).get(0);
+                    map.put("carPlate", (String) car.get("carPlate"));
+                    result.add(map);
+                }else{
+                    continue;
+                }
+            }
+        }else{
+            PageHelper.startPage(pageNum, pageSize);//鍒嗛〉
+            ardTankLockList = ardTankLockMapper.getAll();
+            for(ArdTankLock ardTankLock : ardTankLockList){
+                Map<String,Object> map = new HashMap();
+                map.put("id",ardTankLock.getId());
+                map.put("lockNum",ardTankLock.getLockNum());
+                map.put("lockName",ardTankLock.getLockName());
+                map.put("imgPositionTop",ardTankLock.getImgPositionTop());
+                map.put("imgPositionLeft",ardTankLock.getImgPositionLeft());
+                map.put("carId",ardTankLock.getCarId());
+                map.put("enable",ardTankLock.getEnable());
+                if(ardTankLock.getRestartState() == null){
+                    map.put("restartState","");
+                }else{
+                    map.put("restartState",ardTankLock.getRestartState());
+                }
+                if(ardTankLock.getOnlineTime() == null){
+                    map.put("onlineTime","");
+                }else{
+                    map.put("onlineTime",ardTankLock.getOnlineTime());
+                }
+                Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(syURL, ardTankLock.getCarId(), ardSyUser.getUserId(), sessionId);
+                if(((String)syResult.get("rspCode")).equals("1")){
+                    Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
+                    map.put("carPlate", (String) carMap.get("carPlate"));
+                }
+                result.add(map);
+            }
+        }
+        Long total = Long.valueOf(0);
+        if(!carPlate.equals("")){
+            total = ardTankLockMapper.selectArdTankLockTotalByCarIdList(carIdList);
+        }else{
+            total = ardTankLockMapper.selectArdTankLockAllTotal();
+        }
+        Map<String,Object> mapResult = new HashMap();
+        mapResult.put("list",result);
+        mapResult.put("total",total);
+        return mapResult;
+    }
+
+    @Override
+    public List<ArdTankLock> getArdTankLockAll() {
+        List<ArdTankLock> result = ardTankLockMapper.getAll();
+        return result;
+    }
+
+    @Override
+    public void sendLockState(String userId, String syUserId, String syPassword) {
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return;
+        }
+        String passwordMd5 = DigestUtils.md5Hex(syPassword);
+        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, syUserId);
+        String sessionId = (String) LogInResult.get("sessionId");
+
+        List<SysConfig> lockBatteryVoltageResult = sysConfigMapper.selectByType("lockBatteryVoltage");
+        Integer lockBatteryVoltage = 9;
+        if(!lockBatteryVoltageResult.isEmpty()){
+            lockBatteryVoltage = Integer.parseInt(lockBatteryVoltageResult.get(0).getConfigValue());
+        }
+
+        List<SysConfig> lockPowerVoltageResult = sysConfigMapper.selectByType("lockPowerVoltage");
+        Integer lockPowerVoltage = 5;
+        if(!lockPowerVoltageResult.isEmpty()){
+            lockPowerVoltage = Integer.parseInt(lockPowerVoltageResult.get(0).getConfigValue());
+        }
+
+        List<Map<String,Object>> result = new ArrayList();
+        List<ArdSyCar> ardSyCarResult = ardSyCarMapper.selectArdSyCarAndTankLockByUserId(userId.split("_")[0]);
+        for(ArdSyCar ardSyCar : ardSyCarResult){
+            Map<String,Object> map = new HashMap();
+            map.put("id",ardSyCar.getId());
+            map.put("carId",ardSyCar.getCarId());
+            map.put("carModel",ardSyCar.getCarModel());
+            map.put("carType",ardSyCar.getCarType());
+            map.put("carBrand",ardSyCar.getCarBrand());
+            map.put("deptId",ardSyCar.getDeptId());
+            map.put("carPicture",ardSyCar.getCarPicture());
+            Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(syURL, ardSyCar.getCarId(), syUserId, sessionId);
+            if(((String)syResult.get("rspCode")).equals("1")){
+                Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
+                map.put("carPlate", (String) carMap.get("carPlate"));
+            }
+            List<Map<String,Object>> lockList = new ArrayList();
+            List<ArdTankLock> ardTankLockList = ardSyCar.getArdTankLockList();
+            for(ArdTankLock ardTankLock : ardTankLockList){
+                Map<String,Object> lockMap = new HashMap();
+                lockMap.put("id",ardTankLock.getId());
+                lockMap.put("lockNum",ardTankLock.getLockNum());
+                lockMap.put("lockName",ardTankLock.getLockName());
+                lockMap.put("imgPositionTop",ardTankLock.getImgPositionTop());
+                lockMap.put("imgPositionLeft",ardTankLock.getImgPositionLeft());
+                lockMap.put("carId",ardTankLock.getCarId());
+                lockMap.put("enable",ardTankLock.getEnable());
+                if(ardTankLock.getRestartState() == null){
+                    lockMap.put("restartState","");
+                }else{
+                    lockMap.put("restartState",ardTankLock.getRestartState());
+                }
+                if(ardTankLock.getOnlineTime() == null){
+                    lockMap.put("onlineTime","");
+                }else{
+                    lockMap.put("onlineTime",ardTankLock.getOnlineTime());
+                }
+                //Map<String,Object> ardTankLockState = new HashMap();
+                ArdTankLockState ardTankLockStateResult = ardTankLockStateMapper.selectArdTankLockStateByLockIdLimitOne(ardTankLock.getId());
+                if(ardTankLockStateResult == null){
+                    /*ardTankLockState.put("id","");
+                    ardTankLockState.put("lockId","");
+                    ardTankLockState.put("lockNum","");*/
+                    /*ardTankLockState.put("lockState","");
+                    ardTankLockState.put("lockPositionState","");
+                    ardTankLockState.put("lockShellState","");
+                    ardTankLockState.put("restartState","");
+                    ardTankLockState.put("batterVoltage","");
+                    ardTankLockState.put("batterVoltageAlarm",false);
+                    ardTankLockState.put("powerVoltage","");
+                    ardTankLockState.put("powerVoltageAlarm",false);
+                    ardTankLockState.put("uploadTime","");
+                    ardTankLockState.put("uniqueMark","");
+                    ardTankLockState.put("lockStateMark",false);
+                    lockMap.put("ardTankLockState",ardTankLockState);*/
+                    lockMap.put("lockState","");
+                    lockMap.put("lockPositionState","");
+                    lockMap.put("lockShellState","");
+                    lockMap.put("restartState","");
+                    lockMap.put("batterVoltage","");
+                    lockMap.put("batterVoltageAlarm",false);
+                    lockMap.put("powerVoltage","");
+                    lockMap.put("powerVoltageAlarm",false);
+                    lockMap.put("uploadTime","");
+                    lockMap.put("uniqueMark","");
+                    lockMap.put("lockStateMark",false);
+                    lockMap.put("alarmMark",false);
+                    lockMap.put("alarmInfo","");
+                }else{
+                    /*ardTankLockState.put("id",ardTankLockStateResult.getId());
+                    ardTankLockState.put("lockId",ardTankLockStateResult.getLockId());
+                    ardTankLockState.put("lockNum",ardTankLockStateResult.getLockNum());*/
+                    /*ardTankLockState.put("lockState",ardTankLockStateResult.getLockState());
+                    ardTankLockState.put("lockPositionState",ardTankLockStateResult.getLockPositionState());
+                    ardTankLockState.put("lockShellState",ardTankLockStateResult.getLockShellState());
+                    ardTankLockState.put("restartState",ardTankLockStateResult.getRestartState());
+                    ardTankLockState.put("batterVoltage",ardTankLockStateResult.getBatterVoltage());
+                    if(Double.parseDouble(ardTankLockStateResult.getBatterVoltage()) <= lockBatteryVoltage){
+                        ardTankLockState.put("batterVoltageAlarm",true);
+                    }else{
+                        ardTankLockState.put("batterVoltageAlarm",false);
+                    }
+                    ardTankLockState.put("powerVoltage",ardTankLockStateResult.getPowerVoltage());
+                    if(Double.parseDouble(ardTankLockStateResult.getPowerVoltage()) <= lockPowerVoltage){
+                        ardTankLockState.put("powerVoltageAlarm",true);
+                    }else{
+                        ardTankLockState.put("powerVoltageAlarm",false);
+                    }
+                    ardTankLockState.put("uploadTime",ardTankLockStateResult.getUploadTime());
+                    ardTankLockState.put("uniqueMark",ardTankLockStateResult.getUniqueMark());
+                    ardTankLockState.put("lockStateMark",ardTankLockStateResult.getLockStateMark());
+                    lockMap.put("ardTankLockState",ardTankLockState);*/
+                    String alarmInfo = "";
+                    lockMap.put("lockState",ardTankLockStateResult.getLockState());
+                    if(ardTankLockStateResult.getLockState().equals("寮傚父鐘舵��")){
+                        alarmInfo = alarmInfo + "閿佽姱寮傚父;";
+                    }
+                    lockMap.put("lockPositionState",ardTankLockStateResult.getLockPositionState());
+                    if(ardTankLockStateResult.getLockPositionState().equals("寮傚父")){
+                        alarmInfo = alarmInfo + "浣嶇疆寮傚父;";
+                    }
+                    lockMap.put("lockShellState",ardTankLockStateResult.getLockShellState());
+                    if(ardTankLockStateResult.getLockShellState().equals("寮傚父")){
+                        alarmInfo = alarmInfo + "澶栧3寮傚父;";
+                    }
+                    lockMap.put("restartState",ardTankLockStateResult.getRestartState());
+                    lockMap.put("batterVoltage",ardTankLockStateResult.getBatterVoltage());
+                    if(Double.parseDouble(ardTankLockStateResult.getBatterVoltage()) <= lockBatteryVoltage){
+                        lockMap.put("batterVoltageAlarm",true);
+                        alarmInfo = alarmInfo + "鐢垫睜鐢靛帇浣庝簬" + lockBatteryVoltage + ";";
+                    }else{
+                        lockMap.put("batterVoltageAlarm",false);
+                    }
+                    lockMap.put("powerVoltage",ardTankLockStateResult.getPowerVoltage());
+                    if(Double.parseDouble(ardTankLockStateResult.getPowerVoltage()) <= lockPowerVoltage){
+                        lockMap.put("powerVoltageAlarm",true);
+                        alarmInfo = alarmInfo + "鐢垫簮鐢靛帇浣庝簬" + lockBatteryVoltage + ";";
+                    }else{
+                        lockMap.put("powerVoltageAlarm",false);
+                    }
+                    lockMap.put("uploadTime",ardTankLockStateResult.getUploadTime());
+                    lockMap.put("uniqueMark",ardTankLockStateResult.getUniqueMark());
+                    lockMap.put("lockStateMark",ardTankLockStateResult.getLockStateMark());
+                    if(alarmInfo.equals("")){
+                        lockMap.put("alarmMark",false);
+                    }else{
+                        lockMap.put("alarmMark",true);
+                    }
+                    lockMap.put("alarmInfo",alarmInfo);
+                }
+                lockList.add(lockMap);
+            }
+            map.put("lockList",lockList);
+            result.add(map);
+            Map<String,Object> data = new HashMap();
+            data.put("40002",result);
+            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(userId), JSON.toJSONString(data));
+        }
+        return;
+    }
+
+    @Override
+    public void readPassword(String userId,String password) {
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return;
+        }
+        String passwordMd5 = DigestUtils.md5Hex(password);
+        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+        String sessionId = (String) LogInResult.get("sessionId");
+
+        String finalSyURL = syURL;
+        Thread passwordThread = new Thread(syURL){
+            @Override
+            public void run() {
+                List<ArdTankLock> ardTankLockResult = ardTankLockMapper.selectArdTankLockWithPassword();
+                for(ArdTankLock ardTankLock : ardTankLockResult){
+                    Thread lockThread = new Thread(){//璇诲彇瀵嗙爜
+                        @Override
+                        public void run() {
+                            if(ardTankLock.getArdTankLockPasswords().isEmpty()){//鏃犲彲鐢ㄥ瘑鐮�
+                                if(PositionContainer.getCarLockPasswordMap().get(ardTankLock.getLockNum()) != null){//鏂拌缃殑10缁勫瘑鐮�
+                                    Set<String> passwordSet = PositionContainer.getCarLockPasswordMap().get(ardTankLock.getLockNum());
+                                    //璁剧疆鏂板瘑鐮�
+                                    String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+                                    String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+                                    String code = "04";
+                                    Integer check = Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt(code, 16);;
+                                    for(String password : passwordSet){
+                                        String[] passwordArray = password.split("");
+                                        for(String p : passwordArray){
+                                            check = check + Integer.parseInt(p);
+                                        }
+                                    }
+                                    String checkNum = Integer.toHexString(check);
+                                    if(checkNum.length() == 1){
+                                        checkNum = "0" + checkNum;
+                                    }else if(checkNum.length() > 2){
+                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                                    }
+                                    String data = ardTankLock.getLockNum() + "04";
+                                    for(String password : passwordSet){
+                                        String[] passwordArray = password.split("");
+                                        for(String p : passwordArray){
+                                            data = data + "0" + p;
+                                        }
+                                    }
+                                    data = data + checkNum;
+                                    String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D";
+                                    Map<String,Object> syResult = sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+                                    if(((String)syResult.get("rspCode")).equals("0")){
+                                        List<ArdTankLockPassword> ardTankLockPasswordList = new ArrayList();
+                                        int i = 0;
+                                        for(String password : passwordSet){
+                                            ArdTankLockPassword ardTankLockPassword = new ArdTankLockPassword();
+                                            ardTankLockPassword.setId(IdUtils.simpleUUID());
+                                            ardTankLockPassword.setLockId(ardTankLock.getLockNum());//鏆傚瓨閿佺紪鍙�
+                                            ardTankLockPassword.setPassword(password);
+                                            ardTankLockPassword.setNo(String.valueOf(i));
+                                            ardTankLockPasswordList.add(ardTankLockPassword);
+                                            i = i + 1;
+                                        }
+                                        int result = ardTankLockPasswordMapper.insertArdTankLockPasswordList(ardTankLockPasswordList);
+                                        PositionContainer.getCarLockPasswordMap().remove(ardTankLock.getLockNum());
+                                    }
+                                }else{//璇诲彇瀵嗙爜
+                                    /*String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+                                    String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+                                    //璁$畻鏍¢獙
+                                    String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("05", 16));
+
+                                    if(checkNum.length() == 1){
+                                        checkNum = "0" + checkNum;
+                                    }else if(checkNum.length() > 2){
+                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                                    }
+                                    String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "05" + checkNum + "%22%7D";
+
+                                    sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);*/
+                                    Set<String> passwordSet = new HashSet();
+                                    while(passwordSet.size() != 10){
+                                        String password = "";
+                                        for(int i = 0;i <= 5;i++){
+                                            password = password + String.valueOf(10 * Math.random()).split("\\.")[0];
+                                        }
+                                        passwordSet.add(password);
+                                    }
+                                    System.out.println("1111111111111111");
+                                    System.out.println(passwordSet);
+                                    //璁剧疆鏂板瘑鐮�
+                                    String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+                                    String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+                                    String code = "04";
+                                    Integer check = Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt(code, 16);;
+                                    for(String password : passwordSet){
+                                        String[] passwordArray = password.split("");
+                                        for(String p : passwordArray){
+                                            check = check + Integer.parseInt(p);
+                                        }
+                                    }
+                                    String checkNum = Integer.toHexString(check);
+                                    if(checkNum.length() == 1){
+                                        checkNum = "0" + checkNum;
+                                    }else if(checkNum.length() > 2){
+                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                                    }
+                                    String data = ardTankLock.getLockNum() + "04";
+                                    for(String password : passwordSet){
+                                        String[] passwordArray = password.split("");
+                                        for(String p : passwordArray){
+                                            data = data + "0" + p;
+                                        }
+                                    }
+                                    data = data + checkNum;
+                                    String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D";
+                                    Map<String,Object> syResult = sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+                                    if(((String)syResult.get("rspCode")).equals("0")){
+                                        List<ArdTankLockPassword> ardTankLockPasswordList = new ArrayList();
+                                        int i = 0;
+                                        for(String password : passwordSet){
+                                            ArdTankLockPassword ardTankLockPassword = new ArdTankLockPassword();
+                                            ardTankLockPassword.setId(IdUtils.simpleUUID());
+                                            ardTankLockPassword.setLockId(ardTankLock.getLockNum());//鏆傚瓨閿佺紪鍙�
+                                            ardTankLockPassword.setPassword(password);
+                                            ardTankLockPassword.setNo(String.valueOf(i));
+                                            ardTankLockPasswordList.add(ardTankLockPassword);
+                                            i = i + 1;
+                                        }
+                                        int result = ardTankLockPasswordMapper.insertArdTankLockPasswordList(ardTankLockPasswordList);
+                                    }
+                                }
+                            }else{
+                                String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+                                String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+                                //璁$畻鏍¢獙
+                                String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("05", 16));
+
+                                if(checkNum.length() == 1){
+                                    checkNum = "0" + checkNum;
+                                }else if(checkNum.length() > 2){
+                                    checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                                }
+                                String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "05" + checkNum + "%22%7D";
+
+                                sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+                            }
+                        }
+                    };
+                    lockThread.start();
+                }
+
+            }
+        };
+        passwordThread.start();
+    }
+
+    @Override
+    public List<ArdTankLock> getArdTankLockAllWithState() {
+        List<ArdTankLock> result = ardTankLockMapper.getArdTankLockAllWithState();
+        return result;
+    }
+
+    /*@Override
+    public void getAlarm(String syUserId,String syPassword) {
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return;
+        }
+        String finalSyURL = syURL;
+
+        String passwordMd5 = DigestUtils.md5Hex(syPassword);
+        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, syUserId);
+        String sessionId = (String) LogInResult.get("sessionId");
+
+        List<ArdTankLock> ardTankLockResult = ardTankLockMapper.getAll();
+        for(ArdTankLock ardTankLock : ardTankLockResult){
+            if(this.alarmMap.get(ardTankLock.getLockNum()) != null){
+                continue;//褰撳墠閿佸凡鍦ㄨ幏鍙栨姤璀︼紝涓嶅湪鍒涘缓绾跨▼
+            }
+            Thread thread = new Thread(finalSyURL){
+                @Override
+                public void run() {
+                    try{
+                        String lockNum = ardTankLock.getLockNum();
+                        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("06", 16));//璁剧疆閿佽姱鐘舵�佸姛鑳界爜06
+                        if(checkNum.length() == 1){
+                            checkNum = "0" + checkNum;
+                        }
+                        if(checkNum.length() > 2){
+                            checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                        }
+
+                        String paramsStr = lockNum + "06" + checkNum;
+                        paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + paramsStr + "%22%7D";
+                        Map<String,Object> result = sendCmd(finalSyURL, syUserId, ardTankLock.getCarId(), 199, "DataDownTransfer", paramsStr, sessionId);
+                        alarmMap.remove(ardTankLock.getLockNum());
+                    }catch(Exception e){
+                        e.printStackTrace();
+                    }
+                }
+            };
+            thread.start();
+            alarmMap.put(ardTankLock.getLockNum(),thread);
+        }
+    }*/
+
+    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>) com.alibaba.fastjson2.JSON.parse(message);
+            return map;
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return new HashMap();
+        }
+    }
 }

--
Gitblit v1.9.3