From 58ed1a6894e8fc6896c1ce297a86adac3bbd999e Mon Sep 17 00:00:00 2001 From: zhangnaisong <2434969829@qq.com> Date: 星期三, 24 七月 2024 11:14:37 +0800 Subject: [PATCH] 电磁锁实时状态暂提交 --- ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java | 14 +++ ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java | 12 +++ ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java | 32 ++----- ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml | 24 ++++++ ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java | 2 ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java | 123 ++++++++++++++++++++++++++++++ ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java | 19 ++++ 7 files changed, 201 insertions(+), 25 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java index ed0c2b9..1412e50 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java +++ b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java @@ -53,6 +53,8 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import org.springframework.web.multipart.MultipartFile; +import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; + /** * 涓変竴杞﹁締Controller * @@ -204,7 +206,126 @@ thread.start(); } }; - lockStateTimer.scheduleAtFixedRate(lockStateTask,date,1000); + lockStateTimer.scheduleAtFixedRate(lockStateTask,date,3000); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Timer lockCheckTimeTimer = new Timer();//瀹氭椂鏍″噯鏃堕棿 + TimerTask lockCheckTimeTask =new TimerTask(){ + @Override + public void run() { + SysConfig config = new SysConfig(); + config.setConfigKey("syCarPT"); + List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config); + String syURL = ""; + + if(sysConfigResult.size() == 0){ + return; + }else{ + syURL = sysConfigResult.get(0).getConfigValue(); + } + String passwordMd5 = DigestUtils.md5Hex(password); + Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId); + String sessionId = (String) LogInResult.get("sessionId"); + + String finalSyURL = syURL; + + List<ArdTankLock> result = ardTankLockService.getArdTankLockAll();//鏌ヨ鍏ㄩ儴鐢电閿� + for(ArdTankLock ardTankLock : result){ + Thread LockThread = new Thread(finalSyURL){ + @Override + public void run() { + //鑾峰彇鏃堕棿骞舵媶鍒嗗勾鏈堟棩鏃跺垎绉� + String nowTime = sdf.format(new Date()); + String nowYear = nowTime.substring(2,4); + String nowMonth = nowTime.substring(5,7); + String nowDay = nowTime.substring(8,10); + String nowHour = nowTime.substring(11,13); + String nowMinute = nowTime.substring(14,16); + String nowSecond = nowTime.substring(17,19); + + String nowYearHex = Integer.toHexString(Integer.parseInt(nowYear)); + if(nowYearHex.length() == 1){ + nowYearHex = "0" + nowYearHex; + } + String nowMonthHex = Integer.toHexString(Integer.parseInt(nowMonth)); + if(nowMonthHex.length() == 1){ + nowMonthHex = "0" + nowMonthHex; + } + String nowDayHex = Integer.toHexString(Integer.parseInt(nowDay)); + if(nowDayHex.length() == 1){ + nowDayHex = "0" + nowDayHex; + } + String nowHourHex = Integer.toHexString(Integer.parseInt(nowHour)); + if(nowHourHex.length() == 1){ + nowHourHex = "0" + nowHourHex; + } + String nowMinuteHex = Integer.toHexString(Integer.parseInt(nowMinute)); + if(nowMinuteHex.length() == 1){ + nowMinuteHex = "0" + nowMinuteHex; + } + String nowSecondHex = Integer.toHexString(Integer.parseInt(nowSecond)); + if(nowSecondHex.length() == 1){ + nowSecondHex = "0" + nowSecondHex; + } + //16杩涘埗鏃堕棿 + String timeHex = nowYearHex + nowMonthHex + nowDayHex + nowHourHex + nowMinuteHex + nowSecondHex; + 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("08", 16) + + Integer.parseInt(nowYearHex, 16) + Integer.parseInt(nowMonthHex, 16) + Integer.parseInt(nowDayHex, 16) + + Integer.parseInt(nowHourHex, 16) + Integer.parseInt(nowMinuteHex, 16) + Integer.parseInt(nowSecondHex, 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() + "08" + timeHex + checkNum + "%22%7D"; + + sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId); + } + }; + LockThread.start(); + } + } + }; + lockCheckTimeTimer.scheduleAtFixedRate(lockCheckTimeTask,date,10000); + + Timer sendTimer = new Timer();//瀹氭椂鍙戦�侀攣鐘舵�� + TimerTask sendLockStateTask =new TimerTask(){ + @Override + public void run() { + SysConfig config = new SysConfig(); + config.setConfigKey("syCarPT"); + List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config); + String syURL = ""; + + if(sysConfigResult.size() == 0){ + return; + }else{ + syURL = sysConfigResult.get(0).getConfigValue(); + } + String passwordMd5 = DigestUtils.md5Hex(password); + Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId); + String sessionId = (String) LogInResult.get("sessionId"); + + String finalSyURL = syURL; + + for (String key : ONLINE_USER_SESSIONS.keySet()){ + Thread lockThread = new Thread(finalSyURL) { + @Override + public void run() { + String usersId = key.split("_")[0]; + ardTankLockService.sendLockState(usersId,userId,password); + } + }; + lockThread.start(); + } + } + }; + sendTimer.scheduleAtFixedRate(sendLockStateTask,date,3000); + + } /** diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java index c3a2723..f568815 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java +++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java @@ -6,6 +6,8 @@ import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; +import java.util.List; + /** * 涓変竴杞﹁締瀵硅薄 ard_sy_car * @@ -58,6 +60,8 @@ @TableField("reserved_3") private String reserved3; + + private List<ArdTankLock> ardTankLockList; public void setId(String id) { @@ -150,6 +154,14 @@ return reserved3; } + public List<ArdTankLock> getArdTankLockList() { + return ardTankLockList; + } + + public void setArdTankLockList(List<ArdTankLock> ardTankLockList) { + this.ardTankLockList = ardTankLockList; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java index ce166a3..666b8bb 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java +++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java @@ -182,80 +182,66 @@ } long cha = now.getTime() - sdf.parse(time).getTime(); - System.out.println("////////////////"); + /*System.out.println("////////////////"); System.out.println(time); - System.out.println(cha); - /*if(Math.abs(cha) >= 5 * 1000){ + System.out.println(cha);*/ + if(Math.abs(cha) >= 5 * 1000){ //鏃堕棿鏍″噯 - String url = "http://" + ip + ":9999"; + /*String url = "http://" + ip + ":9999"; String passwordMd5 = DigestUtils.md5Hex(password); Map<String, Object> LogInResult = loginIn(url, userId, passwordMd5); String sessionId = (String) LogInResult.get("sessionId"); //鑾峰彇鏃堕棿骞舵媶鍒嗗勾鏈堟棩鏃跺垎绉� String nowTime = sdf.format(now); String nowYear = nowTime.substring(2,4); - System.out.println(nowYear); String nowMonth = nowTime.substring(5,7); - System.out.println(nowMonth); String nowDay = nowTime.substring(8,10); - System.out.println(nowDay); String nowHour = nowTime.substring(11,13); - System.out.println(nowHour); String nowMinute = nowTime.substring(14,16); - System.out.println(nowMinute); String nowSecond = nowTime.substring(17,19); - System.out.println(nowSecond); String nowYearHex = Integer.toHexString(Integer.parseInt(nowYear)); if(nowYearHex.length() == 1){ nowYearHex = "0" + nowYearHex; } - System.out.println(nowYearHex); String nowMonthHex = Integer.toHexString(Integer.parseInt(nowMonth)); if(nowMonthHex.length() == 1){ nowMonthHex = "0" + nowMonthHex; } - System.out.println(nowMonthHex); String nowDayHex = Integer.toHexString(Integer.parseInt(nowDay)); if(nowDayHex.length() == 1){ nowDayHex = "0" + nowDayHex; } - System.out.println(nowDayHex); String nowHourHex = Integer.toHexString(Integer.parseInt(nowHour)); if(nowHourHex.length() == 1){ nowHourHex = "0" + nowHourHex; } - System.out.println(nowHourHex); String nowMinuteHex = Integer.toHexString(Integer.parseInt(nowMinute)); if(nowMinuteHex.length() == 1){ nowMinuteHex = "0" + nowMinuteHex; } - System.out.println(nowMinuteHex); String nowSecondHex = Integer.toHexString(Integer.parseInt(nowSecond)); if(nowSecondHex.length() == 1){ nowSecondHex = "0" + nowSecondHex; } - System.out.println(nowSecondHex); //16杩涘埗鏃堕棿 String timeHex = nowYearHex + nowMonthHex + nowDayHex + nowHourHex + nowMinuteHex + nowSecondHex; - System.out.println(timeHex); String lockNumHead = ardTankLockResult.get(0).getLockNum().substring(0,2); String lockNumTail = ardTankLockResult.get(0).getLockNum().substring(2,4); //璁$畻鏍¢獙 String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("08", 16) + Integer.parseInt(nowYearHex, 16) + Integer.parseInt(nowMonthHex, 16) + Integer.parseInt(nowDayHex, 16) + Integer.parseInt(nowHourHex, 16) + Integer.parseInt(nowMinuteHex, 16) + Integer.parseInt(nowSecondHex, 16)); - System.out.println(checkNum); if(checkNum.length() == 1){ checkNum = "0" + checkNum; }else if(checkNum.length() > 2){ checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length()); } - System.out.println(checkNum); String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "08" + timeHex + checkNum + "%22%7D"; System.out.println(ardTankLock.getLockNum() + "08" + timeHex + checkNum); - sendCmd(url,userId,ardTankLockResult.get(0).getCarId(),199,"DataDownTransfer", paramsStr,sessionId); - }else{*/ + sendCmd(url,userId,ardTankLockResult.get(0).getCarId(),199,"DataDownTransfer", paramsStr,sessionId);*/ + return; + }else{ ArdTankLockState ardTankLockState = new ArdTankLockState(); ardTankLockState.setId(IdUtils.simpleUUID()); ardTankLockState.setLockId(ardTankLockResult.get(0).getId()); @@ -264,6 +250,7 @@ case "01": ardTankLockState.setLockState("寮�閿佺姸鎬�");break; case "02": ardTankLockState.setLockState("鍏抽攣鐘舵��");break; case "03": ardTankLockState.setLockState("寮傚父鐘舵��");break; + case "04": ardTankLockState.setLockState("鍔ㄤ綔鐘舵��");break; default: break; } @@ -326,8 +313,7 @@ ardTankLockState.setUploadTime(time); ardTankLockState.setUniqueMark(uniqueMark); ((ArdTankLockStateServiceImpl)SpringUtils.getBean("ardTankLockStateServiceImpl")).insertOrUpdateArdTankLockState(ardTankLockState); - - //} + } } }catch (Exception e){ e.printStackTrace(); diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java index c656a1d..d6daab6 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java @@ -74,4 +74,6 @@ public Map<String,Object> getLockByCarPlate(String usersId, String carPlate, Integer pageNum, Integer pageSize); public List<ArdTankLock> getArdTankLockAll(); + + public void sendLockState(String userId,String syUserId,String syPassword); } 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 6ac1b8b..f882b22 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 @@ -458,4 +458,23 @@ 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<ArdTankLock> ardTankLockList = ardTankLockMapper.getLockByCarId(carId); + Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(syURL, carId, ardSyUser.getUserId(), sessionId);*/ + } } diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java index 2d0d907..6471083 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java @@ -3,6 +3,8 @@ import java.util.List; import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.sy.domain.ArdTankLock; +import com.ruoyi.sy.mapper.ArdTankLockMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -24,6 +26,9 @@ public class ArdTankLockStateServiceImpl implements IArdTankLockStateService { @Resource private ArdTankLockStateMapper ardTankLockStateMapper; + + @Resource + private ArdTankLockMapper ardTankLockMapper; /** * 鏌ヨ缃愯溅閿佺姸鎬� @@ -95,6 +100,13 @@ @Override public int insertOrUpdateArdTankLockState(ArdTankLockState ardTankLockState) { int result = ardTankLockStateMapper.insertOrUpdateArdTankLockState(ardTankLockState); - return result; + try{ + return result; + }finally { + ArdTankLock ardTankLock = new ArdTankLock(); + ardTankLock.setId(ardTankLockState.getLockId()); + ardTankLock.setOnlineTime(ardTankLockState.getUploadTime()); + ardTankLockMapper.updateArdTankLock(ardTankLock);//鏇存敼鐘舵�� + } } } diff --git a/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml index cf822fd..bced356 100644 --- a/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml +++ b/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml @@ -17,6 +17,30 @@ <result property="reserved3" column="reserved_3" /> </resultMap> + <resultMap type="ArdSyCar" id="ArdSyCarLockResult"> + <result property="id" column="id" /> + <result property="carId" column="car_id" /> + <result property="carModel" column="car_model" /> + <result property="carType" column="car_type" /> + <result property="carBrand" column="car_brand" /> + <result property="deptId" column="dept_id" /> + <result property="carPicture" column="car_picture" /> + <result property="reserved1" column="reserved_1" /> + <result property="reserved2" column="reserved_2" /> + <result property="reserved3" column="reserved_3" /> + <collection property="ardTankLockList" ofType="com.ruoyi.sy.domain.ArdTankLock"> + <result property="id" column="lid" /> + <result property="lockNum" column="lock_num" /> + <result property="lockName" column="lock_name" /> + <result property="imgPositionTop" column="img_position_top" /> + <result property="imgPositionLeft" column="img_position_left" /> + <result property="carId" column="lcar_id" /> + <result property="enable" column="enable" /> + <result property="restartState" column="restart_state" /> + <result property="onlineTime" column="online_time" /> + </collection> + </resultMap> + <sql id="selectArdSyCarVo"> select id, car_id, car_model, car_type, car_brand, dept_id, car_picture, reserved_1, reserved_2, reserved_3 from ard_sy_car </sql> -- Gitblit v1.9.3