From 7e2382e701604e97f775dca55dc00cee7c5da053 Mon Sep 17 00:00:00 2001 From: zhangnaisong <2434969829@qq.com> Date: 星期五, 09 八月 2024 08:02:16 +0800 Subject: [PATCH] 电磁锁异常停车加入临时电子围栏提交 --- ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankAbnormalParkAlarmServiceImpl.java | 203 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 195 insertions(+), 8 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankAbnormalParkAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankAbnormalParkAlarmServiceImpl.java index c30caca..aaf117b 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankAbnormalParkAlarmServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankAbnormalParkAlarmServiceImpl.java @@ -4,19 +4,20 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; import com.alibaba.fastjson.JSON; import com.ruoyi.common.core.domain.entity.SysConfig; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.uuid.IdUtils; -import com.ruoyi.sy.domain.ArdSyCar; -import com.ruoyi.sy.domain.ArdTankWall; -import com.ruoyi.sy.mapper.ArdSyCarMapper; -import com.ruoyi.sy.mapper.ArdTankWallMapper; +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.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.gps.GeoTools; import com.ruoyi.utils.websocket.util.WebSocketUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -24,8 +25,6 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.sy.mapper.ArdTankAbnormalParkAlarmMapper; -import com.ruoyi.sy.domain.ArdTankAbnormalParkAlarm; import com.ruoyi.sy.service.IArdTankAbnormalParkAlarmService; import javax.annotation.Resource; @@ -58,6 +57,12 @@ @Resource private SysUserMapper sysUserMapper; + @Resource + private ArdTankWallTemporaryMapper ardTankWallTemporaryMapper; + + @Resource + private ArdTankLoadLogMapper ardTankLoadLogMapper; + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** @@ -88,7 +93,7 @@ ardTankAbnormalParkAlarm.setId(IdUtils.simpleUUID()); return ardTankAbnormalParkAlarmMapper.insertArdTankAbnormalParkAlarm(ardTankAbnormalParkAlarm); }*/ - @Override + /*@Override public int insertArdTankAbnormalParkAlarm(Map<String,Object> gpsMap) { if(((Number)gpsMap.get("speed")).intValue() != 0){//閫熷害涓嶄负0锛屼笉鏄紓甯稿仠杞� int result = ardTankAbnormalParkAlarmMapper.deleteArdTankAbnormalParkAlarmByCarId((String)gpsMap.get("carId")); @@ -176,6 +181,183 @@ } } } + }*/ + + @Override + public int insertArdTankAbnormalParkAlarm(Map<String,Object> gpsMap) { + ArdSyCar ardSyCarResult = ardSyCarMapper.getArdSyTankCarByCarId((String)gpsMap.get("carId")); + if(ardSyCarResult == null){//娌℃湁鍒嗛厤鏉冮檺鎴栨病鏈夋寕鎺ョ數纾侀攣锛屼笉鏄綈杞� + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return 0; + } + + List<ArdTankWall> ardTankWallResult = ardTankWallMapper.getDistinctArdTankWallByCarId((String)gpsMap.get("carId"));//鍘婚噸鏌ヨ杞﹁締鎸傛帴鐨勭數纾侀攣鎸傛帴鐨勭數瀛愬洿鏍� + if(ardTankWallResult.isEmpty()){//娌℃湁鎸傛帴鐢靛瓙鍥存爮锛屼笉娑夊強鎶ヨ + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return 0; + } + + if(((Number)gpsMap.get("speed")).intValue() != 0){//閫熷害涓嶄负0锛屼笉鏄紓甯稿仠杞� + /*int result = ardTankAbnormalParkAlarmMapper.deleteArdTankAbnormalParkAlarmByCarIdAndLoadEndTimeIsNull((String)gpsMap.get("carId")); + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return result;*/ + //鏌ョ湅鏄惁杩涘叆杩囪娌圭偣 + List<ArdTankLoadLog> ardTankLoadLogResult = ardTankLoadLogMapper.selectArdTankLoadLogByCarIdAndEndTimeIsNull((String)gpsMap.get("carId")); + if(!ardTankLoadLogResult.isEmpty()){ + Integer loadOilInterval = 5;//榛樿鏃堕棿涓�5min + SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique("loadOilInterval");//鏌ヨ鏃堕棿闂撮殧 + if(sysConfig != null){ + loadOilInterval = Integer.parseInt(sysConfig.getConfigValue()); + } + Date endLoadDate = new Date(); + for(ArdTankLoadLog ardTankLoadLog : ardTankLoadLogResult){ + Date beginLoadDate = null; + try { + beginLoadDate = this.sdf.parse(ardTankLoadLog.getBeginTime()); + } catch (ParseException e) { + e.printStackTrace(); + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return 0; + } + if(endLoadDate.getTime() - beginLoadDate.getTime() >= loadOilInterval * 60 * 1000) {//褰撳墠鏃堕棿瓒呰繃瑁呮补鏃堕棿璁惧畾闃堝�� + ardTankLoadLog.setEndTime(this.sdf.format(endLoadDate)); + ardTankLoadLogMapper.updateArdTankLoadLog(ardTankLoadLog); + }else{ + ardTankLoadLogMapper.deleteArdTankLoadLogById(ardTankLoadLog.getId()); + } + + } + } + int result = ardTankAbnormalParkAlarmMapper.deleteArdTankAbnormalParkAlarmByCarIdAndEndTimeIsNull((String)gpsMap.get("carId")); + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return result; + }else {//閫熷害涓�0锛岃�冭檻寮傚父鍋滆溅 + //鑾峰彇瑁呮补鐐� + List<ArdTankWall> loadOilArdTankWallResult = ardTankWallResult.stream().filter(ardTankWall -> ardTankWall.getWallType().equals("瑁呮补鐐�")).collect(Collectors.toList()); + //鑾峰彇鍗告补鐐瑰強杞﹀簱 + List<ArdTankWall> unloadOilOrGarageArdTankWallResult = ardTankWallResult.stream().filter(ardTankWall -> !ardTankWall.getWallType().equals("瑁呮补鐐�")).collect(Collectors.toList()); + //杞﹁締褰撳墠浣嶇疆 + Point2D.Double point = new Point2D.Double(Double.parseDouble(String.valueOf((Number)gpsMap.get("lng"))), Double.parseDouble(String.valueOf((Number)gpsMap.get("lat")))); + List<Point2D.Double> pts = new ArrayList<Point2D.Double>(); + + for(ArdTankWall ardTankWall : loadOilArdTankWallResult){//鍦ㄤ换鎰忚娌圭偣鐢靛瓙鍥存爮鍐咃紝璁″叆瑁呮补璁板綍 + pts.clear(); + 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)){ + ArdTankLoadLog ardTankLoadLogResult = ardTankLoadLogMapper.selectArdTankLoadLogByCarIdAndWallIdAndEndTimeIsNull((String)gpsMap.get("carId"),ardTankWall.getId()); + if(ardTankLoadLogResult == null){ + ArdTankLoadLog ardTankLoadLog = new ArdTankLoadLog(); + ardTankLoadLog.setId(IdUtils.simpleUUID()); + ardTankLoadLog.setCarId((String)gpsMap.get("carId")); + ardTankLoadLog.setWallId(ardTankWall.getId()); + ardTankLoadLog.setBeginTime(sdf.format(new Date())); + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return ardTankLoadLogMapper.insertArdTankLoadLog(ardTankLoadLog); + } + } + } + + + //涓存椂鐢靛瓙鍥存爮 + List<ArdTankWallTemporary> ardTankWallTemporaryList = ardTankWallTemporaryMapper.getArdTankWallTemporaryByCarId((String) gpsMap.get("carId")); + 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) {//瀹為檯璺濈灏忎簬鍗婂緞 + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return ardTankLoadLogMapper.deleteArdTankLoadLogByCarId((String)gpsMap.get("carId"));//杩涘叆涓存椂鐢靛瓙鍥存爮灏卞垹闄よ娌硅褰� + } + } + } + + + for(ArdTankWall ardTankWall : unloadOilOrGarageArdTankWallResult){//鍦ㄤ换鎰忓嵏娌圭偣鎴栬溅搴撶數瀛愬洿鏍忓唴 + pts.clear(); + 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)){ + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return ardTankLoadLogMapper.deleteArdTankLoadLogByCarId((String)gpsMap.get("carId"));//杩涘叆鍗告补鐐规垨杞﹀簱灏卞垹闄よ娌硅褰� + } + } + //鎶ヨ閫昏緫 + List<ArdTankLoadLog> ardTankLoadLogResult = ardTankLoadLogMapper.selectArdTankLoadLogByCarIdAndEndTimeIsNotNull((String)gpsMap.get("carId")); + if(!ardTankLoadLogResult.isEmpty()){//涓嶄负绌猴紝鍒欏湪浠绘剰瑁呮补鐐归暱鏈熷仠鐣欒繃 + List<ArdTankAbnormalParkAlarm> ardTankAbnormalParkAlarmResultList = ardTankAbnormalParkAlarmMapper.selectArdTankAbnormalParkAlarmByCarIdNoEndTime((String)gpsMap.get("carId")); + if(!ardTankAbnormalParkAlarmResultList.isEmpty()){//涓嶄负绌猴紝宸叉湁璁板綍 + for(ArdTankAbnormalParkAlarm ardTankAbnormalParkAlarm : ardTankAbnormalParkAlarmResultList){ + Integer abnormalParkingInterval = 5;//榛樿鏃堕棿涓�5min + SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique("abnormalParkingInterval");//鏌ヨ鏃堕棿闂撮殧 + if(sysConfig != null){ + abnormalParkingInterval = Integer.parseInt(sysConfig.getConfigValue()); + } + Date beginDate = null; + try { + beginDate = this.sdf.parse(ardTankAbnormalParkAlarm.getBeginTime()); + } catch (ParseException e) { + e.printStackTrace(); + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return 0; + } + Date endDate = new Date(); + if(endDate.getTime() - beginDate.getTime() >= abnormalParkingInterval * 60 * 1000){//褰撳墠鏃堕棿瓒呰繃寮�鍚椂闂磋瀹氶槇鍊� + ardTankAbnormalParkAlarm.setEndTime(sdf.format(endDate)); + //鏍规嵁鏉冮檺鍋氭姤璀ebsocket鎺ㄩ�� + List<SysDept> sysDeptList = sysDeptMapper.getParentsDeptListByDeptId(Long.parseLong(ardSyCarResult.getDeptId())); + List<Long> deptIdList = new ArrayList(); + for(SysDept sysDept : sysDeptList){ + deptIdList.add(sysDept.getDeptId()); + } + List<SysUser> sysUserList = sysUserMapper.selectUserByDeptIdList(deptIdList); + for(SysUser sysUser : sysUserList){ + Map<String,Object> map = new HashMap(); + map.put("carId",ardTankAbnormalParkAlarm.getCarId()); + map.put("carName",ardTankAbnormalParkAlarm.getCarName()); + map.put("alarmTime",ardTankAbnormalParkAlarm.getEndTime()); + map.put("longitude",ardTankAbnormalParkAlarm.getLongitude()); + map.put("latitude",ardTankAbnormalParkAlarm.getLatitude()); + map.put("alarmInfo","寮傚父鍋滆溅"); + Map<String,Map<String,Object>> data = new HashMap(); + data.put("40001",map); + for (String key : ONLINE_USER_SESSIONS.keySet()) { + if(key.startsWith(sysUser.getUserId() + "_")){ + WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); + } + } + } + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return ardTankAbnormalParkAlarmMapper.updateArdTankAbnormalParkAlarm(ardTankAbnormalParkAlarm); + }else{ + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return 0; + } + } + }else{ + ArdTankAbnormalParkAlarm ardTankAbnormalParkAlarm = new ArdTankAbnormalParkAlarm(); + ardTankAbnormalParkAlarm.setId(IdUtils.simpleUUID()); + ardTankAbnormalParkAlarm.setCarId((String)gpsMap.get("carId")); + ardTankAbnormalParkAlarm.setCarName((String)gpsMap.get("carName")); + ardTankAbnormalParkAlarm.setLongitude(String.valueOf((Number)gpsMap.get("lng"))); + ardTankAbnormalParkAlarm.setLatitude(String.valueOf((Number)gpsMap.get("lat"))); + ardTankAbnormalParkAlarm.setBeginTime(sdf.format(new Date())); + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return ardTankAbnormalParkAlarmMapper.insertArdTankAbnormalParkAlarm(ardTankAbnormalParkAlarm); + } + } + PositionContainer.getTankCarParkingAlarmTHread().remove((String)gpsMap.get("carId")); + return 0; + } } /** @@ -214,6 +396,11 @@ @Override public int deleteArdTankAbnormalParkAlarmByEndTime() { int result = ardTankAbnormalParkAlarmMapper.deleteArdTankAbnormalParkAlarmByEndTime(); - return result; + try{ + return result; + }finally { + ardTankLoadLogMapper.deleteArdTankLoadLogByEndTime(); + } + } } -- Gitblit v1.9.3