zhangnaisong
2024-07-27 00c17a3a10a2856c847757e7021e60135b6ea894
电磁锁密码提交
已添加5个文件
已修改9个文件
822 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLock.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockPassword.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockPasswordMapper.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockPasswordService.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockPasswordServiceImpl.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdTankLockPasswordMapper.xml 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
@@ -195,12 +195,8 @@
                                    String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "01" + checkNum + "%22%7D";
                                    sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
                                    PositionContainer.getCarThreadMap().remove(ardTankLock.getCarId());//发送完,从容器去除
                                }
                            };
                            if(PositionContainer.getCarThreadMap().get(ardTankLock.getCarId()) != null){//容器中无线程,放入容器
                                PositionContainer.getCarThreadMap().put(ardTankLock.getCarId(),lockThread);
                            }
                            lockThread.start();
                        }
                    }
@@ -286,12 +282,8 @@
                        String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "08" + timeHex + checkNum + "%22%7D";
                        sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
                        PositionContainer.getCarThreadMap().remove(ardTankLock.getCarId());//发送完,从容器去除
                    }
                };
                if(PositionContainer.getCarThreadMap().get(ardTankLock.getCarId()) != null){//容器中无线程,放入容器
                    PositionContainer.getCarThreadMap().put(ardTankLock.getCarId(),lockThread);
                }
                lockThread.start();
            }
            }
@@ -315,27 +307,14 @@
        };
        sendTimer.scheduleAtFixedRate(sendLockStateTask,date,3000);
        try{
            Thread.sleep(3000);
        }catch(Exception e){
        }
        /*Timer alarmTimer = new Timer();//定时获取报警
        TimerTask alarmTask = new TimerTask(){
        Timer passwordTimer = new Timer();//定时查看电磁锁密码状态
        TimerTask passwordTask = new TimerTask(){
            @Override
            public void run() {
                Thread alarmThread = new Thread() {
                    @Override
                    public void run() {
                        ardTankLockService.getAlarm(userId,password);
                    }
                };
                alarmThread.start();
                ardTankLockService.readPassword(userId,password);
            }
        };
        alarmTimer.scheduleAtFixedRate(alarmTask,date,3000);*/
        passwordTimer.scheduleAtFixedRate(passwordTask,date,11000);
    }
ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java
@@ -56,6 +56,9 @@
    @Autowired
    private IArdTankLockAlarmService ardTankLockAlarmService;
    @Autowired
    private IArdTankLockPasswordService ardTankLockPasswordService;
    /**
     * æŸ¥è¯¢ç”µç£é”åˆ—表
     */
