whyclxw
2024-12-16 c85948fb948c9cd4b8057b3f084c1b1bf6aeaa70
锁具控制
9个文件已添加
441 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/LockCtlLogController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/LockRtController.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/LockCmd.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/LockCtlLogMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/LockRtMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lock_ram/LockCtlLog.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_lock_ram/LockRt.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/LockCtlLogService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/LockRtService.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/LockCtlLogController.java
New file
@@ -0,0 +1,15 @@
package com.whyc.controller;
import com.whyc.service.LockCtlLogService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(tags = "开锁日志")
@RequestMapping("lockLog")
public class LockCtlLogController {
    @Autowired
    private LockCtlLogService service;
}
src/main/java/com/whyc/controller/LockRtController.java
New file
@@ -0,0 +1,62 @@
package com.whyc.controller;
import com.whyc.dto.Response;
import com.whyc.service.LockInfService;
import com.whyc.service.LockRtService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(tags = "锁具控制")
@RequestMapping("lockRt")
public class LockRtController {
    @Autowired
    private LockRtService service;
    @ApiOperation(value = "查询锁的实时数据")
    @GetMapping("getLockRt")
    public Response getLockRt(@RequestParam Integer lockId){
        return service.getLockRt(lockId);
    }
    @ApiOperation(value = "清空所有授权ID卡")
    @GetMapping("cancleIdCard")
    public Response cancleIdCard(@RequestParam Integer lockId){
        return service.cancleIdCard(lockId);
    }
    @ApiOperation(value = "远程开锁")
    @GetMapping("lockOpen")
    public Response lockOpen(@RequestParam Integer lockId){
        return service.lockOpen(lockId);
    }
    @ApiOperation(value = "远程重启")
    @GetMapping("lockReStart")
    public Response lockReStart(@RequestParam Integer lockId){
        return service.lockReStart(lockId);
    }
    @ApiOperation(value = "设置锁具地址:lock_addr_set[锁具地址(1-255)]")
    @GetMapping("controllLockAddrSet")
    public Response controllLockAddrSet(@RequestParam Integer lockId,@RequestParam Integer lockAddrSet){
        return service.controllLockAddrSet(lockId,lockAddrSet);
    }
    @ApiOperation(value = "添加授权卡ID:id_card_set[ID卡号码]")
    @GetMapping("addIdCardSet")
    public Response addIdCardSet(@RequestParam Integer lockId,@RequestParam Integer idCardSet){
        return service.addIdCardSet(lockId,idCardSet);
    }
    @ApiOperation(value = "移除授权卡ID:id_card_set[ID卡号码]")
    @GetMapping("delIdCardSet")
    public Response delIdCardSet(@RequestParam Integer lockId,@RequestParam Integer idCardSet){
        return service.delIdCardSet(lockId,idCardSet);
    }
}
src/main/java/com/whyc/dto/LockCmd.java
New file
@@ -0,0 +1,16 @@
package com.whyc.dto;
public class LockCmd {
    public static final int CMD_ClearIdCard    = 0x10;            //清空所有授权卡
    public static final int CMD_ClearIdCard_Ack    = 0x11;        //清空所有授权卡成功
    public static final int CMD_REMOTE_OPEN_Lock    = 0x12;    //远程开锁
    public static final int CMD_REMOTE_OPEN_Lock_Ack    = 0x13;    //远程开锁成功
    public static final int CMD_REMOTE_ReStart    = 0x14;        //远程重启
    public static final int CMD_REMOTE_ReStart_Ack    = 0x15;    //远程重启成功
    public static final int CMD_SetLockAddr    = 0x16;            //设置锁具地址
    public static final int CMD_SetLockAddr_Ack    = 0x17;        //设置锁具地址成功
    public static final int CMD_AddIdCard    = 0x18;            //添加授权卡ID
    public static final int CMD_AddIdCard_Ack= 0x19;        //添加授权卡ID成功
    public static final int CMD_RemoveIdCard    = 0x20;        //移除授权卡ID
    public static final int CMD_RemoveIdCard_Ack= 0x21;        //移除授权卡ID成功
}
src/main/java/com/whyc/mapper/LockCtlLogMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.db_lock_ram.LockCtlLog;
public interface LockCtlLogMapper extends CustomMapper<LockCtlLog>{
}
src/main/java/com/whyc/mapper/LockRtMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.db_lock_ram.LockRt;
public interface LockRtMapper extends CustomMapper<LockRt>{
}
src/main/java/com/whyc/pojo/db_lock_ram/LockCtlLog.java
New file
@@ -0,0 +1,56 @@
package com.whyc.pojo.db_lock_ram;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 电子锁远程操作日志
 * </p>
 *
 * @author lxw
 * @since 2024-12-16
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lock_ram",value ="tb_lock_ctl_log")
@ApiModel(value="LockCtlLog对象", description="电子锁远程操作日志")
public class LockCtlLog implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "电子锁ID")
    private Integer lockId;
    @ApiModelProperty(value = "操作类型[1-清空所有授权ID卡 2-远程开锁  3-远程重启 4-设置锁具地址 5-添加授权ID 6-移除授权ID]")
    private Integer ctlType;
    @ApiModelProperty(value = "操作结果[0-失败  1-成功]")
    private Integer ctlResult;
    @ApiModelProperty(value = "操作时间")
    private Date ctlTime;
    @ApiModelProperty(value = "添加或者移除的授权ID卡号")
    private Integer ctlIdCard;
}
src/main/java/com/whyc/pojo/db_lock_ram/LockRt.java
New file
@@ -0,0 +1,92 @@
package com.whyc.pojo.db_lock_ram;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 电子锁实时状态表
 * </p>
 *
 * @author lxw
 * @since 2024-12-16
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema = "db_lock_ram",value ="tb_lock_rt")
@ApiModel(value="LockRt对象", description="电子锁实时状态表")
public class LockRt implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "自增主键")
    @TableId(value = "num", type = IdType.AUTO)
    private Long num;
    @ApiModelProperty(value = "锁具ID")
    private Integer lockId;
    @ApiModelProperty(value = "更新时间")
    private Date recordTime;
    @ApiModelProperty(value = "gprs模块SN码")
    private String gprsSn;
    @ApiModelProperty(value = "设备IP地址")
    private String clientIp;
    @ApiModelProperty(value = "当前锁已授权卡数量")
    private Integer alreadyIdCount;
    @ApiModelProperty(value = "授权卡数量存储上限")
    private Integer maxIdCount;
    @ApiModelProperty(value = "电子锁状态[0-关 1-开]")
    private Integer lockState;
    @ApiModelProperty(value = "软件版本号")
    private String lockVersion;
    @ApiModelProperty(value = "上一次开锁方式[0-485开锁 1-刷卡开锁 2-蓝牙开锁 3-DI开锁]")
    private Integer unlockType;
    @ApiModelProperty(value = "上一次刷开开锁卡号[仅刷开开锁时有效]")
    private Long unlockId;
    @ApiModelProperty(value = "设备地址")
    private Integer lockAddr;
    @ApiModelProperty(value = "通信计数")
    private Integer commCount;
    @ApiModelProperty(value = "总错误计数")
    private Integer errTolCount;
    @ApiModelProperty(value = "连续错误计数")
    private Integer errCount;
    @ApiModelProperty(value = "控制命令")
    private Integer opCmd;
    @ApiModelProperty(value = "授权ID卡号")
    private Integer idCardSet;
    @ApiModelProperty(value = "设置设备地址[慎用]")
    private Integer lockAddrSet;
}
src/main/java/com/whyc/service/LockCtlLogService.java
New file
@@ -0,0 +1,11 @@
package com.whyc.service;
import com.whyc.mapper.LockCtlLogMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class LockCtlLogService {
    @Autowired(required = false)
    private LockCtlLogMapper mapper;
}
src/main/java/com/whyc/service/LockRtService.java
New file
@@ -0,0 +1,177 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.whyc.dto.LockCmd;
import com.whyc.dto.Response;
import com.whyc.mapper.LockRtMapper;
import com.whyc.pojo.db_lock_ram.LockRt;
import com.whyc.util.ActionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class LockRtService {
    @Autowired(required = false)
    private LockRtMapper mapper;
    //机房命令操作设备时的cmd和ack校验
    public boolean sendCmdToLock(int cmd, int lockId) {
        int m_cmd = cmd;
        int m_cmd_ack = cmd;
        switch (m_cmd) {
            case LockCmd.CMD_ClearIdCard:
                m_cmd_ack = LockCmd. CMD_ClearIdCard_Ack;
                break;
            case LockCmd.CMD_REMOTE_OPEN_Lock:
                m_cmd_ack = LockCmd.CMD_REMOTE_OPEN_Lock_Ack;
                break;
            case LockCmd.CMD_REMOTE_ReStart:
                m_cmd_ack = LockCmd. CMD_REMOTE_ReStart_Ack;
                break;
            case LockCmd.CMD_SetLockAddr:
                m_cmd_ack = LockCmd.CMD_SetLockAddr_Ack;
                break;
            case LockCmd.CMD_AddIdCard:
                m_cmd_ack = LockCmd.CMD_AddIdCard_Ack;
                break;
            case LockCmd.CMD_RemoveIdCard:
                m_cmd_ack = LockCmd.CMD_RemoveIdCard_Ack;
                break;
            default:
                return false;
        }
        UpdateWrapper updateWrapper=new UpdateWrapper();
        updateWrapper.set("op_cmd",m_cmd);
        updateWrapper.eq("power_id",lockId);
        int flag=mapper.update((LockRt) ActionUtil.objeNull,updateWrapper);
        boolean res_exe = false;
        if(flag>0)
        {
            PageHelper.startPage(1,1);
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.eq("lokc_id",lockId);
            for(int n=0; n<40; n++)
            {
                LockRt rt=mapper.selectOne(queryWrapper);
                if(rt!=null){
                    if(rt.getOpCmd()!=cmd){
                        if(rt.getOpCmd()==m_cmd_ack){
                            res_exe = true;
                            break;
                        }else{
                            res_exe = false;
                            break;
                        }
                    }
                    try {
                        Thread.sleep(250);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else {
                    break;
                }
            }
        }
        return res_exe;
    }
    //查询锁的实时数据
    public Response getLockRt(Integer lockId) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("lokc_id",lockId);
        wrapper.last("limti 1");
        LockRt rt=mapper.selectOne(wrapper);
        return new Response().setII(1,rt!=null,rt,"查询锁的实时数据");
    }
    //清空所有授权ID卡
    public Response cancleIdCard(Integer lockId) {
        boolean bl=sendCmdToLock(LockCmd.CMD_ClearIdCard,lockId);
        return new Response().set(1,bl, bl == true ? "清空所有授权ID卡成功!" : "清空所有授权ID卡失败,请检查网络!");
    }
    //远程开锁
    public Response lockOpen(Integer lockId) {
        boolean bl=sendCmdToLock(LockCmd.CMD_REMOTE_OPEN_Lock,lockId);
        return new Response().set(1,bl, bl == true ? "远程开锁成功!" : "远程开锁失败,请检查网络!");
    }
    //远程重启
    public Response lockReStart(Integer lockId) {
        boolean bl=sendCmdToLock(LockCmd.CMD_REMOTE_ReStart,lockId);
        return new Response().set(1,bl, bl == true ? "远程重启成功!" : "远程重启失败,请检查网络!");
    }
    //设置锁具地址:lock_addr_set[锁具地址(1-255)
    public Response controllLockAddrSet(Integer lockId, Integer lockAddrSet) {
        boolean bl = false;
        String msg = "";
        UpdateWrapper updateWrapper=new UpdateWrapper();
        updateWrapper.set("lock_addr_set",lockAddrSet);
        updateWrapper.eq("lokc_id",lockId);
        int flag=mapper.update((LockRt) ActionUtil.objeNull,updateWrapper);
        if (flag>0) {
            bl=sendCmdToLock(LockCmd.CMD_SetLockAddr,lockId);
            if (bl) {
                flag = 1;
                msg = "设置锁具地址成功!";
            } else {
                flag = 0;
                msg = "设设置锁具地址失败,请检查网络!";
            }
        } else {
            flag = 0;
            msg = "设置锁具地址失败!";
        }
        return new Response().set(1,flag>0?true:false,msg);
    }
    //添加授权卡ID:id_card_set[ID卡号码]
    public Response addIdCardSet(Integer lockId, Integer idCardSet) {
        boolean bl = false;
        String msg = "";
        UpdateWrapper updateWrapper=new UpdateWrapper();
        updateWrapper.set("id_card_set",idCardSet);
        updateWrapper.eq("lokc_id",lockId);
        int flag=mapper.update((LockRt) ActionUtil.objeNull,updateWrapper);
        if (flag>0) {
            bl=sendCmdToLock(LockCmd.CMD_AddIdCard,lockId);
            if (bl) {
                flag = 1;
                msg = "添加授权卡ID成功!";
            } else {
                flag = 0;
                msg = "添加授权卡ID失败,请检查网络!";
            }
        } else {
            flag = 0;
            msg = "添加授权卡ID失败!";
        }
        return new Response().set(1,flag>0?true:false,msg);
    }
    //移除授权卡ID:id_card_set[ID卡号码]
    public Response delIdCardSet(Integer lockId, Integer idCardSet) {
        boolean bl = false;
        String msg = "";
        UpdateWrapper updateWrapper=new UpdateWrapper();
        updateWrapper.set("id_card_set",idCardSet);
        updateWrapper.eq("lokc_id",lockId);
        int flag=mapper.update((LockRt) ActionUtil.objeNull,updateWrapper);
        if (flag>0) {
            bl=sendCmdToLock(LockCmd.CMD_RemoveIdCard,lockId);
            if (bl) {
                flag = 1;
                msg = "移除授权卡ID成功!";
            } else {
                flag = 0;
                msg = "移除授权卡ID失败,请检查网络!";
            }
        } else {
            flag = 0;
            msg = "移除授权卡ID失败!";
        }
        return new Response().set(1,flag>0?true:false,msg);
    }
}