zhangnaisong
2024-08-02 80aace69506a46f93519fa583d8c04ab861498d2
电磁锁临时电子围栏加入服务器重启生效创建提交
已修改6个文件
187 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
@@ -18,15 +18,13 @@
import com.ruoyi.sy.domain.ArdTankLock;
import com.ruoyi.sy.gps31.PushClientImplSerialPort;
import com.ruoyi.sy.param.ArdSyCarParam;
import com.ruoyi.sy.service.IArdTankAbnormalParkAlarmService;
import com.ruoyi.sy.service.IArdTankLockService;
import com.ruoyi.sy.service.*;
import com.ruoyi.sy.service.impl.ArdTankLockServiceImpl;
import com.ruoyi.sy.vo.ArdSyCarVo;
import com.ruoyi.sy.domain.ArdSyUser;
import com.ruoyi.sy.gps31.PositionContainer;
import com.ruoyi.sy.gps31.PushClientImplAlarm;
import com.ruoyi.sy.gps31.PushClientImplPosition;
import com.ruoyi.sy.service.IArdSyUserService;
import com.ruoyi.common.core.domain.entity.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysDeptService;
@@ -49,7 +47,6 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.sy.domain.ArdSyCar;
import com.ruoyi.sy.service.IArdSyCarService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.multipart.MultipartFile;
@@ -89,6 +86,9 @@
    @Autowired
    private IArdTankLockService ardTankLockService;
    @Autowired
    private IArdTankWallTemporaryService ardTankWallTemporaryService;
    @Resource
    private SYClient sYClient;
@@ -214,7 +214,10 @@
                            };
                            //lockThread.start();
                            //将状态线程放入容器
                            PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockState",lockThread);
                            if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockState") == null){
                                PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockState",lockThread);
                            }
                        }
                    }
                };
@@ -306,7 +309,9 @@
                        }
                    };
                    //lockThread.start();
                    PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockTime",lockThread);
                    if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockTime") == null){
                        PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockTime",lockThread);
                    }
                }
            }
        };
@@ -409,7 +414,9 @@
                                        }
                                    };
                                    //lockThread.start();
                                    PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockRestart",lockThread);
                                    if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockRestart") == null){
                                        PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockRestart",lockThread);
                                    }
                                }
                            }
                        }
@@ -495,6 +502,8 @@
        };
        mainLockTimer.scheduleAtFixedRate(mainLockTask,date,2000);
        //异常重启重建未到期临时电子围栏线程
        ardTankWallTemporaryService.restartArdTankWallTemporaryThread(userId, password);
    }
    /**
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java
@@ -1,6 +1,8 @@
package com.ruoyi.sy.mapper;
import java.util.List;
import java.util.Map;
import com.ruoyi.sy.domain.ArdTankWallTemporary;
/**
@@ -62,4 +64,6 @@
    public List<ArdTankWallTemporary> getArdTankWallTemporaryByCarId(String carId);
    public Long selectArdTankWallTemporaryTotalByCarId(String carId);
    public List<Map<String,Object>> getAliveArdTankWallTemporaryWithCarId();
}
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java
@@ -66,4 +66,6 @@
    public int updateArdTankWallTemporary(String userId, String userName, Map<String,Object> para);
    public Map<String,Object> getArdTankWallTemporaryByCarId(Map<String,Object> para);
    public void restartArdTankWallTemporaryThread(String userId,String password);
}
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
@@ -700,7 +700,7 @@
        String sessionId = (String) LogInResult.get("sessionId");
        String finalSyURL = syURL;
        Thread passwordThread = new Thread(syURL){
        Thread passwordThread = new Thread(){
            @Override
            public void run() {
                List<ArdTankLock> ardTankLockResult = ardTankLockMapper.selectArdTankLockWithPassword();
@@ -837,7 +837,10 @@
                        }
                    };
                    //lockThread.start();
                    PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockPassword",lockThread);
                    if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockPassword") == null){
                        PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockPassword",lockThread);
                    }
                }
            }
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java
@@ -6,14 +6,20 @@
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.core.domain.entity.SysConfig;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.sy.domain.ArdSyUser;
import com.ruoyi.sy.domain.ArdTankLock;
import com.ruoyi.sy.domain.ArdTankWallLockTemporary;
import com.ruoyi.sy.gps31.PositionContainer;
import com.ruoyi.sy.mapper.ArdSyUserMapper;
import com.ruoyi.sy.mapper.ArdTankLockMapper;
import com.ruoyi.sy.mapper.ArdTankWallLockTemporaryMapper;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.utils.forest.SYClient;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -47,6 +53,15 @@
    @Resource
    private SysUserMapper sysUserMapper;
    @Resource
    private ArdSyUserMapper ardSyUserMapper;
    @Resource
    private SysConfigMapper sysConfigMapper;
    @Resource
    private SYClient sYClient;
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -120,6 +135,21 @@
    @Override
    public int insertArdTankWallTemporary(String userId, String userName, Map<String, Object> para) {
        ArdSyUser ardSyUser = ardSyUserMapper.userById(userId);
        if(ardSyUser == null){
            return 0;
        }
        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
        String syURL = "";
        if(syURLResult.size() != 0){
            syURL = syURLResult.get(0).getConfigValue();
        }else{
            return 0;
        }
        /*String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
        String sessionId = (String) LogInResult.get("sessionId");*/
        ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
        ardTankWallTemporary.setId(IdUtils.simpleUUID());
        ardTankWallTemporary.setWallName((String) para.get("wallName"));
