package com.zy.core.model.protocol; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.asrs.entity.BasSte; import com.zy.asrs.service.BasSteService; import com.zy.core.News; import com.zy.core.enums.SteHisTaskStatusType; import com.zy.core.enums.SteLocaType; import com.zy.core.enums.SteStatusType; import lombok.Data; import lombok.extern.slf4j.Slf4j; /** * Created by vincent on 2020/8/7 */ @Slf4j @Data public class SteProtocol { /** * 设备号 */ private Short steNo; /** * 1 = 联机模式 * 0 = 脱机模式 */ public Short mode; /** IDLE(0, "空闲"), MOVING(1, "作业中"), SOS(2, "报警"), WAITING(10, "等待确认"), OFF_LINE(-1, "未知"), OTHER(100, "其它"), */ public Short status; public SteStatusType statusType; /** * 任务号 */ public Short taskNo = 0; /** * 正在执行任务 */ public Boolean execute; /** * 任务完成,等待WCS确认 */ public Boolean waiting; /** * 异常码1 */ public Short alarm; /** * 异常码2 */ public Short alarm0; /** * 电池电量 */ public Float charge = 0.0F; public void setCharge(Float charge) { if (charge >= 0) { this.charge = charge; } } /** * 满电 */ public Boolean fullCharge = false; /** * 低电量 */ public Boolean lowCharge; /** * 电池馈电 0,欠电,1低电 2满电 */ public Short feed; /** * 当前位置 1,近点,2远点,3A点,4B点 * NONE(0, "未知"), * POINT20(20, "A面平移车"), * POINT21(21, "硫化罐A端"), * POINT22(22, "硫化罐B端"), * POINT23(23, "B面平移车"), * POINT24(24, "水槽A端"), * POINT25(25, "水槽B端"), * POINT26(26, "B端输送线"), */ public Short loca; public SteLocaType locaType; /** * 当前位置 1,近点,2远点,3A点,4B点 */ public Short locaStart; public SteLocaType locaStartType; /** * 当前位置 1,近点,2远点,3A点,4B点 */ public Short locaEnd; public SteLocaType locaEndType; /** * 近点距离 */ public Double closer; /** * 当前速度 */ public Double speed = 0.0D; /** * 高低位 0,低位,1高位 */ public Short pos; /** * 有货 0,没货,1有货 */ public Short load; /** * 在轨道上 0不在,1在 */ public Short track; /** * 任务类型 */ public Short taskType; /** * 排 */ public Short row; /** * 列 */ public Short bay; /** * 层 */ public Short lev; /** * 过账指令任务号 */ public Integer hisTaskNo; /** * 过账指令状态 * 0初始 1执行完成 2删除 */ public Short hisTaskStatus; public SteHisTaskStatusType hisTaskStatusType; /** * 盘点数量 */ public Short checkQty; /** * 就绪状态 0未就绪 1就绪 */ public Short ready; /** * 打开充电桩号 */ public Short chargeNo; /** * 心跳指令 1-2每秒切换一次 */ public Short heart; /** * 堆垛机禁止运行 1运行,0禁止 */ public Short crnStopRun; /** * 堆垛机禁止伸叉 1运行,0禁止 */ public Short crnStopFork; /** * 堆垛机搬移允许 0不允许 1允许 */ public Short crnAllowRun; /** * 充电状态 1:在充电;0:不在充电 */ private Short chargeStatus = -1; // 入库取空 private Boolean inEmpty; // 出库取空 private Boolean outEmpty; // 充电桩 private Boolean steCharge; public void setStatus(Short status){ this.status = status; this.statusType = SteStatusType.get(status); } public void setStatus(SteStatusType type){ this.statusType = type; this.status = SteStatusType.get(type).id.shortValue(); } public void setLoca(Short loca){ this.loca = loca; this.locaType = SteLocaType.get(loca); } public void setLoca(SteLocaType type){ this.locaType = type; this.loca = SteLocaType.get(type).id.shortValue(); } public void setLocaStart(Short locaStart){ this.locaStart = locaStart; this.locaStartType = SteLocaType.get(locaStart); } public void setLocaStart(SteLocaType type){ this.locaStartType = type; this.locaStart = SteLocaType.get(type).id.shortValue(); } public void setLocaEnd(Short locaEnd){ this.locaEnd = locaEnd; this.locaEndType = SteLocaType.get(locaEnd); } public void setLocaEnd(SteLocaType type){ this.locaEndType = type; this.locaEnd = SteLocaType.get(type).id.shortValue(); } public void setHisTaskStatus(Short hisTaskStatus){ this.hisTaskStatus = hisTaskStatus; this.hisTaskStatusType = SteHisTaskStatusType.get(hisTaskStatus); } public void setHisTaskStatus(SteHisTaskStatusType type){ this.hisTaskStatusType = type; this.hisTaskStatus = SteHisTaskStatusType.get(type).id.shortValue(); } /** * 最近一次入出库类型 * I:入库 * O:出库 */ private String lastIo = "I"; private String pakMk = "-"; public BasSte toSqlModel(BasSte basSte){ if (alarm!=null) { basSte.setSteErr(alarm.longValue()); } basSte.setWrkNo(taskNo.intValue()); // if (basSte.getPakMk().equals("N")) { // if (!Cools.isEmpty(row)) { // basSte.setRow(row.intValue()); // } // if (!Cools.isEmpty(bay)) { // basSte.setBay(bay.intValue()); // } // if (!Cools.isEmpty(lev)) { // basSte.setLev(lev.intValue()); // } // } return basSte; } // 是否处于空闲待命状态 public Boolean isIdle() { boolean res = this.statusType.equals(SteStatusType.IDLE) && this.mode == 1 && this.pakMk.equals("N") && !isAlarm() && this.chargeStatus == 0 && isEnable() ; if (!res) { return res; } else { // 电量 try { String chargeLine = SpringUtils.getBean(BasSteService.class).selectById(this.steNo).getChargeLine(); return charge > Float.parseFloat(chargeLine); } catch (Exception e) { News.error("fail", e); return false; } } } // 是否处于报警状态 public Boolean isAlarm() { return this.alarm > 1; } public Boolean isEnable() { if (Cools.isEmpty(row, bay, lev)) { return false; } return row > 0 && bay > 0 && lev > 0; } }