zhangnaisong
2024-07-23 a2e85a4911dd285f7a1ac9fde312187aec597198
异常停车逻辑修改提交
已添加3个文件
已修改7个文件
473 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLoadLog.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankAbnormalParkAlarmMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLoadLogMapper.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankAbnormalParkAlarmService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankAbnormalParkAlarmServiceImpl.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankAbnormalParkAlarmMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankLoadLogMapper.xml 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankWallMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
}
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;
    }
}
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
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);
}
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;
/**
 * ç½è½¦è¿›å…¥å¸æ²¹ç‚¹è®°å½•Mapper接口
 *
 * @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);
}
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();
}
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));
                            //根据权限做报警websocket推送
                            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;
    }
    }*/
}
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>
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>
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>