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