zhangnaisong
2024-08-02 470b596ddce65dcbb8087e78f0a096d8ba1a429e
电磁锁新增临时电子围栏提交
已添加5个文件
已修改7个文件
815 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankWallTemporary.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallLockTemporaryMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallLockTemporaryServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java 263 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankWallLockTemporaryMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java
@@ -59,6 +59,9 @@
    @Autowired
    private IArdTankLockPasswordService ardTankLockPasswordService;
    @Autowired
    private IArdTankWallTemporaryService ardTankWallTemporaryService;
    /**
     * æŸ¥è¯¢ç”µç£é”åˆ—表
     */
@@ -382,4 +385,36 @@
        dataTable.setMsg("查询成功");
        return dataTable;
    }
    @ApiOperation("新增临时电子围栏")
    @PreAuthorize("@ss.hasPermi('sy:lock:insertArdTankWallTemporary')")
    @PostMapping("/insertArdTankWallTemporary")
    public AjaxResult insertArdTankWallTemporary(@RequestBody Map<String,Object> para) {
        String userId = SecurityUtils.getUserId();
        String userName = SecurityUtils.getUsername();
        return toAjax(ardTankWallTemporaryService.insertArdTankWallTemporary(userId,userName,para));
    }
    @ApiOperation("更改临时电子围栏")
    @PreAuthorize("@ss.hasPermi('sy:lock:updateArdTankWallTemporary')")
    @PostMapping("/updateArdTankWallTemporary")
    public AjaxResult updateArdTankWallTemporary(@RequestBody Map<String,Object> para) {
        String userId = SecurityUtils.getUserId();
        String userName = SecurityUtils.getUsername();
        return toAjax(ardTankWallTemporaryService.updateArdTankWallTemporary(userId,userName,para));
    }
    @ApiOperation("根据三一主键查询临时电子围栏")
    @PreAuthorize("@ss.hasPermi('sy:lock:getArdTankWallTemporaryByCarId')")
    @PostMapping("/getArdTankWallTemporaryByCarId")
    public TableDataInfo getArdTankWallTemporaryByCarId(@RequestBody Map<String,Object> para) {
        Map<String,Object> result = ardTankWallTemporaryService.getArdTankWallTemporaryByCarId(para);
        TableDataInfo dataTable = new TableDataInfo();
        dataTable.setRows((List<Map<String,Object>>) result.get("list"));
        dataTable.setTotal((Long) result.get("total"));
        dataTable.setCode(200);
        dataTable.setMsg("查询成功");
        return dataTable;
    }
}
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankWallTemporary.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,213 @@
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_wall_temporary
 *
 * @author ard
 * @date 2024-08-01
 */
