ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java
@@ -417,4 +417,12 @@ dataTable.setMsg("查询成功"); return dataTable; } @ApiOperation("修改电磁锁使能") @PreAuthorize("@ss.hasPermi('sy:lock:updateLockEnableByCarId')") @Log(title = "电磁锁" , businessType = BusinessType.UPDATE) @PutMapping("/updateLockEnableByCarId") public AjaxResult updateLockEnableByCarId(@RequestBody Map<String,Object> para) { return toAjax(ardTankLockService.updateLockEnableByCarId(para)); } } ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -86,297 +86,8 @@ ((ArdSyCarDayServiceImpl)SpringUtils.getBean("ardSyCarDayServiceImpl")).insertArdSyCarDay(carId);//新增车辆上报时间 Map<String,Object> result = ((ArdSyCarServiceImpl)SpringUtils.getBean("ardSyCarServiceImpl")).getArdSyCarAndDeptByCarId(carId);//查询车辆及部门 if(result != null){ //清淤开始---------- /*try{ String lng = (String) gpsMap.get("lng").toString();//获取经度 String lat = (String) gpsMap.get("lat").toString();//获取纬度 String carName = (String) gpsMap.get("carName");//获取车牌号 String time = (String) gpsMap.get("time");//定位时间 //时间状态 Boolean timeType = true; if(time==null || time == ""){ timeType = false; } String deptNum = (String) result.get("deptId").toString();//获取部门ID String deptName = (String) result.get("deptName");//获取部门名称 String carModel = (String) result.get("carModel");//获取车辆模型 Integer drct = (Integer) gpsMap.get("drct");//获取车辆模型 Integer speed = (Integer) gpsMap.get("speed");//车速 String reserved = (String) result.get("reserved_1");//rtu关联 //rtu标识 boolean rtuType = true; if(reserved==null || reserved==""){ //无锁 rtuType = false; } //log.debug("定位数据:车辆carId:"+carId+"经度lng:"+lng+"纬度lat:"+lat); //定义2维空间 Point2D.Double point = new Point2D.Double(Double.parseDouble(lng), Double.parseDouble(lat)); List<Point2D.Double> pts = new ArrayList<Point2D.Double>(); //注入带锁车辆Bean ArdAccessFenceService ardAccessFenceService = SpringUtils.getBean(ArdAccessFenceService.class); //注入油点围栏Bean ArdOilWallService ardOilWallService = SpringUtils.getBean(ArdOilWallService.class); //注入报警计数Bean ArdAccessNumService accessNumService = SpringUtils.getBean(ArdAccessNumService.class); //注入电子锁Bean ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); //注入锁Bean ArdSyCarLockService lockService = SpringUtils.getBean(ArdSyCarLockService.class); //查询定位油车表中是否有该车辆 ArdAccessFence ardAccessFence = ardAccessFenceService.queryAccess(carId); //查询所有装油点围栏 List<ArdOilWall> ardOilWalls = ardOilWallService.accessAll(); //日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); //如果没有说明车辆未进入装油点,需要匹配所有装油点围栏 if(ardAccessFence==null){ //车辆未进入装油点 for (int i = 0; i < ardOilWalls.size(); i++) { pts.clear(); ArdOilWall ardOilWall = ardOilWalls.get(i); String[] coord = ardOilWall.getCoord().split(","); for (int j = 0; j < coord.length; j = j + 3) { pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j+1]))); } if(GeoTools.IsPtInPoly(point, pts)){ //进入装油点入库 ArdAccessFence ardAccessFence1 = new ArdAccessFence(); ardAccessFence1.setId(String.valueOf(UUID.randomUUID())); ardAccessFence1.setCarId(carId); ardAccessFence1.setCarName(carName); ardAccessFence1.setDeptId(deptNum); ardAccessFence1.setDeptName(deptName); ardAccessFence1.setIntoShipmentId(ardOilWall.getId()); ardAccessFence1.setIntoShipmentTime(time); ardAccessFence1.setLng(lng); ardAccessFence1.setLat(lat); ardAccessFence1.setLastTime(time); ardAccessFence1.setNowWallName("进入装油点:"+ardOilWall.getName()); ardAccessFence1.setCarModel(carModel); ardAccessFence1.setIsWarning(0); ardAccessFence1.setDrct(drct); ardAccessFence1.setIsAlarm(0); ardAccessFenceService.access(ardAccessFence1); if(rtuType){ //mqtt发送既定Rtu状态 feng(carId,"装油点",carRtuService,lockService); break; } } } }else { //车速标记 Boolean stop = true; //判断车速 if(rtuType){ if(speed>5){ //mqtt发送既定Rtu状态 feng(carId,"施封",carRtuService,lockService); stop = false; } } //车辆有值优先判断是否为手动添加车辆 if(ardAccessFence.getIsAlarm() == 0 || ardAccessFence.getIsAlarm() == null){ //车辆非手动添加数据,判断是否有进入围栏ID if(ardAccessFence.getIntoShipmentId()==null){ //没有进入装油点,赋值经纬度 ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); //判断是否进入装油点围栏 for (int i = 0; i < ardOilWalls.size(); i++) { pts.clear(); ArdOilWall ardOilWall = ardOilWalls.get(i); String[] coord = ardOilWall.getCoord().split(","); for (int j = 0; j < coord.length; j = j + 3) { pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j+1]))); } if(GeoTools.IsPtInPoly(point, pts)){ //进入装油点入库 ardAccessFence.setIntoShipmentId(ardOilWall.getId()); ardAccessFence.setIntoShipmentTime(time); ardAccessFence.setNowWallName("进入装油点:"+ardOilWall.getName()); ardAccessFence.setLastTime(time); if(rtuType){ if(stop){ //mqtt发送既定Rtu状态 feng(carId,"装油点",carRtuService,lockService); } } break; } } ardAccessFenceService.updAccess(ardAccessFence); }else { //如果有进入围栏ID,判断是否开出装油点 String out = ardAccessFence.getOutShipmentId(); //出装油点ID为空 if(out == null){ //车辆未开出装油点,判断是否开出装油点 String into = ardAccessFence.getIntoShipmentId(); ArdOilWall ardOilWall = ardOilWallService.one(into); pts.clear(); String[] coord = ardOilWall.getCoord().split(","); for (int j = 0; j < coord.length; j = j + 3) { pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j + 1]))); } if (!GeoTools.IsPtInPoly(point, pts)) { //车辆开出装油点 ardAccessFence.setOutShipmentId(into); ardAccessFence.setOutShipmentTime(time); ardAccessFence.setNowWallName("开出装油点:"+ardOilWall.getName()); ardAccessFence.setLastTime(time); ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); ardAccessFenceService.updAccess(ardAccessFence); if(rtuType){ //开出装油点围栏,发送上锁及施封命令 feng(carId,"施封",carRtuService,lockService); } } }else { //车辆已经开出装油点,查看是否有卸油点ID String unload = ardAccessFence.getIntoUnloadId(); //如果unload为空,判断是否进入卸油点 if (unload == null) { //车辆未进入卸油点 List<ArdOilWall> ardOilWallUpload = ardOilWallService.uploadAll(); //是否在路上 Boolean isRoad = true; //判断是否进去卸油点 for (int i = 0; i < ardOilWallUpload.size(); i++) { pts.clear(); ArdOilWall ardOilWall = ardOilWallUpload.get(i); String[] coord = ardOilWall.getCoord().split(","); for (int j = 0; j < coord.length; j = j + 3) { pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j + 1]))); } if (GeoTools.IsPtInPoly(point, pts)) { //进入卸油点,存入卸油点围栏ID ardAccessFence.setIntoUnloadId(ardOilWall.getId()); ardAccessFence.setIntoUnloadTime(time); ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); ardAccessFence.setNowWallName("进入卸油点:"+ardOilWall.getName()); ardAccessFence.setLastTime(time); ardAccessFenceService.updAccess(ardAccessFence); //已经进入卸油点,不在路上不需要停车报警 isRoad = false; if(rtuType){ if(stop){ //mqtt发送既定Rtu状态 feng(carId,"卸油点",carRtuService,lockService); } } break; } } //不在卸油点就是在路上 if(isRoad){ //所在围栏名称赋null ardAccessFence.setNowWallName("在路上"); //如果在路上判断坐标是否与上次一样 if(ardAccessFence.getLng().equals(lng) && ardAccessFence.getLat().equals(lat)){ if(ardAccessFence.getLastTime()!=null){ if(timeType){ //如果坐标一样相减 Date nowTime = sdf.parse(time); Date lastTime = sdf.parse(ardAccessFence.getLastTime()); Long diff = (nowTime.getTime() - lastTime.getTime())/1000; ArdAccessNum list = accessNumService.queryNum(); if(list!=null){ int alarm = list.getAlarm(); if(diff>=alarm){ ardAccessFence.setIsWarning(1); ardAccessFence.setAlarmLat(lat); ardAccessFence.setAlarmLng(lng); ardAccessFenceService.updAccess(ardAccessFence); } } }else { log.debug(carId+"号车定位时间为空"); } }else { ardAccessFence.setLastTime(time); ardAccessFenceService.updAccess(ardAccessFence); } }else { //如果不一样更新坐标 ardAccessFence.setLat(lat); ardAccessFence.setLng(lng); ardAccessFence.setLastTime(time); ardAccessFenceService.updAccess(ardAccessFence); } } }else { //车辆已经进入卸油点,判断是否已经开出卸油点 ArdOilWall ardOilWall = ardOilWallService.one(unload); pts.clear(); String[] coord = ardOilWall.getCoord().split(","); for (int j = 0; j < coord.length; j = j + 3) { pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j + 1]))); } if (!GeoTools.IsPtInPoly(point, pts)) { if(rtuType){ //开出了卸油点围栏,发送上锁及施解封指令 feng(carId,"施封",carRtuService,lockService); } //删除该条车辆数据 ardAccessFenceService.delAccess(carId); }else { //未开出卸油点,更新经纬度保存 ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); ardAccessFence.setLastTime(time); ardAccessFenceService.updAccess(ardAccessFence); } } } } }else if(ardAccessFence.getIsAlarm()==1){ //1为手动添加车辆无需报警信息,更新位置即可 ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); ardAccessFenceService.updAccess(ardAccessFence); }else if(ardAccessFence.getIsAlarm() == 2){ //2为手动添加报警车辆有报警,所在围栏名称赋null,排查报警信息,只需处理路上情况 ardAccessFence.setNowWallName(null); //如果在路上判断坐标是否与上次一样 if(ardAccessFence.getLng().equals(lng) && ardAccessFence.getLat().equals(lat)){ if(timeType){ Date nowTime = sdf.parse(time); Date lastTime = sdf.parse(ardAccessFence.getLastTime()); Long diff = (nowTime.getTime() - lastTime.getTime())/1000; ArdAccessNum list = accessNumService.queryNum(); if(list!=null){ int alarm = list.getAlarm(); if(diff>=alarm){ //报警字段为1提示报警 ardAccessFence.setIsWarning(1); ardAccessFence.setAlarmLat(lat); ardAccessFence.setAlarmLng(lng); ardAccessFenceService.updAccess(ardAccessFence); } } }else { log.debug(carId+"号车定位时间为空"); } }else { //如果不一样更新坐标 ardAccessFence.setLat(lat); ardAccessFence.setLng(lng); ardAccessFence.setLastTime(time); ardAccessFenceService.updAccess(ardAccessFence); } } } //清淤结束------------ }catch(Exception e){ }*/ if(PositionContainer.getTankCarParkingAlarmTHread().get(carId) == null){ if(PositionContainer.getTankCarParkingAlarmTHread().get(carId) == null){//异常停车线程 Thread tankCarParkingAlarmThread = new Thread(){//创建线程判断罐车异常停车报警 @Override public void run() { @@ -388,13 +99,13 @@ } /*Thread autoProcessThread = new Thread(){//自动操控线程 Thread autoProcessThread = new Thread(){//自动操控线程 @Override public void run() { ((ArdTankLockProcessLogServiceImpl)SpringUtils.getBean("ardTankLockProcessLogServiceImpl")).autoProcessArdTankLockByLockId(ip, userId, password, gpsMap); ((ArdTankLockProcessLogServiceImpl)SpringUtils.getBean("ardTankLockProcessLogServiceImpl")).autoProcessArdTankLockByLockId(gpsMap); } }; autoProcessThread.start();*/ autoProcessThread.start(); gpsMap.putAll(result); String ancestors = (String) gpsMap.get("ancestors");//获取父级部门 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java
@@ -89,4 +89,8 @@ public List<ArdTankLock> getArdTankLockAllWithState(); public Long getArdTankLockCount(); public List<ArdTankLock> getArdTankLockWithStateByCarId(String carId); public int updateLockEnableByCarId(@Param("carId")String carId, @Param("enable") String enable); } ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockProcessLogService.java
@@ -63,4 +63,6 @@ public int deleteArdTankLockProcessLogById(String id); public AjaxResult processArdTankLockByLockId(String userId, String username, Map<String,String> para); public void autoProcessArdTankLockByLockId(Map<String,Object> gpsMap); } ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java
@@ -83,5 +83,7 @@ public Long getArdTankLockCount(); public int updateLockEnableByCarId(Map<String,Object> para); //public void getAlarm(String syUserId,String syPassword); } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockProcessLogServiceImpl.java
@@ -21,6 +21,7 @@ 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; @@ -56,7 +57,16 @@ private ArdTankWallTemporaryMapper ardTankWallTemporaryMapper; @Resource private ArdTankLockAutoProcessLogMapper ardTankLockAutoProcessLogMapper; @Resource private SYClient sYClient; @Value("${syCar.userId}") private String userId; @Value("${syCar.password}") private String password; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -274,6 +284,174 @@ } } @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;//是能为false,处于不受控状态 } } Integer speed = (Integer) gpsMap.get("speed"); if(speed >= electromagneticLockVelocity){ for(ArdTankLock ardTankLock : ardTankLockResult){ ArdTankLockState ardTankLockState = ardTankLock.getArdTankLockState(); if(ardTankLockState != null){ if(ardTankLockState.getLockState().equals("开锁状态")){ String lockNum = ardTankLock.getLockNum(); if(PositionContainer.getCarLockProcessThreadMap().get((String) gpsMap.get("carId")).get(lockNum) == 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 syURL = "http://" + ip + ":9999"; 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;//车辆处于任意临时电子围栏,就将标记设为false 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("关锁状态")){ String lockNum = ardTankLock.getLockNum(); 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("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; } } } } } //电子围栏逻辑 } } public Map<String,Object> sendCmd(String syURL,String userId,String carId,Integer cmdId,String cmd,String paramsStr,String sessionId){ OkHttpClient okHttpClient = new OkHttpClient(); ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
@@ -860,6 +860,14 @@ return result; } @Override public int updateLockEnableByCarId(Map<String, Object> para) { String carId = (String) para.get("carId"); String enable = String.valueOf((Boolean) para.get("enable")); int result = ardTankLockMapper.updateLockEnableByCarId(carId, enable); return result; } /*@Override public void getAlarm(String syUserId,String syPassword) { List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT"); ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java
@@ -392,8 +392,11 @@ thread.start(); PositionContainer.getCarWallThreadMap().put((String) map.get("carId"), thread); }else{ //忽略超时 continue; //超时 ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary(); ardTankWallTemporary.setId((String) map.get("id")); ardTankWallTemporary.setProcessMark("-1");//-1为到期 ardTankWallTemporaryMapper.updateArdTankWallTemporary(ardTankWallTemporary); } } }catch (Exception e){ ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml
@@ -271,4 +271,23 @@ <select id="getArdTankLockCount" resultType="java.lang.Long" > select count(*) from ard_tank_lock </select> <select id="getArdTankLockWithStateByCarId" resultMap="ArdTankLockWithStateResult" > select t.id,t.lock_num,t.lock_name,t.img_position_top,t.img_position_left, t.car_id,t.enable,t.restart_state,t.online_time,t.sid,t.lock_id,t.slock_num, t.lock_state,t.lock_position_state,t.lock_shell_state,t.srestart_state, t.batter_voltage,t.power_voltage,t.upload_time,t.unique_mark from ( select atl.*,atls.id as sid,atls.lock_id,atls.lock_num as slock_num,atls.lock_state, atls.lock_position_state,atls.lock_shell_state,atls.restart_state as srestart_state, atls.batter_voltage,atls.power_voltage,atls.upload_time,atls.unique_mark, rank() over(partition by atl.lock_num,atl.online_time order by atls.upload_time desc) rn from ard_tank_lock atl left join ard_tank_lock_state atls on atl.lock_num = atls.lock_num where atl.car_id = #{carId})t where t.rn = 1 </select> <update id="updateLockEnableByCarId" parameterType="java.lang.String"> update ard_tank_lock set enable = #{enable} where car_id = #{carId} </update> </mapper>