@@ -151,6 +181,7 @@
                ardTankWallLockTemporaryMapper.insertArdTankWallLockTemporaryList(ardTankWallLockTemporaryList);
            }
            //创建定时线程
            String finalSyURL = syURL;
            Thread thread = new Thread(){
                @Override
                public void run() {
@@ -160,13 +191,23 @@
                        //e.printStackTrace();
                        return;
                    }
                    String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
                    Map<String, Object> LogInResult = sYClient.logIn(finalSyURL, passwordMd5, ardSyUser.getUserId());
                    String sessionId = (String) LogInResult.get("sessionId");
                    Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(finalSyURL, (String) para.get("carId"), ardSyUser.getUserId(), sessionId);
                    String carPlate = "";
                    if(((String)syResult.get("rspCode")).equals("1")){
                        Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
                        carPlate = (String) carMap.get("carPlate");
                    }
                    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") + "已到期");
                            data.put("40003","车辆-" + carPlate + ": '" + (String) para.get("wallName") + "'"+ "临时电子围栏,已失效");
                            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
                        }
                    }
@@ -182,6 +223,21 @@
    @Override
    public int updateArdTankWallTemporary(String userId, String userName, Map<String, Object> para) {
        ArdSyUser ardSyUser = ardSyUserMapper.userById(userId);
        if(ardSyUser == null){
            return 0;
        }
        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
        String syURL = "";
        if(syURLResult.size() != 0){
            syURL = syURLResult.get(0).getConfigValue();
        }else{
            return 0;
        }
        /*String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
        String sessionId = (String) LogInResult.get("sessionId");*/
        ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
        ardTankWallTemporary.setId((String) para.get("id"));
        ardTankWallTemporary.setProcessTime((String) para.get("processTime") + "/" + this.sdf.format(new Date()));
@@ -197,12 +253,22 @@
            }catch (Exception e){
                e.printStackTrace();
            }
            String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
            Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
            String sessionId = (String) LogInResult.get("sessionId");
            Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(syURL, (String) para.get("carId"), ardSyUser.getUserId(), sessionId);
            String carPlate = "";
            if(((String)syResult.get("rspCode")).equals("1")){
                Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
                carPlate = (String) carMap.get("carPlate");
            }
            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 + "撤销");
                    data.put("40003","车辆-" + carPlate + ":'" + (String) para.get("wallName") + "'" + "临时电子围栏," + "已被" + userName + "撤销");
                    WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
                }
            }
@@ -266,4 +332,73 @@
        return resultMap;
    }
    @Override
    public void restartArdTankWallTemporaryThread(String userId, String password) {
        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
        String syURL = "";
        if(syURLResult.size() != 0){
            syURL = syURLResult.get(0).getConfigValue();
        }else{
            return;
        }
        List<Map<String,Object>> result = ardTankWallTemporaryMapper.getAliveArdTankWallTemporaryWithCarId();
        Date now = new Date();
        try{
            String finalSyURL = syURL;
            for(Map<String,Object> map : result){
                if(now.getTime() - sdf.parse((String)map.get("processTime")).getTime() < Long.parseLong((String)map.get("interval")) * 60 * 1000){
                    //时间没有过期,从新创建线程
                    Thread thread = new Thread(){
                        @Override
                        public void run() {
                            try {
                                //计时从结束时间到当前时间
                                Thread.sleep( sdf.parse((String)map.get("processTime")).getTime() + Long.parseLong((String)map.get("interval")) * 60 * 1000 - now.getTime());
                            } catch (InterruptedException e) {
                                //e.printStackTrace();
                                return;
                            } catch (ParseException e) {
                                //e.printStackTrace();
                                return;
                            }
                            String passwordMd5 = DigestUtils.md5Hex(password);
                            Map<String, Object> LogInResult = sYClient.logIn(finalSyURL, passwordMd5, userId);
                            String sessionId = (String) LogInResult.get("sessionId");
                            Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(finalSyURL, (String) map.get("carId"), userId, sessionId);
                            String carPlate = "";
                            if(((String)syResult.get("rspCode")).equals("1")){
                                Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
                                carPlate = (String) carMap.get("carPlate");
                            }
                            List<String> userIdList = sysUserMapper.selectUserIdByCarId((String) map.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","车辆-" + carPlate + ": '" + (String) map.get("wallName") + "'"+ "临时电子围栏,已失效");
                                    WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
                                }
                            }
                            ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
                            ardTankWallTemporary.setId((String) map.get("id"));
                            ardTankWallTemporary.setProcessMark("-1");//-1为到期
                            ardTankWallTemporaryMapper.updateArdTankWallTemporary(ardTankWallTemporary);
                            PositionContainer.getCarWallThreadMap().remove((String) map.get("carId"));
                        }
                    };
                    thread.start();
                    PositionContainer.getCarWallThreadMap().put((String) map.get("carId"), thread);
                }else{
                    //忽略超时
                    continue;
                }
            }
        }catch (Exception e){
        }
    }
}
ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml
@@ -145,4 +145,16 @@
        inner join ard_tank_wall_temporary atwt on atwlt.wall_id = atwt."id"
        where "asc".car_id = #{carId} and atwt.process_mark = '1'
    </select>
    <select id="getAliveArdTankWallTemporaryWithCarId" resultType="java.util.Map">
        select distinct atwt."id",atwt.wall_name as "wallName",
        atwt.longitude,atwt.latitude,atwt.distance,atwt."interval",
        atwt.process_time as "processTime",atwt.process_mark as "processMark",
        atwt.user_id as "userId",atwt.user_name as "userName",
        "asy".car_id as "carId" from ard_tank_wall_temporary atwt
        inner join ard_tank_wall_lock_temporary atwlt on atwt."id" = atwlt.wall_id
        inner join ard_tank_lock atl on atwlt.lock_id = atl."id"
        inner join ard_sy_car "asy" on atl.car_id = "asy".car_id
        where atwt.process_mark = '1'
    </select>
</mapper>