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<DualCrnStateTableVo> list = new ArrayList<>();
|
List<BasDualCrnp> crnps = basDualCrnpService.selectList(new EntityWrapper<BasDualCrnp>().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();
|
}
|
}
|