#
Junjie
2024-06-12 0ab215622ebc3e97b5f4d2be9e23470af1d0a209
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/ShuttleProtocol.java
@@ -7,23 +7,21 @@
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.core.utils.RedisUtil;
import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleDeviceStatusType;
import com.zy.asrs.wcs.rcs.entity.BasShuttleErr;
import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.entity.ShuttleDeviceStatus;
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.service.BasShuttleErrService;
import com.zy.asrs.wcs.rcs.service.ShuttleDeviceStatusService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
/**
 * 四向穿梭车
 */
@Slf4j
@Data
public class ShuttleProtocol {
public class ShuttleProtocol implements Cloneable{
    //**********************必须存在属性**********************
    /**
@@ -60,6 +58,11 @@
     * 小车设备状态
     */
    private Integer deviceStatus;
    /**
     * 小车模式,0:手动 1:自动
     */
    private Integer mode;
    /**
     * 当前二维码
@@ -163,9 +166,24 @@
    private Long deviceDataLog = System.currentTimeMillis();
    /**
     * 指令下发时间
     */
    private Long sendTime = 0L;
    /**
     * 最近一次在线时间
     */
    private Long lastOnlineTime = System.currentTimeMillis();
    /**
     * 设备信息
     */
    private Device device;
    /**
     * 扩展字段
     */
    private Object extend;
    /**
     * 设置小车状态
@@ -202,26 +220,19 @@
        return "";
    }
    /**
     * 获取小车空闲状态
     */
    public Boolean getIdle() {
        if (this.deviceStatus == null) {
            return false;
    public String getErrorCode$() {
        if (this.errorCode == null) {
            return "";
        }
        ShuttleDeviceStatusService shuttleDeviceStatusService = SpringUtils.getBean(ShuttleDeviceStatusService.class);
        ShuttleDeviceStatus status = shuttleDeviceStatusService.getOne(new LambdaQueryWrapper<ShuttleDeviceStatus>()
                .eq(ShuttleDeviceStatus::getHostId, this.device.getHostId())
                .eq(ShuttleDeviceStatus::getDevicePlc, this.device.getDevicePlc())
                .eq(ShuttleDeviceStatus::getStatus, 1)
                .eq(ShuttleDeviceStatus::getDeviceStatus, this.deviceStatus));
        if (status != null) {
            if (status.getFlag() != null && status.getFlag().equals(String.valueOf(ShuttleDeviceStatusType.IDLE))) {
                return true;//空闲中
            }
        BasShuttleErrService basShuttleErrService = SpringUtils.getBean(BasShuttleErrService.class);
        BasShuttleErr shuttleErr = basShuttleErrService.getOne(new LambdaQueryWrapper<BasShuttleErr>()
                .eq(BasShuttleErr::getErrorCode, this.errorCode)
                .eq(BasShuttleErr::getHostId, this.device.getHostId())
                .eq(BasShuttleErr::getDevicePlc, this.device.getDevicePlc()));
        if (shuttleErr != null) {
            return this.errorCode + "-" + shuttleErr.getErrName();
        }
        return false;//默认不空闲
        return errorCode;
    }
    public Integer getTaskNo() {
@@ -235,7 +246,7 @@
        return this.taskNo == null ? 0 : this.taskNo;
    }
    public void setTaskNo(Integer taskNo) {
    public synchronized void setSyncTaskNo(Integer taskNo) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        if (null != redisUtil) {
            redisUtil.set(DeviceRedisConstant.SHUTTLE_FLAG + this.shuttleNo, taskNo);
@@ -265,23 +276,14 @@
        return currentLoc.getLocNo();
    }
    // 是否处于空闲待命状态
    public Boolean isIdle() {
        if (this.deviceStatus == null
                || this.pakMk == null
                || this.errorCode == null
                || this.protocolStatus == null
        ) {
            return false;
    @Override
    public ShuttleProtocol clone() {
        try {
            return (ShuttleProtocol) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        boolean res = this.deviceStatus.equals(ShuttleDeviceStatusType.IDLE)
                && this.pakMk
                && !this.errorCode.equals("0")
                && this.getTaskNo() == 0
                && this.protocolStatus.intValue() == ShuttleProtocolStatusType.IDLE.id
                ;
        return res;
        return null;
    }
}