@@ -350,4 +353,18 @@
        dataTable.setMsg("查询成功");
        return dataTable;
    }
    @ApiOperation("查询电磁锁密码")
    @PreAuthorize("@ss.hasPermi('sy:lock:getLockPasswordByLockId')")
    @PostMapping("/getLockPasswordByLockId")
    public TableDataInfo getLockPasswordByLockId(@RequestBody Map<String,Object> para) {
        Map<String,Object> result = ardTankLockPasswordService.getLockPasswordByLockId(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/ArdTankLock.java
@@ -5,6 +5,8 @@
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
/**
 * ç”µç£é”å¯¹è±¡ ard_tank_lock
 * 
@@ -51,6 +53,8 @@
    private String onlineTime;
    private ArdTankLockState ardTankLockState;
    private List<ArdTankLockPassword> ardTankLockPasswords;
    public void setId(String id) 
    {
@@ -142,6 +146,14 @@
        this.ardTankLockState = ardTankLockState;
    }
    public List<ArdTankLockPassword> getArdTankLockPasswords() {
        return ardTankLockPasswords;
    }
    public void setArdTankLockPasswords(List<ArdTankLockPassword> ardTankLockPasswords) {
        this.ardTankLockPasswords = ardTankLockPasswords;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockPassword.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
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_lock_password
 *
 * @author ard
 * @date 2024-07-27
 */
public class ArdTankLockPassword extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”® */
    private String id;
    /** é”ä¸»é”® */
    @Excel(name = "锁主键")
    private String lockId;
    /** å¯†ç  */
    @Excel(name = "密码")
    private String password;
    /** ç¼–号 */
    @Excel(name = "编号")
    private String no;
    /** ä½¿ç”¨æ—¶é—´ */
    @Excel(name = "使用时间")
    private String useTime;
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setLockId(String lockId)
    {
        this.lockId = lockId;
    }
    public String getLockId()
    {
        return lockId;
    }
    public void setPassword(String password)
    {
        this.password = password;
    }
    public String getPassword()
    {
        return password;
    }
    public void setNo(String no)
    {
        this.no = no;
    }
    public String getNo()
    {
        return no;
    }
    public void setUseTime(String useTime)
    {
        this.useTime = useTime;
    }
    public String getUseTime()
    {
        return useTime;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("lockId", getLockId())
            .append("password", getPassword())
            .append("no", getNo())
            .append("createTime", getCreateTime())
            .append("useTime", getUseTime())
            .toString();
    }
}
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
@@ -5,6 +5,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class PositionContainer {
@@ -16,7 +17,9 @@
    private static Map<String,Thread> tankCarParkingAlarmTHread = new HashMap();//依车辆存放异常停车线程:carId,异常停车线程
    private static Map<String,Thread> carThreadMap = new HashMap();//车辆主键,线程容器
    private static Map<String, Set<String>> carLockPasswordMap = new HashMap();//依电磁锁编号存放生成的密码
    public static Map<String, List<ArdSyCarLock>> getTopicSubscribe() {
        return topicSubscribe;
@@ -61,11 +64,12 @@
        PositionContainer.tankCarParkingAlarmTHread = tankCarParkingAlarmTHread;
    }
    public static Map<String, Thread> getCarThreadMap() {
        return carThreadMap;
    public static synchronized Map<String, Set<String>> getCarLockPasswordMap() {
        return carLockPasswordMap;
    }
    public static void setCarThreadMap(Map<String, Thread> carThreadMap) {
        PositionContainer.carThreadMap = carThreadMap;
    public static synchronized void setCarLockPasswordMap(Map<String, Set<String>> carLockPasswordMap) {
        PositionContainer.carLockPasswordMap = carLockPasswordMap;
    }
}
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java
@@ -330,9 +330,90 @@
                                ardTankLockState.setUniqueMark(uniqueMark);
                                ((ArdTankLockStateServiceImpl)SpringUtils.getBean("ardTankLockStateServiceImpl")).insertOrUpdateArdTankLockState(ardTankLockState);
                            }
                        }/*else if(code.equals("06")){//功能码06为锁历史报警
                        }else if(code.equals("05")){//功能码05为读取锁密码
                            Set<String> passwordAndTimeSet = new HashSet();
                            for(int i = 1;i <= 10;i++){
                                String passwordAndTime = data.substring(6 + 24*(i - 1),6 + 24 * i);
                                passwordAndTimeSet.add(passwordAndTime);//拆分出密码和使用时间
                            }
                            if(passwordAndTimeSet.size() == 1){//全部为初始密码,则从新设置
                                Set<String> passwordSet = new HashSet();
                                while(passwordSet.size() != 10){
                                    String password = "";
                                    for(int i = 0;i <= 5;i++){
                                        password = password + String.valueOf(10 * Math.random()).split("\\.")[0];
                                    }
                                    passwordSet.add(password);
                                }
                                if(PositionContainer.getCarLockPasswordMap().get(lockNum) == null){
                                    PositionContainer.getCarLockPasswordMap().put(lockNum,passwordSet);
                                }
                            }else{//查看哪些密码使用过
                                for(String passwordAndTime : passwordAndTimeSet){
                                    String time = passwordAndTime.substring(12,24);
                                    if(!time.equals("FFFFFFFFFFFF")){
                                        String passwordHex = passwordAndTime.substring(0,12);//16进制密码
                                        String password = "";//实际密码
                                        for(int i = 0;i <= 10;i = i + 2){
                                            String passwordHexByte = passwordHex.substring(i, i+2);
                                            password = password + passwordHexByte.split("")[1];
                                        }
                        }*/
                                        String useTimeHex = passwordAndTime.substring(12,24);//16进制时间
                                        String yearHex = useTimeHex.substring(0, 2);
                                        String monthHex = useTimeHex.substring(2, 4);
                                        String dayHex = useTimeHex.substring(4, 6);
                                        String hourHex = useTimeHex.substring(6, 8);
                                        String minuteHex = useTimeHex.substring(8, 10);
                                        String secondHex = useTimeHex.substring(10, 12);
                                        String useTime = "";
                                        Integer yearNum = Integer.parseInt(yearHex, 16);
                                        if(yearNum <= 9){
                                            useTime = "200" + yearNum + "-";
                                        }else{
                                            useTime = "20" + yearNum + "-";
                                        }
                                        Integer monthNum = Integer.parseInt(monthHex, 16);
                                        if(monthNum <= 9){
                                            useTime = useTime + "0" + monthNum + "-";
                                        }else{
                                            useTime = useTime + monthNum + "-";
                                        }
                                        Integer dayNum = Integer.parseInt(dayHex, 16);
                                        if(dayNum <= 9){
                                            useTime = useTime + "0" + dayNum + " ";
                                        }else{
                                            useTime = useTime + dayNum + " ";
                                        }
                                        Integer hourNum = Integer.parseInt(hourHex, 16);
                                        if(hourNum <= 9){
                                            useTime = useTime + "0" + hourNum + ":";
                                        }else{
                                            useTime = useTime + hourNum + ":";
                                        }
                                        Integer minuteNum = Integer.parseInt(minuteHex, 16);
                                        if(minuteNum <= 9){
                                            useTime = useTime + "0" + minuteNum + ":";
                                        }else{
                                            useTime = useTime + minuteNum + ":";
                                        }
                                        Integer secondNum = Integer.parseInt(secondHex, 16);
                                        if(secondNum <= 9){
                                            useTime = useTime + "0" + secondNum;
                                        }else{
                                            useTime = useTime + secondNum;
                                        }
                                        ((ArdTankLockPasswordServiceImpl)SpringUtils.getBean("ardTankLockPasswordServiceImpl")).updateArdTankLockPasswordByLockNum(lockNum,password,useTime);
                                    }
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                        return;//强转失败返回
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java
@@ -83,4 +83,6 @@
    public int deleteArdTankLockAndWallByCarIds(@Param("carIds") List<String> carIds);
    public String getIdByLockNum(String lockNum);
    public List<ArdTankLock> selectArdTankLockWithPassword();
}
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockPasswordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.sy.mapper;
import java.util.List;
import com.ruoyi.sy.domain.ArdTankLockPassword;
import org.apache.ibatis.annotations.Param;
/**
 * ç½è½¦é”å¯†ç Mapper接口
 *
 * @author ard
 * @date 2024-07-27
 */
