package com.zy.asrs.wcs.asrs.execute; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wcs.core.entity.Task; import com.zy.asrs.wcs.core.utils.RedisUtil; import com.zy.asrs.wcs.core.utils.ShuttleDispatcher; import com.zy.asrs.wcs.core.utils.Utils; import com.zy.asrs.wcs.rcs.cache.SlaveConnection; import com.zy.asrs.wcs.rcs.entity.Device; import com.zy.asrs.wcs.rcs.model.enums.SlaveType; import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; import com.zy.asrs.wcs.rcs.thread.ShuttleThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class ShuttleExecute extends BaseExecute { @Autowired private RedisUtil redisUtil; @Autowired private ShuttleDispatcher shuttleDispatcher; public boolean execute(Task task, JSONObject data, String redisKey) { JSONObject shuttleType = data.getJSONObject("shuttleType"); String oper = shuttleType.getString("shuttleOper"); if (oper.equals("searchIdleShuttle")) { //搜索空闲车 ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task); if (shuttleThread == null) { throw new CoolException("穿梭车不存在"); } //存入缓存 redisSet(redisKey, "shuttleDevice", shuttleThread.getDevice()); return true; } else if (oper.equals("judgeShuttleCurrentTaskLev")) { //判断小车是否在任务楼层 //取出缓存小车 Object shuttleDeviceObj = redisGet(redisKey, "shuttleDevice"); if (shuttleDeviceObj == null) { throw new CoolException("穿梭车缓存为空"); } Device device = JSON.parseObject(String.valueOf(shuttleDeviceObj), Device.class); if (device == null) { throw new CoolException("穿梭车设备不存在"); } ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue()); if (shuttleThread == null) { throw new CoolException("穿梭车不存在"); } ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { throw new CoolException("穿梭车不存在"); } //小车坐标 String shuttleLocNo = shuttleProtocol.getCurrentLocNo(); String taskLocNo = null; if (task.getTaskSts() < 100) { taskLocNo = task.getDestLoc(); } else if (task.getTaskSts() > 100 && task.getTaskSts() < 200) { taskLocNo = task.getOriginLoc(); } // 小车和任务楼层一致 if (Utils.getLev(shuttleLocNo) == Utils.getLev(taskLocNo)) { return true; } else { return false; } } return true; } }