| | |
| | | //删除结束时间为null的记录 |
| | | int result = ardTankAbnormalParkAlarmService.deleteArdTankAbnormalParkAlarmByEndTime(); |
| | | |
| | | List<ArdSyCar> ardSyCarAndLockList = ardSyCarService.selectArdSyCarAndTankLock();//查询全部罐车及下挂电磁锁 |
| | | |
| | | for(ArdSyCar ardSyCar : ardSyCarAndLockList){//构造容器 |
| | | Map<String,Map<String,Thread>> carMap = new HashMap();//车辆容器 |
| | | for(ArdTankLock ardTankLock : ardSyCar.getArdTankLockList()){ |
| | | Map<String,Thread> lockMap = new HashMap();//锁容器 |
| | | carMap.put(ardTankLock.getLockNum(),lockMap); |
| | | } |
| | | PositionContainer.getCarLockProcessThreadMap().put(ardSyCar.getCarId(),carMap); |
| | | } |
| | | |
| | | Timer lockStateTimer = new Timer();//定时获取各个锁的状态 |
| | | TimerTask lockStateTask =new TimerTask(){ |
| | | @Override |
| | |
| | | } |
| | | |
| | | String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "01" + checkNum + "%22%7D"; |
| | | |
| | | try{ |
| | | sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockState"); |
| | | }catch(Exception e){ |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockState"); |
| | | } |
| | | } |
| | | }; |
| | | lockThread.start(); |
| | | //lockThread.start(); |
| | | //将状态线程放入容器 |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockState",lockThread); |
| | | } |
| | | } |
| | | }; |
| | |
| | | checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length()); |
| | | } |
| | | String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "08" + timeHex + checkNum + "%22%7D"; |
| | | |
| | | try{ |
| | | sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId); |
| | | } |
| | | }; |
| | | lockThread.start(); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockTime"); |
| | | }catch(Exception e){ |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockTime"); |
| | | } |
| | | } |
| | | }; |
| | | lockCheckTimeTimer.scheduleAtFixedRate(lockCheckTimeTask,date,7000); |
| | | //lockThread.start(); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockTime",lockThread); |
| | | } |
| | | } |
| | | }; |
| | | //lockCheckTimeTimer.scheduleAtFixedRate(lockCheckTimeTask,date,7000); |
| | | lockCheckTimeTimer.scheduleAtFixedRate(lockCheckTimeTask,date,67000); |
| | | |
| | | Timer sendTimer = new Timer();//定时发送锁状态 |
| | | TimerTask sendLockStateTask = new TimerTask(){ |
| | |
| | | ardTankLockService.readPassword(userId,password); |
| | | } |
| | | }; |
| | | passwordTimer.scheduleAtFixedRate(passwordTask,date,11000); |
| | | //passwordTimer.scheduleAtFixedRate(passwordTask,date,11000); |
| | | passwordTimer.scheduleAtFixedRate(passwordTask,date,13000); |
| | | |
| | | Timer lockRestartStateTimer = new Timer();//定时各个锁的复位状态 |
| | | TimerTask lockRestartStateTask =new TimerTask(){ |
| | |
| | | } |
| | | |
| | | String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "03" + process + checkNum + "%22%7D"; |
| | | |
| | | try{ |
| | | sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockRestart"); |
| | | }catch (Exception e){ |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockRestart"); |
| | | } |
| | | } |
| | | }; |
| | | lockThread.start(); |
| | | //lockThread.start(); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockRestart",lockThread); |
| | | } |
| | | } |
| | | } |
| | |
| | | thread.start(); |
| | | } |
| | | }; |
| | | lockRestartStateTimer.scheduleAtFixedRate(lockRestartStateTask,date,9000); |
| | | lockRestartStateTimer.scheduleAtFixedRate(lockRestartStateTask,date,17000); |
| | | |
| | | Set<String> lockNumSet = new HashSet();//存放发送过的锁编号 |
| | | |
| | | Timer mainLockTimer = new Timer();//主定时器 |
| | | TimerTask mainLockTask = new TimerTask(){ |
| | | @Override |
| | | public void run() { |
| | | Long count = ardTankLockService.getArdTankLockCount(); |
| | | if(lockNumSet.size() >= count){//防止锁被删除,采用大于等于 |
| | | lockNumSet.clear();//全部执行过,清空容器 |
| | | } |
| | | for(String carId : PositionContainer.getCarLockProcessThreadMap().keySet()){ |
| | | Thread thread = new Thread(){ |
| | | @Override |
| | | public void run() { |
| | | Map<String, Map<String,Thread>> lockMap = PositionContainer.getCarLockProcessThreadMap().get(carId); |
| | | for(String lockNum : lockMap.keySet()){ |
| | | if(lockNumSet.contains(lockNum)){//若执行过,本次忽略 |
| | | continue; |
| | | } |
| | | if(lockMap.get(lockNum).get("lockProcess") != null){ |
| | | break;//锁操作级别最高 |
| | | }else{ |
| | | if(lockMap.get(lockNum).get("lockTime") != null){ |
| | | if(lockMap.get(lockNum).get("lockTime").isAlive()){ |
| | | lockNumSet.add(lockNum); |
| | | break;//锁校时次之 |
| | | }else{ |
| | | lockMap.get(lockNum).get("lockTime").start(); |
| | | lockNumSet.add(lockNum); |
| | | break;//锁校时次之 |
| | | } |
| | | }else{ |
| | | if(lockMap.get(lockNum).get("lockPassword") != null){ |
| | | if(lockMap.get(lockNum).get("lockPassword").isAlive()){ |
| | | lockNumSet.add(lockNum); |
| | | break;//锁密码次之 |
| | | }else{ |
| | | lockMap.get(lockNum).get("lockPassword").start(); |
| | | lockNumSet.add(lockNum); |
| | | break;//锁密码次之 |
| | | } |
| | | }else{ |
| | | if(lockMap.get(lockNum).get("lockRestart") != null) { |
| | | if(lockMap.get(lockNum).get("lockRestart").isAlive()){ |
| | | lockNumSet.add(lockNum); |
| | | }else{ |
| | | lockMap.get(lockNum).get("lockRestart").start(); |
| | | lockNumSet.add(lockNum); |
| | | break;//锁复位次之 |
| | | } |
| | | }else{ |
| | | if(lockMap.get(lockNum).get("lockState") != null) { |
| | | if(lockMap.get(lockNum).get("lockState").isAlive()){ |
| | | lockNumSet.add(lockNum); |
| | | }else{ |
| | | lockMap.get(lockNum).get("lockState").start(); |
| | | lockNumSet.add(lockNum); |
| | | break;//锁状态次之 |
| | | } |
| | | }else{ |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | thread.start(); |
| | | } |
| | | } |
| | | }; |
| | | mainLockTimer.scheduleAtFixedRate(mainLockTask,date,2000); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | private static Map<String, Set<String>> carLockPasswordMap = new HashMap();//依电磁锁编号存放生成的密码 |
| | | |
| | | |
| | | private static Map<String, Map<String, Map<String,Thread>>> carLockProcessThreadMap = new HashMap();//依车辆,电磁锁,操作类型存放线程;lockState:锁状态,lockTime:锁校时,lockPassword:锁密码(包括读写),lockRestart:锁复位,lockProcess:锁操作 |
| | | |
| | | public static Map<String, List<ArdSyCarLock>> getTopicSubscribe() { |
| | | return topicSubscribe; |
| | |
| | | PositionContainer.carLockPasswordMap = carLockPasswordMap; |
| | | } |
| | | |
| | | public static synchronized Map<String, Map<String, Map<String, Thread>>> getCarLockProcessThreadMap() { |
| | | return carLockProcessThreadMap; |
| | | } |
| | | |
| | | public static synchronized void setCarLockProcessThreadMap(Map<String, Map<String, Map<String, Thread>>> carLockProcessThreadMap) { |
| | | PositionContainer.carLockProcessThreadMap = carLockProcessThreadMap; |
| | | } |
| | | } |
| | |
| | | public List<ArdSyCar> selectArdSyCarAndTankLockByUserId(String userId); |
| | | |
| | | public List<ArdSyCar> selectByBrandAndType(@Param("carBrand")String carBrand,@Param("carType")String carType); |
| | | |
| | | public List<ArdSyCar> selectArdSyCarAndTankLock(); |
| | | } |
| | |
| | | public List<ArdTankLock> selectArdTankLockWithPassword(); |
| | | |
| | | public List<ArdTankLock> getArdTankLockAllWithState(); |
| | | |
| | | public Long getArdTankLockCount(); |
| | | } |
| | |
| | | Map<String, Object> getAlarmHPfmCountDetail(String sessionId,String usersId,String carId,String startTime,String endTime,String syURL); |
| | | |
| | | public Map<String,Object> getOnlineSYCarPosition(String soilderId); |
| | | |
| | | public List<ArdSyCar> selectArdSyCarAndTankLock(); |
| | | } |
| | |
| | | |
| | | public List<ArdTankLock> getArdTankLockAllWithState(); |
| | | |
| | | public Long getArdTankLockCount(); |
| | | |
| | | //public void getAlarm(String syUserId,String syPassword); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<ArdSyCar> selectArdSyCarAndTankLock() { |
| | | List<ArdSyCar> result = ardSyCarMapper.selectArdSyCarAndTankLock(); |
| | | return result; |
| | | } |
| | | |
| | | public List<Long> getOwnAndChildrenDeptIdList(List<Long> deptIdList,List<Long> deptIdListr){ |
| | | deptIdListr.addAll(deptIdList); |
| | | List<Long> result = sysDeptMapper.getChildrenDeptIdList(deptIdList); |
| | |
| | | import com.ruoyi.sy.domain.ArdSyUser; |
| | | import com.ruoyi.sy.domain.ArdTankLock; |
| | | import com.ruoyi.sy.domain.ArdTankWall; |
| | | import com.ruoyi.sy.gps31.PositionContainer; |
| | | import com.ruoyi.sy.mapper.ArdSyUserMapper; |
| | | import com.ruoyi.sy.mapper.ArdTankLockMapper; |
| | | import com.ruoyi.sy.mapper.ArdTankWallMapper; |
| | |
| | | |
| | | 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()); |
| | |
| | | } |
| | | }catch(Exception e){ |
| | | e.printStackTrace(); |
| | | PositionContainer.getCarLockProcessThreadMap().get(carId).get(lockNum).remove("lockProcess");//移除容器 |
| | | return AjaxResult.error("发送失败" + e.toString()); |
| | | } |
| | | } |
| | |
| | | ardTankLock.setRestartState(map.get("restartState")); |
| | | ardTankLocks.add(ardTankLock); |
| | | } |
| | | try{ |
| | | return ardTankLockMapper.insertArdTankLocks(ardTankLocks); |
| | | }finally { |
| | | if(PositionContainer.getCarLockProcessThreadMap().keySet().contains(carId)){ |
| | | Map<String, Map<String,Thread>> lockMap = PositionContainer.getCarLockProcessThreadMap().get(carId); |
| | | for(Map<String,String> map : lockList){ |
| | | Map<String,Thread> lockThreadMap = new HashMap(); |
| | | lockMap.put(map.get("lockNum"),lockThreadMap); |
| | | } |
| | | }else{ |
| | | Map<String,Map<String,Thread>> carMap = new HashMap();//车辆容器 |
| | | for(Map<String,String> map : lockList){ |
| | | Map<String,Thread> lockMap = new HashMap();//锁容器 |
| | | carMap.put(map.get("lockNum"),lockMap); |
| | | } |
| | | PositionContainer.getCarLockProcessThreadMap().put(carId,carMap); |
| | | } |
| | | } |
| | | } |
| | | /*@Override |
| | | public int insertArdTankLock(ArdTankLock ardTankLock) { |
| | |
| | | @Override |
| | | public int deleteLockByCarId(String carId) { |
| | | int result = ardTankLockMapper.deleteLockByCarId(carId); |
| | | try{ |
| | | return result; |
| | | }finally { |
| | | PositionContainer.getCarLockProcessThreadMap().remove(carId);//移除容器 |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | return 1; |
| | | } |
| | | result = ardTankLockMapper.deleteLockByCarId(carId); |
| | | try{ |
| | | return result; |
| | | }finally { |
| | | PositionContainer.getCarLockProcessThreadMap().get(carId).clear(); |
| | | } |
| | | } |
| | | |
| | | List<ArdTankLock> ardTankLocks = new ArrayList(); |
| | |
| | | ardTankLocks.add(ardTankLock); |
| | | } |
| | | } |
| | | //更新容器 |
| | | if(PositionContainer.getCarLockProcessThreadMap().keySet().contains(carId)){ |
| | | Map<String, Map<String,Thread>> lockMap = PositionContainer.getCarLockProcessThreadMap().get(carId); |
| | | for(Map<String,Object> map : lockList){ |
| | | Map<String,Thread> lockThreadMap = new HashMap(); |
| | | lockMap.put((String) map.get("lockNum"),lockThreadMap); |
| | | } |
| | | }else{ |
| | | Map<String,Map<String,Thread>> carMap = new HashMap();//车辆容器 |
| | | for(Map<String,Object> map : lockList){ |
| | | Map<String,Thread> lockMap = new HashMap();//锁容器 |
| | | carMap.put((String) map.get("lockNum"),lockMap); |
| | | } |
| | | PositionContainer.getCarLockProcessThreadMap().put(carId,carMap); |
| | | } |
| | | |
| | | if(ardTankLocks.size() != 0){ |
| | | result = result + ardTankLockMapper.insertArdTankLocks(ardTankLocks); |
| | | } |
| | |
| | | } |
| | | data = data + checkNum; |
| | | String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D"; |
| | | |
| | | try{ |
| | | 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 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()); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword"); |
| | | }catch (Exception e){ |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword"); |
| | | } |
| | | 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);*/ |
| | | }else{//读取密码 |
| | | Set<String> passwordSet = new HashSet(); |
| | | while(passwordSet.size() != 10){ |
| | | String password = ""; |
| | |
| | | } |
| | | 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); |
| | |
| | | } |
| | | data = data + checkNum; |
| | | String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D"; |
| | | try{ |
| | | 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 result = ardTankLockPasswordMapper.insertArdTankLockPasswordList(ardTankLockPasswordList); |
| | | } |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword"); |
| | | }catch(Exception e){ |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword"); |
| | | } |
| | | } |
| | | }else{ |
| | | String lockNumHead = ardTankLock.getLockNum().substring(0,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"; |
| | | |
| | | try{ |
| | | sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword"); |
| | | }catch (Exception e){ |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword"); |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | lockThread.start(); |
| | | //lockThread.start(); |
| | | PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockPassword",lockThread); |
| | | } |
| | | |
| | | } |
| | |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Long getArdTankLockCount() { |
| | | Long result = ardTankLockMapper.getArdTankLockCount(); |
| | | return result; |
| | | } |
| | | |
| | | /*@Override |
| | | public void getAlarm(String syUserId,String syPassword) { |
| | | List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT"); |
| | |
| | | ardTankLockMapper.updateArdTankLock(ardTankLock);//更改状态 |
| | | }*/ |
| | | try{ |
| | | System.out.println("////////////"); |
| | | System.out.println(ardTankLockState.getLockState()); |
| | | System.out.println(ardTankLockState.getUniqueMark()); |
| | | int result = ardTankLockStateMapper.insertArdTankLockState(ardTankLockState); |
| | | return result; |
| | | }catch(Exception e){ |
| | | System.out.println("111111111111"); |
| | | System.out.println(ardTankLockState.getLockState()); |
| | | System.out.println(ardTankLockState.getUniqueMark()); |
| | | int result = ardTankLockStateMapper.updateArdTankLockStateByUniqueMark(ardTankLockState.getUniqueMark(),ardTankLockState.getUploadTime()); |
| | | return result; |
| | | }finally { |
| | |
| | | <if test="carBrand != null and carBrand != ''"> and car_brand = #{carBrand}</if> |
| | | </where> |
| | | </select> |
| | | <select id="selectArdSyCarAndTankLock" resultMap="ArdSyCarLockResult" > |
| | | select "asc".id,"asc".car_id,"asc".car_model,"asc".car_type, |
| | | "asc".car_brand,"asc".dept_id,"asc".car_picture,atl.id as lid, |
| | | atl.lock_num,atl.lock_name,atl.img_position_top,atl.img_position_left, |
| | | atl.car_id as lcar_id,atl.enable,coalesce(atl.restart_state,'') as restart_state, |
| | | coalesce(atl.online_time,'') as online_time |
| | | from ard_sy_car "asc" |
| | | inner join ard_tank_lock atl on "asc".car_id = atl.car_id |
| | | order by "asc".car_id desc,atl.lock_num |
| | | </select> |
| | | </mapper> |
| | |
| | | case atls.lock_state |
| | | when '关锁状态' then false |
| | | when '异常状态' then false |
| | | when '动作状态' then false |
| | | /*when '动作状态' then false*/ |
| | | when '操控中...' then false |
| | | when '开锁状态' then true |
| | | else false |
| | | end as lock_state_mark, |
| | |
| | | case atls.lock_state |
| | | when '关锁状态' then false |
| | | when '异常状态' then false |
| | | when '动作状态' then false |
| | | /*when '动作状态' then false*/ |
| | | when '操控中...' then false |
| | | when '开锁状态' then true |
| | | else false |
| | | end as lock_state_mark, |
| | |
| | | from ard_tank_lock atl |
| | | left join ard_tank_lock_state atls on atl."id" = atls.lock_id)t where t.rn = 1 |
| | | </select> |
| | | |
| | | <select id="getArdTankLockCount" resultType="java.lang.Long" > |
| | | select count(*) from ard_tank_lock |
| | | </select> |
| | | </mapper> |