public interface ArdTankLockPasswordMapper
{
    /**
     * æŸ¥è¯¢ç½è½¦é”å¯†ç 
     *
     * @param id ç½è½¦é”å¯†ç ä¸»é”®
     * @return ç½è½¦é”å¯†ç 
     */
    public ArdTankLockPassword selectArdTankLockPasswordById(String id);
    /**
     * æŸ¥è¯¢ç½è½¦é”å¯†ç åˆ—表
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç½è½¦é”å¯†ç é›†åˆ
     */
    public List<ArdTankLockPassword> selectArdTankLockPasswordList(ArdTankLockPassword ardTankLockPassword);
    /**
     * æ–°å¢žç½è½¦é”å¯†ç 
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç»“æžœ
     */
    public int insertArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
    /**
     * ä¿®æ”¹ç½è½¦é”å¯†ç 
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç»“æžœ
     */
    public int updateArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
    /**
     * åˆ é™¤ç½è½¦é”å¯†ç 
     *
     * @param id ç½è½¦é”å¯†ç ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdTankLockPasswordById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ç½è½¦é”å¯†ç 
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdTankLockPasswordByIds(String[] ids);
    public int updateArdTankLockPasswordByLockNum(@Param("lockNum") String lockNum,@Param("password") String password,@Param("useTime") String useTime);
    public int insertArdTankLockPasswordList(@Param("ardTankLockPasswordList") List<ArdTankLockPassword> ardTankLockPasswordList);
    public List<ArdTankLockPassword> getLockPasswordByLockId(String lockId);
    public Long selectLockPasswordTotalBylockId(String lockId);
}
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockPasswordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.ruoyi.sy.service;
import java.util.List;
import java.util.Map;
import com.ruoyi.sy.domain.ArdTankLockPassword;
/**
 * ç½è½¦é”å¯†ç Service接口
 *
 * @author ard
 * @date 2024-07-27
 */
public interface IArdTankLockPasswordService
{
    /**
     * æŸ¥è¯¢ç½è½¦é”å¯†ç 
     *
     * @param id ç½è½¦é”å¯†ç ä¸»é”®
     * @return ç½è½¦é”å¯†ç 
     */
    public ArdTankLockPassword selectArdTankLockPasswordById(String id);
    /**
     * æŸ¥è¯¢ç½è½¦é”å¯†ç åˆ—表
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç½è½¦é”å¯†ç é›†åˆ
     */
    public List<ArdTankLockPassword> selectArdTankLockPasswordList(ArdTankLockPassword ardTankLockPassword);
    /**
     * æ–°å¢žç½è½¦é”å¯†ç 
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç»“æžœ
     */
    public int insertArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
    /**
     * ä¿®æ”¹ç½è½¦é”å¯†ç 
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç»“æžœ
     */
    public int updateArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
    /**
     * æ‰¹é‡åˆ é™¤ç½è½¦é”å¯†ç 
     *
     * @param ids éœ€è¦åˆ é™¤çš„罐车锁密码主键集合
     * @return ç»“æžœ
     */
    public int deleteArdTankLockPasswordByIds(String[] ids);
    /**
     * åˆ é™¤ç½è½¦é”å¯†ç ä¿¡æ¯
     *
     * @param id ç½è½¦é”å¯†ç ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdTankLockPasswordById(String id);
    public int updateArdTankLockPasswordByLockNum(String lockNum, String password, String useTime);
    public Map<String,Object> getLockPasswordByLockId(Map<String,Object> para);
}
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java
@@ -77,5 +77,7 @@
    public void sendLockState(String userId,String syUserId,String syPassword);
    public void getAlarm(String syUserId,String syPassword);
    public void readPassword(String userId,String password);
    //public void getAlarm(String syUserId,String syPassword);
}
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockPasswordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
package com.ruoyi.sy.service.impl;
import java.util.HashMap;
import java.util.List;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Map;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.sy.mapper.ArdTankLockPasswordMapper;
import com.ruoyi.sy.domain.ArdTankLockPassword;
import com.ruoyi.sy.service.IArdTankLockPasswordService;
import javax.annotation.Resource;
/**
 * ç½è½¦é”å¯†ç Service业务层处理
 *
 * @author ard
 * @date 2024-07-27
 */
@Service
public class ArdTankLockPasswordServiceImpl implements IArdTankLockPasswordService {
    @Resource
    private ArdTankLockPasswordMapper ardTankLockPasswordMapper;
    /**
     * æŸ¥è¯¢ç½è½¦é”å¯†ç 
     *
     * @param id ç½è½¦é”å¯†ç ä¸»é”®
     * @return ç½è½¦é”å¯†ç 
     */
    @Override
    public ArdTankLockPassword selectArdTankLockPasswordById(String id) {
        return ardTankLockPasswordMapper.selectArdTankLockPasswordById(id);
    }
    /**
     * æŸ¥è¯¢ç½è½¦é”å¯†ç åˆ—表
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç½è½¦é”å¯†ç 
     */
    @Override
    public List<ArdTankLockPassword> selectArdTankLockPasswordList(ArdTankLockPassword ardTankLockPassword) {
        return ardTankLockPasswordMapper.selectArdTankLockPasswordList(ardTankLockPassword);
    }
    /**
     * æ–°å¢žç½è½¦é”å¯†ç 
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç»“æžœ
     */
    @Override
    public int insertArdTankLockPassword(ArdTankLockPassword ardTankLockPassword) {
                ardTankLockPassword.setId(IdUtils.simpleUUID());
                ardTankLockPassword.setCreateTime(DateUtils.getNowDate());
            return ardTankLockPasswordMapper.insertArdTankLockPassword(ardTankLockPassword);
    }
    /**
     * ä¿®æ”¹ç½è½¦é”å¯†ç 
     *
     * @param ardTankLockPassword ç½è½¦é”å¯†ç 
     * @return ç»“æžœ
     */
    @Override
    public int updateArdTankLockPassword(ArdTankLockPassword ardTankLockPassword) {
        return ardTankLockPasswordMapper.updateArdTankLockPassword(ardTankLockPassword);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç½è½¦é”å¯†ç 
     *
     * @param ids éœ€è¦åˆ é™¤çš„罐车锁密码主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdTankLockPasswordByIds(String[] ids) {
        return ardTankLockPasswordMapper.deleteArdTankLockPasswordByIds(ids);
    }
    /**
     * åˆ é™¤ç½è½¦é”å¯†ç ä¿¡æ¯
     *
     * @param id ç½è½¦é”å¯†ç ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdTankLockPasswordById(String id) {
        return ardTankLockPasswordMapper.deleteArdTankLockPasswordById(id);
    }
    @Override
    public int updateArdTankLockPasswordByLockNum(String lockNum, String password, String useTime) {
        int result = ardTankLockPasswordMapper.updateArdTankLockPasswordByLockNum(lockNum,password,useTime);
        return result;
    }
    @Override
    public Map<String, Object> getLockPasswordByLockId(Map<String,Object> para) {
        String lockId = (String) para.get("lockId");
        //分页属性
        Integer pageNum = (Integer) para.get("pageNum");
        Integer pageSize = (Integer) para.get("pageSize");
        PageHelper.startPage(pageNum, pageSize);//分页
        Map<String,Object> resultMap = new HashMap();
        List<ArdTankLockPassword> resultList = ardTankLockPasswordMapper.getLockPasswordByLockId(lockId);
        Long total =  ardTankLockPasswordMapper.selectLockPasswordTotalBylockId(lockId);
        resultMap.put("list",resultList);
        resultMap.put("total",total);
        return resultMap;
    }
}
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
@@ -1,15 +1,16 @@
package com.ruoyi.sy.service.impl;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;
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.ArdSyCar;
import com.ruoyi.sy.domain.ArdSyUser;
import com.ruoyi.sy.domain.ArdTankLockState;
import com.ruoyi.sy.domain.*;
import com.ruoyi.sy.gps31.PositionContainer;
import com.ruoyi.sy.mapper.*;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.utils.forest.SYClient;
@@ -22,7 +23,6 @@
import java.util.stream.Collectors;
import com.ruoyi.sy.domain.ArdTankLock;
import com.ruoyi.sy.service.IArdTankLockService;
import javax.annotation.Resource;
@@ -59,9 +59,12 @@
    private ArdTankLockStateMapper ardTankLockStateMapper;
    @Resource
    private ArdTankLockPasswordMapper ardTankLockPasswordMapper;
    @Resource
    private SYClient sYClient;
    private Map<String,Thread> alarmMap = new HashMap();//电磁锁历史报警线程容器
    //private Map<String,Thread> alarmMap = new HashMap();//电磁锁历史报警线程容器
    /**
     * æŸ¥è¯¢ç”µç£é”
@@ -636,9 +639,168 @@
            data.put("40002",result);
            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(userId), JSON.toJSONString(data));
        }
        return;
    }
    @Override
    public void readPassword(String userId,String password) {
        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
        String syURL = "";
        if(syURLResult.size() != 0){
            syURL = syURLResult.get(0).getConfigValue();
        }else{
            return;
        }
        String passwordMd5 = DigestUtils.md5Hex(password);
        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
        String sessionId = (String) LogInResult.get("sessionId");
        String finalSyURL = syURL;
        Thread passwordThread = new Thread(syURL){
            @Override
            public void run() {
                List<ArdTankLock> ardTankLockResult = ardTankLockMapper.selectArdTankLockWithPassword();
                for(ArdTankLock ardTankLock : ardTankLockResult){
                    Thread lockThread = new Thread(){//读取密码
                        @Override
                        public void run() {
                            if(ardTankLock.getArdTankLockPasswords().isEmpty()){//无可用密码
                                if(PositionContainer.getCarLockPasswordMap().get(ardTankLock.getLockNum()) != null){//新设置的10组密码
                                    Set<String> passwordSet = PositionContainer.getCarLockPasswordMap().get(ardTankLock.getLockNum());
                                    //设置新密码
                                    String lockNumHead = ardTankLock.getLockNum().substring(0,2);
                                    String lockNumTail = ardTankLock.getLockNum().substring(2,4);
                                    String code = "04";
                                    Integer check = Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt(code, 16);;
                                    for(String password : passwordSet){
                                        String[] passwordArray = password.split("");
                                        for(String p : passwordArray){
                                            check = check + Integer.parseInt(p);
                                        }
                                    }
                                    String checkNum = Integer.toHexString(check);
                                    if(checkNum.length() == 1){
                                        checkNum = "0" + checkNum;
                                    }else if(checkNum.length() > 2){
                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
                                    }
                                    String data = ardTankLock.getLockNum() + "04";
                                    for(String password : passwordSet){
                                        String[] passwordArray = password.split("");
                                        for(String p : passwordArray){
                                            data = data + "0" + p;
                                        }
                                    }
                                    data = data + checkNum;
                                    String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D";
                                    Map<String,Object> syResult = sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
                                    if(((String)syResult.get("rspCode")).equals("0")){
                                        List<ArdTankLockPassword> ardTankLockPasswordList = new ArrayList();
                                        int i = 0;
                                        for(String password : passwordSet){
                                            ArdTankLockPassword ardTankLockPassword = new ArdTankLockPassword();
                                            ardTankLockPassword.setId(IdUtils.simpleUUID());
                                            ardTankLockPassword.setLockId(ardTankLock.getLockNum());//暂存锁编号
                                            ardTankLockPassword.setPassword(password);
                                            ardTankLockPassword.setNo(String.valueOf(i));
                                            ardTankLockPasswordList.add(ardTankLockPassword);
                                            i = i + 1;
                                        }
                                        int result = ardTankLockPasswordMapper.insertArdTankLockPasswordList(ardTankLockPasswordList);
                                        PositionContainer.getCarLockPasswordMap().remove(ardTankLock.getLockNum());
                                    }
                                }else{//读取密码
                                    /*String lockNumHead = ardTankLock.getLockNum().substring(0,2);
                                    String lockNumTail = ardTankLock.getLockNum().substring(2,4);
                                    //计算校验
                                    String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("05", 16));
                                    if(checkNum.length() == 1){
                                        checkNum = "0" + checkNum;
                                    }else if(checkNum.length() > 2){
                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
                                    }
                                    String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "05" + checkNum + "%22%7D";
                                    sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);*/
                                    Set<String> passwordSet = new HashSet();
                                    while(passwordSet.size() != 10){
                                        String password = "";
                                        for(int i = 0;i <= 5;i++){
                                            password = password + String.valueOf(10 * Math.random()).split("\\.")[0];
                                        }
                                        passwordSet.add(password);
                                    }
                                    System.out.println("1111111111111111");
                                    System.out.println(passwordSet);
                                    //设置新密码
                                    String lockNumHead = ardTankLock.getLockNum().substring(0,2);
                                    String lockNumTail = ardTankLock.getLockNum().substring(2,4);
                                    String code = "04";
                                    Integer check = Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt(code, 16);;
                                    for(String password : passwordSet){
                                        String[] passwordArray = password.split("");
                                        for(String p : passwordArray){
                                            check = check + Integer.parseInt(p);
                                        }
                                    }
                                    String checkNum = Integer.toHexString(check);
                                    if(checkNum.length() == 1){
                                        checkNum = "0" + checkNum;
                                    }else if(checkNum.length() > 2){
                                        checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
                                    }
                                    String data = ardTankLock.getLockNum() + "04";
                                    for(String password : passwordSet){
                                        String[] passwordArray = password.split("");
                                        for(String p : passwordArray){
                                            data = data + "0" + p;
                                        }
                                    }
                                    data = data + checkNum;
                                    String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D";
                                    Map<String,Object> syResult = sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
                                    if(((String)syResult.get("rspCode")).equals("0")){
                                        List<ArdTankLockPassword> ardTankLockPasswordList = new ArrayList();
                                        int i = 0;
                                        for(String password : passwordSet){
                                            ArdTankLockPassword ardTankLockPassword = new ArdTankLockPassword();
                                            ardTankLockPassword.setId(IdUtils.simpleUUID());
                                            ardTankLockPassword.setLockId(ardTankLock.getLockNum());//暂存锁编号
                                            ardTankLockPassword.setPassword(password);
                                            ardTankLockPassword.setNo(String.valueOf(i));
                                            ardTankLockPasswordList.add(ardTankLockPassword);
                                            i = i + 1;
                                        }
                                        int result = ardTankLockPasswordMapper.insertArdTankLockPasswordList(ardTankLockPasswordList);
                                    }
                                }
                            }else{
                                String lockNumHead = ardTankLock.getLockNum().substring(0,2);
                                String lockNumTail = ardTankLock.getLockNum().substring(2,4);
                                //计算校验
                                String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("05", 16));
                                if(checkNum.length() == 1){
                                    checkNum = "0" + checkNum;
                                }else if(checkNum.length() > 2){
                                    checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
                                }
                                String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "05" + checkNum + "%22%7D";
                                sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
                            }
                        }
                    };
                    lockThread.start();
                }
            }
        };
        passwordThread.start();
    }
    /*@Override
    public void getAlarm(String syUserId,String syPassword) {
        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
        String syURL = "";
@@ -687,7 +849,7 @@
            thread.start();
            alarmMap.put(ardTankLock.getLockNum(),thread);
        }
    }
    }*/
    public Map<String,Object> sendCmd(String syURL,String userId,String carId,Integer cmdId,String cmd,String paramsStr,String sessionId){
        OkHttpClient okHttpClient = new OkHttpClient();
ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml
@@ -42,6 +42,26 @@
        </association>
    </resultMap>
    <resultMap type="ArdTankLock" id="ArdTankLockWithPasswordResult">
        <result property="id"    column="id"    />
        <result property="lockNum"    column="lock_num"    />
        <result property="lockName"    column="lock_name"    />
        <result property="imgPositionTop"    column="img_position_top"    />
        <result property="imgPositionLeft"    column="img_position_left"    />
        <result property="carId"    column="car_id"    />
        <result property="enable"    column="enable"    />
        <result property="restartState"    column="restart_state"    />
        <result property="onlineTime"    column="online_time"    />
        <collection property="ardTankLockPasswords" ofType="com.ruoyi.sy.domain.ArdTankLockPassword">
            <result property="id"    column="pid"    />
            <result property="lockId"    column="lock_id"    />
            <result property="password"    column="password"    />
            <result property="no"    column="no"    />
            <result property="createTime"    column="create_time"    />
            <result property="useTime"    column="use_time"    />
        </collection>
    </resultMap>
    <sql id="selectArdTankLockVo">
        select id, lock_num, lock_name, img_position_top, img_position_left, car_id, enable, restart_state, online_time from ard_tank_lock
    </sql>
@@ -205,4 +225,12 @@
    <select id="getIdByLockNum" resultType="java.lang.String" parameterType="java.lang.String">
        select id from ard_tank_lock atl where atl.lock_num = #{lockNum}
    </select>
    <select id="selectArdTankLockWithPassword" resultMap="ArdTankLockWithPasswordResult" >
        select atl."id",atl.lock_num,atl.lock_name,atl.img_position_top,
        atl.img_position_left,atl.car_id,atl."enable",atl.restart_state,
        atl.online_time,atlp."id" as pid,atlp.lock_id,atlp."password",
        atlp.create_time,atlp.use_time  from ard_tank_lock atl
        left join ard_tank_lock_password atlp on atl.id = atlp.lock_id and use_time is null
    </select>
</mapper>
ard-work/src/main/resources/mapper/sy/ArdTankLockPasswordMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
<?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.ArdTankLockPasswordMapper">
    <resultMap type="ArdTankLockPassword" id="ArdTankLockPasswordResult">
        <result property="id"    column="id"    />
        <result property="lockId"    column="lock_id"    />
        <result property="password"    column="password"    />
        <result property="no"    column="no"    />
        <result property="createTime"    column="create_time"    />
        <result property="useTime"    column="use_time"    />
    </resultMap>
    <sql id="selectArdTankLockPasswordVo">
        select id, lock_id, password, no, create_time, use_time from ard_tank_lock_password
    </sql>
    <select id="selectArdTankLockPasswordList" parameterType="ArdTankLockPassword" resultMap="ArdTankLockPasswordResult">
        <include refid="selectArdTankLockPasswordVo"/>
        <where>
            <if test="lockId != null  and lockId != ''"> and lock_id = #{lockId}</if>
            <if test="password != null  and password != ''"> and password = #{password}</if>
            <if test="no != null  and no != ''"> and no = #{no}</if>
            <if test="useTime != null  and useTime != ''"> and use_time = #{useTime}</if>
        </where>
    </select>
    <select id="selectArdTankLockPasswordById" parameterType="String" resultMap="ArdTankLockPasswordResult">
        <include refid="selectArdTankLockPasswordVo"/>
        where id = #{id}
    </select>
    <insert id="insertArdTankLockPassword" parameterType="ArdTankLockPassword">
        insert into ard_tank_lock_password
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="lockId != null">lock_id,</if>
            <if test="password != null">password,</if>
            <if test="no != null">no,</if>
            <if test="createTime != null">create_time,</if>
            <if test="useTime != null">use_time,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="lockId != null">#{lockId},</if>
            <if test="password != null">#{password},</if>
            <if test="no != null">#{no},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="useTime != null">#{useTime},</if>
         </trim>
    </insert>
    <update id="updateArdTankLockPassword" parameterType="ArdTankLockPassword">
        update ard_tank_lock_password
        <trim prefix="SET" suffixOverrides=",">
            <if test="lockId != null">lock_id = #{lockId},</if>
            <if test="password != null">password = #{password},</if>
            <if test="no != null">no = #{no},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="useTime != null">use_time = #{useTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdTankLockPasswordById" parameterType="String">
        delete from ard_tank_lock_password where id = #{id}
    </delete>
    <delete id="deleteArdTankLockPasswordByIds" parameterType="String">
        delete from ard_tank_lock_password where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <update id="updateArdTankLockPasswordByLockNum" parameterType="java.lang.String">
        update ard_tank_lock_password set use_time = #{useTime}
        where "password" = #{password}
        and lock_id = (select id from ard_tank_lock where lock_num = #{lockNum})
    </update>
    <insert id="insertArdTankLockPasswordList" >
        insert into ard_tank_lock_password(id,lock_id,password,no,create_time) values
        <foreach collection ="ardTankLockPasswordList" item="ardTankLockPassword" separator =",">
            (#{ardTankLockPassword.id},(select atl.id from ard_tank_lock atl where atl.lock_num = #{ardTankLockPassword.lockId}),
            #{ardTankLockPassword.password},#{ardTankLockPassword.no},to_char(now(), 'YYYY-MM-DD HH24:MI:SS'))
        </foreach>
    </insert>
    <select id="getLockPasswordByLockId" parameterType="java.lang.String" resultMap="ArdTankLockPasswordResult">
        select atlp.id,atlp.lock_id,atlp."password",atlp."no",
        atlp.create_time,coalesce(atlp.use_time,'')  as use_time
        from ard_tank_lock_password atlp
        where lock_id = #{lockId} order by use_time asc,no asc
    </select>
    <select id="selectLockPasswordTotalBylockId" parameterType="java.lang.String" resultType="java.lang.Long">
        select count(*) from ard_tank_lock_password atlp where lock_id = #{lockId}
    </select>
</mapper>