package com.zy.asrs.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.domain.param.DualCrnCommandParam; import com.zy.asrs.domain.vo.DualCrnStateTableVo; import com.zy.asrs.entity.BasDualCrnp; import com.zy.asrs.service.BasDualCrnpService; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.model.command.DualCrnCommand; import com.zy.core.model.protocol.DualCrnProtocol; import com.zy.core.thread.DualCrnThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @Slf4j @RestController public class DualCrnController { @Autowired private BasDualCrnpService basDualCrnpService; @PostMapping("/dualcrn/table/crn/state") @ManagerAuth(memo = "双工位堆垛机信息表") public R dualCrnStateTable() { List list = new ArrayList<>(); List crnps = basDualCrnpService.selectList(new EntityWrapper().orderBy("crn_no")); for (BasDualCrnp basDualCrnp : crnps) { DualCrnStateTableVo vo = new DualCrnStateTableVo(); vo.setCrnNo(basDualCrnp.getCrnNo()); list.add(vo); DualCrnThread crnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo()); if (crnThread == null) { continue; } DualCrnProtocol p = crnThread.getStatus(); if (p == null) { continue; } vo.setTaskNo(p.getTaskNo()); vo.setTaskNoTwo(p.getTaskNoTwo()); vo.setMode(p.getModeType() == null ? "-" : p.getModeType().desc); vo.setStatus(p.getStatusType() == null ? "-" : p.getStatusType().desc); vo.setStatusTwo(p.getStatusTypeTwo() == null ? "-" : p.getStatusTypeTwo().desc); vo.setLoading(p.getLoaded() != null && p.getLoaded() == 1 ? "有物" : "无物"); vo.setLoadingTwo(p.getLoadedTwo() != null && p.getLoadedTwo() == 1 ? "有物" : "无物"); vo.setBay(p.getBay()); vo.setBayTwo(p.getBayTwo()); vo.setLev(p.getLevel()); vo.setLevTwo(p.getLevelTwo()); vo.setForkOffset(p.getForkPosType() == null ? "-" : p.getForkPosType().desc); vo.setForkOffsetTwo(p.getForkPosTypeTwo() == null ? "-" : p.getForkPosTypeTwo().desc); vo.setLiftPos(p.getLiftPosType() == null ? "-" : p.getLiftPosType().desc); vo.setLiftPosTwo(p.getLiftPosTypeTwo() == null ? "-" : p.getLiftPosTypeTwo().desc); vo.setWalkPos(p.getWalkPos() != null && p.getWalkPos() == 0 ? "在定位" : "不在定位"); vo.setWalkPosTwo(p.getWalkPosTwo() != null && p.getWalkPosTwo() == 0 ? "在定位" : "不在定位"); vo.setTaskReceive(p.getTaskReceive() != null && p.getTaskReceive() == 1 ? "接收" : "无任务"); vo.setTaskReceiveTwo(p.getTaskReceiveTwo() != null && p.getTaskReceiveTwo() == 1 ? "接收" : "无任务"); vo.setXspeed(p.getXSpeed()); vo.setYspeed(p.getYSpeed()); vo.setZspeed(p.getZSpeed()); vo.setXdistance(p.getXDistance()); vo.setYdistance(p.getYDistance()); vo.setXduration(p.getXDuration()); vo.setYduration(p.getYDuration()); vo.setWarnCode(p.getAlarm() == null ? "-" : String.valueOf(p.getAlarm())); if (p.getAlarm() != null && p.getAlarm() > 0) { vo.setDeviceStatus("ERROR"); } else if (p.getTaskNo() != null && p.getTaskNo() > 0 || p.getTaskNoTwo() != null && p.getTaskNoTwo() > 0) { vo.setDeviceStatus("WORKING"); } else if (p.getModeType() != null && "AUTO".equals(p.getModeType().name())) { vo.setDeviceStatus("AUTO"); } else { vo.setDeviceStatus("OFFLINE"); } } return R.ok().add(list); } @PostMapping("/dualcrn/command/take") @ManagerAuth(memo = "双工位堆垛机取放货命令") public R dualCrnCommandTake(@RequestBody DualCrnCommandParam param) { if (Cools.isEmpty(param)) { return R.error("缺少参数"); } Integer crnNo = param.getCrnNo(); String sourceLocNo = param.getSourceLocNo(); String targetLocNo = param.getTargetLocNo(); Integer station = param.getStation(); DualCrnThread crnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, crnNo); if (crnThread == null) { return R.error("线程不存在"); } DualCrnCommand command = crnThread.getPickAndPutCommand(sourceLocNo, targetLocNo, 9999, crnNo, station); MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, command)); return R.ok(); } @PostMapping("/dualcrn/command/pick") @ManagerAuth(memo = "双工位堆垛机取货命令") public R dualCrnCommandPick(@RequestBody DualCrnCommandParam param) { if (Cools.isEmpty(param)) { return R.error("缺少参数"); } Integer crnNo = param.getCrnNo(); String targetLocNo = param.getTargetLocNo(); Integer station = param.getStation(); DualCrnThread crnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, crnNo); if (crnThread == null) { return R.error("线程不存在"); } DualCrnCommand command = crnThread.getPickCommand(targetLocNo, 9999, crnNo, station); MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, command)); return R.ok(); } @PostMapping("/dualcrn/command/put") @ManagerAuth(memo = "双工位堆垛机放货命令") public R dualCrnCommandPut(@RequestBody DualCrnCommandParam param) { if (Cools.isEmpty(param)) { return R.error("缺少参数"); } Integer crnNo = param.getCrnNo(); String targetLocNo = param.getTargetLocNo(); Integer station = param.getStation(); DualCrnThread crnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, crnNo); if (crnThread == null) { return R.error("线程不存在"); } DualCrnCommand command = crnThread.getPutCommand(targetLocNo, 9999, crnNo, station); MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, command)); return R.ok(); } @PostMapping("/dualcrn/command/move") @ManagerAuth(memo = "双工位堆垛机移动命令") public R dualCrnCommandMove(@RequestBody DualCrnCommandParam param) { if (Cools.isEmpty(param)) { return R.error("缺少参数"); } Integer crnNo = param.getCrnNo(); String targetLocNo = param.getTargetLocNo(); Integer station = param.getStation(); DualCrnThread crnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, crnNo); if (crnThread == null) { return R.error("线程不存在"); } DualCrnCommand command = crnThread.getMoveCommand(targetLocNo, 9999, crnNo); if (station != null) { command.setStation(station.shortValue()); } MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, command)); return R.ok(); } @PostMapping("/dualcrn/command/taskComplete") @ManagerAuth(memo = "双工位堆垛机任务完成确认") public R dualCrnCommandTaskComplete(@RequestBody DualCrnCommandParam param) { if (Cools.isEmpty(param)) { return R.error("缺少参数"); } Integer crnNo = param.getCrnNo(); Integer station = param.getStation(); DualCrnThread crnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, crnNo); if (crnThread == null) { return R.error("线程不存在"); } DualCrnCommand command = crnThread.getResetCommand(crnNo, station); MessageQueue.offer(SlaveType.DualCrn, crnNo, new Task(2, command)); return R.ok(); } }