| | |
| | | return AjaxResult.error("当前车辆正处在电子围栏外"); |
| | | }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("其他操控正在进行中,请稍后"); |
| | | } |
| | | }catch(Exception e){ |
| | | e.printStackTrace(); |
| | |
| | | for(ArdTankLock ardTankLock : ardTankLockResult){ |
| | | ArdTankLockState ardTankLockState = ardTankLock.getArdTankLockState(); |
| | | if(ardTankLockState != null){ |
| | | if(ardTankLockState.getLockState().equals("开锁状态")){ |
| | | 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位 |
| | |
| | | |
| | | 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 syURL = "http://" + ip + ":9999"; |
| | | //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"); |
| | |
| | | for(ArdTankLock ardTankLock : ardTankLockResult){ |
| | | ArdTankLockState ardTankLockState = ardTankLock.getArdTankLockState(); |
| | | if(ardTankLockState != null){ |
| | | if(ardTankLockState.getLockState().equals("关锁状态")){ |
| | | 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位 |
| | |
| | | |
| | | 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());//加入容器 |
| | | //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"); |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |