From a2e85a4911dd285f7a1ac9fde312187aec597198 Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期二, 23 七月 2024 16:34:54 +0800
Subject: [PATCH] 异常停车逻辑修改提交

---
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankAbnormalParkAlarmMapper.java            |    6 
 ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java                          |   10 +
 ard-work/src/main/resources/mapper/sy/ArdTankAbnormalParkAlarmMapper.xml                  |    8 
 ard-work/src/main/resources/mapper/sy/ArdTankWallMapper.xml                               |    7 
 ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLoadLog.java                            |   93 +++++++++++
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLoadLogMapper.java                      |   70 ++++++++
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankAbnormalParkAlarmServiceImpl.java |  170 ++++++++++++++++++++
 ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java                     |   17 +
 ard-work/src/main/java/com/ruoyi/sy/service/IArdTankAbnormalParkAlarmService.java         |    2 
 ard-work/src/main/resources/mapper/sy/ArdTankLoadLogMapper.xml                            |   90 +++++++++++
 10 files changed, 452 insertions(+), 21 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLoadLog.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLoadLog.java
new file mode 100644
index 0000000..ae3b5b4
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLoadLog.java
@@ -0,0 +1,93 @@
+package com.ruoyi.sy.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 缃愯溅杩涘叆鍗告补鐐硅褰曞璞� ard_tank_load_log
+ * 
+ * @author ard
+ * @date 2024-07-23
+ */
+public class ArdTankLoadLog extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 杞﹁締涓婚敭 */
+    @Excel(name = "杞﹁締涓婚敭")
+    private String carId;
+
+    /** 鍥存爮涓婚敭 */
+    @Excel(name = "鍥存爮涓婚敭")
+    private String wallId;
+
+    /** 寮�濮嬫椂闂� */
+    @Excel(name = "寮�濮嬫椂闂�")
+    private String beginTime;
+
+    /** 缁撴潫鏃堕棿 */
+    @Excel(name = "缁撴潫鏃堕棿")
+    private String endTime;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setCarId(String carId) 
+    {
+        this.carId = carId;
+    }
+
+    public String getCarId() 
+    {
+        return carId;
+    }
+    public void setWallId(String wallId) 
+    {
+        this.wallId = wallId;
+    }
+
+    public String getWallId() 
+    {
+        return wallId;
+    }
+    public void setBeginTime(String beginTime) 
+    {
+        this.beginTime = beginTime;
+    }
+
+    public String getBeginTime() 
+    {
+        return beginTime;
+    }
+    public void setEndTime(String endTime) 
+    {
+        this.endTime = endTime;
+    }
+
+    public String getEndTime() 
+    {
+        return endTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("carId", getCarId())
+            .append("wallId", getWallId())
+            .append("beginTime", getBeginTime())
+            .append("endTime", getEndTime())
+            .toString();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
index 6a58728..1b6e628 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
@@ -14,6 +14,8 @@
 
     private static Map<String,Map<String,Object>> carPositionMap = new HashMap();//渚濊溅杈嗗瓨鏀惧疄鏂借溅杈嗕綅缃�:carId锛岃溅杈嗕綅缃�
 
+    private static Map<String,Thread> tankCarParkingAlarmTHread = new HashMap();//渚濊溅杈嗗瓨鏀惧紓甯稿仠杞︾嚎绋�:carId锛屽紓甯稿仠杞︾嚎绋�
+
     public static Map<String, List<ArdSyCarLock>> getTopicSubscribe() {
         return topicSubscribe;
     }
@@ -48,4 +50,12 @@
     public static void setCarPositionMap(Map<String, Map<String, Object>> carPositionMap) {
         PositionContainer.carPositionMap = carPositionMap;
     }
+
+    public static Map<String, Thread> getTankCarParkingAlarmTHread() {
+        return tankCarParkingAlarmTHread;
+    }
+
+    public static void setTankCarParkingAlarmTHread(Map<String, Thread> tankCarParkingAlarmTHread) {
+        PositionContainer.tankCarParkingAlarmTHread = tankCarParkingAlarmTHread;
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
index 4a90e08..6771295 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -376,14 +376,17 @@
 
                 }*/
 
+                if(PositionContainer.getTankCarParkingAlarmTHread().get(carId) == null){
+                    Thread tankCarParkingAlarmThread = new Thread(){//鍒涘缓绾跨▼鍒ゆ柇缃愯溅寮傚父鍋滆溅鎶ヨ
+                        @Override
+                        public void run() {
+                            ((ArdTankAbnormalParkAlarmServiceImpl)SpringUtils.getBean("ardTankAbnormalParkAlarmServiceImpl")).insertArdTankAbnormalParkAlarm(gpsMap);
+                        }
+                    };
+                    PositionContainer.getTankCarParkingAlarmTHread().put(carId,tankCarParkingAlarmThread);
+                    tankCarParkingAlarmThread.start();
+                }
 
-                Thread tankCarParkingAlarmThread = new Thread(){//鍒涘缓绾跨▼鍒ゆ柇缃愯溅寮傚父鍋滆溅鎶ヨ
-                    @Override
-                    public void run() {
-                        ((ArdTankAbnormalParkAlarmServiceImpl)SpringUtils.getBean("ardTankAbnormalParkAlarmServiceImpl")).insertArdTankAbnormalParkAlarm(gpsMap);
-                    }
-                };
-                //tankCarParkingAlarmThread.start();
 
                 /*Thread autoProcessThread = new Thread(){//鑷姩鎿嶆帶绾跨▼
                     @Override
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankAbnormalParkAlarmMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankAbnormalParkAlarmMapper.java
index c3ffaf2..2e01bc5 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankAbnormalParkAlarmMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankAbnormalParkAlarmMapper.java
@@ -59,9 +59,7 @@
      */
     public int deleteArdTankAbnormalParkAlarmByIds(String[] ids);
 
-    public ArdTankAbnormalParkAlarm selectArdTankAbnormalParkAlarmByCarIdAndEndTimeIsNull(String carId);
+    public List<ArdTankAbnormalParkAlarm> selectArdTankAbnormalParkAlarmByCarIdNoEndTime(String carId);
 
-    public int deleteArdTankAbnormalParkAlarmByCarId(String carId);
-
-    public int deleteArdTankAbnormalParkAlarmByEndTime();
+    public int deleteArdTankAbnormalParkAlarmByCarIdAndEndTimeIsNull(String carId);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLoadLogMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLoadLogMapper.java
new file mode 100644
index 0000000..bc0ce9f
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLoadLogMapper.java
@@ -0,0 +1,70 @@
+package com.ruoyi.sy.mapper;
+
+import java.util.List;
+import com.ruoyi.sy.domain.ArdTankLoadLog;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 缃愯溅杩涘叆鍗告补鐐硅褰昅apper鎺ュ彛
+ * 
+ * @author ard
+ * @date 2024-07-23
+ */
+public interface ArdTankLoadLogMapper 
+{
+    /**
+     * 鏌ヨ缃愯溅杩涘叆鍗告补鐐硅褰�
+     * 
+     * @param id 缃愯溅杩涘叆鍗告补鐐硅褰曚富閿�
+     * @return 缃愯溅杩涘叆鍗告补鐐硅褰�
+     */
+    public ArdTankLoadLog selectArdTankLoadLogById(String id);
+
+    /**
+     * 鏌ヨ缃愯溅杩涘叆鍗告补鐐硅褰曞垪琛�
+     * 
+     * @param ardTankLoadLog 缃愯溅杩涘叆鍗告补鐐硅褰�
+     * @return 缃愯溅杩涘叆鍗告补鐐硅褰曢泦鍚�
+     */
+    public List<ArdTankLoadLog> selectArdTankLoadLogList(ArdTankLoadLog ardTankLoadLog);
+
+    /**
+     * 鏂板缃愯溅杩涘叆鍗告补鐐硅褰�
+     * 
+     * @param ardTankLoadLog 缃愯溅杩涘叆鍗告补鐐硅褰�
+     * @return 缁撴灉
+     */
+    public int insertArdTankLoadLog(ArdTankLoadLog ardTankLoadLog);
+
+    /**
+     * 淇敼缃愯溅杩涘叆鍗告补鐐硅褰�
+     * 
+     * @param ardTankLoadLog 缃愯溅杩涘叆鍗告补鐐硅褰�
+     * @return 缁撴灉
+     */
+    public int updateArdTankLoadLog(ArdTankLoadLog ardTankLoadLog);
+
+    /**
+     * 鍒犻櫎缃愯溅杩涘叆鍗告补鐐硅褰�
+     * 
+     * @param id 缃愯溅杩涘叆鍗告补鐐硅褰曚富閿�
+     * @return 缁撴灉
+     */
+    public int deleteArdTankLoadLogById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎缃愯溅杩涘叆鍗告补鐐硅褰�
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdTankLoadLogByIds(String[] ids);
+
+    public ArdTankLoadLog selectArdTankLoadLogByCarIdAndWallIdAndEndTimeIsNull(@Param("carId") String carId,@Param("wallId") String wallId);
+
+    public List<ArdTankLoadLog> selectArdTankLoadLogByCarIdAndEndTimeIsNull(String carId);
+
+    public int deleteArdTankLoadLogByCarId(String carId);
+
+    public List<ArdTankLoadLog> selectArdTankLoadLogByCarIdAndEndTimeIsNotNull(String carId);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankAbnormalParkAlarmService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankAbnormalParkAlarmService.java
index b2a5403..577cb4b 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankAbnormalParkAlarmService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankAbnormalParkAlarmService.java
@@ -56,5 +56,5 @@
      */
     public int deleteArdTankAbnormalParkAlarmById(String id);
 
-    public int deleteArdTankAbnormalParkAlarmByEndTime();
+    //public int deleteArdTankAbnormalParkAlarmByEndTime();
 }
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..03146fe 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,6 +4,7 @@
 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;
@@ -11,8 +12,11 @@
 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.ArdTankLoadLog;
 import com.ruoyi.sy.domain.ArdTankWall;
+import com.ruoyi.sy.gps31.PositionContainer;
 import com.ruoyi.sy.mapper.ArdSyCarMapper;
+import com.ruoyi.sy.mapper.ArdTankLoadLogMapper;
 import com.ruoyi.sy.mapper.ArdTankWallMapper;
 import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.mapper.SysDeptMapper;
@@ -58,6 +62,9 @@
     @Resource
     private SysUserMapper sysUserMapper;
 
+    @Resource
+    private ArdTankLoadLogMapper ardTankLoadLogMapper;
+
     private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     /**
@@ -88,7 +95,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 +183,163 @@
                 }
             }
         }
+    }*/
+
+    @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);
+                    }
+                }
+            }
+
+            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;
+        }
     }
 
     /**
@@ -211,9 +375,9 @@
         return ardTankAbnormalParkAlarmMapper.deleteArdTankAbnormalParkAlarmById(id);
     }
 
-    @Override
+    /*@Override
     public int deleteArdTankAbnormalParkAlarmByEndTime() {
         int result = ardTankAbnormalParkAlarmMapper.deleteArdTankAbnormalParkAlarmByEndTime();
         return result;
-    }
+    }*/
 }
diff --git a/ard-work/src/main/resources/mapper/sy/ArdTankAbnormalParkAlarmMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdTankAbnormalParkAlarmMapper.xml
index f8fa69f..7fcb444 100644
--- a/ard-work/src/main/resources/mapper/sy/ArdTankAbnormalParkAlarmMapper.xml
+++ b/ard-work/src/main/resources/mapper/sy/ArdTankAbnormalParkAlarmMapper.xml
@@ -81,17 +81,13 @@
         </foreach>
     </delete>
 
-    <select id="selectArdTankAbnormalParkAlarmByCarIdAndEndTimeIsNull" parameterType="java.lang.String" resultMap="ArdTankAbnormalParkAlarmResult">
+    <select id="selectArdTankAbnormalParkAlarmByCarIdNoEndTime" parameterType="java.lang.String" resultMap="ArdTankAbnormalParkAlarmResult">
         select * from ard_tank_abnormal_park_alarm atapa
         where atapa.car_id = #{carId} and atapa.end_time is null
     </select>
 
-    <delete id="deleteArdTankAbnormalParkAlarmByCarId" parameterType="java.lang.String">
+    <delete id="deleteArdTankAbnormalParkAlarmByCarIdAndEndTimeIsNull" parameterType="java.lang.String">
         delete from ard_tank_abnormal_park_alarm atapa
         where atapa.car_id = #{carId} and atapa.end_time is null
