| | |
| | | import com.zy.asrs.wcs.rcs.News; |
| | | import com.zy.asrs.wcs.rcs.cache.SlaveConnection; |
| | | import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant; |
| | | import com.zy.asrs.wcs.rcs.entity.BasShuttleOpt; |
| | | import com.zy.asrs.wcs.rcs.entity.Device; |
| | | import com.zy.asrs.wcs.rcs.model.CommandResponse; |
| | | import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType; |
| | | import com.zy.asrs.wcs.rcs.model.enums.SlaveType; |
| | | import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; |
| | | import com.zy.asrs.wcs.rcs.service.BasShuttleOptService; |
| | | import com.zy.asrs.wcs.rcs.thread.ShuttleThread; |
| | | import com.zy.asrs.wcs.system.entity.Dict; |
| | | import com.zy.asrs.wcs.system.service.DictService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.Optional; |
| | | import java.util.*; |
| | | |
| | | @Component |
| | | public class ShuttleAction { |
| | |
| | | private DictService dictService; |
| | | @Autowired |
| | | private ConveyorDispatcher conveyorDispatcher; |
| | | @Autowired |
| | | private BasShuttleOptService basShuttleOptService; |
| | | |
| | | public synchronized boolean assignWork(Device device, ShuttleAssignCommand assignCommand) { |
| | | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue()); |
| | |
| | | || assignCommand.getTaskMode() == ShuttleTaskModeType.MOVE_LOC_NO.id |
| | | || assignCommand.getTaskMode() == ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id) { |
| | | //下发行驶路径 |
| | | boolean result = shuttleThread.movePath(assignCommand.getNodes(), assignCommand.getDeviceTaskNo()); |
| | | CommandResponse response = shuttleThread.movePath(assignCommand.getNodes(), assignCommand.getDeviceTaskNo()); |
| | | Boolean result = response.getResult(); |
| | | if (!result) { |
| | | return false; |
| | | } |
| | |
| | | ShuttleCommand command = commands.get(commandStep); |
| | | |
| | | // 下发命令 |
| | | if (!write(command, device)) { |
| | | CommandResponse response = write(command, device); |
| | | |
| | | //保存命令日志 |
| | | BasShuttleOpt basShuttleOpt = new BasShuttleOpt(); |
| | | basShuttleOpt.setTaskNo(redisCommand.getTaskNo()); |
| | | basShuttleOpt.setShuttleNo(Integer.parseInt(device.getDeviceNo())); |
| | | |
| | | basShuttleOpt.setMode(ShuttleCommandModeType.get(command.getMode()).desc); |
| | | basShuttleOpt.setSourceLocNo(assignCommand.getSourceLocNo()); |
| | | basShuttleOpt.setDistLocNo(assignCommand.getLocNo()); |
| | | basShuttleOpt.setCommand(JSON.toJSONString(command)); |
| | | basShuttleOpt.setSystemStatus(JSON.toJSONString(shuttleProtocol)); |
| | | basShuttleOpt.setDeviceId(device.getId()); |
| | | basShuttleOpt.setDeviceWrk(String.valueOf(command.getTaskNo())); |
| | | basShuttleOpt.setResponse(response.getMessage());//获取响应 |
| | | basShuttleOpt.setSendTime(new Date());//指令下发时间 |
| | | basShuttleOpt.setSend(response.getResult() ? 1 : 0); |
| | | basShuttleOpt.setHostId(device.getHostId()); |
| | | //保存命令流水 |
| | | basShuttleOptService.save(basShuttleOpt); |
| | | |
| | | if (!response.getResult()) { |
| | | News.error("四向穿梭车命令下发失败,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); |
| | | return false; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private synchronized boolean write(ShuttleCommand command, Device device) { |
| | | private synchronized CommandResponse write(ShuttleCommand command, Device device) { |
| | | CommandResponse response = new CommandResponse(false); |
| | | if (null == command) { |
| | | News.error("四向穿梭车写入命令为空"); |
| | | return false; |
| | | response.setMessage("四向穿梭车写入命令为空"); |
| | | return response; |
| | | } |
| | | ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue()); |
| | | boolean result = false; |
| | | if (command.getMode() == ShuttleCommandModeType.MOVE.id |
| | | || command.getMode() == ShuttleCommandModeType.IN_LIFT.id |
| | | || command.getMode() == ShuttleCommandModeType.OUT_LIFT.id) {//移动 |
| | | result = shuttleThread.move(command); |
| | | response = shuttleThread.move(command); |
| | | } else if (command.getMode() == ShuttleCommandModeType.PALLET_LIFT.id |
| | | || command.getMode() == ShuttleCommandModeType.PALLET_DOWN.id) {//顶升 |
| | | result = shuttleThread.lift(command); |
| | | response = shuttleThread.lift(command); |
| | | } else if (command.getMode() == ShuttleCommandModeType.CHARGE_OPEN.id |
| | | || command.getMode() == ShuttleCommandModeType.CHARGE_CLOSE.id) {//充电 |
| | | result = shuttleThread.charge(command); |
| | | response = shuttleThread.charge(command); |
| | | } else if (command.getMode() == ShuttleCommandModeType.RESET.id) {//复位 |
| | | result = shuttleThread.reset(command); |
| | | response = shuttleThread.reset(command); |
| | | } else if (command.getMode() == ShuttleCommandModeType.UPDATE_LOCATION.id) {//更新坐标 |
| | | result = shuttleThread.updateLocation(command); |
| | | response = shuttleThread.updateLocation(command); |
| | | } |
| | | |
| | | News.info("四向穿梭车命令下发,穿梭车号={},任务数据={}", device.getDeviceNo(), JSON.toJSON(command)); |
| | | return result; |
| | | // News.info("四向穿梭车命令下发,穿梭车号={},任务数据={}", device.getDeviceNo(), JSON.toJSON(command)); |
| | | return response; |
| | | } |
| | | |
| | | } |