public class ArdTankWallTemporary extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”® */
    private String id;
    /** å›´æ åç§° */
    @Excel(name = "围栏名称")
    private String wallName;
    /** ç»åº¦ */
    @Excel(name = "经度")
    private Double longitude;
    /** çº¬åº¦ */
    @Excel(name = "纬度")
    private Double latitude;
    /** è·ç¦» */
    @Excel(name = "距离")
    private Integer distance;
    /** æ—¶é•¿ */
    @Excel(name = "时长")
    private String interval;
    /** æ“ä½œæ—¶é—´ */
    @Excel(name = "操作时间")
    private String processTime;
    /** 1为生效,0为失效,-1为到期 */
    @Excel(name = "1为生效,0为失效,-1为到期")
    private String processMark;
    /** ç”¨æˆ·ä¸»é”® */
    @Excel(name = "用户主键")
    private String userId;
    /** ç”¨æˆ·åç§° */
    @Excel(name = "用户名称")
    private String userName;
    private String processInfo;
    private String cancelTime;
    private String cancelUserName;
    private String cancelUserId;
    private Long mark;
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setWallName(String wallName)
    {
        this.wallName = wallName;
    }
    public String getWallName()
    {
        return wallName;
    }
    public void setLongitude(Double longitude)
    {
        this.longitude = longitude;
    }
    public Double getLongitude()
    {
        return longitude;
    }
    public void setLatitude(Double latitude)
    {
        this.latitude = latitude;
    }
    public Double getLatitude()
    {
        return latitude;
    }
    public void setDistance(Integer distance)
    {
        this.distance = distance;
    }
    public Integer getDistance()
    {
        return distance;
    }
    public void setInterval(String interval)
    {
        this.interval = interval;
    }
    public String getInterval()
    {
        return interval;
    }
    public void setProcessTime(String processTime)
    {
        this.processTime = processTime;
    }
    public String getProcessTime()
    {
        return processTime;
    }
    public void setProcessMark(String processMark)
    {
        this.processMark = processMark;
    }
    public String getProcessMark()
    {
        return processMark;
    }
    public void setUserId(String userId)
    {
        this.userId = userId;
    }
    public String getUserId()
    {
        return userId;
    }
    public void setUserName(String userName)
    {
        this.userName = userName;
    }
    public String getUserName()
    {
        return userName;
    }
    public String getProcessInfo() {
        return processInfo;
    }
    public void setProcessInfo(String processInfo) {
        this.processInfo = processInfo;
    }
    public String getCancelTime() {
        return cancelTime;
    }
    public void setCancelTime(String cancelTime) {
        this.cancelTime = cancelTime;
    }
    public Long getMark() {
        return mark;
    }
    public void setMark(Long mark) {
        this.mark = mark;
    }
    public String getCancelUserName() {
        return cancelUserName;
    }
    public void setCancelUserName(String cancelUserName) {
        this.cancelUserName = cancelUserName;
    }
    public String getCancelUserId() {
        return cancelUserId;
    }
    public void setCancelUserId(String cancelUserId) {
        this.cancelUserId = cancelUserId;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("wallName", getWallName())
            .append("longitude", getLongitude())
            .append("latitude", getLatitude())
            .append("distance", getDistance())
            .append("interval", getInterval())
            .append("processTime", getProcessTime())
            .append("processMark", getProcessMark())
            .append("userId", getUserId())
            .append("userName", getUserName())
            .toString();
    }
}
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
@@ -21,6 +21,8 @@
    private static Map<String, Map<String, Map<String,Thread>>> carLockProcessThreadMap = new HashMap();//依车辆,电磁锁,操作类型存放线程;lockState:锁状态,lockTime:锁校时,lockPassword:锁密码(包括读写),lockRestart:锁复位,lockProcess:锁操作
    private static Map<String,Thread> carWallThreadMap = new HashMap();////依车辆存放临时电子围栏线程
    public static Map<String, List<ArdSyCarLock>> getTopicSubscribe() {
        return topicSubscribe;
    }
@@ -79,4 +81,12 @@
    public static synchronized void setCarLockProcessThreadMap(Map<String, Map<String, Map<String, Thread>>> carLockProcessThreadMap) {
        PositionContainer.carLockProcessThreadMap = carLockProcessThreadMap;
    }
    public static synchronized Map<String, Thread> getCarWallThreadMap() {
        return carWallThreadMap;
    }
    public static synchronized void setCarWallThreadMap(Map<String, Thread> carWallThreadMap) {
        PositionContainer.carWallThreadMap = carWallThreadMap;
    }
}
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallLockTemporaryMapper.java
@@ -2,6 +2,7 @@
import java.util.List;
import com.ruoyi.sy.domain.ArdTankWallLockTemporary;
import org.apache.ibatis.annotations.Param;
/**
 * ä¸´æ—¶ç”µå­å›´æ ç”µç£é”Mapper接口
@@ -60,4 +61,6 @@
    public int deleteArdTankWallLockTemporaryByIds(String[] ids);
    public int deleteArdTankWallLockTemporaryByLockId(String lockId);
    public int insertArdTankWallLockTemporaryList(@Param("ardTankWallLockTemporaryList") List<ArdTankWallLockTemporary> ardTankWallLockTemporaryList);
}
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.sy.mapper;
import java.util.List;
import com.ruoyi.sy.domain.ArdTankWallTemporary;
/**
 * ç”µç£é”ä¸´æ—¶ç”µå­å›´æ Mapper接口
 *
 * @author ard
 * @date 2024-08-01
 */