-    </delete>
-
-    <delete id="deleteArdTankAbnormalParkAlarmByEndTime" >
-        delete from ard_tank_abnormal_park_alarm atapa where atapa.end_time is null
     </delete>
 </mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/sy/ArdTankLoadLogMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdTankLoadLogMapper.xml
new file mode 100644
index 0000000..0a44fbb
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/sy/ArdTankLoadLogMapper.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.sy.mapper.ArdTankLoadLogMapper">
+    
+    <resultMap type="ArdTankLoadLog" id="ArdTankLoadLogResult">
+        <result property="id"    column="id"    />
+        <result property="carId"    column="car_id"    />
+        <result property="wallId"    column="wall_id"    />
+        <result property="beginTime"    column="begin_time"    />
+        <result property="endTime"    column="end_time"    />
+    </resultMap>
+
+    <sql id="selectArdTankLoadLogVo">
+        select id, car_id, wall_id, begin_time, end_time from ard_tank_load_log
+    </sql>
+
+    <select id="selectArdTankLoadLogList" parameterType="ArdTankLoadLog" resultMap="ArdTankLoadLogResult">
+        <include refid="selectArdTankLoadLogVo"/>
+        <where>  
+            <if test="carId != null  and carId != ''"> and car_id = #{carId}</if>
+            <if test="wallId != null  and wallId != ''"> and wall_id = #{wallId}</if>
+            <if test="beginTime != null  and beginTime != ''"> and begin_time = #{beginTime}</if>
+            <if test="endTime != null  and endTime != ''"> and end_time = #{endTime}</if>
+        </where>
+    </select>
+    
+    <select id="selectArdTankLoadLogById" parameterType="String" resultMap="ArdTankLoadLogResult">
+        <include refid="selectArdTankLoadLogVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertArdTankLoadLog" parameterType="ArdTankLoadLog">
+        insert into ard_tank_load_log
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="carId != null">car_id,</if>
+            <if test="wallId != null">wall_id,</if>
+            <if test="beginTime != null">begin_time,</if>
+            <if test="endTime != null">end_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="carId != null">#{carId},</if>
+            <if test="wallId != null">#{wallId},</if>
+            <if test="beginTime != null">#{beginTime},</if>
+            <if test="endTime != null">#{endTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateArdTankLoadLog" parameterType="ArdTankLoadLog">
+        update ard_tank_load_log
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="carId != null">car_id = #{carId},</if>
+            <if test="wallId != null">wall_id = #{wallId},</if>
+            <if test="beginTime != null">begin_time = #{beginTime},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteArdTankLoadLogById" parameterType="String">
+        delete from ard_tank_load_log where id = #{id}
+    </delete>
+
+    <delete id="deleteArdTankLoadLogByIds" parameterType="String">
+        delete from ard_tank_load_log where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="selectArdTankLoadLogByCarIdAndWallIdAndEndTimeIsNull" parameterType="java.lang.String" resultMap="ArdTankLoadLogResult">
+        select * from ard_tank_load_log atll where atll.car_id = #{carId} and atll.wall_id = #{wallId}
+        and atll.end_time is null
+    </select>
+
+    <select id="selectArdTankLoadLogByCarIdAndEndTimeIsNull" parameterType="java.lang.String" resultMap="ArdTankLoadLogResult">
+        select * from ard_tank_load_log atll where atll.car_id = #{carId} and atll.end_time is null
+    </select>
+
+    <delete id="deleteArdTankLoadLogByCarId" parameterType="java.lang.String">
+        delete from ard_tank_load_log atll where atll.car_id = #{carId}
+    </delete>
+
+    <select id="selectArdTankLoadLogByCarIdAndEndTimeIsNotNull" parameterType="java.lang.String" resultMap="ArdTankLoadLogResult">
+        select * from ard_tank_load_log atll where atll.car_id = #{carId} and atll.end_time is not null
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/sy/ArdTankWallMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdTankWallMapper.xml
index 74a49be..125528f 100644
--- a/ard-work/src/main/resources/mapper/sy/ArdTankWallMapper.xml
+++ b/ard-work/src/main/resources/mapper/sy/ArdTankWallMapper.xml
@@ -98,4 +98,11 @@
         inner join ard_tank_wall atw on atwl.wall_id = atw.id
         where atwl.lock_id = #{lockId} and atwl.process_type != '0'
     </select>
+
+    <select id="getDistinctArdTankWallByCarId" resultMap="ArdTankWallResult" parameterType="java.lang.String">
+        select distinct atw.* from ard_tank_lock atl
+        inner join ard_tank_wall_lock atwl on atl.id = atwl.lock_id
+        inner join ard_tank_wall atw on atwl.wall_id = atw.id
+        where atl.car_id = #{carId}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3