public interface ArdTankWallTemporaryMapper
{
    /**
     * æŸ¥è¯¢ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param id ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¸»é”®
     * @return ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     */
    public ArdTankWallTemporary selectArdTankWallTemporaryById(String id);
    /**
     * æŸ¥è¯¢ç”µç£é”ä¸´æ—¶ç”µå­å›´æ åˆ—表
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç”µç£é”ä¸´æ—¶ç”µå­å›´æ é›†åˆ
     */
    public List<ArdTankWallTemporary> selectArdTankWallTemporaryList(ArdTankWallTemporary ardTankWallTemporary);
    /**
     * æ–°å¢žç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç»“æžœ
     */
    public int insertArdTankWallTemporary(ArdTankWallTemporary ardTankWallTemporary);
    /**
     * ä¿®æ”¹ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç»“æžœ
     */
    public int updateArdTankWallTemporary(ArdTankWallTemporary ardTankWallTemporary);
    /**
     * åˆ é™¤ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param id ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdTankWallTemporaryById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdTankWallTemporaryByIds(String[] ids);
    public List<ArdTankWallTemporary> getArdTankWallTemporaryByCarId(String carId);
    public Long selectArdTankWallTemporaryTotalByCarId(String carId);
}
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.ruoyi.sy.service;
import java.util.List;
import java.util.Map;
import com.ruoyi.sy.domain.ArdTankWallTemporary;
/**
 * ç”µç£é”ä¸´æ—¶ç”µå­å›´æ Service接口
 *
 * @author ard
 * @date 2024-08-01
 */
public interface IArdTankWallTemporaryService
{
    /**
     * æŸ¥è¯¢ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param id ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¸»é”®
     * @return ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     */
    public ArdTankWallTemporary selectArdTankWallTemporaryById(String id);
    /**
     * æŸ¥è¯¢ç”µç£é”ä¸´æ—¶ç”µå­å›´æ åˆ—表
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç”µç£é”ä¸´æ—¶ç”µå­å›´æ é›†åˆ
     */
    public List<ArdTankWallTemporary> selectArdTankWallTemporaryList(ArdTankWallTemporary ardTankWallTemporary);
    /**
     * æ–°å¢žç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç»“æžœ
     */
    public int insertArdTankWallTemporary(ArdTankWallTemporary ardTankWallTemporary);
    /**
     * ä¿®æ”¹ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç»“æžœ
     */
    public int updateArdTankWallTemporary(ArdTankWallTemporary ardTankWallTemporary);
    /**
     * æ‰¹é‡åˆ é™¤ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ids éœ€è¦åˆ é™¤çš„电磁锁临时电子围栏主键集合
     * @return ç»“æžœ
     */
    public int deleteArdTankWallTemporaryByIds(String[] ids);
    /**
     * åˆ é™¤ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¿¡æ¯
     *
     * @param id ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdTankWallTemporaryById(String id);
    public int insertArdTankWallTemporary(String userId, String userName, Map<String,Object> para);
    public int updateArdTankWallTemporary(String userId, String userName, Map<String,Object> para);
    public Map<String,Object> getArdTankWallTemporaryByCarId(Map<String,Object> para);
}
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallLockTemporaryServiceImpl.java
@@ -12,6 +12,8 @@
import com.ruoyi.sy.domain.ArdTankWallLockTemporary;
import com.ruoyi.sy.service.IArdTankWallLockTemporaryService;
import javax.annotation.Resource;
/**
 * ä¸´æ—¶ç”µå­å›´æ ç”µç£é”Service业务层处理
 *
@@ -20,7 +22,7 @@
 */
@Service
public class ArdTankWallLockTemporaryServiceImpl implements IArdTankWallLockTemporaryService {
    @Autowired
    @Resource
    private ArdTankWallLockTemporaryMapper ardTankWallLockTemporaryMapper;
    /**
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,263 @@
package com.ruoyi.sy.service.impl;
import java.text.SimpleDateFormat;
import java.util.*;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.sy.domain.ArdTankLock;
import com.ruoyi.sy.domain.ArdTankWallLockTemporary;
import com.ruoyi.sy.gps31.PositionContainer;
import com.ruoyi.sy.mapper.ArdTankLockMapper;
import com.ruoyi.sy.mapper.ArdTankWallLockTemporaryMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.sy.mapper.ArdTankWallTemporaryMapper;
import com.ruoyi.sy.domain.ArdTankWallTemporary;
import com.ruoyi.sy.service.IArdTankWallTemporaryService;
import javax.annotation.Resource;
import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
/**
 * ç”µç£é”ä¸´æ—¶ç”µå­å›´æ Service业务层处理
 *
 * @author ard
 * @date 2024-08-01
 */
@Service
public class ArdTankWallTemporaryServiceImpl implements IArdTankWallTemporaryService {
    @Resource
    private ArdTankWallTemporaryMapper ardTankWallTemporaryMapper;
    @Resource
    private ArdTankLockMapper ardTankLockMapper;
    @Resource
    private ArdTankWallLockTemporaryMapper ardTankWallLockTemporaryMapper;
    @Resource
    private SysUserMapper sysUserMapper;
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    /**
     * æŸ¥è¯¢ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param id ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¸»é”®
     * @return ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     */
    @Override
    public ArdTankWallTemporary selectArdTankWallTemporaryById(String id) {
        return ardTankWallTemporaryMapper.selectArdTankWallTemporaryById(id);
    }
    /**
     * æŸ¥è¯¢ç”µç£é”ä¸´æ—¶ç”µå­å›´æ åˆ—表
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     */
    @Override
    public List<ArdTankWallTemporary> selectArdTankWallTemporaryList(ArdTankWallTemporary ardTankWallTemporary) {
        return ardTankWallTemporaryMapper.selectArdTankWallTemporaryList(ardTankWallTemporary);
    }
    /**
     * æ–°å¢žç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç»“æžœ
     */
    @Override
    public int insertArdTankWallTemporary(ArdTankWallTemporary ardTankWallTemporary) {
                ardTankWallTemporary.setId(IdUtils.simpleUUID());
                ardTankWallTemporary.setUserId(SecurityUtils.getUserId());
            return ardTankWallTemporaryMapper.insertArdTankWallTemporary(ardTankWallTemporary);
    }
    /**
     * ä¿®æ”¹ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ardTankWallTemporary ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     * @return ç»“æžœ
     */
    @Override
    public int updateArdTankWallTemporary(ArdTankWallTemporary ardTankWallTemporary) {
        return ardTankWallTemporaryMapper.updateArdTankWallTemporary(ardTankWallTemporary);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç”µç£é”ä¸´æ—¶ç”µå­å›´æ 
     *
     * @param ids éœ€è¦åˆ é™¤çš„电磁锁临时电子围栏主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdTankWallTemporaryByIds(String[] ids) {
        return ardTankWallTemporaryMapper.deleteArdTankWallTemporaryByIds(ids);
    }
    /**
     * åˆ é™¤ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¿¡æ¯
     *
     * @param id ç”µç£é”ä¸´æ—¶ç”µå­å›´æ ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdTankWallTemporaryById(String id) {
        return ardTankWallTemporaryMapper.deleteArdTankWallTemporaryById(id);
    }
    @Override
    public int insertArdTankWallTemporary(String userId, String userName, Map<String, Object> para) {
        ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
        ardTankWallTemporary.setId(IdUtils.simpleUUID());
        ardTankWallTemporary.setWallName((String) para.get("wallName"));
        ardTankWallTemporary.setLongitude((Double) para.get("longitude"));
        ardTankWallTemporary.setLatitude((Double) para.get("latitude"));
        ardTankWallTemporary.setDistance((Integer) para.get("distance"));
        ardTankWallTemporary.setInterval((String) para.get("interval"));
        ardTankWallTemporary.setProcessTime(sdf.format(new Date()));
        ardTankWallTemporary.setProcessMark("1");//1为生效
        ardTankWallTemporary.setUserId(userId);
        ardTankWallTemporary.setUserName(userName);
        int result = ardTankWallTemporaryMapper.insertArdTankWallTemporary(ardTankWallTemporary);
        try{
            return result;
        }finally {
            ArdTankLock ardTankLock = new ArdTankLock();
            ardTankLock.setCarId((String) para.get("carId"));
            List<ArdTankLock> ardTankLockList = ardTankLockMapper.selectArdTankLockList(ardTankLock);
            List<ArdTankWallLockTemporary> ardTankWallLockTemporaryList = new ArrayList();
            for(ArdTankLock innerArdTankLock : ardTankLockList){
                ArdTankWallLockTemporary ardTankWallLockTemporary = new ArdTankWallLockTemporary();
                ardTankWallLockTemporary.setId(IdUtils.simpleUUID());
                ardTankWallLockTemporary.setWallId(ardTankWallTemporary.getId());
                ardTankWallLockTemporary.setLockId(innerArdTankLock.getId());
                ardTankWallLockTemporary.setProcessType("开锁");
                ardTankWallLockTemporaryList.add(ardTankWallLockTemporary);
            }
            if(!ardTankWallLockTemporaryList.isEmpty()){
                ardTankWallLockTemporaryMapper.insertArdTankWallLockTemporaryList(ardTankWallLockTemporaryList);
            }
            //创建定时线程
            Thread thread = new Thread(){
                @Override
                public void run() {
                    try {
                        Thread.sleep(60 * 1000 * Long.parseLong((String) para.get("interval")));
                    } catch (InterruptedException e) {
                        //e.printStackTrace();
                        return;
                    }
                    List<String> userIdList = sysUserMapper.selectUserIdByCarId((String) para.get("carId"));//查看哪些用户权限下有这个车
                    for (String key : ONLINE_USER_SESSIONS.keySet()){
                        String userId = key.split("_")[0];
                        if(userIdList.contains(userId)){
                            Map<String,Object> data = new HashMap();
                            data.put("40003",(String) para.get("wallName") + "已到期");
                            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
                        }
                    }
                    ardTankWallTemporary.setProcessMark("-1");//-1为到期
                    ardTankWallTemporaryMapper.updateArdTankWallTemporary(ardTankWallTemporary);
                    PositionContainer.getCarWallThreadMap().remove((String) para.get("carId"));
                }
            };
            thread.start();
            PositionContainer.getCarWallThreadMap().put((String) para.get("carId"),thread);
        }
    }
    @Override
    public int updateArdTankWallTemporary(String userId, String userName, Map<String, Object> para) {
        ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
        ardTankWallTemporary.setId((String) para.get("id"));
        ardTankWallTemporary.setProcessTime((String) para.get("processTime") + "/" + this.sdf.format(new Date()));
        ardTankWallTemporary.setProcessMark("0");
        ardTankWallTemporary.setUserId(para.get("userId") + "/" + userId);
        ardTankWallTemporary.setUserName(para.get("userName") + "/" + userName);
        int result = ardTankWallTemporaryMapper.updateArdTankWallTemporary(ardTankWallTemporary);
        try{
            return result;
        }finally {
            try{//关闭线程
                PositionContainer.getCarWallThreadMap().get((String) para.get("carId")).interrupt();
            }catch (Exception e){
                e.printStackTrace();
            }
            List<String> userIdList = sysUserMapper.selectUserIdByCarId((String) para.get("carId"));//查看哪些用户权限下有这个车
            for (String key : ONLINE_USER_SESSIONS.keySet()){
                String usersId = key.split("_")[0];
                if(userIdList.contains(usersId)){
                    Map<String,Object> data = new HashMap();
                    data.put("40003",(String) para.get("wallName") + "已被" + userName + "撤销");
                    WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
                }
            }
            PositionContainer.getCarWallThreadMap().remove((String) para.get("carId"));
        }
    }
    @Override
    public Map<String, Object> getArdTankWallTemporaryByCarId(Map<String, Object> para) {
        //分页属性
        Integer pageNum = (Integer) para.get("pageNum");
        Integer pageSize = (Integer) para.get("pageSize");
        PageHelper.startPage(pageNum, pageSize);//分页
        Map<String,Object> resultMap = new HashMap();
        List<ArdTankWallTemporary> resultList = ardTankWallTemporaryMapper.getArdTankWallTemporaryByCarId((String) para.get("carId"));
        for(ArdTankWallTemporary ardTankWallTemporary : resultList){
            String process = ardTankWallTemporary.getProcessTime();
            String[] processArray = process.split("/");
            ardTankWallTemporary.setProcessTime(processArray[0]);
            try{
                ardTankWallTemporary.setCancelTime(processArray[1]);
            }catch (Exception e){
                ardTankWallTemporary.setCancelTime("");
            }
            switch(ardTankWallTemporary.getProcessMark()){
                case "1" : ardTankWallTemporary.setProcessInfo("生效");break;
                case "0" : ardTankWallTemporary.setProcessInfo("失效");break;
                case "-1" : ardTankWallTemporary.setProcessInfo("到期");break;
                default : break;
            }
            String userName = ardTankWallTemporary.getUserName();
            String[] userNameArray = userName.split("/");
            userName = userNameArray[0];
            ardTankWallTemporary.setUserName(userName);
            try{
                ardTankWallTemporary.setCancelUserName(userNameArray[1]);
            }catch (Exception e){
                ardTankWallTemporary.setCancelUserName("");
            }
            String userId = ardTankWallTemporary.getUserId();
            String[] userIdArray = userId.split("/");
            userId = userIdArray[0];
            ardTankWallTemporary.setUserId(userId);
            try{
                ardTankWallTemporary.setCancelUserId(userIdArray[1]);
            }catch (Exception e){
                ardTankWallTemporary.setCancelUserId("");
            }
        }
        Long total =  ardTankWallTemporaryMapper.selectArdTankWallTemporaryTotalByCarId((String) para.get("carId"));
        resultMap.put("list",resultList);
        resultMap.put("total",total);
        return resultMap;
    }
}
ard-work/src/main/resources/mapper/sy/ArdTankWallLockTemporaryMapper.xml
@@ -69,4 +69,12 @@
    <delete id="deleteArdTankWallLockTemporaryByLockId" parameterType="java.lang.String">
        delete from ard_tank_wall_lock_temporary where lock_id = #{lockId}
    </delete>
    <insert id="insertArdTankWallLockTemporaryList" parameterType="com.ruoyi.sy.domain.ArdTankWallLockTemporary" >
        insert into ard_tank_wall_lock_temporary (id, wall_id, lock_id, process_type) values
        <foreach collection ="ardTankWallLockTemporaryList" item="ardTankWallLockTemporary" separator =",">
            (#{ardTankWallLockTemporary.id},#{ardTankWallLockTemporary.wallId},#{ardTankWallLockTemporary.lockId},
             #{ardTankWallLockTemporary.processType})
        </foreach >
    </insert>
</mapper>
ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
<?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.ArdTankWallTemporaryMapper">
    <resultMap type="ArdTankWallTemporary" id="ArdTankWallTemporaryResult">
        <result property="id"    column="id"    />
        <result property="wallName"    column="wall_name"    />
        <result property="longitude"    column="longitude"    />
        <result property="latitude"    column="latitude"    />
        <result property="distance"    column="distance"    />
        <result property="interval"    column="interval"    />
        <result property="processTime"    column="process_time"    />
        <result property="processMark"    column="process_mark"    />
        <result property="userId"    column="user_id"    />
        <result property="userName"    column="user_name"    />
    </resultMap>
    <resultMap type="ArdTankWallTemporary" id="ArdTankWallTemporaryMarkResult">
        <result property="id"    column="id"    />
        <result property="wallName"    column="wall_name"    />
        <result property="longitude"    column="longitude"    />
        <result property="latitude"    column="latitude"    />
        <result property="distance"    column="distance"    />
        <result property="interval"    column="interval"    />
        <result property="processTime"    column="process_time"    />
        <result property="processMark"    column="process_mark"    />
        <result property="userId"    column="user_id"    />
        <result property="userName"    column="user_name"    />
        <result property="mark"    column="mark"    />
    </resultMap>
    <sql id="selectArdTankWallTemporaryVo">
        select id, wall_name, longitude, latitude, distance, interval, process_time, process_mark, user_id, user_name from ard_tank_wall_temporary
    </sql>
    <select id="selectArdTankWallTemporaryList" parameterType="ArdTankWallTemporary" resultMap="ArdTankWallTemporaryResult">
        <include refid="selectArdTankWallTemporaryVo"/>
        <where>
            <if test="wallName != null  and wallName != ''"> and wall_name like '%'||#{wallName}||'%'</if>
            <if test="longitude != null "> and longitude = #{longitude}</if>
            <if test="latitude != null "> and latitude = #{latitude}</if>
            <if test="distance != null "> and distance = #{distance}</if>
            <if test="interval != null  and interval != ''"> and interval = #{interval}</if>
            <if test="processTime != null  and processTime != ''"> and process_time = #{processTime}</if>
            <if test="processMark != null  and processMark != ''"> and process_mark = #{processMark}</if>
            <if test="userId != null  and userId != ''"> and user_id = #{userId}</if>
            <if test="userName != null  and userName != ''"> and user_name like '%'||#{userName}||'%'</if>
        </where>
    </select>
    <select id="selectArdTankWallTemporaryById" parameterType="String" resultMap="ArdTankWallTemporaryResult">
        <include refid="selectArdTankWallTemporaryVo"/>
        where id = #{id}
    </select>
    <insert id="insertArdTankWallTemporary" parameterType="ArdTankWallTemporary">
        insert into ard_tank_wall_temporary
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="wallName != null">wall_name,</if>
            <if test="longitude != null">longitude,</if>
            <if test="latitude != null">latitude,</if>
            <if test="distance != null">distance,</if>
            <if test="interval != null">interval,</if>
            <if test="processTime != null">process_time,</if>
            <if test="processMark != null">process_mark,</if>
            <if test="userId != null">user_id,</if>
            <if test="userName != null">user_name,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="wallName != null">#{wallName},</if>
            <if test="longitude != null">#{longitude},</if>
            <if test="latitude != null">#{latitude},</if>
            <if test="distance != null">#{distance},</if>
            <if test="interval != null">#{interval},</if>
            <if test="processTime != null">#{processTime},</if>
            <if test="processMark != null">#{processMark},</if>
            <if test="userId != null">#{userId},</if>
            <if test="userName != null">#{userName},</if>
         </trim>
    </insert>
    <update id="updateArdTankWallTemporary" parameterType="ArdTankWallTemporary">
        update ard_tank_wall_temporary
        <trim prefix="SET" suffixOverrides=",">
            <if test="wallName != null">wall_name = #{wallName},</if>
            <if test="longitude != null">longitude = #{longitude},</if>
            <if test="latitude != null">latitude = #{latitude},</if>
            <if test="distance != null">distance = #{distance},</if>
            <if test="interval != null">interval = #{interval},</if>
            <if test="processTime != null">process_time = #{processTime},</if>
            <if test="processMark != null">process_mark = #{processMark},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="userName != null">user_name = #{userName},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdTankWallTemporaryById" parameterType="String">
        delete from ard_tank_wall_temporary where id = #{id}
    </delete>
    <delete id="deleteArdTankWallTemporaryByIds" parameterType="String">
        delete from ard_tank_wall_temporary where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="getArdTankWallTemporaryByCarId" parameterType="java.lang.String" resultMap="ArdTankWallTemporaryMarkResult">
        select atwt.*,case process_mark
        when '1'  then 1
        when '0'  then 2
        when '-1' then 3
        end as mark from ard_sy_car "asc"
        inner join ard_tank_lock atl on "asc".car_id = atl.car_id
        inner join ard_tank_wall_lock_temporary atwlt on atl."id" = atwlt.lock_id
        inner join ard_tank_wall_temporary atwt on atwlt.wall_id = atwt."id"
        where "asc".car_id = #{carId} order by mark asc,process_time desc
    </select>
    <select id="selectArdTankWallTemporaryTotalByCarId" parameterType="java.lang.String" resultType="java.lang.Long">
        select count(distinct atwt.*) from ard_sy_car "asc"
        inner join ard_tank_lock atl on "asc".car_id = atl.car_id
        inner join ard_tank_wall_lock_temporary atwlt on atl."id" = atwlt.lock_id
        inner join ard_tank_wall_temporary atwt on atwlt.wall_id = atwt."id"
        where "asc".car_id = #{carId}
    </select>
</mapper>
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -150,4 +150,6 @@
    List<SysUser> getOwnAndChildrenSoilderListAll(@Param("deptIdList")List<Long> deptIdList);
    List<SysUser> selectUserByDeptIdList(@Param("deptIdList")List<Long> deptIdList);
    List<String> selectUserIdByCarId(String carId);
}
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -379,4 +379,15 @@
        </foreach>
        and su.status = '0'
    </select>
    <select id="selectUserIdByCarId" resultType="java.lang.String">
        select user_id from sys_user where dept_id in (
        with recursive rsd as (
            select * from sys_dept sd where sd.dept_id = (
                select dept_id from ard_sy_car where car_id = #{carId})
            union
            select psd.* from sys_dept psd inner join rsd on rsd.parent_id = psd.dept_id
        )
        select rsd.dept_id from rsd)
    </select>
</mapper>